packages feed

hasquant 0.7.0.0 → 0.8.0.0

raw patch · 111 files changed

+28386/−11110 lines, 111 filesdep ~timedep ~vectorPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: time, vector

API changes (from Hackage documentation)

- QuantLib.Instrument.Swap: instance QuantLib.Instrument.Swap.HasFairRate QuantLib.Internal.Type.OvernightIndexedSwap
- QuantLib.Instrument.Swap: instance QuantLib.Instrument.Swap.HasFairSpread QuantLib.Internal.Type.OvernightIndexedSwap
- QuantLib.Instrument.Swap: instance QuantLib.Instrument.Swap.HasFixedLeg QuantLib.Internal.Type.OvernightIndexedSwap
- QuantLib.PricingEngine: data PricingEngine
- QuantLib.TermStructure.Yield: depositRateHelperFromIndex :: GenQuote q -> GenIborIndex ibor -> IO RateHelper
- QuantLib.TermStructure.Yield: fxSwapRateHelperBetweenDates :: GenQuote q1 -> GenQuote q2 -> Day -> Day -> Bool -> GenYieldTermStructure y -> IO RateHelper
- QuantLib.TermStructure.Yield: oisRateHelperBetweenDates :: Day -> Day -> GenQuote q -> OvernightIborIndex -> Maybe (GenYieldTermStructure y) -> IO OISRateHelper
- QuantLib.TermStructure.Yield: oisRateHelperBetweenDatesWithOptions :: Day -> Day -> GenQuote q -> OvernightIborIndex -> Maybe (GenYieldTermStructure y) -> OISRateHelperOpts m -> IO OISRateHelper
- QuantLib.TermStructure.Yield: swapRateHelperFromConventions :: GenQuote q1 -> (Int, TimeUnit) -> Calendar -> Frequency -> BusinessDayConvention -> DayCounter -> GenIborIndex ibor -> Maybe (GenQuote q2) -> (Int, TimeUnit) -> Maybe (GenYieldTermStructure y) -> Maybe Word -> PillarChoice -> Maybe Day -> Bool -> Maybe Bool -> Maybe BusinessDayConvention -> Maybe FloatingRateCouponPricer -> IO SwapRateHelper
+ QuantLib.CashFlow: ClosestStubIndex :: !NonEmpty (GenIborIndex ibor) -> StubIndexSelection ibor
+ QuantLib.CashFlow: FxReset :: Day -> Day -> FxReset
+ QuantLib.CashFlow: FxResetConvention :: Word -> Maybe Calendar -> FxResetConvention
+ QuantLib.CashFlow: InterpolatedStubIndexes :: !NonEmpty (GenIborIndex ibor) -> StubIndexSelection ibor
+ QuantLib.CashFlow: [fxResetFixingDate] :: FxReset -> Day
+ QuantLib.CashFlow: [fxResetSettlementDate] :: FxReset -> Day
+ QuantLib.CashFlow: [ilgStubIndexSelection] :: IborLegOpts ibor2 -> Maybe (StubIndexSelection ibor2)
+ QuantLib.CashFlow: class HasFxResetPricer cf
+ QuantLib.CashFlow: couponNominal :: GenCoupon c -> IO Double
+ QuantLib.CashFlow: data FxReset
+ QuantLib.CashFlow: data FxResetConvention
+ QuantLib.CashFlow: data StubIndexSelection ibor
+ QuantLib.CashFlow: discountingFxResetPricer :: Currency -> Currency -> GenYieldTermStructure y1 -> GenYieldTermStructure y2 -> GenQuote q -> Bool -> Maybe Day -> IO FxResetPricer
+ QuantLib.CashFlow: fixingDependencies :: GenLeg l -> IO [(String, Day)]
+ QuantLib.CashFlow: fxResetCoupon :: GenFloatingRateCoupon frc -> Double -> FxReset -> IO FxResetCoupon
+ QuantLib.CashFlow: fxResetNotionalExchange :: Day -> Double -> Maybe FxReset -> Maybe FxReset -> IO FxResetNotionalExchange
+ QuantLib.CashFlow: fxResetObservation :: FxResetConvention -> Day -> IO FxReset
+ QuantLib.CashFlow: fxResetRate :: FxResetPricer -> FxReset -> IO Double
+ QuantLib.CashFlow: fxResetValueDate :: FxResetConvention -> Day -> IO Day
+ QuantLib.CashFlow: instance GHC.Classes.Eq QuantLib.CashFlow.FxReset
+ QuantLib.CashFlow: instance GHC.Internal.Read.Read QuantLib.CashFlow.FxReset
+ QuantLib.CashFlow: instance GHC.Internal.Show.Show QuantLib.CashFlow.FxReset
+ QuantLib.CashFlow: instance QuantLib.CashFlow.HasFxResetPricer QuantLib.Internal.Type.FxResetCoupon
+ QuantLib.CashFlow: instance QuantLib.CashFlow.HasFxResetPricer QuantLib.Internal.Type.FxResetNotionalExchange
+ QuantLib.CashFlow: setFxResetLegPricer :: GenLeg l -> FxResetPricer -> IO ()
+ QuantLib.CashFlow: setFxResetPricer :: HasFxResetPricer cf => cf -> FxResetPricer -> IO ()
+ QuantLib.CashFlow: stubIborCoupon :: Day -> Double -> Day -> Day -> Word -> Maybe (StubIndexSelection ibor) -> Double -> Double -> Maybe Day -> Maybe Day -> Maybe DayCounter -> Bool -> Maybe Day -> BusinessDayConvention -> IO IborCoupon
+ QuantLib.CashFlow: type FxResetCoupon = GenFloatingRateCoupon CFxResetCoupon
+ QuantLib.CashFlow: type FxResetNotionalExchange = GenCashFlow CFxResetNotionalExchange
+ QuantLib.CashFlow: type FxResetPricer = Standalone CFxResetPricer
+ QuantLib.Context: CallbackResultLength :: Int -> Int -> Error
+ QuantLib.Context: SettingsSnapshot :: Maybe Day -> Bool -> Maybe Bool -> Bool -> Bool -> Bool -> SettingsSnapshot
+ QuantLib.Context: UnsupportedQuantLibVersion :: String -> String -> String -> Error
+ QuantLib.Context: [snapshotEnforceTodaysHistoricFixings] :: SettingsSnapshot -> Bool
+ QuantLib.Context: [snapshotEvaluationDate] :: SettingsSnapshot -> Maybe Day
+ QuantLib.Context: [snapshotIncludeReferenceDateEvents] :: SettingsSnapshot -> Bool
+ QuantLib.Context: [snapshotIncludeTodaysCashFlows] :: SettingsSnapshot -> Maybe Bool
+ QuantLib.Context: [snapshotUpdatesDeferred] :: SettingsSnapshot -> Bool
+ QuantLib.Context: [snapshotUpdatesEnabled] :: SettingsSnapshot -> Bool
+ QuantLib.Context: captureSettings :: IO SettingsSnapshot
+ QuantLib.Context: data SettingsSnapshot
+ QuantLib.Context: instance GHC.Classes.Eq QuantLib.Context.SettingsSnapshot
+ QuantLib.Context: instance GHC.Internal.Show.Show QuantLib.Context.SettingsSnapshot
+ QuantLib.Context: restoreSettings :: SettingsSnapshot -> IO ()
+ QuantLib.Index: fixingHistoryNameKey :: String -> IO String
+ QuantLib.Index: name :: GenIndex idx -> IO String
+ QuantLib.Instrument.Swap: ClosestStubIndex :: !NonEmpty (GenIborIndex ibor) -> StubIndexSelection ibor
+ QuantLib.Instrument.Swap: InterpolatedStubIndexes :: !NonEmpty (GenIborIndex ibor) -> StubIndexSelection ibor
+ QuantLib.Instrument.Swap: MtMCrossCurrencyBasisSwapOpts :: Word -> Maybe Calendar -> Int -> Int -> BusinessDayConvention -> BusinessDayConvention -> Bool -> OvernightObservation -> RateAveragingType -> Bool -> OvernightObservation -> RateAveragingType -> Bool -> Maybe Bool -> Maybe (StubIndexSelection ibor3) -> Maybe (StubIndexSelection ibor4) -> MtMCrossCurrencyBasisSwapOpts ibor3 ibor4
+ QuantLib.Instrument.Swap: PayFxBaseCurrency :: MtmCrossCurrencySwapType
+ QuantLib.Instrument.Swap: ReceiveFxBaseCurrency :: MtmCrossCurrencySwapType
+ QuantLib.Instrument.Swap: [cccbsPayStubIndexSelection] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Maybe (StubIndexSelection ibor3)
+ QuantLib.Instrument.Swap: [cccbsPaymentLagOnNotionalExchanges] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Bool
+ QuantLib.Instrument.Swap: [cccbsRecStubIndexSelection] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Maybe (StubIndexSelection ibor4)
+ QuantLib.Instrument.Swap: [cccbsUseIndexedCoupons] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Maybe Bool
+ QuantLib.Instrument.Swap: [mtmFxBaseAveragingMethod] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> RateAveragingType
+ QuantLib.Instrument.Swap: [mtmFxBaseCompoundSpread] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Bool
+ QuantLib.Instrument.Swap: [mtmFxBaseObservation] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> OvernightObservation
+ QuantLib.Instrument.Swap: [mtmFxBasePaymentConvention] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> BusinessDayConvention
+ QuantLib.Instrument.Swap: [mtmFxBasePaymentLag] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Int
+ QuantLib.Instrument.Swap: [mtmFxBaseStubIndexSelection] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Maybe (StubIndexSelection ibor3)
+ QuantLib.Instrument.Swap: [mtmFxQuoteAveragingMethod] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> RateAveragingType
+ QuantLib.Instrument.Swap: [mtmFxQuoteCompoundSpread] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Bool
+ QuantLib.Instrument.Swap: [mtmFxQuoteObservation] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> OvernightObservation
+ QuantLib.Instrument.Swap: [mtmFxQuotePaymentConvention] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> BusinessDayConvention
+ QuantLib.Instrument.Swap: [mtmFxQuotePaymentLag] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Int
+ QuantLib.Instrument.Swap: [mtmFxQuoteStubIndexSelection] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Maybe (StubIndexSelection ibor4)
+ QuantLib.Instrument.Swap: [mtmFxResetFixingCalendar] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Maybe Calendar
+ QuantLib.Instrument.Swap: [mtmFxResetFixingDays] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Word
+ QuantLib.Instrument.Swap: [mtmTelescopicValueDates] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Bool
+ QuantLib.Instrument.Swap: [mtmUseIndexedCoupons] :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Maybe Bool
+ QuantLib.Instrument.Swap: class HasCrossCurrencyResults s
+ QuantLib.Instrument.Swap: class HasFairLegSpreads s
+ QuantLib.Instrument.Swap: data MtMCrossCurrencyBasisSwapOpts ibor3 ibor4
+ QuantLib.Instrument.Swap: data MtmCrossCurrencySwapType
+ QuantLib.Instrument.Swap: data StubIndexSelection ibor
+ QuantLib.Instrument.Swap: defaultMtmCrossCurrencyBasisSwapOpts :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4
+ QuantLib.Instrument.Swap: fairFxBaseSpread :: MtMCrossCurrencyBasisSwap -> IO Double
+ QuantLib.Instrument.Swap: fairFxQuoteSpread :: MtMCrossCurrencyBasisSwap -> IO Double
+ QuantLib.Instrument.Swap: fxResetNotionals :: MtMCrossCurrencyBasisSwap -> IO RealVector
+ QuantLib.Instrument.Swap: fxResetRates :: MtMCrossCurrencyBasisSwap -> IO RealVector
+ QuantLib.Instrument.Swap: instance GHC.Classes.Eq QuantLib.Instrument.Swap.MtmCrossCurrencySwapType
+ QuantLib.Instrument.Swap: instance GHC.Internal.Read.Read QuantLib.Instrument.Swap.MtmCrossCurrencySwapType
+ QuantLib.Instrument.Swap: instance GHC.Internal.Show.Show QuantLib.Instrument.Swap.MtmCrossCurrencySwapType
+ QuantLib.Instrument.Swap: instance QuantLib.Instrument.Swap.HasCrossCurrencyResults (QuantLib.Internal.Type.GenConstNotionalCrossCurrencySwap x)
+ QuantLib.Instrument.Swap: instance QuantLib.Instrument.Swap.HasCrossCurrencyResults QuantLib.Internal.Type.MtMCrossCurrencyBasisSwap
+ QuantLib.Instrument.Swap: instance QuantLib.Instrument.Swap.HasFairLegSpreads QuantLib.Internal.Type.ConstNotionalCrossCurrencyBasisSwap
+ QuantLib.Instrument.Swap: instance QuantLib.Instrument.Swap.HasFairLegSpreads QuantLib.Internal.Type.MtMCrossCurrencyBasisSwap
+ QuantLib.Instrument.Swap: mtmCrossCurrencyBasisSwap :: MtmCrossCurrencySwapType -> Double -> Currency -> Schedule -> GenIborIndex ibor1 -> Double -> Double -> Double -> Currency -> Schedule -> GenIborIndex ibor2 -> Double -> Double -> Bool -> IO MtMCrossCurrencyBasisSwap
+ QuantLib.Instrument.Swap: mtmCrossCurrencyBasisSwapWithOptions :: MtmCrossCurrencySwapType -> Double -> Currency -> Schedule -> GenIborIndex ibor1 -> Double -> Double -> Double -> Currency -> Schedule -> GenIborIndex ibor2 -> Double -> Double -> Bool -> MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -> IO MtMCrossCurrencyBasisSwap
+ QuantLib.Instrument.Swap: numberOfLegs :: GenSwap s -> IO Word
+ QuantLib.Instrument.Swap: type MtMCrossCurrencyBasisSwap = GenSwap CMtMCrossCurrencyBasisSwap
+ QuantLib.InterestRate: discountFactorFirstDerivative :: InterestRate -> Double -> IO Double
+ QuantLib.InterestRate: discountFactorSecondDerivative :: InterestRate -> Double -> IO Double
+ QuantLib.Method: lsmEvaluate :: PolynomialType -> Word -> RealVector -> RealMatrix -> IO RealVector
+ QuantLib.Method: lsmEvaluatorIdentity :: String
+ QuantLib.Method: lsmFit :: PolynomialType -> Word -> RealMatrix -> RealVector -> IO RealVector
+ QuantLib.Method: pathGeneratorSequence :: PathGenerator -> IO (RealVector, Double)
+ QuantLib.Model: calibrateReversionsIterative :: Gsr -> [GenBlackCalibrationHelper bch] -> OptimizationMethod -> EndCriteria -> Maybe Constraint -> [Double] -> IO ()
+ QuantLib.Model: gaussian1dCompoundedRate :: Gaussian1dModel -> OvernightIndexedCoupon -> Maybe Day -> Double -> Maybe (GenYieldTermStructure y) -> IO Double
+ QuantLib.Model: gsrWithReversions :: GenYieldTermStructure y -> (GenQuote q1, GenQuote q2) -> [(Day, (GenQuote q1, GenQuote q2))] -> Double -> IO Gsr
+ QuantLib.Model: reversions :: Gsr -> IO [Double]
+ QuantLib.Model: roughHestonHurst :: RoughHestonModel -> IO Double
+ QuantLib.Model: roughHestonKappa :: RoughHestonModel -> IO Double
+ QuantLib.Model: roughHestonModel :: GenHestonProcess hp -> Double -> IO RoughHestonModel
+ QuantLib.Model: roughHestonProcess :: RoughHestonModel -> IO HestonProcess
+ QuantLib.Model: roughHestonRho :: RoughHestonModel -> IO Double
+ QuantLib.Model: roughHestonSigma :: RoughHestonModel -> IO Double
+ QuantLib.Model: roughHestonTheta :: RoughHestonModel -> IO Double
+ QuantLib.Model: roughHestonV0 :: RoughHestonModel -> IO Double
+ QuantLib.Model: setParams :: GenCalibratedModel m -> [Double] -> IO ()
+ QuantLib.Model: type RoughHestonModel = GenCalibratedModel CRoughHestonModel
+ QuantLib.PricingEngine: AdamsPredictorCorrector :: RoughHestonApproximation
+ QuantLib.PricingEngine: ExactMean :: Word -> H1HwMean
+ QuantLib.PricingEngine: FittedExponentialMean :: H1HwMean
+ QuantLib.PricingEngine: FourierDiscreteSimpson :: Word -> FourierIntegration
+ QuantLib.PricingEngine: FourierDiscreteTrapezoid :: Word -> FourierIntegration
+ QuantLib.PricingEngine: FourierExpSinh :: Double -> FourierIntegration
+ QuantLib.PricingEngine: FourierGaussChebyshev :: Word -> FourierIntegration
+ QuantLib.PricingEngine: FourierGaussChebyshev2nd :: Word -> FourierIntegration
+ QuantLib.PricingEngine: FourierGaussKronrod :: Double -> Word -> FourierIntegration
+ QuantLib.PricingEngine: FourierGaussLaguerre :: Word -> FourierIntegration
+ QuantLib.PricingEngine: FourierGaussLegendre :: Word -> FourierIntegration
+ QuantLib.PricingEngine: FourierGaussLobatto :: Double -> Double -> Word -> Bool -> FourierIntegration
+ QuantLib.PricingEngine: FourierSimpson :: Double -> Word -> FourierIntegration
+ QuantLib.PricingEngine: FourierTanhSinh :: Double -> FourierIntegration
+ QuantLib.PricingEngine: FourierTrapezoid :: Double -> Word -> FourierIntegration
+ QuantLib.PricingEngine: Lifted :: Word -> RoughHestonApproximation
+ QuantLib.PricingEngine: Pade :: RoughHestonApproximation
+ QuantLib.PricingEngine: analyticH1HwEngine :: GenHestonModel hm -> HullWhite -> Double -> IntegrationControl -> H1HwMean -> IO PricingEngine
+ QuantLib.PricingEngine: analyticRoughHestonEngine :: RoughHestonModel -> Word -> Word -> RoughHestonApproximation -> IO AnalyticRoughHestonEngine
+ QuantLib.PricingEngine: analyticRoughHestonEngineWithIntegration :: RoughHestonModel -> FourierIntegration -> Word -> Double -> Double -> RoughHestonApproximation -> IO AnalyticRoughHestonEngine
+ QuantLib.PricingEngine: asPricingEngine :: GenPricingEngine pe -> IO PricingEngine
+ QuantLib.PricingEngine: blackCdsOptionEngine :: GenDefaultProbabilityTermStructure d -> Double -> GenYieldTermStructure y -> GenQuote q -> IO PricingEngine
+ QuantLib.PricingEngine: data FourierIntegration
+ QuantLib.PricingEngine: data GenPricingEngine pe
+ QuantLib.PricingEngine: data H1HwMean
+ QuantLib.PricingEngine: data RoughHestonApproximation
+ QuantLib.PricingEngine: discountingMtmCrossCurrencyBasisSwapEngine :: Currency -> GenYieldTermStructure y1 -> Currency -> GenYieldTermStructure y2 -> GenQuote q -> Maybe Bool -> Maybe Day -> Maybe Day -> Maybe Day -> IO PricingEngine
+ QuantLib.PricingEngine: instance GHC.Classes.Eq QuantLib.PricingEngine.FourierIntegration
+ QuantLib.PricingEngine: instance GHC.Classes.Eq QuantLib.PricingEngine.H1HwMean
+ QuantLib.PricingEngine: instance GHC.Classes.Eq QuantLib.PricingEngine.RoughHestonApproximation
+ QuantLib.PricingEngine: instance GHC.Internal.Read.Read QuantLib.PricingEngine.FourierIntegration
+ QuantLib.PricingEngine: instance GHC.Internal.Read.Read QuantLib.PricingEngine.RoughHestonApproximation
+ QuantLib.PricingEngine: instance GHC.Internal.Show.Show QuantLib.PricingEngine.FourierIntegration
+ QuantLib.PricingEngine: instance GHC.Internal.Show.Show QuantLib.PricingEngine.H1HwMean
+ QuantLib.PricingEngine: instance GHC.Internal.Show.Show QuantLib.PricingEngine.RoughHestonApproximation
+ QuantLib.PricingEngine: roughHestonCharacteristicFunction :: AnalyticRoughHestonEngine -> Complex Double -> Double -> IO (Complex Double)
+ QuantLib.PricingEngine: roughHestonLogCharacteristicFunction :: AnalyticRoughHestonEngine -> Complex Double -> Double -> IO (Complex Double)
+ QuantLib.PricingEngine: roughHestonNumberOfEvaluations :: AnalyticRoughHestonEngine -> IO Word
+ QuantLib.PricingEngine: roughHestonPriceVanillaPayoff :: AnalyticRoughHestonEngine -> PlainVanillaPayoff -> TermPoint -> IO Double
+ QuantLib.PricingEngine: roughHestonRiccatiSolution :: AnalyticRoughHestonEngine -> Complex Double -> Double -> IO (Complex Double)
+ QuantLib.PricingEngine: type AnalyticRoughHestonEngine = GenPricingEngine CAnalyticRoughHestonEngine
+ QuantLib.PricingEngine: type PricingEngine = GenPricingEngine CPricingEngine
+ QuantLib.TermStructure: maxTime :: GenTermStructure t -> IO Double
+ QuantLib.TermStructure.Credit: conditionalSurvivalProbability :: AffineHazardRateCurve -> TermInterval -> Double -> Bool -> IO Double
+ QuantLib.TermStructure.Credit: impliedQuoteOn :: DefaultProbabilityHelper -> GenDefaultProbabilityTermStructure d -> IO Double
+ QuantLib.TermStructure.Credit: interpolatedAffineHazardRateCurve :: NonEmpty (Day, Double) -> DayCounter -> GenOneFactorAffineModel om -> Calendar -> [(Day, GenQuote q)] -> Interpolation -> Bool -> IO AffineHazardRateCurve
+ QuantLib.TermStructure.Credit: type AffineHazardRateCurve = GenDefaultProbabilityTermStructure CAffineHazardRateCurve
+ QuantLib.TermStructure.Credit: type GenDefaultProbabilityTermStructure d = GenTermStructure AnyOf CDefaultProbabilityTermStructure' d
+ QuantLib.TermStructure.Inflation: InflationSwapBetweenDates :: !Day -> !Day -> InflationSwapPeriod
+ QuantLib.TermStructure.Inflation: InflationSwapToMaturity :: !Day -> InflationSwapPeriod
+ QuantLib.TermStructure.Inflation: KerkhofSeasonality :: !Day -> ![Double] -> Seasonality
+ QuantLib.TermStructure.Inflation: MultiplicativePriceSeasonality :: !Day -> !Frequency -> ![Double] -> Seasonality
+ QuantLib.TermStructure.Inflation: data InflationSwapPeriod
+ QuantLib.TermStructure.Inflation: data Seasonality
+ QuantLib.TermStructure.Inflation: interpolatedZeroInflationCurve :: Day -> NonEmpty (Day, Double) -> Frequency -> DayCounter -> Maybe Seasonality -> Interpolation -> IO ZeroInflationTermStructure
+ QuantLib.TermStructure.Inflation: yearOnYearInflationSwapImpliedQuoteOn :: YearOnYearInflationSwapHelper -> YoYInflationTermStructure -> IO Double
+ QuantLib.TermStructure.Inflation: zeroCouponInflationSwapImpliedQuoteOn :: ZeroCouponInflationSwapHelper -> ZeroInflationTermStructure -> IO Double
+ QuantLib.TermStructure.Volatility: data ZabrInterpolatedSmileSection
+ QuantLib.TermStructure.Volatility: extendedBlackVarianceCurve :: Day -> NonEmpty (Day, GenQuote q) -> DayCounter -> Bool -> IO BlackVolTermStructure
+ QuantLib.TermStructure.Volatility: extendedBlackVarianceSurface :: Day -> Calendar -> [Day] -> [Double] -> Matrix (GenQuote q) -> DayCounter -> ExtendedBlackVarianceSurfaceExtrapolation -> ExtendedBlackVarianceSurfaceExtrapolation -> IO BlackVolTermStructure
+ QuantLib.TermStructure.Volatility: gaussian1dSwaptionVolatility :: Calendar -> BusinessDayConvention -> GenSwapIndex sidx -> Gaussian1dModel -> DayCounter -> IO SwaptionVolatilityStructure
+ QuantLib.TermStructure.Volatility: instance QuantLib.TermStructure.Volatility.HasAtmStrike QuantLib.Internal.Type.ZabrSwaptionVolatilityCube
+ QuantLib.TermStructure.Volatility: instance QuantLib.TermStructure.Volatility.HasStrikeBounds QuantLib.Internal.Type.SmileSection
+ QuantLib.TermStructure.Volatility: optionDateFromTenor :: GenVolatilityTermStructure v -> (Word, TimeUnit) -> IO Day
+ QuantLib.TermStructure.Volatility: sabrVolTermStructure :: Double -> Double -> Double -> Double -> Double -> Double -> Day -> DayCounter -> IO BlackVolTermStructure
+ QuantLib.TermStructure.Volatility: smileSectionVega :: SmileSection -> Double -> Double -> IO Double
+ QuantLib.TermStructure.Volatility: type ZabrSwaptionVolatilityCube = GenSwaptionVolatilityStructure CZabrSwaptionVolatilityCube
+ QuantLib.TermStructure.Volatility: zabrDenseParameters :: ZabrSwaptionVolatilityCube -> IO RealMatrix
+ QuantLib.TermStructure.Volatility: zabrInterpolatedAlpha :: ZabrInterpolatedSmileSection -> IO Double
+ QuantLib.TermStructure.Volatility: zabrInterpolatedAsSmileSection :: ZabrInterpolatedSmileSection -> IO SmileSection
+ QuantLib.TermStructure.Volatility: zabrInterpolatedBeta :: ZabrInterpolatedSmileSection -> IO Double
+ QuantLib.TermStructure.Volatility: zabrInterpolatedEndCriteria :: ZabrInterpolatedSmileSection -> IO EndCriteriaType
+ QuantLib.TermStructure.Volatility: zabrInterpolatedGamma :: ZabrInterpolatedSmileSection -> IO Double
+ QuantLib.TermStructure.Volatility: zabrInterpolatedMaxError :: ZabrInterpolatedSmileSection -> IO Double
+ QuantLib.TermStructure.Volatility: zabrInterpolatedNu :: ZabrInterpolatedSmileSection -> IO Double
+ QuantLib.TermStructure.Volatility: zabrInterpolatedRho :: ZabrInterpolatedSmileSection -> IO Double
+ QuantLib.TermStructure.Volatility: zabrInterpolatedRmsError :: ZabrInterpolatedSmileSection -> IO Double
+ QuantLib.TermStructure.Volatility: zabrInterpolatedSmileSection :: ZabrEvaluation -> Day -> GenQuote q1 -> NonEmpty (Double, GenQuote q3) -> Bool -> GenQuote q2 -> Double -> Double -> Double -> Double -> Double -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe EndCriteria -> Maybe OptimizationMethod -> DayCounter -> IO ZabrInterpolatedSmileSection
+ QuantLib.TermStructure.Volatility: zabrMarketVolCube :: ZabrSwaptionVolatilityCube -> IO RealMatrix
+ QuantLib.TermStructure.Volatility: zabrSparseParameters :: ZabrSwaptionVolatilityCube -> IO RealMatrix
+ QuantLib.TermStructure.Volatility: zabrSwaptionVolatilityCube :: GenSwaptionVolatilityStructure sv -> [(Word, TimeUnit)] -> [(Word, TimeUnit)] -> [Double] -> Matrix (GenQuote q1) -> GenSwapIndex sidx1 -> GenSwapIndex sidx2 -> Bool -> Matrix (GenQuote q2) -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe Double -> Maybe Double -> Bool -> Word -> Bool -> Double -> Maybe EndCriteria -> Maybe OptimizationMethod -> Bool -> IO ZabrSwaptionVolatilityCube
+ QuantLib.TermStructure.Volatility: zabrVolCubeAtmCalibrated :: ZabrSwaptionVolatilityCube -> IO RealMatrix
+ QuantLib.TermStructure.Yield: ClosestStubIndex :: !NonEmpty (GenIborIndex ibor) -> StubIndexSelection ibor
+ QuantLib.TermStructure.Yield: DepositFromIndex :: !GenIborIndex ibor -> DepositTerms ibor
+ QuantLib.TermStructure.Yield: DepositOnFixingDate :: !Day -> !GenIborIndex ibor -> DepositTerms ibor
+ QuantLib.TermStructure.Yield: DepositTenor :: !(Int, TimeUnit) -> !Word -> !Calendar -> !BusinessDayConvention -> !Bool -> !DayCounter -> DepositTerms ibor
+ QuantLib.TermStructure.Yield: FraBetweenDates :: !Day -> !Day -> !GenIborIndex ibor -> FraTerms ibor
+ QuantLib.TermStructure.Yield: FraImmOffsets :: !Word -> !Word -> !GenIborIndex ibor -> FraTerms ibor
+ QuantLib.TermStructure.Yield: FundingBetweenDates :: !Day -> !Day -> FundingTerms
+ QuantLib.TermStructure.Yield: FundingTenor :: !Word -> !(Int, TimeUnit) -> FundingTerms
+ QuantLib.TermStructure.Yield: FxSwapBetweenDates :: !Day -> !Day -> FxSwapTerms
+ QuantLib.TermStructure.Yield: FxSwapTenor :: !(Int, TimeUnit) -> !Word -> !Calendar -> !BusinessDayConvention -> !Bool -> !Calendar -> FxSwapTerms
+ QuantLib.TermStructure.Yield: InterpolatedStubIndexes :: !NonEmpty (GenIborIndex ibor) -> StubIndexSelection ibor
+ QuantLib.TermStructure.Yield: OisBetweenDates :: !Day -> !Day -> OisTerms
+ QuantLib.TermStructure.Yield: OisTenor :: !Word -> !(Int, TimeUnit) -> !(Int, TimeUnit) -> OisTerms
+ QuantLib.TermStructure.Yield: SpreadGlobalLogLinear :: !Double -> ![Double] -> !Maybe BootstrapInitialGuess -> SpreadBootstrap
+ QuantLib.TermStructure.Yield: SpreadIterative :: !Interpolation -> !IterativeBootstrapOpts -> SpreadBootstrap
+ QuantLib.TermStructure.Yield: SwapRateBetweenDates :: !Day -> !Day -> !Calendar -> !Frequency -> !BusinessDayConvention -> !DayCounter -> !GenIborIndex ibor -> !Maybe BusinessDayConvention -> SwapRateTerms sidx ibor
+ QuantLib.TermStructure.Yield: SwapRateFromIndex :: !GenSwapIndex sidx -> !(Int, TimeUnit) -> SwapRateTerms sidx ibor
+ QuantLib.TermStructure.Yield: SwapRateTenor :: !(Int, TimeUnit) -> !Calendar -> !Frequency -> !BusinessDayConvention -> !DayCounter -> !GenIborIndex ibor -> !(Int, TimeUnit) -> !Maybe Word -> !Maybe BusinessDayConvention -> SwapRateTerms sidx ibor
+ QuantLib.TermStructure.Yield: [oisFixedDayCount] :: OISRateHelperOpts m p -> Maybe DayCounter
+ QuantLib.TermStructure.Yield: data DepositTerms ibor
+ QuantLib.TermStructure.Yield: data FundingTerms
+ QuantLib.TermStructure.Yield: data FxSwapTerms
+ QuantLib.TermStructure.Yield: data OisTerms
+ QuantLib.TermStructure.Yield: data SpreadBootstrap
+ QuantLib.TermStructure.Yield: data StubIndexSelection ibor
+ QuantLib.TermStructure.Yield: data SwapRateTerms sidx ibor
+ QuantLib.TermStructure.Yield: fittingMethodDiscount :: FittedBondDiscountCurve -> [Double] -> Double -> IO Double
+ QuantLib.TermStructure.Yield: fittingMethodErrorCode :: FittedBondDiscountCurve -> IO EndCriteriaType
+ QuantLib.TermStructure.Yield: fittingMethodSize :: FittedBondDiscountCurve -> IO Word
+ QuantLib.TermStructure.Yield: fittingMethodSolution :: FittedBondDiscountCurve -> IO RealVector
+ QuantLib.TermStructure.Yield: impliedQuoteOn :: GenRateHelper rh -> GenYieldTermStructure y -> IO Double
+ QuantLib.TermStructure.Yield: impliedTermStructureMoving :: GenYieldTermStructure y -> Word -> Calendar -> IO YieldTermStructure
+ QuantLib.TermStructure.Yield: interpolatedSimpleZeroCurve :: NonEmpty (Day, Double) -> DayCounter -> Calendar -> [(Day, GenQuote q)] -> Interpolation -> IO YieldTermStructure
+ QuantLib.TermStructure.Yield: overnightIndexedFundingRateHelper :: FundingTerms -> GenQuote q -> Calendar -> BusinessDayConvention -> Bool -> OvernightIborIndex -> (Int, TimeUnit) -> DayCounter -> Int -> Bool -> DateGenerationRule -> PillarChoice -> Maybe Day -> IO RateHelper
+ QuantLib.TermStructure.Yield: overnightOvernightBasisSwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> OvernightIborIndex -> OvernightIborIndex -> Maybe (GenYieldTermStructure y) -> Bool -> Int -> Frequency -> RateAveragingType -> RateAveragingType -> Bool -> DateGenerationRule -> IO RateHelper
+ QuantLib.TermStructure.Yield: piecewiseForwardSpreadedTermStructure :: GenYieldTermStructure y -> NonEmpty (Day, GenQuote q) -> Interpolation -> IO YieldTermStructure
+ QuantLib.TermStructure.Yield: piecewiseSpreadYieldCurve :: GenYieldTermStructure y -> NonEmpty (GenRateHelper rh) -> SpreadBootstrap -> Bool -> IO YieldTermStructure
+ QuantLib.TermStructure.Yield: rateHelperFixingDependencies :: GenRateHelper rh -> IO (Maybe [(String, Day)])
+ QuantLib.TermStructure.Yield: type BootstrapInitialGuess = RealVector -> RealVector -> IO RealVector
+ QuantLib.Time.Calendar: Malaysia :: CalendarConstructor
+ QuantLib.Time.Calendar: Philippines :: CalendarConstructor
- QuantLib.CashFlow: IborLegOpts :: Int -> Maybe Calendar -> (Int, TimeUnit) -> Maybe Calendar -> BusinessDayConvention -> Bool -> BusinessDayConvention -> Maybe Bool -> IborLegOpts
+ QuantLib.CashFlow: IborLegOpts :: Int -> Maybe Calendar -> (Int, TimeUnit) -> Maybe Calendar -> BusinessDayConvention -> Bool -> BusinessDayConvention -> Maybe Bool -> Maybe (StubIndexSelection ibor2) -> IborLegOpts ibor2
- QuantLib.CashFlow: [ilgExCouponCalendar] :: IborLegOpts -> Maybe Calendar
+ QuantLib.CashFlow: [ilgExCouponCalendar] :: IborLegOpts ibor2 -> Maybe Calendar
- QuantLib.CashFlow: [ilgExCouponConvention] :: IborLegOpts -> BusinessDayConvention
+ QuantLib.CashFlow: [ilgExCouponConvention] :: IborLegOpts ibor2 -> BusinessDayConvention
- QuantLib.CashFlow: [ilgExCouponEndOfMonth] :: IborLegOpts -> Bool
+ QuantLib.CashFlow: [ilgExCouponEndOfMonth] :: IborLegOpts ibor2 -> Bool
- QuantLib.CashFlow: [ilgExCouponPeriod] :: IborLegOpts -> (Int, TimeUnit)
+ QuantLib.CashFlow: [ilgExCouponPeriod] :: IborLegOpts ibor2 -> (Int, TimeUnit)
- QuantLib.CashFlow: [ilgFixingConvention] :: IborLegOpts -> BusinessDayConvention
+ QuantLib.CashFlow: [ilgFixingConvention] :: IborLegOpts ibor2 -> BusinessDayConvention
- QuantLib.CashFlow: [ilgPaymentCalendar] :: IborLegOpts -> Maybe Calendar
+ QuantLib.CashFlow: [ilgPaymentCalendar] :: IborLegOpts ibor2 -> Maybe Calendar
- QuantLib.CashFlow: [ilgPaymentLag] :: IborLegOpts -> Int
+ QuantLib.CashFlow: [ilgPaymentLag] :: IborLegOpts ibor2 -> Int
- QuantLib.CashFlow: [ilgUseIndexedCoupons] :: IborLegOpts -> Maybe Bool
+ QuantLib.CashFlow: [ilgUseIndexedCoupons] :: IborLegOpts ibor2 -> Maybe Bool
- QuantLib.CashFlow: arithmeticAveragedOvernightIndexedCouponPricer :: Double -> Double -> Bool -> Maybe OptionletVolatilityStructure -> Bool -> IO FloatingRateCouponPricer
+ QuantLib.CashFlow: arithmeticAveragedOvernightIndexedCouponPricer :: Double -> Double -> Bool -> Maybe (GenOptionletVolatilityStructure ov) -> Bool -> IO FloatingRateCouponPricer
- QuantLib.CashFlow: blackAveragingOvernightIndexedCouponPricer :: Maybe OptionletVolatilityStructure -> Bool -> IO FloatingRateCouponPricer
+ QuantLib.CashFlow: blackAveragingOvernightIndexedCouponPricer :: Maybe (GenOptionletVolatilityStructure ov) -> Bool -> IO FloatingRateCouponPricer
- QuantLib.CashFlow: blackCompoundingOvernightIndexedCouponPricer :: Maybe OptionletVolatilityStructure -> Bool -> IO FloatingRateCouponPricer
+ QuantLib.CashFlow: blackCompoundingOvernightIndexedCouponPricer :: Maybe (GenOptionletVolatilityStructure ov) -> Bool -> IO FloatingRateCouponPricer
- QuantLib.CashFlow: compoundingOvernightIndexedCouponPricer :: Maybe OptionletVolatilityStructure -> Bool -> IO FloatingRateCouponPricer
+ QuantLib.CashFlow: compoundingOvernightIndexedCouponPricer :: Maybe (GenOptionletVolatilityStructure ov) -> Bool -> IO FloatingRateCouponPricer
- QuantLib.CashFlow: cpiCashFlow :: Double -> ZeroInflationIndex -> Maybe Day -> Maybe Double -> Day -> (Word, TimeUnit) -> CPIInterpolationType -> Day -> Bool -> IO CPICashFlow
+ QuantLib.CashFlow: cpiCashFlow :: Double -> GenZeroInflationIndex zidx -> Maybe Day -> Maybe Double -> Day -> (Word, TimeUnit) -> CPIInterpolationType -> Day -> Bool -> IO CPICashFlow
- QuantLib.CashFlow: cpiCouponPricer :: Maybe YieldTermStructure -> IO CPICouponPricer
+ QuantLib.CashFlow: cpiCouponPricer :: Maybe (GenYieldTermStructure y) -> IO CPICouponPricer
- QuantLib.CashFlow: cpiCouponPricerWithVol :: CPIVolatilitySurface -> Maybe YieldTermStructure -> IO CPICouponPricer
+ QuantLib.CashFlow: cpiCouponPricerWithVol :: CPIVolatilitySurface -> Maybe (GenYieldTermStructure y) -> IO CPICouponPricer
- QuantLib.CashFlow: cpiLeg :: Schedule -> ZeroInflationIndex -> Double -> (Word, TimeUnit) -> NonEmpty Double -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> Calendar -> CPIInterpolationType -> Bool -> IO Leg
+ QuantLib.CashFlow: cpiLeg :: Schedule -> GenZeroInflationIndex zidx -> Double -> (Word, TimeUnit) -> NonEmpty Double -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> Calendar -> CPIInterpolationType -> Bool -> IO Leg
- QuantLib.CashFlow: data IborLegOpts
+ QuantLib.CashFlow: data IborLegOpts ibor2
- QuantLib.CashFlow: defaultIborLegOpts :: IborLegOpts
+ QuantLib.CashFlow: defaultIborLegOpts :: IborLegOpts ibor2
- QuantLib.CashFlow: iborLegWithOptions :: Schedule -> GenIborIndex ibor -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> [Word] -> [Double] -> [Double] -> [Double] -> [Double] -> Bool -> Bool -> IborLegOpts -> IO Leg
+ QuantLib.CashFlow: iborLegWithOptions :: Schedule -> GenIborIndex ibor -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> [Word] -> [Double] -> [Double] -> [Double] -> [Double] -> Bool -> Bool -> IborLegOpts ibor2 -> IO Leg
- QuantLib.CashFlow: yoyInflationCoupon :: Day -> Double -> Day -> Day -> Word -> YoYInflationIndex -> (Int, TimeUnit) -> CPIInterpolationType -> DayCounter -> Double -> Double -> Maybe Day -> Maybe Day -> IO YoYInflationCoupon
+ QuantLib.CashFlow: yoyInflationCoupon :: Day -> Double -> Day -> Day -> Word -> GenYoYInflationIndex yidx -> (Int, TimeUnit) -> CPIInterpolationType -> DayCounter -> Double -> Double -> Maybe Day -> Maybe Day -> IO YoYInflationCoupon
- QuantLib.CashFlow: yoyInflationLeg :: Schedule -> Calendar -> YoYInflationIndex -> (Word, TimeUnit) -> CPIInterpolationType -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> [Word] -> [Double] -> [Double] -> [Double] -> [Double] -> IO Leg
+ QuantLib.CashFlow: yoyInflationLeg :: Schedule -> Calendar -> GenYoYInflationIndex yidx -> (Word, TimeUnit) -> CPIInterpolationType -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> [Word] -> [Double] -> [Double] -> [Double] -> [Double] -> IO Leg
- QuantLib.CashFlow: zeroInflationCashFlow :: Double -> ZeroInflationIndex -> CPIInterpolationType -> Day -> Day -> (Word, TimeUnit) -> Day -> Bool -> IO ZeroInflationCashFlow
+ QuantLib.CashFlow: zeroInflationCashFlow :: Double -> GenZeroInflationIndex zidx -> CPIInterpolationType -> Day -> Day -> (Word, TimeUnit) -> Day -> Bool -> IO ZeroInflationCashFlow
- QuantLib.Credit: issuer :: NonEmpty (DefaultProbKey, DefaultProbabilityTermStructure) -> IO Issuer
+ QuantLib.Credit: issuer :: NonEmpty (DefaultProbKey, GenDefaultProbabilityTermStructure d) -> IO Issuer
- QuantLib.Index: historicalIndexAnalysis :: Day -> Day -> (Int, TimeUnit) -> [Index] -> IO HistoricalIndexAnalysis
+ QuantLib.Index: historicalIndexAnalysis :: Day -> Day -> (Int, TimeUnit) -> [GenIndex idx] -> IO HistoricalIndexAnalysis
- QuantLib.Index.Inflation: fixing :: ZeroInflationIndex -> Day -> IO Double
+ QuantLib.Index.Inflation: fixing :: GenZeroInflationIndex zidx -> Day -> IO Double
- QuantLib.Index.Inflation: needsForecast :: ZeroInflationIndex -> Day -> IO Bool
+ QuantLib.Index.Inflation: needsForecast :: GenZeroInflationIndex zidx -> Day -> IO Bool
- QuantLib.Index.Inflation: yoyFixing :: YoYInflationIndex -> Day -> IO Double
+ QuantLib.Index.Inflation: yoyFixing :: GenYoYInflationIndex yidx -> Day -> IO Double
- QuantLib.Index.Inflation: yoyInflationIndexFromZero :: ZeroInflationIndex -> Maybe YoYInflationTermStructure -> IO YoYInflationIndex
+ QuantLib.Index.Inflation: yoyInflationIndexFromZero :: GenZeroInflationIndex zidx -> Maybe YoYInflationTermStructure -> IO YoYInflationIndex
- QuantLib.Index.Inflation: yoyNeedsForecast :: YoYInflationIndex -> Day -> IO Bool
+ QuantLib.Index.Inflation: yoyNeedsForecast :: GenYoYInflationIndex yidx -> Day -> IO Bool
- QuantLib.Instrument: composite :: [(Instrument, Double)] -> IO Instrument
+ QuantLib.Instrument: composite :: [(GenInstrument i, Double)] -> IO Instrument
- QuantLib.Instrument: setPricingEngine :: GenInstrument i -> PricingEngine -> IO ()
+ QuantLib.Instrument: setPricingEngine :: GenInstrument i -> GenPricingEngine pe -> IO ()
- QuantLib.Instrument.Bond: cpiBond :: Word -> Double -> Double -> (Word, TimeUnit) -> ZeroInflationIndex -> CPIInterpolationType -> Schedule -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> Maybe Day -> Calendar -> (Int, TimeUnit) -> Calendar -> BusinessDayConvention -> Bool -> IO CPIBond
+ QuantLib.Instrument.Bond: cpiBond :: Word -> Double -> Double -> (Word, TimeUnit) -> GenZeroInflationIndex zidx -> CPIInterpolationType -> Schedule -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> Maybe Day -> Calendar -> (Int, TimeUnit) -> Calendar -> BusinessDayConvention -> Bool -> IO CPIBond
- QuantLib.Instrument.Credit: FaceValueAccrual :: Bond -> Claim
+ QuantLib.Instrument.Credit: FaceValueAccrual :: GenBond b -> Claim
- QuantLib.Instrument.Credit: impliedVolatility :: CdsOption -> Double -> GenYieldTermStructure y -> DefaultProbabilityTermStructure -> Double -> Double -> Word -> Double -> Double -> IO Double
+ QuantLib.Instrument.Credit: impliedVolatility :: CdsOption -> Double -> GenYieldTermStructure y -> GenDefaultProbabilityTermStructure d -> Double -> Double -> Word -> Double -> Double -> IO Double
- QuantLib.Instrument.InflationCapFloor: cpiCapFloor :: OptionType -> Double -> Day -> Double -> Day -> Calendar -> BusinessDayConvention -> Calendar -> BusinessDayConvention -> Double -> ZeroInflationIndex -> (Word, TimeUnit) -> CPIInterpolationType -> IO CPICapFloor
+ QuantLib.Instrument.InflationCapFloor: cpiCapFloor :: OptionType -> Double -> Day -> Double -> Day -> Calendar -> BusinessDayConvention -> Calendar -> BusinessDayConvention -> Double -> GenZeroInflationIndex zidx -> (Word, TimeUnit) -> CPIInterpolationType -> IO CPICapFloor
- QuantLib.Instrument.Option: Custom :: !String -> !String -> !FunPtr PayoffFun -> Payoff
+ QuantLib.Instrument.Option: Custom :: !String -> !String -> !Callback -> Payoff
- QuantLib.Instrument.Option: CustomAccumulate :: !Payoff -> !FunPtr BasketAccumulateFun -> BasketPayoff
+ QuantLib.Instrument.Option: CustomAccumulate :: !Payoff -> !Callback -> BasketPayoff
- QuantLib.Instrument.Option: CustomStriked :: !OptionType -> !Double -> !String -> !FunPtr PayoffFun -> StrikedPayoff
+ QuantLib.Instrument.Option: CustomStriked :: !OptionType -> !Double -> !String -> !Callback -> StrikedPayoff
- QuantLib.Instrument.Option: impliedVolatility :: HasImpliedVol a => a -> Double -> GeneralizedBlackScholesProcess -> [Dividend] -> Double -> Word -> Double -> Double -> IO Double
+ QuantLib.Instrument.Option: impliedVolatility :: HasImpliedVol a => a -> Double -> GenGeneralizedBlackScholesProcess gbs -> [Dividend] -> Double -> Word -> Double -> Double -> IO Double
- QuantLib.Instrument.Swap: ConstNotionalCrossCurrencyBasisSwapOpts :: Int -> Int -> Bool -> OvernightObservation -> RateAveragingType -> Bool -> OvernightObservation -> RateAveragingType -> Bool -> ConstNotionalCrossCurrencyBasisSwapOpts
+ QuantLib.Instrument.Swap: ConstNotionalCrossCurrencyBasisSwapOpts :: Int -> Int -> Bool -> OvernightObservation -> RateAveragingType -> Bool -> OvernightObservation -> RateAveragingType -> Bool -> Maybe Bool -> Bool -> Maybe (StubIndexSelection ibor3) -> Maybe (StubIndexSelection ibor4) -> ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4
- QuantLib.Instrument.Swap: [cccbsPayAveragingMethod] :: ConstNotionalCrossCurrencyBasisSwapOpts -> RateAveragingType
+ QuantLib.Instrument.Swap: [cccbsPayAveragingMethod] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> RateAveragingType
- QuantLib.Instrument.Swap: [cccbsPayCompoundSpread] :: ConstNotionalCrossCurrencyBasisSwapOpts -> Bool
+ QuantLib.Instrument.Swap: [cccbsPayCompoundSpread] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Bool
- QuantLib.Instrument.Swap: [cccbsPayObservation] :: ConstNotionalCrossCurrencyBasisSwapOpts -> OvernightObservation
+ QuantLib.Instrument.Swap: [cccbsPayObservation] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> OvernightObservation
- QuantLib.Instrument.Swap: [cccbsPayPaymentLag] :: ConstNotionalCrossCurrencyBasisSwapOpts -> Int
+ QuantLib.Instrument.Swap: [cccbsPayPaymentLag] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Int
- QuantLib.Instrument.Swap: [cccbsRecAveragingMethod] :: ConstNotionalCrossCurrencyBasisSwapOpts -> RateAveragingType
+ QuantLib.Instrument.Swap: [cccbsRecAveragingMethod] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> RateAveragingType
- QuantLib.Instrument.Swap: [cccbsRecCompoundSpread] :: ConstNotionalCrossCurrencyBasisSwapOpts -> Bool
+ QuantLib.Instrument.Swap: [cccbsRecCompoundSpread] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Bool
- QuantLib.Instrument.Swap: [cccbsRecObservation] :: ConstNotionalCrossCurrencyBasisSwapOpts -> OvernightObservation
+ QuantLib.Instrument.Swap: [cccbsRecObservation] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> OvernightObservation
- QuantLib.Instrument.Swap: [cccbsRecPaymentLag] :: ConstNotionalCrossCurrencyBasisSwapOpts -> Int
+ QuantLib.Instrument.Swap: [cccbsRecPaymentLag] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Int
- QuantLib.Instrument.Swap: [cccbsTelescopicValueDates] :: ConstNotionalCrossCurrencyBasisSwapOpts -> Bool
+ QuantLib.Instrument.Swap: [cccbsTelescopicValueDates] :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> Bool
- QuantLib.Instrument.Swap: assetSwap :: Bool -> Bond -> Double -> GenIborIndex ibor -> Double -> Schedule -> DayCounter -> Bool -> Double -> Maybe Double -> Maybe Day -> IO AssetSwap
+ QuantLib.Instrument.Swap: assetSwap :: Bool -> GenBond b -> Double -> GenIborIndex ibor -> Double -> Schedule -> DayCounter -> Bool -> Double -> Maybe Double -> Maybe Day -> IO AssetSwap
- QuantLib.Instrument.Swap: constNotionalCrossCurrencyBasisSwap :: Double -> Currency -> Schedule -> GenIborIndex ibor1 -> Double -> Double -> Double -> Currency -> Schedule -> GenIborIndex ibor2 -> Double -> Double -> ConstNotionalCrossCurrencyBasisSwapOpts -> IO ConstNotionalCrossCurrencyBasisSwap
+ QuantLib.Instrument.Swap: constNotionalCrossCurrencyBasisSwap :: Double -> Currency -> Schedule -> GenIborIndex ibor1 -> Double -> Double -> Double -> Currency -> Schedule -> GenIborIndex ibor2 -> Double -> Double -> ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> IO ConstNotionalCrossCurrencyBasisSwap
- QuantLib.Instrument.Swap: constNotionalCrossCurrencyFixedVsFloatingSwap :: SwapType -> Double -> Currency -> Schedule -> Double -> DayCounter -> BusinessDayConvention -> Word -> Calendar -> Double -> Currency -> Schedule -> GenIborIndex ibor -> Double -> BusinessDayConvention -> Word -> Calendar -> Bool -> Bool -> OvernightObservation -> RateAveragingType -> IO ConstNotionalCrossCurrencyFixedVsFloatingSwap
+ QuantLib.Instrument.Swap: constNotionalCrossCurrencyFixedVsFloatingSwap :: SwapType -> Double -> Currency -> Schedule -> Double -> DayCounter -> BusinessDayConvention -> Word -> Calendar -> Double -> Currency -> Schedule -> GenIborIndex ibor -> Double -> BusinessDayConvention -> Word -> Calendar -> Bool -> Bool -> OvernightObservation -> RateAveragingType -> Maybe Bool -> Maybe (StubIndexSelection ibor2) -> IO ConstNotionalCrossCurrencyFixedVsFloatingSwap
- QuantLib.Instrument.Swap: constNotionalCrossCurrencySwapFromLegs :: [(Leg, Bool)] -> [Currency] -> IO ConstNotionalCrossCurrencySwap
+ QuantLib.Instrument.Swap: constNotionalCrossCurrencySwapFromLegs :: [(GenLeg l, Bool)] -> [Currency] -> IO ConstNotionalCrossCurrencySwap
- QuantLib.Instrument.Swap: cpiSwap :: SwapType -> Double -> Bool -> Double -> DayCounter -> Schedule -> BusinessDayConvention -> Word -> GenIborIndex ibor -> Double -> Double -> DayCounter -> Schedule -> BusinessDayConvention -> (Word, TimeUnit) -> ZeroInflationIndex -> CPIInterpolationType -> Maybe Double -> IO CPISwap
+ QuantLib.Instrument.Swap: cpiSwap :: SwapType -> Double -> Bool -> Double -> DayCounter -> Schedule -> BusinessDayConvention -> Word -> GenIborIndex ibor -> Double -> Double -> DayCounter -> Schedule -> BusinessDayConvention -> (Word, TimeUnit) -> GenZeroInflationIndex zidx -> CPIInterpolationType -> Maybe Double -> IO CPISwap
- QuantLib.Instrument.Swap: data ConstNotionalCrossCurrencyBasisSwapOpts
+ QuantLib.Instrument.Swap: data ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4
- QuantLib.Instrument.Swap: defaultConstNotionalCrossCurrencyBasisSwapOpts :: ConstNotionalCrossCurrencyBasisSwapOpts
+ QuantLib.Instrument.Swap: defaultConstNotionalCrossCurrencyBasisSwapOpts :: ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4
- QuantLib.Instrument.Swap: fairPaySpread :: ConstNotionalCrossCurrencyBasisSwap -> IO Double
+ QuantLib.Instrument.Swap: fairPaySpread :: HasFairLegSpreads s => s -> IO Double
- QuantLib.Instrument.Swap: fairRecSpread :: ConstNotionalCrossCurrencyBasisSwap -> IO Double
+ QuantLib.Instrument.Swap: fairRecSpread :: HasFairLegSpreads s => s -> IO Double
- QuantLib.Instrument.Swap: inCcyLegBps :: GenConstNotionalCrossCurrencySwap x -> Word -> IO Double
+ QuantLib.Instrument.Swap: inCcyLegBps :: HasCrossCurrencyResults s => s -> Word -> IO Double
- QuantLib.Instrument.Swap: inCcyLegNpv :: GenConstNotionalCrossCurrencySwap x -> Word -> IO Double
+ QuantLib.Instrument.Swap: inCcyLegNpv :: HasCrossCurrencyResults s => s -> Word -> IO Double
- QuantLib.Instrument.Swap: legCurrency :: GenConstNotionalCrossCurrencySwap x -> Word -> IO Currency
+ QuantLib.Instrument.Swap: legCurrency :: HasCrossCurrencyResults s => s -> Word -> IO Currency
- QuantLib.Instrument.Swap: nonstandardSwap :: SwapType -> [Double] -> [Double] -> Schedule -> [Double] -> DayCounter -> Schedule -> GenIborIndex ibor -> Double -> Double -> DayCounter -> Bool -> Bool -> Maybe BusinessDayConvention -> IO NonstandardSwap
+ QuantLib.Instrument.Swap: nonstandardSwap :: SwapType -> [Double] -> [Double] -> Schedule -> [Double] -> DayCounter -> Schedule -> GenIborIndex ibor -> Double -> Double -> DayCounter -> Bool -> Bool -> Maybe BusinessDayConvention -> Int -> Maybe Calendar -> IO NonstandardSwap
- QuantLib.Instrument.Swap: nonstandardSwapFromGearingsAndSpreads :: SwapType -> [Double] -> [Double] -> Schedule -> [Double] -> DayCounter -> Schedule -> GenIborIndex ibor -> [Double] -> [Double] -> DayCounter -> Bool -> Bool -> Maybe BusinessDayConvention -> IO NonstandardSwap
+ QuantLib.Instrument.Swap: nonstandardSwapFromGearingsAndSpreads :: SwapType -> [Double] -> [Double] -> Schedule -> [Double] -> DayCounter -> Schedule -> GenIborIndex ibor -> [Double] -> [Double] -> DayCounter -> Bool -> Bool -> Maybe BusinessDayConvention -> Int -> Maybe Calendar -> IO NonstandardSwap
- QuantLib.Instrument.Swap: npvDateDiscounts :: GenConstNotionalCrossCurrencySwap x -> Word -> IO Double
+ QuantLib.Instrument.Swap: npvDateDiscounts :: HasCrossCurrencyResults s => s -> Word -> IO Double
- QuantLib.Instrument.Swap: overnightIndexedSwap :: SwapType -> Double -> Schedule -> Double -> DayCounter -> OvernightIborIndex -> Double -> Int -> BusinessDayConvention -> Calendar -> Bool -> RateAveragingType -> OvernightObservation -> IO OvernightIndexedSwap
+ QuantLib.Instrument.Swap: overnightIndexedSwap :: SwapType -> Double -> Schedule -> Double -> DayCounter -> OvernightIborIndex -> Double -> Int -> BusinessDayConvention -> Calendar -> Bool -> RateAveragingType -> OvernightObservation -> Maybe Int -> IO OvernightIndexedSwap
- QuantLib.Instrument.Swap: overnightIndexedSwapFromNominals :: SwapType -> [Double] -> Schedule -> Double -> DayCounter -> OvernightIborIndex -> Double -> Int -> BusinessDayConvention -> Calendar -> Bool -> RateAveragingType -> OvernightObservation -> IO OvernightIndexedSwap
+ QuantLib.Instrument.Swap: overnightIndexedSwapFromNominals :: SwapType -> [Double] -> Schedule -> Double -> DayCounter -> OvernightIborIndex -> Double -> Int -> BusinessDayConvention -> Calendar -> Bool -> RateAveragingType -> OvernightObservation -> Maybe Int -> IO OvernightIndexedSwap
- QuantLib.Instrument.Swap: swapFromLegs :: [(Leg, Bool)] -> IO Swap
+ QuantLib.Instrument.Swap: swapFromLegs :: [(GenLeg l, Bool)] -> IO Swap
- QuantLib.Instrument.Swap: type OvernightIndexedSwap = GenSwap COvernightIndexedSwap
+ QuantLib.Instrument.Swap: type OvernightIndexedSwap = GenFixedVsFloatingSwap COvernightIndexedSwap
- QuantLib.Instrument.Swap: yearOnYearInflationSwap :: SwapType -> Double -> Schedule -> Double -> DayCounter -> Schedule -> YoYInflationIndex -> (Word, TimeUnit) -> CPIInterpolationType -> Double -> DayCounter -> Calendar -> BusinessDayConvention -> IO YearOnYearInflationSwap
+ QuantLib.Instrument.Swap: yearOnYearInflationSwap :: SwapType -> Double -> Schedule -> Double -> DayCounter -> Schedule -> GenYoYInflationIndex yidx -> (Word, TimeUnit) -> CPIInterpolationType -> Double -> DayCounter -> Calendar -> BusinessDayConvention -> IO YearOnYearInflationSwap
- QuantLib.Instrument.Swap: zeroCouponInflationSwap :: SwapType -> Double -> Day -> Day -> Calendar -> BusinessDayConvention -> DayCounter -> Double -> ZeroInflationIndex -> (Word, TimeUnit) -> CPIInterpolationType -> Bool -> Calendar -> BusinessDayConvention -> IO ZeroCouponInflationSwap
+ QuantLib.Instrument.Swap: zeroCouponInflationSwap :: SwapType -> Double -> Day -> Day -> Calendar -> BusinessDayConvention -> DayCounter -> Double -> GenZeroInflationIndex zidx -> (Word, TimeUnit) -> CPIInterpolationType -> Bool -> Calendar -> BusinessDayConvention -> IO ZeroCouponInflationSwap
- QuantLib.Method: fdmBlackScholesMesher :: Word -> GeneralizedBlackScholesProcess -> Double -> Double -> Maybe Double -> Maybe Double -> Double -> Double -> Maybe Double -> Maybe Double -> [Dividend] -> Maybe FdmQuantoHelper -> Double -> IO Fdm1dMesher
+ QuantLib.Method: fdmBlackScholesMesher :: Word -> GenGeneralizedBlackScholesProcess gbs -> Double -> Double -> Maybe Double -> Maybe Double -> Double -> Double -> Maybe Double -> Maybe Double -> [Dividend] -> Maybe FdmQuantoHelper -> Double -> IO Fdm1dMesher
- QuantLib.Method: fdmSimpleProcess1dMesher :: Word -> StochasticProcess1D -> Double -> Word -> Double -> Maybe Double -> IO Fdm1dMesher
+ QuantLib.Method: fdmSimpleProcess1dMesher :: Word -> GenStochasticProcess1D p1d -> Double -> Word -> Double -> Maybe Double -> IO Fdm1dMesher
- QuantLib.Model: markovFunctional :: GenYieldTermStructure y -> Double -> Double -> [(Day, Double)] -> SwaptionVolatilityStructure -> NonEmpty (Day, (Word, TimeUnit)) -> GenSwapIndex sidx -> Word -> IO MarkovFunctional
+ QuantLib.Model: markovFunctional :: GenYieldTermStructure y -> Double -> Double -> [(Day, Double)] -> GenSwaptionVolatilityStructure sv -> NonEmpty (Day, (Word, TimeUnit)) -> GenSwapIndex sidx -> Word -> IO MarkovFunctional
- QuantLib.Model: markovFunctionalCaplet :: GenYieldTermStructure y -> Double -> Double -> [(Day, Double)] -> OptionletVolatilityStructure -> NonEmpty Day -> GenIborIndex ibor -> Word -> IO MarkovFunctional
+ QuantLib.Model: markovFunctionalCaplet :: GenYieldTermStructure y -> Double -> Double -> [(Day, Double)] -> GenOptionletVolatilityStructure ov -> NonEmpty Day -> GenIborIndex ibor -> Word -> IO MarkovFunctional
- QuantLib.Model: setPricingEngine :: GenBlackCalibrationHelper bch -> PricingEngine -> IO ()
+ QuantLib.Model: setPricingEngine :: GenBlackCalibrationHelper bch -> GenPricingEngine pe -> IO ()
- QuantLib.PricingEngine: analyticAmericanMargrabeEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: analyticAmericanMargrabeEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> Double -> IO PricingEngine
- QuantLib.PricingEngine: analyticBarrierEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticBarrierEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticBinaryBarrierEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticBinaryBarrierEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticBsmHullWhiteEngine :: Double -> GeneralizedBlackScholesProcess -> HullWhite -> IO PricingEngine
+ QuantLib.PricingEngine: analyticBsmHullWhiteEngine :: Double -> GenGeneralizedBlackScholesProcess gbs -> HullWhite -> IO PricingEngine
- QuantLib.PricingEngine: analyticCliquetEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticCliquetEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticComplexChooserEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticComplexChooserEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticCompoundOptionEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticCompoundOptionEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticContinuousFixedLookbackEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticContinuousFixedLookbackEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticContinuousFloatingLookbackEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticContinuousFloatingLookbackEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticContinuousGeometricAveragePriceAsianEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticContinuousGeometricAveragePriceAsianEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticContinuousPartialFixedLookbackEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticContinuousPartialFixedLookbackEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticContinuousPartialFloatingLookbackEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticContinuousPartialFloatingLookbackEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticDigitalAmericanEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticDigitalAmericanEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticDigitalAmericanKoEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticDigitalAmericanKoEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticDiscreteGeometricAveragePriceAsianEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticDiscreteGeometricAveragePriceAsianEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticDiscreteGeometricAverageStrikeAsianEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticDiscreteGeometricAverageStrikeAsianEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticDividendEuropeanEngine :: GeneralizedBlackScholesProcess -> [Dividend] -> IO PricingEngine
+ QuantLib.PricingEngine: analyticDividendEuropeanEngine :: GenGeneralizedBlackScholesProcess gbs -> [Dividend] -> IO PricingEngine
- QuantLib.PricingEngine: analyticDoubleBarrierEngine :: GeneralizedBlackScholesProcess -> Int -> IO PricingEngine
+ QuantLib.PricingEngine: analyticDoubleBarrierEngine :: GenGeneralizedBlackScholesProcess gbs -> Int -> IO PricingEngine
- QuantLib.PricingEngine: analyticEuropeanEngine :: GeneralizedBlackScholesProcess -> Maybe (GenYieldTermStructure y) -> IO PricingEngine
+ QuantLib.PricingEngine: analyticEuropeanEngine :: GenGeneralizedBlackScholesProcess gbs -> Maybe (GenYieldTermStructure y) -> IO PricingEngine
- QuantLib.PricingEngine: analyticEuropeanMargrabeEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: analyticEuropeanMargrabeEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> Double -> IO PricingEngine
- QuantLib.PricingEngine: analyticHolderExtensibleOptionEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticHolderExtensibleOptionEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticPartialTimeBarrierOptionEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticPartialTimeBarrierOptionEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticPerformanceEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticPerformanceEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticSimpleChooserEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticSimpleChooserEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticSoftBarrierEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticSoftBarrierEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: analyticTwoAssetBarrierEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> GenQuote q -> IO PricingEngine
+ QuantLib.PricingEngine: analyticTwoAssetBarrierEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> GenQuote q -> IO PricingEngine
- QuantLib.PricingEngine: analyticTwoAssetCorrelationEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> GenQuote q -> IO PricingEngine
+ QuantLib.PricingEngine: analyticTwoAssetCorrelationEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> GenQuote q -> IO PricingEngine
- QuantLib.PricingEngine: analyticWriterExtensibleOptionEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: analyticWriterExtensibleOptionEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: baroneAdesiWhaleyApproximationEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: baroneAdesiWhaleyApproximationEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: binomialBarrierEngine :: BinomialTree -> GeneralizedBlackScholesProcess -> Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: binomialBarrierEngine :: BinomialTree -> GenGeneralizedBlackScholesProcess gbs -> Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: binomialConvertibleEngine :: BinomialTree -> GeneralizedBlackScholesProcess -> Word -> GenQuote q -> [Dividend] -> IO PricingEngine
+ QuantLib.PricingEngine: binomialConvertibleEngine :: BinomialTree -> GenGeneralizedBlackScholesProcess gbs -> Word -> GenQuote q -> [Dividend] -> IO PricingEngine
- QuantLib.PricingEngine: binomialDoubleBarrierEngine :: BinomialTree -> GeneralizedBlackScholesProcess -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: binomialDoubleBarrierEngine :: BinomialTree -> GenGeneralizedBlackScholesProcess gbs -> Word -> IO PricingEngine
- QuantLib.PricingEngine: binomialVanillaEngine :: BinomialTree -> GeneralizedBlackScholesProcess -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: binomialVanillaEngine :: BinomialTree -> GenGeneralizedBlackScholesProcess gbs -> Word -> IO PricingEngine
- QuantLib.PricingEngine: bjerksundStenslandApproximationEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: bjerksundStenslandApproximationEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: bjerksundStenslandSpreadEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: bjerksundStenslandSpreadEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> Double -> IO PricingEngine
- QuantLib.PricingEngine: choiBasketEngine :: NonEmpty GeneralizedBlackScholesProcess -> Matrix Double -> Double -> Word -> Bool -> Bool -> IO PricingEngine
+ QuantLib.PricingEngine: choiBasketEngine :: NonEmpty (GenGeneralizedBlackScholesProcess gbs) -> Matrix Double -> Double -> Word -> Bool -> Bool -> IO PricingEngine
- QuantLib.PricingEngine: continuousArithmeticAsianVecerEngine :: GeneralizedBlackScholesProcess -> Maybe (GenQuote q) -> Day -> Word -> Word -> Double -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: continuousArithmeticAsianVecerEngine :: GenGeneralizedBlackScholesProcess gbs -> Maybe (GenQuote q) -> Day -> Word -> Word -> Double -> Double -> IO PricingEngine
- QuantLib.PricingEngine: counterpartyAdjSwapEngine :: GenYieldTermStructure y -> GenQuote q -> DefaultProbabilityTermStructure -> Double -> Maybe DefaultProbabilityTermStructure -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: counterpartyAdjSwapEngine :: GenYieldTermStructure y -> GenQuote q -> GenDefaultProbabilityTermStructure d1 -> Double -> Maybe (GenDefaultProbabilityTermStructure d2) -> Double -> IO PricingEngine
- QuantLib.PricingEngine: dengLiZhouBasketEngine :: NonEmpty GeneralizedBlackScholesProcess -> Matrix Double -> IO PricingEngine
+ QuantLib.PricingEngine: dengLiZhouBasketEngine :: NonEmpty (GenGeneralizedBlackScholesProcess gbs) -> Matrix Double -> IO PricingEngine
- QuantLib.PricingEngine: fd2dBlackScholesVanillaEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> Double -> Word -> Word -> Word -> Word -> FdmScheme -> Bool -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: fd2dBlackScholesVanillaEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> Double -> Word -> Word -> Word -> Word -> FdmScheme -> Bool -> Double -> IO PricingEngine
- QuantLib.PricingEngine: fdBlackScholesAsianEngine :: GeneralizedBlackScholesProcess -> Word -> Word -> Word -> FdmScheme -> IO PricingEngine
+ QuantLib.PricingEngine: fdBlackScholesAsianEngine :: GenGeneralizedBlackScholesProcess gbs -> Word -> Word -> Word -> FdmScheme -> IO PricingEngine
- QuantLib.PricingEngine: fdBlackScholesBarrierEngine :: GeneralizedBlackScholesProcess -> Word -> Word -> Word -> FdmScheme -> Bool -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: fdBlackScholesBarrierEngine :: GenGeneralizedBlackScholesProcess gbs -> Word -> Word -> Word -> FdmScheme -> Bool -> Double -> IO PricingEngine
- QuantLib.PricingEngine: fdBlackScholesShoutEngine :: GeneralizedBlackScholesProcess -> [Dividend] -> Word -> Word -> Word -> FdmScheme -> IO PricingEngine
+ QuantLib.PricingEngine: fdBlackScholesShoutEngine :: GenGeneralizedBlackScholesProcess gbs -> [Dividend] -> Word -> Word -> Word -> FdmScheme -> IO PricingEngine
- QuantLib.PricingEngine: fdBlackScholesVanillaEngine :: GeneralizedBlackScholesProcess -> [Dividend] -> Word -> Word -> Word -> FdmScheme -> Bool -> Double -> CashDividendModel -> IO PricingEngine
+ QuantLib.PricingEngine: fdBlackScholesVanillaEngine :: GenGeneralizedBlackScholesProcess gbs -> [Dividend] -> Word -> Word -> Word -> FdmScheme -> Bool -> Double -> CashDividendModel -> IO PricingEngine
- QuantLib.PricingEngine: fdBlackScholesVanillaEngineQuanto :: GeneralizedBlackScholesProcess -> [Dividend] -> Maybe FdmQuantoHelper -> Word -> Word -> Word -> FdmScheme -> Bool -> Double -> CashDividendModel -> IO PricingEngine
+ QuantLib.PricingEngine: fdBlackScholesVanillaEngineQuanto :: GenGeneralizedBlackScholesProcess gbs -> [Dividend] -> Maybe FdmQuantoHelper -> Word -> Word -> Word -> FdmScheme -> Bool -> Double -> CashDividendModel -> IO PricingEngine
- QuantLib.PricingEngine: fdndimBlackScholesVanillaEngine :: NonEmpty GeneralizedBlackScholesProcess -> Matrix Double -> FdmGrid -> Word -> Word -> FdmScheme -> IO PricingEngine
+ QuantLib.PricingEngine: fdndimBlackScholesVanillaEngine :: NonEmpty (GenGeneralizedBlackScholesProcess gbs) -> Matrix Double -> FdmGrid -> Word -> Word -> FdmScheme -> IO PricingEngine
- QuantLib.PricingEngine: fftVanillaEngine :: GeneralizedBlackScholesProcess -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: fftVanillaEngine :: GenGeneralizedBlackScholesProcess gbs -> Double -> IO PricingEngine
- QuantLib.PricingEngine: forwardBaroneAdesiWhaleyEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: forwardBaroneAdesiWhaleyEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: forwardBjerksundStenslandEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: forwardBjerksundStenslandEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: forwardEuropeanEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: forwardEuropeanEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: forwardFdBlackScholesVanillaEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: forwardFdBlackScholesVanillaEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: gaussianCopulaSpreadEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> Double -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: gaussianCopulaSpreadEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> Double -> Word -> IO PricingEngine
- QuantLib.PricingEngine: integralCdsEngine :: (Word, TimeUnit) -> DefaultProbabilityTermStructure -> Double -> GenYieldTermStructure y -> Maybe Bool -> IO PricingEngine
+ QuantLib.PricingEngine: integralCdsEngine :: (Word, TimeUnit) -> GenDefaultProbabilityTermStructure d -> Double -> GenYieldTermStructure y -> Maybe Bool -> IO PricingEngine
- QuantLib.PricingEngine: integralEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: integralEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: isdaCdsEngine :: DefaultProbabilityTermStructure -> Double -> GenYieldTermStructure y -> Maybe Bool -> NumericalFix -> AccrualBias -> ForwardsInCouponPeriod -> IO PricingEngine
+ QuantLib.PricingEngine: isdaCdsEngine :: GenDefaultProbabilityTermStructure d -> Double -> GenYieldTermStructure y -> Maybe Bool -> NumericalFix -> AccrualBias -> ForwardsInCouponPeriod -> IO PricingEngine
- QuantLib.PricingEngine: juQuadraticApproximationEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: juQuadraticApproximationEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.PricingEngine: mcAmericanEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> Word -> PolynomialType -> Maybe Word -> Maybe Bool -> Maybe Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcAmericanEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> Word -> PolynomialType -> Maybe Word -> Maybe Bool -> Maybe Word -> IO PricingEngine
- QuantLib.PricingEngine: mcBarrierEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Bool -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcBarrierEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Bool -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcDigitalEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcDigitalEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcDiscreteArithmeticApEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Bool -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcDiscreteArithmeticApEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Bool -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcDiscreteArithmeticAsEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcDiscreteArithmeticAsEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcDiscreteGeometricApEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcDiscreteGeometricApEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcDoubleBarrierEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcDoubleBarrierEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcEuropeanEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcEuropeanEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcForwardEuropeanBsEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcForwardEuropeanBsEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcLookbackFixedEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcLookbackFixedEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcLookbackFloatingEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcLookbackFloatingEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcLookbackPartialFixedEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcLookbackPartialFixedEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcLookbackPartialFloatingEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcLookbackPartialFloatingEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcPerformanceEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcPerformanceEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: mcVarianceSwapEngine :: RngTrait -> StatisticsTrait -> GeneralizedBlackScholesProcess -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
+ QuantLib.PricingEngine: mcVarianceSwapEngine :: RngTrait -> StatisticsTrait -> GenGeneralizedBlackScholesProcess gbs -> Maybe Word -> Maybe Word -> Bool -> Bool -> Maybe Word -> Maybe Double -> Maybe Word -> Word -> IO PricingEngine
- QuantLib.PricingEngine: midPointCdsEngine :: DefaultProbabilityTermStructure -> Double -> GenYieldTermStructure y -> Maybe Bool -> IO PricingEngine
+ QuantLib.PricingEngine: midPointCdsEngine :: GenDefaultProbabilityTermStructure d -> Double -> GenYieldTermStructure y -> Maybe Bool -> IO PricingEngine
- QuantLib.PricingEngine: operatorSplittingSpreadEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> Double -> OperatorSplittingOrder -> IO PricingEngine
+ QuantLib.PricingEngine: operatorSplittingSpreadEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> Double -> OperatorSplittingOrder -> IO PricingEngine
- QuantLib.PricingEngine: pearsonSpreadEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> Double -> Double -> Word -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: pearsonSpreadEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> Double -> Double -> Word -> Double -> IO PricingEngine
- QuantLib.PricingEngine: qdFpAmericanEngine :: GeneralizedBlackScholesProcess -> QdFpScheme -> FixedPointEquation -> IO PricingEngine
+ QuantLib.PricingEngine: qdFpAmericanEngine :: GenGeneralizedBlackScholesProcess gbs -> QdFpScheme -> FixedPointEquation -> IO PricingEngine
- QuantLib.PricingEngine: qdPlusAmericanEngine :: GeneralizedBlackScholesProcess -> Word -> SolverType -> Double -> Maybe Word -> IO PricingEngine
+ QuantLib.PricingEngine: qdPlusAmericanEngine :: GenGeneralizedBlackScholesProcess gbs -> Word -> SolverType -> Double -> Maybe Word -> IO PricingEngine
- QuantLib.PricingEngine: quantoBarrierEngine :: GeneralizedBlackScholesProcess -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
+ QuantLib.PricingEngine: quantoBarrierEngine :: GenGeneralizedBlackScholesProcess gbs -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
- QuantLib.PricingEngine: quantoDoubleBarrierEngine :: GeneralizedBlackScholesProcess -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
+ QuantLib.PricingEngine: quantoDoubleBarrierEngine :: GenGeneralizedBlackScholesProcess gbs -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
- QuantLib.PricingEngine: quantoEuropeanEngine :: GeneralizedBlackScholesProcess -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
+ QuantLib.PricingEngine: quantoEuropeanEngine :: GenGeneralizedBlackScholesProcess gbs -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
- QuantLib.PricingEngine: quantoForwardEuropeanEngine :: GeneralizedBlackScholesProcess -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
+ QuantLib.PricingEngine: quantoForwardEuropeanEngine :: GenGeneralizedBlackScholesProcess gbs -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
- QuantLib.PricingEngine: quantoForwardPerformanceEuropeanEngine :: GeneralizedBlackScholesProcess -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
+ QuantLib.PricingEngine: quantoForwardPerformanceEuropeanEngine :: GenGeneralizedBlackScholesProcess gbs -> GenYieldTermStructure y -> GenBlackVolTermStructure bv -> GenQuote q -> IO PricingEngine
- QuantLib.PricingEngine: replicatingVarianceSwapEngine :: GeneralizedBlackScholesProcess -> Double -> NonEmpty Double -> NonEmpty Double -> IO PricingEngine
+ QuantLib.PricingEngine: replicatingVarianceSwapEngine :: GenGeneralizedBlackScholesProcess gbs -> Double -> NonEmpty Double -> NonEmpty Double -> IO PricingEngine
- QuantLib.PricingEngine: riskyBondEngine :: DefaultProbabilityTermStructure -> Double -> GenYieldTermStructure y -> IO PricingEngine
+ QuantLib.PricingEngine: riskyBondEngine :: GenDefaultProbabilityTermStructure d -> Double -> GenYieldTermStructure y -> IO PricingEngine
- QuantLib.PricingEngine: singleFactorBsmBasketEngine :: NonEmpty GeneralizedBlackScholesProcess -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: singleFactorBsmBasketEngine :: NonEmpty (GenGeneralizedBlackScholesProcess gbs) -> Double -> IO PricingEngine
- QuantLib.PricingEngine: stulzEngine :: GeneralizedBlackScholesProcess -> GeneralizedBlackScholesProcess -> Double -> IO PricingEngine
+ QuantLib.PricingEngine: stulzEngine :: GenGeneralizedBlackScholesProcess gbs1 -> GenGeneralizedBlackScholesProcess gbs2 -> Double -> IO PricingEngine
- QuantLib.PricingEngine: turnbullWakemanAsianEngine :: GeneralizedBlackScholesProcess -> IO PricingEngine
+ QuantLib.PricingEngine: turnbullWakemanAsianEngine :: GenGeneralizedBlackScholesProcess gbs -> IO PricingEngine
- QuantLib.Process: thetaAt :: GeneralizedBlackScholesProcess -> Double -> Double -> Double -> IO Double
+ QuantLib.Process: thetaAt :: GenGeneralizedBlackScholesProcess gbs -> Double -> Double -> Double -> IO Double
- QuantLib.TermStructure.Credit: defaultDensity :: DefaultProbabilityTermStructure -> TermPoint -> Bool -> IO Double
+ QuantLib.TermStructure.Credit: defaultDensity :: GenDefaultProbabilityTermStructure d -> TermPoint -> Bool -> IO Double
- QuantLib.TermStructure.Credit: defaultProbability :: DefaultProbabilityTermStructure -> TermPoint -> Bool -> IO Double
+ QuantLib.TermStructure.Credit: defaultProbability :: GenDefaultProbabilityTermStructure d -> TermPoint -> Bool -> IO Double
- QuantLib.TermStructure.Credit: defaultProbabilityBetween :: DefaultProbabilityTermStructure -> TermInterval -> Bool -> IO Double
+ QuantLib.TermStructure.Credit: defaultProbabilityBetween :: GenDefaultProbabilityTermStructure d -> TermInterval -> Bool -> IO Double
- QuantLib.TermStructure.Credit: factorSpreadedHazardRateCurve :: DefaultProbabilityTermStructure -> GenQuote q -> IO DefaultProbabilityTermStructure
+ QuantLib.TermStructure.Credit: factorSpreadedHazardRateCurve :: GenDefaultProbabilityTermStructure d -> GenQuote q -> IO DefaultProbabilityTermStructure
- QuantLib.TermStructure.Credit: hazardRate :: DefaultProbabilityTermStructure -> TermPoint -> Bool -> IO Double
+ QuantLib.TermStructure.Credit: hazardRate :: GenDefaultProbabilityTermStructure d -> TermPoint -> Bool -> IO Double
- QuantLib.TermStructure.Credit: spreadCdsHelper :: GenQuote q -> (Word, TimeUnit) -> Int -> Calendar -> Frequency -> BusinessDayConvention -> DateGenerationRule -> DayCounter -> Double -> GenYieldTermStructure y -> Bool -> Bool -> Maybe Day -> DayCounter -> Bool -> PricingModel -> IO DefaultProbabilityHelper
+ QuantLib.TermStructure.Credit: spreadCdsHelper :: GenQuote q -> (Word, TimeUnit) -> Int -> Calendar -> Frequency -> BusinessDayConvention -> DateGenerationRule -> DayCounter -> Double -> GenYieldTermStructure y -> Bool -> Bool -> Maybe Day -> DayCounter -> Bool -> PricingModel -> Maybe Day -> IO DefaultProbabilityHelper
- QuantLib.TermStructure.Credit: spreadedHazardRateCurve :: DefaultProbabilityTermStructure -> GenQuote q -> IO DefaultProbabilityTermStructure
+ QuantLib.TermStructure.Credit: spreadedHazardRateCurve :: GenDefaultProbabilityTermStructure d -> GenQuote q -> IO DefaultProbabilityTermStructure
- QuantLib.TermStructure.Credit: survivalProbability :: DefaultProbabilityTermStructure -> TermPoint -> Bool -> IO Double
+ QuantLib.TermStructure.Credit: survivalProbability :: GenDefaultProbabilityTermStructure d -> TermPoint -> Bool -> IO Double
- QuantLib.TermStructure.Credit: type DefaultProbabilityTermStructure = GenTermStructure CDefaultProbabilityTermStructure
+ QuantLib.TermStructure.Credit: type DefaultProbabilityTermStructure = GenDefaultProbabilityTermStructure CDefaultProbabilityTermStructure
- QuantLib.TermStructure.Credit: upfrontCdsHelper :: GenQuote q -> Double -> (Word, TimeUnit) -> Int -> Calendar -> Frequency -> BusinessDayConvention -> DateGenerationRule -> DayCounter -> Double -> GenYieldTermStructure y -> Word -> Bool -> Bool -> Maybe Day -> DayCounter -> Bool -> PricingModel -> IO DefaultProbabilityHelper
+ QuantLib.TermStructure.Credit: upfrontCdsHelper :: GenQuote q -> Double -> (Word, TimeUnit) -> Int -> Calendar -> Frequency -> BusinessDayConvention -> DateGenerationRule -> DayCounter -> Double -> GenYieldTermStructure y -> Word -> Bool -> Bool -> Maybe Day -> DayCounter -> Bool -> PricingModel -> Maybe Day -> IO DefaultProbabilityHelper
- QuantLib.TermStructure.Inflation: cpiBondHelper :: GenQuote q -> Word -> Double -> Double -> (Word, TimeUnit) -> ZeroInflationIndex -> CPIInterpolationType -> Schedule -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> Maybe Day -> Calendar -> IO BondHelper
+ QuantLib.TermStructure.Inflation: cpiBondHelper :: GenQuote q -> Word -> Double -> Double -> (Word, TimeUnit) -> GenZeroInflationIndex zidx -> CPIInterpolationType -> Schedule -> NonEmpty Double -> DayCounter -> BusinessDayConvention -> Maybe Day -> Calendar -> IO BondHelper
- QuantLib.TermStructure.Inflation: interpolatedYoyInflationCurve :: Day -> NonEmpty (Day, Double) -> Frequency -> DayCounter -> Interpolation -> IO YoYInflationTermStructure
+ QuantLib.TermStructure.Inflation: interpolatedYoyInflationCurve :: Day -> NonEmpty (Day, Double) -> Frequency -> DayCounter -> Maybe Seasonality -> Interpolation -> IO YoYInflationTermStructure
- QuantLib.TermStructure.Inflation: piecewiseYoyInflationCurve :: Day -> Day -> Double -> Frequency -> DayCounter -> NonEmpty YearOnYearInflationSwapHelper -> Interpolation -> IO YoYInflationTermStructure
+ QuantLib.TermStructure.Inflation: piecewiseYoyInflationCurve :: Day -> Day -> Double -> Frequency -> DayCounter -> NonEmpty YearOnYearInflationSwapHelper -> Maybe Seasonality -> Interpolation -> IO YoYInflationTermStructure
- QuantLib.TermStructure.Inflation: piecewiseZeroInflationCurve :: Day -> Day -> Frequency -> DayCounter -> NonEmpty ZeroCouponInflationSwapHelper -> Interpolation -> IO ZeroInflationTermStructure
+ QuantLib.TermStructure.Inflation: piecewiseZeroInflationCurve :: Day -> Day -> Frequency -> DayCounter -> NonEmpty ZeroCouponInflationSwapHelper -> Maybe Seasonality -> Interpolation -> IO ZeroInflationTermStructure
- QuantLib.TermStructure.Inflation: yearOnYearInflationSwapHelper :: GenQuote q -> (Word, TimeUnit) -> Day -> Calendar -> BusinessDayConvention -> DayCounter -> YoYInflationIndex -> CPIInterpolationType -> GenYieldTermStructure y -> PillarChoice -> Maybe Day -> IO YearOnYearInflationSwapHelper
+ QuantLib.TermStructure.Inflation: yearOnYearInflationSwapHelper :: GenQuote q -> (Word, TimeUnit) -> InflationSwapPeriod -> Calendar -> BusinessDayConvention -> DayCounter -> GenYoYInflationIndex yidx -> CPIInterpolationType -> GenYieldTermStructure y -> PillarChoice -> Maybe Day -> IO YearOnYearInflationSwapHelper
- QuantLib.TermStructure.Inflation: zeroCouponInflationSwapHelper :: GenQuote q -> (Word, TimeUnit) -> Day -> Calendar -> BusinessDayConvention -> DayCounter -> ZeroInflationIndex -> CPIInterpolationType -> PillarChoice -> Maybe Day -> IO ZeroCouponInflationSwapHelper
+ QuantLib.TermStructure.Inflation: zeroCouponInflationSwapHelper :: GenQuote q -> (Word, TimeUnit) -> InflationSwapPeriod -> Calendar -> BusinessDayConvention -> DayCounter -> GenZeroInflationIndex zidx -> CPIInterpolationType -> PillarChoice -> Maybe Day -> IO ZeroCouponInflationSwapHelper
- QuantLib.TermStructure.InflationVolatility: cpiCapFloorTermPriceSurface :: Double -> Double -> (Word, TimeUnit) -> Calendar -> BusinessDayConvention -> DayCounter -> ZeroInflationIndex -> CPIInterpolationType -> GenYieldTermStructure y -> [Double] -> [Double] -> [(Word, TimeUnit)] -> RealMatrix -> RealMatrix -> Interpolation2D -> IO CPICapFloorTermPriceSurface
+ QuantLib.TermStructure.InflationVolatility: cpiCapFloorTermPriceSurface :: Double -> Double -> (Word, TimeUnit) -> Calendar -> BusinessDayConvention -> DayCounter -> GenZeroInflationIndex zidx -> CPIInterpolationType -> GenYieldTermStructure y -> [Double] -> [Double] -> [(Word, TimeUnit)] -> RealMatrix -> RealMatrix -> Interpolation2D -> IO CPICapFloorTermPriceSurface
- QuantLib.TermStructure.InflationVolatility: kInterpolatedYoyOptionletVolatilitySurfaceBachelier :: Word -> Calendar -> BusinessDayConvention -> DayCounter -> YoYCapFloorTermPriceSurface -> YoYInflationIndex -> GenYieldTermStructure y -> Double -> Interpolation -> IO YoYOptionletVolatilitySurface
+ QuantLib.TermStructure.InflationVolatility: kInterpolatedYoyOptionletVolatilitySurfaceBachelier :: Word -> Calendar -> BusinessDayConvention -> DayCounter -> YoYCapFloorTermPriceSurface -> GenYoYInflationIndex yidx -> GenYieldTermStructure y -> Double -> Interpolation -> IO YoYOptionletVolatilitySurface
- QuantLib.TermStructure.InflationVolatility: kInterpolatedYoyOptionletVolatilitySurfaceBlack :: Word -> Calendar -> BusinessDayConvention -> DayCounter -> YoYCapFloorTermPriceSurface -> YoYInflationIndex -> GenYieldTermStructure y -> Double -> Interpolation -> IO YoYOptionletVolatilitySurface
+ QuantLib.TermStructure.InflationVolatility: kInterpolatedYoyOptionletVolatilitySurfaceBlack :: Word -> Calendar -> BusinessDayConvention -> DayCounter -> YoYCapFloorTermPriceSurface -> GenYoYInflationIndex yidx -> GenYieldTermStructure y -> Double -> Interpolation -> IO YoYOptionletVolatilitySurface
- QuantLib.TermStructure.InflationVolatility: kInterpolatedYoyOptionletVolatilitySurfaceUnitDisplacedBlack :: Word -> Calendar -> BusinessDayConvention -> DayCounter -> YoYCapFloorTermPriceSurface -> YoYInflationIndex -> GenYieldTermStructure y -> Double -> Interpolation -> IO YoYOptionletVolatilitySurface
+ QuantLib.TermStructure.InflationVolatility: kInterpolatedYoyOptionletVolatilitySurfaceUnitDisplacedBlack :: Word -> Calendar -> BusinessDayConvention -> DayCounter -> YoYCapFloorTermPriceSurface -> GenYoYInflationIndex yidx -> GenYieldTermStructure y -> Double -> Interpolation -> IO YoYOptionletVolatilitySurface
- QuantLib.TermStructure.InflationVolatility: yoyCapFloorTermPriceSurface :: Word -> (Word, TimeUnit) -> YoYInflationIndex -> CPIInterpolationType -> GenYieldTermStructure y -> DayCounter -> Calendar -> BusinessDayConvention -> [Double] -> [Double] -> [(Word, TimeUnit)] -> RealMatrix -> RealMatrix -> Interpolation2D -> Interpolation -> IO YoYCapFloorTermPriceSurface
+ QuantLib.TermStructure.InflationVolatility: yoyCapFloorTermPriceSurface :: Word -> (Word, TimeUnit) -> GenYoYInflationIndex yidx -> CPIInterpolationType -> GenYieldTermStructure y -> DayCounter -> Calendar -> BusinessDayConvention -> [Double] -> [Double] -> [(Word, TimeUnit)] -> RealMatrix -> RealMatrix -> Interpolation2D -> Interpolation -> IO YoYCapFloorTermPriceSurface
- QuantLib.TermStructure.Volatility: noArbSabrSwaptionVolatilityCube :: GenSwaptionVolatilityStructure sv -> [(Word, TimeUnit)] -> [(Word, TimeUnit)] -> [Double] -> Matrix (GenQuote q1) -> GenSwapIndex sidx1 -> GenSwapIndex sidx2 -> Bool -> Matrix (GenQuote q2) -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe Double -> Maybe Double -> Bool -> Word -> Bool -> Double -> Maybe EndCriteria -> Maybe OptimizationMethod -> IO NoArbSabrSwaptionVolatilityCube
+ QuantLib.TermStructure.Volatility: noArbSabrSwaptionVolatilityCube :: GenSwaptionVolatilityStructure sv -> [(Word, TimeUnit)] -> [(Word, TimeUnit)] -> [Double] -> Matrix (GenQuote q1) -> GenSwapIndex sidx1 -> GenSwapIndex sidx2 -> Bool -> Matrix (GenQuote q2) -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe Double -> Maybe Double -> Bool -> Word -> Bool -> Double -> Maybe EndCriteria -> Maybe OptimizationMethod -> Bool -> IO NoArbSabrSwaptionVolatilityCube
- QuantLib.TermStructure.Volatility: optionletStripper :: CapFloorTermVolSurface -> GenIborIndex ibor -> Maybe Double -> Double -> Word -> Maybe (GenYieldTermStructure y) -> VolatilityType -> Double -> Bool -> Maybe (Word, TimeUnit) -> IO OptionletVolatilityStructure
+ QuantLib.TermStructure.Volatility: optionletStripper :: CapFloorTermVolSurface -> GenIborIndex ibor -> Maybe Double -> Double -> Word -> Maybe (GenYieldTermStructure y) -> VolatilityType -> Double -> Bool -> Maybe (Word, TimeUnit) -> Word -> IO OptionletVolatilityStructure
- QuantLib.TermStructure.Volatility: optionletStripperWithAtm :: CapFloorTermVolSurface -> GenIborIndex ibor -> Maybe Double -> Double -> Word -> Maybe (GenYieldTermStructure y) -> VolatilityType -> Double -> Bool -> Maybe (Word, TimeUnit) -> CapFloorTermVolCurve -> IO OptionletStripper2
+ QuantLib.TermStructure.Volatility: optionletStripperWithAtm :: CapFloorTermVolSurface -> GenIborIndex ibor -> Maybe Double -> Double -> Word -> Maybe (GenYieldTermStructure y) -> VolatilityType -> Double -> Bool -> Maybe (Word, TimeUnit) -> CapFloorTermVolCurve -> Word -> IO OptionletStripper2
- QuantLib.TermStructure.Volatility: sabrSwaptionVolatilityCube :: GenSwaptionVolatilityStructure sv -> [(Word, TimeUnit)] -> [(Word, TimeUnit)] -> [Double] -> Matrix (GenQuote q1) -> GenSwapIndex sidx1 -> GenSwapIndex sidx2 -> Bool -> Matrix (GenQuote q2) -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe Double -> Maybe Double -> Bool -> Word -> Bool -> Double -> Maybe EndCriteria -> Maybe OptimizationMethod -> IO SabrSwaptionVolatilityCube
+ QuantLib.TermStructure.Volatility: sabrSwaptionVolatilityCube :: GenSwaptionVolatilityStructure sv -> [(Word, TimeUnit)] -> [(Word, TimeUnit)] -> [Double] -> Matrix (GenQuote q1) -> GenSwapIndex sidx1 -> GenSwapIndex sidx2 -> Bool -> Matrix (GenQuote q2) -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe Double -> Maybe Double -> Bool -> Word -> Bool -> Double -> Maybe EndCriteria -> Maybe OptimizationMethod -> Bool -> IO SabrSwaptionVolatilityCube
- QuantLib.TermStructure.Yield: GlobalDiscountLogLinear :: !Double -> ![Double] -> Bootstrap rh2
+ QuantLib.TermStructure.Yield: GlobalDiscountLogLinear :: !Double -> ![Double] -> !Maybe BootstrapInitialGuess -> Bootstrap rh2
- QuantLib.TermStructure.Yield: GlobalForwardRateLinear :: !Double -> ![Double] -> Bootstrap rh2
+ QuantLib.TermStructure.Yield: GlobalForwardRateLinear :: !Double -> ![Double] -> !Maybe BootstrapInitialGuess -> Bootstrap rh2
- QuantLib.TermStructure.Yield: GlobalSimpleZeroLinear :: !Double -> ![Double] -> Bootstrap rh2
+ QuantLib.TermStructure.Yield: GlobalSimpleZeroLinear :: !Double -> ![Double] -> !Maybe BootstrapInitialGuess -> Bootstrap rh2
- QuantLib.TermStructure.Yield: GlobalSimpleZeroLinearFull :: !NonEmpty (GenRateHelper rh2) -> ![Day] -> !Double -> Bootstrap rh2
+ QuantLib.TermStructure.Yield: GlobalSimpleZeroLinearFull :: !NonEmpty (GenRateHelper rh2) -> ![Day] -> !Double -> ![Double] -> !Maybe BootstrapInitialGuess -> Bootstrap rh2
- QuantLib.TermStructure.Yield: GlobalZeroYieldLinear :: !Double -> ![Double] -> Bootstrap rh2
+ QuantLib.TermStructure.Yield: GlobalZeroYieldLinear :: !Double -> ![Double] -> !Maybe BootstrapInitialGuess -> Bootstrap rh2
- QuantLib.TermStructure.Yield: OISRateHelperOpts :: Bool -> Int -> BusinessDayConvention -> Frequency -> Maybe Calendar -> Maybe (GenQuote m) -> PillarChoice -> Maybe Day -> RateAveragingType -> Maybe Bool -> Maybe Frequency -> Maybe Calendar -> OvernightObservation -> Maybe FloatingRateCouponPricer -> DateGenerationRule -> Maybe Calendar -> BusinessDayConvention -> OISRateHelperOpts m
+ QuantLib.TermStructure.Yield: OISRateHelperOpts :: Bool -> Int -> BusinessDayConvention -> Frequency -> Maybe Calendar -> Maybe (GenQuote m) -> PillarChoice -> Maybe Day -> RateAveragingType -> Maybe Bool -> Maybe Frequency -> Maybe Calendar -> OvernightObservation -> Maybe (GenFloatingRateCouponPricer p) -> DateGenerationRule -> Maybe Calendar -> BusinessDayConvention -> Maybe DayCounter -> OISRateHelperOpts m p
- QuantLib.TermStructure.Yield: [oisAveragingMethod] :: OISRateHelperOpts m -> RateAveragingType
+ QuantLib.TermStructure.Yield: [oisAveragingMethod] :: OISRateHelperOpts m p -> RateAveragingType
- QuantLib.TermStructure.Yield: [oisConvention] :: OISRateHelperOpts m -> BusinessDayConvention
+ QuantLib.TermStructure.Yield: [oisConvention] :: OISRateHelperOpts m p -> BusinessDayConvention
- QuantLib.TermStructure.Yield: [oisCustomPillarDate] :: OISRateHelperOpts m -> Maybe Day
+ QuantLib.TermStructure.Yield: [oisCustomPillarDate] :: OISRateHelperOpts m p -> Maybe Day
- QuantLib.TermStructure.Yield: [oisEndOfMonth] :: OISRateHelperOpts m -> Maybe Bool
+ QuantLib.TermStructure.Yield: [oisEndOfMonth] :: OISRateHelperOpts m p -> Maybe Bool
- QuantLib.TermStructure.Yield: [oisFixedCalendar] :: OISRateHelperOpts m -> Maybe Calendar
+ QuantLib.TermStructure.Yield: [oisFixedCalendar] :: OISRateHelperOpts m p -> Maybe Calendar
- QuantLib.TermStructure.Yield: [oisFixedPaymentFrequency] :: OISRateHelperOpts m -> Maybe Frequency
+ QuantLib.TermStructure.Yield: [oisFixedPaymentFrequency] :: OISRateHelperOpts m p -> Maybe Frequency
- QuantLib.TermStructure.Yield: [oisObservation] :: OISRateHelperOpts m -> OvernightObservation
+ QuantLib.TermStructure.Yield: [oisObservation] :: OISRateHelperOpts m p -> OvernightObservation
- QuantLib.TermStructure.Yield: [oisOvernightCalendar] :: OISRateHelperOpts m -> Maybe Calendar
+ QuantLib.TermStructure.Yield: [oisOvernightCalendar] :: OISRateHelperOpts m p -> Maybe Calendar
- QuantLib.TermStructure.Yield: [oisOvernightSpread] :: OISRateHelperOpts m -> Maybe (GenQuote m)
+ QuantLib.TermStructure.Yield: [oisOvernightSpread] :: OISRateHelperOpts m p -> Maybe (GenQuote m)
- QuantLib.TermStructure.Yield: [oisPaymentCalendar] :: OISRateHelperOpts m -> Maybe Calendar
+ QuantLib.TermStructure.Yield: [oisPaymentCalendar] :: OISRateHelperOpts m p -> Maybe Calendar
- QuantLib.TermStructure.Yield: [oisPaymentConvention] :: OISRateHelperOpts m -> BusinessDayConvention
+ QuantLib.TermStructure.Yield: [oisPaymentConvention] :: OISRateHelperOpts m p -> BusinessDayConvention
- QuantLib.TermStructure.Yield: [oisPaymentFrequency] :: OISRateHelperOpts m -> Frequency
+ QuantLib.TermStructure.Yield: [oisPaymentFrequency] :: OISRateHelperOpts m p -> Frequency
- QuantLib.TermStructure.Yield: [oisPaymentLag] :: OISRateHelperOpts m -> Int
+ QuantLib.TermStructure.Yield: [oisPaymentLag] :: OISRateHelperOpts m p -> Int
- QuantLib.TermStructure.Yield: [oisPillar] :: OISRateHelperOpts m -> PillarChoice
+ QuantLib.TermStructure.Yield: [oisPillar] :: OISRateHelperOpts m p -> PillarChoice
- QuantLib.TermStructure.Yield: [oisPricer] :: OISRateHelperOpts m -> Maybe FloatingRateCouponPricer
+ QuantLib.TermStructure.Yield: [oisPricer] :: OISRateHelperOpts m p -> Maybe (GenFloatingRateCouponPricer p)
- QuantLib.TermStructure.Yield: [oisRule] :: OISRateHelperOpts m -> DateGenerationRule
+ QuantLib.TermStructure.Yield: [oisRule] :: OISRateHelperOpts m p -> DateGenerationRule
- QuantLib.TermStructure.Yield: [oisTelescopicValueDates] :: OISRateHelperOpts m -> Bool
+ QuantLib.TermStructure.Yield: [oisTelescopicValueDates] :: OISRateHelperOpts m p -> Bool
- QuantLib.TermStructure.Yield: bondHelper :: GenQuote q -> Bond -> BondPriceType -> IO BondHelper
+ QuantLib.TermStructure.Yield: bondHelper :: GenQuote q -> GenBond b -> BondPriceType -> IO BondHelper
- QuantLib.TermStructure.Yield: constNotionalCrossCurrencyBasisSwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> GenIborIndex ibor1 -> GenIborIndex ibor2 -> GenYieldTermStructure y -> Bool -> Bool -> Maybe Frequency -> Int -> Maybe Frequency -> IO RateHelper
+ QuantLib.TermStructure.Yield: constNotionalCrossCurrencyBasisSwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> GenIborIndex ibor1 -> GenIborIndex ibor2 -> GenYieldTermStructure y -> Bool -> Bool -> Maybe Frequency -> Int -> Maybe Frequency -> Maybe Bool -> Bool -> Maybe (StubIndexSelection ibor3) -> Maybe (StubIndexSelection ibor4) -> IO RateHelper
- QuantLib.TermStructure.Yield: constNotionalCrossCurrencySwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> Frequency -> DayCounter -> GenIborIndex ibor -> GenYieldTermStructure y -> Bool -> Int -> IO RateHelper
+ QuantLib.TermStructure.Yield: constNotionalCrossCurrencySwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> Frequency -> DayCounter -> GenIborIndex ibor -> GenYieldTermStructure y -> Bool -> Int -> Maybe Bool -> Maybe Frequency -> Maybe (StubIndexSelection ibor2) -> IO RateHelper
- QuantLib.TermStructure.Yield: data OISRateHelperOpts m
+ QuantLib.TermStructure.Yield: data OISRateHelperOpts m p
- QuantLib.TermStructure.Yield: defaultOisRateHelperOpts :: OISRateHelperOpts m
+ QuantLib.TermStructure.Yield: defaultOisRateHelperOpts :: OISRateHelperOpts m p
- QuantLib.TermStructure.Yield: depositRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> DayCounter -> IO RateHelper
+ QuantLib.TermStructure.Yield: depositRateHelper :: GenQuote q -> DepositTerms ibor -> IO RateHelper
- QuantLib.TermStructure.Yield: fxSwapRateHelper :: GenQuote q1 -> GenQuote q2 -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> Bool -> GenYieldTermStructure y -> Calendar -> IO RateHelper
+ QuantLib.TermStructure.Yield: fxSwapRateHelper :: GenQuote q1 -> GenQuote q2 -> FxSwapTerms -> Bool -> GenYieldTermStructure y -> IO RateHelper
- QuantLib.TermStructure.Yield: iborIborBasisSwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> GenIborIndex ibor1 -> GenIborIndex ibor2 -> GenYieldTermStructure y -> Bool -> IO RateHelper
+ QuantLib.TermStructure.Yield: iborIborBasisSwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> GenIborIndex ibor1 -> GenIborIndex ibor2 -> GenYieldTermStructure y -> Bool -> Maybe Bool -> DateGenerationRule -> Int -> Maybe (StubIndexSelection ibor3) -> Maybe (StubIndexSelection ibor4) -> IO RateHelper
- QuantLib.TermStructure.Yield: mtmCrossCurrencyBasisSwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> GenIborIndex ibor1 -> GenIborIndex ibor2 -> GenYieldTermStructure y -> Bool -> Bool -> Bool -> Maybe Frequency -> Int -> Maybe Frequency -> IO RateHelper
+ QuantLib.TermStructure.Yield: mtmCrossCurrencyBasisSwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> GenIborIndex ibor1 -> GenIborIndex ibor2 -> GenYieldTermStructure y -> Bool -> Bool -> Bool -> Maybe Frequency -> Int -> Maybe Frequency -> Word -> Maybe Calendar -> Maybe Bool -> Maybe (StubIndexSelection ibor3) -> Maybe (StubIndexSelection ibor4) -> IO RateHelper
- QuantLib.TermStructure.Yield: oisRateHelper :: Word -> (Int, TimeUnit) -> (Int, TimeUnit) -> GenQuote q -> OvernightIborIndex -> Maybe (GenYieldTermStructure y) -> IO OISRateHelper
+ QuantLib.TermStructure.Yield: oisRateHelper :: OisTerms -> GenQuote q -> OvernightIborIndex -> Maybe (GenYieldTermStructure y) -> IO OISRateHelper
- QuantLib.TermStructure.Yield: oisRateHelperWithOptions :: Word -> (Int, TimeUnit) -> (Int, TimeUnit) -> GenQuote q -> OvernightIborIndex -> Maybe (GenYieldTermStructure y) -> OISRateHelperOpts m -> IO OISRateHelper
+ QuantLib.TermStructure.Yield: oisRateHelperWithOptions :: OisTerms -> GenQuote q -> OvernightIborIndex -> Maybe (GenYieldTermStructure y) -> OISRateHelperOpts m p -> IO OISRateHelper
- QuantLib.TermStructure.Yield: overnightIborBasisSwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> OvernightIborIndex -> GenIborIndex ibor -> Maybe (GenYieldTermStructure y) -> IO RateHelper
+ QuantLib.TermStructure.Yield: overnightIborBasisSwapRateHelper :: GenQuote q -> (Int, TimeUnit) -> Word -> Calendar -> BusinessDayConvention -> Bool -> OvernightIborIndex -> GenIborIndex ibor -> Maybe (GenYieldTermStructure y) -> Bool -> Int -> Maybe Frequency -> Maybe Bool -> DateGenerationRule -> RateAveragingType -> Bool -> Bool -> Maybe (StubIndexSelection ibor2) -> IO RateHelper
- QuantLib.TermStructure.Yield: swapRateHelper :: GenQuote q1 -> GenSwapIndex sidx -> Maybe (GenQuote q2) -> (Int, TimeUnit) -> Maybe (GenYieldTermStructure y) -> PillarChoice -> Maybe Day -> Bool -> Maybe Bool -> Maybe FloatingRateCouponPricer -> IO SwapRateHelper
+ QuantLib.TermStructure.Yield: swapRateHelper :: GenQuote q1 -> SwapRateTerms sidx ibor -> Maybe (GenQuote q2) -> Maybe (GenYieldTermStructure y) -> PillarChoice -> Maybe Day -> Bool -> Maybe Bool -> Maybe (GenFloatingRateCouponPricer frcp) -> IO SwapRateHelper

Files

CHANGELOG.md view
@@ -1,3 +1,31 @@+## 0.8.0.0 (2026)++- Added value-based Settings snapshots with checked restoration, preserving floating dates+  and observer settings, and native fixing-history name normalization for context owners.++- Added QuantLib 1.44 support, while retaining compatibility with 1.43. New bindings include+  Rough Heston pricing, mark-to-market cross-currency basis swaps, FX reset cash flows, and+  Gaussian1d (GSR) swaptions on overnight-indexed swaps. Calls requiring 1.44, and non-default+  values of arguments added in 1.44, report `UnsupportedQuantLibVersion` on 1.43.+- Deprecated the `ItalyExchange` calendar, following QuantLib 1.44; it will be removed when+  hasquant adopts QuantLib 1.45. Use `TARGET` instead.+- `OvernightIndexedSwap` is now a `FixedVsFloatingSwap`; its fair-rate and fixed-leg inspectors+  come from the generic `FixedVsFloatingSwap` instances.+- Expanded term-structure and bootstrap-helper support, including dated helper constructors and+  implied-quote calculations on caller-supplied curves. Several existing constructor signatures+  changed to expose additional configuration.+- Extended model and engine support, including an exact-mean option for Heston–Hull–White pricing+  that avoids numerical failures in the upstream approximation. `analyticH1HwEngine` now requires+  an `H1HwMean` argument and rejects a negative equity/rate correlation with either integration control.+- Split Longstaff-Schwartz regression into `lsmFit` (basis coefficients) and `lsmEvaluate`, which+  reproduce `lsmRegress`/`lsmRegressMulti` bit for bit within one build; `lsmEvaluatorIdentity`+  names that build so stored coefficients can be refused elsewhere.+- Improved simulation and fixing inspection: `pathGeneratorSequence` exposes the random variates+  actually consumed, and inflation fixing dependencies now follow the dates and interpolation+  rules QuantLib uses.+- Improved callback validation, exception safety, and object ownership across the FFI, including+  a fix for a MultiCurve ownership cycle.+ ## 0.7.0.0 (2026)  The final broad API-coverage batch adds Haskell callbacks for payoffs, optimization, regression and
QuantLib/CashFlow.chs view
@@ -1,6 +1,4 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE TemplateHaskell, FlexibleInstances #-} module QuantLib.CashFlow   (     -- * Types@@ -17,6 +15,8 @@   , IndexedCashFlow   , FixedRateCoupon   , IborCoupon+  , FxResetCoupon+  , FxResetNotionalExchange   , AverageBMACoupon   , StrippedCappedFlooredCoupon   , CmsCoupon@@ -44,8 +44,11 @@   , CPICouponPricer   , YoYInflationCouponPricer   , EquityCashFlowPricer+  , FxResetPricer      -- ** Configuration+  , FxReset(..)+  , FxResetConvention(..)   , DurationType(..)   , RateAveragingType(..)   , TimingAdjustment(..)@@ -71,7 +74,13 @@   , MultipleResetsLegOpts(..)   , defaultMultipleResetsLegOpts +  , StubIndexSelection(..)+     -- * Constructors+  , stubIborCoupon+  , fxResetCoupon+  , fxResetNotionalExchange+  , discountingFxResetPricer     -- ** Hierarchy conversion   , asLeg   , asCashFlow@@ -161,6 +170,8 @@   , equityQuantoCashFlowPricer      -- * Mutators+  , HasFxResetPricer(..)+  , setFxResetLegPricer   , setCpiCouponPricer   , setFloatingRateCouponPricer   , setYoyInflationCouponPricer@@ -170,8 +181,12 @@   , setEquityLegPricer      -- * Inspectors+  , fxResetObservation+  , fxResetValueDate+  , fxResetRate     -- ** Coupon fixings   , HasFixingDates(..)+  , fixingDependencies   , HasIndexFixings(..)   , baseFixing   , indexFixing@@ -216,6 +231,7 @@     -- ** Coupon rates and prices   , coupons   , couponAccrualStartDates+  , couponNominal   , couponAccruedAmount   , rate   , price@@ -243,7 +259,12 @@   , putOptionRate   , priceWithoutOptionality   ) where+import Language.Haskell.TH(mkName, varT) import QuantLib.Internal+import Foreign.C.Types(CInt)+import Foreign.Ptr(Ptr)+import Foreign.Marshal.Alloc(alloca)+import Foreign.Storable(peek) {#import QuantLib.InterestRate#}(Compounding, VolatilityType) {#import QuantLib.Time.Schedule#}(Frequency) import QuantLib.Time.Calendar(calendar, CalendarConstructor(..))@@ -258,10 +279,12 @@ #include "qlEnumObjects.h"  #include "ql.h"+{#pointer *QlStubIndexSelection nocode#}  {#pointer *QlDigitalCoupon as DigitalCoupon foreign -> CDigitalCoupon' nocode#} {#pointer *QlRangeAccrualFloatersCoupon as RangeAccrualFloatersCoupon foreign -> CRangeAccrualFloatersCoupon' nocode#} {#pointer *QlYoYInflationCoupon as YoYInflationCoupon foreign -> CYoYInflationCoupon' nocode#}+{#pointer *Currency foreign -> CCurrency nocode#} {#pointer *Calendar foreign -> CCalendar nocode#} {#pointer *Leg foreign -> CLeg' nocode#} {#pointer *CouponLeg foreign -> CCouponLeg' nocode#}@@ -292,6 +315,9 @@ {#pointer *QlFloatingRateCoupon as FloatingRateCoupon foreign -> CFloatingRateCoupon' nocode#} {#pointer *QlStrippedCappedFlooredCoupon as StrippedCappedFlooredCoupon foreign -> CStrippedCappedFlooredCoupon' nocode#} {#pointer *QlDigitalReplication as DigitalReplication foreign -> CDigitalReplication nocode#}+{#pointer *QlFxResetCoupon as FxResetCoupon foreign -> CFxResetCoupon' nocode#}+{#pointer *QlFxResetNotionalExchange as FxResetNotionalExchange foreign -> CFxResetNotionalExchange' nocode#}+{#pointer *QlFxResetPricer as FxResetPricer foreign -> CFxResetPricer nocode#} {#pointer *QlIborCoupon as IborCoupon foreign -> CIborCoupon' nocode#} {#pointer *QlOvernightIndexedCoupon as OvernightIndexedCoupon foreign -> COvernightIndexedCoupon' nocode#} {#pointer *QlAverageBMACoupon as AverageBMACoupon foreign -> CAverageBMACoupon' nocode#}@@ -299,10 +325,20 @@ {#pointer *QlCPICoupon as CPICoupon foreign -> CCPICoupon' nocode#} {#pointer *QlCPICouponPricer as CPICouponPricer foreign -> CCPICouponPricer nocode#} {#pointer *QlCPIVolatilitySurface as CPIVolatilitySurface foreign -> CCPIVolatilitySurface' nocode#}+{#pointer *QlCmsCouponPricer as CmsCouponPricer foreign -> CCmsCouponPricer' nocode#}+{#pointer *QlCmsCoupon as CmsCoupon foreign -> CCmsCoupon' nocode#}+{#pointer *QlSwapSpreadIndex as SwapSpreadIndex foreign -> CSwapSpreadIndex' nocode#}+{#pointer *QlDigitalCmsCoupon as DigitalCmsCoupon foreign -> CDigitalCmsCoupon' nocode#}+{#pointer *QlDigitalCmsSpreadCoupon as DigitalCmsSpreadCoupon foreign -> CDigitalCmsSpreadCoupon' nocode#}+{#pointer *QlSmileSection as SmileSection foreign -> CSmileSection nocode#}+{#pointer *QlYoYOptionletVolatilitySurface as YoYOptionletVolatilitySurface foreign -> CYoYOptionletVolatilitySurface' nocode#}+{#pointer *QlYoYInflationCouponPricer as YoYInflationCouponPricer foreign -> CYoYInflationCouponPricer nocode#}  {#enum DurationType{} deriving(Show, Eq, Read)#} {#enum RateAveragingType{} add prefix="Averaging" deriving(Show, Eq, Read)#} {#enum TimingAdjustment{} deriving(Show, Eq, Read)#}+{#enum YieldCurveModel{} deriving(Show, Eq, Read)#}+{#enum ReplicationType{} deriving(Show, Eq, Read)#}  -- IborLegOpts/CmsLegOpts bundle every IborLeg/CmsLeg builder-method param beyond -- iborLeg/cmsLeg's original 12-arg shape, pre-populated with upstream's own defaults via@@ -317,7 +353,7 @@ -- {#fun#} hook appears, and a top-level TH splice anywhere in between would otherwise -- split the file into declaration groups that can't see each other, breaking every -- earlier {#fun#} wrapper's reference to its own (always-last) foreign-import stub.-$(deriveOptionsRecord "IborLegOpts" []+$(deriveOptionsRecord "IborLegOpts" ["ibor2"]   [ ("ilgPaymentLag", [t|Int|], [|0|])   , ("ilgPaymentCalendar", [t|Maybe Calendar|], [|Nothing|])   , ("ilgExCouponPeriod", [t|(Int, TimeUnit)|], [|(0, Days)|])@@ -326,11 +362,10 @@   , ("ilgExCouponEndOfMonth", [t|Bool|], [|False|])   , ("ilgFixingConvention", [t|BusinessDayConvention|], [|Preceding|])   , ("ilgUseIndexedCoupons", [t|Maybe Bool|], [|Nothing|])+  , ("ilgStubIndexSelection", [t|Maybe (StubIndexSelection $(varT (mkName "ibor2")))|], [|Nothing|])   ]) --- Same shape as IborLegOpts, minus the fields CmsLeg's builder doesn't have--- (withPaymentLag/withPaymentCalendar/withIndexedCoupons -- confirmed absent from--- ql/cashflows/cmscoupon.hpp's CmsLeg). Same splice-placement constraint as above.+-- CmsLegOpts omits the IborLegOpts fields that QuantLib's CmsLeg builder lacks. $(deriveOptionsRecord "CmsLegOpts" []   [ ("cmslExCouponPeriod", [t|(Int, TimeUnit)|], [|(0, Days)|])   , ("cmslExCouponCalendar", [t|Maybe Calendar|], [|Nothing|])@@ -489,10 +524,10 @@   ,preErrorCheck-`String'errorCheck*-}->`AverageBMACoupon'peekAverageBMACoupon*#}  -- |The fixing dates of the individual BMA rates being averaged over this coupon's accrual period.-{#fun qlAverageBMACouponFixingDates as averageBmaCouponFixingDatesRaw{withAverageBMACoupon*`AverageBMACoupon',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlAverageBMACouponFixingDates as averageBmaCouponFixingDatesRaw{withAverageBMACoupon*`AverageBMACoupon',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The individual BMA fixings being averaged, in the same order as 'fixingDates'.-{#fun qlAverageBMACouponIndexFixings as averageBmaCouponIndexFixingsRaw{withAverageBMACoupon*`AverageBMACoupon',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlAverageBMACouponIndexFixings as averageBmaCouponIndexFixingsRaw{withAverageBMACoupon*`AverageBMACoupon',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Wrap a floating-rate coupon with optional cap and floor rates. {#fun qlCappedFlooredCoupon as cappedFlooredCoupon{withFloatingRateCoupon*`GenFloatingRateCoupon frc' -- ^underlying@@ -599,7 +634,7 @@   ,preErrorCheck-`String'errorCheck*-}->`MultipleResetsCoupon'peekMultipleResetsCoupon*#}  -- |Fixing dates for the rates being compounded over this coupon's reset schedule.-{#fun qlMultipleResetsCouponFixingDates as multipleResetsCouponFixingDatesRaw{withMultipleResetsCoupon*`MultipleResetsCoupon',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlMultipleResetsCouponFixingDates as multipleResetsCouponFixingDatesRaw{withMultipleResetsCoupon*`MultipleResetsCoupon',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |A range-accrual coupon.  Attach the existing range-accrual pricer before -- asking for its rate; 'priceWithoutOptionality'@@ -609,7 +644,7 @@  -- |A year-on-year inflation coupon.  As for 'yoyInflationLeg', attach a -- YoY inflation coupon pricer before evaluating the coupon rate.-{#fun qlYoYInflationCoupon as yoyInflationCoupon{withDay*`Day',`Double',withDay*`Day',withDay*`Day',fromIntegral`Word',withYoYInflationIndex*`YoYInflationIndex',fromEnumQuantity`(Int,TimeUnit)'&,fromEnumC`CPIInterpolationType',withDayCounter*`DayCounter',`Double',`Double',withMaybeDay*`Maybe Day',withMaybeDay*`Maybe Day',preErrorCheck-`String'errorCheck*-}->`YoYInflationCoupon'peekYoYInflationCoupon*#}+{#fun qlYoYInflationCoupon as yoyInflationCoupon{withDay*`Day',`Double',withDay*`Day',withDay*`Day',fromIntegral`Word',withYoYInflationIndex*`GenYoYInflationIndex yidx',fromEnumQuantity`(Int,TimeUnit)'&,fromEnumC`CPIInterpolationType',withDayCounter*`DayCounter',`Double',`Double',withMaybeDay*`Maybe Day',withMaybeDay*`Maybe Day',preErrorCheck-`String'errorCheck*-}->`YoYInflationCoupon'peekYoYInflationCoupon*#} {#fun qlYoYInflationCouponAdjustedFixing as adjustedFixing{withYoYInflationCoupon*`YoYInflationCoupon',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Pricer that arithmetically averages multiple Ibor resets.@@ -643,13 +678,13 @@  -- |The dates on which the coupon observes the overnight index, one per accrual sub-period. {#fun qlOvernightIndexedCouponFixingDates as overnightIndexedCouponFixingDatesRaw{withOvernightIndexedCoupon*`OvernightIndexedCoupon'-  ,preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The index fixing observed at each of 'fixingDates', in the same order. -- Requires the underlying overnight index to already have those fixings available (historical or -- forecast via a projection curve). {#fun qlOvernightIndexedCouponIndexFixings as overnightIndexedCouponIndexFixingsRaw{withOvernightIndexedCoupon*`OvernightIndexedCoupon'-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Capped/floored overnight-index coupon. {#fun qlCappedFlooredOvernightIndexedCoupon as cappedFlooredOvernightIndexedCoupon{withOvernightIndexedCoupon*`OvernightIndexedCoupon' -- ^underlying@@ -660,7 +695,7 @@   ,preErrorCheck-`String'errorCheck*-}->`FloatingRateCoupon'peekFloatingRateCoupon*#}  -- |Compounding overnight-index coupon pricer.-{#fun qlCompoundingOvernightIndexedCouponPricer as compoundingOvernightIndexedCouponPricer{withMaybeOptionletVolatilityStructure*`Maybe OptionletVolatilityStructure' -- ^capletVolatility+{#fun qlCompoundingOvernightIndexedCouponPricer as compoundingOvernightIndexedCouponPricer{withMaybeOptionletVolatilityStructure*`Maybe (GenOptionletVolatilityStructure ov)' -- ^capletVolatility   ,`Bool' -- ^byApprox   ,preErrorCheck-`String'errorCheck*-}->`FloatingRateCouponPricer'peekFloatingRateCouponPricer*#} @@ -668,17 +703,17 @@ {#fun qlArithmeticAveragedOvernightIndexedCouponPricer as arithmeticAveragedOvernightIndexedCouponPricer{`Double' -- ^meanReversion   ,`Double' -- ^volatility   ,`Bool' -- ^byApprox-  ,withMaybeOptionletVolatilityStructure*`Maybe OptionletVolatilityStructure' -- ^capletVolatility+  ,withMaybeOptionletVolatilityStructure*`Maybe (GenOptionletVolatilityStructure ov)' -- ^capletVolatility   ,`Bool' -- ^effective   ,preErrorCheck-`String'errorCheck*-}->`FloatingRateCouponPricer'peekFloatingRateCouponPricer*#}  -- |Black-formula compounding overnight-index coupon pricer.-{#fun qlBlackCompoundingOvernightIndexedCouponPricer as blackCompoundingOvernightIndexedCouponPricer{withMaybeOptionletVolatilityStructure*`Maybe OptionletVolatilityStructure' -- ^capletVolatility+{#fun qlBlackCompoundingOvernightIndexedCouponPricer as blackCompoundingOvernightIndexedCouponPricer{withMaybeOptionletVolatilityStructure*`Maybe (GenOptionletVolatilityStructure ov)' -- ^capletVolatility   ,`Bool' -- ^effective   ,preErrorCheck-`String'errorCheck*-}->`FloatingRateCouponPricer'peekFloatingRateCouponPricer*#}  -- |Black-formula arithmetic-average overnight-index coupon pricer.-{#fun qlBlackAveragingOvernightIndexedCouponPricer as blackAveragingOvernightIndexedCouponPricer{withMaybeOptionletVolatilityStructure*`Maybe OptionletVolatilityStructure' -- ^capletVolatility+{#fun qlBlackAveragingOvernightIndexedCouponPricer as blackAveragingOvernightIndexedCouponPricer{withMaybeOptionletVolatilityStructure*`Maybe (GenOptionletVolatilityStructure ov)' -- ^capletVolatility   ,`Bool' -- ^effective   ,preErrorCheck-`String'errorCheck*-}->`FloatingRateCouponPricer'peekFloatingRateCouponPricer*#} @@ -732,12 +767,12 @@   ,preErrorCheck-`String'errorCheck*-}->`CPICoupon'peekCPICoupon*#}  -- |CPI coupon pricer using an optional nominal yield curve.-{#fun qlCPICouponPricer as cpiCouponPricer{withMaybeYieldTermStructure*`Maybe YieldTermStructure' -- ^nominalTermStructure+{#fun qlCPICouponPricer as cpiCouponPricer{withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)' -- ^nominalTermStructure   ,preErrorCheck-`String'errorCheck*-}->`CPICouponPricer'peekCPICouponPricer*#}  -- |CPI coupon pricer using a CPI volatility surface and optional nominal yield curve. {#fun qlCPICouponPricerWithVol as cpiCouponPricerWithVol{withGenVolatilityTermStructure*`CPIVolatilitySurface' -- ^volatilitySurface-  ,withMaybeYieldTermStructure*`Maybe YieldTermStructure' -- ^nominalTermStructure+  ,withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)' -- ^nominalTermStructure   ,preErrorCheck-`String'errorCheck*-}->`CPICouponPricer'peekCPICouponPricer*#}  -- |Attach a CPI coupon pricer to a CPI coupon.@@ -783,7 +818,7 @@ -- |Raw binding for 'cashFlows': dates, amounts, and whether each has occurred as of /settlementDate/. {#fun qlLegCashFlows{withLeg*`GenLeg l',fromMaybeBool`Maybe Bool' -- ^includeSettlementDateFlows   ,withMaybeDay*`Maybe Day' -- ^settlementDate-  ,preArray-`[Double]'&peekDoubleArray*,preArray-`[Day]'&peekDayArray*,preArray-`[Bool]'&peekBoolArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preIntArray-`[Day]'&peekDayArray*,preIntArray-`[Bool]'&peekBoolArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |return cash flows together with an indicator whether they occurred as of /settlementDate/ cashFlows :: GenLeg l@@ -1010,7 +1045,7 @@   ,preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |start of the accrual periods for a coupon leg-{#fun qlCouponAccrualStartDates as couponAccrualStartDates{withGenLeg*`CouponLeg',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlCouponAccrualStartDates as couponAccrualStartDates{withGenLeg*`CouponLeg',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Predetermined cash flow paying a fixed /amount/ at /date/. {#fun qlFixedDividend as fixedDividend{`Double' -- ^amount@@ -1057,18 +1092,18 @@   iborLeg_ schedule idx notionals dc adj fixingDays gearings spreads caps floors inArrears zp     (ilgPaymentLag defaultIborLegOpts) cal (ilgExCouponPeriod defaultIborLegOpts) cal     (ilgExCouponConvention defaultIborLegOpts) (ilgExCouponEndOfMonth defaultIborLegOpts)-    (ilgFixingConvention defaultIborLegOpts) (ilgUseIndexedCoupons defaultIborLegOpts)+    (ilgFixingConvention defaultIborLegOpts) (ilgUseIndexedCoupons defaultIborLegOpts) Nothing  -- |'iborLeg' widened to every 'IborLeg' builder-method param via 'IborLegOpts'. iborLegWithOptions :: Schedule -> GenIborIndex ibor -> NonEmpty Double -> DayCounter -> BusinessDayConvention-  -> [Word] -> [Double] -> [Double] -> [Double] -> [Double] -> Bool -> Bool -> IborLegOpts+  -> [Word] -> [Double] -> [Double] -> [Double] -> [Double] -> Bool -> Bool -> IborLegOpts ibor2   -> IO Leg iborLegWithOptions schedule idx notionals dc adj fixingDays gearings spreads caps floors inArrears zp opts = do   cal <- calendar Null   iborLeg_ schedule idx notionals dc adj fixingDays gearings spreads caps floors inArrears zp     (ilgPaymentLag opts) (fromMaybe cal (ilgPaymentCalendar opts)) (ilgExCouponPeriod opts)     (fromMaybe cal (ilgExCouponCalendar opts)) (ilgExCouponConvention opts)-    (ilgExCouponEndOfMonth opts) (ilgFixingConvention opts) (ilgUseIndexedCoupons opts)+    (ilgExCouponEndOfMonth opts) (ilgFixingConvention opts) (ilgUseIndexedCoupons opts) (ilgStubIndexSelection opts)  -- |Raw binding for 'iborLeg'\/'iborLegWithOptions': builds a leg of capped\/floored Ibor-rate coupons. {#fun qlIborLeg as iborLeg_{withSchedule*`Schedule',withIborIndex*`GenIborIndex ibor',withNonEmptyDoubleArray*`NonEmpty Double'& -- ^notionals@@ -1088,6 +1123,7 @@   ,`Bool' -- ^exCouponEndOfMonth   ,fromEnumC`BusinessDayConvention' -- ^fixingConvention   ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor2)' -- ^stubIndexSelection (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`Leg'peekLeg*#}  -- |CMS leg builder (analog of 'iborLeg'), 12-arg core shape -- same defaults-hardcoding@@ -1144,10 +1180,9 @@   ,fromEnumQuantity`(Int,TimeUnit)'& -- ^observationTenor   ,fromEnumC`BusinessDayConvention',preErrorCheck-`String'errorCheck*-}->`Leg'peekLeg*#} --- |Fixed-rate coupons scaled by the ratio of a 'ZeroInflationIndex' fixing to /baseCPI/--- (a 'CPICoupon' leg -- no capped\/floored variant, unlike 'yoyInflationLeg': QL 1.43 has no--- @CappedFlooredCPICoupon@ class to build one from, see README.md's TODO).-{#fun qlCPILeg as cpiLeg{withSchedule*`Schedule',withZeroInflationIndex*`ZeroInflationIndex'+-- |Fixed-rate coupons scaled by the ratio of a 'ZeroInflationIndex' fixing to /baseCPI/.+-- QuantLib 1.43 has no capped or floored CPI coupon variant.+{#fun qlCPILeg as cpiLeg{withSchedule*`Schedule',withZeroInflationIndex*`GenZeroInflationIndex zidx'   ,`Double' -- ^baseCPI   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^observationLag   ,withNonEmptyDoubleArray*`NonEmpty Double'& -- ^notionals@@ -1159,16 +1194,11 @@   ,`Bool' -- ^subtractInflationNominal   ,preErrorCheck-`String'errorCheck*-}->`Leg'peekLeg*#} --- |Year-on-year inflation-linked coupons (a 'YoYInflationCoupon' leg). Non-empty /caps/\//floors/--- build 'CappedFlooredYoYInflationCoupon's instead of plain ones -- but /any/ resulting coupon--- (capped or not) still needs a pricer set via 'setYoyInflationCouponPricer' before its--- 'QuantLib.CashFlow.npvWithZSpread\/'amount' can be computed: upstream's @InflationCoupon::rate()@--- requires @pricer_@ unconditionally, not just for the capped\/floored case (confirmed by reading--- @inflationcoupon.cpp@). CPI-leg ('cpiLeg') caps\/floors have no equivalent in QL 1.43 (no--- @CappedFlooredCPICoupon@ class exists upstream, see README.md's TODO) -- this is a--- QuantLib-version limitation, not an unbound feature.+-- |Year-on-year inflation-linked coupons. Non-empty /caps/\//floors/ build+-- 'CappedFlooredYoYInflationCoupon's. All coupons need 'setYoyInflationCouponPricer' before+-- calculating amounts. QuantLib 1.43 has no capped or floored CPI coupon counterpart. {#fun qlYoYInflationLeg as yoyInflationLeg{withSchedule*`Schedule',withCalendar*`Calendar'-  ,withYoYInflationIndex*`YoYInflationIndex'+  ,withYoYInflationIndex*`GenYoYInflationIndex yidx'   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^observationLag   ,fromEnumC`CPIInterpolationType' -- ^interpolation   ,withNonEmptyDoubleArray*`NonEmpty Double'& -- ^notionals@@ -1180,15 +1210,12 @@   ,withDoubleArray*`[Double]'& -- ^caps   ,withDoubleArray*`[Double]'& -- ^floors   ,preErrorCheck-`String'errorCheck*-}->`Leg'peekLeg*#}-{#pointer *QlZeroInflationCashFlow as ZeroInflationCashFlow foreign -> CZeroInflationCashFlow' nocode#}-{#pointer *QlCPICashFlow as CPICashFlow foreign -> CCPICashFlow' nocode#}-{#pointer *QlEquityCashFlow as EquityCashFlow foreign -> CEquityCashFlow' nocode#} {#pointer *QlEquityCashFlowPricer as EquityCashFlowPricer foreign -> CEquityCashFlowPricer nocode#}  -- |Cash flow dependent on a 'ZeroInflationIndex' ratio (not a coupon -- no accruals). -- The ratio is taken between fixings observed at /startDate/ and /endDate/ minus /observationLag/. {#fun qlZeroInflationCashFlow as zeroInflationCashFlow{`Double' -- ^notional-  ,withZeroInflationIndex*`ZeroInflationIndex'+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx'   ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation   ,withDay*`Day' -- ^startDate   ,withDay*`Day' -- ^endDate@@ -1200,7 +1227,7 @@ -- |CPI-linked cash flow (not a coupon -- no accruals), with an optional explicit /baseFixing/ -- (pass 'Nothing' to derive it from /baseDate/ instead). {#fun qlCPICashFlow as cpiCashFlow{`Double' -- ^notional-  ,withZeroInflationIndex*`ZeroInflationIndex'+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx'   ,withMaybeDay*`Maybe Day' -- ^baseDate   ,fromMaybeDouble`Maybe Double' -- ^baseFixing   ,withDay*`Day' -- ^observationDate@@ -1245,19 +1272,7 @@ -- |The individual coupons of a coupon leg, e.g. to ask each one its own 'rate' or -- 'couponAccruedAmount'.  Pair with 'toCouponLeg' to get here from a 'Leg'. {#fun qlCouponLegCoupons as coupons{withGenLeg*`CouponLeg' -- ^leg-  ,preArray-`[Coupon]'&peekCouponArray*,preErrorCheck-`String'errorCheck*-}->`()'#}--{#enum YieldCurveModel{} deriving(Show, Eq, Read)#}--{#pointer *QlCmsCouponPricer as CmsCouponPricer foreign -> CCmsCouponPricer' nocode#}-{#pointer *QlCmsCoupon as CmsCoupon foreign -> CCmsCoupon' nocode#}-{#pointer *QlSwapSpreadIndex as SwapSpreadIndex foreign -> CSwapSpreadIndex' nocode#}-{#pointer *QlDigitalCmsCoupon as DigitalCmsCoupon foreign -> CDigitalCmsCoupon' nocode#}-{#pointer *QlDigitalCmsSpreadCoupon as DigitalCmsSpreadCoupon foreign -> CDigitalCmsSpreadCoupon' nocode#}-{#pointer *QlSmileSection as SmileSection foreign -> CSmileSection nocode#}-{#pointer *QlYoYOptionletVolatilitySurface as YoYOptionletVolatilitySurface foreign -> CYoYOptionletVolatilitySurface' nocode#}-{#pointer *QlYoYInflationCouponPricer as YoYInflationCouponPricer foreign -> CYoYInflationCouponPricer nocode#}-{#enum ReplicationType{} deriving(Show, Eq, Read)#}+  ,preCouponArray-`[Coupon]'&peekCouponArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Black-formula pricer for capped/floored Ibor coupons {#fun qlBlackIborCouponPricer as blackIborCouponPricer{withOptionletVolatilityStructure*`GenOptionletVolatilityStructure ov'@@ -1648,6 +1663,28 @@   ,preErrorCheck-`String'errorCheck*-}->`FloatingRateCouponPricer'peekFloatingRateCouponPricer*#}  -- |Coupon types that expose the dates of their component index fixings.+-- |Every fixing the cash flows of this leg need, as @(index name, fixing date)@ pairs in leg+-- order.  QuantLib has no @requiredFixings@ query, so this walks the leg itself, unwrapping+-- decorating coupons (capped\/floored, stripped, digital) and asking each coupon for its own+-- fixing dates: one for an Ibor, CMS or CMS-spread coupon, one per averaged date for an+-- overnight, BMA or multiple-resets coupon, and the fixing and base dates for an index-linked+-- payment.  An inflation flow reports the dates QuantLib\'s CPI store is read at, which are+-- period starts (@ZeroInflationIndex::pastFixing@): for a CPI coupon, CPI cash flow or+-- zero-inflation cash flow, the start of the index period holding each observed date less the+-- observation lag, and under linear interpolation the next period\'s start too, unless the+-- observed date is itself a period start (@CPI::laggedFixing@); a base only when no base CPI is+-- given.  A year-on-year coupon reports its own index\'s period starts, or, for a ratio index, its+-- underlying zero index a year apart.  A CMS-spread coupon reports its two underlying swap+-- indexes rather than the spread index, because that is where the fixings are stored.  Names+-- are 'QuantLib.Index.name', the key QuantLib\'s process-global fixing store uses.  A cash flow+-- that needs no fixing -- a redemption, a fixed-rate coupon -- contributes nothing.  Duplicates+-- are not removed: two coupons may fix the same index on the same date.+fixingDependencies :: GenLeg l -> IO [(String, Day)]+fixingDependencies l = uncurry zip <$> qlLegFixingDependencies l+{#fun qlLegFixingDependencies{withLeg*`GenLeg l'+  ,preCStringArray-`[String]'&peekCStringArray*,preIntArray-`[Day]'&peekDayArray*+  ,preErrorCheck-`String'errorCheck*-}->`()'#}+ class HasFixingDates coupon where   fixingDates :: coupon -> IO [Day] @@ -1666,5 +1703,126 @@   indexFixings = averageBmaCouponIndexFixingsRaw instance HasIndexFixings OvernightIndexedCoupon where   indexFixings = overnightIndexedCouponIndexFixingsRaw++-- |FX observation as fixing date and associated settlement/value date.+data FxReset = FxReset { fxResetFixingDate :: Day, fxResetSettlementDate :: Day } deriving (Eq, Show, Read)+-- |FX observation convention: business-day fixing lag and optional calendar.+-- Nothing uses an empty calendar; it is valid only with zero fixing days.+data FxResetConvention = FxResetConvention Word (Maybe Calendar)+withFxReset :: FxReset -> ((CInt, CInt) -> IO r) -> IO r+withFxReset (FxReset fixing value) f = do+  fixingSerial <- toSerial fixing+  valueSerial <- toSerial value+  f (fixingSerial, valueSerial)+withMaybeFxReset :: Maybe FxReset -> ((CInt, CInt) -> IO r) -> IO r+withMaybeFxReset reset f = maybe (f (0, 0)) (`withFxReset` f) reset++-- |Native FX observation calculation.+{#fun qlFxResetConventionReset as fxResetObservationRaw{fromIntegral`Word' -- ^fixingDays+  ,withMaybeCalendar*`Maybe Calendar' -- ^fixingCalendar+  ,withDay*`Day' -- ^valueDate+  ,alloca-`Day'peekResetDay* -- ^fixing+  ,alloca-`Day'peekResetDay* -- ^value+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Native FX value-date calculation.+{#fun qlFxResetConventionValueDate as fxResetValueDateRaw{fromIntegral`Word' -- ^fixingDays+  ,withMaybeCalendar*`Maybe Calendar' -- ^fixingCalendar+  ,withDay*`Day' -- ^fixingDate+  ,preErrorCheck-`String'errorCheck*-}->`Day'toDay#}++-- |Derive an FX observation from its value date (1.44). Nonzero lag needs a nonempty calendar.+fxResetObservation :: FxResetConvention -- ^Business-day fixing lag and optional calendar+  -> Day -- ^FX value date+  -> IO FxReset+fxResetObservation (FxResetConvention days cal) observationDate = do+  (fixing, valueDate) <- fxResetObservationRaw days cal observationDate+  pure (FxReset fixing valueDate)+-- |Derive the spot value date of a fixing date using business days (1.44).+fxResetValueDate :: FxResetConvention -- ^Business-day fixing lag and optional calendar+  -> Day -- ^FX fixing date+  -> IO Day+fxResetValueDate (FxResetConvention days cal) = fxResetValueDateRaw days cal++-- |FX reset projection from spot and two discount curves (1.44).+-- Returns resettable currency per constant currency; past observations use ExchangeRateManager.+{#fun qlDiscountingFxResetPricer as discountingFxResetPricer{withCurrency*`Currency' -- ^constantLegCurrency+  ,withCurrency*`Currency' -- ^resettableLegCurrency+  ,withYieldTermStructure*`GenYieldTermStructure y1' -- ^constantLegCurve+  ,withYieldTermStructure*`GenYieldTermStructure y2' -- ^resettableLegCurve+  ,withQuote*`GenQuote q' -- ^spotFx+  ,`Bool' -- ^spotIsResettablePerConstant+  ,withMaybeDay*`Maybe Day' -- ^spotFxSettleDate+  ,preErrorCheck-`String'errorCheck*-}->`FxResetPricer'peekStandalone*#}++-- |Observed or projected resettable-currency units per constant-currency unit (1.44).+{#fun qlFxResetRate as fxResetRate{withStandalone*`FxResetPricer' -- ^pricer+  ,withFxReset*`FxReset'& -- ^reset+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Coupon with FX-reset notional (1.44). Attach an FX reset pricer before querying amount or nominal.+-- Rate and accrued amount preserve the underlying coupon calculation, including overnight compounding.+{#fun qlFxResetCoupon as fxResetCoupon{withFloatingRateCoupon*`GenFloatingRateCoupon frc' -- ^underlying+  ,`Double' -- ^constantLegNotional+  ,withFxReset*`FxReset'& -- ^reset+  ,preErrorCheck-`String'errorCheck*-}->`FxResetCoupon'peekFxResetCoupon*#}++-- |Netted FX-reset principal exchange (1.44). Missing previous/current resets select inception/final exchanges.+-- Attach an FX reset pricer before querying amount; native validation rejects two absent resets.+{#fun qlFxResetNotionalExchange as fxResetNotionalExchange{withDay*`Day' -- ^paymentDate+  ,`Double' -- ^constantLegNotional+  ,withMaybeFxReset*`Maybe FxReset'& -- ^previousReset+  ,withMaybeFxReset*`Maybe FxReset'& -- ^currentReset+  ,preErrorCheck-`String'errorCheck*-}->`FxResetNotionalExchange'peekFxResetNotionalExchange*#}++-- |Attach retained FX reset pricing.+{#fun qlFxResetCouponSetFxResetPricer as setFxResetCouponPricerRaw{withFxResetCoupon*`FxResetCoupon' -- ^cashFlow+  ,withStandalone*`FxResetPricer' -- ^pricer+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Attach retained FX reset pricing.+{#fun qlFxResetNotionalExchangeSetFxResetPricer as setFxResetNotionalExchangePricerRaw{withFxResetNotionalExchange*`FxResetNotionalExchange' -- ^cashFlow+  ,withStandalone*`FxResetPricer' -- ^pricer+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Cash flows supporting FX reset pricer wiring.+class HasFxResetPricer cf where+  -- |Assign a retained FX reset pricer (1.44).+  setFxResetPricer :: cf -> FxResetPricer -> IO ()+instance HasFxResetPricer FxResetCoupon where+  setFxResetPricer = setFxResetCouponPricerRaw+instance HasFxResetPricer FxResetNotionalExchange where+  setFxResetPricer = setFxResetNotionalExchangePricerRaw++-- |Assign an FX reset pricer to every reset cash flow in a leg (1.44). Other cash flows are unchanged.+{#fun qlSetFxResetLegPricer as setFxResetLegPricer{withLeg*`GenLeg l' -- ^leg+  ,withStandalone*`FxResetPricer' -- ^pricer+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Broken-period IBOR coupon selecting or interpolating component indexes (1.44).+-- A nonempty stub selection is required; Nothing passes the native empty selection and fails validation.+{#fun qlStubIborCoupon as stubIborCoupon{withDay*`Day' -- ^paymentDate+  ,`Double' -- ^nominal+  ,withDay*`Day' -- ^startDate+  ,withDay*`Day' -- ^endDate+  ,fromIntegral`Word' -- ^fixingDays+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor)' -- ^stubIndexSelection+  ,`Double' -- ^gearing+  ,`Double' -- ^spread+  ,withMaybeDay*`Maybe Day' -- ^refPeriodStart+  ,withMaybeDay*`Maybe Day' -- ^refPeriodEnd+  ,withMaybeDayCounter*`Maybe DayCounter' -- ^dayCounter+  ,`Bool' -- ^isInArrears+  ,withMaybeDay*`Maybe Day' -- ^exCouponDate+  ,fromEnumC`BusinessDayConvention' -- ^fixingConvention+  ,preErrorCheck-`String'errorCheck*-}->`IborCoupon'peekIborCoupon*#}+++peekResetDay :: Ptr CInt -> IO Day+peekResetDay p = toDay <$> peek p++-- |Current coupon notional. FX reset coupons compute it from the assigned FX reset pricer.+{#fun qlCouponNominal as couponNominal{withCoupon*`GenCoupon c' -- ^coupon+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
QuantLib/Commodity.chs view
@@ -84,6 +84,8 @@   , commoditySettingsCurrency   , commoditySettingsUnitOfMeasure   ) where+import Control.Exception (mask_)+import System.IO.Unsafe (unsafePerformIO) import QuantLib.Internal import QuantLib.Internal.Type import QuantLib.Internal.Common@@ -116,10 +118,14 @@ {#fun qlNullCommodityType as nullCommodityType{preErrorCheck-`String'errorCheck*-}->`CommodityType'peekCommodityType*#}  -- |The commodity code, e.g. \"HO\".-{#fun pure qlCommodityTypeCode as commodityTypeCode{withCommodityType*`CommodityType'}->`String'peekDynString*#}+commodityTypeCode :: CommodityType -> String+commodityTypeCode x = unsafePerformIO $ mask_ (commodityTypeCodeRaw x)+{#fun qlCommodityTypeCode as commodityTypeCodeRaw{withCommodityType*`CommodityType'}->`String'peekDynString*#}  -- |The descriptive name, e.g. \"Heating Oil\".-{#fun pure qlCommodityTypeName as commodityTypeName{withCommodityType*`CommodityType'}->`String'peekDynString*#}+commodityTypeName :: CommodityType -> String+commodityTypeName x = unsafePerformIO $ mask_ (commodityTypeNameRaw x)+{#fun qlCommodityTypeName as commodityTypeNameRaw{withCommodityType*`CommodityType'}->`String'peekDynString*#}  -- |Whether this is a usable instance (as opposed to one built via a default constructor). {#fun pure qlCommodityTypeEmpty as commodityTypeEmpty{withCommodityType*`CommodityType'}->`Bool'#}@@ -132,10 +138,14 @@   ,preErrorCheck-`String'errorCheck*-}->`UnitOfMeasure'peekUnitOfMeasure*#}  -- |The descriptive name, e.g. \"Barrels\".-{#fun pure qlUnitOfMeasureName as unitOfMeasureName{withUnitOfMeasure*`UnitOfMeasure'}->`String'peekDynString*#}+unitOfMeasureName :: UnitOfMeasure -> String+unitOfMeasureName x = unsafePerformIO $ mask_ (unitOfMeasureNameRaw x)+{#fun qlUnitOfMeasureName as unitOfMeasureNameRaw{withUnitOfMeasure*`UnitOfMeasure'}->`String'peekDynString*#}  -- |The code, e.g. \"BBL\", \"MT\".-{#fun pure qlUnitOfMeasureCode as unitOfMeasureCode{withUnitOfMeasure*`UnitOfMeasure'}->`String'peekDynString*#}+unitOfMeasureCode :: UnitOfMeasure -> String+unitOfMeasureCode x = unsafePerformIO $ mask_ (unitOfMeasureCodeRaw x)+{#fun qlUnitOfMeasureCode as unitOfMeasureCodeRaw{withUnitOfMeasure*`UnitOfMeasure'}->`String'peekDynString*#}  -- |The unit's type (mass/volume/energy/quantity). {#fun pure qlUnitOfMeasureUnitType as unitOfMeasureType{withUnitOfMeasure*`UnitOfMeasure'}->`UnitOfMeasureType'toEnumC#}@@ -176,7 +186,9 @@   ,preErrorCheck-`String'errorCheck*-}->`PaymentTerm'peekPaymentTerm*#}  -- |The payment term's name, e.g. \"Pricing end + 5 days\".-{#fun pure qlPaymentTermName as paymentTermName{withPaymentTerm*`PaymentTerm'}->`String'peekDynString*#}+paymentTermName :: PaymentTerm -> String+paymentTermName x = unsafePerformIO $ mask_ (paymentTermNameRaw x)+{#fun qlPaymentTermName as paymentTermNameRaw{withPaymentTerm*`PaymentTerm'}->`String'peekDynString*#}  -- |Whether the offset is measured from the trade date or the pricing date. {#fun pure qlPaymentTermEventType_ as paymentTermEventType{withPaymentTerm*`PaymentTerm'}->`PaymentTermEventType'toEnumC#}@@ -195,13 +207,8 @@ {#fun qlPaymentTermGetPaymentDate as paymentTermGetPaymentDate   {withPaymentTerm*`PaymentTerm',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Day'toDay#} --- |An amount of a commodity: a 'CommodityType', a 'UnitOfMeasure', and a plain amount. Marshalled--- as a flat triple rather than a wrapper type (per the @Money@-as-tuple convention) -- and, unlike--- 'CommodityUnitCost' below, its three inspectors are just tuple projections, so they need no--- binding at all. c2hs's @&@ tuple-splitter only ever consumes two C arguments (confirmed against--- its source, not just by trial), so every function below that takes or returns a 'Quantity'--- marshals it as three flat 'CommodityType'\/'UnitOfMeasure'\/'Double' arguments instead of one--- combined tuple.+-- |A commodity type, unit of measure, and amount. Its FFI arguments are flat because c2hs's+-- @&@ tuple-splitter supports only pairs. type Quantity = (CommodityType, UnitOfMeasure, Double)  {#fun pure qlQuantityRoundedAmount as quantityRoundedAmount{withUnitOfMeasure*`UnitOfMeasure',`Double'}->`Double'#}@@ -303,7 +310,9 @@ {#fun pure qlUnitOfMeasureConversionFactor as unitOfMeasureConversionFactor{withUnitOfMeasureConversion*`UnitOfMeasureConversion'}->`Double'#}  -- |A code identifying the conversion, e.g. \"Heating OilMTBBL\".-{#fun pure qlUnitOfMeasureConversionCode as unitOfMeasureConversionCode{withUnitOfMeasureConversion*`UnitOfMeasureConversion'}->`String'peekDynString*#}+unitOfMeasureConversionCode :: UnitOfMeasureConversion -> String+unitOfMeasureConversionCode x = unsafePerformIO $ mask_ (unitOfMeasureConversionCodeRaw x)+{#fun qlUnitOfMeasureConversionCode as unitOfMeasureConversionCodeRaw{withUnitOfMeasureConversion*`UnitOfMeasureConversion'}->`String'peekDynString*#}  {#fun qlUnitOfMeasureConversionConvert as qlUnitOfMeasureConversionConvert_   {withUnitOfMeasureConversion*`UnitOfMeasureConversion'
QuantLib/Context.chs view
@@ -4,8 +4,10 @@   (     -- * Types     Error(..)+  , SettingsSnapshot(..)      -- * Mutators+  , restoreSettings   , setEvaluationDate   , setEnforceTodaysHistoricFixings   , setIncludeTodaysCashFlows@@ -18,6 +20,7 @@   , setExtendedPrecision      -- * Inspectors+  , captureSettings   , evaluationDate   , enforceTodaysHistoricFixings   , includeTodaysCashFlows@@ -32,7 +35,8 @@ import Foreign.C.String(CString, peekCString) import System.IO.Unsafe(unsafePerformIO) import System.Mem(performGC)-import Control.Exception(bracket)+import Control.Exception(bracket, SomeException, try, throwIO)+import Control.Monad (forM)  import QuantLib.Time.Date import QuantLib.Internal@@ -92,6 +96,39 @@  -- |Whether observer notifications are currently disabled with deferred delivery enabled. {#fun qlObservableSettingsUpdatesDeferred as updatesDeferred{}->`Bool'#}++-- |A value snapshot of pricing and observer settings. A 'Nothing' date retains the+-- floating evaluation-date mode; it is not replaced with today's date.+data SettingsSnapshot = SettingsSnapshot+  { snapshotEvaluationDate :: Maybe Day+  , snapshotEnforceTodaysHistoricFixings :: Bool+  , snapshotIncludeTodaysCashFlows :: Maybe Bool+  , snapshotIncludeReferenceDateEvents :: Bool+  , snapshotUpdatesEnabled :: Bool+  , snapshotUpdatesDeferred :: Bool+  } deriving (Eq, Show)++-- |Copies all settings preserved by 'keepingSettings', including the raw date mode.+captureSettings :: IO SettingsSnapshot+captureSettings = SettingsSnapshot <$> rawEvaluationDate <*> enforceTodaysHistoricFixings+  <*> includeTodaysCashFlows <*> includeReferenceDateEvents <*> updatesEnabled <*> updatesDeferred++{#fun qlSettingsRawEvaluationDate as rawEvaluationDate{}->`Maybe Day'toMaybeDay#}++-- |Restores a snapshot and reports errors rather than suppressing them as the native+-- SavedSettings destructor does. Every field is attempted even if an observer throws.+restoreSettings :: SettingsSnapshot -> IO ()+restoreSettings s = do+  results <- forM+    [ setEnforceTodaysHistoricFixings (snapshotEnforceTodaysHistoricFixings s)+    , setIncludeTodaysCashFlows (snapshotIncludeTodaysCashFlows s)+    , setIncludeReferenceDateEvents (snapshotIncludeReferenceDateEvents s)+    , setEvaluationDate (snapshotEvaluationDate s)+    , if snapshotUpdatesEnabled s then enableUpdates else disableUpdates (snapshotUpdatesDeferred s)+    ] (try :: IO () -> IO (Either SomeException ()))+  case [e | Left e <- results] of+    e : _ -> throwIO e+    [] -> pure ()  -- |brackets to restore settings once action has completed or raised an exception keepingSettings :: IO b -> IO b
QuantLib/Credit.chs view
@@ -84,11 +84,11 @@   ,preErrorCheck-`String'errorCheck*-}->`DefaultProbKey'peekDefaultProbKey*#}  -- |An issuer's default-probability term structures, keyed by contract terms.-issuer :: NonEmpty (DefaultProbKey, DefaultProbabilityTermStructure) -> IO Issuer+issuer :: NonEmpty (DefaultProbKey, GenDefaultProbabilityTermStructure d) -> IO Issuer issuer probs = qlIssuer keys curves   where (keys, curves) = unzip (toList probs) {#fun qlIssuer{withDefaultProbKeyArray*`[DefaultProbKey]'&-  ,withDefaultProbabilityTermStructureArrayRaw*`[DefaultProbabilityTermStructure]'+  ,withDefaultProbabilityTermStructureArrayRaw*`[GenDefaultProbabilityTermStructure d]'   ,preErrorCheck-`String'errorCheck*-}->`Issuer'peekIssuer*#}  -- |A named collection of issuers and their default-probability keys.
QuantLib/Currency.chs view
@@ -40,6 +40,8 @@   , moneyConversionType   , moneyBaseCurrency   ) where+import Control.Exception (mask_)+import System.IO.Unsafe (unsafePerformIO) import QuantLib.Internal import QuantLib.Internal.Type import QuantLib.Internal.Common@@ -63,7 +65,9 @@ {#fun qlCurrency as currency{`Ccy',preErrorCheck-`String'errorCheck*-}->`Currency'peekCurrency*#}  -- |The currency's ISO 4217 three-letter code, e.g. \"USD\".-{#fun pure qlCurrencyCode as code{withCurrency*`Currency'}->`String'peekDynString*#}+code :: Currency -> String+code x = unsafePerformIO $ mask_ (codeRaw x)+{#fun qlCurrencyCode as codeRaw{withCurrency*`Currency'}->`String'peekDynString*#}  -- |The number of fractional units (e.g. cents) in one unit of the currency. {#fun pure qlCurrencyFractionsPerUnit as fractionsPerUnit{withCurrency*`Currency'}->`Int'#}
QuantLib/Index.chs view
@@ -17,12 +17,14 @@      -- * Inspectors     -- ** Index fixings+  , name   , fixingCalendar   , fixing   , hasHistoricalFixing   , isValidFixingDate   , fixingHistory   , fixingHistoryNames+  , fixingHistoryNameKey     -- ** Historical return analysis   , skipped   , mean@@ -51,6 +53,7 @@   , covariance   , correlation   ) where+import Control.Exception (mask_) import QuantLib.Internal import QuantLib.Internal.Common import QuantLib.Internal.Type@@ -63,12 +66,20 @@  {#pointer *Calendar foreign -> CCalendar nocode#} {#pointer *QlIndex as Index foreign -> CIndex' nocode#}+{#pointer *QlHistoricalIndexAnalysis as HistoricalIndexAnalysis foreign -> CHistoricalIndexAnalysis nocode#}  -- |stores the historical fixing at the given date; the date must be the actual calendar date of the fixing, not a settlement date {#fun qlIndexAddFixing as addFixing{withIndex*`GenIndex idx',withDay*`Day',`Double' -- ^fixing   ,`Bool' -- ^forceOverwrite   ,preErrorCheck-`String'errorCheck*-}->`()'#} +-- |The index's own name, as QuantLib builds it -- for an interest-rate index the family name,+-- tenor and day counter, e.g. @\"Euribor6M Actual\/360\"@.  This is the key QuantLib's+-- process-global fixing store uses, so it is the name a stored fixing is filed under.+name :: GenIndex idx -> IO String+name x = mask_ (nameRaw x)+{#fun qlIndexName as nameRaw{withIndex*`GenIndex idx'}->`String'peekDynString*#}+ -- |returns the calendar defining valid fixing dates {#fun qlIndexFixingCalendar as fixingCalendar{withIndex*`GenIndex idx',preErrorCheck-`String'errorCheck*-}->`Calendar'peekCalendar*#} @@ -99,19 +110,22 @@   (ds, vs) <- qlIndexFixingHistory i   return $ zip ds vs {#fun qlIndexFixingHistory{withIndex*`GenIndex idx'-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Returns the names with an entry in QuantLib's process-global fixing store.  Names are -- case-insensitive in that store and can be shared by separate index instances.-{#fun qlIndexManagerHistories as fixingHistoryNames{preArray-`[String]'&peekCStringArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlIndexManagerHistories as fixingHistoryNames{preCStringArray-`[String]'&peekCStringArray*,preErrorCheck-`String'errorCheck*-}->`()'#} +-- |Normalizes a native history name with IndexManager's bytewise case-insensitive+-- comparison. Use this key for ownership registries; Unicode case folding differs.+{#fun qlIndexHistoryNameKey as fixingHistoryNameKey{`String' -- ^nativeName+  ,preErrorCheck-`String'errorCheck*-}->`String'peekDynString*#}+ -- |Clears every native fixing history in QuantLib's process-global store, for all index names. -- This affects other index instances and is intended for explicit session or test cleanup. {#fun qlIndexManagerClearHistories as clearAllFixingHistories{preErrorCheck-`String'errorCheck*-}->`()'#} -{#pointer *QlHistoricalIndexAnalysis as HistoricalIndexAnalysis foreign -> CHistoricalIndexAnalysis nocode#}- -- |Computes 'SequenceStatistics' (mean\/standard deviation\/skewness\/kurtosis\/min\/max\/semi- -- and downside-variance and -deviation\/percentiles\/value-at-risk\/expected shortfall, -- empirical and gaussian-assumption\/covariance\/correlation) over historical fixings of the@@ -122,7 +136,7 @@ {#fun qlHistoricalIndexAnalysis as historicalIndexAnalysis{withDay*`Day' -- ^startDate   ,withDay*`Day' -- ^endDate   ,fromEnumQuantity`(Int,TimeUnit)'& -- ^step-  ,withIndexArray*`[Index]'&+  ,withIndexArray*`[GenIndex idx]'&   ,preErrorCheck-`String'errorCheck*-}->`HistoricalIndexAnalysis'peekHistoricalIndexAnalysis*#}  -- |Skipped fixing dates paired with the reason no complete fixing vector was available.@@ -131,108 +145,108 @@   dates <- qlHistoricalIndexAnalysisSkippedDates analysis   messages <- qlHistoricalIndexAnalysisSkippedMessages analysis   pure (zip dates messages)-{#fun qlHistoricalIndexAnalysisSkippedDates as qlHistoricalIndexAnalysisSkippedDates{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}-{#fun qlHistoricalIndexAnalysisSkippedDatesErrorMessage as qlHistoricalIndexAnalysisSkippedMessages{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[String]'&peekCStringArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisSkippedDates as qlHistoricalIndexAnalysisSkippedDates{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisSkippedDatesErrorMessage as qlHistoricalIndexAnalysisSkippedMessages{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preCStringArray-`[String]'&peekCStringArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index mean of the historical relative returns actually sampled.-{#fun qlHistoricalIndexAnalysisMean as mean{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisMean as mean{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index standard deviation of the historical relative returns actually sampled.-{#fun qlHistoricalIndexAnalysisStandardDeviation as standardDeviation{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisStandardDeviation as standardDeviation{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index skewness of the historical relative returns actually sampled.-{#fun qlHistoricalIndexAnalysisSkewness as skewness{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisSkewness as skewness{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index (excess) kurtosis of the historical relative returns actually sampled.-{#fun qlHistoricalIndexAnalysisKurtosis as kurtosis{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisKurtosis as kurtosis{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index minimum of the historical relative returns actually sampled.-{#fun qlHistoricalIndexAnalysisMin as minimumReturn{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisMin as minimumReturn{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index maximum of the historical relative returns actually sampled.-{#fun qlHistoricalIndexAnalysisMax as maximumReturn{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisMax as maximumReturn{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index variance of the historical relative returns falling below the mean.-{#fun qlHistoricalIndexAnalysisSemiVariance as semiVariance{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisSemiVariance as semiVariance{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index square root of 'semiVariance'.-{#fun qlHistoricalIndexAnalysisSemiDeviation as semiDeviation{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisSemiDeviation as semiDeviation{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index variance of the historical relative returns falling below zero.-{#fun qlHistoricalIndexAnalysisDownsideVariance as downsideVariance{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisDownsideVariance as downsideVariance{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index square root of 'downsideVariance'.-{#fun qlHistoricalIndexAnalysisDownsideDeviation as downsideDeviation{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHistoricalIndexAnalysisDownsideDeviation as downsideDeviation{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index empirical @y@-th percentile of the historical relative returns actually sampled; -- @y@ must lie in @[0.9, 1.0)@. {#fun qlHistoricalIndexAnalysisPercentile as percentile{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^y-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index @y@-th percentile assuming the historical relative returns are gaussian; @y@ must lie in @[0.9, 1.0)@. {#fun qlHistoricalIndexAnalysisGaussianPercentile as gaussianPercentile{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^y-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index empirical value-at-risk at the given @centile@, which must lie in @[0.9, 1.0)@. {#fun qlHistoricalIndexAnalysisValueAtRisk as valueAtRisk{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^centile-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index value-at-risk at the given @centile@ assuming the historical relative returns are gaussian; @centile@ must lie in @[0.9, 1.0)@. {#fun qlHistoricalIndexAnalysisGaussianValueAtRisk as gaussianValueAtRisk{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^centile-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index empirical expected shortfall at the given @centile@, which must lie in @[0.9, 1.0)@. -- Throws if no sampled return falls below the value-at-risk threshold. {#fun qlHistoricalIndexAnalysisExpectedShortfall as expectedShortfall{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^centile-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index expected shortfall at the given @centile@ assuming the historical relative returns -- are gaussian; @centile@ must lie in @[0.9, 1.0)@. {#fun qlHistoricalIndexAnalysisGaussianExpectedShortfall as gaussianExpectedShortfall{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^centile-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index empirical potential upside at the given @centile@, which must lie in @[0.9, 1.0)@ -- -- the upside counterpart of 'valueAtRisk'. {#fun qlHistoricalIndexAnalysisPotentialUpside as potentialUpside{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^centile-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index potential upside at the given @centile@ assuming the historical relative returns -- are gaussian; @centile@ must lie in @[0.9, 1.0)@. {#fun qlHistoricalIndexAnalysisGaussianPotentialUpside as gaussianPotentialUpside{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^centile-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index regret at the given @target@: expected loss below target, conditional on being below it. {#fun qlHistoricalIndexAnalysisRegret as regret{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^target-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index empirical probability of falling below @target@. {#fun qlHistoricalIndexAnalysisShortfall as shortfall{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^target-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index probability of falling below @target@ assuming the historical relative returns are gaussian. {#fun qlHistoricalIndexAnalysisGaussianShortfall as gaussianShortfall{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^target-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index empirical average shortfall (expected loss below @target@, unconditional) at the given @target@. {#fun qlHistoricalIndexAnalysisAverageShortfall as averageShortfall{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^target-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-index average shortfall at the given @target@ assuming the historical relative returns are gaussian. {#fun qlHistoricalIndexAnalysisGaussianAverageShortfall as gaussianAverageShortfall{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'   ,`Double' -- ^target-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  toMatrixDouble :: (Word, Word, [Double]) -> Matrix Double toMatrixDouble (r, c, d) = Matrix r c d@@ -241,14 +255,14 @@ covariance :: HistoricalIndexAnalysis -> IO (Matrix Double) covariance hra = toMatrixDouble <$> qlHistoricalIndexAnalysisCovariance hra {#fun qlHistoricalIndexAnalysisCovariance{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Correlation matrix of the historical relative returns across indexes. correlation :: HistoricalIndexAnalysis -> IO (Matrix Double) correlation hra = toMatrixDouble <$> qlHistoricalIndexAnalysisCorrelation hra {#fun qlHistoricalIndexAnalysisCorrelation{withHistoricalIndexAnalysis*`HistoricalIndexAnalysis'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
QuantLib/Index/Equity.chs view
@@ -17,7 +17,6 @@  {#pointer *Calendar foreign -> CCalendar nocode#} {#pointer *Currency foreign -> CCurrency nocode#}-{#pointer *QlIndex as Index foreign -> CIndex' nocode#} {#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#} {#pointer *QlQuote as Quote foreign -> CQuote' nocode#} {#pointer *QlEquityIndex as EquityIndex foreign -> CEquityIndex' nocode#}
QuantLib/Index/Inflation.chs view
@@ -45,7 +45,6 @@  #include "ql.h" -{#pointer *QlInflationIndex as InflationIndex foreign -> CInflationIndex' nocode#} {#pointer *QlZeroInflationIndex as ZeroInflationIndex foreign -> CZeroInflationIndex' nocode#} {#pointer *QlYoYInflationIndex as YoYInflationIndex foreign -> CYoYInflationIndex' nocode#} {#pointer *Currency foreign -> CCurrency nocode#}@@ -97,27 +96,27 @@  -- |A year-on-year index defined as the ratio of an existing 'ZeroInflationIndex'\'s fixings; -- stores no fixings of its own.-{#fun qlYoYInflationIndexFromZero as yoyInflationIndexFromZero{withZeroInflationIndex*`ZeroInflationIndex'+{#fun qlYoYInflationIndexFromZero as yoyInflationIndexFromZero{withZeroInflationIndex*`GenZeroInflationIndex zidx'   ,withMaybeYoYInflationTermStructure*`Maybe YoYInflationTermStructure'   ,preErrorCheck-`String'errorCheck*-}->`YoYInflationIndex'peekYoYInflationIndex*#}  -- |The (possibly forecast) fixing at the given date; for a date with no linked term -- structure this returns the stored historical fixing added via 'QuantLib.Index.addFixing'.-{#fun qlZeroInflationIndexFixing as fixing{withZeroInflationIndex*`ZeroInflationIndex',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Double'#}+{#fun qlZeroInflationIndexFixing as fixing{withZeroInflationIndex*`GenZeroInflationIndex zidx',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |The (possibly forecast) year-on-year fixing at the given date; for a date with no linked -- term structure this returns the stored historical fixing added via 'QuantLib.Index.addFixing'.-{#fun qlYoYInflationIndexFixing as yoyFixing{withYoYInflationIndex*`YoYInflationIndex',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Double'#}+{#fun qlYoYInflationIndexFixing as yoyFixing{withYoYInflationIndex*`GenYoYInflationIndex yidx',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Whether 'fixing' at the given date would have to be forecast rather than served from a stored -- historical fixing -- true once the date falls after the latest period a fixing could plausibly -- already be published for, given the index's publication lag. -- /Warning/ It raises an exception if the index was built with a frequency outside -- @Annual@..@Monthly@, which the inflation-period calculation does not handle.-{#fun qlZeroInflationIndexNeedsForecast as needsForecast{withZeroInflationIndex*`ZeroInflationIndex',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Bool'#}+{#fun qlZeroInflationIndexNeedsForecast as needsForecast{withZeroInflationIndex*`GenZeroInflationIndex zidx',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Bool'#}  -- |The year-on-year counterpart of 'needsForecast', for 'yoyFixing'. -- /Warning/ It raises an exception on an unhandled frequency, as 'needsForecast' does.-{#fun qlYoYInflationIndexNeedsForecast as yoyNeedsForecast{withYoYInflationIndex*`YoYInflationIndex',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Bool'#}+{#fun qlYoYInflationIndexNeedsForecast as yoyNeedsForecast{withYoYInflationIndex*`GenYoYInflationIndex yidx',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Bool'#}  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
QuantLib/Index/InterestRate.chs view
@@ -109,9 +109,7 @@ {#pointer *Schedule foreign -> CSchedule nocode#} {#pointer *QlInterestRateIndex as InterestRateIndex foreign -> CInterestRateIndex' nocode#} {#pointer *QlBMAIndex as BMAIndex foreign -> CBMAIndex' nocode#}-{#pointer *QlOvernightIndex as OvernightIndex foreign -> COvernightIndex' nocode#} {#pointer *QlIborIndex as IborIndex foreign -> CIborIndex' nocode#}-{#pointer *QlIndex as Index foreign -> CIndex' nocode#} {#pointer *QlSwapIndex as SwapIndex foreign -> CSwapIndex' nocode#} {#pointer *QlSwapSpreadIndex as SwapSpreadIndex foreign -> CSwapSpreadIndex' nocode#} {#pointer *QlOvernightIndex as OvernightIborIndex foreign -> COvernightIndex' nocode#}
QuantLib/Instrument.chs view
@@ -53,10 +53,11 @@  #include "ql.h" -{#pointer *QlPricingEngine as PricingEngine foreign -> CPricingEngine nocode#}+{#pointer *QlPricingEngine as PricingEngine foreign -> CPricingEngine' nocode#} {#pointer *QlInstrument as Instrument foreign -> CInstrument' nocode#} {#pointer *Calendar foreign -> CCalendar nocode#} {#pointer *DayCounter foreign -> CDayCounter nocode#}+{#pointer *QlAdditionalResult as RawResultPtr nocode#}  {#enum SettlementType{} deriving(Show, Eq, Read)#} {#enum SettlementMethod{} deriving(Show, Eq, Read)#}@@ -95,18 +96,14 @@ -- |returns the date the net present value refers to. {#fun qlInstrumentValuationDate as valuationDate{withInstrument*`GenInstrument i',preErrorCheck-`String'errorCheck*-}->`Day'toDay#} --- Re-registers QlAdditionalResult with c2hs's (per-file) pointer table as RawResultPtr,--- so the {#fun#} below infers the right out-parameter type instead of an opaque Ptr (Ptr ()).-{#pointer *QlAdditionalResult as RawResultPtr nocode#}- -- |Returns QuantLib's `additionalResults()` map for the given Instrument, as an association list -- keyed by the C++ result name. The map's values are populated by the pricing engine; -- `additionalResults()` calls `calculate()` internally, so this is safe and idempotent after -- pricing.-{#fun qlInstrumentAdditionalResults as additionalResults{withInstrument*`GenInstrument i',preArray-`[(String, AdditionalResultVal)]'&peekAdditionalResults*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlInstrumentAdditionalResults as additionalResults{withInstrument*`GenInstrument i',preAdditionalResults-`[(String, AdditionalResultVal)]'&peekAdditionalResults*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Builds a composite instrument whose NPV is the sum of the given instruments' NPVs, each scaled by its paired multiplier.-composite :: [(Instrument, Double)] -> IO Instrument+composite :: [(GenInstrument i, Double)] -> IO Instrument composite = (uncurry qlCompositeInstrument) . unzip  {#fun qlCompositeInstrument{withInstrumentArray*`[GenInstrument i]'& -- ^instruments@@ -114,6 +111,6 @@   ,preErrorCheck-`String'errorCheck*-}->`Instrument'peekInstrument*#}  -- |Sets the pricing engine used to compute the instrument's results.-{#fun qlInstrumentSetPricingEngine as setPricingEngine{withInstrument*`GenInstrument i',withPricingEngine*`PricingEngine',preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlInstrumentSetPricingEngine as setPricingEngine{withInstrument*`GenInstrument i',withPricingEngine*`GenPricingEngine pe',preErrorCheck-`String'errorCheck*-}->`()'#}  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
QuantLib/Instrument/Bond.chs view
@@ -138,11 +138,7 @@ {#pointer *QlCallability foreign -> CQlCallability nocode#} {#pointer *InterestRate foreign -> CInterestRate nocode#} {#pointer *QlBond as Bond foreign -> CBond' nocode#}-{#pointer *QlInstrument as Instrument foreign -> CInstrument' nocode#} {#pointer *QlZeroInflationIndex as ZeroInflationIndex foreign -> CZeroInflationIndex' nocode#}-{#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#}-{#pointer *QlIborIndex as IborIndex foreign -> CIborIndex' nocode#}-{#pointer *QlSwapIndex as SwapIndex foreign -> CSwapIndex' nocode#} {#pointer *QlFixedRateBond as FixedRateBond foreign -> CFixedRateBond' nocode#} {#pointer *QlBTP as BTP foreign -> CBTP' nocode#} {#pointer *QlRendistatoBasket as RendistatoBasket foreign -> CRendistatoBasket nocode#}@@ -261,7 +257,7 @@   ,`Frequency'   ,`Double' -- ^couponRate   ,`Double' -- ^initialNotional-  ,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |An inflation-linked bond whose redemption and coupons scale with a 'ZeroInflationIndex'@@ -270,7 +266,7 @@   ,`Double' -- ^faceAmount   ,`Double' -- ^baseCPI   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^observationLag-  ,withZeroInflationIndex*`ZeroInflationIndex'+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx'   ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation   ,withSchedule*`Schedule'   ,withNonEmptyDoubleArray*`NonEmpty Double'& -- ^coupons@@ -438,7 +434,7 @@ {#fun qlBondIsTradable as isTradable{withBond*`GenBond b',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Bool'#}  -- |notionals for each period of the bond's amortization schedule-{#fun qlBondNotionals as notionals{withBond*`GenBond b',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlBondNotionals as notionals{withBond*`GenBond b',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |returns all the cashflows, including the redemptions. {#fun qlBondCashflows as cashFlows{withBond*`GenBond b',preErrorCheck-`String'errorCheck*-}->`Leg'peekLeg*#}@@ -648,28 +644,28 @@  -- |per-bond yields, in basket order. {#fun qlRendistatoCalculatorYields as rendistatoYields{withRendistatoCalculator*`RendistatoCalculator'-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |per-bond (modified) durations, in basket order. {#fun qlRendistatoCalculatorDurations as rendistatoDurations{withRendistatoCalculator*`RendistatoCalculator'-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |the fixed 1..15Y comparison-swap ladder's lengths, in years -- pairs positionally with -- 'rendistatoSwapRates'\/'rendistatoSwapYields'\/'rendistatoSwapDurations'. {#fun qlRendistatoCalculatorSwapLengths as rendistatoSwapLengths{withRendistatoCalculator*`RendistatoCalculator'-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |each ladder swap's fair (par) rate. {#fun qlRendistatoCalculatorSwapRates as rendistatoSwapRates{withRendistatoCalculator*`RendistatoCalculator'-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |each ladder swap's fixed leg, repriced as a par bond and re-expressed as a BTP-convention yield. {#fun qlRendistatoCalculatorSwapYields as rendistatoSwapYields{withRendistatoCalculator*`RendistatoCalculator'-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |each ladder swap's fixed leg (modified) duration, on the same par-bond proxy. {#fun qlRendistatoCalculatorSwapDurations as rendistatoSwapDurations{withRendistatoCalculator*`RendistatoCalculator'-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |the ladder swap whose duration is closest to (without exceeding) the basket's own duration. {#fun qlRendistatoCalculatorEquivalentSwap as rendistatoEquivalentSwap{withRendistatoCalculator*`RendistatoCalculator',preErrorCheck-`String'errorCheck*-}->`VanillaSwap'peekVanillaSwap*#}
QuantLib/Instrument/CapFloor.chs view
@@ -29,7 +29,6 @@ {#pointer *Leg foreign -> CLeg' nocode#} {#pointer *QlCapFloor as CapFloor foreign -> CCapFloor' nocode#} {#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#}-{#pointer *QlInstrument as Instrument foreign -> CInstrument' nocode#}  -- |constructs a cap: pays the excess of the floating leg's rate over each exercise rate, if positive {#fun qlCap as cap{withLeg*`GenLeg l' -- ^floatingLeg
QuantLib/Instrument/Credit.chs view
@@ -62,8 +62,6 @@ {#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#} {#pointer *QlDefaultProbabilityTermStructure as DefaultProbabilityTermStructure foreign -> CDefaultProbabilityTermStructure' nocode#} {#pointer *QlCdsOption as CdsOption foreign -> CCdsOption' nocode#}-{#pointer *QlBond as Bond foreign -> CBond' nocode#}-{#pointer *QlInstrument as Instrument foreign -> CInstrument' nocode#} {#pointer *DayCounter foreign -> CDayCounter nocode#} {#pointer *Leg foreign -> CLeg' nocode#} {#pointer *Schedule foreign -> CSchedule nocode#}@@ -113,7 +111,7 @@  -- |Volatility that reproduces a given option price under the pricing engine's volatility model. {#fun qlCdsOptionImpliedVolatility as impliedVolatility{withCdsOption*`CdsOption',`Double' -- ^price-  ,withYieldTermStructure*`GenYieldTermStructure y',withGenTermStructure*`DefaultProbabilityTermStructure'+  ,withYieldTermStructure*`GenYieldTermStructure y',withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d'   ,`Double' -- ^recoveryRate   ,`Double' -- ^accuracy   ,fromIntegral`Word' -- ^maxEvaluations
QuantLib/Instrument/Energy.chs view
@@ -151,9 +151,9 @@  {#fun qlCommoditySecondaryCostAmounts as qlCommoditySecondaryCostAmounts_   {withCommodity*`GenCommodity c'-  ,preArray-`[String]'&peekCStringArray*-  ,preArray-`[Double]'&peekDoubleArray*-  ,preArray-`[Currency]'&peekCurrencyArray*+  ,preCStringArray-`[String]'&peekCStringArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*+  ,preCurrencyArray-`[Currency]'&peekCurrencyArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The currency-resolved secondary costs computed during the most recent pricing@@ -166,9 +166,9 @@  {#fun qlCommodityPricingErrors as qlCommodityPricingErrors_   {withCommodity*`GenCommodity c'-  ,preArray-`[PricingErrorLevel]'&peekPricingErrorLevelArray*-  ,preArray-`[String]'&peekCStringArray*-  ,preArray-`[String]'&peekCStringArray*+  ,preIntArray-`[PricingErrorLevel]'&peekPricingErrorLevelArray*+  ,preCStringArray-`[String]'&peekCStringArray*+  ,preCStringArray-`[String]'&peekCStringArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Every pricing diagnostic recorded so far (via upstream's own internal calls, or via@@ -224,12 +224,12 @@  {#fun qlEnergySwapDailyPositions as qlEnergySwapDailyPositions_   {withEnergySwap*`GenEnergySwap s'-  ,preArray-`[Day]'&peekDayArray*-  ,preArray-`[Double]'&peekDoubleArray*-  ,preArray-`[Double]'&peekDoubleArray*-  ,preArray-`[Double]'&peekDoubleArray*-  ,preArray-`[Double]'&peekDoubleArray*-  ,preArray-`[Bool]'&peekBoolArray*+  ,preIntArray-`[Day]'&peekDayArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Bool]'&peekBoolArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The per-day pricing breakdown computed during this 'EnergySwap' leaf's most recent@@ -243,7 +243,7 @@ -- recent @performCalculations()@ -- populated only after pricing. {#fun qlEnergySwapPaymentCashFlows as paymentCashFlows   {withEnergySwap*`GenEnergySwap s'-  ,preArray-`[CommodityCashFlow]'&peekCommodityCashFlowArray*+  ,preCommodityCashFlowArray-`[CommodityCashFlow]'&peekCommodityCashFlowArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Split a 'SecondaryCosts' list into the five parallel arrays every energy-instrument@@ -389,12 +389,12 @@   ,fromEnumC`DeliverySchedule'   ,fromEnumC`QuantityPeriodicity'   ,withPaymentTerm*`PaymentTerm'-  ,preArray-`[Day]'&peekDayArray*-  ,preArray-`[Day]'&peekDayArray*-  ,preArray-`[Day]'&peekDayArray*-  ,preArray-`[CommodityType]'&peekCommodityTypeArray*-  ,preArray-`[UnitOfMeasure]'&peekUnitOfMeasureArray*-  ,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*+  ,preIntArray-`[Day]'&peekDayArray*+  ,preIntArray-`[Day]'&peekDayArray*+  ,preCommodityTypeArray-`[CommodityType]'&peekCommodityTypeArray*+  ,preUnitOfMeasureArray-`[UnitOfMeasure]'&peekUnitOfMeasureArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Split @[startDate, endDate)@ into 'PricingPeriod's of the given quantity, per a
QuantLib/Instrument/Forward.chs view
@@ -45,7 +45,6 @@ {#pointer *QlForward as Forward foreign -> CForward' nocode#} {#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#} {#pointer *QlIborIndex as IborIndex foreign -> CIborIndex' nocode#}-{#pointer *QlFixedRateBond as FixedRateBond foreign -> CFixedRateBond' nocode#} {#pointer *QlForwardRateAgreement as ForwardRateAgreement foreign -> CForwardRateAgreement' nocode#} {#pointer *QlBondForward as BondForward foreign -> CBondForward' nocode#} {#pointer *QlFxForward as FxForward foreign -> CFxForward' nocode#}
QuantLib/Instrument/InflationCapFloor.chs view
@@ -29,7 +29,6 @@ {#pointer *Leg foreign -> CLeg' nocode#} {#pointer *QlYoYInflationCapFloor as YoYInflationCapFloor foreign -> CYoYInflationCapFloor' nocode#} {#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#}-{#pointer *QlInstrument as Instrument foreign -> CInstrument' nocode#} {#pointer *QlZeroInflationIndex as ZeroInflationIndex foreign -> CZeroInflationIndex' nocode#} {#pointer *QlCPICapFloor as CPICapFloor foreign -> CCPICapFloor' nocode#} @@ -80,7 +79,7 @@   ,withCalendar*`Calendar' -- ^payCalendar   ,fromEnumC`BusinessDayConvention' -- ^payConvention   ,`Double' -- ^strike-  ,withZeroInflationIndex*`ZeroInflationIndex'+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx'   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^observationLag   ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation   ,preErrorCheck-`String'errorCheck*-}->`CPICapFloor'peekCPICapFloor*#}
QuantLib/Instrument/Option.chs view
@@ -124,8 +124,6 @@ import QuantLib.Internal.Common import Data.List.NonEmpty(NonEmpty, toList) -{#pointer *QlOption as Option foreign -> COption' nocode#}-{#pointer *QlCdsOption as CdsOption foreign -> CCdsOption' nocode#} {#pointer *QlInstrument as Instrument foreign -> CInstrument' nocode#} {#pointer *QlBarrierOption as BarrierOption foreign -> CBarrierOption' nocode#} {#pointer *QlDoubleBarrierOption as DoubleBarrierOption foreign -> CDoubleBarrierOption' nocode#}@@ -457,7 +455,7 @@ -- /Warning/ currently, this method returns the Black-Scholes implied volatility using analytic formulas for European options and a finite-difference method for American and Bermudan options. It will give unconsistent results if the pricing was performed with any other methods (such as jump-diffusion models.)Warningoptions with a gamma that changes sign (e.g., binary options) have values that are not monotonic in the volatility. In these cases, the calculation can fail and the result (if any) is almost meaningless. Another possible source of failure is to have a target value that is not attainable with any volatility, e.g., a target value lower than the intrinsic value in the case of American options.   impliedVolatility :: a     -> Double -- ^price-    -> GeneralizedBlackScholesProcess -- ^process+    -> GenGeneralizedBlackScholesProcess gbs -- ^process     -> [Dividend] -- ^dividends     -> Double -- ^accuracy     -> Word -- ^maxEvaluations
QuantLib/Instrument/Swap.chs view
@@ -8,11 +8,11 @@   , GenFixedVsFloatingSwap   , FixedVsFloatingSwap   , VanillaSwap+  , OvernightIndexedSwap   , NonstandardSwap   , IrregularSwap   , FloatFloatSwap   , AssetSwap-  , OvernightIndexedSwap   , BMASwap   , ZeroCouponInflationSwap   , YearOnYearInflationSwap@@ -23,6 +23,7 @@   , GenConstNotionalCrossCurrencySwap   , ConstNotionalCrossCurrencySwap   , ConstNotionalCrossCurrencyBasisSwap+  , MtMCrossCurrencyBasisSwap   , ConstNotionalCrossCurrencyFixedVsFloatingSwap      -- ** Swaptions and variance options@@ -43,10 +44,15 @@   , FloatFloatSwapVaryingOpts(..)   , defaultFloatFloatSwapVaryingOpts   , ConstNotionalCrossCurrencyBasisSwapOpts(..)+  , MtmCrossCurrencySwapType(..)+  , MtMCrossCurrencyBasisSwapOpts(..)+  , defaultMtmCrossCurrencyBasisSwapOpts   , defaultConstNotionalCrossCurrencyBasisSwapOpts   , OvernightObservation(..)   , defaultOvernightObservation +  , StubIndexSelection(..)+     -- * Constructors     -- ** Hierarchy conversion   , asSwap@@ -77,6 +83,8 @@   , constNotionalCrossCurrencySwap   , constNotionalCrossCurrencySwapFromLegs   , constNotionalCrossCurrencyBasisSwap+  , mtmCrossCurrencyBasisSwap+  , mtmCrossCurrencyBasisSwapWithOptions   , constNotionalCrossCurrencyFixedVsFloatingSwap      -- ** Overnight-indexed and asset swaps@@ -93,6 +101,12 @@   , floatFloatSwaption      -- * Inspectors+  , HasCrossCurrencyResults(..)+  , HasFairLegSpreads(..)+  , fairFxBaseSpread+  , fairFxQuoteSpread+  , fxResetRates+  , fxResetNotionals     -- ** Common swap inspectors   , HasFixedLeg(..)   , HasFloatingLeg(..)@@ -102,6 +116,7 @@   , impliedVolatility   , endDiscounts   , leg+  , numberOfLegs   , legBps   , legNpv   , maturityDate@@ -111,12 +126,6 @@   , nonstandardSwapFixedRate      -- ** Cross-currency swaps-  , legCurrency-  , inCcyLegBps-  , inCcyLegNpv-  , npvDateDiscounts-  , fairPaySpread-  , fairRecSpread      -- ** BMA swaps   , bmaLeg@@ -160,6 +169,7 @@   , overnightLegNpv    ) where+import Language.Haskell.TH(mkName, varT) import Data.Maybe(fromMaybe) import QuantLib.Internal.Syntax(deriveOptionsRecord) import QuantLib.Internal@@ -177,33 +187,18 @@ import QuantLib.Index(fixingCalendar) import QuantLib.Index.InterestRate(tenor, dayCounter, businessDayConvention) -{#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#}-{#pointer *QlIborIndex as IborIndex foreign -> CIborIndex' nocode#} {#pointer *QlBMAIndex as BMAIndex foreign -> CBMAIndex' nocode#} {#pointer *QlOvernightIndex as OvernightIborIndex foreign -> COvernightIndex' nocode#}-{#pointer *QlOption as Option foreign -> COption' nocode#} {#pointer *QlBond as Bond foreign -> CBond' nocode#} {#pointer *QlCreditDefaultSwap as CreditDefaultSwap foreign -> CCreditDefaultSwap' nocode#}--- CdsOption is constructed in QuantLib.Instrument.Credit; aliased here only so its--- HasInstrumentUnderlying instance stays non-orphan, as CreditDefaultSwap's HasFairSpread does. {#pointer *QlCdsOption as CdsOption foreign -> CCdsOption' nocode#} {#pointer *Schedule as Schedule foreign -> CSchedule nocode#} {#pointer *DayCounter foreign -> CDayCounter nocode#} {#pointer *QlExercise nocode#} {#pointer *QlZeroInflationIndex as ZeroInflationIndex foreign -> CZeroInflationIndex' nocode#} {#pointer *QlYoYInflationIndex as YoYInflationIndex foreign -> CYoYInflationIndex' nocode#}--#include "qlTypesC2HS.h"-#include "qlEnumC2HS.h"-#include "qlEnumObjects.h"--#include "ql.h"--{#enum SwapType{} deriving(Show, Eq, Read)#}-{#enum SwaptionPriceType{} add prefix="Swaption" deriving(Show, Eq, Read)#}-{#enum IrregularSettlementType{} deriving(Show, Eq, Read)#}- {#pointer *Leg foreign -> CLeg' nocode#}+{#pointer *QlMtMCrossCurrencyBasisSwap as MtMCrossCurrencyBasisSwap foreign -> CMtMCrossCurrencyBasisSwap' nocode#} {#pointer *QlSwaption as Swaption foreign -> CSwaption' nocode#} {#pointer *QlIrregularSwaption as IrregularSwaption foreign -> CIrregularSwaption' nocode#} {#pointer *QlSwap as Swap foreign -> CSwap' nocode#}@@ -213,8 +208,6 @@ {#pointer *QlNonstandardSwap as NonstandardSwap foreign -> CNonstandardSwap' nocode#} {#pointer *QlNonstandardSwaption as NonstandardSwaption foreign -> CNonstandardSwaption' nocode#} {#pointer *QlBlackCalibrationHelper as BlackCalibrationHelper foreign -> CBlackCalibrationHelper' nocode#}-{#pointer *QlSwapIndex as SwapIndex foreign -> CSwapIndex' nocode#}-{#pointer *QlSwaptionVolatilityStructure as SwaptionVolatilityStructure foreign -> CSwaptionVolatilityStructure' nocode#} {#pointer *QlAssetSwap as AssetSwap foreign -> CAssetSwap' nocode#} {#pointer *QlBMASwap as BMASwap foreign -> CBMASwap' nocode#} {#pointer *QlOvernightIndexedSwap as OvernightIndexedSwap foreign -> COvernightIndexedSwap' nocode#}@@ -226,12 +219,22 @@ {#pointer *QlEquityIndex as EquityIndex foreign -> CEquityIndex' nocode#} {#pointer *QlFloatFloatSwap as FloatFloatSwap foreign -> CFloatFloatSwap' nocode#} {#pointer *QlFloatFloatSwaption as FloatFloatSwaption foreign -> CFloatFloatSwaption' nocode#}-{#pointer *QlInterestRateIndex as InterestRateIndex foreign -> CInterestRateIndex' nocode#} {#pointer *QlConstNotionalCrossCurrencySwap as ConstNotionalCrossCurrencySwap foreign -> CConstNotionalCrossCurrencySwap' nocode#} {#pointer *QlConstNotionalCrossCurrencyBasisSwap as ConstNotionalCrossCurrencyBasisSwap foreign -> CConstNotionalCrossCurrencyBasisSwap' nocode#} {#pointer *QlConstNotionalCrossCurrencyFixedVsFloatingSwap as ConstNotionalCrossCurrencyFixedVsFloatingSwap foreign -> CConstNotionalCrossCurrencyFixedVsFloatingSwap' nocode#} {#pointer *Currency foreign -> CCurrency nocode#} +#include "qlTypesC2HS.h"+#include "qlEnumC2HS.h"+#include "qlEnumObjects.h"++#include "ql.h"+{#pointer *QlStubIndexSelection nocode#}++{#enum SwapType{} deriving(Show, Eq, Read)#}+{#enum SwaptionPriceType{} add prefix="Swaption" deriving(Show, Eq, Read)#}+{#enum IrregularSettlementType{} deriving(Show, Eq, Read)#}+ -- FloatFloatSwapOpts/FloatFloatSwapVaryingOpts bundle every trailing param of FloatFloatSwap's -- two constructors (floatfloatswap.hpp) -- 12 trailing defaulted params each, past the -- options-record threshold (see the add-quantlib-options-record skill). Two separate records@@ -242,6 +245,28 @@ -- the physical end of the generated module regardless of where in the .chs a {#fun#} hook -- appears, so a top-level TH splice in between would split the file into declaration groups -- that can't see each other).+-- |Direction of the FX-base currency leg, independent of the resettable-leg choice.+data MtmCrossCurrencySwapType = PayFxBaseCurrency | ReceiveFxBaseCurrency deriving (Eq, Show, Read)++$(deriveOptionsRecord "MtMCrossCurrencyBasisSwapOpts" ["ibor3", "ibor4"]+  [ ("mtmFxResetFixingDays", [t|Word|], [|0|])+  , ("mtmFxResetFixingCalendar", [t|Maybe Calendar|], [|Nothing|])+  , ("mtmFxBasePaymentLag", [t|Int|], [|0|])+  , ("mtmFxQuotePaymentLag", [t|Int|], [|0|])+  , ("mtmFxBasePaymentConvention", [t|BusinessDayConvention|], [|Following|])+  , ("mtmFxQuotePaymentConvention", [t|BusinessDayConvention|], [|Following|])+  , ("mtmFxBaseCompoundSpread", [t|Bool|], [|False|])+  , ("mtmFxBaseObservation", [t|OvernightObservation|], [|defaultOvernightObservation|])+  , ("mtmFxBaseAveragingMethod", [t|RateAveragingType|], [|AveragingCompound|])+  , ("mtmFxQuoteCompoundSpread", [t|Bool|], [|False|])+  , ("mtmFxQuoteObservation", [t|OvernightObservation|], [|defaultOvernightObservation|])+  , ("mtmFxQuoteAveragingMethod", [t|RateAveragingType|], [|AveragingCompound|])+  , ("mtmTelescopicValueDates", [t|Bool|], [|False|])+  , ("mtmUseIndexedCoupons", [t|Maybe Bool|], [|Nothing|])+  , ("mtmFxBaseStubIndexSelection", [t|Maybe (StubIndexSelection $(varT (mkName "ibor3")))|], [|Nothing|])+  , ("mtmFxQuoteStubIndexSelection", [t|Maybe (StubIndexSelection $(varT (mkName "ibor4")))|], [|Nothing|])+  ])+ $(deriveOptionsRecord "FloatFloatSwapOpts" []   [ ("ffsIntermediateCapitalExchange", [t|Bool|], [|False|])   , ("ffsFinalCapitalExchange", [t|Bool|], [|False|])@@ -278,7 +303,7 @@ -- textually before every {#fun#} in this file. ConstNotionalCrossCurrencyFixedVsFloatingSwap's -- constructor has only 4 trailing defaults (under the threshold), so it's widened in place -- instead -- see 'constNotionalCrossCurrencyFixedVsFloatingSwap' below.-$(deriveOptionsRecord "ConstNotionalCrossCurrencyBasisSwapOpts" []+$(deriveOptionsRecord "ConstNotionalCrossCurrencyBasisSwapOpts" ["ibor3", "ibor4"]   [ ("cccbsPayPaymentLag", [t|Int|], [|0|])   , ("cccbsRecPaymentLag", [t|Int|], [|0|])   , ("cccbsPayCompoundSpread", [t|Bool|], [|False|])@@ -288,6 +313,10 @@   , ("cccbsRecObservation", [t|OvernightObservation|], [|defaultOvernightObservation|])   , ("cccbsRecAveragingMethod", [t|RateAveragingType|], [|AveragingCompound|])   , ("cccbsTelescopicValueDates", [t|Bool|], [|False|])+  , ("cccbsUseIndexedCoupons", [t|Maybe Bool|], [|Nothing|])+  , ("cccbsPaymentLagOnNotionalExchanges", [t|Bool|], [|False|])+  , ("cccbsPayStubIndexSelection", [t|Maybe (StubIndexSelection $(varT (mkName "ibor3")))|], [|Nothing|])+  , ("cccbsRecStubIndexSelection", [t|Maybe (StubIndexSelection $(varT (mkName "ibor4")))|], [|Nothing|])   ])  -- |implied volatility@@ -303,10 +332,10 @@   ,preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Multi leg constructor.-swapFromLegs :: [(Leg, Bool)] -- ^(legs, payer)+swapFromLegs :: [(GenLeg l, Bool)] -- ^(legs, payer)   -> IO Swap swapFromLegs = (uncurry qlSwap1) . unzip-{#fun qlSwap1{withLegArray*`[Leg]'&,withBoolArray*`[Bool]'&,preErrorCheck-`String'errorCheck*-}->`Swap'peekSwap*#}+{#fun qlSwap1{withLegArray*`[GenLeg l]'&,withBoolArray*`[Bool]'&,preErrorCheck-`String'errorCheck*-}->`Swap'peekSwap*#}  -- |Swap paying Libor against BMA coupons {#fun qlBMASwap as bmaSwap{`SwapType',`Double' -- ^nominal@@ -333,12 +362,15 @@  -- |Converts an existing 'FixedVsFloatingSwap' (e.g. a 'VanillaSwap') into a 'NonstandardSwap' -- (upstream's own conversion constructor, @NonstandardSwap(const FixedVsFloatingSwap&)@).+-- An 'OvernightIndexedSwap' keeps its compounded coupons, payment lag and observation+-- conventions; converting one requires QuantLib 1.44. {#fun qlNonstandardSwap1 as nonstandardSwapFromVanilla{withFixedVsFloatingSwap*`GenFixedVsFloatingSwap f'   ,preErrorCheck-`String'errorCheck*-}->`NonstandardSwap'peekNonstandardSwap*#}  -- |'VanillaSwap' generalized to per-period fixed/floating nominals and fixed rates, plus -- optional intermediate\/final notional exchange -- a single 'Double' gearing\/spread shared -- across all floating periods. See 'nonstandardSwapFromGearingsAndSpreads' for per-period gearing\/spread.+-- QuantLib 1.44 builds compounded coupons for an overnight index; 1.43 builds Ibor coupons. {#fun qlNonstandardSwap as nonstandardSwap{`SwapType'   ,withDoubleArray*`[Double]'& -- ^fixedNominal   ,withDoubleArray*`[Double]'& -- ^floatingNominal@@ -353,6 +385,8 @@   ,`Bool' -- ^intermediateCapitalExchange   ,`Bool' -- ^finalCapitalExchange   ,fromMaybeEnum`Maybe BusinessDayConvention' -- ^paymentConvention+  ,fromIntegral`Int' -- ^paymentLag (1.44; QuantLib 1.43 requires 0)+  ,withMaybeCalendar*`Maybe Calendar' -- ^paymentCalendar, 'Nothing' for each leg's schedule calendar (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`NonstandardSwap'peekNonstandardSwap*#}  -- |As 'nonstandardSwap', but with a per-period gearing and spread instead of one shared value.@@ -370,13 +404,15 @@   ,`Bool' -- ^intermediateCapitalExchange   ,`Bool' -- ^finalCapitalExchange   ,fromMaybeEnum`Maybe BusinessDayConvention' -- ^paymentConvention+  ,fromIntegral`Int' -- ^paymentLag (1.44; QuantLib 1.43 requires 0)+  ,withMaybeCalendar*`Maybe Calendar' -- ^paymentCalendar, 'Nothing' for each leg's schedule calendar (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`NonstandardSwap'peekNonstandardSwap*#}  -- |Per-period fixed rate, one entry per fixed-leg accrual period. For a swap built via -- 'nonstandardSwap'\/'nonstandardSwapFromGearingsAndSpreads', this simply echoes the constructor's @fixedRate@; for -- one built via 'nonstandardSwapFromVanilla' it is derived from the underlying vanilla swap's -- fixed leg coupons.-{#fun qlNonstandardSwapFixedRate as nonstandardSwapFixedRate{withNonstandardSwap*`NonstandardSwap',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlNonstandardSwapFixedRate as nonstandardSwapFixedRate{withNonstandardSwap*`NonstandardSwap',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Swap exchanging capped\/floored Libor or CMS coupons with a single flat nominal on each leg. -- 'FloatFloatSwapOpts' bundles every trailing param the C++ constructor defaults (gearing\/@@ -592,6 +628,9 @@ -- |Discount factor at leg j's end date. {#fun qlSwapEndDiscounts as endDiscounts{withSwap*`GenSwap s',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Double'#} +-- |How many legs this swap has; leg indexes run from 0 to one less than this.+{#fun qlSwapNumberOfLegs as numberOfLegs{withSwap*`GenSwap s',preErrorCheck-`String'errorCheck*-}->`Word'fromIntegral#}+ -- |The j-th leg's cash flows. {#fun qlSwapLeg as leg{withSwap*`GenSwap s',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Leg'peekLeg*#} @@ -612,34 +651,34 @@   ,preErrorCheck-`String'errorCheck*-}->`ConstNotionalCrossCurrencySwap'peekConstNotionalCrossCurrencySwap*#}  -- |Multi-leg constructor.-constNotionalCrossCurrencySwapFromLegs :: [(Leg, Bool)] -- ^(legs, payer)+constNotionalCrossCurrencySwapFromLegs :: [(GenLeg l, Bool)] -- ^(legs, payer)   -> [Currency] -> IO ConstNotionalCrossCurrencySwap constNotionalCrossCurrencySwapFromLegs legsPayer = qlConstNotionalCrossCurrencySwap1 legs payer   where (legs, payer) = unzip legsPayer-{#fun qlConstNotionalCrossCurrencySwap1{withLegArray*`[Leg]'&,withBoolArray*`[Bool]'&,withCurrencyArray*`[Currency]'&,preErrorCheck-`String'errorCheck*-}->`ConstNotionalCrossCurrencySwap'peekConstNotionalCrossCurrencySwap*#}+{#fun qlConstNotionalCrossCurrencySwap1{withLegArray*`[GenLeg l]'&,withBoolArray*`[Bool]'&,withCurrencyArray*`[Currency]'&,preErrorCheck-`String'errorCheck*-}->`ConstNotionalCrossCurrencySwap'peekConstNotionalCrossCurrencySwap*#}  -- |Leg j's currency.-{#fun qlConstNotionalCrossCurrencySwapLegCurrency as legCurrency{withConstNotionalCrossCurrencySwap*`GenConstNotionalCrossCurrencySwap x',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Currency'peekCurrency*#}+{#fun qlConstNotionalCrossCurrencySwapLegCurrency as constNotionalLegCurrency{withConstNotionalCrossCurrencySwap*`GenConstNotionalCrossCurrencySwap x',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Currency'peekCurrency*#}  -- |Basis-point sensitivity of leg j, expressed in the leg's own currency (contrast 'legBps', in the swap's NPV currency).-{#fun qlConstNotionalCrossCurrencySwapInCcyLegBPS as inCcyLegBps{withConstNotionalCrossCurrencySwap*`GenConstNotionalCrossCurrencySwap x',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Double'#}+{#fun qlConstNotionalCrossCurrencySwapInCcyLegBPS as constNotionalInCcyLegBPS{withConstNotionalCrossCurrencySwap*`GenConstNotionalCrossCurrencySwap x',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |NPV of leg j, expressed in the leg's own currency (contrast 'legNpv', in the swap's NPV currency).-{#fun qlConstNotionalCrossCurrencySwapInCcyLegNPV as inCcyLegNpv{withConstNotionalCrossCurrencySwap*`GenConstNotionalCrossCurrencySwap x',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Double'#}+{#fun qlConstNotionalCrossCurrencySwapInCcyLegNPV as constNotionalInCcyLegNPV{withConstNotionalCrossCurrencySwap*`GenConstNotionalCrossCurrencySwap x',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Discount factor at the instrument's NPV date, for leg j.-{#fun qlConstNotionalCrossCurrencySwapNpvDateDiscounts as npvDateDiscounts{withConstNotionalCrossCurrencySwap*`GenConstNotionalCrossCurrencySwap x',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Double'#}+{#fun qlConstNotionalCrossCurrencySwapNpvDateDiscounts as constNotionalNpvDateDiscounts{withConstNotionalCrossCurrencySwap*`GenConstNotionalCrossCurrencySwap x',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Cross-currency basis swap: pay-currency cashflows on leg 0, receive-currency on leg 1. -- 'ConstNotionalCrossCurrencyBasisSwapOpts' bundles every trailing param the C++ constructor--- defaults (all OIS-only -- payment lag, compound-spread, lookback, observation shift, lockout,+-- defaults (OIS payment lag, compound-spread, lookback, observation shift, lockout, -- averaging method per leg, plus a shared telescopic-value-dates flag; ignored for a plain Ibor--- 'payIndex'\/'recIndex', since upstream itself only consults them when the index is an overnight--- index); override only what's needed via record-update syntax on+-- 'payIndex'\/'recIndex'). Indexed coupons, lagged notional exchanges and stub selections are+-- available on QuantLib 1.44; 1.43 accepts only their defaults. Override only what's needed on -- 'defaultConstNotionalCrossCurrencyBasisSwapOpts'. constNotionalCrossCurrencyBasisSwap :: Double -> Currency -> Schedule -> GenIborIndex ibor1 -> Double -> Double   -> Double -> Currency -> Schedule -> GenIborIndex ibor2 -> Double -> Double-  -> ConstNotionalCrossCurrencyBasisSwapOpts -> IO ConstNotionalCrossCurrencyBasisSwap+  -> ConstNotionalCrossCurrencyBasisSwapOpts ibor3 ibor4 -> IO ConstNotionalCrossCurrencyBasisSwap constNotionalCrossCurrencyBasisSwap payNominal payCurrency paySchedule payIndex paySpread payGearing     recNominal recCurrency recSchedule recIndex recSpread recGearing opts =   constNotionalCrossCurrencyBasisSwap_ payNominal payCurrency paySchedule payIndex paySpread payGearing@@ -650,6 +689,8 @@     (cccbsRecCompoundSpread opts) (lookbackDays recObs) (applyObservationShift recObs)     (lockoutDays recObs) (cccbsRecAveragingMethod opts)     (cccbsTelescopicValueDates opts)+    (cccbsUseIndexedCoupons opts) (cccbsPaymentLagOnNotionalExchanges opts)+    (cccbsPayStubIndexSelection opts) (cccbsRecStubIndexSelection opts)   where payObs = cccbsPayObservation opts         recObs = cccbsRecObservation opts @@ -678,13 +719,17 @@   ,fromIntegral`Word' -- ^recLockoutDays   ,`RateAveragingType' -- ^recAveragingMethod   ,`Bool' -- ^telescopicValueDates+  ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons (1.44; QuantLib 1.43 requires 'Nothing')+  ,`Bool' -- ^paymentLagOnNotionalExchanges (1.44; QuantLib 1.43 requires 'False')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor3)' -- ^payStub (1.44; QuantLib 1.43 requires 'Nothing')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor4)' -- ^recStub (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`ConstNotionalCrossCurrencyBasisSwap'peekConstNotionalCrossCurrencyBasisSwap*#}  -- |The pay-leg spread that would make the swap's NPV zero.-{#fun qlConstNotionalCrossCurrencyBasisSwapFairPaySpread as fairPaySpread{withConstNotionalCrossCurrencyBasisSwap*`ConstNotionalCrossCurrencyBasisSwap',preErrorCheck-`String'errorCheck*-}->`Double'#}+{#fun qlConstNotionalCrossCurrencyBasisSwapFairPaySpread as constNotionalFairPaySpread{withConstNotionalCrossCurrencyBasisSwap*`ConstNotionalCrossCurrencyBasisSwap',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |The receive-leg spread that would make the swap's NPV zero.-{#fun qlConstNotionalCrossCurrencyBasisSwapFairRecSpread as fairRecSpread{withConstNotionalCrossCurrencyBasisSwap*`ConstNotionalCrossCurrencyBasisSwap',preErrorCheck-`String'errorCheck*-}->`Double'#}+{#fun qlConstNotionalCrossCurrencyBasisSwapFairRecSpread as constNotionalFairRecSpread{withConstNotionalCrossCurrencyBasisSwap*`ConstNotionalCrossCurrencyBasisSwap',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Cross-currency fixed-vs-floating swap: 'Payer' pays the fixed leg (leg 0) and receives the -- floating leg (leg 1); 'Receiver' the reverse. Every trailing defaulted param of the upstream@@ -717,12 +762,14 @@   -> Bool -- ^floatCompoundSpread   -> OvernightObservation -- ^floatObservation   -> RateAveragingType -- ^floatAveragingMethod+  -> Maybe Bool -- ^useIndexedCoupons (1.44; QuantLib 1.43 requires 'Nothing')+  -> Maybe (StubIndexSelection ibor2) -- ^floatStubIndexSelection (1.44; QuantLib 1.43 requires 'Nothing')   -> IO ConstNotionalCrossCurrencyFixedVsFloatingSwap constNotionalCrossCurrencyFixedVsFloatingSwap t fxN fxC fxS fxR fxDc fxBdc fxLag fxCal-  flN flC flS flIdx flSprd flBdc flLag flCal telescopic compound obs avg =+  flN flC flS flIdx flSprd flBdc flLag flCal telescopic compound obs avg indexed stub =   constNotionalCrossCurrencyFixedVsFloatingSwapRaw t fxN fxC fxS fxR fxDc fxBdc fxLag fxCal     flN flC flS flIdx flSprd flBdc flLag flCal telescopic compound-    (lookbackDays obs) (applyObservationShift obs) (lockoutDays obs) avg+    (lookbackDays obs) (applyObservationShift obs) (lockoutDays obs) avg indexed stub  {#fun qlConstNotionalCrossCurrencyFixedVsFloatingSwap as constNotionalCrossCurrencyFixedVsFloatingSwapRaw{`SwapType'   ,`Double' -- ^fixedNominal@@ -747,6 +794,8 @@   ,`Bool' -- ^floatObservationShift   ,fromIntegral`Word' -- ^floatLockoutDays   ,`RateAveragingType' -- ^floatAveragingMethod+  ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons (1.44; QuantLib 1.43 requires 'Nothing')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor2)' -- ^floatStub (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`ConstNotionalCrossCurrencyFixedVsFloatingSwap'peekConstNotionalCrossCurrencyFixedVsFloatingSwap*#}  -- |The fixed rate that would make the swap's NPV zero.@@ -758,7 +807,9 @@   fairSpread = qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairSpread {#fun qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairSpread{withConstNotionalCrossCurrencyFixedVsFloatingSwap*`ConstNotionalCrossCurrencyFixedVsFloatingSwap',preErrorCheck-`String'errorCheck*-}->`Double'#} --- |An option on a 'VanillaSwap'.+-- |An option on a 'VanillaSwap' or an 'OvernightIndexedSwap'; the latter requires QuantLib 1.44.+-- The Gaussian1d swaption engines then compound overnight coupons exactly, approximate lookback+-- without observation shift and lockout, and do not support arithmetic averaging. {#fun qlSwaption as swaption{withFixedVsFloatingSwap*`GenFixedVsFloatingSwap f',withExercise*`Exercise',`SettlementType',`SettlementMethod',preErrorCheck-`String'errorCheck*-}->`Swaption'peekSwaption*#}  -- |A priceable option on an 'IrregularSwap'.  Use 'haganIrregularSwaptionEngine'@@ -784,7 +835,7 @@   ,withSwapIndex*`GenSwapIndex sidx' -- ^standardSwapBase   ,withSwaptionVolatilityStructure*`GenSwaptionVolatilityStructure sv' -- ^swaptionVolatility   ,fromEnumC`CalibrationBasketType'-  ,preArray-`[BlackCalibrationHelper]'&peekBlackCalibrationHelperArray*+  ,preBlackCalibrationHelperArray-`[BlackCalibrationHelper]'&peekBlackCalibrationHelperArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |An option on a 'FloatFloatSwap'.@@ -795,12 +846,12 @@   ,withSwapIndex*`GenSwapIndex sidx' -- ^standardSwapBase   ,withSwaptionVolatilityStructure*`GenSwaptionVolatilityStructure sv' -- ^swaptionVolatility   ,fromEnumC`CalibrationBasketType'-  ,preArray-`[BlackCalibrationHelper]'&peekBlackCalibrationHelperArray*+  ,preBlackCalibrationHelperArray-`[BlackCalibrationHelper]'&peekBlackCalibrationHelperArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Bullet bond vs Libor swap (par or market asset swap, per /parAssetSwap/). {#fun qlAssetSwap as assetSwap{`Bool' -- ^payBondCoupon-  ,withBond*`Bond',`Double' -- ^bondCleanPrice+  ,withBond*`GenBond b',`Double' -- ^bondCleanPrice   ,withIborIndex*`GenIborIndex ibor',`Double' -- spread   ,withSchedule*`Schedule' -- ^floatSchedule   ,withDayCounter*`DayCounter' -- ^floatingDayCount@@ -824,10 +875,11 @@   -> Bool -- ^telescopicValueDates   -> RateAveragingType -- ^averagingMethod   -> OvernightObservation+  -> Maybe Int -- ^roundingPrecision (1.44; QuantLib 1.43 requires 'Nothing')   -> IO OvernightIndexedSwap-overnightIndexedSwap t n sch r dc idx sprd lag adj cal telescopic avg obs =+overnightIndexedSwap t n sch r dc idx sprd lag adj cal telescopic avg obs precision =   overnightIndexedSwapRaw t n sch r dc idx sprd lag adj cal telescopic avg-    (lookbackDays obs) (lockoutDays obs) (applyObservationShift obs)+    (lookbackDays obs) (lockoutDays obs) (applyObservationShift obs) precision  {#fun qlOvernightIndexedSwap as overnightIndexedSwapRaw{`SwapType',`Double' -- ^nominal   ,withSchedule*`Schedule',`Double'  -- ^fixedRate@@ -841,6 +893,7 @@   ,fromMaybeInt`Maybe Word' -- ^lookbackDays   ,fromIntegral`Word' -- ^lockoutDays   ,`Bool' -- ^applyObservationShift+  ,fromMaybeInt`Maybe Int' -- ^roundingPrecision (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`OvernightIndexedSwap'peekOvernightIndexedSwap*#}  -- |As 'overnightIndexedSwap', but with a per-period nominal schedule instead of a single flat nominal.@@ -857,10 +910,11 @@   -> Bool -- ^telescopicValueDates   -> RateAveragingType -- ^averagingMethod   -> OvernightObservation+  -> Maybe Int -- ^roundingPrecision (1.44; QuantLib 1.43 requires 'Nothing')   -> IO OvernightIndexedSwap-overnightIndexedSwapFromNominals t ns sch r dc idx sprd lag adj cal telescopic avg obs =+overnightIndexedSwapFromNominals t ns sch r dc idx sprd lag adj cal telescopic avg obs precision =   overnightIndexedSwapFromNominalsRaw t ns sch r dc idx sprd lag adj cal telescopic avg-    (lookbackDays obs) (lockoutDays obs) (applyObservationShift obs)+    (lookbackDays obs) (lockoutDays obs) (applyObservationShift obs) precision  {#fun qlOvernightIndexedSwap1 as overnightIndexedSwapFromNominalsRaw{`SwapType',withDoubleArray*`[Double]'& -- ^nominals   ,withSchedule*`Schedule' -- ^schedule@@ -875,6 +929,7 @@   ,fromMaybeInt`Maybe Word' -- ^lookbackDays   ,fromIntegral`Word' -- ^lockoutDays   ,`Bool' -- ^applyObservationShift+  ,fromMaybeInt`Maybe Int' -- ^roundingPrecision (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`OvernightIndexedSwap'peekOvernightIndexedSwap*#}  -- |The swap's maturity date, or 'Nothing' if the swap has no legs.@@ -953,7 +1008,7 @@   ,fromEnumC`BusinessDayConvention' -- ^paymentConvention   ,withDayCounter*`DayCounter'   ,`Double' -- ^fixedRate-  ,withZeroInflationIndex*`ZeroInflationIndex'+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx'   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^observationLag   ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation   ,`Bool' -- ^adjustInfObsDates@@ -971,7 +1026,7 @@   ,`Double' -- ^fixedRate   ,withDayCounter*`DayCounter' -- ^fixedDayCount   ,withSchedule*`Schedule' -- ^yoySchedule-  ,withYoYInflationIndex*`YoYInflationIndex'+  ,withYoYInflationIndex*`GenYoYInflationIndex yidx'   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^observationLag   ,fromEnumC`CPIInterpolationType' -- ^interpolation   ,`Double' -- ^spread@@ -1004,7 +1059,7 @@   ,withSchedule*`Schedule' -- ^fixedSchedule   ,fromEnumC`BusinessDayConvention' -- ^fixedRoll   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^observationLag-  ,withZeroInflationIndex*`ZeroInflationIndex' -- ^fixedIndex+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx' -- ^fixedIndex   ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation   ,fromMaybeDouble`Maybe Double' -- ^inflationNominal   ,preErrorCheck-`String'errorCheck*-}->`CPISwap'peekCPISwap*#}@@ -1084,10 +1139,6 @@   fixedLeg :: a -> IO Leg   fixedLegBps :: a -> IO Double   fixedLegNpv :: a -> IO Double-instance HasFixedLeg OvernightIndexedSwap where-  fixedLeg = qlOvernightIndexedSwapFixedLeg-  fixedLegBps = qlOvernightIndexedSwapFixedLegBPS-  fixedLegNpv = qlOvernightIndexedSwapFixedLegNPV instance HasFixedLeg (GenFixedVsFloatingSwap f) where   fixedLeg = qlFixedVsFloatingSwapFixedLeg   fixedLegBps = qlFixedVsFloatingSwapFixedLegBPS@@ -1095,8 +1146,6 @@  class HasFairRate a where   fairRate :: a -> IO Double-instance HasFairRate OvernightIndexedSwap where-  fairRate = qlOvernightIndexedSwapFairRate instance HasFairRate (GenFixedVsFloatingSwap f) where   fairRate = qlFixedVsFloatingSwapFairRate instance HasFairRate IrregularSwap where@@ -1112,8 +1161,6 @@   fairSpread :: a -> IO Double instance HasFairSpread (GenFixedVsFloatingSwap f) where   fairSpread = qlFixedVsFloatingSwapFairSpread-instance HasFairSpread OvernightIndexedSwap where-  fairSpread = qlOvernightIndexedSwapFairSpread instance HasFairSpread AssetSwap where   fairSpread = qlAssetSwapFairSpread instance HasFairSpread CreditDefaultSwap where@@ -1183,21 +1230,6 @@ -- |NPV of the fixed leg. {#fun qlFixedVsFloatingSwapFixedLegNPV{withFixedVsFloatingSwap*`GenFixedVsFloatingSwap f',preErrorCheck-`String'errorCheck*-}->`Double'#} --- |The fixed rate that would make the swap's NPV zero.-{#fun qlOvernightIndexedSwapFairRate{withOvernightIndexedSwap*`OvernightIndexedSwap',preErrorCheck-`String'errorCheck*-}->`Double'#}---- |The fixed leg's cash flows.-{#fun qlOvernightIndexedSwapFixedLeg{withOvernightIndexedSwap*`OvernightIndexedSwap',preErrorCheck-`String'errorCheck*-}->`Leg'peekLeg*#}---- |Basis-point sensitivity of the fixed leg.-{#fun qlOvernightIndexedSwapFixedLegBPS{withOvernightIndexedSwap*`OvernightIndexedSwap',preErrorCheck-`String'errorCheck*-}->`Double'#}---- |NPV of the fixed leg.-{#fun qlOvernightIndexedSwapFixedLegNPV{withOvernightIndexedSwap*`OvernightIndexedSwap',preErrorCheck-`String'errorCheck*-}->`Double'#}---- |The spread that would make the swap's NPV zero.-{#fun qlOvernightIndexedSwapFairSpread{withOvernightIndexedSwap*`OvernightIndexedSwap',preErrorCheck-`String'errorCheck*-}->`Double'#}- -- |Returns the running spread that, given the quoted recovery rate, will make the running-only CDS have an NPV of 0.This calculation does not take any upfront into account, even if one was given. {#fun qlCreditDefaultSwapFairSpread{withGenInstrument*`CreditDefaultSwap',preErrorCheck-`String'errorCheck*-}->`Double'#} @@ -1242,5 +1274,184 @@   ,withDay*`Day' -- ^startDate   ,withDay*`Day' -- ^maturityDate   ,preErrorCheck-`String'errorCheck*-}->`VarianceOption'peekVarianceOption*#}++-- |Native MTM product construction.+{#fun qlMtMCrossCurrencyBasisSwap as mtmCrossCurrencyBasisSwapRaw{`Int' -- ^type+  ,`Double' -- ^fxBaseNominal+  ,withCurrency*`Currency' -- ^fxBaseCurrency+  ,withSchedule*`Schedule' -- ^fxBaseSchedule+  ,withIborIndex*`GenIborIndex ibor1' -- ^fxBaseIndex+  ,`Double' -- ^fxBaseSpread+  ,`Double' -- ^fxBaseGearing+  ,`Double' -- ^fxQuoteNominal+  ,withCurrency*`Currency' -- ^fxQuoteCurrency+  ,withSchedule*`Schedule' -- ^fxQuoteSchedule+  ,withIborIndex*`GenIborIndex ibor2' -- ^fxQuoteIndex+  ,`Double' -- ^fxQuoteSpread+  ,`Double' -- ^fxQuoteGearing+  ,`Bool' -- ^isFxBaseCurrencyLegResettable+  ,fromIntegral`Word' -- ^fxResetFixingDays+  ,withMaybeCalendar*`Maybe Calendar' -- ^fxResetFixingCalendar+  ,`Int' -- ^fxBasePaymentLag+  ,`Int' -- ^fxQuotePaymentLag+  ,fromEnumC`BusinessDayConvention' -- ^fxBasePaymentConvention+  ,fromEnumC`BusinessDayConvention' -- ^fxQuotePaymentConvention+  ,`Bool' -- ^fxBaseCompoundSpread+  ,fromMaybeInt`Maybe Word' -- ^fxBaseLookbackDays+  ,`Bool' -- ^fxBaseObservationShift+  ,fromIntegral`Word' -- ^fxBaseLockoutDays+  ,`RateAveragingType' -- ^fxBaseAveragingMethod+  ,`Bool' -- ^fxQuoteCompoundSpread+  ,fromMaybeInt`Maybe Word' -- ^fxQuoteLookbackDays+  ,`Bool' -- ^fxQuoteObservationShift+  ,fromIntegral`Word' -- ^fxQuoteLockoutDays+  ,`RateAveragingType' -- ^fxQuoteAveragingMethod+  ,`Bool' -- ^telescopicValueDates+  ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor3)' -- ^fxBaseStubIndexSelection+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor4)' -- ^fxQuoteStubIndexSelection+  ,preErrorCheck-`String'errorCheck*-}->`MtMCrossCurrencyBasisSwap'peekMtMCrossCurrencyBasisSwap*#}++-- |Resetting-notional cross-currency basis swap with upstream defaults (1.44).+-- Base is leg 0 and quote is leg 1. The Bool chooses whether base resets.+mtmCrossCurrencyBasisSwap :: MtmCrossCurrencySwapType -- ^Pay/receive FX base currency; base is leg 0, quote leg 1+  -> Double -- ^FX base nominal+  -> Currency -- ^FX base currency+  -> Schedule -- ^FX base schedule+  -> GenIborIndex ibor1 -- ^FX base IBOR or overnight index+  -> Double -- ^FX base spread+  -> Double -- ^FX base gearing+  -> Double -- ^FX quote nominal+  -> Currency -- ^FX quote currency+  -> Schedule -- ^FX quote schedule+  -> GenIborIndex ibor2 -- ^FX quote IBOR or overnight index+  -> Double -- ^FX quote spread+  -> Double -- ^FX quote gearing+  -> Bool -- ^True resets the FX base leg; False resets the FX quote leg+  -> IO MtMCrossCurrencyBasisSwap+mtmCrossCurrencyBasisSwap direction fxBaseNominal fxBaseCurrency fxBaseSchedule fxBaseIndex fxBaseSpread fxBaseGearing fxQuoteNominal fxQuoteCurrency fxQuoteSchedule fxQuoteIndex fxQuoteSpread fxQuoteGearing resetBase =+  mtmCrossCurrencyBasisSwapWithOptions direction fxBaseNominal fxBaseCurrency fxBaseSchedule fxBaseIndex fxBaseSpread fxBaseGearing fxQuoteNominal fxQuoteCurrency fxQuoteSchedule fxQuoteIndex fxQuoteSpread fxQuoteGearing resetBase defaultMtmCrossCurrencyBasisSwapOpts++-- |Full MTM construction (1.44). Payment lags affect coupons, not principal exchanges.+-- Empty FX fixing calendars use the resetting schedule calendar when the fixing lag is nonzero.+mtmCrossCurrencyBasisSwapWithOptions :: MtmCrossCurrencySwapType -- ^Pay/receive FX base currency; base is leg 0, quote leg 1+  -> Double -- ^FX base nominal+  -> Currency -- ^FX base currency+  -> Schedule -- ^FX base schedule+  -> GenIborIndex ibor1 -- ^FX base IBOR or overnight index+  -> Double -- ^FX base spread+  -> Double -- ^FX base gearing+  -> Double -- ^FX quote nominal+  -> Currency -- ^FX quote currency+  -> Schedule -- ^FX quote schedule+  -> GenIborIndex ibor2 -- ^FX quote IBOR or overnight index+  -> Double -- ^FX quote spread+  -> Double -- ^FX quote gearing+  -> Bool -- ^True resets the FX base leg; False resets the FX quote leg+  -> MtMCrossCurrencyBasisSwapOpts ibor3 ibor4 -- ^Payment, reset, overnight and stub options+  -> IO MtMCrossCurrencyBasisSwap+mtmCrossCurrencyBasisSwapWithOptions direction fxBaseNominal fxBaseCurrency fxBaseSchedule fxBaseIndex fxBaseSpread fxBaseGearing fxQuoteNominal fxQuoteCurrency fxQuoteSchedule fxQuoteIndex fxQuoteSpread fxQuoteGearing resetBase opts =+  mtmCrossCurrencyBasisSwapRaw (case direction of PayFxBaseCurrency -> 0; ReceiveFxBaseCurrency -> 1)+    fxBaseNominal fxBaseCurrency fxBaseSchedule fxBaseIndex fxBaseSpread fxBaseGearing fxQuoteNominal fxQuoteCurrency fxQuoteSchedule fxQuoteIndex fxQuoteSpread fxQuoteGearing resetBase+    (mtmFxResetFixingDays opts) (mtmFxResetFixingCalendar opts)+    (mtmFxBasePaymentLag opts) (mtmFxQuotePaymentLag opts)+    (mtmFxBasePaymentConvention opts) (mtmFxQuotePaymentConvention opts)+    (mtmFxBaseCompoundSpread opts) (lookbackDays baseObs) (applyObservationShift baseObs) (lockoutDays baseObs) (mtmFxBaseAveragingMethod opts)+    (mtmFxQuoteCompoundSpread opts) (lookbackDays quoteObs) (applyObservationShift quoteObs) (lockoutDays quoteObs) (mtmFxQuoteAveragingMethod opts)+    (mtmTelescopicValueDates opts) (mtmUseIndexedCoupons opts)+    (mtmFxBaseStubIndexSelection opts) (mtmFxQuoteStubIndexSelection opts)+  where baseObs = mtmFxBaseObservation opts+        quoteObs = mtmFxQuoteObservation opts++-- |Currency-denominated results shared by cross-currency swaps.+class HasCrossCurrencyResults s where+  -- |Currency of a leg, selected by zero-based index.+  legCurrency :: s -> Word -> IO Currency+  -- |Signed basis-point sensitivity in the leg currency.+  inCcyLegBps :: s -> Word -> IO Double+  -- |Signed NPV in the leg currency.+  inCcyLegNpv :: s -> Word -> IO Double+  -- |Discount factor at the NPV date for the selected currency.+  npvDateDiscounts :: s -> Word -> IO Double++instance HasCrossCurrencyResults (GenConstNotionalCrossCurrencySwap x) where+  legCurrency = constNotionalLegCurrency+  inCcyLegBps = constNotionalInCcyLegBPS+  inCcyLegNpv = constNotionalInCcyLegNPV+  npvDateDiscounts = constNotionalNpvDateDiscounts++instance HasCrossCurrencyResults MtMCrossCurrencyBasisSwap where+  legCurrency = mtmLegCurrency+  inCcyLegBps = mtmInCcyLegBPS+  inCcyLegNpv = mtmInCcyLegNPV+  npvDateDiscounts = mtmNpvDateDiscounts++-- |MTM legCurrency (1.44).+{#fun qlMtMLegCurrency as mtmLegCurrency{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,fromIntegral`Word' -- ^legIndex+  ,preErrorCheck-`String'errorCheck*-}->`Currency'peekCurrency*#}++-- |MTM inCcyLegBPS (1.44).+{#fun qlMtMInCcyLegBPS as mtmInCcyLegBPS{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,fromIntegral`Word' -- ^legIndex+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |MTM inCcyLegNPV (1.44).+{#fun qlMtMInCcyLegNPV as mtmInCcyLegNPV{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,fromIntegral`Word' -- ^legIndex+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |MTM npvDateDiscounts (1.44).+{#fun qlMtMNpvDateDiscounts as mtmNpvDateDiscounts{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,fromIntegral`Word' -- ^legIndex+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Native NPV/BPS par spread (1.44).+-- Compounded overnight spreads can leave a repricing residual.+{#fun qlMtMFairFxBaseSpread as fairFxBaseSpread{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Native NPV/BPS par spread (1.44).+-- Compounded overnight spreads can leave a repricing residual.+{#fun qlMtMFairFxQuoteSpread as fairFxQuoteSpread{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Native NPV/BPS par spread (1.44).+-- Compounded overnight spreads can leave a repricing residual.+{#fun qlMtMFairPaySpread as mtmFairPaySpread{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Native NPV/BPS par spread (1.44).+-- Compounded overnight spreads can leave a repricing residual.+{#fun qlMtMFairRecSpread as mtmFairRecSpread{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Native NPV/BPS par spreads for paid and received legs of basis swaps.+-- Compounded overnight spreads can leave a repricing residual.+class HasFairLegSpreads s where+  -- |Par spread of the paid leg.+  fairPaySpread :: s -> IO Double+  -- |Par spread of the received leg.+  fairRecSpread :: s -> IO Double+instance HasFairLegSpreads ConstNotionalCrossCurrencyBasisSwap where+  fairPaySpread = constNotionalFairPaySpread+  fairRecSpread = constNotionalFairRecSpread+instance HasFairLegSpreads MtMCrossCurrencyBasisSwap where+  fairPaySpread = mtmFairPaySpread+  fairRecSpread = mtmFairRecSpread++-- |Calculated reset rates for non-occurred coupons in leg order (1.44).+{#fun qlMtMFxResetRates as fxResetRates{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^result+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Calculated reset notionals for non-occurred coupons in leg order (1.44).+{#fun qlMtMFxResetNotionals as fxResetNotionals{withMtMCrossCurrencyBasisSwap*`MtMCrossCurrencyBasisSwap' -- ^swap+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^result+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Upstream defaults for MTM cross-currency construction.+defaultMtmCrossCurrencyBasisSwapOpts :: MtMCrossCurrencyBasisSwapOpts ibor3 ibor4+defaultMtmCrossCurrencyBasisSwapOpts = defaultMtMCrossCurrencyBasisSwapOpts  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
QuantLib/InterestRate.chs view
@@ -13,6 +13,8 @@     -- * Inspectors   , compoundFactor   , discountFactor+  , discountFactorSecondDerivative+  , discountFactorFirstDerivative   , equivalentRate   , impliedRate   , rate@@ -104,24 +106,32 @@ {#fun pure qlInterestRateRate as rate{withInterestRate*`InterestRate'}->`Double'#}  -- |Compound (capitalization) factor implied by the rate over the given period.+-- Both supported QuantLib versions reject 'SimpleThenCompounded' and 'CompoundedThenSimple';+-- use "QuantLib.CashFlow" calculations for these conventions. compoundFactor :: InterestRate -> AccrualPeriod -> IO Double compoundFactor ir period = case period of   AccrualAtTime t -> compoundFactorAtTimeRaw ir t   AccrualBetween d1 d2 rs re -> compoundFactorBetweenRaw ir d1 d2 rs re  -- |Discount factor implied by the rate over the given period.+-- Both supported QuantLib versions reject 'SimpleThenCompounded' and 'CompoundedThenSimple';+-- use "QuantLib.CashFlow" calculations for these conventions. discountFactor :: InterestRate -> AccrualPeriod -> IO Double discountFactor ir period = case period of   AccrualAtTime t -> discountFactorAtTimeRaw ir t   AccrualBetween d1 d2 rs re -> discountFactorBetweenRaw ir d1 d2 rs re  -- |Equivalent rate under a different compounding and frequency over the given period.+-- Both supported QuantLib versions reject mixed source compounding and non-unit factors with+-- mixed result compounding; use "QuantLib.CashFlow" for these conventions. equivalentRate :: InterestRate -> Compounding -> Frequency -> EquivalentPeriod -> IO InterestRate equivalentRate ir comp freq period = case period of   EquivalentAtTime t -> equivalentRateAtTimeRaw ir comp freq t   EquivalentBetween dc d1 d2 rs re -> equivalentRateBetweenRaw ir dc comp freq d1 d2 rs re  -- |Rate implied by a given compound factor over the given period, in the supplied day counter.+-- Both supported QuantLib versions reject mixed result compounding for non-unit compound factors;+-- use "QuantLib.CashFlow" calculations for 'SimpleThenCompounded' and 'CompoundedThenSimple'. impliedRate :: InterestRate -> Double -> DayCounter -> Compounding -> Frequency -> AccrualPeriod   -> IO InterestRate impliedRate ir compound dc comp freq period = case period of@@ -129,3 +139,15 @@   AccrualBetween d1 d2 rs re -> impliedRateBetweenRaw ir compound dc comp freq d1 d2 rs re  -- vim: set ff=unix ts=8 sts=2 sw=2 et:++-- |First derivative of the discount factor with respect to the rate at year fraction @t@.+-- Requires QuantLib 1.44.+{#fun qlInterestRateDiscountFactorFirstDerivative as discountFactorFirstDerivative{withInterestRate*`InterestRate' -- ^rate+  ,`Double' -- ^t+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Second derivative of the discount factor with respect to the rate at year fraction @t@.+-- Requires QuantLib 1.44.+{#fun qlInterestRateDiscountFactorSecondDerivative as discountFactorSecondDerivative{withInterestRate*`InterestRate' -- ^rate+  ,`Double' -- ^t+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}
QuantLib/Internal.hs view
@@ -17,8 +17,16 @@   , peekEnum   , peekDouble   , preEnum+  , withComplex+  , preComplex+  , peekComplex   , preNum   , preArray+  , preArrayWith+  , preIntArray+  , preDoubleArray+  , preCStringArray+  , prePtrArray   , withEnumArray   , withIntArray   , withBoolArray@@ -83,17 +91,19 @@   ) where +import Data.Complex(Complex((:+))) import Foreign.C.Types(CUInt(..), CInt(..), CDouble(..)) import Foreign.C.String(CString, peekCString, withCString) import Foreign.Ptr(Ptr, nullPtr, castPtr) import Foreign.ForeignPtr(FinalizerPtr, newForeignPtr, newForeignPtr_, castForeignPtr) import Foreign.Marshal.Array(peekArray, withArray) import Foreign.Marshal.Utils(with, toBool, fromBool, withMany)-import Foreign.Storable(peek, Storable)+import Foreign.Storable(peek, poke, peekElemOff, pokeElemOff, Storable) import Foreign.Marshal.Alloc(alloca) -import Control.Exception(Exception, throwIO)-import Control.Monad(when)+import Control.Exception(Exception, SomeException, throwIO, mask, mask_, finally, onException, catch)+import Foreign.StablePtr(StablePtr, castStablePtrToPtr, deRefStablePtr, freeStablePtr)+import Control.Monad(when, (>=>)) import Data.Time.Calendar(Day(ModifiedJulianDay), toModifiedJulianDay, fromGregorian) import Data.List.NonEmpty(NonEmpty, toList) @@ -101,22 +111,51 @@ import qualified Data.Vector.Storable as V  data Error = CPlusPlusException String+             -- |Call name, minimum required version, and linked QuantLib version.+           | UnsupportedQuantLibVersion String String String            | DateConversion Day            | EnumConversion String+             -- |A Haskell callback returned an array of the wrong length: expected, then returned.+           | CallbackResultLength Int Int            deriving (Show, Eq)  instance Exception Error -errorCheck :: Ptr CString -> IO ()-errorCheck p = do-  a <- peek p-  when-    (a /= nullPtr)-    ((peekCString a <* qlFreeString a) >>= throwIO . CPlusPlusException)+foreign import ccall safe "ql.h qlErrorMessage" qlErrorMessage :: Ptr () -> IO CString+foreign import ccall safe "ql.h qlErrorCall" qlErrorCall :: Ptr () -> IO CString+foreign import ccall safe "ql.h qlErrorRequiredVersion" qlErrorRequiredVersion :: Ptr () -> IO CString+foreign import ccall safe "ql.h qlErrorLinkedVersion" qlErrorLinkedVersion :: Ptr () -> IO CString+foreign import ccall safe "ql.h qlTakeErrorException" qlTakeErrorException :: Ptr () -> IO (StablePtr SomeException)+foreign import ccall safe "ql.h qlFreeError" qlFreeError :: Ptr () -> IO () --- like alloca but initializes the allocated pointer with zero+errorCheck :: Ptr (Ptr a) -> IO ()+errorCheck p = mask_ $ do+  errorPtr <- peek p+  when (errorPtr /= nullPtr) $ do+    poke p nullPtr+    let owned = castPtr errorPtr+    flip finally (qlFreeError owned) $ do+      saved <- qlTakeErrorException owned+      if castStablePtrToPtr saved == nullPtr+        then do+          call <- qlErrorCall owned >>= peekCString+          if null call+            then qlErrorMessage owned >>= peekCString >>= throwIO . CPlusPlusException+            else do+              required <- qlErrorRequiredVersion owned >>= peekCString+              linked <- qlErrorLinkedVersion owned >>= peekCString+              throwIO $ UnsupportedQuantLibVersion call required linked+        else (deRefStablePtr saved `finally` freeStablePtr saved) >>= throwIO++-- Keep the native error, including an unconsumed callback exception, scoped to adoption. preErrorCheck :: (Ptr (Ptr a) -> IO b) -> IO b-preErrorCheck = with nullPtr+preErrorCheck f = mask_ $ with nullPtr $ \p ->+  (do+    result <- f p `catch` \ex -> errorCheck p >> throwIO (ex :: SomeException)+    errorCheck p+    pure result) `finally` (do+      pending <- peek p+      when (pending /= nullPtr) (qlFreeError (castPtr pending)))  fromMaybeBool :: Maybe Bool -> CInt fromMaybeBool = maybe (-1) fromBool@@ -145,7 +184,9 @@ toMaybeBool x = if x == -1 then Nothing else Just $ toBool x  peekDynString :: CString -> IO String-peekDynString x = peekCString x <* qlFreeString x+peekDynString x+  | x == nullPtr = pure "" -- The following errorCheck reports a failed C++ call.+  | otherwise = peekCString x `finally` qlFreeString x  peekEnum :: (Enum a) => Ptr CInt -> IO a peekEnum x = toEnum . fromIntegral <$> peek x@@ -254,32 +295,50 @@   \x -> with nullPtr $     \y -> f (x, y) -peekIntArray' :: (CInt -> b) -> Ptr CUInt -> Ptr (Ptr CInt) -> IO [b]-peekIntArray' f pl pp = do-  l <- peek pl+-- Protect every output from the FFI return, including arrays not yet converted by c2hs.+preArrayWith :: (CUInt -> Ptr a -> IO ()) -> ((Ptr CUInt, Ptr (Ptr a)) -> IO b) -> IO b+preArrayWith freeFn f = mask_ $ preArray $ \slots@(pl, pp) ->+  f slots `finally` (do n <- peek pl; p <- peek pp; when (p /= nullPtr) (freeFn n p))++preIntArray :: ((Ptr CUInt, Ptr (Ptr CInt)) -> IO b) -> IO b+preIntArray = preArrayWith (const qlFreeInts)++preDoubleArray :: ((Ptr CUInt, Ptr (Ptr CDouble)) -> IO b) -> IO b+preDoubleArray = preArrayWith (const qlFreeDoubles)++preCStringArray :: ((Ptr CUInt, Ptr (Ptr CString)) -> IO b) -> IO b+preCStringArray = preArrayWith qlFreeStringArray++freePtrArray :: (Ptr a -> IO ()) -> CUInt -> Ptr (Ptr a) -> IO ()+freePtrArray freeOne n p = do+  mapM_ (peekElemOff p >=> \x -> when (x /= nullPtr) (freeOne x)) [0 .. fromIntegral n - 1]+  qlFreePointerArray (castPtr p)++prePtrArray :: (Ptr a -> IO ()) -> ((Ptr CUInt, Ptr (Ptr (Ptr a))) -> IO b) -> IO b+prePtrArray = preArrayWith . freePtrArray++-- Clear the slot while masked before taking responsibility for releasing its allocation.+consumeArray :: (CUInt -> Ptr a -> IO ()) -> Ptr CUInt -> Ptr (Ptr a) -> (CUInt -> Ptr a -> IO b) -> IO b+consumeArray freeFn pl pp convert = mask $ \restore -> do+  n <- peek pl   p <- peek pp-  map f <$> peekArray (fromIntegral l) p <* qlFreeInts p+  poke pp nullPtr+  restore (convert n p) `finally` freeFn n p +peekIntArray' :: (CInt -> b) -> Ptr CUInt -> Ptr (Ptr CInt) -> IO [b]+peekIntArray' f pl pp = consumeArray (const qlFreeInts) pl pp $ \n p ->+  map f <$> peekArray (fromIntegral n) p+ peekUIntArray :: Ptr CUInt -> Ptr (Ptr CUInt) -> IO [Word]-peekUIntArray pl pp = do-  l <- peek pl-  p <- peek pp-  map fromIntegral <$> peekArray (fromIntegral l) p <* qlFreeUInts p+peekUIntArray pl pp = consumeArray (const qlFreeUInts) pl pp $ \n p ->+  map fromIntegral <$> peekArray (fromIntegral n) p  peekIntArray :: Ptr CUInt -> Ptr (Ptr CInt) -> IO [Int] peekIntArray = peekIntArray' fromIntegral --- |An array of freshly heap-allocated (@DUP@'d) C strings -- the output-side counterpart of--- 'withStringArray'. Each element is read via 'peekCString' and the whole array (including every--- individual string) is then released via 'qlFreeStringArray' in one call, mirroring--- 'peekDoubleArray'\/'peekIntArray'\''s read-then-free shape. peekCStringArray :: Ptr CUInt -> Ptr (Ptr CString) -> IO [String]-peekCStringArray pl pp = do-  l <- peek pl-  p <- peek pp-  raws <- peekArray (fromIntegral l) p-  strs <- mapM peekCString raws-  strs <$ qlFreeStringArray l p+peekCStringArray pl pp = consumeArray qlFreeStringArray pl pp $ \n p ->+  peekArray (fromIntegral n) p >>= mapM peekCString  peekBoolArray :: Ptr CUInt -> Ptr (Ptr CInt) -> IO [Bool] peekBoolArray = peekIntArray' toBool@@ -288,57 +347,38 @@ peekDayArray = peekIntArray' fromSerial  peekDoubleArray :: Ptr CUInt -> Ptr (Ptr CDouble) -> IO [Double]-peekDoubleArray pl pp = do-  l <- peek pl-  p <- peek pp-  map realToFrac <$> peekArray (fromIntegral l) p <* qlFreeDoubles p+peekDoubleArray pl pp = consumeArray (const qlFreeDoubles) pl pp $ \n p ->+  map realToFrac <$> peekArray (fromIntegral n) p  -- |Takes ownership of a C++-allocated @double[]@ result without copying it.--- The vector's finalizer is the same @qlFreeDoubles@ path used by--- 'peekDoubleArray'. peekRealVector :: Ptr CUInt -> Ptr (Ptr CDouble) -> IO RealVector-peekRealVector pl pp = do+peekRealVector pl pp = mask_ $ do   n <- fromIntegral <$> peek pl   p <- peek pp-  fp <- castForeignPtr <$> newForeignPtr qlFreeDoublesFin p-  pure (unsafeFromForeignPtr0 fp n)+  poke pp nullPtr+  fp <- newForeignPtr qlFreeDoublesFin p `onException` qlFreeDoubles p+  pure (unsafeFromForeignPtr0 (castForeignPtr fp) n) --- |A non-owning vector view valid only for the continuation that receives the--- C++ callback buffer.  It deliberately has no finalizer.+-- |A non-owning vector view valid only during the C++ callback. borrowRealVector :: Ptr CDouble -> CUInt -> IO RealVector borrowRealVector p n = do   fp <- castForeignPtr <$> newForeignPtr_ p   pure (unsafeFromForeignPtr0 fp (fromIntegral n)) --- |Like 'peekIntArray'\''/'peekDoubleArray', but for an array of a C struct rather than a C--- primitive: reads the length and pointer out-params, walks the array via 'peekArray' (so the--- element type just needs a 'Storable' instance -- e.g. one built from c2hs @{#get#}@/@{#sizeof#}@--- hooks), converts every element via @convert@, /then/ hands the whole array to @freeFn@ to--- release. The conversion must run before the free -- unlike 'peekIntArray'\''/'peekDoubleArray',--- whose elements are self-contained primitives, a struct element read here may itself own--- further heap buffers (e.g. a @char*@/@double*@ field) that @convert@ still needs to dereference--- (via 'peekCString'/'peekArray' etc.); freeing first would leave it reading already-freed--- memory. @freeFn@ takes the element count because some frees need it (e.g.--- 'qlFreeAdditionalResults'); one that doesn't can ignore it.+-- |Convert before freeing: struct fields may borrow buffers owned by the aggregate. peekStructArray :: Storable a => (a -> IO b) -> (CUInt -> Ptr a -> IO ()) -> Ptr CUInt -> Ptr (Ptr a) -> IO [b]-peekStructArray convert freeFn pl pp = do-  l <- peek pl-  p <- peek pp-  raws <- peekArray (fromIntegral l) p-  results <- mapM convert raws-  results <$ freeFn l p+peekStructArray convert freeFn pl pp = consumeArray freeFn pl pp $ \n p ->+  peekArray (fromIntegral n) p >>= mapM convert --- |Like 'peekStructArray' but for a @T**@ array of C++-owned pointers to live objects: peeks the--- length/pointer out-params, converts each raw pointer to a live Haskell value via @peekOne@--- (installing that value's own finalizer over the pointee), then frees only the array spine via--- 'qlFreePointerArray' -- not the pointees, whose lifetime @peekOne@ has now taken over.-peekPtrArray :: (Ptr a -> IO b) -> Ptr CUInt -> Ptr (Ptr (Ptr a)) -> IO [b]-peekPtrArray peekOne pl pp = do-  l <- peek pl-  p <- peek pp-  ptrs <- peekArray (fromIntegral l) p-  xs <- mapM peekOne ptrs-  xs <$ qlFreePointerArray (castPtr p)+-- |The converter owns an element only on success; cleared slots mark completed handoffs.+peekPtrArray :: (Ptr a -> IO ()) -> (Ptr a -> IO b) -> Ptr CUInt -> Ptr (Ptr (Ptr a)) -> IO [b]+peekPtrArray freeOne peekOne pl pp = mask_ $+  consumeArray (freePtrArray freeOne) pl pp $ \n p ->+    mapM (\i -> do+      raw <- peekElemOff p i+      x <- peekOne raw+      pokeElemOff p i nullPtr+      pure x) [0 .. fromIntegral n - 1]  fromEnumQuantity :: (Enum a, Integral b, Integral c) => (b, a) -> (CInt, c) fromEnumQuantity (x, u) = (fromIntegral x, fromIntegral $ fromEnum u)@@ -473,3 +513,11 @@ zipWith6 _ _ _ _ _ _ _ = []  -- vim: set ff=unix ts=8 sts=2 sw=2 et:++-- Scalar components keep the FFI independent of C++ complex layout.+withComplex :: Complex Double -> (CDouble, CDouble)+withComplex (r :+ i) = (realToFrac r, realToFrac i)+preComplex :: ((Ptr CDouble, Ptr CDouble) -> IO a) -> IO a+preComplex f = alloca $ \r -> alloca $ \i -> f (r, i)+peekComplex :: Ptr CDouble -> Ptr CDouble -> IO (Complex Double)+peekComplex r i = (:+) . realToFrac <$> peek r <*> (realToFrac <$> peek i)
QuantLib/Internal/CalendarEnum.chs view
@@ -21,6 +21,7 @@ import QuantLib.Time.Date(Weekday)  {#enum JointCalendarRule{} deriving(Show, Eq, Read)#}+-- Keep both supported versions' constructors in the public enum; factories check availability. {#enum CalendarCountry{} add prefix = "Country__" deriving(Show, Eq, Read)#} {#enum AustriaMarket{} add prefix = "Austria__" deriving(Show, Eq, Read)#} {#enum BrazilMarket{} add prefix = "Brazil__" deriving(Show, Eq, Read)#}
+ QuantLib/Internal/Callback.chs view
@@ -0,0 +1,73 @@+module QuantLib.Internal.Callback+  ( Callback, CallbackArgs(..), withCallback, withCallbackPtr, withScalarCallback ) where++import Control.Exception (SomeException, catch, mask, onException)+import Foreign.C.Types (CDouble)+import Foreign.Ptr (Ptr, FunPtr, nullPtr, freeHaskellFunPtr)+import Foreign.ForeignPtr (ForeignPtr, FinalizerPtr, newForeignPtr, withForeignPtr)+import Foreign.StablePtr (StablePtr, newStablePtr, castStablePtrToPtr)+import Foreign.Storable (poke)+import QuantLib.Internal (preErrorCheck, errorCheck)++#include "qlTypesC2HS.h"+#include "qlCallback.h"++newtype Callback = Callback (ForeignPtr ())+type CallbackFun = Ptr () -> IO (Ptr ())+data CallbackArgs = CallbackArgs+  { callbackInput :: Ptr CDouble+  , callbackOutput :: Ptr CDouble+  , callbackSize :: Int+  , callbackInput2 :: Ptr CDouble+  , callbackSize2 :: Int+  , callbackOutputSize :: Int+  , callbackDirection :: Int+  , callbackScalar :: Double+  , callbackTime1 :: Double+  , callbackTime2 :: Double+  }++foreign import ccall "wrapper" wrapCallback :: CallbackFun -> IO (FunPtr CallbackFun)+foreign import ccall "&hs_free_fun_ptr" releaseFun :: FunPtr (FunPtr CallbackFun -> IO ())+foreign import ccall "&hs_free_stable_ptr" releaseStable :: FunPtr (StablePtr SomeException -> IO ())+foreign import ccall safe "ql.h qlNewCallback" newCallback+  :: FunPtr CallbackFun -> FunPtr (FunPtr CallbackFun -> IO ())+  -> FunPtr (StablePtr SomeException -> IO ()) -> Ptr (Ptr ()) -> IO (Ptr ())+foreign import ccall safe "ql.h qlFreeCallback" freeCallback :: Ptr () -> IO ()++foreign import ccall "&qlFreeCallback" callbackFinalizer :: FinalizerPtr ()++withCallbackPtr :: Callback -> (Ptr () -> IO a) -> IO a+withCallbackPtr (Callback p) = withForeignPtr p++peekArgs :: Ptr () -> IO CallbackArgs+peekArgs p = CallbackArgs+  <$> {#get QlCallbackArgs->input#} p+  <*> {#get QlCallbackArgs->output#} p+  <*> (fromIntegral <$> {#get QlCallbackArgs->size#} p)+  <*> {#get QlCallbackArgs->input2#} p+  <*> (fromIntegral <$> {#get QlCallbackArgs->size2#} p)+  <*> (fromIntegral <$> {#get QlCallbackArgs->outputSize#} p)+  <*> (fromIntegral <$> {#get QlCallbackArgs->direction#} p)+  <*> (realToFrac <$> {#get QlCallbackArgs->s#} p)+  <*> (realToFrac <$> {#get QlCallbackArgs->t1#} p)+  <*> (realToFrac <$> {#get QlCallbackArgs->t2#} p)++withCallback :: (CallbackArgs -> IO ()) -> (Callback -> IO a) -> IO a+withCallback action use = mask $ \restore -> do+  fp <- wrapCallback call+  owner <- (preErrorCheck $ \errorPtr -> do+    result <- newCallback fp releaseFun releaseStable errorPtr+    errorCheck errorPtr+    pure result) `onException` freeHaskellFunPtr fp+  managed <- newForeignPtr callbackFinalizer owner `onException` freeCallback owner+  restore (use (Callback managed))+  where+    call p = mask $ \restore ->+      (restore (peekArgs p >>= action) >> pure nullPtr) `catch` saveException+    saveException :: SomeException -> IO (Ptr ())+    saveException = fmap castStablePtrToPtr . newStablePtr++withScalarCallback :: (CallbackArgs -> IO Double) -> (Callback -> IO a) -> IO a+withScalarCallback action = withCallback $ \args ->+  action args >>= poke (callbackOutput args) . realToFrac
QuantLib/Internal/Common.chs view
@@ -1,4 +1,4 @@-{-# LANGUAGE TemplateHaskell, StandaloneDeriving #-}+{-# LANGUAGE TemplateHaskell, StandaloneDeriving, ExistentialQuantification #-} -- internal utilities to convert special enums: either complex ones or represented as QuantLib objects that I didn't want to expose so I represented them as ADTs {-# OPTIONS_GHC -Wno-unused-top-binds #-} module QuantLib.Internal.Common@@ -57,6 +57,8 @@    , CPIInterpolationType(..) +  , StubIndexSelection(..)+  , withStubIndexSelection   , OvernightObservation(..)   , defaultOvernightObservation @@ -125,15 +127,15 @@   , RawResultPtr   , RawResult(..)   , convertResult+  , preAdditionalResults   , peekAdditionalResults   ) where-import Foreign.Ptr(Ptr, FunPtr, nullPtr, castPtr)+import Foreign.Ptr(Ptr, nullPtr, castPtr) import Foreign.C.Types(CUInt, CInt, CDouble) import Foreign.C.String(CString, peekCString) import Foreign.Storable(Storable(..)) import Foreign.Marshal.Utils(withMany) import Foreign.Marshal.Array(withArray, peekArray)-import Control.Exception(finally) import Data.List.NonEmpty(NonEmpty, toList)  import QuantLib.Internal@@ -200,21 +202,11 @@ {#enum PricingErrorLevel{} deriving (Show, Eq, Read, Bounded)#} peekPricingErrorLevelArray :: Ptr CUInt -> Ptr (Ptr CInt) -> IO [PricingErrorLevel] peekPricingErrorLevelArray = peekIntArray' toEnumC--- Confirmed clash (a real one, caught by the build, not assumed): 4 of DeliverySchedule's 8 tags--- (Daily/Weekly/Monthly/Quarterly) collide with QuantLib.Time.Schedule's own Frequency enum, whose--- module this file is imported into unqualified. Prefixed Haskell-side only (c2hs's own "add--- prefix", not a cbits/qlEnumC2HS.h rename) -- same targeted-rename convention as--- UnitOfMeasureType's Quantity->QuantityUnit above, not a blanket defensive prefix.+-- Prefix these tags to avoid clashes with QuantLib.Time.Schedule's Frequency constructors. {#enum DeliverySchedule{} add prefix = "Delivery" deriving (Show, Eq, Read, Bounded)#} {#enum QuantityPeriodicity{} deriving (Show, Eq, Read, Bounded)#}--- flat/linear interpolation of a CPI index between its publication dates -- skips the--- deprecated AsIndex upstream case, so cbits/qlEnumObjects.h's values (and thus this--- c2hs-derived enum's fromEnum) start at 1, not 0; see that header's comment for why a--- renumbered-from-0 enum here would silently alias to the wrong upstream case. Declared here--- (not in QuantLib.TermStructure.Inflation, its "natural" home) for the same reason as--- TimeUnit above: needed by several modules whose build order can't all safely {#import#} that--- module (built before it, or -- for QuantLib.TermStructure.Yield -- mutually dependent with--- it already).+-- CPI interpolation skips upstream's deprecated AsIndex value, so the enum starts at 1.+-- Shared users import it from here to avoid a module cycle. {#enum CPIInterpolationType{} deriving (Show, Eq, Read, Bounded)#} {#enum CalibrationBasketType{} deriving (Show, Eq, Read, Bounded)#} @@ -280,7 +272,12 @@ {#pointer *QlLmCorrelationModel foreign -> CLmCorrelationModel nocode#} {#pointer *QlLmVolatilityModel foreign -> CLmVolatilityModel nocode#} {#pointer *Rounding as QlRounding foreign -> CRounding nocode#}+{#pointer *QlAdditionalResult as RawResultPtr nocode#} +-- |Discriminants for `QlAdditionalResult.type`, bound from `enum AdditionalResultType` in+-- `cbits/qlInstrument.h` (read from the header, not hardcoded).+{#enum AdditionalResultType {} deriving (Show, Eq, Read) #}+ -- monotonic flag for CubicInterpolation::Spline/::Parabolic -- tells deriveCrossEnum to give -- these two values a runtime Bool field instead of cross-producting named sub-values (same -- pattern as Actual360Convention etc. in CalendarEnum.chs). Order matters here in a way it@@ -369,6 +366,24 @@         !Calendar -- ^rebatePaymentCalendar         !BusinessDayConvention -- ^rebatePaymentConvention +-- |Candidate indices for broken IBOR periods, selected by nearest maturity or interpolated+-- between bracketing maturities in calendar days. Candidates keep their own curves and histories.+-- Their currency, fixing days/calendar and day counter must match; enable indexed coupons+-- when supplying a selection. Requires QuantLib 1.44.+data StubIndexSelection ibor+  = ClosestStubIndex !(NonEmpty (GenIborIndex ibor))+  | InterpolatedStubIndexes !(NonEmpty (GenIborIndex ibor))++type StubSelectionPtr = Ptr CStubIndexSelection'+{#pointer *QlStubIndexSelection nocode#}+{#pointer *QlIborIndex as IborIndex foreign -> CIborIndex' nocode#}++withStubIndexSelection :: Maybe (StubIndexSelection ibor) -> (Ptr CStubIndexSelection' -> IO r) -> IO r+withStubIndexSelection Nothing f = f nullPtr+withStubIndexSelection (Just selection) f = case selection of+  ClosestStubIndex indices -> withConstructed (stubIndexSelectionRaw 0 (toList indices)) f+  InterpolatedStubIndexes indices -> withConstructed (stubIndexSelectionRaw 1 (toList indices)) f+ {#fun qlExercise{`ExerciseType',preErrorCheck-`String'errorCheck*-}->`QlExercise'peekPtr*#} {#fun qlAmericanExercise{withDay*`Day',withDay*`Day',`Bool',preErrorCheck-`String'errorCheck*-}->`QlAmericanExercise'peekPtr*#} {#fun qlAmericanExercise1{withDay*`Day',`Bool',preErrorCheck-`String'errorCheck*-}->`QlAmericanExercise'peekPtr*#}@@ -380,24 +395,24 @@ {#fun qlRebatedExercise{`QlExercise',`Double',fromIntegral`Word',withCalendar*`Calendar',fromEnumC`BusinessDayConvention',preErrorCheck-`String'errorCheck*-}->`QlRebatedExercise'peekPtr*#}  withEuropeanExercise :: EuropeanExercise -> (QlEuropeanExercise -> IO a) -> IO a-withEuropeanExercise (EuropeanExercise d) f = qlEuropeanExercise d >>= newCastForeignPtr >>= flip withGenForeignPtr f+withEuropeanExercise (EuropeanExercise d) f = withConstructed (qlEuropeanExercise d) f  withSwingExercise :: SwingExercise -> (QlSwingExercise -> IO a) -> IO a-withSwingExercise (SwingListExercise ds) f = uncurry qlSwingExercise (unzip (toList ds)) >>= newCastForeignPtr >>= flip withGenForeignPtr f-withSwingExercise (SwingIntervalExercise d1 d2 s) f = qlSwingExercise1 d1 d2 s >>= newCastForeignPtr >>= flip withGenForeignPtr f+withSwingExercise (SwingListExercise ds) f = withConstructed (uncurry qlSwingExercise (unzip (toList ds))) f+withSwingExercise (SwingIntervalExercise d1 d2 s) f = withConstructed (qlSwingExercise1 d1 d2 s) f  withBermudanExercise :: BermudanExercise -> (QlBermudanExercise -> IO a) -> IO a-withBermudanExercise (BermudanExercise d p) f = qlBermudanExercise (toList d) p >>= newCastForeignPtr >>= flip withGenForeignPtr f-withBermudanExercise (Swing e) f = withSwingExercise e (\sp -> upcast sp >>= \bp -> f bp `finally` freeUpcast bp)+withBermudanExercise (BermudanExercise d p) f = withConstructed (qlBermudanExercise (toList d) p) f+withBermudanExercise (Swing e) f = withSwingExercise e (\sp -> withUpcast sp f)  withExercise :: Exercise -> (QlExercise -> IO a) -> IO a-withExercise (American Nothing d p) f = qlAmericanExercise1 d p >>= newGenForeignPtr >>= flip withGenForeignPtr f-withExercise (American (Just d0) d p) f = qlAmericanExercise d0 d p >>= newGenForeignPtr >>= flip withGenForeignPtr f-withExercise (Early t p) f = qlEarlyExercise t p >>= newCastForeignPtr >>= flip withGenForeignPtr f-withExercise (Vanilla t) f = qlExercise t >>= newCastForeignPtr >>= flip withGenForeignPtr f-withExercise (European e) f = withEuropeanExercise e (\ep -> upcast ep >>= \xp -> f xp `finally` freeUpcast xp)-withExercise (Bermudan e) f = withBermudanExercise e (\bp -> upcast bp >>= \xp -> f xp `finally` freeUpcast xp)-withExercise (Rebated e rebate days cal bdc) f = withExercise e (\ep -> qlRebatedExercise ep rebate days cal bdc >>= newGenForeignPtr >>= flip withGenForeignPtr f)+withExercise (American Nothing d p) f = withConstructedUpcast (qlAmericanExercise1 d p) f+withExercise (American (Just d0) d p) f = withConstructedUpcast (qlAmericanExercise d0 d p) f+withExercise (Early t p) f = withConstructed (qlEarlyExercise t p) f+withExercise (Vanilla t) f = withConstructed (qlExercise t) f+withExercise (European e) f = withEuropeanExercise e (\ep -> withUpcast ep f)+withExercise (Bermudan e) f = withBermudanExercise e (\bp -> withUpcast bp f)+withExercise (Rebated e rebate days cal bdc) f = withExercise e (\ep -> withConstructedUpcast (qlRebatedExercise ep rebate days cal bdc) f)  -- | use 'percentageStrikePayoff' to construct 'Payoff' data PercentageStrikePayoff = PercentageStrikePayoff@@ -437,23 +452,23 @@       !OptionType -- ^type       !Double -- ^strike       !String -- ^name-      !(FunPtr PayoffFun)+      !Callback  withPercentageStrikePayoff :: PercentageStrikePayoff -> (QlPercentageStrikePayoff -> IO a) -> IO a-withPercentageStrikePayoff (PercentageStrikePayoff t m) f = qlPercentageStrikePayoff t m >>= newCastForeignPtr >>= flip withGenForeignPtr f+withPercentageStrikePayoff (PercentageStrikePayoff t m) f = withConstructed (qlPercentageStrikePayoff t m) f  withPlainVanillaPayoff :: PlainVanillaPayoff -> (QlPlainVanillaPayoff -> IO a) -> IO a-withPlainVanillaPayoff (PlainVanillaPayoff t s) f = qlPlainVanillaPayoff t s >>= newCastForeignPtr >>= flip withGenForeignPtr f+withPlainVanillaPayoff (PlainVanillaPayoff t s) f = withConstructed (qlPlainVanillaPayoff t s) f  withStrikedPayoff :: StrikedPayoff -> (QlStrikedTypePayoff -> IO a) -> IO a-withStrikedPayoff (AssetOrNothing t s) f = qlAssetOrNothingPayoff t s >>= newCastForeignPtr >>= flip withGenForeignPtr f-withStrikedPayoff (CashOrNothing t s c) f = qlCashOrNothingPayoff t s c >>= newCastForeignPtr >>= flip withGenForeignPtr f-withStrikedPayoff (Gap t s ss) f = qlGapPayoff t s ss >>= newCastForeignPtr >>= flip withGenForeignPtr f-withStrikedPayoff (PercentageStrike p) f = withPercentageStrikePayoff p (\pp -> upcast pp >>= \sp -> f sp `finally` freeUpcast sp)-withStrikedPayoff (PlainVanilla p) f = withPlainVanillaPayoff p (\pp -> upcast pp >>= \sp -> f sp `finally` freeUpcast sp)-withStrikedPayoff (SuperFund s ss) f = qlSuperFundPayoff s ss >>= newCastForeignPtr >>= flip withGenForeignPtr f-withStrikedPayoff (SuperSharePayoff s ss c) f = qlSuperSharePayoff s ss c >>= newCastForeignPtr >>= flip withGenForeignPtr f-withStrikedPayoff (CustomStriked t k n fp) f = qlStrikedPayoffFromFunction t k n fp >>= newCastForeignPtr >>= flip withGenForeignPtr f+withStrikedPayoff (AssetOrNothing t s) f = withConstructed (qlAssetOrNothingPayoff t s) f+withStrikedPayoff (CashOrNothing t s c) f = withConstructed (qlCashOrNothingPayoff t s c) f+withStrikedPayoff (Gap t s ss) f = withConstructed (qlGapPayoff t s ss) f+withStrikedPayoff (PercentageStrike p) f = withPercentageStrikePayoff p (\pp -> withUpcast pp f)+withStrikedPayoff (PlainVanilla p) f = withPlainVanillaPayoff p (\pp -> withUpcast pp f)+withStrikedPayoff (SuperFund s ss) f = withConstructed (qlSuperFundPayoff s ss) f+withStrikedPayoff (SuperSharePayoff s ss c) f = withConstructed (qlSuperSharePayoff s ss c) f+withStrikedPayoff (CustomStriked t k n fp) f = withConstructed (qlStrikedPayoffFromFunction t k n fp) f  data TypePayoff = Striked !StrikedPayoff   | Floating !OptionType -- ^type@@ -474,19 +489,19 @@   -- 'Payoff' exactly as 'Max'\/'Min'\/'Spread' are. Build it with 'withCustomBasketPayoff'.   | CustomAccumulate       !Payoff -- ^base payoff, applied to the accumulated value-      !(FunPtr BasketAccumulateFun)+      !Callback  withTypePayoff :: TypePayoff -> (QlTypePayoff -> IO a) -> IO a-withTypePayoff (Floating t) f = qlFloatingTypePayoff t >>= newCastForeignPtr >>= flip withGenForeignPtr f-withTypePayoff (Striked s) f = withStrikedPayoff s (\sp -> upcast sp >>= \tp -> f tp `finally` freeUpcast tp)+withTypePayoff (Floating t) f = withConstructed (qlFloatingTypePayoff t) f+withTypePayoff (Striked s) f = withStrikedPayoff s (\sp -> withUpcast sp f)  withBasketPayoff :: BasketPayoff -> (QlBasketPayoff -> IO a) -> IO a-withBasketPayoff (Average p n) f = withPayoff p (\pp -> qlAverageBasketPayoff pp n >>= newCastForeignPtr >>= flip withGenForeignPtr f)-withBasketPayoff (AverageMultiple p a) f = withPayoff p (\pp -> qlAverageBasketPayoff1 pp a >>= newCastForeignPtr >>= flip withGenForeignPtr f)-withBasketPayoff (Max p) f = withPayoff p (\pp -> qlMaxBasketPayoff pp >>= newCastForeignPtr >>= flip withGenForeignPtr f)-withBasketPayoff (Min p) f = withPayoff p (\pp -> qlMinBasketPayoff pp >>= newCastForeignPtr >>= flip withGenForeignPtr f)-withBasketPayoff (Spread p) f = withPayoff p (\pp -> qlSpreadBasketPayoff pp >>= newCastForeignPtr >>= flip withGenForeignPtr f)-withBasketPayoff (CustomAccumulate p fp) f = withPayoff p (\pp -> qlBasketPayoffFromFunction pp fp >>= newCastForeignPtr >>= flip withGenForeignPtr f)+withBasketPayoff (Average p n) f = withPayoff p (\pp -> withConstructed (qlAverageBasketPayoff pp n) f)+withBasketPayoff (AverageMultiple p a) f = withPayoff p (\pp -> withConstructed (qlAverageBasketPayoff1 pp a) f)+withBasketPayoff (Max p) f = withPayoff p (\pp -> withConstructed (qlMaxBasketPayoff pp) f)+withBasketPayoff (Min p) f = withPayoff p (\pp -> withConstructed (qlMinBasketPayoff pp) f)+withBasketPayoff (Spread p) f = withPayoff p (\pp -> withConstructed (qlSpreadBasketPayoff pp) f)+withBasketPayoff (CustomAccumulate p fp) f = withPayoff p (\pp -> withConstructed (qlBasketPayoffFromFunction pp fp) f)  -- | > Payoff -- >  DoubleStickyRatchet@@ -587,13 +602,11 @@       !Double -- ^accrualFactor   | Type !TypePayoff   | Basket !BasketPayoff-  -- |A Haskell-defined payoff. Build it with 'withCustomPayoff' rather than by hand: the-  -- 'FunPtr' must stay alive for as long as anything can still call the payoff, which-  -- 'withCustomPayoff' arranges and a hand-built value does not.+  -- |A Haskell-defined payoff with a managed callback; build with 'withCustomPayoff'.   | Custom       !String -- ^name       !String -- ^description-      !(FunPtr PayoffFun)+      !Callback   {#fun qlAssetOrNothingPayoff{`OptionType',`Double',preErrorCheck-`String'errorCheck*-}->`QlStrikedTypePayoff'peekPtr*#}@@ -617,22 +630,22 @@ {#fun qlSuperFundPayoff{`Double',`Double',preErrorCheck-`String'errorCheck*-}->`QlStrikedTypePayoff'peekPtr*#} {#fun qlSuperSharePayoff{`Double',`Double',`Double',preErrorCheck-`String'errorCheck*-}->`QlStrikedTypePayoff'peekPtr*#} {#fun qlAverageBasketPayoff1{`QlPayoff',withDoubleArray*`[Double]'&,preErrorCheck-`String'errorCheck*-}->`QlBasketPayoff'peekPtr*#}-{#fun qlPayoffFromFunction{`String',`String',id`FunPtr PayoffFun',preErrorCheck-`String'errorCheck*-}->`QlPayoff'peekPtr*#}-{#fun qlBasketPayoffFromFunction{`QlPayoff',id`FunPtr BasketAccumulateFun',preErrorCheck-`String'errorCheck*-}->`QlBasketPayoff'peekPtr*#}-{#fun qlStrikedPayoffFromFunction{`OptionType',`Double',`String',id`FunPtr PayoffFun',preErrorCheck-`String'errorCheck*-}->`QlStrikedTypePayoff'peekPtr*#}+{#fun qlPayoffFromFunction{`String',`String',withCallbackPtr*`Callback',preErrorCheck-`String'errorCheck*-}->`QlPayoff'peekPtr*#}+{#fun qlBasketPayoffFromFunction{`QlPayoff',withCallbackPtr*`Callback',preErrorCheck-`String'errorCheck*-}->`QlBasketPayoff'peekPtr*#}+{#fun qlStrikedPayoffFromFunction{`OptionType',`Double',`String',withCallbackPtr*`Callback',preErrorCheck-`String'errorCheck*-}->`QlStrikedTypePayoff'peekPtr*#}  withPayoff :: Payoff -> (QlPayoff -> IO a) -> IO a-withPayoff (DoubleStickyRatchet t1 t2 g1 g2 g3 s1 s2 s3 i1 i2 a) f = qlDoubleStickyRatchetPayoff t1 t2 g1 g2 g3 s1 s2 s3 i1 i2 a >>= newCastForeignPtr >>= flip withGenForeignPtr f-withPayoff (ForwardType t s) f = qlForwardTypePayoff t s >>= newCastForeignPtr >>= flip withGenForeignPtr f-withPayoff (RatchetMax g1 g2 g3 s1 s2 s3 i1 i2 a) f = qlRatchetMaxPayoff g1 g2 g3 s1 s2 s3 i1 i2 a >>= newCastForeignPtr >>= flip withGenForeignPtr f-withPayoff (RatchetMin g1 g2 g3 s1 s2 s3 i1 i2 a) f = qlRatchetMinPayoff g1 g2 g3 s1 s2 s3 i1 i2 a >>= newCastForeignPtr >>= flip withGenForeignPtr f-withPayoff (Ratchet g1 g2 s1 s2 i a) f = qlRatchetPayoff g1 g2 s1 s2 i a >>= newCastForeignPtr >>= flip withGenForeignPtr f-withPayoff (StickyMax g1 g2 g3 s1 s2 s3 i1 i2 a) f = qlStickyMaxPayoff g1 g2 g3 s1 s2 s3 i1 i2 a >>= newCastForeignPtr >>= flip withGenForeignPtr f-withPayoff (StickyMin g1 g2 g3 s1 s2 s3 i1 i2 a) f = qlStickyMinPayoff g1 g2 g3 s1 s2 s3 i1 i2 a >>= newCastForeignPtr >>= flip withGenForeignPtr f-withPayoff (Sticky g1 g2 s1 s2 i a) f = qlStickyPayoff g1 g2 s1 s2 i a >>= newCastForeignPtr >>= flip withGenForeignPtr f-withPayoff (Type t) f = withTypePayoff t (\tp -> upcast tp >>= \pp -> f pp `finally` freeUpcast pp)-withPayoff (Basket b) f = withBasketPayoff b (\bp -> upcast bp >>= \pp -> f pp `finally` freeUpcast pp)-withPayoff (Custom n d fp) f = qlPayoffFromFunction n d fp >>= newCastForeignPtr >>= flip withGenForeignPtr f+withPayoff (DoubleStickyRatchet t1 t2 g1 g2 g3 s1 s2 s3 i1 i2 a) f = withConstructed (qlDoubleStickyRatchetPayoff t1 t2 g1 g2 g3 s1 s2 s3 i1 i2 a) f+withPayoff (ForwardType t s) f = withConstructed (qlForwardTypePayoff t s) f+withPayoff (RatchetMax g1 g2 g3 s1 s2 s3 i1 i2 a) f = withConstructed (qlRatchetMaxPayoff g1 g2 g3 s1 s2 s3 i1 i2 a) f+withPayoff (RatchetMin g1 g2 g3 s1 s2 s3 i1 i2 a) f = withConstructed (qlRatchetMinPayoff g1 g2 g3 s1 s2 s3 i1 i2 a) f+withPayoff (Ratchet g1 g2 s1 s2 i a) f = withConstructed (qlRatchetPayoff g1 g2 s1 s2 i a) f+withPayoff (StickyMax g1 g2 g3 s1 s2 s3 i1 i2 a) f = withConstructed (qlStickyMaxPayoff g1 g2 g3 s1 s2 s3 i1 i2 a) f+withPayoff (StickyMin g1 g2 g3 s1 s2 s3 i1 i2 a) f = withConstructed (qlStickyMinPayoff g1 g2 g3 s1 s2 s3 i1 i2 a) f+withPayoff (Sticky g1 g2 s1 s2 i a) f = withConstructed (qlStickyPayoff g1 g2 s1 s2 i a) f+withPayoff (Type t) f = withTypePayoff t (\tp -> withUpcast tp f)+withPayoff (Basket b) f = withBasketPayoff b (\bp -> withUpcast bp f)+withPayoff (Custom n d fp) f = withConstructed (qlPayoffFromFunction n d fp) f  -- |Wrap a Haskell @price -> value@ function as a real QuantLib @Payoff@, usable anywhere a -- 'Payoff' is (@QuantLib.Instrument.Option.oneAssetOption@, @multiAssetOption@,@@ -640,11 +653,8 @@ -- @fdmCellAveragingInnerValue@, ...) -- the fully custom counterpart to the concrete -- pre-implemented payoffs listed by the 'Payoff' constructors above. ----- The payoff is valid only inside the continuation, and the continuation must span the whole--- /use/, not just the construction: every consumer stores the payoff and calls back into it--- later (an @Instrument@ at @NPV@ time, an @FdmInnerValueCalculator@ at @fdmSolve@ time), so--- pricing must happen before this function returns. Same lifetime rule, and the same reason, as--- @QuantLib.Method.withCustomFdmInnerValueCalculator@.+-- The payoff ADT and every native consumer retain the callback after the continuation returns.+-- Callback exceptions are rethrown by the enclosing Haskell call. -- -- @name@ and @description@ are what QuantLib's own error messages and @Payoff::name@ report; they -- are not interpreted.@@ -653,10 +663,8 @@ -- difference and @MCEuropeanEngine@ families all recover the strike by downcasting to -- @StrikedTypePayoff@\/@PlainVanillaPayoff@ first, and a further ~30 engines route through -- @BlackCalculator@, whose @AcyclicVisitor@ knows only the four built-in striked payoffs. Most of--- these fail with a clean QuantLib exception, but--- @QuantLib.PricingEngine.fdBlackScholesVanillaEngine@ and--- @QuantLib.PricingEngine.fdHestonVanillaEngine@ perform that downcast /unchecked/ upstream and--- will __crash the process__, not throw, on a custom payoff. Confirmed-generic consumers:+-- these fail with a clean QuantLib exception. The two bound finite-difference vanilla engines+-- validate the required striked payoff, including on QuantLib 1.43. Confirmed-generic consumers: -- @QuantLib.Method.fdmLogInnerValue@\/@fdmCellAveragingInnerValue@ (and hence @fdmSolve@), and -- @QuantLib.PricingEngine.mcAmericanEngine@ with @controlVariate = False@. withCustomPayoff :: String -- ^name@@ -671,18 +679,15 @@ -- __The pair is advisory: it does not define the payoff__ -- @payoff(price)@ alone does, exactly -- as for 'withCustomPayoff'. It exists because QuantLib's finite-difference vanilla engines reach -- past the @Payoff@ interface for a strike when sizing their grid:--- @FdBlackScholesVanillaEngine@ @dynamic_pointer_cast@s to @StrikedTypePayoff@ /without/ a check--- and calls @strike()@ twice -- once for the mesher's extent, once for its node-concentration--- point -- then hands the payoff itself to @FdmLogInnerValue@, which takes a plain @Payoff@. So a--- payoff built here prices correctly through--- 'QuantLib.PricingEngine.fdBlackScholesVanillaEngine' and--- 'QuantLib.PricingEngine.fdHestonVanillaEngine', where one built by 'withCustomPayoff' would--- crash the process on that unchecked cast. Pass the strike you want the grid centred on.+-- @FdBlackScholesVanillaEngine@ @dynamic_pointer_cast@s to @StrikedTypePayoff@ and calls+-- @strike()@ twice -- once for the mesher's extent, once for its node-concentration point -- then+-- hands the payoff itself to @FdmLogInnerValue@, which takes a plain @Payoff@. So a payoff built+-- here prices correctly through 'QuantLib.PricingEngine.fdBlackScholesVanillaEngine' and+-- 'QuantLib.PricingEngine.fdHestonVanillaEngine', where one built by 'withCustomPayoff' is+-- rejected with an exception. Pass the strike you want the grid centred on. ----- Everything else matches 'withCustomPayoff', including the continuation-lifetime rule: the--- payoff is valid only inside the continuation, which must span the whole use (pricing included),--- not just construction. @description@ is not a parameter here -- @StrikedTypePayoff@ derives it--- from the type and strike itself.+-- The payoff and native consumers retain the callback after the continuation returns.+-- @description@ is derived from the type and strike by @StrikedTypePayoff@. -- -- Engines routing through @BlackCalculator@ (the @analytic*@ family) still reject this, as they -- must: its @AcyclicVisitor@ knows only the four built-in striked payoffs, and there is no@@ -697,7 +702,7 @@ -- |Wrap a Haskell @underlyings -> accumulated@ function as a real QuantLib @BasketPayoff@ around -- @base@ (which is applied to the accumulated value, exactly as for 'Max'\/'Min'\/'Spread') -- -- usable with @QuantLib.Instrument.Option.basketOption@ and--- @QuantLib.Method.fdmLogBasketInnerValue@. Same continuation-lifetime rule as 'withCustomPayoff';+-- @QuantLib.Method.fdmLogBasketInnerValue@. Same ownership rule as 'withCustomPayoff'; -- unlike it, this callback crosses once per evaluation with the whole underlying-state vector, -- because that is the shape @BasketPayoff::accumulate@ already has upstream. withCustomBasketPayoff :: Payoff -- ^base payoff@@ -1043,7 +1048,7 @@ withLmVolatilityModel :: LmVolatilityModel -> (Ptr CLmVolatilityModel -> IO a) -> IO a withLmVolatilityModel = withEnumType volatilityModelMeta -data Claim = FaceValue | FaceValueAccrual Bond+data Claim = FaceValue | forall b. FaceValueAccrual (GenBond b) claimMeta :: EnumMeta Claim CQlClaim claimMeta = EnumMeta claim @@ -1058,7 +1063,7 @@ {#fun qlFaceValueClaim{preErrorCheck-`String'errorCheck*-}->`QlClaim'peekClaim*#}  -- |Claim on the notional of a reference security, including accrual-{#fun qlFaceValueAccrualClaim{withBond*`Bond',preErrorCheck-`String'errorCheck*-}->`QlClaim'peekClaim*#}+{#fun qlFaceValueAccrualClaim{withBond*`GenBond b',preErrorCheck-`String'errorCheck*-}->`QlClaim'peekClaim*#}  strikedPayoff :: StrikedPayoff -> Payoff strikedPayoff = Type . Striked@@ -1079,16 +1084,6 @@ data AdditionalResultVal = RealVal Double | StringVal String | RealVectorVal [Double] | UnsupportedVal String   deriving (Show, Eq) --- |Discriminants for `QlAdditionalResult.type`, bound from `enum AdditionalResultType` in--- `cbits/qlInstrument.h` (read from the header, not hardcoded).-{#enum AdditionalResultType {} deriving (Show, Eq, Read) #}---- |Registers `struct QlAdditionalResult*` with c2hs as `RawResultPtr`, `nocode` since we supply--- the Haskell type ourselves (below) rather than a c2hs-generated wrapper. This is what lets the--- `additionalResults` `{#fun#}` binding (in `QuantLib.Instrument`)'s low-level array-of-structs--- out-parameter (C type `struct QlAdditionalResult **`) be typed `Ptr RawResultPtr` =--- `Ptr (Ptr RawResult)`, instead of defaulting to an opaque `Ptr (Ptr ())`.-{#pointer *QlAdditionalResult as RawResultPtr nocode#} type RawResultPtr = Ptr RawResult  -- |One raw `QlAdditionalResult` entry, peeked field-by-field via c2hs `{#get#}` hooks. Its@@ -1131,3 +1126,10 @@ peekAdditionalResults = peekStructArray convertResult (\l p -> qlFreeAdditionalResults l (castPtr p))  -- vim: set ff=unix ts=8 sts=2 sw=2 et:++preAdditionalResults :: ((Ptr CUInt, Ptr RawResultPtr) -> IO b) -> IO b+preAdditionalResults = preArrayWith (\l p -> qlFreeAdditionalResults l (castPtr p))++{#fun qlStubIndexSelection as stubIndexSelectionRaw{`Int'+  ,withIborIndexArray*`[GenIborIndex ibor]'&+  ,preErrorCheck-`String'errorCheck*-}->`StubSelectionPtr'peekPtr*#}
QuantLib/Internal/Type.hs view
@@ -1,19 +1,19 @@ {-# LANGUAGE RankNTypes, TypeFamilies, TypeOperators, FlexibleContexts, FlexibleInstances #-} module QuantLib.Internal.Type where-import Foreign.Ptr(Ptr, FunPtr, nullPtr, nullFunPtr, freeHaskellFunPtr, plusPtr, castPtr)+import Foreign.Ptr(Ptr, nullPtr) import Foreign.ForeignPtr(ForeignPtr, FinalizerPtr, newForeignPtr, withForeignPtr) import Foreign.C.Types(CUInt(..), CInt, CDouble(..)) import Foreign.C.String(CString)-import Foreign.Marshal.Array(withArray, peekArray, copyArray)-import Foreign.Marshal.Utils(withMany, fillBytes)-import Foreign.Storable(peek, sizeOf)+import Foreign.Marshal.Array(withArray, peekArray)+import Foreign.Marshal.Utils(withMany)+import Foreign.Storable(peek) -import Control.Monad((>=>), when)+import Control.Monad((>=>)) import System.IO.Unsafe(unsafePerformIO)-import qualified Data.Vector.Storable as V -import QuantLib.Internal(RealVector, borrowRealVector, peekDynString, preArray, peekDayArray, peekPtrArray)-import Control.Exception (finally, mask)+import qualified QuantLib.Internal.Callback as Callback+import QuantLib.Internal(RealVector, borrowRealVector, peekDynString, preIntArray, prePtrArray, peekDayArray, peekPtrArray)+import Control.Exception (bracket, finally, mask, mask_, onException)  (<.>) :: Functor f => (b -> r) -> (a -> f b) -> a -> f r f1 <.> f2 = fmap f1 . f2@@ -35,207 +35,38 @@ -- unsafePerformIO is safe; NOINLINE keeps GHC from duplicating or floating the C++ -- call, matching how QuantLib.Context guards its own unsafePerformIO sites. showStandalone :: (Ptr a -> IO CString) -> Standalone a -> String-showStandalone f x = unsafePerformIO $ withStandalone x (f >=> peekDynString)+showStandalone f x = unsafePerformIO $ mask_ $ withStandalone x (f >=> peekDynString) {-# NOINLINE showStandalone #-} --- On `safe' vs `unsafe' imports, file-wide (this was an open TODO; it is settled):---   * The `&qlFreeX' finalizer imports below take a symbol *address*, not a call, so their---     `unsafe' annotation is inert. The call that matters is `callFinalizer' above, plus---     whatever the GC runs; both are safe.---   * Everything that runs QuantLib logic stays `safe'. Under the non-threaded RTS an---     `unsafe' call blocks GC and the scheduler for its whole duration, and pricing or---     bootstrapping is unbounded.---   * The qlXAsY upcast shims are the one legitimate `unsafe' candidate -- bare---     `ret(new QlY(*arg(o)))', no callback into Haskell, bounded work -- but they are---     already dominated by the QuantLib call they precede, so leave them `safe' absent a---     measurement; a per-shim rule would break the first time one grows logic.--- If a Haskell callback is ever passed into C++, every import on that path must be `safe'.------ 'withCostFunction' below is the first such callback: it turns a Haskell @[Double] -> Double@--- into a C function pointer QuantLib's optimizer calls back into once per outer iteration (the--- whole parameter vector, not per component) -- the coarsened-callback shape documented in--- CLAUDE.md's "coarsen the language-boundary crossing" bullet, modeled on QuantLib-SWIG's own--- @PyCostFunction@ (@SWIG/functions.i@).-foreign import ccall "wrapper" mkCostFunPtr-  :: (Ptr CDouble -> CUInt -> IO CDouble) -> IO (FunPtr (Ptr CDouble -> CUInt -> IO CDouble))--- Build a C function pointer around a Haskell cost function for the duration of one 'optimize'--- call, freeing it with 'freeHaskellFunPtr' once the continuation returns, whether normally or--- via exception.-withCostFunction :: (RealVector -> Double) -> (FunPtr (Ptr CDouble -> CUInt -> IO CDouble) -> IO b) -> IO b-withCostFunction f g = mask $ \restore -> do-  fp <- mkCostFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp-  where-    call xs n = do-      x <- borrowRealVector xs n-      pure (realToFrac (f x))---- 'fdmRollback' (QuantLib.Method) is the second callback-into-Haskell hook, driving--- @FdmBackwardSolver::rollback@ with a Haskell-defined 'FdmLinearOpComposite' (three callbacks:--- apply/apply_direction/solve_splitting) and an optional step condition -- see CLAUDE.md's--- "coarsen the language-boundary crossing" bullet and 'withCostFunction' above, whose--- mask\/finally\/freeHaskellFunPtr bracket this reuses verbatim, once per callback (four--- independent with-style marshallers, not a single tuple-returning one, so each composes as an--- ordinary c2hs @{#fun#}@ argument exactly like 'withCostFunction' does for 'optimize').------ Every callback's raw C signature is @(in, n, <extra scalar args>, out)@: a caller-owned input--- buffer of length @n@, then whatever scalars the specific virtual takes (direction, the--- splitting parameter @s@, the @(t1,t2)@ time pair QuantLib's own @setTime@ stashes and threads--- through -- never a callback of its own, since it only ever stores two doubles), then a--- caller-owned *output* buffer also of length @n@. 'pokeBoundedFdmResult' is the one new safety--- property beyond 'withCostFunction' (which returns a single scalar, so has no analogous hazard):--- the C++ side's output buffer is exactly @n@ doubles, so a too-long Haskell result list must--- never be poked past that -- 'pokeBoundedFdmResult' truncates (a too-short list numerically--- wrong but safe, implicit-zero-padded).-pokeBoundedFdmResult :: CUInt -> Ptr CDouble -> RealVector -> IO ()-pokeBoundedFdmResult n out result = do-  let expected = fromIntegral n-      copied = min expected (V.length result)-  V.unsafeWith result $ \p -> copyArray out (castPtr p) copied-  when (copied < expected) $ fillBytes (out `plusPtr` (copied * sizeOf (undefined :: CDouble))) 0 ((expected - copied) * sizeOf (undefined :: CDouble))--type FdmApplyFun = Ptr CDouble -> CUInt -> CDouble -> CDouble -> Ptr CDouble -> IO ()-foreign import ccall "wrapper" mkFdmApplyFunPtr :: FdmApplyFun -> IO (FunPtr FdmApplyFun)--- |Wrap a Haskell @(t1,t2) -> grid -> grid'@ function (QuantLib's @FdmLinearOp::apply@\/--- @FdmLinearOpComposite::apply@, no direction argument) as a 'FdmApplyFun' C callback for the--- duration of one 'QuantLib.Method.fdmRollback' call.-withFdmApply :: ((Double, Double) -> RealVector -> RealVector) -> (FunPtr FdmApplyFun -> IO b) -> IO b-withFdmApply f g = mask $ \restore -> do-  fp <- mkFdmApplyFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp-  where-    call xs n t1 t2 out = do-      x <- borrowRealVector xs n-      pokeBoundedFdmResult n out (f (realToFrac t1, realToFrac t2) x)--type FdmApplyDirectionFun = Ptr CDouble -> CUInt -> CUInt -> CDouble -> CDouble -> Ptr CDouble -> IO ()-foreign import ccall "wrapper" mkFdmApplyDirectionFunPtr :: FdmApplyDirectionFun -> IO (FunPtr FdmApplyDirectionFun)--- |Wrap a Haskell @direction -> (t1,t2) -> grid -> grid'@ function--- (@FdmLinearOpComposite::apply_direction@) as an 'FdmApplyDirectionFun' C callback.-withFdmApplyDirection :: (Int -> (Double, Double) -> RealVector -> RealVector) -> (FunPtr FdmApplyDirectionFun -> IO b) -> IO b-withFdmApplyDirection f g = mask $ \restore -> do-  fp <- mkFdmApplyDirectionFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp-  where-    call xs n dir t1 t2 out = do-      x <- borrowRealVector xs n-      pokeBoundedFdmResult n out (f (fromIntegral dir) (realToFrac t1, realToFrac t2) x)--type FdmSolveSplittingFun = Ptr CDouble -> CUInt -> CUInt -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> IO ()-foreign import ccall "wrapper" mkFdmSolveSplittingFunPtr :: FdmSolveSplittingFun -> IO (FunPtr FdmSolveSplittingFun)--- |Wrap a Haskell @direction -> s -> (t1,t2) -> grid -> grid'@ function--- (@FdmLinearOpComposite::solve_splitting@) as an 'FdmSolveSplittingFun' C callback.-withFdmSolveSplitting :: (Int -> Double -> (Double, Double) -> RealVector -> RealVector) -> (FunPtr FdmSolveSplittingFun -> IO b) -> IO b-withFdmSolveSplitting f g = mask $ \restore -> do-  fp <- mkFdmSolveSplittingFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp-  where-    call xs n dir s t1 t2 out = do-      x <- borrowRealVector xs n-      pokeBoundedFdmResult n out (f (fromIntegral dir) (realToFrac s) (realToFrac t1, realToFrac t2) x)--type FdmStepConditionFun = Ptr CDouble -> CUInt -> CDouble -> Ptr CDouble -> IO ()-foreign import ccall "wrapper" mkFdmStepConditionFunPtr :: FdmStepConditionFun -> IO (FunPtr FdmStepConditionFun)--- |Wrap an optional Haskell @t -> grid -> grid'@ early-exercise\/barrier-style step condition--- (@StepCondition\<Array\>::applyTo@) as an 'FdmStepConditionFun' C callback, or a null 'FunPtr'--- when there is no step condition -- mirrors the existing @withMaybeX@ convention (e.g.--- 'withMaybeCurrency' above) of passing a null pointer for 'Nothing' rather than a separate--- present\/absent flag.-withMaybeFdmStepCondition :: Maybe (Double -> RealVector -> RealVector) -> (FunPtr FdmStepConditionFun -> IO b) -> IO b-withMaybeFdmStepCondition Nothing g = g nullFunPtr-withMaybeFdmStepCondition (Just f) g = mask $ \restore -> do-  fp <- mkFdmStepConditionFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp-  where-    call xs n t out = do-      x <- borrowRealVector xs n-      pokeBoundedFdmResult n out (f (realToFrac t) x)+type Callback = Callback.Callback -type FdmInnerValueFun = Ptr CDouble -> CUInt -> CDouble -> IO CDouble-foreign import ccall "wrapper" mkFdmInnerValueFunPtr :: FdmInnerValueFun -> IO (FunPtr FdmInnerValueFun)--- |Wrap a Haskell @t -> nodeLocation -> value@ function as an 'FdmInnerValueFun' C callback, for--- either of @FdmInnerValueCalculator::innerValue@\/@avgInnerValue@ -- the one hook in this file--- that is a genuine, uncoarsened per-grid-node callback rather than a whole-grid one (see--- 'QuantLib.Method.fdmSolve' and its accompanying haddock for why no batched shape exists here,--- matching QuantLib-SWIG's own @FdmInnerValueCalculatorDelegate@). Reuses the same--- mask\/finally\/freeHaskellFunPtr bracket as 'withCostFunction' above; unlike the--- 'FdmApplyFun'-family callbacks, this one returns a single scalar so has no--- 'pokeBoundedFdmResult'-style output-length hazard.-withFdmInnerValue :: (Double -> [Double] -> Double) -> (FunPtr FdmInnerValueFun -> IO b) -> IO b-withFdmInnerValue f g = mask $ \restore -> do-  fp <- mkFdmInnerValueFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp-  where-    call locPtr n t = do-      loc <- peekArray (fromIntegral n) locPtr-      pure (realToFrac (f (realToFrac t) (map realToFrac loc)))+withCallbackPtr :: Callback -> (Ptr () -> IO b) -> IO b+withCallbackPtr = Callback.withCallbackPtr -type FdmGridMappingFun = CDouble -> IO CDouble-foreign import ccall "wrapper" mkFdmGridMappingFunPtr :: FdmGridMappingFun -> IO (FunPtr FdmGridMappingFun)--- |Wrap a Haskell @Double -> Double@ function as an 'FdmGridMappingFun' C callback, for--- @FdmCellAveragingInnerValue@'s optional @gridMapping@ (@QuantLib.Method.withCustomCellAveragingInnerValue@)--- -- another genuine per-node callback (invoked from inside @avgInnerValueCalc@'s Simpson--- integration and from every @innerValue@ call), same reasoning as 'withFdmInnerValue' above.-withFdmGridMapping :: (Double -> Double) -> (FunPtr FdmGridMappingFun -> IO b) -> IO b-withFdmGridMapping f g = mask $ \restore -> do-  fp <- mkFdmGridMappingFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp+withCostFunction :: (RealVector -> Double) -> (Ptr () -> IO b) -> IO b+withCostFunction f use = Callback.withScalarCallback call (`withCallbackPtr` use)   where-    call x = pure (realToFrac (f (realToFrac x)))+    call args = f <$> borrowRealVector (Callback.callbackInput args) (fromIntegral (Callback.callbackSize args)) -type PayoffFun = CDouble -> IO CDouble-foreign import ccall "wrapper" mkPayoffFunPtr :: PayoffFun -> IO (FunPtr PayoffFun)--- |Wrap a Haskell @price -> value@ function as a 'PayoffFun' C callback, for--- @QuantLib.Internal.Common.withCustomPayoff@. Another genuine, uncoarsened callback: QuantLib's--- @Payoff::operator()@ takes one scalar price everywhere it is called -- per tree node in--- @DiscretizedVanillaOption@, inside @FdmCellAveragingInnerValue@'s per-cell Simpson integral, per--- path per exercise index in @AmericanPathPricer@ -- and nothing upstream batches an @Array@, so--- there is no whole-vector shape to coarsen to (same situation as 'withFdmInnerValue' above).-withPayoffFun :: (Double -> Double) -> (FunPtr PayoffFun -> IO b) -> IO b-withPayoffFun f g = mask $ \restore -> do-  fp <- mkPayoffFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp-  where-    call x = pure (realToFrac (f (realToFrac x)))+withFdmInnerValue :: (Double -> [Double] -> Double) -> (Callback -> IO b) -> IO b+withFdmInnerValue f = Callback.withScalarCallback $ \args -> do+  loc <- peekArray (Callback.callbackSize args) (Callback.callbackInput args)+  pure (f (Callback.callbackTime1 args) (map realToFrac loc)) -type BasketAccumulateFun = Ptr CDouble -> CUInt -> IO CDouble-foreign import ccall "wrapper" mkBasketAccumulateFunPtr :: BasketAccumulateFun -> IO (FunPtr BasketAccumulateFun)--- |Wrap a Haskell @underlyings -> accumulated@ function as a 'BasketAccumulateFun' C callback, for--- @QuantLib.Internal.Common.withCustomBasketPayoff@. Unlike 'withPayoffFun' this one /is/ already--- coarsened by upstream's own interface: @BasketPayoff::accumulate@ takes the whole underlying-state--- @Array@ per call, not one component at a time.-withBasketAccumulateFun :: ([Double] -> Double) -> (FunPtr BasketAccumulateFun -> IO b) -> IO b-withBasketAccumulateFun f g = mask $ \restore -> do-  fp <- mkBasketAccumulateFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp-  where-    call xs n = do-      x <- peekArray (fromIntegral n) xs-      pure (realToFrac (f (map realToFrac x)))+withFdmGridMapping :: (Double -> Double) -> (Callback -> IO b) -> IO b+withFdmGridMapping = withPayoffFun --- |The unary callback a Haskell-defined @DerivedQuote@ crosses on, for--- @QuantLib.Quote.withDerivedQuote@. Same C signature as 'PayoffFun', so it reuses--- 'withPayoffFun' rather than duplicating the @wrapper@ import; the alias exists so the quote--- bindings read in their own terms.-type QuoteUnaryFun = PayoffFun+withPayoffFun :: (Double -> Double) -> (Callback -> IO b) -> IO b+withPayoffFun f = Callback.withScalarCallback (pure . f . Callback.callbackScalar) --- |As 'QuoteUnaryFun', but for @MultiCompositeQuote@ (@QuantLib.Quote.withMultiCompositeQuote@):--- same C signature as 'BasketAccumulateFun', and coarsened the same way -- upstream hands the--- whole element vector over per evaluation.-type QuoteArrayFun = BasketAccumulateFun+withBasketAccumulateFun :: ([Double] -> Double) -> (Callback -> IO b) -> IO b+withBasketAccumulateFun f = Callback.withScalarCallback $ \args -> do+  xs <- peekArray (Callback.callbackSize args) (Callback.callbackInput args)+  pure (f (map realToFrac xs)) -type QuoteBinaryFun = CDouble -> CDouble -> IO CDouble-foreign import ccall "wrapper" mkQuoteBinaryFunPtr :: QuoteBinaryFun -> IO (FunPtr QuoteBinaryFun)--- |Wrap a Haskell @value1 -> value2 -> value@ function as a 'QuoteBinaryFun' C callback, for--- @QuantLib.Quote.withCompositeQuote@. The genuinely new arity of the three: @CompositeQuote@'s--- @BinaryFunction@ takes both element values at once, so there is nothing to coarsen -- one--- crossing per @Quote::value()@ evaluation is already the whole computation.-withQuoteBinaryFun :: (Double -> Double -> Double) -> (FunPtr QuoteBinaryFun -> IO b) -> IO b-withQuoteBinaryFun f g = mask $ \restore -> do-  fp <- mkQuoteBinaryFunPtr call-  restore (g fp) `finally` freeHaskellFunPtr fp-  where-    call x y = pure (realToFrac (f (realToFrac x) (realToFrac y)))+withQuoteBinaryFun :: (Double -> Double -> Double) -> (Callback -> IO b) -> IO b+withQuoteBinaryFun f = Callback.withScalarCallback $ \args ->+  pure (f (Callback.callbackScalar args) (Callback.callbackTime1 args))  data CCalendar newtype Calendar = Calendar {getCCalendar :: Standalone CCalendar}@@ -246,6 +77,9 @@ withCalendar :: Calendar -> (Ptr CCalendar -> IO b) -> IO b withCalendar = withStandalone . getCCalendar foreign import ccall safe "ql.h qlCalendarName" qlCalendarName :: Ptr CCalendar -> IO CString+withMaybeCalendar :: Maybe Calendar -> (Ptr CCalendar -> IO r) -> IO r+withMaybeCalendar x f = maybe (f nullPtr) (`withCalendar` f) x+ instance Show Calendar where show x = showStandalone qlCalendarName (getCCalendar x) -- Equality by name, here and for the Currency/Region/DayCounter/Schedule instances -- below. This is deliberate: it is how QuantLib itself compares these types.@@ -381,6 +215,9 @@ peekDayCounter = DayCounter <.> peekStandalone withDayCounter :: DayCounter -> (Ptr CDayCounter -> IO b) -> IO b withDayCounter = withStandalone . getCDayCounter++withMaybeDayCounter :: Maybe DayCounter -> (Ptr CDayCounter -> IO r) -> IO r+withMaybeDayCounter x f = maybe (f nullPtr) (`withDayCounter` f) x foreign import ccall safe "ql.h qlDayCounterName" qlDayCounterName :: Ptr CDayCounter -> IO CString instance Show DayCounter where show x = showStandalone qlDayCounterName (getCDayCounter x) instance Eq DayCounter where x == y = show x == show y@@ -396,7 +233,7 @@ foreign import ccall safe "ql.h qlScheduleDates" qlScheduleDates :: Ptr CSchedule -> Ptr CUInt -> Ptr (Ptr CInt) -> IO () showSchedule :: Schedule -> String showSchedule x = unsafePerformIO $ withSchedule x $ \p ->-  show <$> preArray (\(cp, ap) -> qlScheduleDates p cp ap >> peekDayArray cp ap)+  show <$> preIntArray (\(cp, ap) -> qlScheduleDates p cp ap >> peekDayArray cp ap) {-# NOINLINE showSchedule #-}  instance Show Schedule where@@ -544,6 +381,21 @@ withNoArbSabrInterpolatedSmileSection :: NoArbSabrInterpolatedSmileSection -> (Ptr CNoArbSabrInterpolatedSmileSection -> IO b) -> IO b withNoArbSabrInterpolatedSmileSection = withStandalone . getCNoArbSabrInterpolatedSmileSection +-- |a dedicated leaf, same reasoning and 'SmileSection' escape hatch as 'CSabrInterpolatedSmileSection'+-- above -- see 'QuantLib.TermStructure.Volatility.zabrInterpolatedSmileSection'\/+-- 'QuantLib.TermStructure.Volatility.zabrInterpolatedAsSmileSection'. Wraps a+-- @ZabrInterpolatedSmileSectionHandle@ on the C++ side, not the templated+-- @ZabrInterpolatedSmileSection\<Evaluation\>@ itself directly -- see the handle's own comment+-- in @cbits\/qlTermStructureAux.h@ for why.+data CZabrInterpolatedSmileSection+newtype ZabrInterpolatedSmileSection = ZabrInterpolatedSmileSection {getCZabrInterpolatedSmileSection :: Standalone CZabrInterpolatedSmileSection}+foreign import ccall unsafe "ql.h &qlFreeZabrInterpolatedSmileSection" qlFreeZabrInterpolatedSmileSection :: FinalizerPtr CZabrInterpolatedSmileSection+instance Finalizable CZabrInterpolatedSmileSection where finalize = qlFreeZabrInterpolatedSmileSection+peekZabrInterpolatedSmileSection :: Ptr CZabrInterpolatedSmileSection -> IO ZabrInterpolatedSmileSection+peekZabrInterpolatedSmileSection = ZabrInterpolatedSmileSection <.> peekStandalone+withZabrInterpolatedSmileSection :: ZabrInterpolatedSmileSection -> (Ptr CZabrInterpolatedSmileSection -> IO b) -> IO b+withZabrInterpolatedSmileSection = withStandalone . getCZabrInterpolatedSmileSection+ -- |a dedicated leaf, not a downcast target: 'QuantLib.TermStructure.Volatility.optionletStripperWithAtm' -- fuses construction of an 'OptionletStripper1' underneath (never exposed to Haskell, mirroring -- 'QuantLib.TermStructure.Volatility.optionletStripper') and stores the resulting@@ -560,15 +412,34 @@ withOptionletStripper2 :: OptionletStripper2 -> (Ptr COptionletStripper2 -> IO b) -> IO b withOptionletStripper2 = withStandalone . getCOptionletStripper2 -data CPricingEngine-newtype PricingEngine = PricingEngine {getCPricingEngine :: Standalone CPricingEngine}-foreign import ccall unsafe "ql.h &qlFreePricingEngine" qlFreePricingEngine :: FinalizerPtr CPricingEngine-instance Finalizable CPricingEngine where finalize = qlFreePricingEngine-peekPricingEngine :: Ptr CPricingEngine -> IO PricingEngine-peekPricingEngine = PricingEngine <.> peekStandalone-withPricingEngine :: PricingEngine -> (Ptr CPricingEngine -> IO b) -> IO b-withPricingEngine = withStandalone . getCPricingEngine+-- |Pricing engine hierarchy: PricingEngine -> AnalyticRoughHestonEngine.+data CPricingEngine'+newtype GenPricingEngine pe = GenPricingEngine {getPricingEngine :: GenForeignPtr pe CPricingEngine'}+type CPricingEngine = ForeignPtr CPricingEngine'+type PricingEngine = GenPricingEngine CPricingEngine+foreign import ccall unsafe "ql.h &qlFreePricingEngine" qlFreePricingEngine :: FinalizerPtr CPricingEngine'+instance Finalizable CPricingEngine' where finalize = qlFreePricingEngine+peekPricingEngine :: Ptr CPricingEngine' -> IO PricingEngine+peekPricingEngine = GenPricingEngine <.> newCastForeignPtr+withPricingEngine :: GenPricingEngine pe -> (Ptr CPricingEngine' -> IO b) -> IO b+withPricingEngine = withGenForeignPtr . getPricingEngine+asPricingEngine :: GenPricingEngine pe -> IO PricingEngine+asPricingEngine = transferGenForeignPtr (pure . GenPricingEngine) . getPricingEngine +data CAnalyticRoughHestonEngine'+type CAnalyticRoughHestonEngine = ForeignPtr CAnalyticRoughHestonEngine'+-- |A 'PricingEngine' with its concrete native interface preserved.+type AnalyticRoughHestonEngine = GenPricingEngine CAnalyticRoughHestonEngine+foreign import ccall unsafe "ql.h &qlFreeAnalyticRoughHestonEngine" qlFreeAnalyticRoughHestonEngine :: FinalizerPtr CAnalyticRoughHestonEngine'+instance Finalizable CAnalyticRoughHestonEngine' where finalize = qlFreeAnalyticRoughHestonEngine+foreign import ccall "ql.h qlAnalyticRoughHestonEngineAsPricingEngine" qlAnalyticRoughHestonEngineAsPricingEngine :: Ptr CAnalyticRoughHestonEngine' -> IO (Ptr CPricingEngine')+instance Upcastable CAnalyticRoughHestonEngine' where {type Base CAnalyticRoughHestonEngine' = CPricingEngine'; upcast = qlAnalyticRoughHestonEngineAsPricingEngine}+peekAnalyticRoughHestonEngine :: Ptr CAnalyticRoughHestonEngine' -> IO AnalyticRoughHestonEngine+peekAnalyticRoughHestonEngine = GenPricingEngine <.> newGenForeignPtr+withAnalyticRoughHestonEngine :: AnalyticRoughHestonEngine -> (Ptr CAnalyticRoughHestonEngine' -> IO b) -> IO b+withAnalyticRoughHestonEngine = withForeignPtr . ptr . getPricingEngine++ data CBlackDeltaCalculator newtype BlackDeltaCalculator = BlackDeltaCalculator {getCBlackDeltaCalculator :: Standalone CBlackDeltaCalculator} foreign import ccall unsafe "ql.h &qlFreeBlackDeltaCalculator" qlFreeBlackDeltaCalculator :: FinalizerPtr CBlackDeltaCalculator@@ -578,6 +449,12 @@ withBlackDeltaCalculator :: BlackDeltaCalculator -> (Ptr CBlackDeltaCalculator -> IO b) -> IO b withBlackDeltaCalculator = withStandalone . getCBlackDeltaCalculator +-- Standalone FX projection interface.+data CFxResetPricer+type FxResetPricer = Standalone CFxResetPricer+foreign import ccall unsafe "ql.h &qlFreeFxResetPricer" qlFreeFxResetPricer :: FinalizerPtr CFxResetPricer+instance Finalizable CFxResetPricer where finalize = qlFreeFxResetPricer+ -- Generic floating-rate coupon pricer; CMS pricers retain a concrete subtype. data CFloatingRateCouponPricer' @@ -590,14 +467,14 @@ foreign import ccall unsafe "ql.h &qlFreeFloatingCouponPricer" qlFreeFloatingRateCouponPricer :: FinalizerPtr CFloatingRateCouponPricer' instance Finalizable CFloatingRateCouponPricer' where finalize = qlFreeFloatingRateCouponPricer asFloatingRateCouponPricer :: GenFloatingRateCouponPricer frcp -> IO FloatingRateCouponPricer-asFloatingRateCouponPricer = transferGenForeignPtr peekFloatingRateCouponPricer . getFloatingRateCouponPricer+asFloatingRateCouponPricer = transferGenForeignPtr (pure . GenFloatingRateCouponPricer) . getFloatingRateCouponPricer peekFloatingRateCouponPricer :: Ptr CFloatingRateCouponPricer' -> IO FloatingRateCouponPricer peekFloatingRateCouponPricer = GenFloatingRateCouponPricer <.> newCastForeignPtr withFloatingRateCouponPricer :: GenFloatingRateCouponPricer frcp -> (Ptr CFloatingRateCouponPricer' -> IO b) -> IO b withFloatingRateCouponPricer = withGenForeignPtr . getFloatingRateCouponPricer withFloatingRateCouponPricerArray :: [GenFloatingRateCouponPricer frcp] -> ((CUInt, Ptr (Ptr CFloatingRateCouponPricer')) -> IO b) -> IO b withFloatingRateCouponPricerArray = withGenArray withFloatingRateCouponPricer-withMaybeFloatingRateCouponPricer :: Maybe FloatingRateCouponPricer -> (Ptr CFloatingRateCouponPricer' -> IO b) -> IO b+withMaybeFloatingRateCouponPricer :: Maybe (GenFloatingRateCouponPricer frcp) -> (Ptr CFloatingRateCouponPricer' -> IO b) -> IO b withMaybeFloatingRateCouponPricer = maybe ($ nullPtr) withFloatingRateCouponPricer  -- |CMS coupon-pricer subtype required by CMS consumers.@@ -625,7 +502,7 @@ foreign import ccall "ql.h qlFloatingRateCouponAsCoupon" qlFloatingRateCouponAsCoupon :: Ptr CFloatingRateCoupon' -> IO (Ptr CCoupon') instance Upcastable CFloatingRateCoupon' where {type Base CFloatingRateCoupon' = CCoupon'; upcast = qlFloatingRateCouponAsCoupon} asFloatingRateCoupon :: GenFloatingRateCoupon frc -> IO FloatingRateCoupon-asFloatingRateCoupon = transferGenForeignPtr peekFloatingRateCoupon . peel . peel . getCashFlow+asFloatingRateCoupon = transferGenForeignPtr newGenFloatingRateCoupon . peel . peel . getCashFlow peekFloatingRateCoupon :: Ptr CFloatingRateCoupon' -> IO FloatingRateCoupon peekFloatingRateCoupon = newCastForeignPtr >=> newGenFloatingRateCoupon newGenFloatingRateCoupon :: GenForeignPtr frc CFloatingRateCoupon' -> IO (GenFloatingRateCoupon frc)@@ -660,6 +537,19 @@ withIborCoupon :: IborCoupon -> (Ptr CIborCoupon' -> IO b) -> IO b withIborCoupon = withForeignPtr . ptr . peel . peel . getCashFlow +data CFxResetCoupon'+type CFxResetCoupon = ForeignPtr CFxResetCoupon'+-- |A 'FloatingRateCoupon' with its concrete native interface preserved.+type FxResetCoupon = GenFloatingRateCoupon CFxResetCoupon+foreign import ccall unsafe "ql.h &qlFreeFxResetCoupon" qlFreeFxResetCoupon :: FinalizerPtr CFxResetCoupon'+instance Finalizable CFxResetCoupon' where finalize = qlFreeFxResetCoupon+foreign import ccall "ql.h qlFxResetCouponAsFloatingRateCoupon" qlFxResetCouponAsFloatingRateCoupon :: Ptr CFxResetCoupon' -> IO (Ptr CFloatingRateCoupon')+instance Upcastable CFxResetCoupon' where {type Base CFxResetCoupon' = CFloatingRateCoupon'; upcast = qlFxResetCouponAsFloatingRateCoupon}+peekFxResetCoupon :: Ptr CFxResetCoupon' -> IO FxResetCoupon+peekFxResetCoupon = newGenForeignPtr >=> newGenFloatingRateCoupon+withFxResetCoupon :: FxResetCoupon -> (Ptr CFxResetCoupon' -> IO b) -> IO b+withFxResetCoupon = withForeignPtr . ptr . peel . peel . getCashFlow+ data COvernightIndexedCoupon' type COvernightIndexedCoupon = ForeignPtr COvernightIndexedCoupon' -- |A 'FloatingRateCoupon'; see the hierarchy under t'GenCashFlow'.@@ -1016,17 +906,27 @@ data GenForeignPtr a b = GenForeignPtr {   ptr :: !a   , _access :: !(forall r. a -> (Ptr b -> IO r) -> IO r)-  , _mayFree :: !(Maybe (Ptr b -> IO ())) -- `free' after upcast is needed+  , _ownership :: !(Either (a -> ForeignPtr b) (Ptr b -> IO ())) }  freeUpcast :: Finalizable b => Ptr b -> IO () freeUpcast = callFinalizer finalize +-- Temporary ADT handles are scoped to their consumer; constructors copy shared ownership.+withConstructed :: Finalizable a => IO (Ptr a) -> (Ptr a -> IO b) -> IO b+withConstructed make = bracket make freeUpcast++withUpcast :: (Upcastable a, Finalizable (Base a)) => Ptr a -> (Ptr (Base a) -> IO b) -> IO b+withUpcast p = withConstructed (upcast p)++withConstructedUpcast :: (Finalizable a, Upcastable a, Finalizable (Base a)) => IO (Ptr a) -> (Ptr (Base a) -> IO b) -> IO b+withConstructedUpcast make f = withConstructed make (`withUpcast` f)+ newtype AnyOf b a = AnyOf { getAnyOf :: GenForeignPtr a b } newAnyOf :: (Upcastable b, Finalizable (Base b)) => GenForeignPtr a b -> GenForeignPtr (AnyOf b a) (Base b) newAnyOf x = GenForeignPtr (AnyOf x)   (\(AnyOf i) f -> withGenForeignPtr i (upcast >=> f))-  (Just freeUpcast)+  (Right freeUpcast)  class Upcastable a where   type Base a@@ -1035,12 +935,12 @@ newGenForeignPtr :: (Finalizable a, Upcastable a, Finalizable (Base a)) => Ptr a -> IO (GenForeignPtr (ForeignPtr a) (Base a)) newGenForeignPtr x = do   fp <- newForeignPtr finalize x-  pure $ GenForeignPtr fp (\a f -> withForeignPtr a (upcast >=> f)) (Just freeUpcast)+  pure $ GenForeignPtr fp (\a f -> withForeignPtr a (upcast >=> f)) (Right freeUpcast)  newCastForeignPtr :: Finalizable a => Ptr a -> IO (GenForeignPtr (ForeignPtr a) a) newCastForeignPtr x = do   fp <- newForeignPtr finalize x-  pure $ GenForeignPtr fp withForeignPtr Nothing+  pure $ ownedGenForeignPtr fp  -- `access' performs the upcast, which allocates a fresh handle that `mfree' must release, so -- acquiring it and installing the handler have to be atomic -- `mask' covers the upcast@@ -1049,13 +949,21 @@ -- allocates internally. Nesting is fine: an inner level's `restore' only wraps the -- continuation that contains the outer `restore', so `f' still runs unmasked. withGenForeignPtr :: GenForeignPtr a b -> (Ptr b -> IO r) -> IO r-withGenForeignPtr (GenForeignPtr p access Nothing) f = access p f-withGenForeignPtr (GenForeignPtr p access (Just free)) f =+withGenForeignPtr (GenForeignPtr p access (Left _)) f = access p f+withGenForeignPtr (GenForeignPtr p access (Right free)) f =   mask $ \restore -> access p $ \bp -> restore (f bp) `finally` free bp -transferGenForeignPtr :: (Ptr b -> IO r) -> GenForeignPtr a b -> IO r-transferGenForeignPtr f (GenForeignPtr p access _) = access p f+ownedGenForeignPtr :: ForeignPtr b -> GenForeignPtr (ForeignPtr b) b+ownedGenForeignPtr fp = GenForeignPtr fp withForeignPtr (Left id) +-- Identity conversions share their ForeignPtr; only fresh upcast handles acquire a finalizer.+transferGenForeignPtr :: Finalizable b => (GenForeignPtr (ForeignPtr b) b -> IO r) -> GenForeignPtr a b -> IO r+transferGenForeignPtr f (GenForeignPtr p access ownership) = case ownership of+  Left owner -> f (ownedGenForeignPtr (owner p))+  Right free -> mask $ \restore -> do+    fp <- access p $ \bp -> newForeignPtr finalize bp `onException` free bp+    restore (f (ownedGenForeignPtr fp))+ withGenArray :: (a -> (Ptr c -> IO r) -> IO r) -> [a] -> ((CUInt, Ptr (Ptr c)) -> IO r) -> IO r withGenArray m x f = withMany m x (`withArray` (\p -> f (fromIntegral $ length x, p))) @@ -1074,12 +982,12 @@ -- producer of a fresh 'QuantLib.Commodity.PricingPeriods' list -- every constructor instead -- *consumes* one via 'withCommodityTypeArray'). peekCommodityTypeArray :: Ptr CUInt -> Ptr (Ptr (Ptr CCommodityType)) -> IO [CommodityType]-peekCommodityTypeArray = peekPtrArray peekCommodityType+peekCommodityTypeArray = peekPtrArray freeUpcast peekCommodityType  withUnitOfMeasureArray :: [UnitOfMeasure] -> ((CUInt, Ptr (Ptr CUnitOfMeasure)) -> IO b) -> IO b withUnitOfMeasureArray = withGenArray withUnitOfMeasure peekUnitOfMeasureArray :: Ptr CUInt -> Ptr (Ptr (Ptr CUnitOfMeasure)) -> IO [UnitOfMeasure]-peekUnitOfMeasureArray = peekPtrArray peekUnitOfMeasure+peekUnitOfMeasureArray = peekPtrArray freeUpcast peekUnitOfMeasure  -- |A nullable-per-entry array of 'UnitOfMeasure's -- @SecondaryCosts@' per-entry unit of measure, -- present only for its @CommodityUnitCost@ alternative (null for its @Money@ alternative).@@ -1090,7 +998,7 @@ withCurrencyArray :: [Currency] -> ((CUInt, Ptr (Ptr CCurrency)) -> IO b) -> IO b withCurrencyArray = withGenArray withCurrency peekCurrencyArray :: Ptr CUInt -> Ptr (Ptr (Ptr CCurrency)) -> IO [Currency]-peekCurrencyArray = peekPtrArray peekCurrency+peekCurrencyArray = peekPtrArray freeUpcast peekCurrency  -- |The root of the hierarchy shown under t'GenQuote'. type Quote = GenQuote CQuote@@ -1139,7 +1047,7 @@ -- Haskell does not allow function arguments like [forall q.GenQuote q] -- let's at least provide a way to convert all quote classes to the most generic one asQuote :: GenQuote q -> IO Quote-asQuote = transferGenForeignPtr peekQuote . getQuote+asQuote = transferGenForeignPtr (pure . GenQuote) . getQuote peekQuote :: Ptr CQuote' -> IO Quote peekQuote = GenQuote <.> newCastForeignPtr withQuote :: GenQuote q -> (Ptr CQuote' -> IO b) -> IO b@@ -1249,6 +1157,7 @@ -- >       DigitalCoupon -- >         DigitalCmsCoupon -- >         DigitalCmsSpreadCoupon+-- >       FxResetCoupon -- >       IborCoupon -- >       MultipleResetsCoupon -- >       OvernightIndexedCoupon@@ -1256,6 +1165,7 @@ -- >       StrippedCappedFlooredCoupon -- >     CPICoupon -- >     YoYInflationCoupon+-- >   FxResetNotionalExchange -- >   IndexedCashFlow -- >     CPICashFlow -- >     EquityCashFlow@@ -1268,7 +1178,7 @@ foreign import ccall unsafe "ql.h &qlFreeCashFlow" qlFreeCashFlow :: FinalizerPtr CCashFlow' instance Finalizable CCashFlow' where finalize = qlFreeCashFlow asCashFlow :: GenCashFlow cf -> IO CashFlow-asCashFlow = transferGenForeignPtr peekCashFlow . getCashFlow+asCashFlow = transferGenForeignPtr (pure . GenCashFlow) . getCashFlow peekCashFlow :: Ptr CCashFlow' -> IO CashFlow peekCashFlow = GenCashFlow <.> newCastForeignPtr withCashFlow :: GenCashFlow cf -> (Ptr CCashFlow' -> IO b) -> IO b@@ -1289,7 +1199,7 @@ foreign import ccall "ql.h qlCouponAsCashFlow" qlCouponAsCashFlow :: Ptr CCoupon' -> IO (Ptr CCashFlow') instance Upcastable CCoupon' where {type Base CCoupon' = CCashFlow'; upcast = qlCouponAsCashFlow} asCoupon :: GenCoupon c -> IO Coupon-asCoupon = transferGenForeignPtr peekCoupon . peel . getCashFlow+asCoupon = transferGenForeignPtr newGenCoupon . peel . getCashFlow peekCoupon :: Ptr CCoupon' -> IO Coupon peekCoupon = newCastForeignPtr >=> newGenCoupon newGenCoupon :: GenForeignPtr c CCoupon' -> IO (GenCoupon c)@@ -1297,7 +1207,7 @@ withCoupon :: GenCoupon c -> (Ptr CCoupon' -> IO b) -> IO b withCoupon = withGenForeignPtr . peel . getCashFlow peekCouponArray :: Ptr CUInt -> Ptr (Ptr (Ptr CCoupon')) -> IO [Coupon]-peekCouponArray = peekPtrArray peekCoupon+peekCouponArray = peekPtrArray freeUpcast peekCoupon  data CFixedRateCoupon' type CFixedRateCoupon = ForeignPtr CFixedRateCoupon'@@ -1312,6 +1222,19 @@ withFixedRateCoupon :: FixedRateCoupon -> (Ptr CFixedRateCoupon' -> IO b) -> IO b withFixedRateCoupon = withForeignPtr . ptr . peel . getCashFlow +data CFxResetNotionalExchange'+type CFxResetNotionalExchange = ForeignPtr CFxResetNotionalExchange'+-- |A 'CashFlow' with its concrete native interface preserved.+type FxResetNotionalExchange = GenCashFlow CFxResetNotionalExchange+foreign import ccall unsafe "ql.h &qlFreeFxResetNotionalExchange" qlFreeFxResetNotionalExchange :: FinalizerPtr CFxResetNotionalExchange'+instance Finalizable CFxResetNotionalExchange' where finalize = qlFreeFxResetNotionalExchange+foreign import ccall "ql.h qlFxResetNotionalExchangeAsCashFlow" qlFxResetNotionalExchangeAsCashFlow :: Ptr CFxResetNotionalExchange' -> IO (Ptr CCashFlow')+instance Upcastable CFxResetNotionalExchange' where {type Base CFxResetNotionalExchange' = CCashFlow'; upcast = qlFxResetNotionalExchangeAsCashFlow}+peekFxResetNotionalExchange :: Ptr CFxResetNotionalExchange' -> IO FxResetNotionalExchange+peekFxResetNotionalExchange = GenCashFlow <.> newGenForeignPtr+withFxResetNotionalExchange :: FxResetNotionalExchange -> (Ptr CFxResetNotionalExchange' -> IO b) -> IO b+withFxResetNotionalExchange = withForeignPtr . ptr . getCashFlow+ data CIndexedCashFlow' -- |An 'IndexedCashFlow' or one of its leaves; see the hierarchy under t'GenCashFlow'. type GenIndexedCashFlow icf = GenCashFlow (AnyOf CIndexedCashFlow' icf)@@ -1384,7 +1307,7 @@ foreign import ccall "ql.h qlCouponLegAsLeg" qlCouponLegAsLeg :: Ptr CCouponLeg' -> IO (Ptr CLeg') instance Upcastable CCouponLeg' where {type Base CCouponLeg' = CLeg'; upcast = qlCouponLegAsLeg} asLeg :: GenLeg l -> IO Leg-asLeg = transferGenForeignPtr peekLeg . getLeg+asLeg = transferGenForeignPtr (pure . GenLeg) . getLeg peekLeg :: Ptr CLeg' -> IO Leg peekLeg = GenLeg <.> newCastForeignPtr withLeg :: GenLeg l -> (Ptr CLeg' -> IO b) -> IO b@@ -1410,7 +1333,7 @@ foreign import ccall unsafe "ql.h &qlFreeRateHelper" qlFreeRateHelper :: FinalizerPtr CRateHelper' instance Finalizable CRateHelper' where finalize = qlFreeRateHelper asRateHelper :: GenRateHelper rh -> IO RateHelper-asRateHelper = transferGenForeignPtr peekRateHelper . getRateHelper+asRateHelper = transferGenForeignPtr (pure . GenRateHelper) . getRateHelper peekRateHelper :: Ptr CRateHelper' -> IO RateHelper peekRateHelper = GenRateHelper <.> newCastForeignPtr withRateHelper :: GenRateHelper rh -> (Ptr CRateHelper' -> IO b) -> IO b@@ -1501,7 +1424,7 @@ foreign import ccall "ql.h qlBlackCalibrationHelperAsCalibrationHelper" qlBlackCalibrationHelperAsCalibrationHelper :: Ptr CBlackCalibrationHelper' -> IO (Ptr CCalibrationHelper') instance Upcastable CBlackCalibrationHelper' where {type Base CBlackCalibrationHelper' = CCalibrationHelper'; upcast = qlBlackCalibrationHelperAsCalibrationHelper} asCalibrationHelper :: GenCalibrationHelper ch -> IO CalibrationHelper-asCalibrationHelper = transferGenForeignPtr peekCalibrationHelper . getCalibrationHelper+asCalibrationHelper = transferGenForeignPtr (pure . GenCalibrationHelper) . getCalibrationHelper peekCalibrationHelper :: Ptr CCalibrationHelper' -> IO CalibrationHelper peekCalibrationHelper = GenCalibrationHelper <.> newCastForeignPtr withCalibrationHelper :: GenCalibrationHelper ch -> (Ptr CCalibrationHelper' -> IO b) -> IO b@@ -1511,7 +1434,7 @@ withGenCalibrationHelper :: GenBlackCalibrationHelper (ForeignPtr ch) -> (Ptr ch -> IO b) -> IO b withGenCalibrationHelper = withForeignPtr . ptr . peel . getCalibrationHelper asBlackCalibrationHelper :: GenBlackCalibrationHelper bch -> IO BlackCalibrationHelper-asBlackCalibrationHelper = transferGenForeignPtr peekBlackCalibrationHelper . peel . getCalibrationHelper+asBlackCalibrationHelper = transferGenForeignPtr newGenBlackCalibrationHelper . peel . getCalibrationHelper peekBlackCalibrationHelper :: Ptr CBlackCalibrationHelper' -> IO BlackCalibrationHelper peekBlackCalibrationHelper = newCastForeignPtr >=> newGenBlackCalibrationHelper withBlackCalibrationHelper :: GenBlackCalibrationHelper bch -> (Ptr CBlackCalibrationHelper' -> IO b) -> IO b@@ -1523,7 +1446,7 @@ withBlackCalibrationHelperArray :: [GenBlackCalibrationHelper bch] -> ((CUInt, Ptr (Ptr CBlackCalibrationHelper')) -> IO b) -> IO b withBlackCalibrationHelperArray = withGenArray withBlackCalibrationHelper peekBlackCalibrationHelperArray :: Ptr CUInt -> Ptr (Ptr (Ptr CBlackCalibrationHelper')) -> IO [BlackCalibrationHelper]-peekBlackCalibrationHelperArray = peekPtrArray peekBlackCalibrationHelper+peekBlackCalibrationHelperArray = peekPtrArray freeUpcast peekBlackCalibrationHelper  -- SwaptionHelper is only reachable as this concrete type when hasquant itself constructs it -- (Model.chs's swaptionHelper/swaptionHelperFromDate/swaptionHelperFromDates); a basket returned@@ -1562,7 +1485,7 @@ foreign import ccall "ql.h qlBlackScholesCalculatorAsBlackCalculator" qlBlackScholesCalculatorAsBlackCalculator :: Ptr CBlackScholesCalculator' -> IO (Ptr CBlackCalculator') instance Upcastable CBlackScholesCalculator' where {type Base CBlackScholesCalculator' = CBlackCalculator'; upcast = qlBlackScholesCalculatorAsBlackCalculator} asBlackCalculator :: GenBlackCalculator bc -> IO BlackCalculator-asBlackCalculator = transferGenForeignPtr peekBlackCalculator . getBlackCalculator+asBlackCalculator = transferGenForeignPtr (pure . GenBlackCalculator) . getBlackCalculator peekBlackCalculator :: Ptr CBlackCalculator' -> IO BlackCalculator peekBlackCalculator = GenBlackCalculator <.> newCastForeignPtr withBlackCalculator :: GenBlackCalculator bc -> (Ptr CBlackCalculator' -> IO b) -> IO b@@ -1617,7 +1540,7 @@  foreign import ccall safe "ql.h qlIndexName" qlIndexName :: Ptr CIndex' -> IO CString showIndex :: GenIndex idx -> String-showIndex = unsafePerformIO . (`withIndex` (qlIndexName >=> peekDynString))+showIndex = unsafePerformIO . mask_ . (`withIndex` (qlIndexName >=> peekDynString)) {-# NOINLINE showIndex #-}  instance Show (GenIndex idx) where show = showIndex@@ -1708,16 +1631,16 @@ instance Upcastable COvernightIndexedSwapIndex' where {type Base COvernightIndexedSwapIndex' = CSwapIndex'; upcast = qlOvernightIndexedSwapIndexAsSwapIndex}  asIndex :: GenIndex idx -> IO Index-asIndex = transferGenForeignPtr peekIndex . getIndex+asIndex = transferGenForeignPtr (pure . GenIndex) . getIndex withIndex :: GenIndex idx -> (Ptr CIndex' -> IO b) -> IO b withIndex = withGenForeignPtr . getIndex peekIndex :: Ptr CIndex' -> IO Index peekIndex = GenIndex <.> newCastForeignPtr-withIndexArray :: [Index] -> ((CUInt, Ptr (Ptr CIndex')) -> IO b) -> IO b+withIndexArray :: [GenIndex idx] -> ((CUInt, Ptr (Ptr CIndex')) -> IO b) -> IO b withIndexArray = withGenArray withIndex  asInterestRateIndex :: GenInterestRateIndex ridx -> IO InterestRateIndex-asInterestRateIndex = transferGenForeignPtr peekInterestRateIndex . peel . getIndex+asInterestRateIndex = transferGenForeignPtr newGenInterestRateIndex . peel . getIndex peekInterestRateIndex :: Ptr CInterestRateIndex' -> IO InterestRateIndex peekInterestRateIndex = newCastForeignPtr >=> newGenInterestRateIndex newGenInterestRateIndex :: GenForeignPtr ridx CInterestRateIndex' -> IO (GenInterestRateIndex ridx)@@ -1728,7 +1651,7 @@ withInterestRateIndexArray = withGenArray withInterestRateIndex  asInflationIndex :: GenInflationIndex iidx -> IO InflationIndex-asInflationIndex = transferGenForeignPtr peekInflationIndex . peel . getIndex+asInflationIndex = transferGenForeignPtr newGenInflationIndex . peel . getIndex peekInflationIndex :: Ptr CInflationIndex' -> IO InflationIndex peekInflationIndex = newCastForeignPtr >=> newGenInflationIndex newGenInflationIndex :: GenForeignPtr iidx CInflationIndex' -> IO (GenInflationIndex iidx)@@ -1756,7 +1679,7 @@ withBMAIndex = withForeignPtr . ptr . peel . getIndex  asIborIndex :: GenIborIndex ibor -> IO IborIndex-asIborIndex = transferGenForeignPtr peekIborIndex . peel . peel . getIndex+asIborIndex = transferGenForeignPtr newGenIborIndex . peel . peel . getIndex peekIborIndex :: Ptr CIborIndex' -> IO IborIndex peekIborIndex = newCastForeignPtr >=> newGenIborIndex withIborIndex :: GenIborIndex ibor -> (Ptr CIborIndex' -> IO b) -> IO b@@ -1772,7 +1695,7 @@ withOvernightIborIndex = withForeignPtr . ptr . peel . peel . getIndex  asSwapIndex :: GenSwapIndex sidx -> IO SwapIndex-asSwapIndex = transferGenForeignPtr peekSwapIndex . peel . peel . getIndex+asSwapIndex = transferGenForeignPtr newGenSwapIndex . peel . peel . getIndex peekSwapIndex :: Ptr CSwapIndex' -> IO SwapIndex peekSwapIndex = newCastForeignPtr >=> newGenSwapIndex withSwapIndex :: GenSwapIndex sidx -> (Ptr CSwapIndex' -> IO b) -> IO b@@ -1829,6 +1752,7 @@ data CRelinkableSwaptionVolatilityStructure' data CSabrSwaptionVolatilityCube' data CNoArbSabrSwaptionVolatilityCube'+data CZabrSwaptionVolatilityCube' data CInterpolatedSwaptionVolatilityCube' data CCapFloorTermVolatilityStructure' data CCapFloorTermVolCurve'@@ -1847,6 +1771,7 @@ data CRelinkableYieldTermStructure' data CCallableBondVolatilityStructure' data CDefaultProbabilityTermStructure'+data CAffineHazardRateCurve' data CZeroInflationTermStructure' data CYoYInflationTermStructure' data CCommodityCurve'@@ -1865,6 +1790,7 @@ -- >      RelinkableSwaptionVolatilityStructure -- >      SabrSwaptionVolatilityCube -- >      NoArbSabrSwaptionVolatilityCube+-- >      ZabrSwaptionVolatilityCube -- >      InterpolatedSwaptionVolatilityCube -- >      SwaptionVolatilityMatrix -- >    CapFloorTermVolatilityStructure*@@ -1879,7 +1805,8 @@ -- >    YoYOptionletVolatilitySurface -- >    CPIVolatilitySurface -- >  CallableBondVolatilityStructure--- >  DefaultProbabilityTermStructure+-- >  DefaultProbabilityTermStructure = GenDefaultProbabilityTermStructure d = GenTermStructure t+-- >    AffineHazardRateCurve = GenDefaultProbabilityTermStructure ... -- >  ZeroInflationTermStructure -- >  YoYInflationTermStructure -- >  YoYCapFloorTermPriceSurface@@ -1970,6 +1897,11 @@ -- reasoning and identical getter surface. -- See the hierarchy under t'GenTermStructure'. type NoArbSabrSwaptionVolatilityCube = GenSwaptionVolatilityStructure CNoArbSabrSwaptionVolatilityCube+type CZabrSwaptionVolatilityCube = ForeignPtr CZabrSwaptionVolatilityCube'+-- | A ZABR-calibrated swaption vol cube: the same @XabrSwaptionVolatilityCube@ template as+-- 'SabrSwaptionVolatilityCube' with the default ZABR model policy and a fifth (gamma) parameter.+-- See the hierarchy under t'GenTermStructure'.+type ZabrSwaptionVolatilityCube = GenSwaptionVolatilityStructure CZabrSwaptionVolatilityCube type CInterpolatedSwaptionVolatilityCube = ForeignPtr CInterpolatedSwaptionVolatilityCube' -- | The non-SABR, linear-interpolation swaption vol cube. It /is/ a -- 'SwaptionVolatilityStructure' -- pass it anywhere one is expected. Gets the same dedicated-leaf@@ -2081,13 +2013,18 @@ type CCallableBondVolatilityStructure = ForeignPtr CCallableBondVolatilityStructure' -- |A 'TermStructure'; see the hierarchy under t'GenTermStructure'. type CallableBondVolatilityStructure = GenTermStructure CCallableBondVolatilityStructure+-- |A 'DefaultProbabilityTermStructure' or one of its leaves; see the hierarchy under t'GenTermStructure'.+type GenDefaultProbabilityTermStructure d = GenTermStructure (AnyOf CDefaultProbabilityTermStructure' d) type CDefaultProbabilityTermStructure = ForeignPtr CDefaultProbabilityTermStructure' -- |A 'TermStructure'; see the hierarchy under t'GenTermStructure'.-type DefaultProbabilityTermStructure = GenTermStructure CDefaultProbabilityTermStructure-withDefaultProbabilityTermStructureArray :: [DefaultProbabilityTermStructure] -> ((CUInt, Ptr (Ptr CDefaultProbabilityTermStructure')) -> IO b) -> IO b-withDefaultProbabilityTermStructureArray = withGenArray withGenTermStructure-withDefaultProbabilityTermStructureArrayRaw :: [DefaultProbabilityTermStructure] -> (Ptr (Ptr CDefaultProbabilityTermStructure') -> IO b) -> IO b-withDefaultProbabilityTermStructureArrayRaw x f = withMany withGenTermStructure x (`withArray` f)+type DefaultProbabilityTermStructure = GenDefaultProbabilityTermStructure CDefaultProbabilityTermStructure+type CAffineHazardRateCurve = ForeignPtr CAffineHazardRateCurve'+-- |A 'DefaultProbabilityTermStructure'; see the hierarchy under t'GenTermStructure'.+type AffineHazardRateCurve = GenDefaultProbabilityTermStructure CAffineHazardRateCurve+withDefaultProbabilityTermStructureArray :: [GenDefaultProbabilityTermStructure d] -> ((CUInt, Ptr (Ptr CDefaultProbabilityTermStructure')) -> IO b) -> IO b+withDefaultProbabilityTermStructureArray = withGenArray withDefaultProbabilityTermStructure+withDefaultProbabilityTermStructureArrayRaw :: [GenDefaultProbabilityTermStructure d] -> (Ptr (Ptr CDefaultProbabilityTermStructure') -> IO b) -> IO b+withDefaultProbabilityTermStructureArrayRaw x f = withMany withDefaultProbabilityTermStructure x (`withArray` f)  -- CREDIT: separate types encode tranche-loss and digital-loss capabilities. data CDefaultProbKey@@ -2210,6 +2147,7 @@ foreign import ccall unsafe "ql.h &qlFreeRelinkableSwaptionVolatilityStructure" qlFreeRelinkableSwaptionVolatilityStructure :: FinalizerPtr CRelinkableSwaptionVolatilityStructure' foreign import ccall unsafe "ql.h &qlFreeSabrSwaptionVolatilityCube" qlFreeSabrSwaptionVolatilityCube :: FinalizerPtr CSabrSwaptionVolatilityCube' foreign import ccall unsafe "ql.h &qlFreeNoArbSabrSwaptionVolatilityCube" qlFreeNoArbSabrSwaptionVolatilityCube :: FinalizerPtr CNoArbSabrSwaptionVolatilityCube'+foreign import ccall unsafe "ql.h &qlFreeZabrSwaptionVolatilityCube" qlFreeZabrSwaptionVolatilityCube :: FinalizerPtr CZabrSwaptionVolatilityCube' foreign import ccall unsafe "ql.h &qlFreeInterpolatedSwaptionVolatilityCube" qlFreeInterpolatedSwaptionVolatilityCube :: FinalizerPtr CInterpolatedSwaptionVolatilityCube' foreign import ccall unsafe "ql.h &qlFreeSwaptionVolatilityMatrix" qlFreeSwaptionVolatilityMatrix :: FinalizerPtr CSwaptionVolatilityMatrix' foreign import ccall unsafe "ql.h &qlFreeCapFloorTermVolatilityStructure" qlFreeCapFloorTermVolatilityStructure :: FinalizerPtr CCapFloorTermVolatilityStructure'@@ -2233,6 +2171,7 @@ foreign import ccall unsafe "ql.h &qlFreeRelinkableYieldTermStructure" qlFreeRelinkableYieldTermStructure :: FinalizerPtr CRelinkableYieldTermStructure' foreign import ccall unsafe "ql.h &qlFreeCallableBondVolatilityStructure" qlFreeCallableBondVolatilityStructure :: FinalizerPtr CCallableBondVolatilityStructure' foreign import ccall unsafe "ql.h &qlFreeDefaultProbabilityTermStructure" qlFreeDefaultProbabilityTermStructure :: FinalizerPtr CDefaultProbabilityTermStructure'+foreign import ccall unsafe "ql.h &qlFreeAffineHazardRateCurve" qlFreeAffineHazardRateCurve :: FinalizerPtr CAffineHazardRateCurve' foreign import ccall unsafe "ql.h &qlFreeZeroInflationTermStructure" qlFreeZeroInflationTermStructure :: FinalizerPtr CZeroInflationTermStructure' foreign import ccall unsafe "ql.h &qlFreeYoYInflationTermStructure" qlFreeYoYInflationTermStructure :: FinalizerPtr CYoYInflationTermStructure' foreign import ccall unsafe "ql.h &qlFreeYoYCapFloorTermPriceSurface" qlFreeYoYCapFloorTermPriceSurface :: FinalizerPtr CYoYCapFloorTermPriceSurface'@@ -2246,6 +2185,7 @@ instance Finalizable CRelinkableSwaptionVolatilityStructure' where finalize = qlFreeRelinkableSwaptionVolatilityStructure instance Finalizable CSabrSwaptionVolatilityCube' where finalize = qlFreeSabrSwaptionVolatilityCube instance Finalizable CNoArbSabrSwaptionVolatilityCube' where finalize = qlFreeNoArbSabrSwaptionVolatilityCube+instance Finalizable CZabrSwaptionVolatilityCube' where finalize = qlFreeZabrSwaptionVolatilityCube instance Finalizable CInterpolatedSwaptionVolatilityCube' where finalize = qlFreeInterpolatedSwaptionVolatilityCube instance Finalizable CSwaptionVolatilityMatrix' where finalize = qlFreeSwaptionVolatilityMatrix instance Finalizable CCapFloorTermVolatilityStructure' where finalize = qlFreeCapFloorTermVolatilityStructure@@ -2269,6 +2209,7 @@ instance Finalizable CRelinkableYieldTermStructure' where finalize = qlFreeRelinkableYieldTermStructure instance Finalizable CCallableBondVolatilityStructure' where finalize = qlFreeCallableBondVolatilityStructure instance Finalizable CDefaultProbabilityTermStructure' where finalize = qlFreeDefaultProbabilityTermStructure+instance Finalizable CAffineHazardRateCurve' where finalize = qlFreeAffineHazardRateCurve instance Finalizable CZeroInflationTermStructure' where finalize = qlFreeZeroInflationTermStructure instance Finalizable CYoYInflationTermStructure' where finalize = qlFreeYoYInflationTermStructure instance Finalizable CYoYCapFloorTermPriceSurface' where finalize = qlFreeYoYCapFloorTermPriceSurface@@ -2288,6 +2229,7 @@ foreign import ccall "ql.h qlRelinkableSwaptionVolatilityStructureAsSwaptionVolatilityStructure" qlRelinkableSwaptionVolatilityStructureAsSwaptionVolatilityStructure :: Ptr CRelinkableSwaptionVolatilityStructure' -> IO (Ptr CSwaptionVolatilityStructure') foreign import ccall "ql.h qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure" qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure :: Ptr CSabrSwaptionVolatilityCube' -> IO (Ptr CSwaptionVolatilityStructure') foreign import ccall "ql.h qlNoArbSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure" qlNoArbSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure :: Ptr CNoArbSabrSwaptionVolatilityCube' -> IO (Ptr CSwaptionVolatilityStructure')+foreign import ccall "ql.h qlZabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure" qlZabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure :: Ptr CZabrSwaptionVolatilityCube' -> IO (Ptr CSwaptionVolatilityStructure') foreign import ccall "ql.h qlInterpolatedSwaptionVolatilityCubeAsSwaptionVolatilityStructure" qlInterpolatedSwaptionVolatilityCubeAsSwaptionVolatilityStructure :: Ptr CInterpolatedSwaptionVolatilityCube' -> IO (Ptr CSwaptionVolatilityStructure') foreign import ccall "ql.h qlSwaptionVolatilityMatrixAsSwaptionVolatilityStructure" qlSwaptionVolatilityMatrixAsSwaptionVolatilityStructure :: Ptr CSwaptionVolatilityMatrix' -> IO (Ptr CSwaptionVolatilityStructure') foreign import ccall "ql.h qlCapFloorTermVolatilityStructureAsVolatilityTermStructure" qlCapFloorTermVolatilityStructureAsVolatilityTermStructure :: Ptr CCapFloorTermVolatilityStructure' -> IO (Ptr CVolatilityTermStructure')@@ -2303,6 +2245,7 @@ foreign import ccall "ql.h qlCPIVolatilitySurfaceAsVolatilityTermStructure" qlCPIVolatilitySurfaceAsVolatilityTermStructure :: Ptr CCPIVolatilitySurface' -> IO (Ptr CVolatilityTermStructure') foreign import ccall "ql.h qlCallableBondVolatilityStructureAsTermStructure" qlCallableBondVolatilityStructureAsTermStructure :: Ptr CCallableBondVolatilityStructure' -> IO (Ptr CTermStructure') foreign import ccall "ql.h qlDefaultProbabilityTermStructureAsTermStructure" qlDefaultProbabilityTermStructureAsTermStructure :: Ptr CDefaultProbabilityTermStructure' -> IO (Ptr CTermStructure')+foreign import ccall "ql.h qlAffineHazardRateCurveAsDefaultProbabilityTermStructure" qlAffineHazardRateCurveAsDefaultProbabilityTermStructure :: Ptr CAffineHazardRateCurve' -> IO (Ptr CDefaultProbabilityTermStructure') foreign import ccall "ql.h qlZeroInflationTermStructureAsTermStructure" qlZeroInflationTermStructureAsTermStructure :: Ptr CZeroInflationTermStructure' -> IO (Ptr CTermStructure') foreign import ccall "ql.h qlYoYInflationTermStructureAsTermStructure" qlYoYInflationTermStructureAsTermStructure :: Ptr CYoYInflationTermStructure' -> IO (Ptr CTermStructure') foreign import ccall "ql.h qlYoYCapFloorTermPriceSurfaceAsTermStructure" qlYoYCapFloorTermPriceSurfaceAsTermStructure :: Ptr CYoYCapFloorTermPriceSurface' -> IO (Ptr CTermStructure')@@ -2314,6 +2257,7 @@ instance Upcastable CVolatilityTermStructure' where {type Base CVolatilityTermStructure' = CTermStructure'; upcast = qlVolatilityTermStructureAsTermStructure} instance Upcastable CCallableBondVolatilityStructure' where {type Base CCallableBondVolatilityStructure' = CTermStructure'; upcast = qlCallableBondVolatilityStructureAsTermStructure} instance Upcastable CDefaultProbabilityTermStructure' where {type Base CDefaultProbabilityTermStructure' = CTermStructure'; upcast = qlDefaultProbabilityTermStructureAsTermStructure}+instance Upcastable CAffineHazardRateCurve' where {type Base CAffineHazardRateCurve' = CDefaultProbabilityTermStructure'; upcast = qlAffineHazardRateCurveAsDefaultProbabilityTermStructure} instance Upcastable CZeroInflationTermStructure' where {type Base CZeroInflationTermStructure' = CTermStructure'; upcast = qlZeroInflationTermStructureAsTermStructure} instance Upcastable CYoYInflationTermStructure' where {type Base CYoYInflationTermStructure' = CTermStructure'; upcast = qlYoYInflationTermStructureAsTermStructure} instance Upcastable CYoYCapFloorTermPriceSurface' where {type Base CYoYCapFloorTermPriceSurface' = CTermStructure'; upcast = qlYoYCapFloorTermPriceSurfaceAsTermStructure}@@ -2329,6 +2273,7 @@ instance Upcastable CRelinkableSwaptionVolatilityStructure' where {type Base CRelinkableSwaptionVolatilityStructure' = CSwaptionVolatilityStructure'; upcast = qlRelinkableSwaptionVolatilityStructureAsSwaptionVolatilityStructure} instance Upcastable CSabrSwaptionVolatilityCube' where {type Base CSabrSwaptionVolatilityCube' = CSwaptionVolatilityStructure'; upcast = qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure} instance Upcastable CNoArbSabrSwaptionVolatilityCube' where {type Base CNoArbSabrSwaptionVolatilityCube' = CSwaptionVolatilityStructure'; upcast = qlNoArbSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure}+instance Upcastable CZabrSwaptionVolatilityCube' where {type Base CZabrSwaptionVolatilityCube' = CSwaptionVolatilityStructure'; upcast = qlZabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure} instance Upcastable CInterpolatedSwaptionVolatilityCube' where {type Base CInterpolatedSwaptionVolatilityCube' = CSwaptionVolatilityStructure'; upcast = qlInterpolatedSwaptionVolatilityCubeAsSwaptionVolatilityStructure} instance Upcastable CSwaptionVolatilityMatrix' where {type Base CSwaptionVolatilityMatrix' = CSwaptionVolatilityStructure'; upcast = qlSwaptionVolatilityMatrixAsSwaptionVolatilityStructure} instance Upcastable CCapFloorTermVolatilityStructure' where {type Base CCapFloorTermVolatilityStructure' = CVolatilityTermStructure'; upcast = qlCapFloorTermVolatilityStructureAsVolatilityTermStructure}@@ -2343,7 +2288,7 @@ instance Upcastable CYoYOptionletVolatilitySurface' where {type Base CYoYOptionletVolatilitySurface' = CVolatilityTermStructure'; upcast = qlYoYOptionletVolatilitySurfaceAsVolatilityTermStructure} instance Upcastable CCPIVolatilitySurface' where {type Base CCPIVolatilitySurface' = CVolatilityTermStructure'; upcast = qlCPIVolatilitySurfaceAsVolatilityTermStructure} asTermStructure :: GenTermStructure t -> IO TermStructure-asTermStructure = transferGenForeignPtr peekTermStructure . getTermStructure+asTermStructure = transferGenForeignPtr (pure . GenTermStructure) . getTermStructure withTermStructure :: GenTermStructure t  -> (Ptr CTermStructure' -> IO b) -> IO b withTermStructure = withGenForeignPtr . getTermStructure withGenTermStructure :: GenTermStructure (ForeignPtr t) -> (Ptr t -> IO b) -> IO b@@ -2352,7 +2297,7 @@ peekTermStructure = GenTermStructure <.> newCastForeignPtr  asVolatilityTermStructure :: GenVolatilityTermStructure v -> IO VolatilityTermStructure-asVolatilityTermStructure = transferGenForeignPtr peekVolatilityTermStructure . peel . getTermStructure+asVolatilityTermStructure = transferGenForeignPtr newGenVolatilityTermStructure . peel . getTermStructure peekVolatilityTermStructure :: Ptr CVolatilityTermStructure' -> IO VolatilityTermStructure peekVolatilityTermStructure = newCastForeignPtr >=> newGenVolatilityTermStructure peekGenVolatilityTermStructure :: (Finalizable v, Upcastable v, Base v ~ CVolatilityTermStructure') => Ptr v -> IO (GenVolatilityTermStructure (ForeignPtr v))@@ -2365,7 +2310,7 @@ newGenVolatilityTermStructure = pure . GenTermStructure . newAnyOf  asBlackVolTermStructure :: GenBlackVolTermStructure bv -> IO BlackVolTermStructure-asBlackVolTermStructure = transferGenForeignPtr peekBlackVolTermStructure . peel . peel . getTermStructure+asBlackVolTermStructure = transferGenForeignPtr newGenBlackVolTermStructure . peel . peel . getTermStructure peekBlackVolTermStructure :: Ptr CBlackVolTermStructure' -> IO BlackVolTermStructure peekBlackVolTermStructure = newCastForeignPtr >=> newGenBlackVolTermStructure withBlackVolTermStructure :: GenBlackVolTermStructure bv -> (Ptr CBlackVolTermStructure' -> IO b) -> IO b@@ -2424,6 +2369,10 @@ peekNoArbSabrSwaptionVolatilityCube = newGenForeignPtr >=> newGenSwaptionVolatilityStructure withNoArbSabrSwaptionVolatilityCube :: NoArbSabrSwaptionVolatilityCube -> (Ptr CNoArbSabrSwaptionVolatilityCube' -> IO b) -> IO b withNoArbSabrSwaptionVolatilityCube = withForeignPtr . ptr . peel . peel . getTermStructure+peekZabrSwaptionVolatilityCube :: Ptr CZabrSwaptionVolatilityCube' -> IO ZabrSwaptionVolatilityCube+peekZabrSwaptionVolatilityCube = newGenForeignPtr >=> newGenSwaptionVolatilityStructure+withZabrSwaptionVolatilityCube :: ZabrSwaptionVolatilityCube -> (Ptr CZabrSwaptionVolatilityCube' -> IO b) -> IO b+withZabrSwaptionVolatilityCube = withForeignPtr . ptr . peel . peel . getTermStructure peekInterpolatedSwaptionVolatilityCube :: Ptr CInterpolatedSwaptionVolatilityCube' -> IO InterpolatedSwaptionVolatilityCube peekInterpolatedSwaptionVolatilityCube = newGenForeignPtr >=> newGenSwaptionVolatilityStructure withInterpolatedSwaptionVolatilityCube :: InterpolatedSwaptionVolatilityCube -> (Ptr CInterpolatedSwaptionVolatilityCube' -> IO b) -> IO b@@ -2484,10 +2433,24 @@ withMaybeLocalVolTermStructure x f = maybe (f nullPtr) (`withGenLocalVolTermStructure` f) x peekCallableBondVolatilityStructure :: Ptr CCallableBondVolatilityStructure' -> IO CallableBondVolatilityStructure peekCallableBondVolatilityStructure = GenTermStructure <.> newGenForeignPtr+asDefaultProbabilityTermStructure :: GenDefaultProbabilityTermStructure d -> IO DefaultProbabilityTermStructure+asDefaultProbabilityTermStructure = transferGenForeignPtr newGenDefaultProbabilityTermStructure . peel . getTermStructure peekDefaultProbabilityTermStructure :: Ptr CDefaultProbabilityTermStructure' -> IO DefaultProbabilityTermStructure-peekDefaultProbabilityTermStructure = GenTermStructure <.> newGenForeignPtr-withMaybeDefaultProbabilityTermStructure :: Maybe DefaultProbabilityTermStructure -> (Ptr CDefaultProbabilityTermStructure' -> IO b) -> IO b-withMaybeDefaultProbabilityTermStructure x f = maybe (f nullPtr) (`withGenTermStructure` f) x+peekDefaultProbabilityTermStructure = newCastForeignPtr >=> newGenDefaultProbabilityTermStructure+withDefaultProbabilityTermStructure :: GenDefaultProbabilityTermStructure d -> (Ptr CDefaultProbabilityTermStructure' -> IO b) -> IO b+withDefaultProbabilityTermStructure = withGenForeignPtr . peel . getTermStructure+withMaybeDefaultProbabilityTermStructure :: Maybe (GenDefaultProbabilityTermStructure d) -> (Ptr CDefaultProbabilityTermStructure' -> IO b) -> IO b+withMaybeDefaultProbabilityTermStructure x f = maybe (f nullPtr) (`withDefaultProbabilityTermStructure` f) x+newGenDefaultProbabilityTermStructure :: GenForeignPtr d CDefaultProbabilityTermStructure' -> IO (GenDefaultProbabilityTermStructure d)+newGenDefaultProbabilityTermStructure = pure . GenTermStructure . newAnyOf+peekAffineHazardRateCurve :: Ptr CAffineHazardRateCurve' -> IO AffineHazardRateCurve+peekAffineHazardRateCurve = newGenForeignPtr >=> newGenDefaultProbabilityTermStructure+-- | Reach the concrete leaf itself, for 'QuantLib.TermStructure.Credit.conditionalSurvivalProbability'+-- (declared on the underlying @OneFactorAffineSurvivalStructure@, not the generic+-- @DefaultProbabilityTermStructure@ interface). Ordinary curve arguments go through+-- 'withDefaultProbabilityTermStructure' instead, which upcasts.+withAffineHazardRateCurve :: AffineHazardRateCurve -> (Ptr CAffineHazardRateCurve' -> IO b) -> IO b+withAffineHazardRateCurve = withForeignPtr . ptr . peel . getTermStructure peekZeroInflationTermStructure :: Ptr CZeroInflationTermStructure' -> IO ZeroInflationTermStructure peekZeroInflationTermStructure = GenTermStructure <.> newGenForeignPtr withMaybeZeroInflationTermStructure :: Maybe ZeroInflationTermStructure -> (Ptr CZeroInflationTermStructure' -> IO b) -> IO b@@ -2513,7 +2476,7 @@   | otherwise = Just <$> peekCommodityCurve p  asYieldTermStructure :: GenYieldTermStructure y -> IO YieldTermStructure-asYieldTermStructure = transferGenForeignPtr peekYieldTermStructure . peel . getTermStructure+asYieldTermStructure = transferGenForeignPtr newGenYieldTermStructure . peel . getTermStructure peekYieldTermStructure :: Ptr CYieldTermStructure' -> IO YieldTermStructure peekYieldTermStructure = newCastForeignPtr >=> newGenYieldTermStructure withYieldTermStructure :: GenYieldTermStructure y -> (Ptr CYieldTermStructure' -> IO b) -> IO b@@ -2720,7 +2683,7 @@ instance Upcastable CGeneralizedBlackScholesProcess' where {type Base CGeneralizedBlackScholesProcess' = CStochasticProcess1D'; upcast = qlGeneralizedBlackScholesProcessAsStochasticProcess1D} instance Upcastable CBlackProcess' where {type Base CBlackProcess' = CGeneralizedBlackScholesProcess'; upcast = qlBlackProcessAsGeneralizedBlackScholesProcess} asStochasticProcess :: GenStochasticProcess p -> IO StochasticProcess-asStochasticProcess = transferGenForeignPtr peekStochasticProcess . getStochasticProcess+asStochasticProcess = transferGenForeignPtr (pure . GenStochasticProcess) . getStochasticProcess peekStochasticProcess :: Ptr CStochasticProcess' -> IO StochasticProcess peekStochasticProcess = GenStochasticProcess <.> newCastForeignPtr withStochasticProcess :: GenStochasticProcess p -> (Ptr CStochasticProcess' -> IO b) -> IO b@@ -2744,7 +2707,7 @@ peekG2ForwardProcess :: Ptr CG2ForwardProcess' -> IO G2ForwardProcess peekG2ForwardProcess = GenStochasticProcess <.> newGenForeignPtr asHestonProcess :: GenHestonProcess hp -> IO HestonProcess-asHestonProcess = transferGenForeignPtr peekHestonProcess . peel . getStochasticProcess+asHestonProcess = transferGenForeignPtr newGenHestonProcess . peel . getStochasticProcess peekHestonProcess :: Ptr CHestonProcess' -> IO HestonProcess peekHestonProcess = newCastForeignPtr >=> newGenHestonProcess withHestonProcess :: GenHestonProcess hp -> (Ptr CHestonProcess' -> IO b) -> IO b@@ -2758,7 +2721,7 @@ peekGenHestonProcess :: (Finalizable hp, Upcastable hp, Base hp ~ CHestonProcess') => Ptr hp -> IO (GenHestonProcess (ForeignPtr hp)) peekGenHestonProcess = newGenForeignPtr >=> newGenHestonProcess asStochasticProcess1D :: GenStochasticProcess1D p1d -> IO StochasticProcess1D-asStochasticProcess1D = transferGenForeignPtr peekStochasticProcess1D . peel . getStochasticProcess+asStochasticProcess1D = transferGenForeignPtr newGenStochasticProcess1D . peel . getStochasticProcess peekStochasticProcess1D :: Ptr CStochasticProcess1D' -> IO StochasticProcess1D peekStochasticProcess1D = newCastForeignPtr >=> newGenStochasticProcess1D withStochasticProcess1D :: GenStochasticProcess1D p1d -> (Ptr CStochasticProcess1D' -> IO b) -> IO b@@ -2786,7 +2749,7 @@ peekVarianceGammaProcess :: Ptr CVarianceGammaProcess' -> IO VarianceGammaProcess peekVarianceGammaProcess = peekGenStochasticProcess1D asGeneralizedBlackScholesProcess :: GenGeneralizedBlackScholesProcess gbs -> IO GeneralizedBlackScholesProcess-asGeneralizedBlackScholesProcess = transferGenForeignPtr peekGeneralizedBlackScholesProcess . peel . peel . getStochasticProcess+asGeneralizedBlackScholesProcess = transferGenForeignPtr newGenGeneralizedBlackScholesProcess . peel . peel . getStochasticProcess peekGeneralizedBlackScholesProcess :: Ptr CGeneralizedBlackScholesProcess' -> IO GeneralizedBlackScholesProcess peekGeneralizedBlackScholesProcess = newCastForeignPtr >=> newGenGeneralizedBlackScholesProcess withGeneralizedBlackScholesProcess :: GenGeneralizedBlackScholesProcess gbs -> (Ptr CGeneralizedBlackScholesProcess' -> IO b) -> IO b@@ -2842,6 +2805,19 @@ data CGsr' data CMarkovFunctional' data CPiecewiseTimeDependentHestonModel'+data CRoughHestonModel'+type CRoughHestonModel = ForeignPtr CRoughHestonModel'+-- |A 'CalibratedModel' with its concrete native interface preserved.+type RoughHestonModel = GenCalibratedModel CRoughHestonModel+foreign import ccall unsafe "ql.h &qlFreeRoughHestonModel" qlFreeRoughHestonModel :: FinalizerPtr CRoughHestonModel'+instance Finalizable CRoughHestonModel' where finalize = qlFreeRoughHestonModel+foreign import ccall "ql.h qlRoughHestonModelAsCalibratedModel" qlRoughHestonModelAsCalibratedModel :: Ptr CRoughHestonModel' -> IO (Ptr CCalibratedModel')+instance Upcastable CRoughHestonModel' where {type Base CRoughHestonModel' = CCalibratedModel'; upcast = qlRoughHestonModelAsCalibratedModel}+peekRoughHestonModel :: Ptr CRoughHestonModel' -> IO RoughHestonModel+peekRoughHestonModel = GenCalibratedModel <.> newGenForeignPtr+withRoughHestonModel :: RoughHestonModel -> (Ptr CRoughHestonModel' -> IO b) -> IO b+withRoughHestonModel = withForeignPtr . ptr . getCalibratedModel+ data CHestonModel' data CShortRateModel' data CBatesModel'@@ -2857,6 +2833,7 @@ -- >  LiborForwardModel + AffineModel -- >  GJRGARCHModel -- >  PiecewiseTimeDependentHestonModel+-- >  RoughHestonModel -- >  HestonModel -- >    BatesModel -- >      BatesDetJumpModel@@ -2985,7 +2962,7 @@ instance Upcastable CHullWhite' where {type Base CHullWhite' = COneFactorAffineModel'; upcast = qlHullWhiteAsOneFactorAffineModel} instance Upcastable CG2' where {type Base CG2' = CShortRateModel'; upcast = qlG2AsShortRateModel} asCalibratedModel :: GenCalibratedModel m -> IO CalibratedModel-asCalibratedModel = transferGenForeignPtr peekCalibratedModel . getCalibratedModel+asCalibratedModel = transferGenForeignPtr (pure . GenCalibratedModel) . getCalibratedModel peekCalibratedModel :: Ptr CCalibratedModel' -> IO CalibratedModel peekCalibratedModel = GenCalibratedModel <.> newCastForeignPtr withCalibratedModel :: GenCalibratedModel m -> (Ptr CCalibratedModel' -> IO b) -> IO b@@ -3004,7 +2981,7 @@ peekPiecewiseTimeDependentHestonModel = GenCalibratedModel <.> newGenForeignPtr  asHestonModel :: GenHestonModel hm -> IO HestonModel-asHestonModel = transferGenForeignPtr peekHestonModel . peel . getCalibratedModel+asHestonModel = transferGenForeignPtr newGenHestonModel . peel . getCalibratedModel peekHestonModel :: Ptr CHestonModel' -> IO HestonModel peekHestonModel = newCastForeignPtr >=> newGenHestonModel withHestonModel :: GenHestonModel hm -> (Ptr CHestonModel' -> IO b) -> IO b@@ -3013,7 +2990,7 @@ newGenHestonModel = pure . GenCalibratedModel . newAnyOf  asShortRateModel :: GenShortRateModel sm -> IO ShortRateModel-asShortRateModel  = transferGenForeignPtr peekShortRateModel . peel . getCalibratedModel+asShortRateModel  = transferGenForeignPtr newGenShortRateModel . peel . getCalibratedModel peekShortRateModel :: Ptr CShortRateModel' -> IO ShortRateModel peekShortRateModel = newCastForeignPtr >=> newGenShortRateModel withShortRateModel :: GenShortRateModel sm -> (Ptr CShortRateModel' -> IO b) -> IO b@@ -3024,7 +3001,7 @@ peekGenShortRateModel = newGenForeignPtr >=> newGenShortRateModel  asBatesModel :: GenBatesModel bm -> IO BatesModel-asBatesModel = transferGenForeignPtr peekBatesModel . peel . peel . getCalibratedModel+asBatesModel = transferGenForeignPtr newGenBatesModel . peel . peel . getCalibratedModel peekBatesModel :: Ptr CBatesModel' -> IO BatesModel peekBatesModel = newCastForeignPtr >=> newGenBatesModel withBatesModel :: GenBatesModel bm -> (Ptr CBatesModel' -> IO b) -> IO b@@ -3037,7 +3014,7 @@ withBatesDetJumpModel = withForeignPtr . ptr . peel . peel . getCalibratedModel  asBatesDoubleExpModel :: GenBatesDoubleExpModel bdem -> IO BatesDoubleExpModel-asBatesDoubleExpModel = transferGenForeignPtr peekBatesDoubleExpModel . peel . peel . getCalibratedModel+asBatesDoubleExpModel = transferGenForeignPtr newGenBatesDoubleExpModel . peel . peel . getCalibratedModel peekBatesDoubleExpModel :: Ptr CBatesDoubleExpModel' -> IO BatesDoubleExpModel peekBatesDoubleExpModel = newCastForeignPtr >=> newGenBatesDoubleExpModel withBatesDoubleExpModel :: GenBatesDoubleExpModel bdem -> (Ptr CBatesDoubleExpModel' -> IO b) -> IO b@@ -3050,7 +3027,7 @@ withBatesDoubleExpDetJumpModel = withForeignPtr . ptr . peel . peel . getCalibratedModel  asOneFactorAffineModel :: GenOneFactorAffineModel om -> IO OneFactorAffineModel-asOneFactorAffineModel = transferGenForeignPtr peekOneFactorAffineModel . peel . peel . getCalibratedModel+asOneFactorAffineModel = transferGenForeignPtr newGenOneFactorAffineModel . peel . peel . getCalibratedModel peekOneFactorAffineModel :: Ptr COneFactorAffineModel' -> IO OneFactorAffineModel peekOneFactorAffineModel = newCastForeignPtr >=> newGenOneFactorAffineModel withOneFactorAffineModel :: GenOneFactorAffineModel om -> (Ptr COneFactorAffineModel' -> IO b) -> IO b@@ -3140,17 +3117,18 @@ -- >  Swap* -- >    FixedVsFloatingSwap* -- >      VanillaSwap+-- >      OvernightIndexedSwap -- >    IrregularSwap -- >    NonstandardSwap -- >    FloatFloatSwap -- >    AssetSwap -- >    BMASwap--- >    OvernightIndexedSwap -- >    ZeroCouponInflationSwap -- >    YearOnYearInflationSwap -- >    CPISwap -- >    ZeroCouponSwap -- >    EquityTotalReturnSwap+-- >    MtMCrossCurrencyBasisSwap -- >    ConstNotionalCrossCurrencySwap -- >      ConstNotionalCrossCurrencyBasisSwap -- >      ConstNotionalCrossCurrencyFixedVsFloatingSwap@@ -3177,7 +3155,7 @@ foreign import ccall unsafe "ql.h &qlFreeInstrument" qlFreeInstrument :: FinalizerPtr CInstrument' instance Finalizable CInstrument' where finalize = qlFreeInstrument asInstrument :: GenInstrument i -> IO Instrument-asInstrument = transferGenForeignPtr peekInstrument . getInstrument+asInstrument = transferGenForeignPtr (pure . GenInstrument) . getInstrument peekInstrument :: Ptr CInstrument' -> IO Instrument peekInstrument = GenInstrument <.> newCastForeignPtr withInstrument :: GenInstrument i -> (Ptr CInstrument' -> IO b) -> IO b@@ -3314,7 +3292,7 @@ foreign import ccall "ql.h qlForwardAsInstrument" qlForwardAsInstrument :: Ptr CForward' -> IO (Ptr CInstrument') instance Upcastable CForward' where {type Base CForward' = CInstrument'; upcast = qlForwardAsInstrument} asForward :: GenForward f -> IO Forward-asForward = transferGenForeignPtr peekForward . peel . getInstrument+asForward = transferGenForeignPtr newGenForward . peel . getInstrument peekForward :: Ptr CForward' -> IO Forward peekForward = newCastForeignPtr >=> newGenForward withForward :: GenForward f -> (Ptr CForward' -> IO b) -> IO b@@ -3336,7 +3314,7 @@ foreign import ccall "ql.h qlOptionAsInstrument" qlOptionAsInstrument :: Ptr COption' -> IO (Ptr CInstrument') instance Upcastable COption' where {type Base COption' = CInstrument'; upcast = qlOptionAsInstrument} asOption :: GenOption o -> IO Option-asOption = transferGenForeignPtr peekOption . peel . getInstrument+asOption = transferGenForeignPtr newGenOption . peel . getInstrument peekOption :: Ptr COption' -> IO Option peekOption = newCastForeignPtr >=> newGenOption withOption :: GenOption o -> (Ptr COption' -> IO b) -> IO b@@ -3358,7 +3336,7 @@ foreign import ccall "ql.h qlSwapAsInstrument" qlSwapAsInstrument :: Ptr CSwap' -> IO (Ptr CInstrument') instance Upcastable CSwap' where {type Base CSwap' = CInstrument'; upcast = qlSwapAsInstrument} asSwap :: GenSwap s -> IO Swap-asSwap = transferGenForeignPtr peekSwap . peel . getInstrument+asSwap = transferGenForeignPtr newGenSwap . peel . getInstrument peekSwap :: Ptr CSwap' -> IO Swap peekSwap = newCastForeignPtr >=> newGenSwap withSwap :: GenSwap s -> (Ptr CSwap' -> IO b) -> IO b@@ -3393,7 +3371,7 @@ foreign import ccall "ql.h qlBondAsInstrument" qlBondAsInstrument :: Ptr CBond' -> IO (Ptr CInstrument') instance Upcastable CBond' where {type Base CBond' = CInstrument'; upcast = qlBondAsInstrument} asBond :: GenBond b -> IO Bond-asBond = transferGenForeignPtr peekBond . peel . getInstrument+asBond = transferGenForeignPtr newGenBond . peel . getInstrument peekBond :: Ptr CBond' -> IO Bond peekBond = newCastForeignPtr >=> newGenBond withBond :: GenBond b -> (Ptr CBond' -> IO r) -> IO r@@ -3518,9 +3496,8 @@ withCallableBond :: CallableBond -> (Ptr CCallableBond' -> IO b) -> IO b withCallableBond = withForeignPtr . ptr . peel . getInstrument --- FixedVsFloatingSwap sits between Swap and VanillaSwap (upstream: VanillaSwap, OvernightIndexedSwap--- and MultipleResetsSwap all derive from it, but only VanillaSwap is modelled through it here ----- the others still upcast straight to Swap, collapsing the intermediate level as usual). It earns+-- FixedVsFloatingSwap sits between Swap and VanillaSwap/OvernightIndexedSwap (upstream+-- MultipleResetsSwap also derives from it but is not bound). It earns -- its own family level (mirrors MultiAssetOption/MargrabeOption's one-more-AnyOf-layer shape) -- because SwaptionHelper::underlying() (QuantLib/Model.chs) returns exactly this type, and its own -- getters (fairRate, fairSpread, fixedLeg*, floatingLeg*) are inherited, not VanillaSwap-specific --@@ -3545,7 +3522,7 @@ instance Upcastable CFixedVsFloatingSwap' where {type Base CFixedVsFloatingSwap' = CSwap'; upcast = qlFixedVsFloatingSwapAsSwap} instance Upcastable CVanillaSwap' where {type Base CVanillaSwap' = CFixedVsFloatingSwap'; upcast = qlVanillaSwapAsFixedVsFloatingSwap} asFixedVsFloatingSwap :: GenFixedVsFloatingSwap f -> IO FixedVsFloatingSwap-asFixedVsFloatingSwap = transferGenForeignPtr peekFixedVsFloatingSwap . peel . peel . getInstrument+asFixedVsFloatingSwap = transferGenForeignPtr newGenFixedVsFloatingSwap . peel . peel . getInstrument peekFixedVsFloatingSwap :: Ptr CFixedVsFloatingSwap' -> IO FixedVsFloatingSwap peekFixedVsFloatingSwap = newCastForeignPtr >=> newGenFixedVsFloatingSwap withFixedVsFloatingSwap :: GenFixedVsFloatingSwap f -> (Ptr CFixedVsFloatingSwap' -> IO b) -> IO b@@ -3565,6 +3542,19 @@ -- own engine-dispatched getters (fairPaySpread/fairRecSpread, fairRate/fairSpread) reachable only -- through the real leaf pointer. Unlike FixedVsFloatingSwap, the base class is concrete upstream -- and hasquant binds its own 2-leg/N-leg constructors directly at this level.+data CMtMCrossCurrencyBasisSwap'+type CMtMCrossCurrencyBasisSwap = ForeignPtr CMtMCrossCurrencyBasisSwap'+-- |A 'Swap' with its concrete native interface preserved.+type MtMCrossCurrencyBasisSwap = GenSwap CMtMCrossCurrencyBasisSwap+foreign import ccall unsafe "ql.h &qlFreeMtMCrossCurrencyBasisSwap" qlFreeMtMCrossCurrencyBasisSwap :: FinalizerPtr CMtMCrossCurrencyBasisSwap'+instance Finalizable CMtMCrossCurrencyBasisSwap' where finalize = qlFreeMtMCrossCurrencyBasisSwap+foreign import ccall "ql.h qlMtMCrossCurrencyBasisSwapAsSwap" qlMtMCrossCurrencyBasisSwapAsSwap :: Ptr CMtMCrossCurrencyBasisSwap' -> IO (Ptr CSwap')+instance Upcastable CMtMCrossCurrencyBasisSwap' where {type Base CMtMCrossCurrencyBasisSwap' = CSwap'; upcast = qlMtMCrossCurrencyBasisSwapAsSwap}+peekMtMCrossCurrencyBasisSwap :: Ptr CMtMCrossCurrencyBasisSwap' -> IO MtMCrossCurrencyBasisSwap+peekMtMCrossCurrencyBasisSwap = newGenForeignPtr >=> newGenSwap+withMtMCrossCurrencyBasisSwap :: MtMCrossCurrencyBasisSwap -> (Ptr CMtMCrossCurrencyBasisSwap' -> IO b) -> IO b+withMtMCrossCurrencyBasisSwap = withForeignPtr . ptr . peel . getInstrument+ data CConstNotionalCrossCurrencySwap' type GenConstNotionalCrossCurrencySwap x = GenSwap (AnyOf CConstNotionalCrossCurrencySwap' x) type CConstNotionalCrossCurrencySwap = ForeignPtr CConstNotionalCrossCurrencySwap'@@ -3591,7 +3581,7 @@ instance Upcastable CConstNotionalCrossCurrencyBasisSwap' where {type Base CConstNotionalCrossCurrencyBasisSwap' = CConstNotionalCrossCurrencySwap'; upcast = qlConstNotionalCrossCurrencyBasisSwapAsConstNotionalCrossCurrencySwap} instance Upcastable CConstNotionalCrossCurrencyFixedVsFloatingSwap' where {type Base CConstNotionalCrossCurrencyFixedVsFloatingSwap' = CConstNotionalCrossCurrencySwap'; upcast = qlConstNotionalCrossCurrencyFixedVsFloatingSwapAsConstNotionalCrossCurrencySwap} asConstNotionalCrossCurrencySwap :: GenConstNotionalCrossCurrencySwap x -> IO ConstNotionalCrossCurrencySwap-asConstNotionalCrossCurrencySwap = transferGenForeignPtr peekConstNotionalCrossCurrencySwap . peel . peel . getInstrument+asConstNotionalCrossCurrencySwap = transferGenForeignPtr newGenConstNotionalCrossCurrencySwap . peel . peel . getInstrument peekConstNotionalCrossCurrencySwap :: Ptr CConstNotionalCrossCurrencySwap' -> IO ConstNotionalCrossCurrencySwap peekConstNotionalCrossCurrencySwap = newCastForeignPtr >=> newGenConstNotionalCrossCurrencySwap withConstNotionalCrossCurrencySwap :: GenConstNotionalCrossCurrencySwap x -> (Ptr CConstNotionalCrossCurrencySwap' -> IO b) -> IO b@@ -3661,16 +3651,16 @@  data COvernightIndexedSwap' type COvernightIndexedSwap = ForeignPtr COvernightIndexedSwap'--- |A 'Swap'; see the hierarchy under t'GenInstrument'.-type OvernightIndexedSwap = GenSwap COvernightIndexedSwap+-- |A 'FixedVsFloatingSwap'; see the hierarchy under t'GenInstrument'.+type OvernightIndexedSwap = GenFixedVsFloatingSwap COvernightIndexedSwap foreign import ccall unsafe "ql.h &qlFreeOvernightIndexedSwap" qlFreeOvernightIndexedSwap :: FinalizerPtr COvernightIndexedSwap' instance Finalizable COvernightIndexedSwap' where finalize = qlFreeOvernightIndexedSwap-foreign import ccall "ql.h qlOvernightIndexedSwapAsSwap" qlOvernightIndexedSwapAsSwap :: Ptr COvernightIndexedSwap' -> IO (Ptr CSwap')-instance Upcastable COvernightIndexedSwap' where {type Base COvernightIndexedSwap' = CSwap'; upcast = qlOvernightIndexedSwapAsSwap}+foreign import ccall "ql.h qlOvernightIndexedSwapAsFixedVsFloatingSwap" qlOvernightIndexedSwapAsFixedVsFloatingSwap :: Ptr COvernightIndexedSwap' -> IO (Ptr CFixedVsFloatingSwap')+instance Upcastable COvernightIndexedSwap' where {type Base COvernightIndexedSwap' = CFixedVsFloatingSwap'; upcast = qlOvernightIndexedSwapAsFixedVsFloatingSwap} peekOvernightIndexedSwap :: Ptr COvernightIndexedSwap' -> IO OvernightIndexedSwap-peekOvernightIndexedSwap = peekGenSwap+peekOvernightIndexedSwap = newGenForeignPtr >=> newGenFixedVsFloatingSwap withOvernightIndexedSwap :: OvernightIndexedSwap -> (Ptr COvernightIndexedSwap' -> IO b) -> IO b-withOvernightIndexedSwap = withForeignPtr . ptr . peel . getInstrument+withOvernightIndexedSwap = withForeignPtr . ptr . peel . peel . getInstrument  data CZeroCouponInflationSwap' type CZeroCouponInflationSwap = ForeignPtr CZeroCouponInflationSwap'@@ -3828,7 +3818,7 @@ instance Upcastable CMargrabeOption' where {type Base CMargrabeOption' = CMultiAssetOption'; upcast = qlMargrabeOptionAsMultiAssetOption} instance Upcastable CEverestOption' where {type Base CEverestOption' = CMultiAssetOption'; upcast = qlEverestOptionAsMultiAssetOption} asMultiAssetOption :: GenMultiAssetOption mo -> IO MultiAssetOption-asMultiAssetOption = transferGenForeignPtr peekMultiAssetOption . peel . peel . getInstrument+asMultiAssetOption = transferGenForeignPtr newGenMultiAssetOption . peel . peel . getInstrument peekMultiAssetOption :: Ptr CMultiAssetOption' -> IO MultiAssetOption peekMultiAssetOption = newCastForeignPtr >=> newGenMultiAssetOption withMultiAssetOption :: GenMultiAssetOption mo -> (Ptr CMultiAssetOption' -> IO b) -> IO b@@ -3856,7 +3846,7 @@ foreign import ccall "ql.h qlOneAssetOptionAsOption" qlOneAssetOptionAsOption :: Ptr COneAssetOption' -> IO (Ptr COption') instance Upcastable COneAssetOption' where {type Base COneAssetOption' = COption'; upcast = qlOneAssetOptionAsOption} asOneAssetOption :: GenOneAssetOption oo -> IO OneAssetOption-asOneAssetOption = transferGenForeignPtr peekOneAssetOption . peel . peel . getInstrument+asOneAssetOption = transferGenForeignPtr newGenOneAssetOption . peel . peel . getInstrument peekOneAssetOption :: Ptr COneAssetOption' -> IO OneAssetOption peekOneAssetOption = newCastForeignPtr >=> newGenOneAssetOption withOneAssetOption :: GenOneAssetOption oo -> (Ptr COneAssetOption' -> IO b) -> IO b@@ -3970,16 +3960,8 @@ withQuantoDoubleBarrierOption :: QuantoDoubleBarrierOption -> (Ptr CQuantoDoubleBarrierOption' -> IO b) -> IO b withQuantoDoubleBarrierOption = withForeignPtr . ptr . peel . peel . getInstrument --- Commodity/EnergyCommodity are abstract-here: Commodity's own constructor is never called--- directly upstream (every concrete instrument goes through EnergyCommodity), and--- EnergyCommodity::quantity() is pure virtual, so neither binds a constructor here -- both are--- reachable only as upcast targets once a Stage-6 leaf (EnergyFuture, EnergyVanillaSwap,--- EnergyBasisSwap) exists. Commodity::secondaryCosts()/EnergyCommodity::commodityType() are plain,--- never-mutated echoes of each class's own constructor argument (commodity.hpp/energycommodity.hpp's--- inline getters each just `return foo_;`) -- not bound, per CLAUDE.md's trivial-getter rule.--- secondaryCostAmounts()/pricingErrors()/addPricingError are genuine (mutable, computed during--- pricing); their generalized 'withCommodity' accessor and marshalling live below, next to the--- Stage-6 leaves that finally give them a producer to verify against.+-- Commodity and EnergyCommodity are abstract upcast targets for concrete energy instruments.+-- Their calculated results use the shared 'withCommodity' accessor below. data CCommodity' type GenCommodity c = GenInstrument (AnyOf CCommodity' c) type CCommodity = ForeignPtr CCommodity'@@ -4100,9 +4082,36 @@ -- 'QuantLib.CashFlow.date' already carries the map key, so it isn't -- duplicated as a separate tuple field). peekCommodityCashFlowArray :: Ptr CUInt -> Ptr (Ptr (Ptr CCommodityCashFlow')) -> IO [CommodityCashFlow]-peekCommodityCashFlowArray = peekPtrArray peekCommodityCashFlow+peekCommodityCashFlowArray = peekPtrArray freeUpcast peekCommodityCashFlow  withInstrumentArray :: [GenInstrument i] -> ((CUInt, Ptr (Ptr CInstrument')) -> IO b) -> IO b withInstrumentArray = withGenArray withInstrument  -- vim: set ff=unix ts=8 sts=2 sw=2 et:++preCommodityTypeArray :: ((Ptr CUInt, Ptr (Ptr (Ptr CCommodityType))) -> IO b) -> IO b+preCommodityTypeArray = prePtrArray freeUpcast++preUnitOfMeasureArray :: ((Ptr CUInt, Ptr (Ptr (Ptr CUnitOfMeasure))) -> IO b) -> IO b+preUnitOfMeasureArray = prePtrArray freeUpcast++preCurrencyArray :: ((Ptr CUInt, Ptr (Ptr (Ptr CCurrency))) -> IO b) -> IO b+preCurrencyArray = prePtrArray freeUpcast++preCouponArray :: ((Ptr CUInt, Ptr (Ptr (Ptr CCoupon'))) -> IO b) -> IO b+preCouponArray = prePtrArray freeUpcast++preBlackCalibrationHelperArray :: ((Ptr CUInt, Ptr (Ptr (Ptr CBlackCalibrationHelper'))) -> IO b) -> IO b+preBlackCalibrationHelperArray = prePtrArray freeUpcast++preCommodityCashFlowArray :: ((Ptr CUInt, Ptr (Ptr (Ptr CCommodityCashFlow'))) -> IO b) -> IO b+preCommodityCashFlowArray = prePtrArray freeUpcast++-- Temporary construction input; the native consumer copies the selected indices.+type QlStubIndexSelection = Ptr CStubIndexSelection'+data CStubIndexSelection'+foreign import ccall unsafe "ql.h &qlFreeStubIndexSelection" qlFreeStubIndexSelection :: FinalizerPtr CStubIndexSelection'+instance Finalizable CStubIndexSelection' where finalize = qlFreeStubIndexSelection++withIborIndexArray :: [GenIborIndex ibor] -> ((CUInt, Ptr (Ptr CIborIndex')) -> IO r) -> IO r+withIborIndexArray = withGenArray withIborIndex
QuantLib/Math.chs view
@@ -148,7 +148,7 @@   ,withMaybeConstraint*`Maybe Constraint'   ,withOptimizationMethod*`OptimizationMethod'   ,withEndCriteria*`EndCriteria'-  ,preArray-`RealVector'&peekRealVector* -- ^solution+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^solution   ,alloca-`Double'peekDouble* -- ^achieved cost   ,alloca-`EndCriteriaType'peekEnum* -- ^end criteria reached   ,preErrorCheck-`String'errorCheck*-}->`()'#}@@ -178,7 +178,7 @@   ,preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Returns all times on the grid in contiguous storage.-{#fun qlTimeGridPoints as points{withTimeGrid*`TimeGrid',preArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlTimeGridPoints as points{withTimeGrid*`TimeGrid',preDoubleArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Mean of a caller-supplied sample. Each @riskStatistics*@ call evaluates a fresh sample. {#fun qlRiskStatisticsMean as riskStatisticsMean{withRealVector*`RealVector'& -- ^sample@@ -304,8 +304,8 @@   (values, r, c, vectors) <- qlSymmetricSchurDecomposition mr mc md   pure (values, Matrix r c vectors) {#fun qlSymmetricSchurDecomposition{fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]'-  ,preArray-`[Double]'&peekDoubleArray*-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Pseudo square root @S@ of a real symmetric matrix @M@, i.e. the matrix with @S*transpose S == M@.@@ -317,7 +317,7 @@ pseudoSqrt (Matrix mr mc md) salvaging = toMatrixDouble <$> qlPseudoSqrt mr mc md salvaging {#fun qlPseudoSqrt{fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]'   ,fromEnumC`SalvagingAlgorithm'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Rank-reduced pseudo square root of a real symmetric matrix: the result has rank at most@@ -332,7 +332,7 @@   toMatrixDouble <$> qlRankReducedSqrt mr mc md maxRank retained salvaging {#fun qlRankReducedSqrt{fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]'   ,fromIntegral`Word',`Double',fromEnumC`SalvagingAlgorithm'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Cholesky factor @L@ of a symmetric positive-definite matrix @M@, i.e. the lower-triangular@@ -345,7 +345,7 @@ choleskyDecomposition (Matrix mr mc md) flexible = toMatrixDouble <$> qlCholeskyDecomposition mr mc md flexible {#fun qlCholeskyDecomposition{fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]'   ,`Bool'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Solves @M*x == b@ given the Cholesky factor @L@ of @M@ -- the first argument is the factor@@ -356,7 +356,7 @@ choleskySolveFor (Matrix mr mc md) b = qlCholeskySolveFor mr mc md b {#fun qlCholeskySolveFor{fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]'   ,withDoubleArray*`[Double]'&-  ,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
QuantLib/Method.chs view
@@ -56,6 +56,19 @@ -- row per path, and guard the ITM-fit-size check with 'lsmBasisSize' instead of the basis order -- -- the multi-asset basis has combinatorially many more terms than the scalar case. --+-- To keep a fit and evaluate it later, split the combined call: 'lsmFit' returns the basis+-- coefficients and 'lsmEvaluate' applies them to new states. Both pick the basis by the state+-- matrix's column count -- the scalar basis of 'lsmRegress' at one column, the basis of+-- 'lsmRegressMulti' at several -- and share the combined calls' native code, so within one build+-- fitting then evaluating gives the combined call's values bit for bit. Across builds the bits are+-- not promised: 'lsmEvaluatorIdentity' names the basis revision, QuantLib version, compiler and+-- architecture, so a stored fit can be refused elsewhere. It is necessary, not sufficient: a+-- library rebuilt under the same version string keeps it.+--+-- Both Chebyshev types are QuantLib's weighted bases, undefined outside (-1, 1): with a state there+-- the least-squares solve of every regression above does not return. Scale the states into that+-- interval or choose another 'PolynomialType'.+-- -- @test\/example\/QuantLib\/Example\/HaskellLSM.hs@ benchmarks 'lsmRegress' against the same -- backward induction with the per-date regression reimplemented from scratch in plain Haskell -- (QuantLib used only for path generation) -- a worked illustration of why this module exposes@@ -152,7 +165,7 @@ -- -- [@Rolling a grid back@] 'fdmRollback' takes a precomputed initial grid (a plain @[Double]@) and --   rolls it back through time via three Haskell-defined operator callbacks---   ('QuantLib.Internal.Type.withFdmApply' et al.) plus an optional step condition (e.g.+--   (@withFdmApply@ et al. below) plus an optional step condition (e.g. --   American\/Bermudan early exercise). These callbacks cross the language boundary once per outer --   timestep, over the /whole/ grid. 'fdmSolve' is the sibling that instead derives its own --   initial grid from a mesher and@@ -171,22 +184,19 @@ --   @t -> location -> value@ pair of functions as an 'FdmInnerValueCalculator'. Unlike every --   callback above, this one crosses the language boundary once /per grid node/ -- there is no --   batched shape for it anywhere in QuantLib or QuantLib-SWIG, so the real per-call cost is---   accepted, matching QuantLib-SWIG's own @FdmInnerValueCalculatorDelegate@ precedent. Because the---   two callbacks are stored /inside/ the returned calculator and invoked again on every later---   'fdmSolve'\/'fdmInnerValue' call (not just during construction), the calculator is only valid---   /inside/ this continuation -- it cannot be built with a plain @IO FdmInnerValueCalculator@---   smart constructor the way the native calculators below can.+--   accepted, matching QuantLib-SWIG's own @FdmInnerValueCalculatorDelegate@ precedent.+--   The calculator and native dependents retain both callbacks after the continuation returns;+--   callback exceptions are rethrown by the enclosing Haskell call. -- -- [@Custom inner values, native@] QuantLib's own concrete 'FdmInnerValueCalculator' subclasses are --   bound directly, for the common cases that don't need a per-node Haskell callback at all: --   'fdmZeroInnerValue' (always 0), 'fdmCellAveragingInnerValue'\/'fdmLogInnerValue' (a payoff --   cell-averaged -- Simpson-integrated across each grid cell, not just evaluated at its center -- --   with an identity or @exp@ value mapping respectively), and 'fdmLogBasketInnerValue' (the---   multi-asset counterpart, one @exp@ mapping per dimension). These hold no Haskell callback, so---   they're plain @IO FdmInnerValueCalculator@ constructors -- except+--   multi-asset counterpart, one @exp@ mapping per dimension). These retain their payoff,+--   including any Haskell callback it owns. There is also --   'withCustomCellAveragingInnerValue', the one native constructor that /does/ take an explicit---   @gridMapping@ callback, which needs the same continuation treatment as the fully custom case---   above. 'fdmAffineG2ModelSwapInnerValue'\/'fdmAffineHullWhiteModelSwapInnerValue' price a swap+--   @gridMapping@ callback, retained by the native calculator. 'fdmAffineG2ModelSwapInnerValue'\/'fdmAffineHullWhiteModelSwapInnerValue' price a swap --   under a calibrated 'QuantLib.Model.G2'\/'QuantLib.Model.HullWhite' model directly -- the same --   calculator @fdG2SwaptionEngine@\/@fdHullWhiteSwaptionEngine@ use internally. --@@ -267,6 +277,9 @@   , lsmRegress   , lsmBasisSize   , lsmRegressMulti+  , lsmFit+  , lsmEvaluate+  , lsmEvaluatorIdentity     -- ** Finite differences   , fdmRollback   , fdmInnerValue@@ -281,6 +294,7 @@     -- ** Random sequences and meshers   , rsgDimension   , lastSequence+  , pathGeneratorSequence   , fdmMesherLocations   ) where #include "qlTypesC2HS.h"@@ -289,13 +303,17 @@ #include "ql.h"  import QuantLib.Internal-import QuantLib.Internal.Type+import qualified QuantLib.Internal.Callback as Callback+import QuantLib.Internal.Type hiding (ptr) -- c2hs {#get#} binds its own `ptr' import QuantLib.Internal.Common {#import QuantLib.Math#}-import Foreign.C.String(CString)-import Foreign.C.Types(CUInt)-import Foreign.Ptr(Ptr, FunPtr)+import Foreign.C.String(peekCString)+import Foreign.C.Types(CDouble)+import Foreign.Ptr(Ptr, nullPtr, castPtr) import Foreign.Marshal.Alloc(alloca)+import Foreign.Marshal.Array(moveArray)+import Control.Exception(throwIO)+import qualified Data.Vector.Storable as V  {#pointer *PolymorphicPathGenerator as PathGenerator foreign -> CPathGenerator nocode#} {#pointer *SamplePath as SamplePath foreign -> CSamplePath nocode#}@@ -317,6 +335,34 @@ {#pointer *QlFdmMesher as FdmMesher foreign -> CFdmMesher nocode#} {#pointer *QlFdmInnerValueCalculator as FdmInnerValueCalculator foreign -> CFdmInnerValueCalculator nocode#} +-- A step condition may return its borrowed input, which shares the output buffer.+pokeFdmResult :: Int -> Ptr CDouble -> RealVector -> IO ()+pokeFdmResult expected out result+  | V.length result /= expected = throwIO (CallbackResultLength expected (V.length result))+  | otherwise = V.unsafeWith result $ \p -> moveArray out (castPtr p) expected++withFdmResult :: (Callback.CallbackArgs -> RealVector -> RealVector) -> (Ptr () -> IO b) -> IO b+withFdmResult f use = Callback.withCallback call (`withCallbackPtr` use)+  where+    call args = do+      x <- borrowRealVector (Callback.callbackInput args) (fromIntegral (Callback.callbackSize args))+      pokeFdmResult (Callback.callbackSize args) (Callback.callbackOutput args) (f args x)++withFdmApply :: ((Double, Double) -> RealVector -> RealVector) -> (Ptr () -> IO b) -> IO b+withFdmApply f = withFdmResult $ \args -> f (Callback.callbackTime1 args, Callback.callbackTime2 args)++withFdmApplyDirection :: (Int -> (Double, Double) -> RealVector -> RealVector) -> (Ptr () -> IO b) -> IO b+withFdmApplyDirection f = withFdmResult $ \args ->+  f (Callback.callbackDirection args) (Callback.callbackTime1 args, Callback.callbackTime2 args)++withFdmSolveSplitting :: (Int -> Double -> (Double, Double) -> RealVector -> RealVector) -> (Ptr () -> IO b) -> IO b+withFdmSolveSplitting f = withFdmResult $ \args ->+  f (Callback.callbackDirection args) (Callback.callbackScalar args) (Callback.callbackTime1 args, Callback.callbackTime2 args)++withMaybeFdmStepCondition :: Maybe (Double -> RealVector -> RealVector) -> (Ptr () -> IO b) -> IO b+withMaybeFdmStepCondition Nothing use = use nullPtr+withMaybeFdmStepCondition (Just f) use = withFdmResult (f . Callback.callbackTime1) use+ -- |build a multi-asset path generator driven by a pseudo-random number generator (Mersenne Twister, Poisson, or Ziggurat, chosen by the RNG trait) over the given process and time grid. {#fun qlPathGenerator as pathGenerator{fromEnumC`RngTrait',withStochasticProcess*`GenStochasticProcess p',withTimeGrid*`TimeGrid'   ,fromIntegral`Word' -- ^seed@@ -345,17 +391,20 @@ -- engine would have accepted a custom process anyway: their constructors are typed on concrete -- process classes (@GeneralizedBlackScholesProcess@ and friends), not on the abstract base. ----- @dimension@ is the length of each drawn sequence -- for a path set, @assets * timesteps@,--- matching what 'pathGenerator' is passed. The construction mirrors 'pathGenerator''s exactly--- (same trait, same seed, same direction integers), so a Haskell-evolved path can be compared--- draw for draw against a 'pathGenerator' one on a bound process.+-- @dimension@ is the length of each drawn sequence: (normals drawn per step) * timesteps. For+-- 'pathGenerator' parity the per-step count is the process's @factors@; a Haskell-evolved model+-- may draw more normals per step than it has Brownian drivers. The construction mirrors+-- 'pathGenerator''s exactly (same trait, same seed, same direction integers), so a+-- Haskell-evolved path can be compared draw for draw against a 'pathGenerator' one on a bound+-- process. {#fun qlGaussianRsg as gaussianRsg{fromEnumC`RngTrait'   ,fromIntegral`Word' -- ^dimension   ,fromIntegral`Word' -- ^seed   ,preErrorCheck-`String'errorCheck*-}->`GaussianRsg'peekGaussianRsg*#}  -- |'gaussianRsg' driven by a low-discrepancy (Sobol) sequence with the given direction integers ----- the 'sobolPathGenerator' counterpart.+-- the 'sobolPathGenerator' counterpart. The maximum @dimension@ depends on the direction-integer+-- set and on QuantLib's build-time @PPMT_MAX_DIM@; a larger one raises an exception. {#fun qlSobolGaussianRsg as sobolGaussianRsg{fromEnumC`SobolDirectionIntegers'   ,fromIntegral`Word' -- ^dimension   ,fromIntegral`Word' -- ^seed@@ -367,16 +416,24 @@ -- |draw the next sequence of standard normal variates, with its sample weight (1 for every trait -- bound here, carried through for symmetry with 'weight'). {#fun qlGaussianRsgNextSequence as nextSequence{withGaussianRsg*`GaussianRsg'-  ,preArray-`RealVector'&peekRealVector* -- ^draws+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^draws   ,alloca-`Double'peekDouble* -- ^weight   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |re-read the sequence 'nextSequence' last drew, without advancing the generator. {#fun qlGaussianRsgLastSequence as lastSequence{withGaussianRsg*`GaussianRsg'-  ,preArray-`RealVector'&peekRealVector* -- ^draws+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^draws   ,alloca-`Double'peekDouble* -- ^weight   ,preErrorCheck-`String'errorCheck*-}->`()'#} +-- |The random sequence consumed by the last 'next', with its sample weight, without advancing+-- the generator. Refuses before the first draw. These are variates before process correlation;+-- 'antithetic' uses their negatives and leaves this original sequence unchanged.+{#fun qlPathGeneratorSequence as pathGeneratorSequence{withPathGenerator*`PathGenerator' -- ^generator+  ,preDoubleArray-`RealVector'&peekRealVector*+  ,alloca-`Double'peekDouble*+  ,preErrorCheck-`String'errorCheck*-}->`()'#}+ -- |draw the next weighted sample path from the generator. {#fun qlPathGeneratorNext as next{withPathGenerator*`PathGenerator',preErrorCheck-`String'errorCheck*-}->`SamplePath'peekSamplePath*#} @@ -398,7 +455,7 @@   ,preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |The full simulated path (values at every time step) of a single asset.-{#fun qlSamplePathAssetPath as asset{withSamplePath*`SamplePath',fromIntegral`Word',preArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlSamplePathAssetPath as asset{withSamplePath*`SamplePath',fromIntegral`Word',preDoubleArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |one step of Longstaff-Schwartz early-exercise regression: fit a polynomial basis of the given -- order/type against the (in-the-money) fit states and their continuation targets, then evaluate the@@ -411,7 +468,7 @@   ,withRealVector*`RealVector'& -- ^fit states (in-the-money paths only)   ,withRealVector*`RealVector'& -- ^fit targets (continuation value at these states)   ,withRealVector*`RealVector'& -- ^eval states (all paths' state at this date)-  ,preArray-`RealVector'&peekRealVector* -- ^continuation value estimate per eval state+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^continuation value estimate per eval state   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |number of basis terms 'lsmRegressMulti' fits for a given number of underlyings and order --@@ -444,9 +501,43 @@   ,fromIntegral`Word' -- ^eval rows   ,fromIntegral`Word' -- ^eval columns (underlyings)   ,withRealVectorRaw*`RealVector' -- ^eval states, row-major-  ,preArray-`RealVector'&peekRealVector* -- ^continuation value estimate per eval row+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^continuation value estimate per eval row   ,preErrorCheck-`String'errorCheck*-}->`()'#} +-- |basis coefficients of one Longstaff-Schwartz fit, the fitting half of 'lsmRegress' (one state+-- column) or 'lsmRegressMulti' (several): fit states are a row-major 'RealMatrix', one row per+-- path. There are 'lsmBasisSize' of them, in QuantLib's basis order; evaluate them with 'lsmEvaluate'.+lsmFit :: PolynomialType -> Word -> RealMatrix -- ^fit states (in-the-money paths only)+  -> RealVector -- ^fit targets (continuation value at these states)+  -> IO RealVector -- ^basis coefficients+lsmFit p order (RealMatrix r c d) = qlLsmFit p order r c d+{#fun qlLsmFit{`PolynomialType',fromIntegral`Word' -- ^basis order+  ,fromIntegral`Word' -- ^rows+  ,fromIntegral`Word' -- ^columns+  ,withRealVectorRaw*`RealVector' -- ^states, row-major+  ,withRealVector*`RealVector'& -- ^targets+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^coefficients+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |continuation value of 'lsmFit' coefficients at each row of the given states, which must have+-- the fit's column count; the polynomial type and order must be the fit's too. Throws unless there+-- are 'lsmBasisSize' coefficients for that column count.+lsmEvaluate :: PolynomialType -> Word -> RealVector -- ^coefficients+  -> RealMatrix -- ^eval states (one row per path)+  -> IO RealVector -- ^continuation value estimate per row+lsmEvaluate p order coefficients (RealMatrix r c d) = qlLsmEvaluate p order coefficients r c d+{#fun qlLsmEvaluate{`PolynomialType',fromIntegral`Word' -- ^basis order+  ,withRealVector*`RealVector'& -- ^coefficients+  ,fromIntegral`Word' -- ^rows+  ,fromIntegral`Word' -- ^columns+  ,withRealVectorRaw*`RealVector' -- ^states, row-major+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^continuation values+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |the build that 'lsmFit' and 'lsmEvaluate' belong to: the shim's basis revision, the QuantLib+-- version, the compiler and the architecture. Store it beside coefficients meant for later use.+{#fun pure qlLsmEvaluatorIdentity as lsmEvaluatorIdentity{}->`String'peekCString*#}+ -- |Drive @FdmBackwardSolver::rollback@ with a Haskell-defined 'FdmLinearOpComposite' (the -- @apply@\/@apply_direction@\/@solve_splitting@ callbacks) and an optional Haskell-defined step -- condition (e.g. American\/Bermudan early exercise, or a barrier), instead of a bound mesher +@@ -455,10 +546,13 @@ -- @FdmLinearOpCompositeDelegate@\/ -- @FdmStepConditionDelegate@ (@SWIG\/fdm.i@): each callback crosses once per outer iteration over -- the whole grid array, not once per grid node.+-- Internally each callback receives one native argument record, avoiding a wide mixed-argument+-- callback ABI at the Haskell boundary; this does not affect the public callback types. -- -- The grid is a plain @[Double]@ in and out -- no mesher, no @FdmInnerValueCalculator@, no -- @FdmSolverDesc@ is bound; callers manage their own grid geometry entirely in Haskell. Boundary--- conditions are always the empty @FdmBoundaryConditionSet()@ (not bound).+-- conditions are always the empty @FdmBoundaryConditionSet()@ (not bound). Every callback must+-- return an array of its input's length; any other length throws 'QuantLib.Context.CallbackResultLength'. -- -- /Only DouglasScheme::step's three virtuals are implemented -- 'apply', 'apply_direction' and/ -- /'solve_splitting'; @apply_mixed@\/@preconditioner@ are unimplemented and @QL_FAIL@ at the C++/@@ -479,7 +573,7 @@   ,`Double' -- ^to (end time of the rollback, e.g. 0)   ,fromIntegral`Int' -- ^steps   ,fromIntegral`Int' -- ^dampingSteps-  ,preArray-`RealVector'&peekRealVector* -- ^grid values at time \'to\'+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^grid values at time \'to\'   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |'Predefined1dMesher(points)' -- an 'Fdm1dMesher' over an explicit, caller-supplied set of grid points.@@ -534,7 +628,7 @@ -- for a Black-Scholes-family process, reusing the same 'GeneralizedBlackScholesProcess'\/ -- 'Dividend'\/'FdmQuantoHelper' plumbing "QuantLib.PricingEngine"'s @fd*@ engines already use. {#fun qlFdmBlackScholesMesher as fdmBlackScholesMesher{fromIntegral`Word' -- ^size-  ,withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+  ,withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,`Double' -- ^maturity   ,`Double' -- ^strike   ,fromMaybeDouble`Maybe Double' -- ^xMinConstraint@@ -573,7 +667,7 @@ -- |'FdmSimpleProcess1dMesher(size, process, maturity, tAvgSteps, epsilon, mandatoryPoint)' -- -- generic mesher for any bound one-dimensional 'StochasticProcess1D'. {#fun qlFdmSimpleProcess1dMesher as fdmSimpleProcess1dMesher{fromIntegral`Word' -- ^size-  ,withStochasticProcess1D*`StochasticProcess1D'+  ,withStochasticProcess1D*`GenStochasticProcess1D p1d'   ,`Double' -- ^maturity   ,fromIntegral`Word' -- ^tAvgSteps   ,`Double' -- ^epsilon@@ -612,22 +706,16 @@ -- @x_@ arrays from this same call upstream). {#fun qlFdmMesherLocations as fdmMesherLocations{withFdmMesher*`FdmMesher'   ,fromIntegral`Int' -- ^direction-  ,preArray-`RealVector'&peekRealVector*+  ,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#} --- Raw import, not a {#fun#}: 'withCustomFdmInnerValueCalculator' below needs the two--- 'FunPtr's kept alive for as long as the returned 'FdmInnerValueCalculator' can be called into--- (i.e. across the whole continuation, which typically includes a later 'fdmSolve' call), not--- just for the duration of this one construction call the way a plain {#fun#}-generated--- 'withFdmInnerValue' bracket would provide -- see the haddock below.-foreign import ccall "ql.h qlFdmInnerValueCalculatorFromFunctions"-  c_qlFdmInnerValueCalculatorFromFunctions :: Ptr CFdmMesher -> FunPtr FdmInnerValueFun -> FunPtr FdmInnerValueFun-    -> Ptr CString -> IO (Ptr CFdmInnerValueCalculator)+{#fun qlFdmInnerValueCalculatorFromFunctions{withFdmMesher*`FdmMesher'+  ,withCallbackPtr*`Callback',withCallbackPtr*`Callback'+  ,preErrorCheck-`String'errorCheck*-}->`FdmInnerValueCalculator'peekFdmInnerValueCalculator*#}  -- |Wraps a Haskell @t -> location -> value@ pair of @innerValue@\/@avgInnerValue@ functions as a--- real 'FdmInnerValueCalculator' object, valid only inside the continuation -- the fully custom--- counterpart to constructors built from QuantLib's own concrete subclasses (bound alongside--- this, which need no such bracket: they hold no Haskell callback). Unlike every callback+-- real 'FdmInnerValueCalculator' that retains both callbacks after the continuation returns.+-- Callback exceptions are rethrown by the enclosing Haskell call. Unlike every callback -- 'fdmRollback' takes, this crosses the language boundary once /per grid node/, not once per outer -- iteration over the whole grid -- there is no batched \"whole-grid inner value\" shape anywhere -- in QuantLib or QuantLib-SWIG. The per-call FFI cost across@@ -639,13 +727,9 @@   -> (Double -> [Double] -> Double) -- ^avgInnerValue(t, location)   -> (FdmInnerValueCalculator -> IO b) -> IO b withCustomFdmInnerValueCalculator mesher iv aiv k =-  withFdmMesher mesher $ \mesher' ->-  withFdmInnerValue iv $ \ivFp ->-  withFdmInnerValue aiv $ \aivFp ->-  preErrorCheck $ \errPtr -> do-    res <- c_qlFdmInnerValueCalculatorFromFunctions mesher' ivFp aivFp errPtr-    errorCheck errPtr-    peekFdmInnerValueCalculator res >>= k+  withFdmInnerValue iv $ \inner ->+  withFdmInnerValue aiv $ \average ->+  qlFdmInnerValueCalculatorFromFunctions mesher inner average >>= k  -- |'FdmZeroInnerValue' -- an 'FdmInnerValueCalculator' whose @innerValue@\/@avgInnerValue@ are -- always 0.@@ -662,29 +746,19 @@   ,fromIntegral`Int' -- ^direction   ,preErrorCheck-`String'errorCheck*-}->`FdmInnerValueCalculator'peekFdmInnerValueCalculator*#} --- Raw import, not a {#fun#}: same FunPtr-lifetime hazard as--- 'c_qlFdmInnerValueCalculatorFromFunctions' above -- 'gridMapping' is stored inside the C++--- object and invoked again on every later 'innerValue'\/'avgInnerValue' call, not just during--- construction.-foreign import ccall "ql.h qlFdmCellAveragingInnerValueMapped"-  c_qlFdmCellAveragingInnerValueMapped :: QlPayoff -> Ptr CFdmMesher -> CUInt -> FunPtr FdmGridMappingFun-    -> Ptr CString -> IO (Ptr CFdmInnerValueCalculator)+{#fun qlFdmCellAveragingInnerValueMapped{withPayoff*`Payoff',withFdmMesher*`FdmMesher'+  ,fromIntegral`Int',withCallbackPtr*`Callback'+  ,preErrorCheck-`String'errorCheck*-}->`FdmInnerValueCalculator'peekFdmInnerValueCalculator*#}  -- |As 'fdmCellAveragingInnerValue', but with an explicit @gridMapping :: Double -> Double@ applied -- to each node's location before the payoff sees it (e.g. @exp@ on a log-spot grid, reproducing -- 'fdmLogInnerValue' by hand) -- a genuine per-node Haskell callback; see--- 'withCustomFdmInnerValueCalculator'. The--- resulting 'FdmInnerValueCalculator' is only valid inside this continuation.+-- 'withCustomFdmInnerValueCalculator'. The calculator retains the callback after the continuation. withCustomCellAveragingInnerValue :: Payoff -> FdmMesher -> Int -> (Double -> Double)   -> (FdmInnerValueCalculator -> IO b) -> IO b withCustomCellAveragingInnerValue payoff mesher direction mapping k =-  withPayoff payoff $ \payoff' ->-  withFdmMesher mesher $ \mesher' ->-  withFdmGridMapping mapping $ \mappingFp ->-  preErrorCheck $ \errPtr -> do-    res <- c_qlFdmCellAveragingInnerValueMapped payoff' mesher' (fromIntegral direction) mappingFp errPtr-    errorCheck errPtr-    peekFdmInnerValueCalculator res >>= k+  withFdmGridMapping mapping $ \callback ->+  qlFdmCellAveragingInnerValueMapped payoff mesher direction callback >>= k  -- |'FdmLogInnerValue(payoff, mesher, direction)' -- 'fdmCellAveragingInnerValue' with the -- @gridMapping = exp@ QuantLib itself gives its own dedicated subclass (the standard shape for a@@ -776,7 +850,7 @@   ,`Double' -- ^to (end time of the rollback, e.g. 0)   ,fromIntegral`Int' -- ^steps   ,fromIntegral`Int' -- ^dampingSteps-  ,preArray-`RealVector'&peekRealVector* -- ^grid values at time \'to\'+  ,preDoubleArray-`RealVector'&peekRealVector* -- ^grid values at time \'to\'   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
QuantLib/Model.chs view
@@ -21,6 +21,7 @@   , G2   , GenHestonModel   , HestonModel+  , RoughHestonModel   , PiecewiseTimeDependentHestonModel   , GenBatesModel   , BatesModel@@ -84,6 +85,7 @@   , generalizedHullWhite   , gjrGarchModel   , hestonModel+  , roughHestonModel   , mtBrownianGeneratorFactory   , sobolBrownianGeneratorFactory   , hestonSlvMcModel@@ -94,6 +96,7 @@   , liborForwardModel   , lfmHullWhiteParameterization   , gsr+  , gsrWithReversions   , markovFunctional   , markovFunctionalCaplet   , garch11@@ -108,9 +111,11 @@   , setCovarParam   , calibrate   , calibrateVolatilitiesIterative+  , calibrateReversionsIterative   , moveVolatility   , moveReversion   , setPricingEngine+  , setParams      -- * Inspectors     -- ** Pricing and rate calculations@@ -121,6 +126,7 @@   , numeraire   , gaussian1dZerobond   , gaussian1dZerobondOption+  , gaussian1dCompoundedRate   , gaussian1dForwardRate   , gaussian1dSwapRate   , gaussian1dSwapAnnuity@@ -131,8 +137,16 @@   , impliedVolatility      -- ** Model state and calibration+  , roughHestonTheta+  , roughHestonKappa+  , roughHestonSigma+  , roughHestonRho+  , roughHestonV0+  , roughHestonHurst+  , roughHestonProcess   , HasLeverageFunction(..)   , HasVolatilities(..)+  , reversions   , HasHelperUnderlying(..)   , g2Dynamics   , shortRate@@ -172,6 +186,7 @@ #include "qlEnumObjects.h"  #include "ql.h"+{#pointer *QlOvernightIndexedCoupon as OvernightIndexedCoupon foreign -> COvernightIndexedCoupon' nocode#}  import QuantLib.Internal {#import QuantLib.Time.Schedule#}(Frequency)@@ -186,6 +201,7 @@ import Data.Maybe(fromMaybe)  {#enum CalibrationErrorType{} deriving(Show, Eq, Read)#}+{#enum Garch11Mode{} deriving(Show, Eq, Read)#}  -- |Sobol Brownian-bridge coordinate ordering. data SobolBrownianOrdering = Factors | Steps | Diagonal deriving (Show, Eq, Read, Enum, Bounded)@@ -217,9 +233,7 @@   } deriving (Show, Eq)  {#pointer *QlQuote as Quote foreign -> CQuote' nocode#}-{#pointer *QlPricingEngine as PricingEngine foreign -> CPricingEngine nocode#}-{#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#}-{#pointer *QlIborIndex as IborIndex foreign -> CIborIndex' nocode#}+{#pointer *QlPricingEngine as PricingEngine foreign -> CPricingEngine' nocode#} {#pointer *QlOptimizationMethod as QlOptimizationMethod foreign -> COptimizationMethod nocode#} {#pointer *QlEndCriteria as QlEndCriteria foreign -> CEndCriteria nocode#} {#pointer *Constraint as QlConstraint foreign -> CConstraint nocode#}@@ -227,6 +241,7 @@ {#pointer *QlLmVolatilityModel foreign -> CLmVolatilityModel nocode#} {#pointer *QlLfmHullWhiteParameterization as LfmHullWhiteParameterization foreign -> CLfmHullWhiteParameterization nocode#} {#pointer *QlGJRGARCHModel as GJRGARCHModel foreign -> CGJRGARCHModel' nocode#}+{#pointer *QlRoughHestonModel as RoughHestonModel foreign -> CRoughHestonModel' nocode#} {#pointer *QlHestonModel as HestonModel foreign -> CHestonModel' nocode#} {#pointer *QlLocalVolTermStructure as LocalVolTermStructure foreign -> CLocalVolTermStructure' nocode#} {#pointer *QlBrownianGeneratorFactory as BrownianGeneratorFactory foreign -> CBrownianGeneratorFactory' nocode#}@@ -235,7 +250,6 @@ {#pointer *HestonSLVFDMLogEntries as HestonSLVFDMLogEntries foreign -> CHestonSLVFDMLogEntries nocode#} {#pointer *FdmSchemeDesc as QlFdmSchemeDesc foreign -> CFdmSchemeDesc nocode#} {#pointer *QlBatesModel as BatesModel foreign -> CBatesModel' nocode#}-{#pointer *QlPiecewiseTimeDependentHestonModel as PiecewiseTimeDependentHestonModel foreign -> CPiecewiseTimeDependentHestonModel' nocode#} {#pointer *QlShortRateModel as ShortRateModel foreign -> CShortRateModel' nocode#} {#pointer *QlOneFactorAffineModel as OneFactorAffineModel foreign -> COneFactorAffineModel' nocode#} {#pointer *QlLiborForwardModel as LiborForwardModel foreign -> CLiborForwardModel' nocode#}@@ -243,37 +257,21 @@ {#pointer *QlCalibratedModel as CalibratedModel foreign -> CCalibratedModel' nocode#} {#pointer *QlG2 as G2 foreign -> CG2' nocode#} {#pointer *QlShortRateDynamics as ShortRateDynamics foreign -> CShortRateDynamics' nocode#}-{#pointer *QlBatesDetJumpModel as BatesDetJumpModel foreign -> CBatesDetJumpModel' nocode#}-{#pointer *QlBatesDoubleExpDetJumpModel as BatesDoubleExpDetJumpModel foreign -> CBatesDoubleExpDetJumpModel' nocode#}-{#pointer *QlBatesDoubleExpModel as BatesDoubleExpModel foreign -> CBatesDoubleExpModel' nocode#} {#pointer *QlGsr as Gsr foreign -> CGsr' nocode#} {#pointer *QlMarkovFunctional as MarkovFunctional foreign -> CMarkovFunctional' nocode#} {#pointer *QlAffineModel foreign -> CAffineModel' nocode#} {#pointer *QlGaussian1dModel foreign -> CGaussian1dModel' nocode#}-{#pointer *QlSwapIndex as SwapIndex foreign -> CSwapIndex' nocode#}-{#pointer *QlSwaptionVolatilityStructure as SwaptionVolatilityStructure foreign -> CSwaptionVolatilityStructure' nocode#} {#pointer *QlCalibrationHelper as CalibrationHelper foreign -> CCalibrationHelper' nocode#} {#pointer *QlBlackCalibrationHelper as BlackCalibrationHelper foreign -> CBlackCalibrationHelper' nocode#} {#pointer *QlSwaptionHelper as SwaptionHelper foreign -> CSwaptionHelper' nocode#}-{#pointer *QlFixedVsFloatingSwap as FixedVsFloatingSwap foreign -> CFixedVsFloatingSwap' nocode#} {#pointer *QlSwaption as Swaption foreign -> CSwaption' nocode#}-{#pointer *QlGeneralizedBlackScholesProcess as GeneralizedBlackScholesProcess foreign -> CGeneralizedBlackScholesProcess' nocode#} {#pointer *QlStochasticProcess1D as StochasticProcess1D foreign -> CStochasticProcess1D' nocode#}-{#pointer *QlStochasticProcess as StochasticProcess foreign -> CStochasticProcess' nocode#}-{#pointer *QlBlackProcess as BlackProcess foreign -> CBlackProcess' nocode#}-{#pointer *QlExtOUWithJumpsProcess as ExtOUWithJumpsProcess foreign -> CExtOUWithJumpsProcess' nocode#}-{#pointer *QlExtendedOrnsteinUhlenbeckProcess as ExtendedOrnsteinUhlenbeckProcess foreign -> CExtendedOrnsteinUhlenbeckProcess' nocode#} {#pointer *QlGJRGARCHProcess as GJRGARCHProcess foreign -> CGJRGARCHProcess' nocode#} {#pointer *QlHestonProcess as HestonProcess foreign -> CHestonProcess' nocode#} {#pointer *QlBatesProcess as BatesProcess foreign -> CBatesProcess' nocode#}-{#pointer *QlHybridHestonHullWhiteProcess as HybridHestonHullWhiteProcess foreign -> CHybridHestonHullWhiteProcess' nocode#}-{#pointer *QlKlugeExtOUProcess as KlugeExtOUProcess foreign -> CKlugeExtOUProcess' nocode#} {#pointer *QlLiborForwardModelProcess as LiborForwardModelProcess foreign -> CLiborForwardModelProcess' nocode#}-{#pointer *QlStochasticProcessArray as StochasticProcessArray foreign -> CStochasticProcessArray' nocode#} {#pointer *QlVarianceGammaProcess as VarianceGammaProcess foreign -> CVarianceGammaProcess' nocode#}-{#pointer *QlMerton76Process as Merton76Process foreign -> CMerton76Process' nocode#}-{#pointer *QlHullWhiteProcess as HullWhiteProcess foreign -> CHullWhiteProcess' nocode#}-{#pointer *QlHullWhiteForwardProcess as HullWhiteForwardProcess foreign -> CHullWhiteForwardProcess' nocode#}+{#pointer *Garch11 foreign -> CGarch11 nocode#}  -- |Bates stochastic-volatility model: extends Heston with jumps in the underlying's return process. {#fun qlBatesModel as batesModel{withBatesProcess*`BatesProcess',preErrorCheck-`String'errorCheck*-}->`BatesModel'peekBatesModel*#}@@ -426,12 +424,12 @@ {#fun qlHestonSLVFDMModelLogEntries as hestonSlvFdmLogEntriesSnapshot{withHestonSLVFDMModel*`HestonSLVFDMModel',preErrorCheck-`String'errorCheck*-}->`HestonSLVFDMLogEntries'peekHestonSLVFDMLogEntries*#} {#fun pure qlHestonSLVFDMLogEntriesSize as hestonSlvFdmLogEntriesSize{withHestonSLVFDMLogEntries*`HestonSLVFDMLogEntries'}->`Word'fromIntegral#} {#fun qlHestonSLVFDMLogEntriesTime as hestonSlvFdmLogEntriesTime{withHestonSLVFDMLogEntries*`HestonSLVFDMLogEntries',fromIntegral`Word',preErrorCheck-`String'errorCheck*-}->`Double'#}-{#fun qlHestonSLVFDMLogEntriesSpotGrid as hestonSlvFdmLogEntriesSpotGrid{withHestonSLVFDMLogEntries*`HestonSLVFDMLogEntries',fromIntegral`Word',preArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}-{#fun qlHestonSLVFDMLogEntriesVarianceGrid as hestonSlvFdmLogEntriesVarianceGrid{withHestonSLVFDMLogEntries*`HestonSLVFDMLogEntries',fromIntegral`Word',preArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}-{#fun qlHestonSLVFDMLogEntriesDensity as hestonSlvFdmLogEntriesDensity{withHestonSLVFDMLogEntries*`HestonSLVFDMLogEntries',fromIntegral`Word',prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHestonSLVFDMLogEntriesSpotGrid as hestonSlvFdmLogEntriesSpotGrid{withHestonSLVFDMLogEntries*`HestonSLVFDMLogEntries',fromIntegral`Word',preDoubleArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHestonSLVFDMLogEntriesVarianceGrid as hestonSlvFdmLogEntriesVarianceGrid{withHestonSLVFDMLogEntries*`HestonSLVFDMLogEntries',fromIntegral`Word',preDoubleArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlHestonSLVFDMLogEntriesDensity as hestonSlvFdmLogEntriesDensity{withHestonSLVFDMLogEntries*`HestonSLVFDMLogEntries',fromIntegral`Word',prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Single-factor Hull-White (extended Vasicek) short-rate model: dr = (theta(t) - a r) dt + sigma dW, fitted to the given term structure.-{#fun qlHullWhite as hullWhite{withYieldTermStructure*`GenYieldTermStructure y',`Double' -- ^y+{#fun qlHullWhite as hullWhite{withYieldTermStructure*`GenYieldTermStructure y',`Double' -- ^a (mean reversion)   ,`Double' -- ^sigma   ,preErrorCheck-`String'errorCheck*-}->`HullWhite'peekHullWhite*#} @@ -454,29 +452,45 @@ -- piecewise-constant changes at the given dates, plus a single constant reversion. gsr :: GenYieldTermStructure y -> GenQuote q1 -> [(Day, GenQuote q1)] -> GenQuote q2 -> Double -> IO Gsr gsr ts initialVol subsequentVols reversion horizon =-  qlGsr ts dates (initialVol : vols) reversion horizon+  qlGsr ts dates (initialVol : vols) [reversion] horizon   where (dates, vols) = unzip subsequentVols++-- |One-factor GSR model with a piecewise-constant reversion as well as volatility: the initial+-- (volatility, reversion) pair holds until the first step date, and each step date starts a new+-- pair. 'calibrateReversionsIterative' needs this form, one reversion per calibration helper.+gsrWithReversions :: GenYieldTermStructure y -> (GenQuote q1, GenQuote q2) -> [(Day, (GenQuote q1, GenQuote q2))]+  -> Double -> IO Gsr+gsrWithReversions ts (initialVol, initialReversion) steps horizon =+  qlGsr ts dates (initialVol : vols) (initialReversion : reversions') horizon+  where (dates, pairs) = unzip steps+        (vols, reversions') = unzip pairs+ {#fun qlGsr{withYieldTermStructure*`GenYieldTermStructure y',withDayArray*`[Day]'& -- ^volstepdates   ,withQuoteArray*`[GenQuote q1]'& -- ^volatilities-  ,withQuote*`GenQuote q2' -- ^reversion+  ,withQuoteArray*`[GenQuote q2]'& -- ^reversions: one, or one per volatility   ,`Double' -- ^T   ,preErrorCheck-`String'errorCheck*-}->`Gsr'peekGsr*#}  -- |Volatility step values, as calibrated so far.-{#fun qlGsrVolatility{withGenCalibratedModel*`Gsr',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlGsrVolatility{withGenCalibratedModel*`Gsr',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#} +-- |Reversion values, as calibrated so far: one for a constant reversion, otherwise one per+-- volatility step.+{#fun qlGsrReversion as reversions{withGenCalibratedModel*`Gsr',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+ -- |The calibration mask ('calibrate''s @fixParameters@) that fixes every model parameter except -- the volatility at step index @i@ (0-based) -- a ready-made @fixParameters@ argument for -- calibrating that one volatility in isolation. {#fun qlGsrMoveVolatility as moveVolatility{withGenCalibratedModel*`Gsr'   ,fromIntegral`Word' -- ^i-  ,preArray-`[Bool]'&peekBoolArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preIntArray-`[Bool]'&peekBoolArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The calibration mask that fixes every model parameter except the reversion at index @i@--- (0-based) -- the reversion counterpart of 'moveVolatility'.+-- (0-based) -- the reversion counterpart of 'moveVolatility'. Only index 0 exists unless the model+-- was built by 'gsrWithReversions'. {#fun qlGsrMoveReversion as moveReversion{withGenCalibratedModel*`Gsr'   ,fromIntegral`Word' -- ^i-  ,preArray-`[Bool]'&peekBoolArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preIntArray-`[Bool]'&peekBoolArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Iteratively calibrates the volatility step values, one at a time, to the given helpers (assumed to have step dates matching the model's volatility step dates). {#fun qlGsrCalibrateVolatilitiesIterative as calibrateVolatilitiesIterative{withGenCalibratedModel*`Gsr',withBlackCalibrationHelperArray*`[GenBlackCalibrationHelper bch]'&,withOptimizationMethod*`OptimizationMethod',withEndCriteria*`EndCriteria'@@ -484,11 +498,23 @@   ,withDoubleArray*`[Double]'&   ,preErrorCheck-`String'errorCheck*-}->`()'#} +-- |Iteratively calibrates the reversions, one at a time: reversion @i@ is fitted to helper @i@+-- with every other parameter held. The model needs one reversion per helper at least, so build+-- it with 'gsrWithReversions'. The end criteria reflect only the last calibration.+--+-- A swaption's price depends on the reversion over its swap's life, so helper @i@ should exercise+-- inside reversion interval @i@ and span it. Helpers expiring at the volatility step dates leave+-- the fit ill-conditioned, and alternating with 'calibrateVolatilitiesIterative' can diverge.+{#fun qlGsrCalibrateReversionsIterative as calibrateReversionsIterative{withGenCalibratedModel*`Gsr',withBlackCalibrationHelperArray*`[GenBlackCalibrationHelper bch]'&,withOptimizationMethod*`OptimizationMethod',withEndCriteria*`EndCriteria'+  ,withMaybeConstraint*`Maybe Constraint'+  ,withDoubleArray*`[Double]'&+  ,preErrorCheck-`String'errorCheck*-}->`()'#}+ -- |Markov-functional interest-rate model, calibrated to a swaption volatility cube against @swapIndexBase@. markovFunctional :: GenYieldTermStructure y -> Double -- ^reversion   -> Double -- ^initial volatility   -> [(Day, Double)] -- ^subsequent volatility steps-  -> SwaptionVolatilityStructure+  -> GenSwaptionVolatilityStructure sv   -> NonEmpty (Day, (Word, TimeUnit)) -- ^swaption expiry/tenor calibration points   -> GenSwapIndex sidx -- ^swapIndexBase   -> Word -- ^yGridPoints@@ -508,21 +534,21 @@  -- |Markov-functional interest-rate model, calibrated to a caplet volatility structure against @iborIndex@. markovFunctionalCaplet :: GenYieldTermStructure y -> Double -> Double -> [(Day, Double)]-  -> OptionletVolatilityStructure -> NonEmpty Day -> GenIborIndex ibor -> Word -> IO MarkovFunctional+  -> GenOptionletVolatilityStructure ov -> NonEmpty Day -> GenIborIndex ibor -> Word -> IO MarkovFunctional markovFunctionalCaplet ts reversion initialVol steps capletVol expiries ibor gridPoints =   qlMarkovFunctionalCaplet ts reversion dates (initialVol : vols) capletVol (toList expiries) ibor gridPoints   where (dates, vols) = unzip steps {#fun qlMarkovFunctionalCaplet{withYieldTermStructure*`GenYieldTermStructure y',`Double' -- ^reversion   ,withDayArray*`[Day]'& -- ^volstepdates   ,withDoubleArray*`[Double]'& -- ^volatilities-  ,withOptionletVolatilityStructure*`OptionletVolatilityStructure' -- ^capletVol+  ,withOptionletVolatilityStructure*`GenOptionletVolatilityStructure ov' -- ^capletVol   ,withDayArray*`[Day]'& -- ^capletExpiries   ,withIborIndex*`GenIborIndex ibor' -- ^iborIndex   ,fromIntegral`Word' -- ^yGridPoints   ,preErrorCheck-`String'errorCheck*-}->`MarkovFunctional'peekMarkovFunctional*#}  -- |Volatility step values, as calibrated so far.-{#fun qlMarkovFunctionalVolatility{withGenCalibratedModel*`MarkovFunctional',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlMarkovFunctionalVolatility{withGenCalibratedModel*`MarkovFunctional',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Discount factor at time @t@ under the model's own fitted curve -- @AffineModel::discount@. -- Not 'pure': depends on the model's 'YieldTermStructure' handle, which can be relinked after@@ -638,7 +664,7 @@   ,`Double' -- ^bigT   ,`Double' -- ^t   ,`Double' -- ^y-  ,preArray-`RealVector'&peekRealVector*+  ,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The model's own state process. Throws if the model was constructed without one set.@@ -716,7 +742,7 @@ {#fun qlLfmHullWhiteCovariance{withStandalone*`LfmHullWhiteParameterization' -- ^parameterization   ,`Double' -- ^t   ,withDoubleArray*`[Double]'& -- ^x-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Calibrate to a set of market instruments (caps/swaptions)@@ -819,11 +845,19 @@ {#fun qlSwaptionHelperSwaption as helperSwaption{withSwaptionHelper*`SwaptionHelper',preErrorCheck-`String'errorCheck*-}->`Swaption'peekSwaption*#}  -- |Times relevant to pricing this calibration helper's instrument, to be added to the model's evolution time grid.-{#fun qlBlackCalibrationHelperTimes as times{withBlackCalibrationHelper*`GenBlackCalibrationHelper bch',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlBlackCalibrationHelperTimes as times{withBlackCalibrationHelper*`GenBlackCalibrationHelper bch',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Returns array of arguments on which calibration is done.-{#fun qlCalibratedModelParams as params{withCalibratedModel*`GenCalibratedModel m',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlCalibratedModelParams as params{withCalibratedModel*`GenCalibratedModel m',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#} +-- |Replace the arguments on which calibration is done, in the order 'params' returns them, and+-- notify the model's observers, so engines on it reprice. An array whose length differs from+-- 'params'' throws and leaves the model unchanged; the model's constraint is not checked. A later+-- 'calibrate' starts from these values.+{#fun qlCalibratedModelSetParams as setParams{withCalibratedModel*`GenCalibratedModel m'+  ,withDoubleArray*`[Double]'& -- ^params+  ,preErrorCheck-`String'errorCheck*-}->`()'#}+ -- |Black price given a volatility. {#fun qlBlackCalibrationHelperBlackPrice as blackPrice{withBlackCalibrationHelper*`GenBlackCalibrationHelper bch',`Double' -- ^volatility   ,preErrorCheck-`String'errorCheck*-}->`Double'#}@@ -849,10 +883,7 @@ {#fun qlBlackCalibrationHelperVolatility as volatility{withBlackCalibrationHelper*`GenBlackCalibrationHelper bch',preErrorCheck-`String'errorCheck*-}->`Quote'peekQuote*#}  -- |Sets the pricing engine used to compute this calibration helper's model value.-{#fun qlBlackCalibrationHelperSetPricingEngine as setPricingEngine{withBlackCalibrationHelper*`GenBlackCalibrationHelper bch',withPricingEngine*`PricingEngine',preErrorCheck-`String'errorCheck*-}->`()'#}--{#enum Garch11Mode{} deriving(Show, Eq, Read)#}-{#pointer *Garch11 foreign -> CGarch11 nocode#}+{#fun qlBlackCalibrationHelperSetPricingEngine as setPricingEngine{withBlackCalibrationHelper*`GenBlackCalibrationHelper bch',withPricingEngine*`GenPricingEngine pe',preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Direct-parameter GARCH(1,1) model: @vl@ is the long-term (unconditional) volatility: the -- model's persistence @gamma = 1 - alpha - beta@ and @omega = vl * gamma@ are derived from it.@@ -912,7 +943,7 @@   return $ zip ds vs   where (dates, vals) = unzip (toList series) {#fun qlGarch11Calculate{withGarch11*`Garch11',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Garman-Klass (1980) simple estimator: @sigma^2 = ln(close\/open)^2@, scaled by @yearFraction@.@@ -926,7 +957,7 @@   where (dates, opens, closes, highs, lows) = unzipBars bars {#fun qlGarmanKlassSimpleSigma{`Double',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&   ,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Garman-Klass Sigma1: blends 'garmanKlassSimpleSigma' with the overnight (previous close to@@ -942,7 +973,7 @@   where (dates, opens, closes, highs, lows) = unzipBars bars {#fun qlGarmanKlassSigma1{`Double',`Double',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&   ,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Parkinson (1980) high-low estimator: @sigma^2 = ln(high\/low)^2 \/ (4 ln 2)@, scaled by@@ -956,7 +987,7 @@   where (dates, opens, closes, highs, lows) = unzipBars bars {#fun qlParkinsonSigma{`Double',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&   ,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Garman-Klass Sigma3: blends 'parkinsonSigma' with the overnight jump, same@@ -971,7 +1002,7 @@   where (dates, opens, closes, highs, lows) = unzipBars bars {#fun qlGarmanKlassSigma3{`Double',`Double',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&   ,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Garman-Klass (1980) Sigma4 estimator, combining the high-low range with the close-open@@ -985,7 +1016,7 @@   where (dates, opens, closes, highs, lows) = unzipBars bars {#fun qlGarmanKlassSigma4{`Double',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&   ,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Garman-Klass (1980) Sigma5 estimator: an alternative high-low\/close-open combination to@@ -999,7 +1030,7 @@   where (dates, opens, closes, highs, lows) = unzipBars bars {#fun qlGarmanKlassSigma5{`Double',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&   ,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Garman-Klass Sigma6: blends 'garmanKlassSigma5' with the overnight jump, same@@ -1014,7 +1045,7 @@   where (dates, opens, closes, highs, lows) = unzipBars bars {#fun qlGarmanKlassSigma6{`Double',`Double',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&   ,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Smooths an already-computed volatility series with a rolling constant estimate over the@@ -1027,7 +1058,7 @@   return $ zip ds vs   where (dates, vals) = unzip (toList series) {#fun qlConstantVolatilityEstimator{fromIntegral`Word',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Local (point-to-point) volatility estimate from a raw price series: @|ln(p_i\/p_{i-1})| \/@@ -1041,7 +1072,7 @@   return $ zip ds vs   where (dates, vals) = unzip (toList series) {#fun qlSimpleLocalVolatilityEstimator{`Double',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  unzipBars :: NonEmpty (Day, Double, Double, Double, Double) -> ([Day], [Double], [Double], [Double], [Double])@@ -1053,5 +1084,48 @@     c5 (_,_,c,_,_) = c     h5 (_,_,_,h,_) = h     l5 (_,_,_,_,l) = l++-- |Conditional compounded overnight rate using the coupon's observation dates and index day+-- counter; ignores gearing/spread and historical fixings. Requires QuantLib 1.44.+-- Nothing selects the model reference date or model curve.+{#fun qlGaussian1dModelCompoundedRate as gaussian1dCompoundedRate{withStandalone*`Gaussian1dModel' -- ^model+  ,withOvernightIndexedCoupon*`OvernightIndexedCoupon' -- ^coupon+  ,withMaybeDay*`Maybe Day' -- ^referenceDate+  ,`Double' -- ^y+  ,withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)' -- ^curve+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Rough Heston volatility model (1.44). Hurst is constrained to [0, 0.5]; 0.5 is classical Heston.+{#fun qlRoughHestonModel as roughHestonModel{withHestonProcess*`GenHestonProcess hp' -- ^process+  ,`Double' -- ^hurst+  ,preErrorCheck-`String'errorCheck*-}->`RoughHestonModel'peekRoughHestonModel*#}++-- |Current calibrated theta (1.44).+{#fun qlRoughHestonModelTheta as roughHestonTheta{withRoughHestonModel*`RoughHestonModel' -- ^model+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Current calibrated kappa (1.44).+{#fun qlRoughHestonModelKappa as roughHestonKappa{withRoughHestonModel*`RoughHestonModel' -- ^model+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Current calibrated sigma (1.44).+{#fun qlRoughHestonModelSigma as roughHestonSigma{withRoughHestonModel*`RoughHestonModel' -- ^model+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Current calibrated rho (1.44).+{#fun qlRoughHestonModelRho as roughHestonRho{withRoughHestonModel*`RoughHestonModel' -- ^model+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Current calibrated v0 (1.44).+{#fun qlRoughHestonModelV0 as roughHestonV0{withRoughHestonModel*`RoughHestonModel' -- ^model+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Current calibrated hurst (1.44).+{#fun qlRoughHestonModelHurst as roughHestonHurst{withRoughHestonModel*`RoughHestonModel' -- ^model+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Current calibrated process (1.44).+{#fun qlRoughHestonModelProcess as roughHestonProcess{withRoughHestonModel*`RoughHestonModel' -- ^model+  ,preErrorCheck-`String'errorCheck*-}->`HestonProcess'peekHestonProcess*#}  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
QuantLib/PricingEngine.chs view
@@ -3,7 +3,9 @@   (     -- * Types     -- ** Engines-    PricingEngine+    GenPricingEngine+  , PricingEngine+  , AnalyticRoughHestonEngine   , FdmQuantoHelper      -- ** Option calculators@@ -24,6 +26,9 @@   , FixedPointEquation(..)   , QdFpScheme(..)   , IntegrationControl(..)+  , RoughHestonApproximation(..)+  , FourierIntegration(..)+  , H1HwMean(..)   , LatticeTime(..)   , FdmGrid(..)   , OperatorSplittingOrder(..)@@ -31,12 +36,14 @@   , StrikeSpec(..)      -- * Constructors+  , asPricingEngine     -- ** Discounting and counterparty engines   , discountingBondEngine   , riskyBondEngine   , discountingSwapEngine   , discountingFxForwardEngine   , discountingConstNotionalCrossCurrencySwapEngine+  , discountingMtmCrossCurrencyBasisSwapEngine   , counterpartyAdjSwapEngine   , discountingPerpetualFuturesEngine @@ -116,6 +123,9 @@     -- ** Equity, stochastic-volatility and exotic products   , analyticGjrGarchEngine   , analyticHestonEngine+  , analyticRoughHestonEngine+  , analyticRoughHestonEngineWithIntegration+  , analyticH1HwEngine   , analyticHestonHullWhiteEngine   , batesEngine   , fftVanillaEngine@@ -156,6 +166,7 @@   , qdFpAmericanEngine   , continuousArithmeticAsianVecerEngine     -- ** Credit and spread products+  , blackCdsOptionEngine   , integralCdsEngine   , integralEngine   , isdaCdsEngine@@ -216,6 +227,11 @@   , blackDeltaCalculator      -- * Inspectors+  , roughHestonPriceVanillaPayoff+  , roughHestonCharacteristicFunction+  , roughHestonLogCharacteristicFunction+  , roughHestonRiccatiSolution+  , roughHestonNumberOfEvaluations     -- ** Option-calculator capability   , HasOptionCalculator(..) @@ -268,6 +284,8 @@ #include "qlEnumObjects.h"  import QuantLib.Internal+import Data.Complex(Complex)+import QuantLib.TermStructure(TermPoint(..)) import QuantLib.Internal.Type {#import QuantLib.InterestRate#}(VolatilityType) {#import QuantLib.Math#}@@ -284,6 +302,16 @@   | IntegrationTolerance Double Word   deriving (Eq, Show) +-- |How the H1-HW engine reads E[sqrt v] of the Heston variance. QuantLib fits @a + b exp(-c t)@+-- at one year or @1 / kappa@, depending on its variance parameters; the fit can fail for a+-- nonmonotone mean. 'ExactMean' uses Gauss-Legendre on the specified positive number of nodes,+-- with an asymptotic expectation for large noncentrality. Its accuracy depends on the node count+-- and model parameters; it provides no adaptive error estimate and retains the H1-HW approximation.+data H1HwMean+  = FittedExponentialMean+  | ExactMean Word+  deriving (Eq, Show)+ -- |An option's type and strike, given directly or carried by a striked payoff. data StrikeSpec   = Strike !OptionType !Double@@ -313,7 +341,6 @@ {#pointer *DayCounter foreign -> CDayCounter nocode#} {#pointer *Currency foreign -> CCurrency nocode#} {#pointer *QlDividend as Dividend foreign -> CDividend nocode#}-{#pointer *QlQuote as Quote foreign -> CQuote' nocode#} {#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#} {#pointer *QlBlackVolTermStructure as BlackVolTermStructure foreign -> CBlackVolTermStructure' nocode#} {#pointer *QlCallableBondVolatilityStructure as CallableBondVolatilityStructure foreign -> CCallableBondVolatilityStructure' nocode#}@@ -326,40 +353,32 @@ {#pointer *QlGJRGARCHModel as GJRGARCHModel foreign -> CGJRGARCHModel' nocode#} {#pointer *QlHestonModel as HestonModel foreign -> CHestonModel' nocode#} {#pointer *QlBatesModel as BatesModel foreign -> CBatesModel' nocode#}-{#pointer *QlPiecewiseTimeDependentHestonModel as PiecewiseTimeDependentHestonModel foreign -> CPiecewiseTimeDependentHestonModel' nocode#} {#pointer *QlShortRateModel as ShortRateModel foreign -> CShortRateModel' nocode#} {#pointer *QlAffineModel foreign -> CAffineModel' nocode#} {#pointer *QlGaussian1dModel foreign -> CGaussian1dModel' nocode#} {#pointer *QlOneFactorAffineModel as OneFactorAffineModel foreign -> COneFactorAffineModel' nocode#} {#pointer *QlLiborForwardModel as LiborForwardModel foreign -> CLiborForwardModel' nocode#} {#pointer *QlHullWhite as HullWhite foreign -> CHullWhite' nocode#}-{#pointer *QlCalibratedModel as CalibratedModel foreign -> CCalibratedModel' nocode#} {#pointer *QlG2 as G2 foreign -> CG2' nocode#} {#pointer *QlBatesDetJumpModel as BatesDetJumpModel foreign -> CBatesDetJumpModel' nocode#} {#pointer *QlBatesDoubleExpDetJumpModel as BatesDoubleExpDetJumpModel foreign -> CBatesDoubleExpDetJumpModel' nocode#} {#pointer *QlBatesDoubleExpModel as BatesDoubleExpModel foreign -> CBatesDoubleExpModel' nocode#} {#pointer *QlGeneralizedBlackScholesProcess as GeneralizedBlackScholesProcess foreign -> CGeneralizedBlackScholesProcess' nocode#}-{#pointer *QlStochasticProcess1D as StochasticProcess1D foreign -> CStochasticProcess1D' nocode#}-{#pointer *QlStochasticProcess as StochasticProcess foreign -> CStochasticProcess' nocode#} {#pointer *QlBlackProcess as BlackProcess foreign -> CBlackProcess' nocode#}-{#pointer *QlExtOUWithJumpsProcess as ExtOUWithJumpsProcess foreign -> CExtOUWithJumpsProcess' nocode#}-{#pointer *QlExtendedOrnsteinUhlenbeckProcess as ExtendedOrnsteinUhlenbeckProcess foreign -> CExtendedOrnsteinUhlenbeckProcess' nocode#} {#pointer *QlGJRGARCHProcess as GJRGARCHProcess foreign -> CGJRGARCHProcess' nocode#} {#pointer *QlHestonProcess as HestonProcess foreign -> CHestonProcess' nocode#}-{#pointer *QlBatesProcess as BatesProcess foreign -> CBatesProcess' nocode#} {#pointer *QlHybridHestonHullWhiteProcess as HybridHestonHullWhiteProcess foreign -> CHybridHestonHullWhiteProcess' nocode#}-{#pointer *QlKlugeExtOUProcess as KlugeExtOUProcess foreign -> CKlugeExtOUProcess' nocode#}-{#pointer *QlLiborForwardModelProcess as LiborForwardModelProcess foreign -> CLiborForwardModelProcess' nocode#} {#pointer *QlStochasticProcessArray as StochasticProcessArray foreign -> CStochasticProcessArray' nocode#} {#pointer *QlVarianceGammaProcess as VarianceGammaProcess foreign -> CVarianceGammaProcess' nocode#} {#pointer *QlMerton76Process as Merton76Process foreign -> CMerton76Process' nocode#} {#pointer *QlHullWhiteProcess as HullWhiteProcess foreign -> CHullWhiteProcess' nocode#}-{#pointer *QlHullWhiteForwardProcess as HullWhiteForwardProcess foreign -> CHullWhiteForwardProcess' nocode#} {#pointer *QlBlackCalculator as BlackCalculator foreign -> CBlackCalculator' nocode#} {#pointer *QlBlackScholesCalculator as BlackScholesCalculator foreign -> CBlackScholesCalculator' nocode#} {#pointer *QlBachelierCalculator as BachelierCalculator foreign -> CBachelierCalculator nocode#} {#pointer *BlackDeltaCalculator foreign -> CBlackDeltaCalculator nocode#}-{#pointer *QlPricingEngine as PricingEngine foreign -> CPricingEngine nocode#}+{#pointer *QlRoughHestonModel as RoughHestonModel foreign -> CRoughHestonModel' nocode#}+{#pointer *QlAnalyticRoughHestonEngine as AnalyticRoughHestonEngine foreign -> CAnalyticRoughHestonEngine' nocode#}+{#pointer *QlPricingEngine as PricingEngine foreign -> CPricingEngine' nocode#} {#pointer *QlStrikedTypePayoff nocode#} {#pointer *QlPlainVanillaPayoff nocode#} {#pointer *QlLocalVolTermStructure as LocalVolTermStructure foreign -> CLocalVolTermStructure' nocode#}@@ -394,7 +413,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |discounts a bond's cash flows off a default-risky curve and a flat recovery rate-{#fun qlRiskyBondEngine as riskyBondEngine{withGenTermStructure*`DefaultProbabilityTermStructure',`Double' -- ^recoveryRate+{#fun qlRiskyBondEngine as riskyBondEngine{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double' -- ^recoveryRate   ,withYieldTermStructure*`GenYieldTermStructure y'   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#} @@ -432,69 +451,69 @@ -- match upstream's unilateral-CVA-only defaults. {#fun qlCounterpartyAdjSwapEngine as counterpartyAdjSwapEngine{withYieldTermStructure*`GenYieldTermStructure y' -- ^discountCurve   ,withQuote*`GenQuote q' -- ^blackVol-  ,withGenTermStructure*`DefaultProbabilityTermStructure' -- ^ctptyDTS+  ,withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d1' -- ^ctptyDTS   ,`Double' -- ^ctptyRecoveryRate-  ,withMaybeDefaultProbabilityTermStructure*`Maybe DefaultProbabilityTermStructure' -- ^invstDTS+  ,withMaybeDefaultProbabilityTermStructure*`Maybe (GenDefaultProbabilityTermStructure d2)' -- ^invstDTS   ,`Double' -- ^invstRecoveryRate   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for barrier options-{#fun qlAnalyticBarrierEngine as analyticBarrierEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticBarrierEngine as analyticBarrierEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic (Heynen and Kat) pricing engine for a barrier option on two assets, where the first asset's value is compared to the strike and the second's is monitored against the barrier-{#fun qlAnalyticTwoAssetBarrierEngine as analyticTwoAssetBarrierEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process1-  ,withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process2+{#fun qlAnalyticTwoAssetBarrierEngine as analyticTwoAssetBarrierEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1' -- ^process1+  ,withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2' -- ^process2   ,withQuote*`GenQuote q' -- ^rho   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for soft barrier options, knocked in/out proportionally over a barrier range-{#fun qlAnalyticSoftBarrierEngine as analyticSoftBarrierEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticSoftBarrierEngine as analyticSoftBarrierEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for simple chooser options-{#fun qlAnalyticSimpleChooserEngine as analyticSimpleChooserEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticSimpleChooserEngine as analyticSimpleChooserEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Analytic Black-Scholes engine for a 'complexChooserOption'. Both alternatives must have European exercise.-{#fun qlAnalyticComplexChooserEngine as analyticComplexChooserEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process+{#fun qlAnalyticComplexChooserEngine as analyticComplexChooserEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs' -- ^process   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for two-asset correlation options-{#fun qlAnalyticTwoAssetCorrelationEngine as analyticTwoAssetCorrelationEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process1-  ,withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process2+{#fun qlAnalyticTwoAssetCorrelationEngine as analyticTwoAssetCorrelationEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1' -- ^process1+  ,withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2' -- ^process2   ,withQuote*`GenQuote q' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Analytic (Margrabe) engine for a European 'margrabeOption': the closed-form price of an -- option to exchange one asset for another, from W. Margrabe, \"The Value of an Option to -- Exchange One Asset for Another\", Journal of Finance 33 (March 1978), 177-186.-{#fun qlAnalyticEuropeanMargrabeEngine as analyticEuropeanMargrabeEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process1-  ,withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process2+{#fun qlAnalyticEuropeanMargrabeEngine as analyticEuropeanMargrabeEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1' -- ^process1+  ,withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2' -- ^process2   ,`Double' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Analytic (Margrabe) engine for an American 'margrabeOption': the closed-form price of an -- option to exchange one asset for another with early exercise, from W. Margrabe, \"The Value -- of an American Option to Exchange One Asset for Another\", Journal of Finance 33, 177-86.-{#fun qlAnalyticAmericanMargrabeEngine as analyticAmericanMargrabeEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process1-  ,withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process2+{#fun qlAnalyticAmericanMargrabeEngine as analyticAmericanMargrabeEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1' -- ^process1+  ,withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2' -- ^process2   ,`Double' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for writer-extensible options-{#fun qlAnalyticWriterExtensibleOptionEngine as analyticWriterExtensibleOptionEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticWriterExtensibleOptionEngine as analyticWriterExtensibleOptionEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Analytic Black-Scholes engine for a 'holderExtensibleOption'. The original option must have European exercise.-{#fun qlAnalyticHolderExtensibleOptionEngine as analyticHolderExtensibleOptionEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process+{#fun qlAnalyticHolderExtensibleOptionEngine as analyticHolderExtensibleOptionEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs' -- ^process   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for partial-time barrier options-{#fun qlAnalyticPartialTimeBarrierOptionEngine as analyticPartialTimeBarrierOptionEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticPartialTimeBarrierOptionEngine as analyticPartialTimeBarrierOptionEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for American binary barrier options (cash-or-nothing/asset-or-nothing)-{#fun qlAnalyticBinaryBarrierEngine as analyticBinaryBarrierEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticBinaryBarrierEngine as analyticBinaryBarrierEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |/NB/ Timesteps for Cox-Ross-Rubinstein trees are adjusted using the Boyle-Lau algorithm; -- pass @maxTimeSteps = timeSteps@ to disable it, or @0@ to use the library's default heuristic.-{#fun qlBinomialBarrierEngine as binomialBarrierEngine{`BinomialTree',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromIntegral`Word' -- ^timeSteps+{#fun qlBinomialBarrierEngine as binomialBarrierEngine{`BinomialTree',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromIntegral`Word' -- ^timeSteps   ,fromIntegral`Word' -- ^maxTimeSteps   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#} @@ -510,7 +529,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for double-barrier European options-{#fun qlAnalyticDoubleBarrierEngine as analyticDoubleBarrierEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromIntegral`Int' -- ^series+{#fun qlAnalyticDoubleBarrierEngine as analyticDoubleBarrierEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromIntegral`Int' -- ^series   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |always uses 'AnalyticDoubleBarrierEngine' as the underlying smile-free double-barrier engine@@ -526,11 +545,11 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |pricing engine for double-barrier options using binomial trees-{#fun qlBinomialDoubleBarrierEngine as binomialDoubleBarrierEngine{`BinomialTree',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromIntegral`Word' -- ^timeSteps+{#fun qlBinomialDoubleBarrierEngine as binomialDoubleBarrierEngine{`BinomialTree',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromIntegral`Word' -- ^timeSteps   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo pricing engine for double-barrier options-{#fun qlMCDoubleBarrierEngine as mcDoubleBarrierEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCDoubleBarrierEngine as mcDoubleBarrierEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate@@ -541,25 +560,25 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for Cliquet (ratchet) options-{#fun qlAnalyticCliquetEngine as analyticCliquetEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticCliquetEngine as analyticCliquetEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for compound options-{#fun qlAnalyticCompoundOptionEngine as analyticCompoundOptionEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticCompoundOptionEngine as analyticCompoundOptionEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for European continuous fixed-strike lookback options-{#fun qlAnalyticContinuousFixedLookbackEngine as analyticContinuousFixedLookbackEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticContinuousFixedLookbackEngine as analyticContinuousFixedLookbackEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for European continuous floating-strike lookback options-{#fun qlAnalyticContinuousFloatingLookbackEngine as analyticContinuousFloatingLookbackEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticContinuousFloatingLookbackEngine as analyticContinuousFloatingLookbackEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for European continuous partial-time floating-strike lookback options-{#fun qlAnalyticContinuousPartialFloatingLookbackEngine as analyticContinuousPartialFloatingLookbackEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticContinuousPartialFloatingLookbackEngine as analyticContinuousPartialFloatingLookbackEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for European continuous partial-time fixed-strike lookback options-{#fun qlAnalyticContinuousPartialFixedLookbackEngine as analyticContinuousPartialFixedLookbackEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticContinuousPartialFixedLookbackEngine as analyticContinuousPartialFixedLookbackEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for European continuous geometric average-price Asian options-{#fun qlAnalyticContinuousGeometricAveragePriceAsianEngine as analyticContinuousGeometricAveragePriceAsianEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticContinuousGeometricAveragePriceAsianEngine as analyticContinuousGeometricAveragePriceAsianEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Analytic pricing engine for European continuous geometric average-price Asian options under -- the Heston stochastic-volatility model.  Implements the closed-form solution of Kim & Wee,@@ -582,7 +601,7 @@  -- |Monte Carlo pricing engine for continuous fixed-strike lookback options. Exactly one of -- @timeSteps@\/@timeStepsPerYear@ must be given; the other must be 'Nothing'.-{#fun qlMCLookbackFixedEngine as mcLookbackFixedEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCLookbackFixedEngine as mcLookbackFixedEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate@@ -594,7 +613,7 @@  -- |Monte Carlo pricing engine for continuous floating-strike lookback options. Exactly one of -- @timeSteps@\/@timeStepsPerYear@ must be given; the other must be 'Nothing'.-{#fun qlMCLookbackFloatingEngine as mcLookbackFloatingEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCLookbackFloatingEngine as mcLookbackFloatingEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate@@ -606,7 +625,7 @@  -- |Monte Carlo pricing engine for continuous partial-time fixed-strike lookback options. Exactly -- one of @timeSteps@\/@timeStepsPerYear@ must be given; the other must be 'Nothing'.-{#fun qlMCLookbackPartialFixedEngine as mcLookbackPartialFixedEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCLookbackPartialFixedEngine as mcLookbackPartialFixedEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate@@ -618,7 +637,7 @@  -- |Monte Carlo pricing engine for continuous partial-time floating-strike lookback options. -- Exactly one of @timeSteps@\/@timeStepsPerYear@ must be given; the other must be 'Nothing'.-{#fun qlMCLookbackPartialFloatingEngine as mcLookbackPartialFloatingEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCLookbackPartialFloatingEngine as mcLookbackPartialFloatingEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate@@ -629,45 +648,45 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for American digital (cash-or-nothing/asset-or-nothing) options-{#fun qlAnalyticDigitalAmericanEngine as analyticDigitalAmericanEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticDigitalAmericanEngine as analyticDigitalAmericanEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for American knock-out digital (cash-or-nothing/asset-or-nothing) options-{#fun qlAnalyticDigitalAmericanKOEngine as analyticDigitalAmericanKoEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticDigitalAmericanKOEngine as analyticDigitalAmericanKoEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for European discrete geometric average-price Asian options-{#fun qlAnalyticDiscreteGeometricAveragePriceAsianEngine as analyticDiscreteGeometricAveragePriceAsianEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticDiscreteGeometricAveragePriceAsianEngine as analyticDiscreteGeometricAveragePriceAsianEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for European discrete geometric average-strike Asian options-{#fun qlAnalyticDiscreteGeometricAverageStrikeAsianEngine as analyticDiscreteGeometricAverageStrikeAsianEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticDiscreteGeometricAverageStrikeAsianEngine as analyticDiscreteGeometricAverageStrikeAsianEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Turnbull-Wakeman moment-matching pricing engine for discrete arithmetic average-price\/-strike Asian options-{#fun qlTurnbullWakemanAsianEngine as turnbullWakemanAsianEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlTurnbullWakemanAsianEngine as turnbullWakemanAsianEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for European options with discrete dividends-{#fun qlAnalyticDividendEuropeanEngine as analyticDividendEuropeanEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withDividendArray*`[Dividend]'&,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticDividendEuropeanEngine as analyticDividendEuropeanEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',withDividendArray*`[Dividend]'&,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic Black-Scholes pricing engine for European options-{#fun qlAnalyticEuropeanEngine as analyticEuropeanEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlAnalyticEuropeanEngine as analyticEuropeanEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)' -- ^discountCurve   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for performance (return) options-{#fun qlAnalyticPerformanceEngine as analyticPerformanceEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticPerformanceEngine as analyticPerformanceEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic pricing engine for forward-starting European options; binds the @AnalyticEuropeanEngine@ instantiation of upstream's @ForwardVanillaEngine\<Engine\>@ template-{#fun qlForwardEuropeanEngine as forwardEuropeanEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlForwardEuropeanEngine as forwardEuropeanEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Barone-Adesi\/Whaley approximation pricing engine for forward-starting American options; binds the @BaroneAdesiWhaleyApproximationEngine@ instantiation of @ForwardVanillaEngine\<Engine\>@-{#fun qlForwardBaroneAdesiWhaleyEngine as forwardBaroneAdesiWhaleyEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlForwardBaroneAdesiWhaleyEngine as forwardBaroneAdesiWhaleyEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Bjerksund\/Stensland approximation pricing engine for forward-starting American options; binds the @BjerksundStenslandApproximationEngine@ instantiation of @ForwardVanillaEngine\<Engine\>@-{#fun qlForwardBjerksundStenslandEngine as forwardBjerksundStenslandEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlForwardBjerksundStenslandEngine as forwardBjerksundStenslandEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |finite-differences Black-Scholes pricing engine for forward-starting vanilla options, with the wrapped engine's grid\/scheme params fixed at their QuantLib defaults; binds the @FdBlackScholesVanillaEngine@ instantiation of @ForwardVanillaEngine\<Engine\>@-{#fun qlForwardFdBlackScholesVanillaEngine as forwardFdBlackScholesVanillaEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlForwardFdBlackScholesVanillaEngine as forwardFdBlackScholesVanillaEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo pricing engine for forward-starting European options under a Black-Scholes process-{#fun qlMCForwardEuropeanBSEngine1 as mcForwardEuropeanBsEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCForwardEuropeanBSEngine1 as mcForwardEuropeanBsEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate@@ -696,35 +715,35 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |quanto-adjusts a European vanilla option's price and greeks for a payoff paid in a currency other than the underlying's; binds the @VanillaOption@\/@AnalyticEuropeanEngine@ instantiation of upstream's @QuantoEngine\<Instr,Engine\>@ template-{#fun qlQuantoEuropeanEngine as quantoEuropeanEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlQuantoEuropeanEngine as quantoEuropeanEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^foreignRiskFreeRate   ,withBlackVolTermStructure*`GenBlackVolTermStructure bv' -- ^exchangeRateVolatility   ,withQuote*`GenQuote q' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |quanto-adjusts a forward-starting vanilla option; binds the @ForwardVanillaOption@\/@ForwardVanillaEngine\<AnalyticEuropeanEngine\>@ instantiation of @QuantoEngine\<Instr,Engine\>@-{#fun qlQuantoForwardEuropeanEngine as quantoForwardEuropeanEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlQuantoForwardEuropeanEngine as quantoForwardEuropeanEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^foreignRiskFreeRate   ,withBlackVolTermStructure*`GenBlackVolTermStructure bv' -- ^exchangeRateVolatility   ,withQuote*`GenQuote q' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |quanto-adjusts a forward-starting performance (strike-resetting, percentage-payoff) vanilla option; binds the @ForwardVanillaOption@\/@ForwardPerformanceVanillaEngine\<AnalyticEuropeanEngine\>@ instantiation of @QuantoEngine\<Instr,Engine\>@-{#fun qlQuantoForwardPerformanceEuropeanEngine as quantoForwardPerformanceEuropeanEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlQuantoForwardPerformanceEuropeanEngine as quantoForwardPerformanceEuropeanEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^foreignRiskFreeRate   ,withBlackVolTermStructure*`GenBlackVolTermStructure bv' -- ^exchangeRateVolatility   ,withQuote*`GenQuote q' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |quanto-adjusts a single-barrier option; binds the @BarrierOption@\/@AnalyticBarrierEngine@ instantiation of @QuantoEngine\<Instr,Engine\>@-{#fun qlQuantoBarrierEngine as quantoBarrierEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlQuantoBarrierEngine as quantoBarrierEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^foreignRiskFreeRate   ,withBlackVolTermStructure*`GenBlackVolTermStructure bv' -- ^exchangeRateVolatility   ,withQuote*`GenQuote q' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |quanto-adjusts a double-barrier option; binds the @DoubleBarrierOption@\/@AnalyticDoubleBarrierEngine@ instantiation of @QuantoEngine\<Instr,Engine\>@-{#fun qlQuantoDoubleBarrierEngine as quantoDoubleBarrierEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlQuantoDoubleBarrierEngine as quantoDoubleBarrierEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^foreignRiskFreeRate   ,withBlackVolTermStructure*`GenBlackVolTermStructure bv' -- ^exchangeRateVolatility   ,withQuote*`GenQuote q' -- ^correlation@@ -788,7 +807,7 @@ {#fun qlBachelierSwaptionEngine1 as bachelierSwaptionEngineFromVolatilityStructure{withYieldTermStructure*`GenYieldTermStructure y',withSwaptionVolatilityStructure*`GenSwaptionVolatilityStructure sv',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |analytic European option pricer including stochastic interest rates (Black-Scholes-Merton + Hull-White)-{#fun qlAnalyticBSMHullWhiteEngine as analyticBsmHullWhiteEngine{`Double',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withHullWhite*`HullWhite',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlAnalyticBSMHullWhiteEngine as analyticBsmHullWhiteEngine{`Double',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',withHullWhite*`HullWhite',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |the term structure is only needed when the short-rate model cannot provide one itself. {#fun qlAnalyticCapFloorEngine as analyticCapFloorEngine{withStandalone*`AffineModel',withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}@@ -812,6 +831,14 @@   ,fromIntegral`Word' -- ^maxEvaluations   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#} +-- |Heston/Hull-White approximation engine for European vanilla options. The H1-HW approximation assumes zero variance/short-rate correlation; @rhoSr@ is the equity/short-rate correlation.+{#fun qlAnalyticH1HWEngine as analyticH1HwEngineOrder{withHestonModel*`GenHestonModel hm',withHullWhite*`HullWhite'+  ,`Double' -- ^rhoSr+  ,fromIntegral`Word' -- ^integrationOrder+  ,`Bool' -- ^exactMean+  ,fromIntegral`Word' -- ^meanOrder+  ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+ -- |semi-analytic pricing engine combining a Heston equity model with a Hull-White short-rate model {#fun qlAnalyticHestonHullWhiteEngine as analyticHestonHullWhiteEngineOrder{withHestonModel*`GenHestonModel hm',withHullWhite*`HullWhite'   ,fromIntegral`Word' -- ^integrationOrder@@ -823,7 +850,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |FFT-based pricing engine for vanilla options under a Black-Scholes process-{#fun qlFFTVanillaEngine as fftVanillaEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Double' -- ^logStrikeSpacing+{#fun qlFFTVanillaEngine as fftVanillaEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',`Double' -- ^logStrikeSpacing   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |swaption pricing engine for the G2 two-factor short-rate model, priced via the Black formula@@ -881,6 +908,14 @@   ,fromIntegral`Word' -- ^maxEvaluations   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#} +{#fun qlAnalyticH1HWEngine1 as analyticH1HwEngineTolerance{withHestonModel*`GenHestonModel hm',withHullWhite*`HullWhite'+  ,`Double' -- ^rhoSr+  ,`Double' -- ^relTolerance+  ,fromIntegral`Word' -- ^maxEvaluations+  ,`Bool' -- ^exactMean+  ,fromIntegral`Word' -- ^meanOrder+  ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+ -- |Semi-analytic Heston/Hull-White engine with fixed-order or tolerance-based integration. analyticHestonHullWhiteEngine :: GenHestonModel hm -> HullWhite -> IntegrationControl -> IO PricingEngine analyticHestonHullWhiteEngine heston hullWhite control =@@ -888,6 +923,20 @@     IntegrationOrder order -> analyticHestonHullWhiteEngineOrder heston hullWhite order     IntegrationTolerance tolerance evaluations -> analyticHestonHullWhiteEngineTolerance heston hullWhite tolerance evaluations +-- |H1-HW approximation engine with fixed-order or tolerance-based integration. @rhoSr@ must be+-- non-negative. 'ExactMean' uses QuantLib's native variance-root expectation integration when+-- available, otherwise hasquant's backport. 'FittedExponentialMean' delegates to QuantLib's fitted+-- engine: invalid or singular fits can return NaN or throw, depending on the linked version.+analyticH1HwEngine :: GenHestonModel hm -> HullWhite -> Double -> IntegrationControl -> H1HwMean -> IO PricingEngine+analyticH1HwEngine heston hullWhite rhoSr control mean =+  case control of+    IntegrationOrder order -> analyticH1HwEngineOrder heston hullWhite rhoSr order exact meanOrder+    IntegrationTolerance tolerance evaluations -> analyticH1HwEngineTolerance heston hullWhite rhoSr tolerance evaluations exact meanOrder+  where+    (exact, meanOrder) = case mean of+      FittedExponentialMean -> (False, 0)+      ExactMean n -> (True, n)+ -- |semi-analytic Bates-model pricing engine, integrating with a fixed relative tolerance and evaluation cap {#fun qlBatesEngine1 as batesEngineTolerance{withBatesModel*`GenBatesModel bm',`Double' -- ^relTolerance   ,fromIntegral`Word' -- ^maxEvaluations@@ -901,7 +950,7 @@     IntegrationTolerance tolerance evaluations -> batesEngineTolerance model tolerance evaluations  -- |Barone-Adesi and Whaley (1987) quadratic-approximation engine for American options-{#fun qlBaroneAdesiWhaleyApproximationEngine as baroneAdesiWhaleyApproximationEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlBaroneAdesiWhaleyApproximationEngine as baroneAdesiWhaleyApproximationEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  {#fun qlBatesDetJumpEngine1 as batesDetJumpEngineTolerance{withBatesDetJumpModel*`BatesDetJumpModel',`Double' -- ^relTolerance   ,fromIntegral`Word' -- ^maxEvaluations@@ -946,12 +995,12 @@     IntegrationTolerance tolerance evaluations -> batesDoubleExpEngineTolerance model tolerance evaluations  -- |Bjerksund and Stensland (1993) approximation engine for American options-{#fun qlBjerksundStenslandApproximationEngine as bjerksundStenslandApproximationEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlBjerksundStenslandApproximationEngine as bjerksundStenslandApproximationEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |American engine based on the QD+ approximation to the exercise boundary. Mainly a good -- initial guess for the exercise boundary of 'qdFpAmericanEngine'; usable as a standalone -- (lower-accuracy) American pricer on its own.-{#fun qlQdPlusAmericanEngine as qdPlusAmericanEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlQdPlusAmericanEngine as qdPlusAmericanEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,fromIntegral`Word' -- ^interpolationPoints, number of Chebyshev nodes used to interpolate the exercise boundary   ,`SolverType' -- ^solverType, root-finding method used to locate the exercise boundary   ,`Double' -- ^eps, solver accuracy@@ -962,7 +1011,7 @@ -- boundary (Andersen, Lake and Offengenden 2015; Andersen and Lake 2021). 'QdFpScheme' selects -- one of upstream's three built-in 'iterationScheme's ('FastScheme', 'AccurateScheme', -- 'HighPrecisionScheme'), trading speed for accuracy.-{#fun qlQdFpAmericanEngine as qdFpAmericanEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlQdFpAmericanEngine as qdFpAmericanEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,`QdFpScheme' -- ^iterationScheme   ,`FixedPointEquation' -- ^fpEquation, which fixed-point formulation of the exercise boundary equation to solve   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}@@ -973,7 +1022,7 @@ -- date (seasoned Asians are not supported). @currentAverage@ is accepted for parity with upstream's -- constructor but is not read by the current implementation (only the not-yet-seasoned case is -- handled), so 'Nothing' is fine.-{#fun qlContinuousArithmeticAsianVecerEngine as continuousArithmeticAsianVecerEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlContinuousArithmeticAsianVecerEngine as continuousArithmeticAsianVecerEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,withMaybeQuote*`Maybe (GenQuote q)' -- ^currentAverage   ,withDay*`Day' -- ^startDate   ,fromIntegral`Word' -- ^timeSteps@@ -983,19 +1032,27 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |CDS pricing engine that integrates the default-leg payoff over the CDS's step-wise schedule+-- |Black-formula CDS-option engine: the option on the forward spread, lognormal at the quoted+-- volatility, scaled by the risky annuity. It assumes the exercise date is the CDS's start date.+{#fun qlBlackCdsOptionEngine as blackCdsOptionEngine{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double' -- ^recoveryRate+  ,withYieldTermStructure*`GenYieldTermStructure y' -- ^termStructure+  ,withQuote*`GenQuote q' -- ^volatility+  ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+ {#fun qlIntegralCdsEngine as integralCdsEngine{fromEnumQuantity`(Word,TimeUnit)'& -- ^integrationStep-  ,withGenTermStructure*`DefaultProbabilityTermStructure',`Double' -- ^recoveryRate+  ,withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double' -- ^recoveryRate   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^discountCurve   ,fromMaybeBool`Maybe Bool' -- ^includeSettlementDateFlows   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |pricing engine for European vanilla options using an integral approach-{#fun qlIntegralEngine as integralEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlIntegralEngine as integralEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |the term structure is only needed when the short-rate model cannot provide one itself. {#fun qlJamshidianSwaptionEngine as jamshidianSwaptionEngine{withOneFactorAffineModel*`GenOneFactorAffineModel om',withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#} --- |swaption pricing engine for any one-factor Gaussian short-rate model, evaluated by integration over the model's state variable+-- |swaption pricing engine for any one-factor Gaussian short-rate model, evaluated by integration over the model's state variable.+-- On QuantLib 1.44 it also prices an 'QuantLib.Instrument.Swap.OvernightIndexedSwap' underlying (see 'QuantLib.Instrument.Swap.swaption'). {#fun qlGaussian1dSwaptionEngine as gaussian1dSwaptionEngine{withStandalone*`Gaussian1dModel'   ,fromIntegral`Int' -- ^integrationPoints   ,`Double' -- ^stddevs@@ -1007,7 +1064,7 @@  -- |As 'gaussian1dSwaptionEngine', for a 'QuantLib.Instrument.Swap.NonstandardSwaption'. Adds -- an optional OAS ('oas', continuously compounded w.r.t. the discount curve's day counter) on--- top of the shared parameters.+-- top of the shared parameters. Overnight-indexed floating coupons are compounded on QuantLib 1.44. {#fun qlGaussian1dNonstandardSwaptionEngine as gaussian1dNonstandardSwaptionEngine{withStandalone*`Gaussian1dModel'   ,fromIntegral`Int' -- ^integrationPoints   ,`Double' -- ^stddevs@@ -1033,18 +1090,18 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |swaption pricing engine using Jamshidian's decomposition, for any one-factor Gaussian--- short-rate model.+-- short-rate model. QuantLib 1.44 freezes a floating payment lag's convexity at time zero. {#fun qlGaussian1dJamshidianSwaptionEngine as gaussian1dJamshidianSwaptionEngine{withStandalone*`Gaussian1dModel',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Ju (1999) quadratic-approximation engine for American options-{#fun qlJuQuadraticApproximationEngine as juQuadraticApproximationEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}+{#fun qlJuQuadraticApproximationEngine as juQuadraticApproximationEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |pricing engine for a spread option on two futures/assets {#fun qlKirkEngine as kirkEngine{withBlackProcess*`BlackProcess',withBlackProcess*`BlackProcess',`Double' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |CDS pricing engine using the mid-point approximation, evaluating the default leg at the mid-point of each accrual period-{#fun qlMidPointCdsEngine as midPointCdsEngine{withGenTermStructure*`DefaultProbabilityTermStructure',`Double' -- ^recoveryRate+{#fun qlMidPointCdsEngine as midPointCdsEngine{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double' -- ^recoveryRate   ,withYieldTermStructure*`GenYieldTermStructure y'   ,fromMaybeBool`Maybe Bool' -- ^includeSettlementDateFlows   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}@@ -1068,7 +1125,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |CDS pricing engine implementing the ISDA standard model-{#fun qlIsdaCdsEngine as isdaCdsEngine{withGenTermStructure*`DefaultProbabilityTermStructure',`Double' -- ^recoveryRate+{#fun qlIsdaCdsEngine as isdaCdsEngine{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double' -- ^recoveryRate   ,withYieldTermStructure*`GenYieldTermStructure y'   ,fromMaybeBool`Maybe Bool' -- ^includeSettlementDateFlows   ,`NumericalFix' -- ^numericalFix@@ -1077,46 +1134,46 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |variance-swap pricing engine using a replicating portfolio of vanilla options at the given strikes-{#fun qlReplicatingVarianceSwapEngine as replicatingVarianceSwapEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Double' -- ^dk+{#fun qlReplicatingVarianceSwapEngine as replicatingVarianceSwapEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',`Double' -- ^dk   ,withNonEmptyDoubleArray*`NonEmpty Double'& -- ^callStrikes   ,withNonEmptyDoubleArray*`NonEmpty Double'& -- ^putStrikes   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |pricing engine for 2D European basket options (Stulz formula)-{#fun qlStulzEngine as stulzEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Double' -- ^correlation+{#fun qlStulzEngine as stulzEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2',`Double' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Bjerksund-Stensland (2014) closed-form pricing engine for a spread option on two futures-{#fun qlBjerksundStenslandSpreadEngine as bjerksundStenslandSpreadEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Double' -- ^correlation+{#fun qlBjerksundStenslandSpreadEngine as bjerksundStenslandSpreadEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2',`Double' -- ^correlation   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Chi-Fai Lo (2015) operator-splitting-approximation pricing engine for a spread option-{#fun qlOperatorSplittingSpreadEngine as operatorSplittingSpreadEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Double' -- ^correlation+{#fun qlOperatorSplittingSpreadEngine as operatorSplittingSpreadEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2',`Double' -- ^correlation   ,`OperatorSplittingOrder' -- ^order, upstream default: 'Second'   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Pearson (1995) 1-D-numerical-integration pricing engine for a spread option-{#fun qlPearsonSpreadEngine as pearsonSpreadEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Double' -- ^correlation+{#fun qlPearsonSpreadEngine as pearsonSpreadEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2',`Double' -- ^correlation   ,`Double' -- ^integrationTolerance, upstream default: 1e-10   ,fromIntegral`Word' -- ^maxIntegrationIterations, upstream default: 10000   ,`Double' -- ^nStd, upstream default: 8.0   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Gaussian-copula nested-Gauss-Hermite-quadrature pricing engine for a spread option with smile-implied marginals-{#fun qlGaussianCopulaSpreadEngine as gaussianCopulaSpreadEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Double' -- ^correlation+{#fun qlGaussianCopulaSpreadEngine as gaussianCopulaSpreadEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2',`Double' -- ^correlation   ,fromIntegral`Word' -- ^nPoints, upstream default: 64   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Choi (2018) \"sum of Black-Scholes-Merton models\" pricing engine for a basket option on -- multiple underlyings, correlated via @rho@-choiBasketEngine :: NonEmpty GeneralizedBlackScholesProcess -> Matrix Double -- ^correlation matrix rho+choiBasketEngine :: NonEmpty (GenGeneralizedBlackScholesProcess gbs) -> Matrix Double -- ^correlation matrix rho   -> Double -- ^lambda, upstream default: 10.0   -> Word -- ^maxNrIntegrationSteps, upstream default: unbounded; the C shim takes a 32-bit count   -> Bool -- ^calcfwdDelta   -> Bool -- ^controlVariate   -> IO PricingEngine choiBasketEngine ps (Matrix mr mc md) = qlChoiBasketEngine (toList ps) mr mc md-{#fun qlChoiBasketEngine{withGeneralizedBlackScholesProcessArray*`[GeneralizedBlackScholesProcess]'&+{#fun qlChoiBasketEngine{withGeneralizedBlackScholesProcessArray*`[GenGeneralizedBlackScholesProcess gbs]'&   ,fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]'   ,`Double' -- ^lambda   ,fromIntegral`Word' -- ^maxNrIntegrationSteps@@ -1126,19 +1183,19 @@  -- |Deng-Li-Zhou (2008) closed-form-approximation pricing engine for a spread option on multiple -- underlyings, correlated via @rho@-dengLiZhouBasketEngine :: NonEmpty GeneralizedBlackScholesProcess -> Matrix Double -- ^correlation matrix rho+dengLiZhouBasketEngine :: NonEmpty (GenGeneralizedBlackScholesProcess gbs) -> Matrix Double -- ^correlation matrix rho   -> IO PricingEngine dengLiZhouBasketEngine ps (Matrix mr mc md) = qlDengLiZhouBasketEngine (toList ps) mr mc md-{#fun qlDengLiZhouBasketEngine{withGeneralizedBlackScholesProcessArray*`[GeneralizedBlackScholesProcess]'&+{#fun qlDengLiZhouBasketEngine{withGeneralizedBlackScholesProcessArray*`[GenGeneralizedBlackScholesProcess gbs]'&   ,fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]'   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |pricing engine for a basket where all underlyings are driven by one stochastic factor-singleFactorBsmBasketEngine :: NonEmpty GeneralizedBlackScholesProcess+singleFactorBsmBasketEngine :: NonEmpty (GenGeneralizedBlackScholesProcess gbs)   -> Double -- ^xTol, upstream default: @1e4*QL_EPSILON@   -> IO PricingEngine singleFactorBsmBasketEngine ps = qlSingleFactorBsmBasketEngine (toList ps)-{#fun qlSingleFactorBsmBasketEngine{withGeneralizedBlackScholesProcessArray*`[GeneralizedBlackScholesProcess]'&+{#fun qlSingleFactorBsmBasketEngine{withGeneralizedBlackScholesProcessArray*`[GenGeneralizedBlackScholesProcess gbs]'&   ,`Double' -- ^xTol   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#} @@ -1193,7 +1250,7 @@   ,preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |two-dimensional finite-differences Black-Scholes basket-option pricing engine-{#fun qlFd2dBlackScholesVanillaEngine as fd2dBlackScholesVanillaEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Double' -- ^correlation+{#fun qlFd2dBlackScholesVanillaEngine as fd2dBlackScholesVanillaEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs1',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs2',`Double' -- ^correlation   ,fromIntegral`Word' -- ^xGrid, upstream default: 100   ,fromIntegral`Word' -- ^yGrid, upstream default: 100   ,fromIntegral`Word' -- ^tGrid, upstream default: 50@@ -1205,14 +1262,14 @@  -- |n-dimensional finite-differences Black-Scholes basket-option pricing engine, with an explicit -- per-axis grid size-fdndimBlackScholesVanillaEngineAxisGrids :: NonEmpty GeneralizedBlackScholesProcess -> Matrix Double -- ^correlation matrix rho+fdndimBlackScholesVanillaEngineAxisGrids :: NonEmpty (GenGeneralizedBlackScholesProcess gbs) -> Matrix Double -- ^correlation matrix rho   -> NonEmpty Word -- ^xGrids, one per underlying   -> Word -- ^tGrid, upstream default: 50   -> Word -- ^dampingSteps, upstream default: 0   -> FdmScheme -- ^schemeDesc, upstream default: 'Douglas'   -> IO PricingEngine fdndimBlackScholesVanillaEngineAxisGrids ps (Matrix mr mc md) xGrids = qlFdndimBlackScholesVanillaEngine (toList ps) mr mc md (toList xGrids)-{#fun qlFdndimBlackScholesVanillaEngine{withGeneralizedBlackScholesProcessArray*`[GeneralizedBlackScholesProcess]'&+{#fun qlFdndimBlackScholesVanillaEngine{withGeneralizedBlackScholesProcessArray*`[GenGeneralizedBlackScholesProcess gbs]'&   ,fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]'   ,withIntArray*`[Word]'&   ,fromIntegral`Word' -- ^tGrid@@ -1222,14 +1279,14 @@  -- |n-dimensional finite-differences Black-Scholes basket-option pricing engine, auto-scaling every -- axis' grid from a single size (largest eigenvalue gets @xGrid@)-fdndimBlackScholesVanillaEngineUniformGrid :: NonEmpty GeneralizedBlackScholesProcess -> Matrix Double -- ^correlation matrix rho+fdndimBlackScholesVanillaEngineUniformGrid :: NonEmpty (GenGeneralizedBlackScholesProcess gbs) -> Matrix Double -- ^correlation matrix rho   -> Word -- ^xGrid   -> Word -- ^tGrid, upstream default: 50   -> Word -- ^dampingSteps, upstream default: 0   -> FdmScheme -- ^schemeDesc, upstream default: 'Douglas'   -> IO PricingEngine fdndimBlackScholesVanillaEngineUniformGrid ps (Matrix mr mc md) = qlFdndimBlackScholesVanillaEngine1 (toList ps) mr mc md-{#fun qlFdndimBlackScholesVanillaEngine1{withGeneralizedBlackScholesProcessArray*`[GeneralizedBlackScholesProcess]'&+{#fun qlFdndimBlackScholesVanillaEngine1{withGeneralizedBlackScholesProcessArray*`[GenGeneralizedBlackScholesProcess gbs]'&   ,fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]'   ,fromIntegral`Word' -- ^xGrid   ,fromIntegral`Word' -- ^tGrid@@ -1238,7 +1295,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |N-dimensional Black-Scholes finite-difference engine with uniform or per-axis grids.-fdndimBlackScholesVanillaEngine :: NonEmpty GeneralizedBlackScholesProcess -> Matrix Double+fdndimBlackScholesVanillaEngine :: NonEmpty (GenGeneralizedBlackScholesProcess gbs) -> Matrix Double   -> FdmGrid -> Word -> Word -> FdmScheme -> IO PricingEngine fdndimBlackScholesVanillaEngine processes correlations grid =   case grid of@@ -1261,7 +1318,7 @@   ,withFdmSchemeDesc*`FdmScheme',preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |finite-differences Black-Scholes barrier-option pricing engine-{#fun qlFdBlackScholesBarrierEngine as fdBlackScholesBarrierEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromIntegral`Word' -- ^tGrid+{#fun qlFdBlackScholesBarrierEngine as fdBlackScholesBarrierEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromIntegral`Word' -- ^tGrid   ,fromIntegral`Word' -- ^xGrid   ,fromIntegral`Word' -- ^dampingSteps   ,withFdmSchemeDesc*`FdmScheme'@@ -1324,7 +1381,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo (least-squares) pricing engine for American options-{#fun qlMCAmericanEngine1 as mcAmericanEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word', -- ^timeSteps+{#fun qlMCAmericanEngine1 as mcAmericanEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word', -- ^timeSteps   fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^antitheticVariate   ,`Bool' -- ^controlVariate@@ -1339,7 +1396,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo pricing engine for barrier options-{#fun qlMCBarrierEngine1 as mcBarrierEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCBarrierEngine1 as mcBarrierEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate@@ -1351,7 +1408,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo pricing engine for digital (cash-or-nothing/asset-or-nothing) options-{#fun qlMCDigitalEngine1 as mcDigitalEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCDigitalEngine1 as mcDigitalEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word', -- ^timeStepsPerYear   `Bool', -- ^brownianBridge   `Bool', -- ^antitheticVariate@@ -1362,7 +1419,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo pricing engine for discrete arithmetic average-price Asian options-{#fun qlMCDiscreteArithmeticAPEngine1 as mcDiscreteArithmeticApEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Bool' -- ^brownianBridge+{#fun qlMCDiscreteArithmeticAPEngine1 as mcDiscreteArithmeticApEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate   ,`Bool' -- ^controlVariate   ,fromMaybeInt`Maybe Word' -- ^requiredSamples@@ -1372,7 +1429,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo pricing engine for discrete arithmetic average-strike Asian options-{#fun qlMCDiscreteArithmeticASEngine1 as mcDiscreteArithmeticAsEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Bool' -- ^brownianBridge+{#fun qlMCDiscreteArithmeticASEngine1 as mcDiscreteArithmeticAsEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate   ,fromMaybeInt`Maybe Word' -- ^requiredSamples   ,fromMaybeDouble`Maybe Double' -- ^requiredTolerance@@ -1381,7 +1438,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo pricing engine for discrete geometric average-price Asian options-{#fun qlMCDiscreteGeometricAPEngine1 as mcDiscreteGeometricApEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Bool' -- ^brownianBridge+{#fun qlMCDiscreteGeometricAPEngine1 as mcDiscreteGeometricApEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate   ,fromMaybeInt`Maybe Word' -- ^requiredSamples   ,fromMaybeDouble`Maybe Double' -- ^requiredTolerance@@ -1418,7 +1475,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo pricing engine for European options under a Black-Scholes process-{#fun qlMCEuropeanEngine1 as mcEuropeanEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCEuropeanEngine1 as mcEuropeanEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate@@ -1520,7 +1577,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Monte Carlo pricing engine for performance (return) options-{#fun qlMCPerformanceEngine1 as mcPerformanceEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Bool' -- ^brownianBridge+{#fun qlMCPerformanceEngine1 as mcPerformanceEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate   ,fromMaybeInt`Maybe Word' -- ^requiredSamples   ,fromMaybeDouble`Maybe Double' -- ^requiredTolerance@@ -1530,7 +1587,7 @@  -- |variance-swap pricing engine using Monte Carlo simulation (see the note above -- 'mcHestonHullWhiteEngine' for the 'StatisticsTrait' parameter shared by every MC engine here).-{#fun qlMCVarianceSwapEngine1 as mcVarianceSwapEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromMaybeInt`Maybe Word' -- ^timeSteps+{#fun qlMCVarianceSwapEngine1 as mcVarianceSwapEngine{`RngTrait',`StatisticsTrait',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromMaybeInt`Maybe Word' -- ^timeSteps   ,fromMaybeInt`Maybe Word' -- ^timeStepsPerYear   ,`Bool' -- ^brownianBridge   ,`Bool' -- ^antitheticVariate@@ -1541,18 +1598,18 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |pricing engine for vanilla options using binomial trees-{#fun qlBinomialVanillaEngine as binomialVanillaEngine{`BinomialTree',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromIntegral`Word' -- ^timeSteps+{#fun qlBinomialVanillaEngine as binomialVanillaEngine{`BinomialTree',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromIntegral`Word' -- ^timeSteps   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |finite-differences Black-Scholes pricing engine for discrete-averaging Asian options-{#fun qlFdBlackScholesAsianEngine as fdBlackScholesAsianEngine{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromIntegral`Word' -- ^tGrid+{#fun qlFdBlackScholesAsianEngine as fdBlackScholesAsianEngine{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromIntegral`Word' -- ^tGrid   ,fromIntegral`Word' -- ^xGrid   ,fromIntegral`Word' -- ^aGrid   ,withFdmSchemeDesc*`FdmScheme'   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |finite-differences Black-Scholes pricing engine for vanilla options-{#fun qlFdBlackScholesVanillaEngine as fdBlackScholesVanillaEngineNoDividends{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',fromIntegral`Word' -- ^timeSteps+{#fun qlFdBlackScholesVanillaEngine as fdBlackScholesVanillaEngineNoDividends{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',fromIntegral`Word' -- ^timeSteps   ,fromIntegral`Word' -- ^gridPoints   ,fromIntegral`Word' -- ^timeDependent   ,withFdmSchemeDesc*`FdmScheme'@@ -1562,7 +1619,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |finite-differences Black-Scholes pricing engine for vanilla options, with discrete dividends-{#fun qlFdBlackScholesVanillaEngine1 as fdBlackScholesVanillaEngineWithDividends{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withDividendArray*`[Dividend]'&+{#fun qlFdBlackScholesVanillaEngine1 as fdBlackScholesVanillaEngineWithDividends{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',withDividendArray*`[Dividend]'&   ,fromIntegral`Word' -- ^timeSteps   ,fromIntegral`Word' -- ^gridPoints   ,fromIntegral`Word' -- ^timeDependent@@ -1573,7 +1630,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Finite-difference Black-Scholes vanilla engine; @[]@ selects no-dividend behavior.-fdBlackScholesVanillaEngine :: GeneralizedBlackScholesProcess -> [Dividend] -> Word -> Word -> Word+fdBlackScholesVanillaEngine :: GenGeneralizedBlackScholesProcess gbs -> [Dividend] -> Word -> Word -> Word   -> FdmScheme -> Bool -> Double -> CashDividendModel -> IO PricingEngine fdBlackScholesVanillaEngine process dividends =   case dividends of@@ -1581,7 +1638,7 @@     _ -> fdBlackScholesVanillaEngineWithDividends process dividends  -- |finite-differences Black-Scholes pricing engine for vanilla options, with quanto adjustment-{#fun qlFdBlackScholesVanillaEngine2 as fdBlackScholesVanillaEngineQuantoNoDividends{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withMaybeFdmQuantoHelper*`Maybe FdmQuantoHelper'+{#fun qlFdBlackScholesVanillaEngine2 as fdBlackScholesVanillaEngineQuantoNoDividends{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',withMaybeFdmQuantoHelper*`Maybe FdmQuantoHelper'   ,fromIntegral`Word' -- ^timeSteps   ,fromIntegral`Word' -- ^gridPoints   ,fromIntegral`Word' -- ^timeDependent@@ -1592,7 +1649,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |finite-differences Black-Scholes pricing engine for vanilla options, with discrete dividends and quanto adjustment-{#fun qlFdBlackScholesVanillaEngine3 as fdBlackScholesVanillaEngineQuantoWithDividends{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',withDividendArray*`[Dividend]'&,withMaybeFdmQuantoHelper*`Maybe FdmQuantoHelper'+{#fun qlFdBlackScholesVanillaEngine3 as fdBlackScholesVanillaEngineQuantoWithDividends{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',withDividendArray*`[Dividend]'&,withMaybeFdmQuantoHelper*`Maybe FdmQuantoHelper'   ,fromIntegral`Word' -- ^timeSteps   ,fromIntegral`Word' -- ^gridPoints   ,fromIntegral`Word' -- ^timeDependent@@ -1603,7 +1660,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Quanto-adjusted Black-Scholes vanilla engine; @[]@ selects no-dividend behavior.-fdBlackScholesVanillaEngineQuanto :: GeneralizedBlackScholesProcess -> [Dividend]+fdBlackScholesVanillaEngineQuanto :: GenGeneralizedBlackScholesProcess gbs -> [Dividend]   -> Maybe FdmQuantoHelper -> Word -> Word -> Word -> FdmScheme -> Bool -> Double   -> CashDividendModel -> IO PricingEngine fdBlackScholesVanillaEngineQuanto process dividends =@@ -1680,7 +1737,7 @@     _ -> fdBatesVanillaEngineWithDividends model dividends  -- |Finite-difference Black-Scholes engine for American shout options.-{#fun qlFdBlackScholesShoutEngine as fdBlackScholesShoutEngineNoDividends{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process+{#fun qlFdBlackScholesShoutEngine as fdBlackScholesShoutEngineNoDividends{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs' -- ^process   ,fromIntegral`Word' -- ^tGrid   ,fromIntegral`Word' -- ^xGrid   ,fromIntegral`Word' -- ^dampingSteps@@ -1688,7 +1745,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Finite-difference Black-Scholes engine for American shout options with discrete dividends.-{#fun qlFdBlackScholesShoutEngine1 as fdBlackScholesShoutEngineWithDividends{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess' -- ^process+{#fun qlFdBlackScholesShoutEngine1 as fdBlackScholesShoutEngineWithDividends{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs' -- ^process   ,withDividendArray*`[Dividend]'& -- ^dividends   ,fromIntegral`Word' -- ^tGrid   ,fromIntegral`Word' -- ^xGrid@@ -1697,7 +1754,7 @@   ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- |Finite-difference Black-Scholes shout engine; @[]@ selects no-dividend behavior.-fdBlackScholesShoutEngine :: GeneralizedBlackScholesProcess -> [Dividend] -> Word -> Word+fdBlackScholesShoutEngine :: GenGeneralizedBlackScholesProcess gbs -> [Dividend] -> Word -> Word   -> Word -> FdmScheme -> IO PricingEngine fdBlackScholesShoutEngine process dividends =   case dividends of@@ -1768,7 +1825,7 @@     _ -> fdHestonHullWhiteVanillaEngineWithDividends heston hullWhite dividends  -- |binomial Tsiveriotis-Fernandes pricing engine for convertible bonds-{#fun qlBinomialConvertibleEngine as binomialConvertibleEngine{`BinomialTree',withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess'+{#fun qlBinomialConvertibleEngine as binomialConvertibleEngine{`BinomialTree',withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs'   ,fromIntegral`Word' -- ^timeSteps   ,withQuote*`GenQuote q' -- ^creditSpread   ,withDividendArray*`[Dividend]'& -- ^dividends@@ -2115,7 +2172,6 @@   ,`Double' -- ^displacement   ,preErrorCheck-`String'errorCheck*-}->`Double'#} - -- |Black 1976 probability of being in the money (in the bond martingale measure), i.e. N(d2). It is a risk-neutral probability, not the real world one. /Warning/ instead of volatility it uses standard deviation, i.e. volatility*sqrt(timeToMaturity) {#fun qlQuantLibBlackFormulaCashItmProbability as blackCashItmProbability{fromEnumC`OptionType',`Double'   ,`Double' -- ^forward@@ -2353,7 +2409,7 @@   ,`Double' -- ^beta   ,`Double' -- ^shift   ,`VolatilityType' -- ^volatilityType-  ,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Black 1976 option-price calculator.@@ -2374,5 +2430,139 @@ bachelierCalculator spec = case spec of   Strike t k -> bachelierCalculatorAtStrikeRaw t k   StrikePayoff p -> bachelierCalculatorFromPayoffRaw p++-- |Fractional Riccati solver. Pade is most accurate for strongly negative correlation.+data RoughHestonApproximation = AdamsPredictorCorrector | Pade | Lifted Word deriving (Eq, Show, Read)+-- |Construction-time Fourier integration configuration for Rough Heston (1.44).+data FourierIntegration+  = FourierGaussLaguerre Word | FourierGaussLegendre Word+  | FourierGaussChebyshev Word | FourierGaussChebyshev2nd Word+  | FourierGaussLobatto Double Double Word Bool+  | FourierGaussKronrod Double Word | FourierSimpson Double Word | FourierTrapezoid Double Word+  | FourierDiscreteSimpson Word | FourierDiscreteTrapezoid Word+  | FourierExpSinh Double | FourierTanhSinh Double+  deriving (Eq, Show, Read)+roughApproximation :: RoughHestonApproximation -> (Int, Word)+roughApproximation AdamsPredictorCorrector = (0, 20)+roughApproximation Pade = (1, 20)+roughApproximation (Lifted factors) = (2, factors)+fourierConfiguration :: FourierIntegration -> (Int, Word, Double, Double, Bool)+fourierConfiguration integration = case integration of+  FourierGaussLaguerre n -> (0, n, 0, 0, False)+  FourierGaussLegendre n -> (1, n, 0, 0, False)+  FourierGaussChebyshev n -> (2, n, 0, 0, False)+  FourierGaussChebyshev2nd n -> (3, n, 0, 0, False)+  FourierGaussLobatto r a n c -> (4, n, r, a, c)+  FourierGaussKronrod a n -> (5, n, 0, a, False)+  FourierSimpson a n -> (6, n, 0, a, False)+  FourierTrapezoid a n -> (7, n, 0, a, False)+  FourierDiscreteSimpson n -> (8, n, 0, 0, False)+  FourierDiscreteTrapezoid n -> (9, n, 0, 0, False)+  FourierExpSinh r -> (10, 0, r, 0, False)+  FourierTanhSinh r -> (11, 0, r, 0, False)++-- |European vanilla engine with Gauss-Laguerre integration (1.44).+-- Upstream defaults are order 128 and 256 Riccati steps; Adams costs O(steps^2).+analyticRoughHestonEngine :: RoughHestonModel -- ^Calibrated model+  -> Word -- ^Gauss-Laguerre integration order+  -> Word -- ^Riccati time steps+  -> RoughHestonApproximation -- ^Riccati approximation and lifted factor count+  -> IO AnalyticRoughHestonEngine+analyticRoughHestonEngine model order steps approximation =+  let (method, factors) = roughApproximation approximation+  in roughHestonEngineRaw model order steps method factors+-- |Native fixed-order construction.+{#fun qlAnalyticRoughHestonEngine as roughHestonEngineRaw{withRoughHestonModel*`RoughHestonModel' -- ^model+  ,fromIntegral`Word' -- ^integrationOrder+  ,fromIntegral`Word' -- ^timeSteps+  ,`Int' -- ^approximation+  ,fromIntegral`Word' -- ^nFactors+  ,preErrorCheck-`String'errorCheck*-}->`AnalyticRoughHestonEngine'peekAnalyticRoughHestonEngine*#}++-- |European engine with full Fourier integration controls (1.44).+-- Upstream defaults: steps 256, epsilon 1e-25, dampening alpha -0.5; alpha must be in (-1, 0).+analyticRoughHestonEngineWithIntegration :: RoughHestonModel -- ^Calibrated model+  -> FourierIntegration -- ^Integration algorithm and tolerances/order+  -> Word -- ^Riccati time steps+  -> Double -- ^Andersen-Piterbarg integration-limit epsilon+  -> Double -- ^Dampening alpha, strictly between -1 and 0+  -> RoughHestonApproximation -- ^Riccati approximation and lifted factor count+  -> IO AnalyticRoughHestonEngine+analyticRoughHestonEngineWithIntegration model integration steps epsilon dampening approximation =+  let (algorithm, count, relative, absolute, convergence) = fourierConfiguration integration+      (method, factors) = roughApproximation approximation+  in roughHestonEngineIntegrationRaw model algorithm count relative absolute convergence steps epsilon dampening method factors+-- |Native integration construction.+{#fun qlAnalyticRoughHestonEngineWithIntegration as roughHestonEngineIntegrationRaw{withRoughHestonModel*`RoughHestonModel' -- ^model+  ,`Int' -- ^algorithm+  ,fromIntegral`Word' -- ^count+  ,`Double' -- ^relative+  ,`Double' -- ^absolute+  ,`Bool' -- ^convergence+  ,fromIntegral`Word' -- ^timeSteps+  ,`Double' -- ^epsilon+  ,`Double' -- ^alpha+  ,`Int' -- ^approximation+  ,fromIntegral`Word' -- ^nFactors+  ,preErrorCheck-`String'errorCheck*-}->`AnalyticRoughHestonEngine'peekAnalyticRoughHestonEngine*#}++-- |Normalized log-forward chF at time in years (1.44).+{#fun qlRoughHestonchF as roughHestonCharacteristicFunction{withAnalyticRoughHestonEngine*`AnalyticRoughHestonEngine' -- ^engine+  ,withComplex`Complex Double'& -- ^frequency+  ,`Double' -- ^time+  ,preComplex-`Complex Double'&peekComplex* -- ^result+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Normalized log-forward lnChF at time in years (1.44).+{#fun qlRoughHestonlnChF as roughHestonLogCharacteristicFunction{withAnalyticRoughHestonEngine*`AnalyticRoughHestonEngine' -- ^engine+  ,withComplex`Complex Double'& -- ^frequency+  ,`Double' -- ^time+  ,preComplex-`Complex Double'&peekComplex* -- ^result+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Normalized log-forward riccatiSolution at time in years (1.44).+{#fun qlRoughHestonriccatiSolution as roughHestonRiccatiSolution{withAnalyticRoughHestonEngine*`AnalyticRoughHestonEngine' -- ^engine+  ,withComplex`Complex Double'& -- ^frequency+  ,`Double' -- ^time+  ,preComplex-`Complex Double'&peekComplex* -- ^result+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Fourier evaluations in the most recent pricing calculation (1.44).+{#fun qlRoughHestonNumberOfEvaluations as roughHestonNumberOfEvaluations{withAnalyticRoughHestonEngine*`AnalyticRoughHestonEngine' -- ^engine+  ,preErrorCheck-`String'errorCheck*-}->`Word'fromIntegral#}++-- |Native direct European pricing.+{#fun qlRoughHestonPriceDate as roughHestonPriceDateRaw{withAnalyticRoughHestonEngine*`AnalyticRoughHestonEngine' -- ^engine+  ,withPlainVanillaPayoff*`PlainVanillaPayoff' -- ^payoff+  ,withDay*`Day' -- ^maturity+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Native direct European pricing.+{#fun qlRoughHestonPriceTime as roughHestonPriceTimeRaw{withAnalyticRoughHestonEngine*`AnalyticRoughHestonEngine' -- ^engine+  ,withPlainVanillaPayoff*`PlainVanillaPayoff' -- ^payoff+  ,`Double' -- ^maturity+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Direct European plain-vanilla pricing at a maturity date or time in years (1.44).+roughHestonPriceVanillaPayoff :: AnalyticRoughHestonEngine -- ^Engine+  -> PlainVanillaPayoff -- ^Call/put and strike+  -> TermPoint -- ^Maturity; time is relative to the model risk-free curve's reference date+  -> IO Double+roughHestonPriceVanillaPayoff engine payoff maturity = case maturity of+  DatePoint date -> roughHestonPriceDateRaw engine payoff date+  TimePoint time -> roughHestonPriceTimeRaw engine payoff time++-- |MTM cross-currency discounting (1.44). Spot is domestic currency per foreign currency.+-- Historical reset observations come from ExchangeRateManager; live leg cash flows need their own FX reset pricer.+{#fun qlDiscountingMtMCrossCurrencyBasisSwapEngine as discountingMtmCrossCurrencyBasisSwapEngine{withCurrency*`Currency' -- ^domesticCcy+  ,withYieldTermStructure*`GenYieldTermStructure y1' -- ^domesticCurve+  ,withCurrency*`Currency' -- ^foreignCcy+  ,withYieldTermStructure*`GenYieldTermStructure y2' -- ^foreignCurve+  ,withQuote*`GenQuote q' -- ^spotFx+  ,fromMaybeBool`Maybe Bool' -- ^includeSettlementDateFlows+  ,withMaybeDay*`Maybe Day' -- ^settlementDate+  ,withMaybeDay*`Maybe Day' -- ^npvDate+  ,withMaybeDay*`Maybe Day' -- ^spotFxSettleDate+  ,preErrorCheck-`String'errorCheck*-}->`PricingEngine'peekPricingEngine*#}  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
QuantLib/Process.chs view
@@ -115,7 +115,6 @@ import QuantLib.Internal import QuantLib.Internal.Type import Data.List.NonEmpty(NonEmpty, toList)-import Foreign.Ptr(FunPtr)  {#enum ProcessDiscretization{} deriving(Show,Eq, Read)#} {#enum ExtendedBlackScholesMertonProcessDiscretization{} deriving(Show, Eq, Read)#}@@ -243,15 +242,15 @@   {`Double' -- ^speed   ,`Double' -- ^sigma (volatility)   ,`Double' -- ^x0-  ,id`FunPtr PayoffFun'+  ,withCallbackPtr*`Callback'   ,`ExtendedOrnsteinUhlenbeckProcessDiscretization'   ,`Double' -- ^intEps   ,preErrorCheck-`String'errorCheck*-}->`ExtendedOrnsteinUhlenbeckProcess'peekExtendedOrnsteinUhlenbeckProcess*#}  -- |An extended Ornstein-Uhlenbeck process @dx = speed*(b(t) - x)dt + sigma*dW@ with an arbitrary -- deterministic mean-reversion level @b@, usable with 'QuantLib.Method.pathGenerator'. The--- 'FunPtr' backing @b@ is kept alive only for the continuation's duration. The process and any--- dependent process must not escape it (same rule as 'QuantLib.Quote.withDerivedQuote').+-- process and its native dependents retain @b@ after the continuation returns.+-- Callback exceptions are rethrown by the enclosing Haskell call. withExtendedOrnsteinUhlenbeckProcess :: Double -- ^speed   -> Double -- ^sigma   -> Double -- ^x0@@ -279,7 +278,7 @@  -- |Kluge model: an extended Ornstein-Uhlenbeck process plus an exponential-jump component, -- S = exp(X + Y) with dX = alpha (mu(t) - X) dt + sigma dW and dY = -beta Y dt + J dN. When the--- extended process is callback-backed, this result must remain inside the same continuation.+-- extended process is callback-backed, this result retains its callback. {#fun qlExtOUWithJumpsProcess as extOuWithJumpsProcess{withGenStochasticProcess1D*`ExtendedOrnsteinUhlenbeckProcess',`Double' -- ^Y0   ,`Double' -- ^beta   ,`Double' -- ^jumpIntensity@@ -369,14 +368,14 @@  -- |the process's state at time 0, e.g. @(0, 0)@ for a curveless 'g2Process' or -- @(phi(0), 0)@ once a term structure is given.-{#fun qlStochasticProcessInitialValues as initialValues{withStochasticProcess*`GenStochasticProcess p',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlStochasticProcessInitialValues as initialValues{withStochasticProcess*`GenStochasticProcess p',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |the drift part of the process's SDE at state /x/ and time /t/, i.e. @mu(t, x_t)@ in -- @dx_t = mu(t, x_t) dt + sigma(t, x_t) dW_t@. {#fun qlStochasticProcessDrift as drift{withStochasticProcess*`GenStochasticProcess p'   ,`Double' -- ^t   ,withDoubleArray*`[Double]'& -- ^x-  ,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  toMatrixDouble :: (Word, Word, [Double]) -> Matrix Double@@ -389,7 +388,7 @@ {#fun qlStochasticProcessDiffusion{withStochasticProcess*`GenStochasticProcess p'   ,`Double' -- ^t   ,withDoubleArray*`[Double]'& -- ^x-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |E[x_(t0+dt) | x_t0 = x0], the expected state at /t0+dt/ given state /x0/ at time /t0/.@@ -397,7 +396,7 @@   ,`Double' -- ^t0   ,withDoubleArray*`[Double]'& -- ^x0   ,`Double' -- ^dt-  ,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |the standard deviation matrix of the process over /dt/ given state /x0/ at time /t0/, i.e.@@ -410,7 +409,7 @@   ,`Double' -- ^t0   ,withDoubleArray*`[Double]'& -- ^x0   ,`Double' -- ^dt-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |the covariance matrix of the process over /dt/ given state /x0/ at time /t0/; equals@@ -421,7 +420,7 @@   ,`Double' -- ^t0   ,withDoubleArray*`[Double]'& -- ^x0   ,`Double' -- ^dt-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`[Double]'&peekDoubleArray*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |applies an increment /dx/ to a state /x0/ in the process's own state space -- not always@@ -430,7 +429,7 @@ {#fun qlStochasticProcessApply as apply{withStochasticProcess*`GenStochasticProcess p'   ,withDoubleArray*`[Double]'& -- ^x0   ,withDoubleArray*`[Double]'& -- ^dx-  ,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |one discretized step of the process: the state at /t0+dt/ given state /x0/ at /t0/ and the@@ -446,7 +445,7 @@   ,withDoubleArray*`[Double]'& -- ^x0   ,`Double' -- ^dt   ,withDoubleArray*`[Double]'& -- ^dw-  ,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Geman-Roncoroni process, a mean-reverting jump-diffusion model for electricity spot prices@@ -610,12 +609,12 @@  -- |the reset (fixing) dates of the forward rates this process evolves {#fun qlLiborForwardModelProcessFixingDates as fixingDates{withGenStochasticProcess*`LiborForwardModelProcess'-  ,preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |the reset (fixing) times of the forward rates this process evolves, in the process's own -- day count fraction from the evaluation date {#fun qlLiborForwardModelProcessFixingTimes as fixingTimes{withGenStochasticProcess*`LiborForwardModelProcess'-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |the leg of Ibor coupons (notional @amount@ each) this process's forward rates reset -- used -- e.g. to build the 'QuantLib.Instrument.CapFloor.cap' this process prices via 'liborForwardModel'@@ -633,7 +632,7 @@ -- individual one-period factors. {#fun qlLiborForwardModelProcessDiscountBond as discountBond{withGenStochasticProcess*`LiborForwardModelProcess'   ,withDoubleArray*`[Double]'& -- ^rates-  ,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |the @(start, end)@ accrual times of the forward rates this process evolves, in its own day@@ -642,8 +641,8 @@ accrualTimes :: LiborForwardModelProcess -> IO [(Double, Double)] accrualTimes p = uncurry zip <$> qlLiborForwardModelProcessAccrualTimes p {#fun qlLiborForwardModelProcessAccrualTimes{withGenStochasticProcess*`LiborForwardModelProcess'-  ,preArray-`[Double]'&peekDoubleArray*-  ,preArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*+  ,preDoubleArray-`[Double]'&peekDoubleArray*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Merton (1976) jump-diffusion process: a Black-Scholes process plus a log-normal jump@@ -681,7 +680,7 @@ {#fun qlStochasticProcessArray{withStochasticProcess1DArray*`[GenStochasticProcess1D p1d]'&,fromIntegral`Word',fromIntegral`Word',withDoubleArrayRaw*`[Double]',preErrorCheck-`String'errorCheck*-}->`StochasticProcessArray'peekStochasticProcessArray*#}  -- |default theta calculation for Black-Scholes options-{#fun qlQuantLibBlackScholesTheta as thetaAt{withGeneralizedBlackScholesProcess*`GeneralizedBlackScholesProcess',`Double' -- ^value+{#fun qlQuantLibBlackScholesTheta as thetaAt{withGeneralizedBlackScholesProcess*`GenGeneralizedBlackScholesProcess gbs',`Double' -- ^value   ,`Double' -- ^delta   ,`Double' -- ^gamma   ,preErrorCheck-`String'errorCheck*-}->`Double'#}
QuantLib/Quote.chs view
@@ -48,7 +48,6 @@   , isValid   , futuresValue   ) where-import Foreign.Ptr(FunPtr)  import QuantLib.Internal import QuantLib.Internal.Common@@ -190,31 +189,30 @@ {#fun qlMultiCompositeQuote as multiCompositeQuote{fromEnumC`MultiQuoteOp'   ,withQuoteArray*`[GenQuote q]'&,preErrorCheck-`String'errorCheck*-}->`Quote'peekQuote*#} -{#fun qlDerivedQuoteFromFunction{withQuote*`GenQuote q',id`FunPtr QuoteUnaryFun'+{#fun qlDerivedQuoteFromFunction{withQuote*`GenQuote q',withCallbackPtr*`Callback'   ,preErrorCheck-`String'errorCheck*-}->`Quote'peekQuote*#} {#fun qlCompositeQuoteFromFunction{withQuote*`GenQuote q1',withQuote*`GenQuote q2'-  ,id`FunPtr QuoteBinaryFun',preErrorCheck-`String'errorCheck*-}->`Quote'peekQuote*#}+  ,withCallbackPtr*`Callback',preErrorCheck-`String'errorCheck*-}->`Quote'peekQuote*#} {#fun qlMultiCompositeQuoteFromFunction{withQuoteArray*`[GenQuote q]'&-  ,id`FunPtr QuoteArrayFun',preErrorCheck-`String'errorCheck*-}->`Quote'peekQuote*#}+  ,withCallbackPtr*`Callback',preErrorCheck-`String'errorCheck*-}->`Quote'peekQuote*#}  -- |As 'derivedQuote', with an arbitrary Haskell function. ----- __The continuation must span the whole use, not only construction.__ QuantLib calls @f@ later from @Quote::value()@. Returning frees its function pointer, so a later read crashes.------ @f@ must be total: exceptions cross C++, including during bootstrap. Prefer 'derivedQuote' when its 'QuoteOp' fits.+-- The quote and its native dependents retain the callback after the continuation returns.+-- Callback exceptions are rethrown by the enclosing Haskell call. withDerivedQuote :: (Double -> Double) -- ^f(value)   -> GenQuote q -> (Quote -> IO b) -> IO b withDerivedQuote f q k = withPayoffFun f (\fp -> qlDerivedQuoteFromFunction q fp >>= k)  -- |As 'compositeQuote', but combining the two quotes with an arbitrary Haskell function. Same--- continuation-lifetime and totality rules as 'withDerivedQuote'.+-- ownership and exception rules as 'withDerivedQuote'. withCompositeQuote :: (Double -> Double -> Double) -- ^f(value1, value2)   -> GenQuote q1 -> GenQuote q2 -> (Quote -> IO b) -> IO b withCompositeQuote f q1 q2 k = withQuoteBinaryFun f (\fp -> qlCompositeQuoteFromFunction q1 q2 fp >>= k)  -- |As 'multiCompositeQuote', but folding with an arbitrary Haskell function. The whole element -- vector is passed per evaluation, so this crosses into Haskell once per value, not once per--- element. Same continuation-lifetime and totality rules as 'withDerivedQuote'.+-- element. Same ownership and exception rules as 'withDerivedQuote'. withMultiCompositeQuote :: ([Double] -> Double) -- ^f(values)   -> [GenQuote q] -> (Quote -> IO b) -> IO b withMultiCompositeQuote f qs k = withBasketAccumulateFun f (\fp -> qlMultiCompositeQuoteFromFunction qs fp >>= k)
QuantLib/TermStructure.chs view
@@ -23,6 +23,7 @@   , HasHelperUnderlying(..)   , referenceDate   , maxDate+  , maxTime   , allowsExtrapolation   , timeFromReference   ) where@@ -35,10 +36,6 @@  #include "ql.h" --- Pointer aliases for the HasHelperUnderlying instances below. The helper types and the--- instruments they build are declared in QuantLib.Internal.Type; these are the c2hs-local--- mappings the {#fun#} hooks need, copied from the modules that construct them--- (QuantLib.TermStructure.Yield, .Inflation, QuantLib.Model). {#pointer *QlBondHelper as BondHelper foreign -> CBondHelper' nocode#} {#pointer *QlSwapRateHelper as SwapRateHelper foreign -> CSwapRateHelper' nocode#} {#pointer *QlOISRateHelper as OISRateHelper foreign -> COISRateHelper' nocode#}@@ -51,6 +48,7 @@ {#pointer *QlZeroCouponInflationSwap as ZeroCouponInflationSwap foreign -> CZeroCouponInflationSwap' nocode#} {#pointer *QlYearOnYearInflationSwap as YearOnYearInflationSwap foreign -> CYearOnYearInflationSwap' nocode#} {#pointer *QlFixedVsFloatingSwap as FixedVsFloatingSwap foreign -> CFixedVsFloatingSwap' nocode#}+{#pointer *QlTermStructure as TermStructure foreign -> CTermStructure' nocode#}  -- |Bootstrap and calibration helpers that build and hold the instrument whose market quote -- they match. The class lives here, in the term-structure root module, because its instances@@ -90,8 +88,6 @@ {#fun qlYearOnYearInflationSwapHelperSwap{withYearOnYearInflationSwapHelper*`YearOnYearInflationSwapHelper',preErrorCheck-`String'errorCheck*-}->`YearOnYearInflationSwap'peekYearOnYearInflationSwap*#} {#fun qlSwaptionHelperUnderlying{withSwaptionHelper*`SwaptionHelper',preErrorCheck-`String'errorCheck*-}->`FixedVsFloatingSwap'peekFixedVsFloatingSwap*#} -{#pointer *QlTermStructure as TermStructure foreign -> CTermStructure' nocode#}- -- |A term-structure reference point. 'ReferenceDate' stays fixed for the object's lifetime; -- 'SettlementDays' follows the global evaluation date using the supplied calendar. data Reference@@ -128,6 +124,9 @@  -- |the latest date for which the curve can return values {#fun qlTermStructureMaxDate as maxDate{withTermStructure*`GenTermStructure t',preErrorCheck-`String'errorCheck*-}->`Day'toDay#}++-- |'maxDate' expressed as a year fraction from the structure's reference date+{#fun qlTermStructureMaxTime as maxTime{withTermStructure*`GenTermStructure t',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Whether calls beyond the term structure's maximum date are allowed by default. {#fun qlTermStructureAllowsExtrapolation as allowsExtrapolation{withTermStructure*`GenTermStructure t'}->`Bool'#}
QuantLib/TermStructure/Commodity.chs view
@@ -26,6 +26,7 @@   , priceNearby   , underlyingPriceDate   ) where+import Control.Exception (mask_) import QuantLib.Internal import QuantLib.Internal.Type import Data.List.NonEmpty(NonEmpty, toList)@@ -64,7 +65,9 @@   ,preErrorCheck-`String'errorCheck*-}->`CommodityCurve'peekCommodityCurve*#}  -- |The curve's name, as given at construction.-{#fun qlCommodityCurveName as name{withGenTermStructure*`CommodityCurve'}->`String'peekDynString*#}+name :: CommodityCurve -> IO String+name x = mask_ (nameRaw x)+{#fun qlCommodityCurveName as nameRaw{withGenTermStructure*`CommodityCurve'}->`String'peekDynString*#}  -- |The commodity type this curve prices. {#fun qlCommodityCurveCommodityType as commodityType{withGenTermStructure*`CommodityCurve',preErrorCheck-`String'errorCheck*-}->`CommodityType'peekCommodityType*#}@@ -81,8 +84,8 @@   dates <- qlCommodityCurveDates curve   prices <- qlCommodityCurvePrices curve   pure (zip dates prices)-{#fun qlCommodityCurveDates as qlCommodityCurveDates{withGenTermStructure*`CommodityCurve',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}-{#fun qlCommodityCurvePrices as qlCommodityCurvePrices{withGenTermStructure*`CommodityCurve',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlCommodityCurveDates as qlCommodityCurveDates{withGenTermStructure*`CommodityCurve',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlCommodityCurvePrices as qlCommodityCurvePrices{withGenTermStructure*`CommodityCurve',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Whether this curve has any nodes. {#fun pure qlCommodityCurveEmpty as isEmpty{withGenTermStructure*`CommodityCurve'}->`Bool'#}
QuantLib/TermStructure/Credit.chs view
@@ -2,7 +2,9 @@   (     -- * Types     -- ** Curves and helpers-    DefaultProbabilityTermStructure+    GenDefaultProbabilityTermStructure+  , DefaultProbabilityTermStructure+  , AffineHazardRateCurve   , DefaultProbabilityHelper      -- ** Coordinates@@ -24,6 +26,7 @@   , upfrontCdsHelper   , interpolatedDefaultDensityCurve   , interpolatedHazardRateCurve+  , interpolatedAffineHazardRateCurve   , interpolatedSurvivalProbabilityCurve   , defaultIterativeBootstrapOpts   , piecewiseDefaultCurve@@ -34,7 +37,9 @@   , survivalProbability   , defaultDensity   , defaultProbabilityBetween+  , conditionalSurvivalProbability   , impliedQuote+  , impliedQuoteOn   ) where #include "qlTypesC2HS.h" #include "qlEnumC2HS.h"@@ -53,13 +58,14 @@  {#pointer *Calendar foreign -> CCalendar nocode#} {#pointer *QlDefaultProbabilityTermStructure as DefaultProbabilityTermStructure foreign -> CDefaultProbabilityTermStructure' nocode#}+{#pointer *QlAffineHazardRateCurve as AffineHazardRateCurve foreign -> CAffineHazardRateCurve' nocode#} {#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#}-{#pointer *QlTermStructure as TermStructure foreign -> CTermStructure' nocode#} {#pointer *QlQuote as Quote foreign -> CQuote' nocode#} {#pointer *QlDefaultProbabilityHelper as DefaultProbabilityHelper foreign -> CDefaultProbabilityHelper nocode#}+{#pointer *QlOneFactorAffineModel as OneFactorAffineModel foreign -> COneFactorAffineModel' nocode#}  -- |a curve whose hazard rate is another curve's, scaled by a spread factor-{#fun qlFactorSpreadedHazardRateCurve as factorSpreadedHazardRateCurve{withGenTermStructure*`DefaultProbabilityTermStructure',withQuote*`GenQuote q',preErrorCheck-`String'errorCheck*-}->`DefaultProbabilityTermStructure'peekDefaultProbabilityTermStructure*#}+{#fun qlFactorSpreadedHazardRateCurve as factorSpreadedHazardRateCurve{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',withQuote*`GenQuote q',preErrorCheck-`String'errorCheck*-}->`DefaultProbabilityTermStructure'peekDefaultProbabilityTermStructure*#}  -- |Flat hazard-rate curve with either a fixed or evaluation-date-relative reference point. flatHazardRate :: Reference -> GenQuote q -> DayCounter -> IO DefaultProbabilityTermStructure@@ -69,68 +75,83 @@ {#fun qlFlatHazardRate as flatHazardRateFixed{withDay*`Day',withQuote*`GenQuote q',withDayCounter*`DayCounter',preErrorCheck-`String'errorCheck*-}->`DefaultProbabilityTermStructure'peekDefaultProbabilityTermStructure*#}  -- |a curve whose survival probability is another curve's, multiplied by a spread factor-{#fun qlSpreadedHazardRateCurve as spreadedHazardRateCurve{withGenTermStructure*`DefaultProbabilityTermStructure',withQuote*`GenQuote q',preErrorCheck-`String'errorCheck*-}->`DefaultProbabilityTermStructure'peekDefaultProbabilityTermStructure*#}+{#fun qlSpreadedHazardRateCurve as spreadedHazardRateCurve{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',withQuote*`GenQuote q',preErrorCheck-`String'errorCheck*-}->`DefaultProbabilityTermStructure'peekDefaultProbabilityTermStructure*#} -{#fun qlDefaultProbabilityTermStructureDefaultProbability as defaultProbabilityAtDateRaw{withGenTermStructure*`DefaultProbabilityTermStructure',withDay*`Day',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureDefaultProbability as defaultProbabilityAtDateRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',withDay*`Day',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} -{#fun qlDefaultProbabilityTermStructureHazardRate1 as hazardRateAtTimeRaw{withGenTermStructure*`DefaultProbabilityTermStructure',`Double',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureHazardRate1 as hazardRateAtTimeRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} -{#fun qlDefaultProbabilityTermStructureHazardRate as hazardRateAtDateRaw{withGenTermStructure*`DefaultProbabilityTermStructure',withDay*`Day',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureHazardRate as hazardRateAtDateRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',withDay*`Day',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} -{#fun qlDefaultProbabilityTermStructureSurvivalProbability1 as survivalProbabilityAtTimeRaw{withGenTermStructure*`DefaultProbabilityTermStructure',`Double',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureSurvivalProbability1 as survivalProbabilityAtTimeRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} -{#fun qlDefaultProbabilityTermStructureSurvivalProbability as survivalProbabilityAtDateRaw{withGenTermStructure*`DefaultProbabilityTermStructure',withDay*`Day',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureSurvivalProbability as survivalProbabilityAtDateRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',withDay*`Day',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} -{#fun qlDefaultProbabilityTermStructureDefaultDensity1 as defaultDensityAtTimeRaw{withGenTermStructure*`DefaultProbabilityTermStructure',`Double',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureDefaultDensity1 as defaultDensityAtTimeRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} -{#fun qlDefaultProbabilityTermStructureDefaultDensity as defaultDensityAtDateRaw{withGenTermStructure*`DefaultProbabilityTermStructure',withDay*`Day',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureDefaultDensity as defaultDensityAtDateRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',withDay*`Day',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} -{#fun qlDefaultProbabilityTermStructureDefaultProbability1 as defaultProbabilityAtTimeRaw{withGenTermStructure*`DefaultProbabilityTermStructure',`Double',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureDefaultProbability1 as defaultProbabilityAtTimeRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} -{#fun qlDefaultProbabilityTermStructureDefaultProbability2 as defaultProbabilityBetweenDatesRaw{withGenTermStructure*`DefaultProbabilityTermStructure',withDay*`Day',withDay*`Day',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureDefaultProbability2 as defaultProbabilityBetweenDatesRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',withDay*`Day',withDay*`Day',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} -{#fun qlDefaultProbabilityTermStructureDefaultProbability3 as defaultProbabilityBetweenTimesRaw{withGenTermStructure*`DefaultProbabilityTermStructure',`Double',`Double',`Bool' -- ^extrapolate+{#fun qlDefaultProbabilityTermStructureDefaultProbability3 as defaultProbabilityBetweenTimesRaw{withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d',`Double',`Double',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Hazard rate at a date or year fraction, with annual frequency and continuous compounding.-hazardRate :: DefaultProbabilityTermStructure -> TermPoint -> Bool -> IO Double+hazardRate :: GenDefaultProbabilityTermStructure d -> TermPoint -> Bool -> IO Double hazardRate curve point = case point of   DatePoint d -> hazardRateAtDateRaw curve d   TimePoint t -> hazardRateAtTimeRaw curve t  -- |Survival probability from the reference point to a date or year fraction.-survivalProbability :: DefaultProbabilityTermStructure -> TermPoint -> Bool -> IO Double+survivalProbability :: GenDefaultProbabilityTermStructure d -> TermPoint -> Bool -> IO Double survivalProbability curve point = case point of   DatePoint d -> survivalProbabilityAtDateRaw curve d   TimePoint t -> survivalProbabilityAtTimeRaw curve t  -- |Default density at a date or year fraction.-defaultDensity :: DefaultProbabilityTermStructure -> TermPoint -> Bool -> IO Double+defaultDensity :: GenDefaultProbabilityTermStructure d -> TermPoint -> Bool -> IO Double defaultDensity curve point = case point of   DatePoint d -> defaultDensityAtDateRaw curve d   TimePoint t -> defaultDensityAtTimeRaw curve t  -- |Default probability from the reference point to a date or year fraction.-defaultProbability :: DefaultProbabilityTermStructure -> TermPoint -> Bool -> IO Double+defaultProbability :: GenDefaultProbabilityTermStructure d -> TermPoint -> Bool -> IO Double defaultProbability curve point = case point of   DatePoint d -> defaultProbabilityAtDateRaw curve d   TimePoint t -> defaultProbabilityAtTimeRaw curve t  -- |Default probability over a same-representation date or year-fraction interval.-defaultProbabilityBetween :: DefaultProbabilityTermStructure -> TermInterval -> Bool -> IO Double+defaultProbabilityBetween :: GenDefaultProbabilityTermStructure d -> TermInterval -> Bool -> IO Double defaultProbabilityBetween curve interval = case interval of   DateInterval d1 d2 -> defaultProbabilityBetweenDatesRaw curve d1 d2   TimeInterval t1 t2 -> defaultProbabilityBetweenTimesRaw curve t1 t2 +{#fun qlAffineHazardRateCurveConditionalSurvivalProbability as conditionalSurvivalProbabilityAtDatesRaw{withAffineHazardRateCurve*`AffineHazardRateCurve',withDay*`Day',withDay*`Day',`Double',`Bool' -- ^extrapolate+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++{#fun qlAffineHazardRateCurveConditionalSurvivalProbability1 as conditionalSurvivalProbabilityAtTimesRaw{withAffineHazardRateCurve*`AffineHazardRateCurve',`Double',`Double',`Double',`Bool' -- ^extrapolate+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Probability of survival to the interval's later point, conditional on survival to its earlier+-- point and on the stochastic hazard-rate component realizing @yVal@ there -- see+-- 'ql/experimental/credit/onefactoraffinesurvival.hpp'.+conditionalSurvivalProbability :: AffineHazardRateCurve -> TermInterval -> Double -- ^yVal+  -> Bool -> IO Double+conditionalSurvivalProbability curve interval yVal = case interval of+  DateInterval d1 d2 -> conditionalSurvivalProbabilityAtDatesRaw curve d1 d2 yVal+  TimeInterval t1 t2 -> conditionalSurvivalProbabilityAtTimesRaw curve t1 t2 yVal+ -- |bootstrap helper for a CDS quoted by running spread {#fun qlSpreadCdsHelper as spreadCdsHelper{withQuote*`GenQuote q' -- ^runningSpread   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^tenor@@ -144,6 +165,7 @@   ,withDayCounter*`DayCounter' -- ^lastPeriodDayCounter   ,`Bool' -- ^rebatesAccrual   ,`PricingModel' -- ^model+  ,withMaybeDay*`Maybe Day' -- ^tradeDate (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`DefaultProbabilityHelper'peekDefaultProbabilityHelper*#}  -- |the upfront must be quoted in fractional units.@@ -161,6 +183,7 @@   ,withDayCounter*`DayCounter' -- ^lastPeriodDayCounter   ,`Bool' -- ^rebatesAccrual   ,`PricingModel' -- ^model+  ,withMaybeDay*`Maybe Day' -- ^tradeDate (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`DefaultProbabilityHelper'peekDefaultProbabilityHelper*#}  -- |The fair running-spread/upfront quote implied by the helper's current market data and pricing@@ -169,6 +192,12 @@ {#fun qlDefaultProbabilityHelperImpliedQuote as impliedQuote{withDefaultProbabilityHelper*`DefaultProbabilityHelper'   ,preErrorCheck-`String'errorCheck*-}->`Double'#} +-- |The quote that would make the helper reprice exactly on the given default-probability curve:+-- a par spread or upfront read with the helper's own conventions on any credit curve.+{#fun qlDefaultProbabilityHelperImpliedQuoteOn as impliedQuoteOn{withDefaultProbabilityHelper*`DefaultProbabilityHelper'+  ,withDefaultProbabilityTermStructure*`GenDefaultProbabilityTermStructure d'+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}+ interpolatedDefaultDensityCurve :: NonEmpty (Day, Double) -> DayCounter -> Calendar -> [(Day, GenQuote q)] -- ^jumps   -> Interpolation -> Bool -> IO DefaultProbabilityTermStructure interpolatedDefaultDensityCurve d dc c q i ex = do@@ -189,6 +218,19 @@  -- |default-probability term structure built by interpolating hazard rates at given dates {#fun qlInterpolatedHazardRateCurve{withDayArray*`[Day]'&,withDoubleArray*`[Double]'&,withDayCounter*`DayCounter',withCalendar*`Calendar',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Int',`Int',`Int',`Bool',preErrorCheck-`String'errorCheck*-}->`DefaultProbabilityTermStructure'peekDefaultProbabilityTermStructure*#}++-- |Hazard-rate curve interpolated deterministically between nodes, combined with a one-factor+-- affine short-rate model's stochastic discount mechanics -- see+-- 'ql/experimental/credit/interpolatedaffinehazardratecurve.hpp'.+interpolatedAffineHazardRateCurve :: NonEmpty (Day, Double) -> DayCounter -> GenOneFactorAffineModel om -> Calendar -> [(Day, GenQuote q)] -- ^jumps+  -> Interpolation+  -> Bool -- ^extrapolate past the curve's max date+  -> IO AffineHazardRateCurve+interpolatedAffineHazardRateCurve d dc m c q i ex =+  uncurryNested (qlInterpolatedAffineHazardRateCurve dd dq dc m c qq qd) (qlInterpolation i) ex+  where {(qd, qq) = unzip q; (dd, dq) = unzip (toList d)}++{#fun qlInterpolatedAffineHazardRateCurve{withDayArray*`[Day]'&,withDoubleArray*`[Double]'&,withDayCounter*`DayCounter',withOneFactorAffineModel*`GenOneFactorAffineModel om',withCalendar*`Calendar',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Int',`Int',`Int',`Bool',preErrorCheck-`String'errorCheck*-}->`AffineHazardRateCurve'peekAffineHazardRateCurve*#}  interpolatedSurvivalProbabilityCurve :: NonEmpty (Day, Double) -> DayCounter -> Calendar -> [(Day, GenQuote q)] -- ^jumps   -> Interpolation -> Bool -> IO DefaultProbabilityTermStructure
QuantLib/TermStructure/Inflation.chs view
@@ -6,6 +6,9 @@   , ZeroCouponInflationSwapHelper   , YearOnYearInflationSwapHelper   , CPIInterpolationType(..) -- ^re-exported from "QuantLib.Internal.Common"+  , InflationSwapPeriod(..)+    -- ** Seasonality+  , Seasonality(..)      -- * Constructors     -- ** Helpers@@ -16,15 +19,18 @@   , piecewiseZeroInflationCurve   , piecewiseYoyInflationCurve   , interpolatedYoyInflationCurve+  , interpolatedZeroInflationCurve      -- * Inspectors   , HasHelperUnderlying(..)   , zeroRate   , yoyRate+  , zeroCouponInflationSwapImpliedQuoteOn+  , yearOnYearInflationSwapImpliedQuoteOn   ) where import QuantLib.Internal import QuantLib.Internal.Type-{#import QuantLib.Time.Schedule#}(Frequency)+{#import QuantLib.Time.Schedule#}(Frequency(..)) import QuantLib.Internal.Common import QuantLib.TermStructure(HasHelperUnderlying(..)) import Data.List.NonEmpty(NonEmpty, toList)@@ -37,40 +43,107 @@ #include "ql.h"  {#pointer *Calendar foreign -> CCalendar nocode#}-{#pointer *QlQuote as Quote foreign -> CQuote' nocode#}-{#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#} {#pointer *QlZeroInflationTermStructure as ZeroInflationTermStructure foreign -> CZeroInflationTermStructure' nocode#} {#pointer *QlYoYInflationTermStructure as YoYInflationTermStructure foreign -> CYoYInflationTermStructure' nocode#} {#pointer *QlZeroInflationIndex as ZeroInflationIndex foreign -> CZeroInflationIndex' nocode#} {#pointer *QlYoYInflationIndex as YoYInflationIndex foreign -> CYoYInflationIndex' nocode#} {#pointer *QlZeroCouponInflationSwapHelper as ZeroCouponInflationSwapHelper foreign -> CZeroCouponInflationSwapHelper nocode#} {#pointer *QlYearOnYearInflationSwapHelper as YearOnYearInflationSwapHelper foreign -> CYearOnYearInflationSwapHelper nocode#}-{#pointer *QlZeroCouponInflationSwap as ZeroCouponInflationSwap foreign -> CZeroCouponInflationSwap' nocode#}-{#pointer *QlYearOnYearInflationSwap as YearOnYearInflationSwap foreign -> CYearOnYearInflationSwap' nocode#} {#pointer *QlBondHelper as BondHelper foreign -> CBondHelper' nocode#} --- |Bootstrap helper for a zero-coupon inflation swap, at the given (observation lag, maturity).-{#fun qlZeroCouponInflationSwapHelper as zeroCouponInflationSwapHelper{withQuote*`GenQuote q' -- ^quote+-- |Which dates an inflation swap helper's swap runs between. 'InflationSwapToMaturity' starts on+-- the evaluation date and moves with it; 'InflationSwapBetweenDates' is fixed. The fixed form also+-- takes its observation-interpolation weight from the start date rather than the maturity.+data InflationSwapPeriod+  = InflationSwapToMaturity+      !Day -- ^maturity+  | InflationSwapBetweenDates+      !Day -- ^startDate+      !Day -- ^endDate++-- |Bootstrap helper for a zero-coupon inflation swap, at the given observation lag and period.+zeroCouponInflationSwapHelper :: GenQuote q -- ^quote+  -> (Word, TimeUnit) -- ^swapObsLag+  -> InflationSwapPeriod+  -> Calendar+  -> BusinessDayConvention -- ^paymentConvention+  -> DayCounter+  -> GenZeroInflationIndex zidx+  -> CPIInterpolationType -- ^observationInterpolation+  -> PillarChoice -- ^pillar+  -> Maybe Day -- ^customPillarDate+  -> IO ZeroCouponInflationSwapHelper+zeroCouponInflationSwapHelper quote lag period cal conv dc zii interp pillar customPillarDate = case period of+  InflationSwapToMaturity m -> zeroCouponInflationSwapHelperRaw quote lag m cal conv dc zii interp pillar customPillarDate+  InflationSwapBetweenDates s e ->+    zeroCouponInflationSwapHelperBetweenDatesRaw quote lag s e cal conv dc zii interp pillar customPillarDate++-- |Bootstrap helper for a year-on-year inflation swap. Unlike 'zeroCouponInflationSwapHelper',+-- also needs the nominal discount curve (the YoY swap's fixed/floating legs discount off it).+yearOnYearInflationSwapHelper :: GenQuote q -- ^quote+  -> (Word, TimeUnit) -- ^swapObsLag+  -> InflationSwapPeriod+  -> Calendar+  -> BusinessDayConvention -- ^paymentConvention+  -> DayCounter+  -> GenYoYInflationIndex yidx+  -> CPIInterpolationType -- ^observationInterpolation+  -> GenYieldTermStructure y -- ^nominalTermStructure+  -> PillarChoice -- ^pillar+  -> Maybe Day -- ^customPillarDate+  -> IO YearOnYearInflationSwapHelper+yearOnYearInflationSwapHelper quote lag period cal conv dc yii interp nominal pillar customPillarDate = case period of+  InflationSwapToMaturity m -> yearOnYearInflationSwapHelperRaw quote lag m cal conv dc yii interp nominal pillar customPillarDate+  InflationSwapBetweenDates s e ->+    yearOnYearInflationSwapHelperBetweenDatesRaw quote lag s e cal conv dc yii interp nominal pillar customPillarDate++-- Raw inflation swap helper bindings; one per 'InflationSwapPeriod' constructor for each helper.+{#fun qlZeroCouponInflationSwapHelper as zeroCouponInflationSwapHelperRaw{withQuote*`GenQuote q' -- ^quote   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^swapObsLag   ,withDay*`Day' -- ^maturity   ,withCalendar*`Calendar'   ,fromEnumC`BusinessDayConvention' -- ^paymentConvention   ,withDayCounter*`DayCounter'-  ,withZeroInflationIndex*`ZeroInflationIndex'+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx'   ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation   ,`PillarChoice' -- ^pillar   ,withMaybeDay*`Maybe Day' -- ^customPillarDate   ,preErrorCheck-`String'errorCheck*-}->`ZeroCouponInflationSwapHelper'peekZeroCouponInflationSwapHelper*#} --- |Bootstrap helper for a year-on-year inflation swap. Unlike 'zeroCouponInflationSwapHelper',--- also needs the nominal discount curve (the YoY swap's fixed/floating legs discount off it).-{#fun qlYearOnYearInflationSwapHelper as yearOnYearInflationSwapHelper{withQuote*`GenQuote q' -- ^quote+{#fun qlZeroCouponInflationSwapHelper2 as zeroCouponInflationSwapHelperBetweenDatesRaw{withQuote*`GenQuote q' -- ^quote   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^swapObsLag+  ,withDay*`Day' -- ^startDate+  ,withDay*`Day' -- ^endDate+  ,withCalendar*`Calendar'+  ,fromEnumC`BusinessDayConvention' -- ^paymentConvention+  ,withDayCounter*`DayCounter'+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx'+  ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation+  ,`PillarChoice' -- ^pillar+  ,withMaybeDay*`Maybe Day' -- ^customPillarDate+  ,preErrorCheck-`String'errorCheck*-}->`ZeroCouponInflationSwapHelper'peekZeroCouponInflationSwapHelper*#}++{#fun qlYearOnYearInflationSwapHelper2 as yearOnYearInflationSwapHelperBetweenDatesRaw{withQuote*`GenQuote q' -- ^quote+  ,fromEnumQuantity`(Word,TimeUnit)'& -- ^swapObsLag+  ,withDay*`Day' -- ^startDate+  ,withDay*`Day' -- ^endDate+  ,withCalendar*`Calendar'+  ,fromEnumC`BusinessDayConvention' -- ^paymentConvention+  ,withDayCounter*`DayCounter'+  ,withYoYInflationIndex*`GenYoYInflationIndex yidx'+  ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation+  ,withYieldTermStructure*`GenYieldTermStructure y' -- ^nominalTermStructure+  ,`PillarChoice' -- ^pillar+  ,withMaybeDay*`Maybe Day' -- ^customPillarDate+  ,preErrorCheck-`String'errorCheck*-}->`YearOnYearInflationSwapHelper'peekYearOnYearInflationSwapHelper*#}++{#fun qlYearOnYearInflationSwapHelper as yearOnYearInflationSwapHelperRaw{withQuote*`GenQuote q' -- ^quote+  ,fromEnumQuantity`(Word,TimeUnit)'& -- ^swapObsLag   ,withDay*`Day' -- ^maturity   ,withCalendar*`Calendar'   ,fromEnumC`BusinessDayConvention' -- ^paymentConvention   ,withDayCounter*`DayCounter'-  ,withYoYInflationIndex*`YoYInflationIndex'+  ,withYoYInflationIndex*`GenYoYInflationIndex yidx'   ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^nominalTermStructure   ,`PillarChoice' -- ^pillar@@ -84,7 +157,7 @@   ,`Double' -- ^faceAmount   ,`Double' -- ^baseCPI   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^observationLag-  ,withZeroInflationIndex*`ZeroInflationIndex'+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx'   ,fromEnumC`CPIInterpolationType' -- ^observationInterpolation   ,withSchedule*`Schedule',withNonEmptyDoubleArray*`NonEmpty Double'& -- ^coupons   ,withDayCounter*`DayCounter' -- ^accrualDayCounter@@ -97,12 +170,14 @@ -- between the bootstrapped nodes with the given 'Interpolation'. piecewiseZeroInflationCurve :: Day -- ^referenceDate   -> Day -- ^baseDate-  -> Frequency -> DayCounter -> NonEmpty ZeroCouponInflationSwapHelper -> Interpolation+  -> Frequency -> DayCounter -> NonEmpty ZeroCouponInflationSwapHelper -> Maybe Seasonality -> Interpolation   -> IO ZeroInflationTermStructure-piecewiseZeroInflationCurve r b f dc h i = uncurryNested (qlPiecewiseZeroInflationCurve r b f dc (toList h)) (qlInterpolation i)+piecewiseZeroInflationCurve r b f dc h s i = seasonalityArgs r s $ \sk sd sf sfs ->+  uncurryNested (qlPiecewiseZeroInflationCurve r b f dc (toList h) sk sd sf sfs) (qlInterpolation i)  {#fun qlPiecewiseZeroInflationCurve{withDay*`Day',withDay*`Day',`Frequency',withDayCounter*`DayCounter'   ,withZeroCouponInflationSwapHelperArray*`[ZeroCouponInflationSwapHelper]'&+  ,`Int',withDay*`Day',`Frequency',withDoubleArray*`[Double]'&   ,`Int',`Int',`Int',preErrorCheck-`String'errorCheck*-}->`ZeroInflationTermStructure'peekZeroInflationTermStructure*#}  -- |Bootstraps a year-on-year inflation term structure piecewise from a set of helpers,@@ -110,12 +185,14 @@ piecewiseYoyInflationCurve :: Day -- ^referenceDate   -> Day -- ^baseDate   -> Double -- ^baseYoYRate-  -> Frequency -> DayCounter -> NonEmpty YearOnYearInflationSwapHelper -> Interpolation+  -> Frequency -> DayCounter -> NonEmpty YearOnYearInflationSwapHelper -> Maybe Seasonality -> Interpolation   -> IO YoYInflationTermStructure-piecewiseYoyInflationCurve r b y f dc h i = uncurryNested (qlPiecewiseYoYInflationCurve r b y f dc (toList h)) (qlInterpolation i)+piecewiseYoyInflationCurve r b y f dc h s i = seasonalityArgs r s $ \sk sd sf sfs ->+  uncurryNested (qlPiecewiseYoYInflationCurve r b y f dc (toList h) sk sd sf sfs) (qlInterpolation i)  {#fun qlPiecewiseYoYInflationCurve{withDay*`Day',withDay*`Day',`Double',`Frequency',withDayCounter*`DayCounter'   ,withYearOnYearInflationSwapHelperArray*`[YearOnYearInflationSwapHelper]'&+  ,`Int',withDay*`Day',`Frequency',withDoubleArray*`[Double]'&   ,`Int',`Int',`Int',preErrorCheck-`String'errorCheck*-}->`YoYInflationTermStructure'peekYoYInflationTermStructure*#}  -- |A YoY-inflation curve interpolating directly between given (date, rate) nodes, unlike@@ -124,17 +201,57 @@ -- node is the curve's own base date\/rate. interpolatedYoyInflationCurve :: Day -- ^referenceDate   -> NonEmpty (Day, Double) -- ^dates, rates-  -> Frequency -> DayCounter -> Interpolation+  -> Frequency -> DayCounter -> Maybe Seasonality -> Interpolation   -> IO YoYInflationTermStructure-interpolatedYoyInflationCurve r dr f dc i = uncurryNested (qlInterpolatedYoYInflationCurve r ds rs f dc) (qlInterpolation i)+interpolatedYoyInflationCurve r dr f dc s i = seasonalityArgs r s $ \sk sd sf sfs ->+  uncurryNested (qlInterpolatedYoYInflationCurve r ds rs f dc sk sd sf sfs) (qlInterpolation i)   where (ds, rs) = unzip (toList dr) {#fun qlInterpolatedYoYInflationCurve{withDay*`Day',withDayArray*`[Day]'&,withDoubleArrayRaw*`[Double]'   ,`Frequency',withDayCounter*`DayCounter'+  ,`Int',withDay*`Day',`Frequency',withDoubleArray*`[Double]'&   ,`Int',`Int',`Int',preErrorCheck-`String'errorCheck*-}->`YoYInflationTermStructure'peekYoYInflationTermStructure*#} +-- |A zero-coupon inflation curve interpolating directly between given (date, rate) nodes. The+-- first node is the curve's base date.+interpolatedZeroInflationCurve :: Day -- ^referenceDate+  -> NonEmpty (Day, Double) -- ^dates, rates+  -> Frequency -> DayCounter -> Maybe Seasonality -> Interpolation+  -> IO ZeroInflationTermStructure+interpolatedZeroInflationCurve r dr f dc s i = seasonalityArgs r s $ \sk sd sf sfs ->+  uncurryNested (qlInterpolatedZeroInflationCurve r ds rs f dc sk sd sf sfs) (qlInterpolation i)+  where (ds, rs) = unzip (toList dr)+{#fun qlInterpolatedZeroInflationCurve{withDay*`Day',withDayArray*`[Day]'&,withDoubleArrayRaw*`[Double]'+  ,`Frequency',withDayCounter*`DayCounter'+  ,`Int',withDay*`Day',`Frequency',withDoubleArray*`[Double]'&+  ,`Int',`Int',`Int',preErrorCheck-`String'errorCheck*-}->`ZeroInflationTermStructure'peekZeroInflationTermStructure*#}++-- |Multiplicative price seasonality applied by an inflation curve's zero and year-on-year rates.+-- Factors repeat every whole multiple of a year and are normalized to the curve's base date;+-- multi-year factors inconsistent at whole years around that date make construction throw.+data Seasonality+  = MultiplicativePriceSeasonality !Day !Frequency ![Double] -- ^seasonalityBaseDate, frequency, factors+  | KerkhofSeasonality !Day ![Double] -- ^seasonalityBaseDate, monthly factors++-- Flattens an optional seasonality into the shims' kind, base date, frequency and factors.+seasonalityArgs :: Day -> Maybe Seasonality -> (Int -> Day -> Frequency -> [Double] -> r) -> r+seasonalityArgs d s k = case s of+  Nothing -> k (-1) d NoFrequency []+  Just (MultiplicativePriceSeasonality b f fs) -> k 0 b f fs+  Just (KerkhofSeasonality b fs) -> k 1 b Monthly fs+ -- |Zero-coupon inflation rate implied by the curve. {#fun qlZeroInflationTermStructureZeroRate as zeroRate{withGenTermStructure*`ZeroInflationTermStructure',withDay*`Day',`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |The swap rate that would make a zero-coupon inflation swap helper reprice exactly on the given+-- zero-inflation curve, bootstrapped from it or not.+{#fun qlZeroCouponInflationSwapHelperImpliedQuoteOn as zeroCouponInflationSwapImpliedQuoteOn{withZeroCouponInflationSwapHelper*`ZeroCouponInflationSwapHelper'+  ,withGenTermStructure*`ZeroInflationTermStructure',preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |The swap rate that would make a year-on-year inflation swap helper reprice exactly on the given+-- year-on-year curve.+{#fun qlYearOnYearInflationSwapHelperImpliedQuoteOn as yearOnYearInflationSwapImpliedQuoteOn{withYearOnYearInflationSwapHelper*`YearOnYearInflationSwapHelper'+  ,withGenTermStructure*`YoYInflationTermStructure',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |Year-on-year inflation rate implied by the curve. {#fun qlYoYInflationTermStructureYoYRate as yoyRate{withGenTermStructure*`YoYInflationTermStructure',withDay*`Day',`Bool' -- ^extrapolate
QuantLib/TermStructure/InflationVolatility.chs view
@@ -98,7 +98,7 @@ -- interpolator, 'Interpolation' the per-maturity one. yoyCapFloorTermPriceSurface :: Word -- ^fixingDays   -> (Word, TimeUnit) -- ^yyLag-  -> YoYInflationIndex -> CPIInterpolationType -> GenYieldTermStructure y -- ^nominal+  -> GenYoYInflationIndex yidx -> CPIInterpolationType -> GenYieldTermStructure y -- ^nominal   -> DayCounter -> Calendar -> BusinessDayConvention   -> [Double] -- ^cStrikes   -> [Double] -- ^fStrikes@@ -112,7 +112,7 @@   where (maturityNums, maturityUnits) = unzip cfMaturities {#fun qlYoYCapFloorTermPriceSurface{fromIntegral`Word' -- ^fixingDays   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^yyLag-  ,withYoYInflationIndex*`YoYInflationIndex'+  ,withYoYInflationIndex*`GenYoYInflationIndex yidx'   ,fromEnumC`CPIInterpolationType'   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^nominal   ,withDayCounter*`DayCounter'@@ -139,7 +139,7 @@   (ds, rs) <- qlYoYCapFloorTermPriceSurfaceAtmYoYSwapDateRates s   return $ zip ds rs {#fun qlYoYCapFloorTermPriceSurfaceAtmYoYSwapDateRates{withGenTermStructure*`YoYCapFloorTermPriceSurface'-  ,preArray-`[Day]'&peekDayArray*,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preIntArray-`[Day]'&peekDayArray*,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The same ATM YoY swap curve as 'yoyCapFloorAtmYoySwapDateRates', but with maturities as year -- fractions from the surface's reference date rather than dates.@@ -148,7 +148,7 @@   (ts, rs) <- qlYoYCapFloorTermPriceSurfaceAtmYoYSwapTimeRates s   return $ zip ts rs {#fun qlYoYCapFloorTermPriceSurfaceAtmYoYSwapTimeRates{withGenTermStructure*`YoYCapFloorTermPriceSurface'-  ,preArray-`[Double]'&peekDoubleArray*,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The ATM YoY swap rate at the given maturity date, from put\/call parity on the surface's -- cap\/floor price data.@@ -169,7 +169,7 @@ -- 'YoYOptionletVolatilitySurface' (via 'kInterpolatedYoyOptionletVolatilitySurfaceBlack' et al.) -- has a bootstrapped vol curve for. {#fun qlYoYCapFloorTermPriceSurfaceStrikes as yoyCapFloorStrikes{withGenTermStructure*`YoYCapFloorTermPriceSurface'-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Strips a 'YoYOptionletVolatilitySurface' from a 'YoYCapFloorTermPriceSurface' by bootstrapping -- a per-strike vol curve against Black-priced YoY caps\/floors (mirrors upstream's own@@ -184,7 +184,7 @@ kInterpolatedYoyOptionletVolatilitySurfaceBlack :: Word -- ^settlementDays   -> Calendar -> BusinessDayConvention -> DayCounter   -> YoYCapFloorTermPriceSurface -- ^capFloorPrices-  -> YoYInflationIndex -- ^index+  -> GenYoYInflationIndex yidx -- ^index   -> GenYieldTermStructure y -- ^nominalTermStructure   -> Double -- ^slope   -> Interpolation@@ -196,7 +196,7 @@   ,fromEnumC`BusinessDayConvention'   ,withDayCounter*`DayCounter'   ,withGenTermStructure*`YoYCapFloorTermPriceSurface' -- ^capFloorPrices-  ,withYoYInflationIndex*`YoYInflationIndex' -- ^index+  ,withYoYInflationIndex*`GenYoYInflationIndex yidx' -- ^index   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^nominalTermStructure   ,`Double' -- ^slope   ,`Int',`Int',`Int' -- ^interpolator, approximator, approximatorArg@@ -206,7 +206,7 @@ kInterpolatedYoyOptionletVolatilitySurfaceUnitDisplacedBlack :: Word -- ^settlementDays   -> Calendar -> BusinessDayConvention -> DayCounter   -> YoYCapFloorTermPriceSurface -- ^capFloorPrices-  -> YoYInflationIndex -- ^index+  -> GenYoYInflationIndex yidx -- ^index   -> GenYieldTermStructure y -- ^nominalTermStructure   -> Double -- ^slope   -> Interpolation@@ -218,7 +218,7 @@   ,fromEnumC`BusinessDayConvention'   ,withDayCounter*`DayCounter'   ,withGenTermStructure*`YoYCapFloorTermPriceSurface' -- ^capFloorPrices-  ,withYoYInflationIndex*`YoYInflationIndex' -- ^index+  ,withYoYInflationIndex*`GenYoYInflationIndex yidx' -- ^index   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^nominalTermStructure   ,`Double' -- ^slope   ,`Int',`Int',`Int' -- ^interpolator, approximator, approximatorArg@@ -228,7 +228,7 @@ kInterpolatedYoyOptionletVolatilitySurfaceBachelier :: Word -- ^settlementDays   -> Calendar -> BusinessDayConvention -> DayCounter   -> YoYCapFloorTermPriceSurface -- ^capFloorPrices-  -> YoYInflationIndex -- ^index+  -> GenYoYInflationIndex yidx -- ^index   -> GenYieldTermStructure y -- ^nominalTermStructure   -> Double -- ^slope   -> Interpolation@@ -240,7 +240,7 @@   ,fromEnumC`BusinessDayConvention'   ,withDayCounter*`DayCounter'   ,withGenTermStructure*`YoYCapFloorTermPriceSurface' -- ^capFloorPrices-  ,withYoYInflationIndex*`YoYInflationIndex' -- ^index+  ,withYoYInflationIndex*`GenYoYInflationIndex yidx' -- ^index   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^nominalTermStructure   ,`Double' -- ^slope   ,`Int',`Int',`Int' -- ^interpolator, approximator, approximatorArg@@ -254,7 +254,7 @@   -> Double -- ^baseRate   -> (Word, TimeUnit) -- ^observationLag   -> Calendar -> BusinessDayConvention -> DayCounter-  -> ZeroInflationIndex -> CPIInterpolationType -> GenYieldTermStructure y+  -> GenZeroInflationIndex zidx -> CPIInterpolationType -> GenYieldTermStructure y   -> [Double] -- ^cStrikes   -> [Double] -- ^fStrikes   -> [(Word, TimeUnit)] -- ^cfMaturities@@ -267,7 +267,7 @@   where (maturityNums, maturityUnits) = unzip cfMaturities {#fun qlCPICapFloorTermPriceSurface{`Double',`Double',fromEnumQuantity`(Word,TimeUnit)'&   ,withCalendar*`Calendar',fromEnumC`BusinessDayConvention',withDayCounter*`DayCounter'-  ,withZeroInflationIndex*`ZeroInflationIndex',fromEnumC`CPIInterpolationType'+  ,withZeroInflationIndex*`GenZeroInflationIndex zidx',fromEnumC`CPIInterpolationType'   ,withYieldTermStructure*`GenYieldTermStructure y'   ,withDoubleArray*`[Double]'& -- ^cStrikes   ,withDoubleArray*`[Double]'& -- ^fStrikes
QuantLib/TermStructure/Volatility.chs view
@@ -34,12 +34,14 @@   , SwaptionVolatilityMatrix   , SabrSwaptionVolatilityCube   , NoArbSabrSwaptionVolatilityCube+  , ZabrSwaptionVolatilityCube   , InterpolatedSwaptionVolatilityCube   , CallableBondVolatilityStructure   , SmileSection   , SabrInterpolatedSmileSection   , SviInterpolatedSmileSection   , NoArbSabrInterpolatedSmileSection+  , ZabrInterpolatedSmileSection      -- ** Configuration and extrapolation   , BlackVarianceSurfaceExtrapolation(..)@@ -74,6 +76,7 @@   , sabrAsSmileSection   , sviAsSmileSection   , noArbSabrAsSmileSection+  , zabrInterpolatedAsSmileSection      -- ** Optionlet and cap-floor volatility   , localVolSurface@@ -85,6 +88,7 @@     -- ** Black, local and swaption volatility   , impliedVolTermStructure   , blackConstantVol+  , sabrVolTermStructure   , relinkableBlackVolTermStructure   , constantSwaptionVolatility     -- ** Smile sections and parametrizations@@ -95,6 +99,7 @@   , sabrInterpolatedSmileSection   , sviInterpolatedSmileSection   , noArbSabrInterpolatedSmileSection+  , zabrInterpolatedSmileSection   , flatSmileSection   , spreadedSmileSection   , atmSmileSection@@ -108,6 +113,7 @@   , sabrVolSurface     -- ** Relinkable and spreaded structures   , spreadedSwaptionVolatility+  , gaussian1dSwaptionVolatility   , spreadedOptionletVol   , relinkableSwaptionVolatilityStructure   , relinkableOptionletVolatilityStructure@@ -116,6 +122,8 @@   , localVolCurve   , capFloorTermVolCurve   , blackVarianceCurve+  , extendedBlackVarianceCurve+  , extendedBlackVarianceSurface   , capFloorTermVolSurface   , blackVarianceSurface   , piecewiseBlackVarianceSurface@@ -126,6 +134,7 @@   , swaptionVolatilityMatrix   , sabrSwaptionVolatilityCube   , noArbSabrSwaptionVolatilityCube+  , zabrSwaptionVolatilityCube   , interpolatedSwaptionVolatilityCube   , swaptionVolatilityMatrixMoving     -- ** Local-volatility and Andreasen-Huge models@@ -146,6 +155,7 @@     -- ** Strike and maturity capabilities   , HasStrikeBounds(..)   , HasAtmStrike(..)+  , optionDateFromTenor      -- ** Optionlet and cap-floor volatility   , atmCapFloorStrikes@@ -183,6 +193,7 @@   , smileSectionOptionPrice   , smileSectionDigitalOptionPrice   , smileSectionDensity+  , smileSectionVega   , sabrAlpha   , sabrBeta   , sabrNu@@ -205,6 +216,14 @@   , noArbSabrRmsError   , noArbSabrMaxError   , noArbSabrEndCriteria+  , zabrInterpolatedAlpha+  , zabrInterpolatedBeta+  , zabrInterpolatedNu+  , zabrInterpolatedRho+  , zabrInterpolatedGamma+  , zabrInterpolatedRmsError+  , zabrInterpolatedMaxError+  , zabrInterpolatedEndCriteria     -- ** ATM curves and SABR surfaces   , atmVol   , atmVariance@@ -236,6 +255,10 @@   , noArbSabrDenseSabrParameters   , noArbSabrMarketVolCube   , noArbSabrVolCubeAtmCalibrated+  , zabrSparseParameters+  , zabrDenseParameters+  , zabrMarketVolCube+  , zabrVolCubeAtmCalibrated     -- ** Andreasen-Huge results   , andreasenHugeCalibrationError   , andreasenHugeForward@@ -261,15 +284,13 @@  {#pointer *Calendar foreign -> CCalendar nocode#} {#pointer *DayCounter foreign -> CDayCounter nocode#}-{#pointer *QlQuote as Quote foreign -> CQuote' nocode#}-{#pointer *QlIborIndex as IborIndex foreign -> CIborIndex' nocode#} {#pointer *QlSmileSection as SmileSection foreign -> CSmileSection nocode#} {#pointer *QlSabrInterpolatedSmileSection as SabrInterpolatedSmileSection foreign -> CSabrInterpolatedSmileSection nocode#} {#pointer *QlSviInterpolatedSmileSection as SviInterpolatedSmileSection foreign -> CSviInterpolatedSmileSection nocode#} {#pointer *QlNoArbSabrInterpolatedSmileSection as NoArbSabrInterpolatedSmileSection foreign -> CNoArbSabrInterpolatedSmileSection nocode#}+{#pointer *QlZabrInterpolatedSmileSection as ZabrInterpolatedSmileSection foreign -> CZabrInterpolatedSmileSection nocode#} {#pointer *QlVolatilityTermStructure as VolatilityTermStructure foreign -> CVolatilityTermStructure' nocode#} {#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#}-{#pointer *QlTermStructure as TermStructure foreign -> CTermStructure' nocode#} {#pointer *QlOptionletVolatilityStructure as OptionletVolatilityStructure foreign -> COptionletVolatilityStructure' nocode#} {#pointer *QlRelinkableOptionletVolatilityStructure as RelinkableOptionletVolatilityStructure foreign -> CRelinkableOptionletVolatilityStructure' nocode#} {#pointer *QlLocalVolTermStructure as LocalVolTermStructure foreign -> CLocalVolTermStructure' nocode#}@@ -293,8 +314,9 @@ {#pointer *QlSwaptionVolatilityMatrix as SwaptionVolatilityMatrix foreign -> CSwaptionVolatilityMatrix' nocode#} {#pointer *QlSabrSwaptionVolatilityCube as SabrSwaptionVolatilityCube foreign -> CSabrSwaptionVolatilityCube' nocode#} {#pointer *QlNoArbSabrSwaptionVolatilityCube as NoArbSabrSwaptionVolatilityCube foreign -> CNoArbSabrSwaptionVolatilityCube' nocode#}+{#pointer *QlZabrSwaptionVolatilityCube as ZabrSwaptionVolatilityCube foreign -> CZabrSwaptionVolatilityCube' nocode#}+{#pointer *QlGaussian1dModel foreign -> CGaussian1dModel' nocode#} {#pointer *QlInterpolatedSwaptionVolatilityCube as InterpolatedSwaptionVolatilityCube foreign -> CInterpolatedSwaptionVolatilityCube' nocode#}-{#pointer *QlSwapIndex as SwapIndex foreign -> CSwapIndex' nocode#} {#pointer *QlBlackAtmVolCurve as BlackAtmVolCurve foreign -> CBlackAtmVolCurve' nocode#} {#pointer *QlBlackVolSurface as BlackVolSurface foreign -> CBlackVolSurface' nocode#} {#pointer *QlAbcdAtmVolCurve as AbcdAtmVolCurve foreign -> CAbcdAtmVolCurve' nocode#}@@ -485,7 +507,7 @@ andreasenHugeCalibrationError x = do   [mn, mx, av] <- qlAndreasenHugeVolatilityInterplCalibrationError x   pure (mn, mx, av)-{#fun qlAndreasenHugeVolatilityInterplCalibrationError{withAndreasenHugeVolatilityInterpl*`AndreasenHugeVolatilityInterpl',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlAndreasenHugeVolatilityInterplCalibrationError{withAndreasenHugeVolatilityInterpl*`AndreasenHugeVolatilityInterpl',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Forward level implied by an Andreasen-Huge calibration at time @t@. {#fun qlAndreasenHugeVolatilityInterplFwd as andreasenHugeForward{withAndreasenHugeVolatilityInterpl*`AndreasenHugeVolatilityInterpl' -- ^interpolation@@ -569,6 +591,7 @@   ,`Double' -- ^displacement   ,`Bool' -- ^dontThrow   ,fromMaybeEnumQuantity`Maybe (Word, TimeUnit)'& -- ^optionletFrequency+  ,fromIntegral`Word' -- ^paymentLag (1.44; QuantLib 1.43 requires 0)   ,preErrorCheck-`String'errorCheck*-}->`OptionletVolatilityStructure'peekOptionletVolatilityStructure*#}  -- |Extends an 'OptionletStripper1' (built internally, never exposed as its own Haskell type --@@ -589,17 +612,18 @@   ,`Bool' -- ^dontThrow   ,fromMaybeEnumQuantity`Maybe (Word, TimeUnit)'& -- ^optionletFrequency   ,withCapFloorTermVolCurve*`CapFloorTermVolCurve' -- ^atmCapFloorTermVolCurve+  ,fromIntegral`Word' -- ^paymentLag (1.44; QuantLib 1.43 requires 0)   ,preErrorCheck-`String'errorCheck*-}->`OptionletStripper2'peekOptionletStripper2*#}  -- |Fresh construction (a 'StrippedOptionletAdapter' wrapping the 'OptionletStripper2' itself), -- never a cast -- same idiom as 'sabrAsSmileSection'. {#fun qlOptionletStripper2AsOptionletVolatilityStructure as asOptionletVolatilityStructure{withOptionletStripper2*`OptionletStripper2',preErrorCheck-`String'errorCheck*-}->`OptionletVolatilityStructure'peekOptionletVolatilityStructure*#} -{#fun qlOptionletStripper2AtmCapFloorStrikes as atmCapFloorStrikes{withOptionletStripper2*`OptionletStripper2',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlOptionletStripper2AtmCapFloorStrikes as atmCapFloorStrikes{withOptionletStripper2*`OptionletStripper2',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#} -{#fun qlOptionletStripper2AtmCapFloorPrices as atmCapFloorPrices{withOptionletStripper2*`OptionletStripper2',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlOptionletStripper2AtmCapFloorPrices as atmCapFloorPrices{withOptionletStripper2*`OptionletStripper2',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#} -{#fun qlOptionletStripper2SpreadsVol as spreadsVol{withOptionletStripper2*`OptionletStripper2',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlOptionletStripper2SpreadsVol as spreadsVol{withOptionletStripper2*`OptionletStripper2',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |An optionlet vol surface behind a relinkable handle. The result /is/ an -- 'OptionletVolatilityStructure': pass it anywhere one is expected and everything built on it@@ -624,6 +648,12 @@ {#fun qlBlackConstantVol1 as blackConstantVolMovingRaw{fromIntegral`Word',withCalendar*`Calendar',withQuote*`GenQuote q',withDayCounter*`DayCounter',preErrorCheck-`String'errorCheck*-}->`BlackVolTermStructure'peekBlackVolTermStructure*#} {#fun qlBlackConstantVol as blackConstantVolFixed{withDay*`Day',withCalendar*`Calendar',withQuote*`GenQuote q',withDayCounter*`DayCounter',preErrorCheck-`String'errorCheck*-}->`BlackVolTermStructure'peekBlackVolTermStructure*#} +-- |SABR-parameterized Black volatility term structure. @gamma@ is upstream's vol-of-vol+-- (@nu@ in the usual SABR notation); @s0@\/@r@ are the initial forward and the+-- continuously-compounded rate used to roll it forward -- see+-- 'ql/experimental/volatility/sabrvoltermstructure.hpp'.+{#fun qlSabrVolTermStructure as sabrVolTermStructure{`Double',`Double',`Double',`Double',`Double',`Double',withDay*`Day',withDayCounter*`DayCounter',preErrorCheck-`String'errorCheck*-}->`BlackVolTermStructure'peekBlackVolTermStructure*#}+ -- |A Black vol surface behind a relinkable handle. The result /is/ a 'BlackVolTermStructure': -- pass it anywhere one is expected and everything built on it keeps tracking whatever the -- handle currently points at, so a later 'linkBlackVolTo' reprices already-constructed@@ -930,6 +960,15 @@   ,`Double' -- ^gap   ,preErrorCheck-`String'errorCheck*-}->`Double'#} +-- |the strike derivative of 'smileSectionOptionPrice', for any 'SmileSection' (however it was constructed)+{#fun qlSmileSectionVega as smileSectionVega{withSmileSection*`SmileSection'+  ,`Double' -- ^strike+  ,`Double' -- ^discount+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++{#fun qlSmileSectionMinStrike as minStrikeSmileSectionRaw{withSmileSection*`SmileSection',preErrorCheck-`String'errorCheck*-}->`Double'#}+{#fun qlSmileSectionMaxStrike as maxStrikeSmileSectionRaw{withSmileSection*`SmileSection',preErrorCheck-`String'errorCheck*-}->`Double'#}+ -- |a flat-volatility smile section: 'volatility' returns @vol@ for every strike. -- 'Nothing'\/'Nothing' reproduce upstream's own defaults for @referenceDate@\/@atmLevel@. {#fun qlFlatSmileSection as flatSmileSection{withDay*`Day'@@ -1249,6 +1288,95 @@ -- |the reason the calibration's optimizer stopped {#fun qlNoArbSabrInterpolatedSmileSectionEndCriteria as noArbSabrEndCriteria{withNoArbSabrInterpolatedSmileSection*`NoArbSabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`EndCriteriaType'#} +-- |a smile section calibrated to a market smile using the ZABR parameterization (SABR extended+-- with a @gamma@ shape parameter -- see 'zabrSmileSection'). Unlike 'zabrSmileSection', which+-- takes fixed calibrated parameters directly, this runs the alpha\/beta\/nu\/rho\/gamma+-- calibration itself against the given strike\/volatility quotes -- eagerly, at construction,+-- same as 'sabrInterpolatedSmileSection'\/'noArbSabrInterpolatedSmileSection'.+-- @alpha@\/@beta@\/@nu@\/@rho@\/@gamma@ are the calibration's initial guess;+-- @isAlphaFixed@\/@isBetaFixed@\/@isNuFixed@\/@isRhoFixed@\/@isGammaFixed@ default to 'False'+-- upstream. 'ZabrEvaluation' picks the same short-maturity\/local-volatility\/full-PDE evaluation+-- method as 'zabrSmileSection'.+zabrInterpolatedSmileSection :: ZabrEvaluation+  -> Day -- ^optionDate+  -> GenQuote q1 -- ^forward+  -> NonEmpty (Double, GenQuote q3) -- ^strike/volatility quotes+  -> Bool -- ^hasFloatingStrikes+  -> GenQuote q2 -- ^atmVolatility+  -> Double -- ^alpha+  -> Double -- ^beta+  -> Double -- ^nu+  -> Double -- ^rho+  -> Double -- ^gamma+  -> Bool -- ^isAlphaFixed+  -> Bool -- ^isBetaFixed+  -> Bool -- ^isNuFixed+  -> Bool -- ^isRhoFixed+  -> Bool -- ^isGammaFixed+  -> Bool -- ^vegaWeighted+  -> Maybe EndCriteria+  -> Maybe OptimizationMethod+  -> DayCounter -> IO ZabrInterpolatedSmileSection+zabrInterpolatedSmileSection evaluation optionDate forward strikeVols hasFloatingStrikes atmVolatility+  alpha beta nu rho gamma isAlphaFixed isBetaFixed isNuFixed isRhoFixed isGammaFixed vegaWeighted+  endCriteria method dc =+  zabrInterpolatedSmileSection_ evaluation optionDate forward strikes hasFloatingStrikes atmVolatility vols+    alpha beta nu rho gamma isAlphaFixed isBetaFixed isNuFixed isRhoFixed isGammaFixed vegaWeighted+    endCriteria method dc+  where (strikes, vols) = unzip (toList strikeVols)++{#fun qlZabrInterpolatedSmileSection as zabrInterpolatedSmileSection_{`ZabrEvaluation'+  ,withDay*`Day'+  ,withQuote*`GenQuote q1' -- ^forward+  ,withDoubleArray*`[Double]'& -- ^strikes+  ,`Bool' -- ^hasFloatingStrikes+  ,withQuote*`GenQuote q2' -- ^atmVolatility+  ,withQuoteArray*`[GenQuote q3]'& -- ^vols+  ,`Double' -- ^alpha+  ,`Double' -- ^beta+  ,`Double' -- ^nu+  ,`Double' -- ^rho+  ,`Double' -- ^gamma+  ,`Bool' -- ^isAlphaFixed+  ,`Bool' -- ^isBetaFixed+  ,`Bool' -- ^isNuFixed+  ,`Bool' -- ^isRhoFixed+  ,`Bool' -- ^isGammaFixed+  ,`Bool' -- ^vegaWeighted+  ,withMaybeEndCriteria*`Maybe EndCriteria'+  ,withMaybeOptimizationMethod*`Maybe OptimizationMethod'+  ,withDayCounter*`DayCounter'+  ,preErrorCheck-`String'errorCheck*-}->`ZabrInterpolatedSmileSection'peekZabrInterpolatedSmileSection*#}++-- |upcast to the generic 'SmileSection' interface (e.g. for 'smileSectionVolatility'\/'smileSectionVariance').+-- A fresh-@shared_ptr@ upcast, always safe -- not the reverse (downcast) direction.+{#fun qlZabrInterpolatedSmileSectionAsSmileSection as zabrInterpolatedAsSmileSection{withZabrInterpolatedSmileSection*`ZabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`SmileSection'peekSmileSection*#}++-- |calibrated @alpha@ (post-fit; can differ from the initial guess passed to+-- 'zabrInterpolatedSmileSection' unless @isAlphaFixed@ was set).+{#fun qlZabrInterpolatedSmileSectionAlpha as zabrInterpolatedAlpha{withZabrInterpolatedSmileSection*`ZabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |calibrated @beta@, see 'zabrInterpolatedAlpha'+{#fun qlZabrInterpolatedSmileSectionBeta as zabrInterpolatedBeta{withZabrInterpolatedSmileSection*`ZabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |calibrated @nu@, see 'zabrInterpolatedAlpha'+{#fun qlZabrInterpolatedSmileSectionNu as zabrInterpolatedNu{withZabrInterpolatedSmileSection*`ZabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |calibrated @rho@, see 'zabrInterpolatedAlpha'+{#fun qlZabrInterpolatedSmileSectionRho as zabrInterpolatedRho{withZabrInterpolatedSmileSection*`ZabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |calibrated @gamma@, see 'zabrInterpolatedAlpha'+{#fun qlZabrInterpolatedSmileSectionGamma as zabrInterpolatedGamma{withZabrInterpolatedSmileSection*`ZabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |root-mean-square calibration error+{#fun qlZabrInterpolatedSmileSectionRmsError as zabrInterpolatedRmsError{withZabrInterpolatedSmileSection*`ZabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |maximum calibration error+{#fun qlZabrInterpolatedSmileSectionMaxError as zabrInterpolatedMaxError{withZabrInterpolatedSmileSection*`ZabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |the reason the calibration's optimizer stopped+{#fun qlZabrInterpolatedSmileSectionEndCriteria as zabrInterpolatedEndCriteria{withZabrInterpolatedSmileSection*`ZabrInterpolatedSmileSection',preErrorCheck-`String'errorCheck*-}->`EndCriteriaType'#}+ -- |implements the conversion between swap dates and swap (time) length {#fun qlSwaptionVolatilityStructureSwapLength1 as swapLengthBetweenDates{withSwaptionVolatilityStructure*`GenSwaptionVolatilityStructure sv'   ,withDay*`Day' -- ^start@@ -1423,9 +1551,15 @@ {#fun qlVolatilityTermStructureMinStrike as minStrikeGenericRaw{withVolatilityTermStructure*`GenVolatilityTermStructure v',preErrorCheck-`String'errorCheck*-}->`Double'#} {#fun qlVolatilityTermStructureMaxStrike as maxStrikeGenericRaw{withVolatilityTermStructure*`GenVolatilityTermStructure v',preErrorCheck-`String'errorCheck*-}->`Double'#} +-- |Converts an option tenor to its option date, for any 'GenVolatilityTermStructure' (however it+-- was constructed).+{#fun qlVolatilityTermStructureOptionDateFromTenor as optionDateFromTenor{withVolatilityTermStructure*`GenVolatilityTermStructure v'+  ,fromEnumQuantity`(Word,TimeUnit)'& -- ^optionTenor+  ,preErrorCheck-`String'errorCheck*-}->`Day'toDay#}+ -- |The minimum and maximum strike for which a structure can return vols. 'CallableBondVolatilityStructure'--- declares its own unrelated pair (it inherits 'TermStructure' directly, not 'VolatilityTermStructure'),--- so the two families need separate instances.+-- and 'SmileSection' each declare their own unrelated pair (neither inherits 'VolatilityTermStructure'),+-- so all three families need separate instances. class HasStrikeBounds structure where   minStrike :: structure -> IO Double   maxStrike :: structure -> IO Double@@ -1434,6 +1568,10 @@   minStrike = minStrikeCallableBondRaw   maxStrike = maxStrikeCallableBondRaw +instance HasStrikeBounds SmileSection where+  minStrike = minStrikeSmileSectionRaw+  maxStrike = maxStrikeSmileSectionRaw+ instance HasStrikeBounds (GenVolatilityTermStructure v) where   minStrike = minStrikeGenericRaw   maxStrike = maxStrikeGenericRaw@@ -1476,16 +1614,16 @@   ,preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |The option-tenor grid's dates, calendar-advanced from the curve's reference date.-{#fun qlCapFloorTermVolCurveOptionDates as capFloorTermVolCurveOptionDates{withCapFloorTermVolCurve*`CapFloorTermVolCurve',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlCapFloorTermVolCurveOptionDates as capFloorTermVolCurveOptionDates{withCapFloorTermVolCurve*`CapFloorTermVolCurve',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |As 'capFloorTermVolCurveOptionDates', in year fractions from the curve's reference date.-{#fun qlCapFloorTermVolCurveOptionTimes as capFloorTermVolCurveOptionTimes{withCapFloorTermVolCurve*`CapFloorTermVolCurve',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlCapFloorTermVolCurveOptionTimes as capFloorTermVolCurveOptionTimes{withCapFloorTermVolCurve*`CapFloorTermVolCurve',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The option-tenor grid's dates, calendar-advanced from the surface's reference date.-{#fun qlCapFloorTermVolSurfaceOptionDates as capFloorTermVolSurfaceOptionDates{withCapFloorTermVolSurface*`CapFloorTermVolSurface',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlCapFloorTermVolSurfaceOptionDates as capFloorTermVolSurfaceOptionDates{withCapFloorTermVolSurface*`CapFloorTermVolSurface',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |As 'capFloorTermVolSurfaceOptionDates', in year fractions from the surface's reference date.-{#fun qlCapFloorTermVolSurfaceOptionTimes as capFloorTermVolSurfaceOptionTimes{withCapFloorTermVolSurface*`CapFloorTermVolSurface',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlCapFloorTermVolSurfaceOptionTimes as capFloorTermVolSurfaceOptionTimes{withCapFloorTermVolSurface*`CapFloorTermVolSurface',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Spot at-the-money volatility for any supported option-maturity representation. atmVol :: GenBlackAtmVolCurve b -> OptionMaturity -> Bool -> IO Double@@ -1583,25 +1721,25 @@ {#fun qlAbcdAtmVolCurveKAtTime as abcdK{withAbcdAtmVolCurve*`AbcdAtmVolCurve',`Double',preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |@k@ adjustment factors for every option tenor used in interpolation-{#fun qlAbcdAtmVolCurveK as abcdKs{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlAbcdAtmVolCurveK as abcdKs{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  abcdAtmVolCurveOptionTenors :: AbcdAtmVolCurve -> IO [(Word, TimeUnit)] abcdAtmVolCurveOptionTenors o = do   (ns, us) <- qlAbcdAtmVolCurveOptionTenors o   pure $ zip (map fromIntegral ns) (map toEnum us)-{#fun qlAbcdAtmVolCurveOptionTenors{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preArray-`[Int]'&peekIntArray*,preArray-`[Int]'&peekIntArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlAbcdAtmVolCurveOptionTenors{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preIntArray-`[Int]'&peekIntArray*,preIntArray-`[Int]'&peekIntArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |As 'abcdAtmVolCurveOptionTenors', but only the tenors actually used in the ABCD fit. abcdOptionTenorsInInterpolation :: AbcdAtmVolCurve -> IO [(Word, TimeUnit)] abcdOptionTenorsInInterpolation o = do   (ns, us) <- qlAbcdAtmVolCurveOptionTenorsInInterpolation o   pure $ zip (map fromIntegral ns) (map toEnum us)-{#fun qlAbcdAtmVolCurveOptionTenorsInInterpolation{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preArray-`[Int]'&peekIntArray*,preArray-`[Int]'&peekIntArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlAbcdAtmVolCurveOptionTenorsInInterpolation{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preIntArray-`[Int]'&peekIntArray*,preIntArray-`[Int]'&peekIntArray*,preErrorCheck-`String'errorCheck*-}->`()'#} -{#fun qlAbcdAtmVolCurveOptionDates as abcdOptionDates{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlAbcdAtmVolCurveOptionDates as abcdOptionDates{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |As 'abcdOptionDates', in year fractions from the curve's reference date.-{#fun qlAbcdAtmVolCurveOptionTimes as abcdOptionTimes{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlAbcdAtmVolCurveOptionTimes as abcdOptionTimes{withAbcdAtmVolCurve*`AbcdAtmVolCurve',preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |SABR-smile 'BlackVolSurface' built from an interest-rate index, an ATM 'BlackAtmVolCurve', and -- per-tenor ATM-rate spreads\/vol-spread matrix. @volSpreads@'s rows follow @optionTenors@ and@@ -1625,11 +1763,11 @@  {#fun qlSabrVolSurfaceVolatilitySpreadsForPeriod as sabrVolSurfaceVolatilitySpreadsForTenorRaw{withSabrVolSurface*`SabrVolSurface'   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^optionTenor-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  {#fun qlSabrVolSurfaceVolatilitySpreadsForDate as sabrVolSurfaceVolatilitySpreadsAtDateRaw{withSabrVolSurface*`SabrVolSurface'   ,withDay*`Day' -- ^optionDate-  ,preArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preDoubleArray-`[Double]'&peekDoubleArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Volatility-spread row at an option date or tenor. sabrVolatilitySpreads :: SabrVolSurface -> SabrVolatilitySpreadsMaturity -> IO [Double]@@ -1653,6 +1791,18 @@ -- (which may change over time, since it's a live t'GenQuote' rather than a fixed number) {#fun qlSpreadedSwaptionVolatility as spreadedSwaptionVolatility{withSwaptionVolatilityStructure*`GenSwaptionVolatilityStructure sv',withQuote*`GenQuote q',preErrorCheck-`String'errorCheck*-}->`SwaptionVolatilityStructure'peekSwaptionVolatilityStructure*#} +-- |Swaption volatilities implied from a Gaussian one-factor model: each smile section prices+-- swaptions with upstream's default @Gaussian1dSwaptionEngine@ and inverts Black's formula.+-- The reference date is the model curve's; every query reprices, and the max date is unbounded.+-- On QuantLib <= 1.43 the shim prices with a unit nominal to work around upstream's+-- uninitialized one; newer versions use @Gaussian1dSwaptionVolatility@ directly.+{#fun qlGaussian1dSwaptionVolatility as gaussian1dSwaptionVolatility{withCalendar*`Calendar' -- ^cal+  ,fromEnumC`BusinessDayConvention' -- ^bdc+  ,withSwapIndex*`GenSwapIndex sidx' -- ^indexBase+  ,withStandalone*`Gaussian1dModel' -- ^model+  ,withDayCounter*`DayCounter' -- ^dc+  ,preErrorCheck-`String'errorCheck*-}->`SwaptionVolatilityStructure'peekSwaptionVolatilityStructure*#}+ -- |as 'spreadedSwaptionVolatility', for 'OptionletVolatilityStructure' rather than -- 'SwaptionVolatilityStructure' {#fun qlSpreadedOptionletVolatility as spreadedOptionletVol{withOptionletVolatilityStructure*`GenOptionletVolatilityStructure ov',withQuote*`GenQuote q',preErrorCheck-`String'errorCheck*-}->`OptionletVolatilityStructure'peekOptionletVolatilityStructure*#}@@ -1722,6 +1872,26 @@ blackVarianceSurface d c ds s (RealMatrix mr mc md) = qlBlackVarianceSurface d c ds s mr mc md {#fun qlBlackVarianceSurface{withDay*`Day',withCalendar*`Calendar',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&,fromIntegral`Word',fromIntegral`Word',withRealVectorRaw*`RealVector',withDayCounter*`DayCounter',`BlackVarianceSurfaceExtrapolation',`BlackVarianceSurfaceExtrapolation',fromEnumC`Interpolation2D',preErrorCheck-`String'errorCheck*-}->`BlackVolTermStructure'peekBlackVolTermStructure*#} +-- |Like 'blackVarianceCurve', but volatilities are live quotes -- the curve updates when+-- any of them changes (e.g. via 'QuantLib.Quote.setValue'). Interpolation is fixed to Linear upstream.+extendedBlackVarianceCurve :: Day -> NonEmpty (Day, GenQuote q) -> DayCounter -> Bool -- ^forceMonotoneVariance+  -> IO BlackVolTermStructure+extendedBlackVarianceCurve d dq dc f = qlExtendedBlackVarianceCurve d dd q dc f where (dd, q) = unzip (toList dq)+{#fun qlExtendedBlackVarianceCurve{withDay*`Day',withDayArray*`[Day]'&,withQuoteArray*`[GenQuote q]'&,withDayCounter*`DayCounter',`Bool',preErrorCheck-`String'errorCheck*-}->`BlackVolTermStructure'peekBlackVolTermStructure*#}++-- |Like 'blackVarianceSurface', but volatilities are live quotes (rows strikes, columns dates).+-- On QuantLib <= 1.43 this throws 'CPlusPlusException' instead of invoking upstream code that+-- accesses the grid out of bounds (fixed in QuantLib 1.44).+extendedBlackVarianceSurface :: Day -> Calendar -> [Day] -- ^dates+  -> [Double] -- ^strikes+  -> Matrix (GenQuote q) -- ^volatilities+  -> DayCounter+  -> ExtendedBlackVarianceSurfaceExtrapolation -- ^lowerExtrapolation+  -> ExtendedBlackVarianceSurfaceExtrapolation -- ^upperExtrapolation+  -> IO BlackVolTermStructure+extendedBlackVarianceSurface d c ds s (Matrix mr mc md) = qlExtendedBlackVarianceSurface d c ds s mr mc md+{#fun qlExtendedBlackVarianceSurface{withDay*`Day',withCalendar*`Calendar',withDayArray*`[Day]'&,withDoubleArray*`[Double]'&,fromIntegral`Word',fromIntegral`Word',withQuoteArrayRaw*`[GenQuote q]',withDayCounter*`DayCounter',`ExtendedBlackVarianceSurfaceExtrapolation',`ExtendedBlackVarianceSurfaceExtrapolation',preErrorCheck-`String'errorCheck*-}->`BlackVolTermStructure'peekBlackVolTermStructure*#}+ -- |Builds a Black volatility surface from a rectangular vol grid via -- 'PiecewiseBlackVarianceSurface::makeFromGrid': one interpolated smile section per date -- column, linear in total variance between columns -- a fixed interpolation scheme, unlike@@ -1916,11 +2086,12 @@   -> Double -- ^cutoffStrike   -> Maybe EndCriteria -- ^endCriteria   -> Maybe OptimizationMethod -- ^optMethod+  -> Bool -- ^singlePassCalibration (1.44; QuantLib 1.43 requires 'False')   -> IO SabrSwaptionVolatilityCube sabrSwaptionVolatilityCube atm ot st ss (Matrix vr vc vd) sidx1 sidx2 vw (Matrix pr pc pd)-  iaf ibf inf irf iac met eat ume mg bf cs ec om =+  iaf ibf inf irf iac met eat ume mg bf cs ec om singlePass =   qlSabrSwaptionVolatilityCube atm opl opu spl spu ss vr vc vd sidx1 sidx2 vw pr pc pd-    iaf ibf inf irf iac ec om met eat ume mg bf cs+    iaf ibf inf irf iac ec om met eat ume mg bf cs singlePass   where (opl, opu) = unzip ot; (spl, spu) = unzip st {#fun qlSabrSwaptionVolatilityCube{withSwaptionVolatilityStructure*`GenSwaptionVolatilityStructure sv'   ,withIntArray*`[Word]'&,withEnumArray*`[TimeUnit]'&@@ -1936,6 +2107,7 @@   ,withMaybeOptimizationMethod*`Maybe OptimizationMethod'   ,fromMaybeDouble`Maybe Double',fromMaybeDouble`Maybe Double',`Bool',fromIntegral`Word'   ,`Bool',`Double'+  ,`Bool' -- ^singlePassCalibration (1.44; QuantLib 1.43 requires 'False')   ,preErrorCheck-`String'errorCheck*-}->`SabrSwaptionVolatilityCube'peekSabrSwaptionVolatilityCube*#}  -- |An arbitrage-free SABR (Doust) swaption volatility cube: the same@@ -1968,11 +2140,12 @@   -> Double -- ^cutoffStrike   -> Maybe EndCriteria -- ^endCriteria   -> Maybe OptimizationMethod -- ^optMethod+  -> Bool -- ^singlePassCalibration (1.44; QuantLib 1.43 requires 'False')   -> IO NoArbSabrSwaptionVolatilityCube noArbSabrSwaptionVolatilityCube atm ot st ss (Matrix vr vc vd) sidx1 sidx2 vw (Matrix pr pc pd)-  iaf ibf inf irf iac met eat ume mg bf cs ec om =+  iaf ibf inf irf iac met eat ume mg bf cs ec om singlePass =   qlNoArbSabrSwaptionVolatilityCube atm opl opu spl spu ss vr vc vd sidx1 sidx2 vw pr pc pd-    iaf ibf inf irf iac ec om met eat ume mg bf cs+    iaf ibf inf irf iac ec om met eat ume mg bf cs singlePass   where (opl, opu) = unzip ot; (spl, spu) = unzip st {#fun qlNoArbSabrSwaptionVolatilityCube{withSwaptionVolatilityStructure*`GenSwaptionVolatilityStructure sv'   ,withIntArray*`[Word]'&,withEnumArray*`[TimeUnit]'&@@ -1988,8 +2161,59 @@   ,withMaybeOptimizationMethod*`Maybe OptimizationMethod'   ,fromMaybeDouble`Maybe Double',fromMaybeDouble`Maybe Double',`Bool',fromIntegral`Word'   ,`Bool',`Double'+  ,`Bool' -- ^singlePassCalibration (1.44; QuantLib 1.43 requires 'False')   ,preErrorCheck-`String'errorCheck*-}->`NoArbSabrSwaptionVolatilityCube'peekNoArbSabrSwaptionVolatilityCube*#} +-- |A ZABR swaption volatility cube: 'sabrSwaptionVolatilityCube' with a fifth model parameter,+-- gamma (1 approximates SABR), using the short-maturity lognormal kernel. Same shapes and lazy+-- calibration; shifted or normal ATM volatilities are rejected when a node is calibrated.+zabrSwaptionVolatilityCube :: GenSwaptionVolatilityStructure sv -- ^atmVolStructure+  -> [(Word, TimeUnit)] -- ^optionTenors+  -> [(Word, TimeUnit)] -- ^swapTenors+  -> [Double] -- ^strikeSpreads+  -> Matrix (GenQuote q1) -- ^volSpreads+  -> GenSwapIndex sidx1 -- ^swapIndexBase+  -> GenSwapIndex sidx2 -- ^shortSwapIndexBase+  -> Bool -- ^vegaWeightedSmileFit+  -> Matrix (GenQuote q2) -- ^parametersGuess (alpha, beta, nu, rho, gamma per node)+  -> Bool -- ^isAlphaFixed+  -> Bool -- ^isBetaFixed+  -> Bool -- ^isNuFixed+  -> Bool -- ^isRhoFixed+  -> Bool -- ^isGammaFixed+  -> Bool -- ^isAtmCalibrated, see 'sabrSwaptionVolatilityCube'+  -> Maybe Double -- ^maxErrorTolerance+  -> Maybe Double -- ^errorAccept+  -> Bool -- ^useMaxError+  -> Word -- ^maxGuesses+  -> Bool -- ^backwardFlat+  -> Double -- ^cutoffStrike+  -> Maybe EndCriteria -- ^endCriteria+  -> Maybe OptimizationMethod -- ^optMethod+  -> Bool -- ^singlePassCalibration (1.44; QuantLib 1.43 requires 'False')+  -> IO ZabrSwaptionVolatilityCube+zabrSwaptionVolatilityCube atm ot st ss (Matrix vr vc vd) sidx1 sidx2 vw (Matrix pr pc pd)+  iaf ibf inf irf igf iac met eat ume mg bf cs ec om singlePass =+  qlZabrSwaptionVolatilityCube atm opl opu spl spu ss vr vc vd sidx1 sidx2 vw pr pc pd+    iaf ibf inf irf igf iac ec om met eat ume mg bf cs singlePass+  where (opl, opu) = unzip ot; (spl, spu) = unzip st+{#fun qlZabrSwaptionVolatilityCube{withSwaptionVolatilityStructure*`GenSwaptionVolatilityStructure sv'+  ,withIntArray*`[Word]'&,withEnumArray*`[TimeUnit]'&+  ,withIntArray*`[Word]'&,withEnumArray*`[TimeUnit]'&+  ,withDoubleArray*`[Double]'&+  ,fromIntegral`Word',fromIntegral`Word',withQuoteArrayRaw*`[GenQuote q1]'+  ,withSwapIndex*`GenSwapIndex sidx1',withSwapIndex*`GenSwapIndex sidx2'+  ,`Bool'+  ,fromIntegral`Word',fromIntegral`Word',withQuoteArrayRaw*`[GenQuote q2]'+  ,`Bool',`Bool',`Bool',`Bool',`Bool'+  ,`Bool'+  ,withMaybeEndCriteria*`Maybe EndCriteria'+  ,withMaybeOptimizationMethod*`Maybe OptimizationMethod'+  ,fromMaybeDouble`Maybe Double',fromMaybeDouble`Maybe Double',`Bool',fromIntegral`Word'+  ,`Bool',`Double'+  ,`Bool' -- ^singlePassCalibration (1.44; QuantLib 1.43 requires 'False')+  ,preErrorCheck-`String'errorCheck*-}->`ZabrSwaptionVolatilityCube'peekZabrSwaptionVolatilityCube*#}+ -- |The non-SABR, linear-interpolation swaption volatility cube: interpolates the given -- @volSpreads@ rather than calibrating a smile model. No 'EndCriteria'\/'OptimizationMethod' -- hazard here -- this class never calibrates anything. See 'sabrSwaptionVolatilityCube' for the@@ -2021,7 +2245,7 @@ interpolatedSwaptionVolatilityCubeVolSpreads sv i = toRealMatrix <$> qlInterpolatedSwaptionVolatilityCubeVolSpreads sv i {#fun qlInterpolatedSwaptionVolatilityCubeVolSpreads{withInterpolatedSwaptionVolatilityCube*`InterpolatedSwaptionVolatilityCube'   ,fromIntegral`Word' -- ^i-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  toRealMatrix :: (Word, Word, RealVector) -> RealMatrix@@ -2031,7 +2255,7 @@ sparseSabrParameters :: SabrSwaptionVolatilityCube -> IO RealMatrix sparseSabrParameters sv = toRealMatrix <$> qlSabrSwaptionVolatilityCubeSparseSabrParameters sv {#fun qlSabrSwaptionVolatilityCubeSparseSabrParameters{withSabrSwaptionVolatilityCube*`SabrSwaptionVolatilityCube'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-node calibrated SABR parameters, meaningfully populated only when the cube was built with@@ -2039,7 +2263,7 @@ denseSabrParameters :: SabrSwaptionVolatilityCube -> IO RealMatrix denseSabrParameters sv = toRealMatrix <$> qlSabrSwaptionVolatilityCubeDenseSabrParameters sv {#fun qlSabrSwaptionVolatilityCubeDenseSabrParameters{withSabrSwaptionVolatilityCube*`SabrSwaptionVolatilityCube'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The raw market vol grid the cube's SABR fit targets: ATM vol (interpolated from@@ -2047,7 +2271,7 @@ marketVolCube :: SabrSwaptionVolatilityCube -> IO RealMatrix marketVolCube sv = toRealMatrix <$> qlSabrSwaptionVolatilityCubeMarketVolCube sv {#fun qlSabrSwaptionVolatilityCubeMarketVolCube{withSabrSwaptionVolatilityCube*`SabrSwaptionVolatilityCube'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Like 'marketVolCube', adjusted so the cube's own ATM row is consistent with @atmVolStructure@;@@ -2055,7 +2279,7 @@ volCubeAtmCalibrated :: SabrSwaptionVolatilityCube -> IO RealMatrix volCubeAtmCalibrated sv = toRealMatrix <$> qlSabrSwaptionVolatilityCubeVolCubeAtmCalibrated sv {#fun qlSabrSwaptionVolatilityCubeVolCubeAtmCalibrated{withSabrSwaptionVolatilityCube*`SabrSwaptionVolatilityCube'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Swaption cubes exposing an ATM-strike query.@@ -2072,6 +2296,11 @@     AtmStrikeDate optionDate -> noArbSabrSwaptionVolatilityCubeAtmStrikeAtDateRaw cube optionDate     AtmStrikeTenor optionTenor -> noArbSabrSwaptionVolatilityCubeAtmStrikeForTenorRaw cube optionTenor +instance HasAtmStrike ZabrSwaptionVolatilityCube where+  atmStrike cube maturity = case maturity of+    AtmStrikeDate optionDate -> zabrSwaptionVolatilityCubeAtmStrikeAtDateRaw cube optionDate+    AtmStrikeTenor optionTenor -> zabrSwaptionVolatilityCubeAtmStrikeForTenorRaw cube optionTenor+ instance HasAtmStrike InterpolatedSwaptionVolatilityCube where   atmStrike cube maturity = case maturity of     AtmStrikeDate optionDate -> interpolatedSwaptionVolatilityCubeAtmStrikeAtDateRaw cube optionDate@@ -2092,7 +2321,7 @@ noArbSabrSparseSabrParameters :: NoArbSabrSwaptionVolatilityCube -> IO RealMatrix noArbSabrSparseSabrParameters sv = toRealMatrix <$> qlNoArbSabrSwaptionVolatilityCubeSparseSabrParameters sv {#fun qlNoArbSabrSwaptionVolatilityCubeSparseSabrParameters{withNoArbSabrSwaptionVolatilityCube*`NoArbSabrSwaptionVolatilityCube'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Per-node calibrated no-arb SABR parameters, meaningfully populated only when the cube was@@ -2100,14 +2329,14 @@ noArbSabrDenseSabrParameters :: NoArbSabrSwaptionVolatilityCube -> IO RealMatrix noArbSabrDenseSabrParameters sv = toRealMatrix <$> qlNoArbSabrSwaptionVolatilityCubeDenseSabrParameters sv {#fun qlNoArbSabrSwaptionVolatilityCubeDenseSabrParameters{withNoArbSabrSwaptionVolatilityCube*`NoArbSabrSwaptionVolatilityCube'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |The raw market vol grid the cube's no-arb SABR fit targets, see 'marketVolCube'. noArbSabrMarketVolCube :: NoArbSabrSwaptionVolatilityCube -> IO RealMatrix noArbSabrMarketVolCube sv = toRealMatrix <$> qlNoArbSabrSwaptionVolatilityCubeMarketVolCube sv {#fun qlNoArbSabrSwaptionVolatilityCubeMarketVolCube{withNoArbSabrSwaptionVolatilityCube*`NoArbSabrSwaptionVolatilityCube'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |Like 'noArbSabrMarketVolCube', adjusted so the cube's own ATM row is consistent with@@ -2116,7 +2345,7 @@ noArbSabrVolCubeAtmCalibrated :: NoArbSabrSwaptionVolatilityCube -> IO RealMatrix noArbSabrVolCubeAtmCalibrated sv = toRealMatrix <$> qlNoArbSabrSwaptionVolatilityCubeVolCubeAtmCalibrated sv {#fun qlNoArbSabrSwaptionVolatilityCubeVolCubeAtmCalibrated{withNoArbSabrSwaptionVolatilityCube*`NoArbSabrSwaptionVolatilityCube'-  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preArray-`RealVector'&peekRealVector*+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*   ,preErrorCheck-`String'errorCheck*-}->`()'#}  {#fun qlNoArbSabrSwaptionVolatilityCubeAtmStrike1 as noArbSabrSwaptionVolatilityCubeAtmStrikeAtDateRaw{withNoArbSabrSwaptionVolatilityCube*`NoArbSabrSwaptionVolatilityCube'@@ -2125,6 +2354,47 @@   ,preErrorCheck-`String'errorCheck*-}->`Double'#}  {#fun qlNoArbSabrSwaptionVolatilityCubeAtmStrike as noArbSabrSwaptionVolatilityCubeAtmStrikeForTenorRaw{withNoArbSabrSwaptionVolatilityCube*`NoArbSabrSwaptionVolatilityCube'+  ,fromEnumQuantity`(Word,TimeUnit)'& -- ^optionTenor+  ,fromEnumQuantity`(Word,TimeUnit)'& -- ^swapTenor+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++-- |Per-node calibrated ZABR parameters (alpha, beta, nu, rho, gamma columns) before ATM+-- recalibration, see 'sparseSabrParameters'.+zabrSparseParameters :: ZabrSwaptionVolatilityCube -> IO RealMatrix+zabrSparseParameters sv = toRealMatrix <$> qlZabrSwaptionVolatilityCubeSparseSabrParameters sv+{#fun qlZabrSwaptionVolatilityCubeSparseSabrParameters{withZabrSwaptionVolatilityCube*`ZabrSwaptionVolatilityCube'+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Per-node calibrated ZABR parameters, meaningfully populated only when the cube was built with+-- @isAtmCalibrated = True@, see 'denseSabrParameters'.+zabrDenseParameters :: ZabrSwaptionVolatilityCube -> IO RealMatrix+zabrDenseParameters sv = toRealMatrix <$> qlZabrSwaptionVolatilityCubeDenseSabrParameters sv+{#fun qlZabrSwaptionVolatilityCubeDenseSabrParameters{withZabrSwaptionVolatilityCube*`ZabrSwaptionVolatilityCube'+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |The raw market vol grid the cube's ZABR fit targets, see 'marketVolCube'.+zabrMarketVolCube :: ZabrSwaptionVolatilityCube -> IO RealMatrix+zabrMarketVolCube sv = toRealMatrix <$> qlZabrSwaptionVolatilityCubeMarketVolCube sv+{#fun qlZabrSwaptionVolatilityCubeMarketVolCube{withZabrSwaptionVolatilityCube*`ZabrSwaptionVolatilityCube'+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |Like 'zabrMarketVolCube', adjusted so the ATM row is consistent with @atmVolStructure@;+-- meaningfully populated only when the cube was built with @isAtmCalibrated = True@.+zabrVolCubeAtmCalibrated :: ZabrSwaptionVolatilityCube -> IO RealMatrix+zabrVolCubeAtmCalibrated sv = toRealMatrix <$> qlZabrSwaptionVolatilityCubeVolCubeAtmCalibrated sv+{#fun qlZabrSwaptionVolatilityCubeVolCubeAtmCalibrated{withZabrSwaptionVolatilityCube*`ZabrSwaptionVolatilityCube'+  ,prePtr-`Word'peekWord*,prePtr-`Word'peekWord*,preDoubleArray-`RealVector'&peekRealVector*+  ,preErrorCheck-`String'errorCheck*-}->`()'#}++{#fun qlZabrSwaptionVolatilityCubeAtmStrike1 as zabrSwaptionVolatilityCubeAtmStrikeAtDateRaw{withZabrSwaptionVolatilityCube*`ZabrSwaptionVolatilityCube'+  ,withDay*`Day' -- ^optionDate+  ,fromEnumQuantity`(Word,TimeUnit)'& -- ^swapTenor+  ,preErrorCheck-`String'errorCheck*-}->`Double'#}++{#fun qlZabrSwaptionVolatilityCubeAtmStrike as zabrSwaptionVolatilityCubeAtmStrikeForTenorRaw{withZabrSwaptionVolatilityCube*`ZabrSwaptionVolatilityCube'   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^optionTenor   ,fromEnumQuantity`(Word,TimeUnit)'& -- ^swapTenor   ,preErrorCheck-`String'errorCheck*-}->`Double'#}
QuantLib/TermStructure/Yield.chs view
@@ -26,14 +26,23 @@   , BootstrapTrait(..)   , PillarChoice(..)   , FuturesType(..)+  , DepositTerms(..)   , FraTerms(..)+  , SwapRateTerms(..)+  , OisTerms(..)+  , FxSwapTerms(..)+  , FundingTerms(..)   , FuturesTerms(..)   , OISRateHelperOpts(..)   , OvernightObservation(..)   , IterativeBootstrapOpts(..)+  , BootstrapInitialGuess   , Bootstrap(..)   , LocalBootstrapTrait(..)+  , SpreadBootstrap(..) +  , StubIndexSelection(..)+     -- * Constructors     -- ** Hierarchy and handles   , asYieldTermStructure@@ -45,23 +54,21 @@   , forwardSpreadedTermStructure   , zeroSpreadedTermStructure   , withCompositeZeroYieldStructure+  , impliedTermStructureMoving   , impliedTermStructure   , piecewiseZeroSpreadedTermStructure+  , piecewiseForwardSpreadedTermStructure   , quantoTermStructure   , ultimateForwardTermStructure     -- ** Rate helpers-  , depositRateHelperFromIndex   , depositRateHelper   , fixedRateBondHelper-  , swapRateHelperFromConventions   , fraRateHelper   , bondHelper   , oisRateHelper-  , oisRateHelperBetweenDates   , defaultOisRateHelperOpts   , defaultOvernightObservation   , oisRateHelperWithOptions-  , oisRateHelperBetweenDatesWithOptions   , swapRateHelper   , bmaSwapRateHelper   , multipleResetsSwapRateHelper@@ -70,8 +77,10 @@   , sofrFutureRateHelper     -- ** Bootstrapped and interpolated curves   , piecewiseYieldCurve+  , piecewiseSpreadYieldCurve   , defaultIterativeBootstrapOpts   , interpolatedZeroCurve+  , interpolatedSimpleZeroCurve   , interpolatedForwardCurve   , interpolatedDiscountCurve   , interpolatedSpreadDiscountCurve@@ -79,12 +88,13 @@   , multiCurve     -- ** Basis and cross-currency helpers   , iborIborBasisSwapRateHelper+  , overnightOvernightBasisSwapRateHelper+  , overnightIndexedFundingRateHelper   , overnightIborBasisSwapRateHelper   , constNotionalCrossCurrencyBasisSwapRateHelper   , mtmCrossCurrencyBasisSwapRateHelper   , constNotionalCrossCurrencySwapRateHelper   , fxSwapRateHelper-  , fxSwapRateHelperBetweenDates      -- * Mutators   , linkTo@@ -93,27 +103,41 @@      -- * Inspectors   , HasHelperUnderlying(..)+  , rateHelperFixingDependencies   , forwardRate   , forwardRateBetweenTimes   , zeroRate   , discount   , impliedQuote+  , impliedQuoteOn   , futuresRateHelperConvexityAdjustment   , overnightIndexFutureRateHelperConvexityAdjustment   , minimumCostValue   , numberOfIterations+  , fittingMethodSize+  , fittingMethodErrorCode+  , fittingMethodSolution+  , fittingMethodDiscount   ) where import QuantLib.Internal hiding(maxDate) import QuantLib.Internal.Common import QuantLib.Internal.Syntax(deriveOptionsRecord) import Language.Haskell.TH(mkName) import Language.Haskell.TH.Lib(varT)+import QuantLib.Math(EndCriteriaType(..)) import QuantLib.Quote hiding(linkTo) import QuantLib.TermStructure (Reference(..), TermPoint(..), RatePoint(..), setExtrapolation, HasHelperUnderlying(..)) import Data.Maybe(fromMaybe) import Data.List.NonEmpty(NonEmpty, toList)-import Foreign.Ptr(FunPtr, Ptr)-import Foreign.C.Types(CUInt)+import Foreign.Ptr(Ptr, nullPtr, castPtr)+import Foreign.Marshal.Array(copyArray)+import qualified QuantLib.Internal.Callback as Callback+import qualified Data.Vector.Storable as V+import Control.Exception(throwIO)+import Control.Monad(when)+import Foreign.Marshal.Alloc(alloca)+import Foreign.Storable(peek)+import Foreign.C.Types(CInt, CUInt) import qualified QuantLib.Instrument.Bond as Bond (BondPriceType) {#import QuantLib.InterestRate#}(Compounding) {#import QuantLib.CashFlow#}(RateAveragingType(..))@@ -127,21 +151,13 @@ #include "qlEnumObjects.h"  #include "ql.h"+{#pointer *QlStubIndexSelection nocode#}  -- These local pointer declarations break import cycles while allowing c2hs to attach finalizers. {#pointer *Calendar foreign -> CCalendar nocode#}-{#pointer *QlIborIndex as IborIndex foreign -> CIborIndex' nocode#}-{#pointer *QlOvernightIndex as OvernightIndex foreign -> COvernightIndex' nocode#} {#pointer *QlBMAIndex as BMAIndex foreign -> CBMAIndex' nocode#}-{#pointer *QlSwapIndex as SwapIndex foreign -> CSwapIndex' nocode#}-{#pointer *QlBlackVolTermStructure as BlackVolTermStructure foreign -> CBlackVolTermStructure' nocode#} {#pointer *QlBond as Bond foreign -> CBond' nocode#}-{#pointer *QlSwap as Swap foreign -> CSwap' nocode#}-{#pointer *QlQuote as Quote foreign -> CQuote' nocode#}-{#pointer *QlVanillaSwap as VanillaSwap foreign -> CVanillaSwap' nocode#}-{#pointer *QlOvernightIndexedSwap as OvernightIndexedSwap foreign -> COvernightIndexedSwap' nocode#} {#pointer *QlOvernightIndex as OvernightIborIndex foreign -> COvernightIndex' nocode#}-{#pointer *QlTermStructure as TermStructure foreign -> CTermStructure' nocode#} {#pointer *QlYieldTermStructure as YieldTermStructure foreign -> CYieldTermStructure' nocode#} {#pointer *QlFittedBondDiscountCurve as FittedBondDiscountCurve foreign -> CFittedBondDiscountCurve' nocode#} {#pointer *QlRelinkableYieldTermStructure as RelinkableYieldTermStructure foreign -> CRelinkableYieldTermStructure' nocode#}@@ -162,7 +178,7 @@ -- 'Calendar' cannot occur in this pure default value. Keep this splice before every {#fun#}: -- c2hs appends foreign imports to the generated module, and an intervening top-level splice -- would split declarations from the imports their wrappers use.-$(deriveOptionsRecord "OISRateHelperOpts" ["m"]+$(deriveOptionsRecord "OISRateHelperOpts" ["m", "p"]   [ ("oisTelescopicValueDates", [t|Bool|], [|False|])   , ("oisPaymentLag", [t|Int|], [|0|])   , ("oisPaymentConvention", [t|BusinessDayConvention|], [|Following|])@@ -176,10 +192,11 @@   , ("oisFixedPaymentFrequency", [t|Maybe Frequency|], [|Nothing|])   , ("oisFixedCalendar", [t|Maybe Calendar|], [|Nothing|])   , ("oisObservation", [t|OvernightObservation|], [|defaultOvernightObservation|])-  , ("oisPricer", [t|Maybe FloatingRateCouponPricer|], [|Nothing|])+  , ("oisPricer", [t|Maybe (GenFloatingRateCouponPricer $(varT (mkName "p")))|], [|Nothing|])   , ("oisRule", [t|DateGenerationRule|], [|Backward|])   , ("oisOvernightCalendar", [t|Maybe Calendar|], [|Nothing|])   , ("oisConvention", [t|BusinessDayConvention|], [|ModifiedFollowing|])+  , ("oisFixedDayCount", [t|Maybe DayCounter|], [|Nothing|])   ])  -- Upstream defaults accuracy/minValue/maxValue to Null<Real>() rather than to a number, so@@ -188,11 +205,41 @@ nullableDouble :: Maybe Double -> Double nullableDouble = realToFrac . fromMaybeDouble --- |Rate helper for bootstrapping over deposit rates, taking its conventions from an ibor index.-{#fun qlDepositRateHelper1 as depositRateHelperFromIndex{withQuote*`GenQuote q',withIborIndex*`GenIborIndex ibor',preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}+-- |How a deposit's period and fixing conventions are given. 'DepositTenor' and 'DepositFromIndex'+-- are relative to the evaluation date: the deposit starts at spot and its dates move when the+-- evaluation date does. 'DepositFromIndex' takes the tenor and conventions from the ibor index;+-- 'DepositTenor' states them and fixes on an index QuantLib names @\"no-fix\"@.+-- 'DepositOnFixingDate' is the deposit the index fixes on the given date. Its dates never move, and+-- once that date is before the evaluation date its implied quote is the stored fixing, so+-- 'rateHelperFixingDependencies' reports it.+data DepositTerms ibor+  = DepositTenor+      !(Int, TimeUnit) -- ^tenor+      !Word -- ^fixingDays+      !Calendar+      !BusinessDayConvention+      !Bool -- ^endOfMonth+      !DayCounter+  | DepositFromIndex+      !(GenIborIndex ibor)+  | DepositOnFixingDate+      !Day -- ^fixingDate+      !(GenIborIndex ibor)  -- |Rate helper for bootstrapping over deposit rates.-{#fun qlDepositRateHelper as depositRateHelper{withQuote*`GenQuote q' -- ^rate+depositRateHelper :: GenQuote q -> DepositTerms ibor -> IO RateHelper+depositRateHelper rate terms = case terms of+  DepositTenor t fd cal conv eom dc -> depositRateHelperRaw rate t fd cal conv eom dc+  DepositFromIndex idx -> depositRateHelperFromIndexRaw rate idx+  DepositOnFixingDate d idx -> depositRateHelperOnFixingDateRaw rate d idx++-- Raw deposit bindings behind 'depositRateHelper'; one per 'DepositTerms' constructor.+{#fun qlDepositRateHelper1 as depositRateHelperFromIndexRaw{withQuote*`GenQuote q',withIborIndex*`GenIborIndex ibor',preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}++{#fun qlDepositRateHelper2 as depositRateHelperOnFixingDateRaw{withQuote*`GenQuote q',withDay*`Day' -- ^fixingDate+  ,withIborIndex*`GenIborIndex ibor',preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}++{#fun qlDepositRateHelper as depositRateHelperRaw{withQuote*`GenQuote q' -- ^rate   ,fromEnumQuantity`(Int,TimeUnit)'& -- ^tenor   ,fromIntegral`Word' -- ^fixingDays   ,withCalendar*`Calendar' -- ^calendar@@ -215,10 +262,78 @@   ,`Bool' -- ^extrapolate   ,preErrorCheck-`String'errorCheck*-}->`Double'#} --- |Rate helper for bootstrapping over swap rates, built from explicit tenor\/calendar\/--- frequency\/day-count\/index conventions rather than a 'GenSwapIndex' bundling them--- (as 'swapRateHelper' does).-{#fun qlSwapRateHelper1 as swapRateHelperFromConventions{withQuote*`GenQuote q1' -- ^rate+-- |How a swap helper's schedule and legs are given. 'SwapRateFromIndex' takes every convention+-- from a swap index, 'SwapRateTenor' states them for a swap of the given tenor starting at spot+-- plus @fwdStart@, and both are relative to the evaluation date: the swap's dates move when it+-- does. 'SwapRateBetweenDates' is the swap between two fixed dates; once a coupon's fixing date is+-- before the evaluation date that coupon reads the stored fixing, which+-- 'rateHelperFixingDependencies' reports with the rest. @settlementDays@ ('Nothing' takes the+-- index's fixing days) and @floatConvention@ ('Nothing' takes the index's convention) exist only+-- in the forms that state their conventions.+data SwapRateTerms sidx ibor+  = SwapRateFromIndex+      !(GenSwapIndex sidx)+      !(Int, TimeUnit) -- ^fwdStart+  | SwapRateTenor+      !(Int, TimeUnit) -- ^tenor+      !Calendar+      !Frequency -- ^fixedFrequency+      !BusinessDayConvention -- ^fixedConvention+      !DayCounter -- ^fixedDayCount+      !(GenIborIndex ibor)+      !(Int, TimeUnit) -- ^fwdStart+      !(Maybe Word) -- ^settlementDays+      !(Maybe BusinessDayConvention) -- ^floatConvention+  | SwapRateBetweenDates+      !Day -- ^startDate+      !Day -- ^endDate+      !Calendar+      !Frequency -- ^fixedFrequency+      !BusinessDayConvention -- ^fixedConvention+      !DayCounter -- ^fixedDayCount+      !(GenIborIndex ibor)+      !(Maybe BusinessDayConvention) -- ^floatConvention++-- |Rate helper for bootstrapping over swap rates: a fixed-vs-ibor swap whose fair rate is the+-- quote.+swapRateHelper :: GenQuote q1 -- ^rate+  -> SwapRateTerms sidx ibor+  -> Maybe (GenQuote q2) -- ^spread+  -> Maybe (GenYieldTermStructure y) -- ^discountingCurve+  -> PillarChoice -- ^pillar+  -> Maybe Day -- ^customPillarDate+  -> Bool -- ^endOfMonth+  -> Maybe Bool -- ^useIndexedCoupons+  -> Maybe (GenFloatingRateCouponPricer frcp) -- ^couponPricer+  -> IO SwapRateHelper+swapRateHelper rate terms spread disc pillar customPillarDate eom indexed pricer = case terms of+  SwapRateFromIndex idx fwd ->+    swapRateHelperFromIndexRaw rate idx spread fwd disc pillar customPillarDate eom indexed pricer+  SwapRateTenor t cal ff fc fdc ibor fwd sd fl ->+    swapRateHelperRaw rate t cal ff fc fdc ibor spread fwd disc sd pillar customPillarDate eom indexed fl pricer+  SwapRateBetweenDates s e cal ff fc fdc ibor fl ->+    swapRateHelperBetweenDatesRaw rate s e cal ff fc fdc ibor spread disc pillar customPillarDate eom indexed fl pricer++-- Raw swap bindings behind 'swapRateHelper'; one per 'SwapRateTerms' constructor.+{#fun qlSwapRateHelper2 as swapRateHelperBetweenDatesRaw{withQuote*`GenQuote q1' -- ^rate+  ,withDay*`Day' -- ^startDate+  ,withDay*`Day' -- ^endDate+  ,withCalendar*`Calendar' -- ^calendar+  ,`Frequency' -- ^fixedFrequency+  ,fromEnumC`BusinessDayConvention' -- ^fixedConvention+  ,withDayCounter*`DayCounter' -- ^fixedDayCount+  ,withIborIndex*`GenIborIndex ibor' -- ^iborIndex+  ,withMaybeQuote*`Maybe (GenQuote q2)' -- ^spread+  ,withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)' -- ^discountingCurve+  ,`PillarChoice' -- ^pillar+  ,withMaybeDay*`Maybe Day' -- ^customPillarDate+  ,`Bool' -- ^endOfMonth+  ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons+  ,fromMaybeEnum`Maybe BusinessDayConvention' -- ^floatConvention+  ,withMaybeFloatingRateCouponPricer*`Maybe (GenFloatingRateCouponPricer frcp)' -- ^couponPricer+  ,preErrorCheck-`String'errorCheck*-}->`SwapRateHelper'peekSwapRateHelper*#}++{#fun qlSwapRateHelper1 as swapRateHelperRaw{withQuote*`GenQuote q1' -- ^rate   ,fromEnumQuantity`(Int,TimeUnit)'& -- ^tenor   ,withCalendar*`Calendar' -- ^calendar   ,`Frequency' -- ^fixedFrequency@@ -234,7 +349,7 @@   ,`Bool' -- ^endOfMonth   ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons   ,fromMaybeEnum`Maybe BusinessDayConvention' -- ^floatConvention-  ,withMaybeFloatingRateCouponPricer*`Maybe FloatingRateCouponPricer' -- ^couponPricer+  ,withMaybeFloatingRateCouponPricer*`Maybe (GenFloatingRateCouponPricer frcp)' -- ^couponPricer   ,preErrorCheck-`String'errorCheck*-}->`SwapRateHelper'peekSwapRateHelper*#}  -- |Flat interest-rate curve with either a fixed or evaluation-date-relative reference point.@@ -283,8 +398,13 @@   ,preErrorCheck-`String'errorCheck*-}->`Double'#}  -- |How a FRA's period and fixing conventions are given. The @FromIndex@ variants take the--- FRA's length and its calendar\/convention\/day-count from the ibor index; the others state--- them explicitly.+-- FRA's length and its calendar\/convention\/day-count from the ibor index; the months and+-- period variants without an index state them explicitly. 'FraImmOffsets' starts and ends the+-- FRA on the given IMM dates after spot, counting the first as 1, and takes the rest from the+-- index. All of these are relative to the evaluation date. 'FraBetweenDates' is not: it runs from+-- the start date to the end date and fixes where the index fixes for the start date, and, with+-- @useIndexedCoupon@, its implied quote is the stored fixing once that date is before the+-- evaluation date, which 'rateHelperFixingDependencies' reports. data FraTerms ibor   = FraMonths       !Word -- ^monthsToStart@@ -308,6 +428,14 @@   | FraPeriodFromIndex       !(Int, TimeUnit) -- ^periodToStart       !(GenIborIndex ibor)+  | FraImmOffsets+      !Word -- ^immOffsetStart+      !Word -- ^immOffsetEnd+      !(GenIborIndex ibor)+  | FraBetweenDates+      !Day -- ^startDate+      !Day -- ^endDate+      !(GenIborIndex ibor)  -- |Rate helper for bootstrapping over FRA rates. fraRateHelper :: GenQuote q@@ -321,6 +449,8 @@   FraMonthsFromIndex s idx -> fraRateHelperFromIndexRaw rate s idx   FraPeriod p n fd cal conv eom dc -> fraRateHelperFromPeriodRaw rate p n fd cal conv eom dc   FraPeriodFromIndex p idx -> fraIborRateHelperRaw rate p idx+  FraImmOffsets s e idx -> fraImmOffsetsRateHelperRaw rate s e idx+  FraBetweenDates s e idx -> fraBetweenDatesRateHelperRaw rate s e idx  {#fun qlFraRateHelper as fraRateHelperRaw{withQuote*`GenQuote q' -- ^rate   ,fromIntegral`Word' -- ^monthsToStart@@ -350,11 +480,17 @@   ,withIborIndex*`GenIborIndex ibor2' -- ^otherIndex   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^discountHandle   ,`Bool' -- ^bootstrapBaseCurve+  ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons (1.44; QuantLib 1.43 requires 'Nothing')+  ,`DateGenerationRule' -- ^rule (1.44; QuantLib 1.43 requires 'Backward')+  ,fromIntegral`Int' -- ^paymentLag (1.44; QuantLib 1.43 requires 0)+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor3)' -- ^baseStub (1.44; QuantLib 1.43 requires 'Nothing')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor4)' -- ^otherStub (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}  -- |Bootstrapping helper for an overnight-ibor basis swap: pays @baseIndex + basis@, receives -- @otherIndex@. Bootstraps the forecast curve for 'otherIndex'; 'baseIndex' needs an existing--- forecast curve. If 'Nothing', the overnight index's own curve is used as the discount curve.+-- forecast curve on 1.43. On 1.44, @bootstrapBaseCurve@ chooses the projected leg; an empty+-- discount handle uses the bootstrapped curve (1.43 uses the overnight curve). {#fun qlOvernightIborBasisSwapRateHelper as overnightIborBasisSwapRateHelper{withQuote*`GenQuote q' -- ^basis   ,fromEnumQuantity`(Int,TimeUnit)'& -- ^tenor   ,fromIntegral`Word' -- ^settlementDays@@ -364,6 +500,15 @@   ,withOvernightIborIndex*`OvernightIborIndex' -- ^baseIndex   ,withIborIndex*`GenIborIndex ibor' -- ^otherIndex   ,withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)' -- ^discountHandle+  ,`Bool' -- ^bootstrapBaseCurve (1.44; QuantLib 1.43 requires 'False')+  ,fromIntegral`Int' -- ^paymentLag (1.44; QuantLib 1.43 requires 0)+  ,fromMaybeEnum`Maybe Frequency' -- ^overnightPaymentFrequency (1.44; QuantLib 1.43 requires 'Nothing')+  ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons (1.44; QuantLib 1.43 requires 'Nothing')+  ,`DateGenerationRule' -- ^rule (1.44; QuantLib 1.43 requires 'Backward')+  ,fromEnumC`RateAveragingType' -- ^averagingMethod (1.44; QuantLib 1.43 requires 'AveragingCompound')+  ,`Bool' -- ^telescopicValueDates (1.44; QuantLib 1.43 requires 'False')+  ,`Bool' -- ^basisOnIborLeg (1.44; QuantLib 1.43 requires 'False')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor2)' -- ^iborStub (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}  -- |Bootstrapping helper for a constant-notional cross-currency basis swap: the collateral is@@ -384,6 +529,10 @@   ,fromMaybeEnum`Maybe Frequency' -- ^paymentFrequency   ,fromIntegral`Int' -- ^paymentLag   ,fromMaybeEnum`Maybe Frequency' -- ^quoteCurrencyPaymentFrequency+  ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons (1.44; QuantLib 1.43 requires 'Nothing')+  ,`Bool' -- ^paymentLagOnNotionalExchanges (1.44; QuantLib 1.43 requires 'False')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor3)' -- ^baseStub (1.44; QuantLib 1.43 requires 'Nothing')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor4)' -- ^quoteStub (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}  -- |Bootstrapping helper for a marked-to-market cross-currency basis swap: like@@ -404,6 +553,11 @@   ,fromMaybeEnum`Maybe Frequency' -- ^paymentFrequency   ,fromIntegral`Int' -- ^paymentLag   ,fromMaybeEnum`Maybe Frequency' -- ^quoteCurrencyPaymentFrequency+  ,fromIntegral`Word' -- ^fxResetFixingDays (1.44; QuantLib 1.43 requires 0)+  ,withMaybeCalendar*`Maybe Calendar' -- ^fxResetFixingCalendar (1.44; QuantLib 1.43 requires 'Nothing')+  ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons (1.44; QuantLib 1.43 requires 'Nothing')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor3)' -- ^baseStub (1.44; QuantLib 1.43 requires 'Nothing')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor4)' -- ^quoteStub (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}  -- |Bootstrapping helper for a fixed-vs-floating cross-currency par swap: quoted at par, so the@@ -421,12 +575,42 @@   ,withYieldTermStructure*`GenYieldTermStructure y' -- ^collateralCurve   ,`Bool' -- ^collateralOnFixedLeg   ,fromIntegral`Int' -- ^paymentLag+  ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons (1.44; QuantLib 1.43 requires 'Nothing')+  ,fromMaybeEnum`Maybe Frequency' -- ^floatPaymentFrequency (1.44; QuantLib 1.43 requires 'Nothing')+  ,withStubIndexSelection*`Maybe (StubIndexSelection ibor2)' -- ^floatStub (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#} --- |Bootstrapping helper from FX swap points, tenor-relative. 'collateralCurve' discounts the--- collateral currency; the curve being bootstrapped is for the other currency. 'fwdPoint' and--- 'spotFx' must be quoted in the same units (points already scaled to match the spot).-{#fun qlFxSwapRateHelper as fxSwapRateHelper{withQuote*`GenQuote q1' -- ^fwdPoint+-- |How an FX swap helper's dates are given. 'FxSwapTenor' is relative to the evaluation date:+-- the swap starts @fixingDays@ business days after it on @calendar@ and runs for @tenor@, and+-- @tradingCalendar@ (QuantLib's null calendar for none) is joined with @calendar@ for the spot+-- date. 'FxSwapBetweenDates' runs between two fixed dates.+data FxSwapTerms+  = FxSwapTenor+      !(Int, TimeUnit) -- ^tenor+      !Word -- ^fixingDays+      !Calendar+      !BusinessDayConvention+      !Bool -- ^endOfMonth+      !Calendar -- ^tradingCalendar+  | FxSwapBetweenDates+      !Day -- ^startDate+      !Day -- ^endDate++-- |Bootstrapping helper from FX swap points. 'collateralCurve' discounts the collateral+-- currency; the curve being bootstrapped is for the other currency. 'fwdPoint' and 'spotFx' must+-- be quoted in the same units (points already scaled to match the spot).+fxSwapRateHelper :: GenQuote q1 -- ^fwdPoint+  -> GenQuote q2 -- ^spotFx+  -> FxSwapTerms+  -> Bool -- ^isFxBaseCurrencyCollateralCurrency+  -> GenYieldTermStructure y -- ^collateralCurve+  -> IO RateHelper+fxSwapRateHelper fwdPoint spotFx terms isBase collateral = case terms of+  FxSwapTenor t fd cal conv eom trading -> fxSwapRateHelperRaw fwdPoint spotFx t fd cal conv eom isBase collateral trading+  FxSwapBetweenDates s e -> fxSwapRateHelperBetweenDatesRaw fwdPoint spotFx s e isBase collateral++-- Raw FX swap bindings behind 'fxSwapRateHelper'; one per 'FxSwapTerms' constructor.+{#fun qlFxSwapRateHelper as fxSwapRateHelperRaw{withQuote*`GenQuote q1' -- ^fwdPoint   ,withQuote*`GenQuote q2' -- ^spotFx   ,fromEnumQuantity`(Int,TimeUnit)'& -- ^tenor   ,fromIntegral`Word' -- ^fixingDays@@ -438,8 +622,7 @@   ,withCalendar*`Calendar' -- ^tradingCalendar   ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#} --- |Bootstrapping helper from FX swap points, explicit start\/end date.-{#fun qlFxSwapRateHelper2 as fxSwapRateHelperBetweenDates{withQuote*`GenQuote q1' -- ^fwdPoint+{#fun qlFxSwapRateHelper2 as fxSwapRateHelperBetweenDatesRaw{withQuote*`GenQuote q1' -- ^fwdPoint   ,withQuote*`GenQuote q2' -- ^spotFx   ,withDay*`Day' -- ^startDate   ,withDay*`Day' -- ^endDate@@ -449,32 +632,41 @@  -- |/Warning/ Setting a pricing engine to the passed bond from external code will cause the bootstrap to fail or to give wrong results. It is advised to discard the bond after creating the helper, so that the helper has sole ownership of it. -- 'BondPriceType' is marshalled as an 'Int' to avoid a c2hs cross-module enum-import cycle.-bondHelper :: GenQuote q -> Bond -> Bond.BondPriceType -> IO BondHelper+bondHelper :: GenQuote q -> GenBond b -> Bond.BondPriceType -> IO BondHelper bondHelper cleanPrice bond priceType = bondHelper_ cleanPrice bond (fromEnum priceType) -{#fun qlBondHelper as bondHelper_{withQuote*`GenQuote q',withBond*`Bond',`Int' -- ^priceType+{#fun qlBondHelper as bondHelper_{withQuote*`GenQuote q',withBond*`GenBond b',`Int' -- ^priceType   ,preErrorCheck-`String'errorCheck*-}->`BondHelper'peekBondHelper*#}--- The narrow and options-record wrappers share the same full-arity bindings; the narrow forms--- supply QuantLib's defaults.--- forwardStart is explicit rather than an OISRateHelperOpts field because upstream's--- ctor2 has none: only the tenor-relative entry points below can honour it.-oisRateHelper :: Word -> (Int, TimeUnit)-  -> (Int, TimeUnit) -- ^forwardStart-  -> GenQuote q -> OvernightIborIndex-  -> Maybe (GenYieldTermStructure y) -> IO OISRateHelper-oisRateHelper settlementDays tenor forwardStart fixedRate idx discountingCurve = do-  cal <- calendar Null-  oisRateHelper_ settlementDays tenor fixedRate idx discountingCurve-    False 0 Following Annual cal forwardStart Nothing LastRelevantDate Nothing AveragingCompound-    Nothing Nothing cal Nothing 0 False Nothing Backward cal ModifiedFollowing -oisRateHelperBetweenDates :: Day -> Day -> GenQuote q -> OvernightIborIndex+-- |How an OIS helper's dates are given. 'OisTenor' is relative to the evaluation date: the swap+-- starts @settlementDays@ after it plus @forwardStart@ and runs for @tenor@. 'OisBetweenDates'+-- runs between two fixed dates; every overnight fixing it compounds over that is before the+-- evaluation date is read from the store. @forwardStart@ is a field of 'OisTenor' rather than+-- of 'OISRateHelperOpts' because QuantLib's dated constructor has none.+data OisTerms+  = OisTenor+      !Word -- ^settlementDays+      !(Int, TimeUnit) -- ^tenor+      !(Int, TimeUnit) -- ^forwardStart+  | OisBetweenDates+      !Day -- ^startDate+      !Day -- ^endDate++-- |Rate helper for bootstrapping over overnight-indexed swap rates, with QuantLib's defaults for+-- everything 'oisRateHelperWithOptions' can set. Both share the same full-arity bindings.+oisRateHelper :: OisTerms -> GenQuote q -> OvernightIborIndex   -> Maybe (GenYieldTermStructure y) -> IO OISRateHelper-oisRateHelperBetweenDates startDate endDate fixedRate idx discountingCurve = do+oisRateHelper terms fixedRate idx discountingCurve = do   cal <- calendar Null-  oisRateHelper2_ startDate endDate fixedRate idx discountingCurve-    False 0 Following Annual cal Nothing LastRelevantDate Nothing AveragingCompound-    Nothing Nothing cal Nothing 0 False Nothing Backward cal ModifiedFollowing+  case terms of+    OisTenor settlementDays tenor forwardStart ->+      oisRateHelper_ settlementDays tenor fixedRate idx discountingCurve+        False 0 Following Annual cal forwardStart Nothing LastRelevantDate Nothing AveragingCompound+        Nothing Nothing cal Nothing 0 False Nothing Backward cal ModifiedFollowing Nothing+    OisBetweenDates startDate endDate ->+      oisRateHelper2_ startDate endDate fixedRate idx discountingCurve+        False 0 Following Annual cal Nothing LastRelevantDate Nothing AveragingCompound+        Nothing Nothing cal Nothing 0 False Nothing Backward cal ModifiedFollowing Nothing  {#fun qlOISRateHelper as oisRateHelper_{fromIntegral`Word' -- ^settlementDays   ,fromEnumQuantity`(Int,TimeUnit)'& -- ^tenor@@ -497,10 +689,11 @@   ,fromMaybeInt`Maybe Word' -- ^lookbackDays   ,fromIntegral`Word' -- ^lockoutDays   ,`Bool' -- ^applyObservationShift-  ,withMaybeFloatingRateCouponPricer*`Maybe FloatingRateCouponPricer' -- ^pricer+  ,withMaybeFloatingRateCouponPricer*`Maybe (GenFloatingRateCouponPricer frcp)' -- ^pricer   ,`DateGenerationRule' -- ^rule   ,withCalendar*`Calendar' -- ^overnightCalendar   ,fromEnumC`BusinessDayConvention' -- ^convention (q1.k.q1. overnightConvention)+  ,withMaybeDayCounter*`Maybe DayCounter' -- ^fixedDayCount (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`OISRateHelper'peekOISRateHelper*#} {#fun qlOISRateHelper2 as oisRateHelper2_{withDay*`Day' -- ^startDate   ,withDay*`Day' -- ^endDate@@ -522,45 +715,44 @@   ,fromMaybeInt`Maybe Word' -- ^lookbackDays   ,fromIntegral`Word' -- ^lockoutDays   ,`Bool' -- ^applyObservationShift-  ,withMaybeFloatingRateCouponPricer*`Maybe FloatingRateCouponPricer' -- ^pricer+  ,withMaybeFloatingRateCouponPricer*`Maybe (GenFloatingRateCouponPricer frcp)' -- ^pricer   ,`DateGenerationRule' -- ^rule   ,withCalendar*`Calendar' -- ^overnightCalendar   ,fromEnumC`BusinessDayConvention' -- ^convention (q1.k.q1. overnightConvention)+  ,withMaybeDayCounter*`Maybe DayCounter' -- ^fixedDayCount (1.44; QuantLib 1.43 requires 'Nothing')   ,preErrorCheck-`String'errorCheck*-}->`OISRateHelper'peekOISRateHelper*#} -oisRateHelperWithOptions :: Word -> (Int, TimeUnit)-  -> (Int, TimeUnit) -- ^forwardStart-  -> GenQuote q -> OvernightIborIndex-  -> Maybe (GenYieldTermStructure y) -> OISRateHelperOpts m -> IO OISRateHelper-oisRateHelperWithOptions settlementDays tenor forwardStart fixedRate idx discountingCurve opts = do-  cal <- calendar Null-  oisRateHelper_ settlementDays tenor fixedRate idx discountingCurve-    (oisTelescopicValueDates opts) (oisPaymentLag opts) (oisPaymentConvention opts)-    (oisPaymentFrequency opts) (fromMaybe cal (oisPaymentCalendar opts))-    forwardStart (oisOvernightSpread opts) (oisPillar opts) (oisCustomPillarDate opts)-    (oisAveragingMethod opts) (oisEndOfMonth opts) (oisFixedPaymentFrequency opts)-    (fromMaybe cal (oisFixedCalendar opts)) (lookbackDays obs) (lockoutDays obs)-    (applyObservationShift obs) (oisPricer opts) (oisRule opts)-    (fromMaybe cal (oisOvernightCalendar opts)) (oisConvention opts)-  where obs = oisObservation opts--oisRateHelperBetweenDatesWithOptions :: Day -> Day -> GenQuote q -> OvernightIborIndex-  -> Maybe (GenYieldTermStructure y) -> OISRateHelperOpts m -> IO OISRateHelper-oisRateHelperBetweenDatesWithOptions startDate endDate fixedRate idx discountingCurve opts = do+-- |'oisRateHelper' with every trailing QuantLib parameter taken from an options record.+oisRateHelperWithOptions :: OisTerms -> GenQuote q -> OvernightIborIndex+  -> Maybe (GenYieldTermStructure y) -> OISRateHelperOpts m p -> IO OISRateHelper+oisRateHelperWithOptions terms fixedRate idx discountingCurve opts = do   cal <- calendar Null-  oisRateHelper2_ startDate endDate fixedRate idx discountingCurve-    (oisTelescopicValueDates opts) (oisPaymentLag opts) (oisPaymentConvention opts)-    (oisPaymentFrequency opts) (fromMaybe cal (oisPaymentCalendar opts))-    (oisOvernightSpread opts) (oisPillar opts) (oisCustomPillarDate opts)-    (oisAveragingMethod opts) (oisEndOfMonth opts) (oisFixedPaymentFrequency opts)-    (fromMaybe cal (oisFixedCalendar opts)) (lookbackDays obs) (lockoutDays obs)-    (applyObservationShift obs) (oisPricer opts) (oisRule opts)-    (fromMaybe cal (oisOvernightCalendar opts)) (oisConvention opts)-  where obs = oisObservation opts+  let obs = oisObservation opts+      paymentCal = fromMaybe cal (oisPaymentCalendar opts)+      fixedCal = fromMaybe cal (oisFixedCalendar opts)+      overnightCal = fromMaybe cal (oisOvernightCalendar opts)+  case terms of+    OisTenor settlementDays tenor forwardStart ->+      oisRateHelper_ settlementDays tenor fixedRate idx discountingCurve+        (oisTelescopicValueDates opts) (oisPaymentLag opts) (oisPaymentConvention opts)+        (oisPaymentFrequency opts) paymentCal+        forwardStart (oisOvernightSpread opts) (oisPillar opts) (oisCustomPillarDate opts)+        (oisAveragingMethod opts) (oisEndOfMonth opts) (oisFixedPaymentFrequency opts)+        fixedCal (lookbackDays obs) (lockoutDays obs)+        (applyObservationShift obs) (oisPricer opts) (oisRule opts)+        overnightCal (oisConvention opts) (oisFixedDayCount opts)+    OisBetweenDates startDate endDate ->+      oisRateHelper2_ startDate endDate fixedRate idx discountingCurve+        (oisTelescopicValueDates opts) (oisPaymentLag opts) (oisPaymentConvention opts)+        (oisPaymentFrequency opts) paymentCal+        (oisOvernightSpread opts) (oisPillar opts) (oisCustomPillarDate opts)+        (oisAveragingMethod opts) (oisEndOfMonth opts) (oisFixedPaymentFrequency opts)+        fixedCal (lookbackDays obs) (lockoutDays obs)+        (applyObservationShift obs) (oisPricer opts) (oisRule opts)+        overnightCal (oisConvention opts) (oisFixedDayCount opts) --- |Rate helper for bootstrapping over swap rates, built from a 'GenSwapIndex' bundling the--- swap's conventions.-{#fun qlSwapRateHelper as swapRateHelper{withQuote*`GenQuote q1' -- ^rate+-- The 'SwapRateFromIndex' binding behind 'swapRateHelper'.+{#fun qlSwapRateHelper as swapRateHelperFromIndexRaw{withQuote*`GenQuote q1' -- ^rate   ,withSwapIndex*`GenSwapIndex sidx',withMaybeQuote*`Maybe (GenQuote q2)' -- ^spread   ,fromEnumQuantity`(Int,TimeUnit)'& -- ^fwdStart   ,withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)' -- ^discountingCurve@@ -568,7 +760,7 @@   ,withMaybeDay*`Maybe Day' -- ^customPillarDate   ,`Bool' -- ^endOfMonth   ,fromMaybeBool`Maybe Bool' -- ^useIndexedCoupons-  ,withMaybeFloatingRateCouponPricer*`Maybe FloatingRateCouponPricer' -- ^couponPricer+  ,withMaybeFloatingRateCouponPricer*`Maybe (GenFloatingRateCouponPricer frcp)' -- ^couponPricer   ,preErrorCheck-`String'errorCheck*-}->`SwapRateHelper'peekSwapRateHelper*#}  -- |A yield curve offset from 'baseCurve' by a spread added to its instantaneous forward rate,@@ -583,10 +775,8 @@ -- input curves' zero rates expressed with the given compounding and frequency. The result is -- live in both inputs. ----- __The resulting curve is valid only inside the continuation, which must span its whole use.__--- QuantLib stores @f@ and calls it whenever the curve is queried, including from any object that--- stores the curve. Leaving the continuation frees its function pointer; a later query crashes--- the process. @f@ must be total: an exception escaping it crosses C++ unsafely.+-- The curve and its native dependents retain @f@ after the continuation returns.+-- Callback exceptions are rethrown by the enclosing Haskell call. withCompositeZeroYieldStructure :: (Double -> Double -> Double) -- ^f(rate1, rate2)   -> GenYieldTermStructure y1 -- ^curve1   -> GenYieldTermStructure y2 -- ^curve2@@ -597,7 +787,7 @@ withCompositeZeroYieldStructure f c1 c2 comp freq k =   withQuoteBinaryFun f $ \fp -> qlCompositeZeroYieldStructure c1 c2 fp comp freq >>= k {#fun qlCompositeZeroYieldStructure{withYieldTermStructure*`GenYieldTermStructure y1',withYieldTermStructure*`GenYieldTermStructure y2'-  ,id`FunPtr QuoteBinaryFun',`Compounding',`Frequency',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+  ,withCallbackPtr*`Callback',`Compounding',`Frequency',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}  -- |Rate helper for bootstrapping over BMA swap rates. {#fun qlBMASwapRateHelper as bmaSwapRateHelper{withQuote*`GenQuote q' -- ^liborFraction@@ -646,6 +836,22 @@   ,`Bool' -- ^useIndexedCoupon   ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#} +{#fun qlFraRateHelper5 as fraImmOffsetsRateHelperRaw{withQuote*`GenQuote q',fromIntegral`Word' -- ^immOffsetStart+  ,fromIntegral`Word' -- ^immOffsetEnd+  ,withIborIndex*`GenIborIndex ibor'+  ,`PillarChoice' -- ^pillar+  ,withMaybeDay*`Maybe Day' -- ^customPillarDate+  ,`Bool' -- ^useIndexedCoupon+  ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}++{#fun qlFraRateHelper4 as fraBetweenDatesRateHelperRaw{withQuote*`GenQuote q',withDay*`Day' -- ^startDate+  ,withDay*`Day' -- ^endDate+  ,withIborIndex*`GenIborIndex ibor'+  ,`PillarChoice' -- ^pillar+  ,withMaybeDay*`Maybe Day' -- ^customPillarDate+  ,`Bool' -- ^useIndexedCoupon+  ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}+ -- |How an IborIndex futures contract's underlying deposit is given. @FuturesFromIndex@ takes -- the deposit's length and its calendar\/convention\/day-count from the ibor index; the others -- state them explicitly.@@ -711,6 +917,36 @@ -- |The futures-vs-forward convexity adjustment this helper was built with (0 if none was given). {#fun qlOvernightIndexFutureRateHelperConvexityAdjustment as overnightIndexFutureRateHelperConvexityAdjustment{withGenRateHelper*`OvernightIndexFutureRateHelper',preErrorCheck-`String'errorCheck*-}->`Double'#} +-- |Every fixing this rate helper reads from the store, as @(index name, fixing date)@ pairs.  A+-- bootstrapped curve cannot be asked what it was built from -- @PiecewiseYieldCurve@ is a+-- template with no instruments accessor, and an @Observer@ does not expose the observables it+-- registered with -- so a curve's fixing dependencies are the union of its helpers', and this+-- answers for one helper.  It walks the helper's underlying instrument the way+-- 'QuantLib.CashFlow.fixingDependencies' walks a leg, and names each index by+-- 'QuantLib.Index.name', the key QuantLib\'s process-global fixing store uses.+--+-- A swap, OIS, basis-swap, BMA, multiple-resets, cross-currency or bond helper answers from its+-- underlying; an IBOR futures or FX swap helper, and a deposit or FRA relative to the evaluation+-- date, reads no stored fixing: @Just []@. A 'DepositOnFixingDate' deposit, or a 'FraBetweenDates'+-- FRA with an indexed coupon, reads its fixing once the fixing date is before the evaluation date,+-- and reports it from then on; on the fixing date itself it still forecasts.+-- An overnight-index or SOFR futures helper reports each business-day fixing from its period start+-- up to the evaluation date, that date's included because the future reads it when stored. On+-- QuantLib 1.43, which keeps the future private, it instead reports 'Nothing' from two weeks before+-- its period starts. Any helper type the walk has no case for reports 'Nothing' too: "cannot see+-- it", which is not the same as "needs nothing".+--+-- The dates follow the evaluation date, because a relative-date helper re-initialises its+-- schedule when that date moves: call this under the date whose fixings are being asked about.+-- Duplicates are not removed, the same as for a leg.+rateHelperFixingDependencies :: GenRateHelper rh -> IO (Maybe [(String, Day)])+rateHelperFixingDependencies h = do+  (ns, ds, ok) <- qlRateHelperFixingDependencies h+  pure $ if ok /= 0 then Just (zip ns ds) else Nothing+{#fun qlRateHelperFixingDependencies{withRateHelper*`GenRateHelper rh'+  ,preCStringArray-`[String]'&peekCStringArray*,preIntArray-`[Day]'&peekDayArray*,alloca-`CInt'peek*+  ,preErrorCheck-`String'errorCheck*-}->`()'#}+ -- |Rate helper for bootstrapping over CME SOFR futures. Compounds overnight SOFR from the third -- Wednesday of 'referenceMonth'\/'referenceYear' (inclusive) to the third Wednesday of the -- following month or quarter (exclusive), per 'referenceFreq'.@@ -727,6 +963,12 @@ -- reprice exactly. {#fun qlRateHelperImpliedQuote as impliedQuote{withRateHelper*`GenRateHelper rh',preErrorCheck-`String'errorCheck*-}->`Double'#} +-- |The quote that would make the helper reprice exactly on the given curve: a par rate read with+-- the helper's own schedule and conventions on any curve, bootstrapped from it or not. The helper+-- keeps a non-owning reference to the curve until it is next used, so a bootstrap may still take+-- it afterwards.+{#fun qlRateHelperImpliedQuoteOn as impliedQuoteOn{withRateHelper*`GenRateHelper rh',withYieldTermStructure*`GenYieldTermStructure y',preErrorCheck-`String'errorCheck*-}->`Double'#}+ -- |A yield curve identical to 'baseCurve' but reporting a different reference date; observes -- and stays linked to 'baseCurve'. {#fun qlImpliedTermStructure as impliedTermStructure{withYieldTermStructure*`GenYieldTermStructure y',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}@@ -742,6 +984,17 @@ {#fun qlPiecewiseZeroSpreadedTermStructure{withYieldTermStructure*`GenYieldTermStructure y',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Compounding',`Frequency'   ,`Int',`Int',`Int',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#} +-- |A yield curve adding interpolated instantaneous-forward spreads to 'baseCurve', flat outside+-- the spread dates. Linked to the base curve and quotes; its max date is the earlier of the base+-- curve's and the last spread date. @LogLinear@ and @LogCubic@ throw: the spread is integrated.+piecewiseForwardSpreadedTermStructure :: GenYieldTermStructure y+  -> NonEmpty (Day, GenQuote q)  -- ^spreads+  -> Interpolation -> IO YieldTermStructure+piecewiseForwardSpreadedTermStructure ts qd i = uncurryNested (qlPiecewiseForwardSpreadedTermStructure ts qs ds) (qlInterpolation i)+  where (ds, qs) = unzip (toList qd)+{#fun qlPiecewiseForwardSpreadedTermStructure{withYieldTermStructure*`GenYieldTermStructure y',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&+  ,`Int',`Int',`Int',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+ -- |Quanto term structure, modelling the quanto effect in option pricing. Stays linked to all -- four inputs. {#fun qlQuantoTermStructure as quantoTermStructure{withYieldTermStructure*`GenYieldTermStructure y1' -- ^underlyingDividendTS@@ -780,24 +1033,34 @@ {#fun qlPiecewiseYieldCurveFull1{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`BootstrapTrait',`Int',`Int',`Int',`Double',`Double',`Double',fromIntegral`Word',`Double',`Double',`Bool',fromIntegral`Word',fromIntegral`Word',`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}  -- Raw moving-curve bindings used by 'piecewiseYieldCurve'.-{#fun qlPiecewiseYieldCurveGlobalBootstrap1{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrap1{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#} -{#fun qlPiecewiseYieldCurveGlobalBootstrap2{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrap2{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#} -{#fun qlPiecewiseYieldCurveGlobalBootstrap3{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh1]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,withRateHelperArray*`[GenRateHelper rh2]'&,withDayArray*`[Day]'&,`Double',`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrap3{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh1]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,withRateHelperArray*`[GenRateHelper rh2]'&,withDayArray*`[Day]'&,`Double',`Bool',withDoubleArray*`[Double]'&,withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#} -{#fun qlPiecewiseYieldCurveGlobalBootstrap4{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrap4{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#} -{#fun qlPiecewiseYieldCurveGlobalBootstrap5{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrap5{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}  {#fun qlPiecewiseYieldCurveLocalBootstrap1{fromIntegral`Word',withCalendar*`Calendar',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`BootstrapTrait',fromIntegral`Word',`Bool',`Double',`Double',`Double',`Bool',`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}  -- Raw fixed-curve bindings for the non-iterative bootstrap choices.-{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed1{withDay*`Day',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}-{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed2{withDay*`Day',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}-{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed3{withDay*`Day',withRateHelperArray*`[GenRateHelper rh1]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,withRateHelperArray*`[GenRateHelper rh2]'&,withDayArray*`[Day]'&,`Double',`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}-{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed4{withDay*`Day',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}-{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed5{withDay*`Day',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed1{withDay*`Day',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed2{withDay*`Day',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed3{withDay*`Day',withRateHelperArray*`[GenRateHelper rh1]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,withRateHelperArray*`[GenRateHelper rh2]'&,withDayArray*`[Day]'&,`Double',`Bool',withDoubleArray*`[Double]'&,withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed4{withDay*`Day',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+{#fun qlPiecewiseYieldCurveGlobalBootstrapFixed5{withDay*`Day',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Double',withDoubleArray*`[Double]'&,`Bool',withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#} {#fun qlPiecewiseYieldCurveLocalBootstrapFixed{withDay*`Day',withRateHelperArray*`[GenRateHelper rh]'&,withDayCounter*`DayCounter',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`BootstrapTrait',fromIntegral`Word',`Bool',`Double',`Double',`Double',`Bool',`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}  -- |Selects the bootstrapper used by 'piecewiseYieldCurve' and carries exactly the@@ -810,11 +1073,11 @@ -- invalid results with QuantLib's local bootstrapper. data Bootstrap rh2   = Iterative !BootstrapTrait !Interpolation !IterativeBootstrapOpts-  | GlobalDiscountLogLinear !Double ![Double] -- ^accuracy, instrumentWeights-  | GlobalSimpleZeroLinear !Double ![Double] -- ^accuracy, instrumentWeights-  | GlobalSimpleZeroLinearFull !(NonEmpty (GenRateHelper rh2)) ![Day] !Double -- ^additionalHelpers, additionalDates, accuracy-  | GlobalForwardRateLinear !Double ![Double] -- ^accuracy, instrumentWeights-  | GlobalZeroYieldLinear !Double ![Double] -- ^accuracy, instrumentWeights+  | GlobalDiscountLogLinear !Double ![Double] !(Maybe BootstrapInitialGuess) -- ^accuracy, instrumentWeights (empty for equal weights), initialGuess+  | GlobalSimpleZeroLinear !Double ![Double] !(Maybe BootstrapInitialGuess) -- ^accuracy, instrumentWeights (empty for equal weights), initialGuess+  | GlobalSimpleZeroLinearFull !(NonEmpty (GenRateHelper rh2)) ![Day] !Double ![Double] !(Maybe BootstrapInitialGuess) -- ^additionalHelpers, additionalDates, accuracy, instrumentWeights, initialGuess+  | GlobalForwardRateLinear !Double ![Double] !(Maybe BootstrapInitialGuess) -- ^accuracy, instrumentWeights (empty for equal weights), initialGuess+  | GlobalZeroYieldLinear !Double ![Double] !(Maybe BootstrapInitialGuess) -- ^accuracy, instrumentWeights (empty for equal weights), initialGuess   | Local !LocalBootstrapTrait !Word !Bool !Double !Double !Double !Bool     -- ^trait, localisation, forcePositive (LocalBootstrap's), accuracy, quadraticity, monotonicity, convexForcePositive (ConvexMonotone's) @@ -828,6 +1091,12 @@ fromBootstrapTrait LZeroYield = ZeroYield fromBootstrapTrait LSimpleZeroYield = SimpleZeroYield +-- |Bootstrapper for 'piecewiseSpreadYieldCurve', whose nodes are always discount-factor spreads.+-- @LogLinear@ interpolation gives piecewise-constant forward spreads, upstream's canonical choice.+data SpreadBootstrap+  = SpreadIterative !Interpolation !IterativeBootstrapOpts+  | SpreadGlobalLogLinear !Double ![Double] !(Maybe BootstrapInitialGuess) -- ^accuracy, instrumentWeights (empty for equal weights), initialGuess+ -- |Bootstraps a term structure with either a fixed or evaluation-date-relative reference point. -- 'Bootstrap' selects iterative, global, or local construction; the final flag controls -- extrapolation past the curve's maximum date.@@ -845,16 +1114,16 @@   (SettlementDays s cal, Iterative t i b) -> uncurryNested (qlPiecewiseYieldCurveFull1 s cal rs dc qs ds t) (qlInterpolation i)     (nullableDouble (ibAccuracy b)) (nullableDouble (ibMinValue b)) (nullableDouble (ibMaxValue b))     (ibMaxAttempts b) (ibMaxFactor b) (ibMinFactor b) (ibDontThrow b) (ibDontThrowSteps b) (ibMaxEvaluations b) ex-  (ReferenceDate d, GlobalDiscountLogLinear acc w) -> qlPiecewiseYieldCurveGlobalBootstrapFixed1 d rs dc qs ds acc w ex-  (SettlementDays s cal, GlobalDiscountLogLinear acc w) -> qlPiecewiseYieldCurveGlobalBootstrap1 s cal rs dc qs ds acc w ex-  (ReferenceDate d, GlobalSimpleZeroLinear acc w) -> qlPiecewiseYieldCurveGlobalBootstrapFixed2 d rs dc qs ds acc w ex-  (SettlementDays s cal, GlobalSimpleZeroLinear acc w) -> qlPiecewiseYieldCurveGlobalBootstrap2 s cal rs dc qs ds acc w ex-  (ReferenceDate d, GlobalSimpleZeroLinearFull ah ad acc) -> qlPiecewiseYieldCurveGlobalBootstrapFixed3 d rs dc qs ds (toList ah) ad acc ex-  (SettlementDays s cal, GlobalSimpleZeroLinearFull ah ad acc) -> qlPiecewiseYieldCurveGlobalBootstrap3 s cal rs dc qs ds (toList ah) ad acc ex-  (ReferenceDate d, GlobalForwardRateLinear acc w) -> qlPiecewiseYieldCurveGlobalBootstrapFixed4 d rs dc qs ds acc w ex-  (SettlementDays s cal, GlobalForwardRateLinear acc w) -> qlPiecewiseYieldCurveGlobalBootstrap4 s cal rs dc qs ds acc w ex-  (ReferenceDate d, GlobalZeroYieldLinear acc w) -> qlPiecewiseYieldCurveGlobalBootstrapFixed5 d rs dc qs ds acc w ex-  (SettlementDays s cal, GlobalZeroYieldLinear acc w) -> qlPiecewiseYieldCurveGlobalBootstrap5 s cal rs dc qs ds acc w ex+  (ReferenceDate d, GlobalDiscountLogLinear acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrapFixed1 d rs dc qs ds acc w ex guess+  (SettlementDays s cal, GlobalDiscountLogLinear acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrap1 s cal rs dc qs ds acc w ex guess+  (ReferenceDate d, GlobalSimpleZeroLinear acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrapFixed2 d rs dc qs ds acc w ex guess+  (SettlementDays s cal, GlobalSimpleZeroLinear acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrap2 s cal rs dc qs ds acc w ex guess+  (ReferenceDate d, GlobalSimpleZeroLinearFull ah ad acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrapFixed3 d rs dc qs ds (toList ah) ad acc ex w guess+  (SettlementDays s cal, GlobalSimpleZeroLinearFull ah ad acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrap3 s cal rs dc qs ds (toList ah) ad acc ex w guess+  (ReferenceDate d, GlobalForwardRateLinear acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrapFixed4 d rs dc qs ds acc w ex guess+  (SettlementDays s cal, GlobalForwardRateLinear acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrap4 s cal rs dc qs ds acc w ex guess+  (ReferenceDate d, GlobalZeroYieldLinear acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrapFixed5 d rs dc qs ds acc w ex guess+  (SettlementDays s cal, GlobalZeroYieldLinear acc w guess) -> qlPiecewiseYieldCurveGlobalBootstrap5 s cal rs dc qs ds acc w ex guess   (ReferenceDate d, Local t loc fp acc q m cfp) -> qlPiecewiseYieldCurveLocalBootstrapFixed d rs dc qs ds (fromBootstrapTrait t) loc fp acc q m cfp ex   (SettlementDays s cal, Local t loc fp acc q m cfp) -> qlPiecewiseYieldCurveLocalBootstrap1 s cal rs dc qs ds (fromBootstrapTrait t) loc fp acc q m cfp ex   where (ds, qs) = unzip qd@@ -865,6 +1134,25 @@           setExtrapolation curve True           pure curve +-- |Bootstraps multiplicative discount-factor spreads over 'baseCurve' so that each instrument+-- reprices on the combined curve. Reference date, calendar and day counter come from the linked+-- base curve; past the last node the forward spread stays flat.+piecewiseSpreadYieldCurve :: GenYieldTermStructure y -- ^baseCurve+  -> NonEmpty (GenRateHelper rh) -- ^instruments+  -> SpreadBootstrap -- ^bootstrapper choice+  -> Bool -- ^extrapolate past the curve's max date+  -> IO YieldTermStructure+piecewiseSpreadYieldCurve base r bootstrap ex = case bootstrap of+  SpreadIterative i b -> uncurryNested (qlPiecewiseSpreadYieldCurve base rs) (qlInterpolation i)+    (nullableDouble (ibAccuracy b)) (nullableDouble (ibMinValue b)) (nullableDouble (ibMaxValue b))+    (ibMaxAttempts b) (ibMaxFactor b) (ibMinFactor b) (ibDontThrow b) (ibDontThrowSteps b) (ibMaxEvaluations b) ex+  SpreadGlobalLogLinear acc w guess -> qlPiecewiseSpreadYieldCurveGlobalBootstrap base rs acc w ex guess+  where rs = toList r+{#fun qlPiecewiseSpreadYieldCurve{withYieldTermStructure*`GenYieldTermStructure y',withRateHelperArray*`[GenRateHelper rh]'&,`Int',`Int',`Int',`Double',`Double',`Double',fromIntegral`Word',`Double',`Double',`Bool',fromIntegral`Word',fromIntegral`Word',`Bool',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}++{#fun qlPiecewiseSpreadYieldCurveGlobalBootstrap{withYieldTermStructure*`GenYieldTermStructure y',withRateHelperArray*`[GenRateHelper rh]'&,`Double',withDoubleArray*`[Double]'&,`Bool',withMaybeBootstrapInitialGuess*`Maybe BootstrapInitialGuess'+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+ -- |Yield curve interpolating discount factors directly between the given dates. interpolatedDiscountCurve :: NonEmpty (Day, Double) -- ^dates, dfs   -> DayCounter -- ^dayCounter@@ -888,7 +1176,9 @@ interpolatedForwardCurve r dc c qd i = uncurryNested (qlInterpolatedForwardCurve rs rd dc c qs ds) (qlInterpolation i) where {(rd, rs) = unzip (toList r); (ds, qs) = unzip qd} {#fun qlInterpolatedForwardCurve{withDoubleArray*`[Double]'&,withDayArray*`[Day]'&,withDayCounter*`DayCounter',withCalendar*`Calendar',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Int',`Int',`Int',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#} --- |Yield curve interpolating zero-yield rates directly between the given dates.+-- |Yield curve interpolating zero-yield rates directly between the given dates. Always uses+-- upstream's own default compounding (@Continuous@, @Annual@); use 'interpolatedSimpleZeroCurve'+-- for simple compounding. interpolatedZeroCurve :: NonEmpty (Day, Double) -- ^dates, yields   -> DayCounter -- ^dayCounter   -> Calendar -- ^cal@@ -898,6 +1188,16 @@ interpolatedZeroCurve r dc c qd i = uncurryNested (qlInterpolatedZeroCurve rs rd dc c qs ds) (qlInterpolation i) where {(rd, rs) = unzip (toList r); (ds, qs) = unzip qd} {#fun qlInterpolatedZeroCurve{withDoubleArray*`[Double]'&,withDayArray*`[Day]'&,withDayCounter*`DayCounter',withCalendar*`Calendar',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Int',`Int',`Int',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#} +-- |Yield curve interpolating simply-compounded zero rates directly between the given dates.+interpolatedSimpleZeroCurve :: NonEmpty (Day, Double) -- ^dates, yields+  -> DayCounter -- ^dayCounter+  -> Calendar -- ^cal+  -> [(Day, GenQuote q)] -- ^jumps, jumpDates+  -> Interpolation -- ^interpolator+  -> IO YieldTermStructure+interpolatedSimpleZeroCurve r dc c qd i = uncurryNested (qlInterpolatedSimpleZeroCurve rs rd dc c qs ds) (qlInterpolation i) where {(rd, rs) = unzip (toList r); (ds, qs) = unzip qd}+{#fun qlInterpolatedSimpleZeroCurve{withDoubleArray*`[Double]'&,withDayArray*`[Day]'&,withDayCounter*`DayCounter',withCalendar*`Calendar',withQuoteArray*`[GenQuote q]'&,withDayArray*`[Day]'&,`Int',`Int',`Int',preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}+ -- |Discount factors interpolated as a multiplicative spread applied on top of 'baseCurve'. -- Upstream requires the first discount factor to be exactly @1.0@, flagging its date as the -- curve's own reference date; a mismatched leading value throws a 'QuantLib.Context.Error'.@@ -943,6 +1243,20 @@ -- |final number of iterations used in the optimization problem {#fun qlFittedBondDiscountCurveFittingMethodNumberOfIterations as numberOfIterations{withFittedBondDiscountCurve*`FittedBondDiscountCurve',preErrorCheck-`String'errorCheck*-}->`Int'#} +-- |number of unknown parameters found by the fit+{#fun qlFittedBondDiscountCurveFittingMethodSize as fittingMethodSize{withFittedBondDiscountCurve*`FittedBondDiscountCurve',preErrorCheck-`String'errorCheck*-}->`Word'fromIntegral#}++-- |why the optimization stopped+fittingMethodErrorCode :: FittedBondDiscountCurve -> IO EndCriteriaType+fittingMethodErrorCode = fmap toEnum . fittingMethodErrorCodeRaw+{#fun qlFittedBondDiscountCurveFittingMethodErrorCode as fittingMethodErrorCodeRaw{withFittedBondDiscountCurve*`FittedBondDiscountCurve',preErrorCheck-`String'errorCheck*-}->`Int'#}++-- |the fitted parameters found by the optimization+{#fun qlFittedBondDiscountCurveFittingMethodSolution as fittingMethodSolution{withFittedBondDiscountCurve*`FittedBondDiscountCurve',preDoubleArray-`RealVector'&peekRealVector*,preErrorCheck-`String'errorCheck*-}->`()'#}++-- |the discount factor at time @t@ implied by a given parameter vector, without rebuilding the curve+{#fun qlFittedBondDiscountCurveFittingMethodDiscount as fittingMethodDiscount{withFittedBondDiscountCurve*`FittedBondDiscountCurve',withDoubleArray*`[Double]'&,`Double',preErrorCheck-`String'errorCheck*-}->`Double'#}+ -- |A curve behind a relinkable handle. The result /is/ a 'YieldTermStructure': pass it to -- any curve-taking function and everything built on it keeps tracking whatever the handle -- currently points at, so a later 'linkTo' reprices already-constructed instruments@@ -970,6 +1284,15 @@ -- 'addBootstrappedCurve' -- which returns an /external/ handle to reference the curve by from -- then on, and links the internal handle to it (with ownership/observability stripped to avoid -- shared_ptr and notification cycles) so the curves' own cross-references resolve.+--+-- Only the 'MultiCurve' value and the returned external handles keep the group alive, so+-- instruments outside the cycle must use indexes built on the external handles. An original+-- member handle keeps only its own curve, and internal handles keep nothing: once the group is+-- released, anything reached through either raises an error instead of pricing.+--+-- __Leak hazard:__ members must reference each other through internal handles. A member curve,+-- rate helper, or index inside the cycle built on an /external/ handle makes the group own+-- itself, so it is never freed. Original member handles do not create such a cycle. {#fun qlMultiCurve as multiCurve{`Double' -- ^accuracy   ,preErrorCheck-`String'errorCheck*-}->`MultiCurve'peekMultiCurve*#} @@ -988,3 +1311,98 @@   ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}  -- vim: set ff=unix ts=8 sts=2 sw=2 et:++-- |An implied curve whose reference date moves with the evaluation date by settlement days.+-- Shares the original curve's observable handle. Requires QuantLib 1.44.+{#fun qlImpliedTermStructureMoving as impliedTermStructureMoving{withYieldTermStructure*`GenYieldTermStructure y' -- ^curve+  ,fromIntegral`Word' -- ^settlementDays+  ,withCalendar*`Calendar' -- ^calendar+  ,preErrorCheck-`String'errorCheck*-}->`YieldTermStructure'peekYieldTermStructure*#}++-- |Basis helper paying base overnight plus basis and receiving the other overnight rate.+-- Empty discount handle uses the bootstrapped curve; averaging is independent per leg.+-- NoFrequency creates one coupon per leg. Requires QuantLib 1.44.+{#fun qlOvernightOvernightBasisSwapRateHelper as overnightOvernightBasisSwapRateHelper{withQuote*`GenQuote q' -- ^basis+  ,fromEnumQuantity`(Int,TimeUnit)'& -- ^tenorLen+  ,fromIntegral`Word' -- ^settlementDays+  ,withCalendar*`Calendar' -- ^calendar+  ,fromEnumC`BusinessDayConvention' -- ^convention+  ,`Bool' -- ^endOfMonth+  ,withOvernightIborIndex*`OvernightIborIndex' -- ^baseIndex+  ,withOvernightIborIndex*`OvernightIborIndex' -- ^otherIndex+  ,withMaybeYieldTermStructure*`Maybe (GenYieldTermStructure y)' -- ^discount+  ,`Bool' -- ^bootstrapBaseCurve+  ,fromIntegral`Int' -- ^paymentLag+  ,`Frequency' -- ^paymentFrequency+  ,fromEnumC`RateAveragingType' -- ^baseAveragingMethod+  ,fromEnumC`RateAveragingType' -- ^otherAveragingMethod+  ,`Bool' -- ^telescopicValueDates+  ,`DateGenerationRule' -- ^rule+  ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}++-- |Dates for a funding-margin helper: settlement days and tenor, or fixed endpoints.+data FundingTerms = FundingTenor !Word !(Int, TimeUnit) | FundingBetweenDates !Day !Day++-- |Funding-margin helper with principal exchanges and compounded overnight coupons.+-- The index projects from an exogenous curve; the bootstrapped curve discounts every flow.+-- Payment lag also applies to principal exchanges. Requires QuantLib 1.44.+overnightIndexedFundingRateHelper :: FundingTerms -- ^contract dates+  -> GenQuote q -- ^margin+  -> Calendar -- ^calendar+  -> BusinessDayConvention -- ^convention+  -> Bool -- ^endOfMonth+  -> OvernightIborIndex -- ^index+  -> (Int, TimeUnit) -- ^paymentTenor+  -> DayCounter -- ^paymentDayCounter+  -> Int -- ^paymentLag+  -> Bool -- ^telescopicValueDates+  -> DateGenerationRule -- ^rule+  -> PillarChoice -- ^pillar+  -> Maybe Day -- ^customPillarDate+  -> IO RateHelper+overnightIndexedFundingRateHelper terms margin cal convention eom idx tenor dc lag telescopic rule pillar custom =+  case terms of+    FundingTenor days (n, unit) -> overnightIndexedFundingRateHelperRaw False (fromIntegral days) n unit margin cal convention eom idx tenor dc lag telescopic rule pillar custom+    FundingBetweenDates start end -> do+      s <- toSerial start+      e <- toSerial end+      overnightIndexedFundingRateHelperRaw True (fromIntegral s) (fromIntegral e) Days margin cal convention eom idx tenor dc lag telescopic rule pillar custom++{#fun qlOvernightIndexedFundingRateHelperRaw as overnightIndexedFundingRateHelperRaw{`Bool' -- ^dated+  ,fromIntegral`Int' -- ^start+  ,fromIntegral`Int' -- ^end+  ,fromEnumC`TimeUnit' -- ^tenorUnit+  ,withQuote*`GenQuote q' -- ^margin+  ,withCalendar*`Calendar' -- ^calendar+  ,fromEnumC`BusinessDayConvention' -- ^convention+  ,`Bool' -- ^endOfMonth+  ,withOvernightIborIndex*`OvernightIborIndex' -- ^index+  ,fromEnumQuantity`(Int,TimeUnit)'& -- ^paymentTenorLen+  ,withDayCounter*`DayCounter' -- ^paymentDayCounter+  ,fromIntegral`Int' -- ^paymentLag+  ,`Bool' -- ^telescopicValueDates+  ,`DateGenerationRule' -- ^rule+  ,`PillarChoice' -- ^pillar+  ,withMaybeDay*`Maybe Day' -- ^customPillarDate+  ,preErrorCheck-`String'errorCheck*-}->`RateHelper'peekRateHelper*#}++-- |Whole-curve initial guess: node times (including time zero), previous data (empty on+-- first bootstrap), and one trait-specific guess per non-reference pillar. Inputs are borrowed:+-- copy them before retaining them past the callback. Ignored, without execution, on QuantLib 1.43.+type BootstrapInitialGuess = RealVector -> RealVector -> IO RealVector++foreign import ccall unsafe "ql.h qlSupports144" supportsInitialGuess :: Bool++withMaybeBootstrapInitialGuess :: Maybe BootstrapInitialGuess -> (Ptr () -> IO r) -> IO r+withMaybeBootstrapInitialGuess Nothing use = use nullPtr+withMaybeBootstrapInitialGuess (Just f) use+  | not supportsInitialGuess = use nullPtr+  | otherwise = Callback.withCallback call (`Callback.withCallbackPtr` use)+  where+    call args = do+      times <- borrowRealVector (Callback.callbackInput args) (fromIntegral (Callback.callbackSize args))+      previous <- borrowRealVector (Callback.callbackInput2 args) (fromIntegral (Callback.callbackSize2 args))+      values <- f times previous+      let expected = Callback.callbackOutputSize args+      when (V.length values /= expected) $ throwIO $ CallbackResultLength expected (V.length values)+      V.unsafeWith values $ \p -> copyArray (castPtr (Callback.callbackOutput args)) p expected
QuantLib/Time/Calendar.chs view
@@ -47,6 +47,8 @@ -- |Constructs the calendar for the given country, with an optional market variant. {#fun qlCalendar{`Int',`Int',preErrorCheck-`String'errorCheck*-}->`Calendar'peekCalendar*#} +-- |Constructs a calendar. 'ItalyExchange' is deprecated by QuantLib 1.44 and will be removed+-- when hasquant adopts QuantLib 1.45; use 'TARGET' instead. calendar :: CalendarConstructor -> IO Calendar calendar (Bespoke n w) = qlBespokeCalendar n w calendar (Joint2 c1 c2 r) = qlJointCalendar2 c1 c2 r@@ -104,7 +106,7 @@ {#fun qlCalendarHolidayList as holidays{withCalendar*`Calendar',withDay*`Day' -- ^from   ,withDay*`Day' -- ^to   ,`Bool' -- ^includeWeekEnds-  ,preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+  ,preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- The name of a QuantLib object is fixed for its lifetime, so materializing one through -- unsafePerformIO during Read is as safe as showStandalone's own use of it above; NOINLINE
QuantLib/Time/Date.chs view
@@ -66,6 +66,7 @@   , isEcbDate   , knownEcbDates   ) where+import Control.Exception (mask_) import Data.Time.Calendar(toGregorian, isLeapYear, fromGregorian) import Data.Time.Clock(getCurrentTime) import Data.Time.LocalTime(localDay, getTimeZone, utcToLocalTime)@@ -167,7 +168,9 @@  -- |next IMM code following the given date -- returns the IMM code for next contract listed in the International Money Market section of the Chicago Mercantile Exchange.-{#fun qlIMMNextCode as nextImmCode{withDay*`Day',`Bool' -- ^mainCycle+nextImmCode :: Day -> Bool -> IO String+nextImmCode x y = mask_ (nextImmCodeRaw x y)+{#fun qlIMMNextCode as nextImmCodeRaw{withDay*`Day',`Bool' -- ^mainCycle   }->`String'peekDynString*#}  -- |next IMM date following the given IMM code@@ -203,7 +206,7 @@ {#fun qlECBIsECBdate as isEcbDate{withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Bool'#}  -- |the set of known ECB maintenance period start dates-{#fun qlECBKnownDates as knownEcbDates{preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlECBKnownDates as knownEcbDates{preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |next ECB code following the given code {#fun qlECBNextCode1 as nextEcbCodeFromCode{`String',preErrorCheck-`String'errorCheck*-}->`String'#}@@ -218,10 +221,10 @@ {#fun qlECBNextDate as nextEcbDate{withMaybeDay*`Maybe Day',preErrorCheck-`String'errorCheck*-}->`Day'toDay#}  -- |next maintenance period start dates following the given code-{#fun qlECBNextDates1 as nextEcbDatesFromCode{`String',withMaybeDay*`Maybe Day',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlECBNextDates1 as nextEcbDatesFromCode{`String',withMaybeDay*`Maybe Day',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |next maintenance period start dates following the given date-{#fun qlECBNextDates as nextEcbDates{withMaybeDay*`Maybe Day',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlECBNextDates as nextEcbDates{withMaybeDay*`Maybe Day',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |removes a date from the set of known ECB maintenance period start dates {#fun qlECBRemoveDate as removeEcbDate{withDay*`Day',preErrorCheck-`String'errorCheck*-}->`()'#}
QuantLib/Time/Schedule.chs view
@@ -114,7 +114,7 @@ {#fun qlScheduleUntil as until{withSchedule*`Schedule',withDay*`Day',preErrorCheck-`String'errorCheck*-}->`Schedule'peekSchedule*#}  -- |returns the dates for the given Schedule object-{#fun qlScheduleDates as dates{withSchedule*`Schedule',preArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}+{#fun qlScheduleDates as dates{withSchedule*`Schedule',preIntArray-`[Day]'&peekDayArray*,preErrorCheck-`String'errorCheck*-}->`()'#}  -- |returns a Period from a given Frequency (e.g. 6M from SemiAnnual) {#fun qlPeriodFromFrequency1 as fromFrequency{`Frequency',preEnum-`TimeUnit'peekEnum*,preErrorCheck-`String'errorCheck*-}->`Word'fromIntegral#}
README.md view
@@ -7,11 +7,12 @@ - vanilla, barrier, Asian, compound, variance, and basket options; - vanilla, CMS, OIS, CDS, zero-coupon, and portfolio-credit (synthetic CDO, nth-to-default) swaps and instruments; - risk statistics (VaR, expected shortfall, ...) over caller-supplied samples;+- large numeric vectors as `vector`'s storable `Vector Double` and dense matrices compatible with hmatrix; - and analytic, tree, finite-difference, and Monte Carlo engines from Black-Scholes through SABR and Heston. -hasquant is a close-to-1:1 `c2hs` wrapper over QuantLib's C++ API, not a framework. It binds 1,900+ constructors and non-trivial methods (around 20% of QuantLib's surface) and deliberately excludes 2000+ methods (mostly mutators or getters that only repeat constructor inputs).+hasquant is a close-to-1:1 `c2hs` wrapper over QuantLib's C++ API, not a framework. It binds 2,000+ constructors and non-trivial methods (around 20% of QuantLib's surface) and deliberately excludes 2,000+ methods (mostly mutators or getters that only repeat constructor inputs). -Type safety is a primary API goal. Phantom-typed pointers (`GenBond a`, `GenQuote a`, …) preserve the relevant part of QuantLib's object hierarchy in Haskell, so invalid object combinations are compile-time errors rather than failed casts at runtime. The C++ shim uses no runtime downcasts; bindings expose a concrete leaf type when one is needed. Enums mirror upstream values explicitly.+Type safety is a primary API goal. Phantom-typed pointers (`GenBond a`, `GenQuote a`, …) preserve the relevant part of QuantLib's object hierarchy in Haskell, so invalid object combinations are compile-time errors rather than failed casts at runtime. The C++ shim uses runtime downcasts only where QuantLib's architecture dictates them; otherwise, bindings expose a concrete leaf type when one is needed. Enums mirror upstream values explicitly.  hasquant does not depend on [QuantLib-SWIG](https://github.com/lballabio/QuantLib-SWIG). References to it identify prior art for API-shape decisions only. @@ -21,6 +22,30 @@  Published package: https://hackage.haskell.org/package/hasquant. Current Haddock: https://khorser.github.io/hasquant. +# Releasing++Add a `HACKAGE_TOKEN` repository secret containing an API token from a Hackage+account with permission to upload `hasquant`. The Release workflow uses the existing+Linux CI image (GHC 9.10.3 / QuantLib 1.43) to build source and Haddock tarballs.++1. Push a version tag matching `hasquant.cabal` (`v.0.8.0.0`, `v0.8.0.0`, or+   `0.8.0.0`), then dispatch **Release** from the default branch with that `tag`+   and `operation=release`.+2. The workflow saves both tarballs on a GitHub release and uploads a Hackage+   candidate plus its docs. Review the candidate using the links in the job summary.+   Set `upload_candidate=false` for a GitHub-only run; that run needs no Hackage token.+3. Promote the reviewed candidate manually on Hackage, then dispatch **Release**+   again with the same `tag` and `operation=published-docs`. This uploads the saved+   documentation tarball to the published version without rebuilding or uploading+   a source package. The operation can be repeated if the docs upload fails.++GitHub releases default to drafts. The `draft` input applies only when creating a+release; reruns replace its assets while preserving its current publish state.+Publish the GitHub release separately when ready. GitHub draft status is independent+of Hackage candidate status, and `draft`/`upload_candidate` are ignored by+`published-docs`. Hackage upload failures fail the workflow; assets already saved on+GitHub remain available.+ # Quick Example  Build and price a five-year SOFR OIS:@@ -50,7 +75,7 @@   ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing  ois <- overnightIndexedSwap Payer 10000000 sched 0.035 dc sofr 0.0-  0 Following cal False AveragingCompound Nothing 0 False+  0 Following cal False AveragingCompound Nothing Nothing 0 False  engine <- discountingSwapEngine curve (Just False) Nothing Nothing setPricingEngine ois engine@@ -59,7 +84,7 @@ fairRate ois >>= print  -- 3.6554153626327204e-2 ``` -This is `QuantLib.Example.QuickStart.run`, compiled by `stack exec hasquant_example` and covered by `test/hspec/QuantLib/Spec/Examples.hs`.+This is `QuantLib.Example.QuickStart.run`, run by `cabal run hasquant_example -f buildExample` and covered by `test/hspec/QuantLib/Spec/Examples.hs`.  # Goals and Scope @@ -70,72 +95,110 @@ - Calendar, currency, day-counter, and index enums are usable without a pricing engine. - Monte Carlo tests and examples use fixed nonzero RNG seeds; QuantLib treats `seed = 0` as entropy. -Out of scope:--- Reimplementing or independently binding QuantLib's interpolation, optimization, linear-algebra, and RNG internals, unless another binding needs one exposed.-- A declarative composition DSL; any such DSL belongs in a sibling project.+Out of scope: reimplementing or independently binding QuantLib's interpolation, optimization, linear-algebra, and RNG internals, unless another binding needs one exposed.  ## Roadmap-- Identify which [OpenSourceRiskEngine](https://opensourcerisk.org) functionality should be bound-- Join forces with [HQuantLib](https://github.com/paulrzcz/hquantlib): a bivariate copula CDF catalogue-- Build a declarative composition DSL as a sibling project.+- Identify which [OpenSourceRiskEngine](https://opensourcerisk.org) functionality should be bound, e.g. `https://github.com/OpenSourceRisk/Engine/blob/master/QuantExt/qle/indexes/fallbackiborindex.hpp`+- Build a declarative embedded DSL as a sibling project to define contracts, portfolios, market data, and calculation scenarios (unpublished WIP), use it for XVA and other complext calculations - Expose that DSL through an agent-callable tool, so an LLM can construct and price products through validated hasquant operations rather than generated pricing logic.+- Keep the exact-mean H1-HW backport (`cbits/qlExactMeanH1HwEngine.h`) until both supported QuantLib release series provide `AnalyticH1HWEngine::VarianceRootMean::Exact`; `ExactMean` already selects the native engine when the linked headers expose it.+- On adopting QuantLib 1.45 (dropping 1.43):+  - remove the `ItalyExchange` calendar, deprecated in 1.44 (replacement: `TARGET`);+  - drop the boost branches of `cbits/qlStdCompat.h` and spell `std::optional`/`std::any` directly;+    its versioned-argument macro then becomes unconditional or moves to the 1.45 pair. - See [github issues](https://github.com/khorser/hasquant/issues) for more formalized tasks  # Testing  Tests reuse QuantLib fixtures and cached values when available. Enum-dispatched bindings also get smoke tests that construct and check representative values; these catch stale or incorrect enum mappings that can survive a clean build and the ordinary test suite. -`tools/ql-methods-1.43.txt` tracks constructors and non-trivial methods. Coverage: https://khorser.github.io/hasquant/coverage/hpc_index.html.+`tools/ql-methods-1.43.txt` and `tools/ql-methods-1.44.txt` track constructors and non-trivial methods. Coverage: https://khorser.github.io/hasquant/coverage/hpc_index.html. +# QuantLib version policy++hasquant supports the latest patch release of the two most recent stable QuantLib series+(1.42 and 1.42.1 are one series), starting with 1.43 and 1.44. Patch releases replace their+predecessor without moving the window; release candidates are tested early but displace nothing.+Each hasquant release lists the exact QuantLib versions it supports, and no fixes are backported+to versions outside the window.++Bindings to APIs QuantLib deprecates are removed when hasquant adopts the next stable series+(e.g. deprecated in 1.44, removed on adopting 1.45), with the removal series and replacement+documented in advance. Removals bump hasquant's major version under the+[PVP](https://pvp.haskell.org/) and are listed in the release notes.++The Haskell API is the same on both supported versions. On the older one, calls that need the+newer QuantLib raise `UnsupportedQuantLibVersion`, as do most newer arguments set to anything+but their upstream default. Newer validation may also apply there, and results can still differ.+ # Building -GHC 9.10 is the primary development version. GHC 8.10.6 (`base >= 4.14`) is the supported floor and is checked with lts-18.8. GitHub CI also tests with GHC 9.6.7, 9.8.4, 9.12.4, 9.14.1.+GHC 9.10 is the primary development version. GHC 8.10.6 (`base >= 4.14`) is the supported floor and is checked against Stackage lts-18.8. GitHub CI also tests with GHC 9.6.7, 9.8.4, 9.12.4, 9.14.1. -Install QuantLib 1.43 or later: [Linux](https://www.quantlib.org/install/linux.shtml), [macOS](https://www.quantlib.org/install/macosx.shtml), or [CMake](https://www.quantlib.org/install/cmake.shtml).+Install QuantLib 1.43 or 1.44: [Linux](https://www.quantlib.org/install/linux.shtml), [macOS](https://www.quantlib.org/install/macosx.shtml), or [CMake](https://www.quantlib.org/install/cmake.shtml).  Linux and macOS are the primary, well-tested platforms. Windows builds work too, but QuantLib has to be rebuilt with GHC's own bundled Clang first — see [`WINDOWS.md`](WINDOWS.md) for the recipe. -## Stack+hasquant never uses intraday dates, so prefer a QuantLib built without `QL_HIGH_RESOLUTION_DATE` (check `ql/config.hpp`). With it, every `Date` operation goes through boost `posix_time`. In a GSR-calibration-heavy workload that was 59% of CPU, and turning it off cut run times from 309 s to 156 s and from 76 s to 28 s, with bit-identical results. Homebrew's formula turns it on (`--enable-intraday`); CMake leaves it off by default: -Minimal build: `stack build --no-haddock --no-test`+```+cmake -S QuantLib-1.43 -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/opt/quantlib-1.43 \+  -DCMAKE_INSTALL_NAME_DIR=$HOME/opt/quantlib-1.43/lib -DQL_BUILD_EXAMPLES=OFF -DQL_BUILD_TEST_SUITE=OFF+cmake --build build -j && cmake --install build+brew unlink quantlib+``` -Run tests: `stack build --test --no-haddock`+To use custom built QuantLib copy `cabal.project.local.customQL` to `cabal.project.local` and update the paths. -Build and run examples: `stack build --flag hasquant:buildExample --no-haddock && stack exec hasquant_example`.-The example executable is `buildable: False` without that flag, so HLS also needs it — add `package hasquant` / `flags: +buildExample` to a local `cabal.project.local` to edit `main/exe` with HLS.+## Cabal +Build everything, including tests and the flagged executables:+`cabal build all --enable-tests -f buildExample -f buildSofrXva`++Run tests: `cabal test all --enable-tests` (add `--test-options=--skip=LONG` for the fast path)++Build and run examples: `cabal run hasquant_example -f buildExample`.+The example executable is `buildable: False` without that flag, so HLS also needs it — add `package hasquant` / `flags: +buildExample` to `cabal.project.local` to edit `main/exe` with HLS.+ To trace allocations:-`stack build --no-haddock --flag hasquant:buildExample --flag hasquant:trackAllocations && stack exec hasquant_example`+`cabal run hasquant_example -f buildExample -f trackAllocations`  The trace defaults to stderr. Use a file to keep program output separate: -`QLTRACK_ALLOCATIONS=/tmp/trace.log stack exec hasquant_example`+`QLTRACK_ALLOCATIONS=/tmp/trace.log cabal run hasquant_example -f buildExample -f trackAllocations`  `tools/alloc-summary.py /tmp/trace.log` pairs allocations and frees, reports live objects and double frees, and exits nonzero on an accounting failure. -**Caution:** Cabal and Stack do not rebuild `cxx-sources` when only a flag changes. Before enabling `trackAllocations`, delete `build/cbits` and confirm a built object contains `allocated` before trusting an empty trace.+**Caution:** Cabal does not rebuild `cxx-sources` when only a flag changes. Before enabling `trackAllocations`, delete `build/cbits` and confirm a built object contains `allocated` before trusting an empty trace. -Run GHCi: `stack ghci --ghci-options $(find .stack-work \( -name "*.so" -o -name "*.dylib" \) -print -quit)`+Run GHCi: `cabal repl lib:hasquant` -## Cabal+See `q` script in the project root for more options, [fzf](https://github.com/junegunn/fzf) is needed -Standard build: `cabal configure --disable-documentation && cabal build`+### Pinned dependencies -Build with documentation: `cabal configure --enable-documentation && cabal build`+Dependencies are pinned to Stackage snapshots stored as cabal constraint files in `cabal/`: -Build example: `cabal configure -f buildExample --disable-documentation && cabal build`+| Project file | GHC | Snapshot |+|---|---|---|+| `cabal.project` (default) | 9.10.3 | lts-24.56 |+| `cabal.project.lts-22.44` | 9.6.7 | lts-22.44 |+| `cabal.project.lts-18.8` | 8.10.6 | lts-18.8 |+| `cabal.project.unpinned` | others | none | -Build example and tests: `cabal configure -f buildExample --enable-tests --disable-documentation && cabal build`+Select a non-default project with `--project-file=<file>`, which then reads `<file>.local` instead of `cabal.project.local`.+Each snapshot's `with-compiler` selects the matching versioned `ghc-X.Y.Z` binary installed by GHCup.+To add or refresh a snapshot, run `tools/stackage-cabal-config.sh lts-X.Y` and import the generated `cabal/stackage-lts-X.Y.config` from a project file.  ## Docker -Use the Linux x86_64 image for GHC 8.10.6:-`docker compose build`, then `docker compose run --rm -it hasquant stack --resolver lts-18.8 test`.+The Linux x86_64 image runs the GHC 8.10.6 compatibility gate:+`docker compose build`, then+`docker compose run --rm -it hasquant sh -c 'ghcup install ghc 8.10.6 && cabal update && cabal build all --project-file=cabal.project.lts-18.8 --enable-tests -f buildExample -f buildSofrXva && cabal test all --project-file=cabal.project.lts-18.8 --enable-tests -f buildExample -f buildSofrXva'`.  Drop `-it` when running without a TTY (CI, or a scripted check) — it fails there. -The image persists Stack, GHCup, and Cabal caches and keeps build outputs off the host.+The image persists GHCup and Cabal caches and keeps build outputs off the host.  # On Types 
WINDOWS.md view
@@ -106,6 +106,8 @@  Copy `cabal.project.local.WINDOWS` to `cabal.project.local` and adjust its paths. +`cabal.project` pins GHC 9.10.3 to Stackage lts-24.56. For another GHC, name the file `cabal.project.unpinned.local` instead and pass `--project-file=cabal.project.unpinned` to every `cabal` command.+ ## Step 4 — Build and run  ```@@ -133,7 +135,7 @@ - **Do not set `-pgml`.** GHC's Template Haskell bytecode linker then   probes MSYS2's library dirs and chokes on `libmingwex.a`   (`unknown symbol 'fileno'`).-- `package.yaml` links `stdc++` on non-Windows only. Don't remove that+- `hasquant.cabal` links `stdc++` on non-Windows only. Don't remove that   guard — linking MSYS2's `libstdc++` alongside GHC's `libc++` produces   `duplicate symbol: std::__1::basic_ostream<…>::operator<<(int)` and   hundreds like it.
app/SofrXva/Pricing.hs view
@@ -61,7 +61,7 @@   fixedSched <- schedule (Just effectiveDate) terminationDate (6, Months) cal     ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing   swap <- overnightIndexedSwap Payer 1000000 fixedSched 0.0278 dc index 0 2-    ModifiedFollowing paymentCal False AveragingCompound defaultOvernightObservation+    ModifiedFollowing paymentCal False AveragingCompound defaultOvernightObservation Nothing   engine <- discountingSwapEngine tsh (Just False) Nothing Nothing   setPricingEngine swap engine 
cbits/ql.h view
@@ -1,3 +1,4 @@+#include "qlCallback.h" #include "qlInstrument.h" #include "qlPricingEngine.h" #include "qlMisc.h"
+ cbits/qlCallback.cpp view
@@ -0,0 +1,87 @@+#include <ql/version.hpp>+#include "qlaux.h"++namespace {+  thread_local QlCallScope* currentCall = nullptr;+  class CallbackFailure : public std::exception {+  public:+    const char* what() const noexcept override { return "Haskell callback failed"; }+  };+}++QlCallScope::QlCallScope(QlError** error) noexcept : slot(error), previous_(currentCall) {+  currentCall = this;+}+QlCallScope::~QlCallScope() {+  currentCall = previous_;+  // Only the outermost scope collects deferred objects; no interrupted call can use them now.+  for (auto& [object, destroy] : deferred_) destroy(object);+}++void QlCallScope::deleteAfterCall(void* object, void (*destroy)(void*)) noexcept {+  QlCallScope* outermost = currentCall;+  while (outermost && outermost->previous_) outermost = outermost->previous_;+  if (outermost) {+    try { outermost->deferred_.emplace_back(object, destroy); return; } catch (...) {}+  }+  destroy(object);+}++void qlSetError(QlError** slot, const char* message) {+  if (!*slot) *slot = ret(new QlError(message));+}++void qlUnsupportedVersion(QlError** slot, const char* call, const char* required) {+  if (*slot) return;+  auto error = std::make_unique<QlError>(std::string(call) + " requires QuantLib " + required);+  error->call = call;+  error->requiredVersion = required;+  error->linkedVersion = QL_VERSION;+  *slot = ret(error.release());+}++bool ql144Default(QlError** slot, const char* call, bool isDefault) {+#if QL_HEX_VERSION >= 0x01440000+  (void)slot; (void)call; (void)isDefault;+  return true;+#else+  if (isDefault) return true;+  qlUnsupportedVersion(slot, call, "1.44");+  return false;+#endif+}++void hasquant::Callback::invoke(const QlCallbackArgs& args) const {+  if (currentCall && *currentCall->slot) throw CallbackFailure();+  void* failure = fn_(&args);+  if (!failure) return;+  std::unique_ptr<void, QlReleaseStable> pending(failure, releaseStable_);+  if (currentCall) {+    qlSetError(currentCall->slot, "Haskell callback failed");+    (*currentCall->slot)->releaseException = releaseStable_;+    (*currentCall->slot)->exception = pending.release();+  }+  // Haskell has returned; only the native exception unwinds native frames.+  throw CallbackFailure();+}++QlCallback* qlNewCallback(QlCallbackFun fn, QlReleaseFun releaseFun,+                          QlReleaseStable releaseStable, QlError** e) {+  QlCallScope callbackScope(e);+  try {+    auto callback = std::shared_ptr<hasquant::Callback>(alloc(new hasquant::Callback(fn, releaseStable)));+    auto result = std::make_unique<QlCallback>(std::move(callback));+    // Haskell still owns the function pointer if either allocation above fails.+    (*result)->adopt(releaseFun);+    return ret(result.release());+  } catch (std::exception& error) { return handleException<QlCallback*>(e, error); }+}+void qlFreeCallback(QlCallback* callback) { del(callback); }+const char* qlErrorMessage(const QlError* error) { return error->message.c_str(); }+const char* qlErrorCall(const QlError* error) { return error->call.c_str(); }+const char* qlErrorRequiredVersion(const QlError* error) { return error->requiredVersion.c_str(); }+const char* qlErrorLinkedVersion(const QlError* error) { return error->linkedVersion.c_str(); }+void* qlTakeErrorException(QlError* error) { return std::exchange(error->exception, nullptr); }+void qlFreeError(QlError* error) { del(error); }++int qlSupports144(void) {return QL_HEX_VERSION >= 0x01440000;}
+ cbits/qlCallback.h view
@@ -0,0 +1,44 @@+#ifndef HASQUANT_CALLBACK_H+#define HASQUANT_CALLBACK_H++typedef struct QlError QlError;+typedef struct QlCallbackArgs {+  double s;+  double t1;+  double t2;+  const double* input;+  double* output;+  unsigned size;+  unsigned direction;+#ifdef __cplusplus+  const double* input2 = nullptr;+  unsigned size2 = 0;+  unsigned outputSize = 0;+#else+  const double* input2;+  unsigned size2;+  unsigned outputSize;+#endif+} QlCallbackArgs;++typedef void* (*QlCallbackFun)(const QlCallbackArgs*);+typedef void (*QlReleaseFun)(void (*)(void));+typedef void (*QlReleaseStable)(void*);++#ifdef __cplusplus+extern "C" {+#endif+  QlCallback* qlNewCallback(QlCallbackFun fn, QlReleaseFun releaseFun,+                            QlReleaseStable releaseStable, QlError** e);+  void qlFreeCallback(QlCallback* callback);+  const char* qlErrorMessage(const QlError* error);+  const char* qlErrorCall(const QlError* error);+  const char* qlErrorRequiredVersion(const QlError* error);+  const char* qlErrorLinkedVersion(const QlError* error);+  void* qlTakeErrorException(QlError* error);+  void qlFreeError(QlError* error);+  int qlSupports144(void);+#ifdef __cplusplus+}+#endif+#endif
+ cbits/qlCallback.hpp view
@@ -0,0 +1,84 @@+#ifndef HASQUANT_CALLBACK_HPP+#define HASQUANT_CALLBACK_HPP++#include <exception>+#include <memory>+#include <string>+#include <utility>+#include <vector>++namespace hasquant { class Callback; }+using QlCallback = std::shared_ptr<hasquant::Callback>;+#include "qlCallback.h"++struct QlError {+  explicit QlError(std::string text) : message(std::move(text)) {}+  ~QlError() { if (exception) releaseException(exception); }+  QlError(const QlError&) = delete;+  QlError& operator=(const QlError&) = delete;+  std::string message;+  std::string call, requiredVersion, linkedVersion;+  void* exception = nullptr;+  QlReleaseStable releaseException = nullptr;+};++void qlSetError(QlError** slot, const char* message);+void qlUnsupportedVersion(QlError** slot, const char* call, const char* required);+// False after reporting call as unsupported when a QuantLib <= 1.43 receives a non-default 1.44 argument.+bool ql144Default(QlError** slot, const char* call, bool isDefault);++class QlCallScope {+public:+  explicit QlCallScope(QlError** slot) noexcept;+  ~QlCallScope();+  QlCallScope(const QlCallScope&) = delete;+  QlCallScope& operator=(const QlCallScope&) = delete;+  // Deletes an object once the outermost native call on this thread returns, or at once outside one.+  static void deleteAfterCall(void* object, void (*destroy)(void*)) noexcept;+  QlError** slot;+private:+  QlCallScope* previous_;+  std::vector<std::pair<void*, void (*)(void*)>> deferred_;+};++namespace hasquant {+  class Callback {+  public:+    Callback(QlCallbackFun fn, QlReleaseStable releaseStable)+      : fn_(fn), releaseStable_(releaseStable) {}+    ~Callback() { if (releaseFun_) releaseFun_(reinterpret_cast<void (*)(void)>(fn_)); }+    Callback(const Callback&) = delete;+    Callback& operator=(const Callback&) = delete;+    void adopt(QlReleaseFun release) noexcept { releaseFun_ = release; }+    void invoke(const QlCallbackArgs& args) const;+    double scalar(double x, double y = 0.0) const {+      double result = 0.0;+      invoke(QlCallbackArgs{x, y, 0.0, nullptr, &result, 0, 0});+      return result;+    }+    double array(const double* input, unsigned size, double time = 0.0) const {+      double result = 0.0;+      invoke(QlCallbackArgs{0.0, time, 0.0, input, &result, size, 0});+      return result;+    }+  private:+    QlCallbackFun fn_;+    QlReleaseStable releaseStable_;+    QlReleaseFun releaseFun_ = nullptr;+  };+  // A finalizer run by a callback's GC must not delete an object that the interrupted call uses.+  template <class T> struct DeleteAfterCall {+    void operator()(T* object) const noexcept {+      QlCallScope::deleteAfterCall(object, [](void* p) { delete static_cast<T*>(p); });+    }+  };+  struct UnaryCallback {+    QlCallback owner;+    double operator()(double x) const { return owner->scalar(x); }+  };+  struct BinaryCallback {+    QlCallback owner;+    double operator()(double x, double y) const { return owner->scalar(x, y); }+  };+}+#endif
+ cbits/qlCheckedFdEngine.h view
@@ -0,0 +1,19 @@+#ifndef HASQUANT_CHECKED_FD_ENGINE_H+#define HASQUANT_CHECKED_FD_ENGINE_H++#include <ql/instruments/payoffs.hpp>+#include <ql/errors.hpp>++namespace hasquant {+  template<class Engine> class CheckedFdEngine : public Engine {+  public:+    using Engine::Engine;+    void calculate() const override {+      // These upstream engines dereference an unchecked payoff cast in QuantLib 1.43.+      QL_REQUIRE(dynamic_cast<QuantLib::StrikedTypePayoff*>(this->arguments_.payoff.get()),+                 "finite-difference vanilla engine requires a striked payoff");+      Engine::calculate();+    }+  };+}+#endif
cbits/qlEnumC2HS.h view
@@ -563,13 +563,11 @@ // experimental/commodities/paymentterm.hpp (PaymentTerm::EventType) enum PaymentTermEventType {TradeDate, PricingDate}; -// experimental/commodities/unitofmeasureconversion.hpp (UnitOfMeasureConversion::Type). Tags-// prefixed Uom -- confirmed clash with the already-bound ExchangeRateType{Direct,Derived}.+// experimental/commodities/unitofmeasureconversion.hpp (UnitOfMeasureConversion::Type).+// Prefixes avoid a clash with ExchangeRateType's Direct and Derived constructors. enum UnitOfMeasureConversionType {UomDirect, UomDerived}; -// experimental/commodities/commodity.hpp (PricingError::Level). Grepped clean of any clash ---// 'Error' the data constructor doesn't collide with QuantLib.Error's 'Error' type (separate-// namespaces), and 'Info'/'Warning'/'Fatal' are otherwise unused as constructors here.+// experimental/commodities/commodity.hpp (PricingError::Level). enum PricingErrorLevel {Info, Warning, Error, Fatal};  // experimental/commodities/energycommodity.hpp (EnergyCommodity::DeliverySchedule,
cbits/qlEnumObjects.h view
@@ -167,6 +167,8 @@   , Serbia   , Slovenia   , Uzbekistan+  , Malaysia+  , Philippines };  // should match with the order of qlMisc.cpp:dayCounters
+ cbits/qlExactMeanH1HwEngine.h view
@@ -0,0 +1,134 @@+#ifndef HASQUANT_EXACT_MEAN_H1HW_ENGINE_H+#define HASQUANT_EXACT_MEAN_H1HW_ENGINE_H++#include <ql/math/distributions/gammadistribution.hpp>+#include <ql/math/integrals/gaussianquadratures.hpp>+#include <ql/pricingengines/vanilla/analytichestonhullwhiteengine.hpp>+#include <boost/math/special_functions/gamma.hpp>+#include <cmath>+#include <complex>++namespace hasquant {+  // Backport of QuantLib's proposed exact variance-root mean for H1-HW.+  // Quadrature avoids the exponential fit, which can fail for a nonmonotone mean.+  class ExactMeanH1HWEngine : public QuantLib::AnalyticHestonHullWhiteEngine {+  public:+    ExactMeanH1HWEngine(const QuantLib::ext::shared_ptr<QuantLib::HestonModel>& model,+                        const QuantLib::ext::shared_ptr<QuantLib::HullWhite>& hullWhiteModel,+                        QuantLib::Real rhoSr, QuantLib::Size integrationOrder, QuantLib::Size meanOrder)+    : AnalyticHestonHullWhiteEngine(model, hullWhiteModel, integrationOrder), rhoSr_(rhoSr), meanOrder_(meanOrder) {+      check();+    }+    ExactMeanH1HWEngine(const QuantLib::ext::shared_ptr<QuantLib::HestonModel>& model,+                        const QuantLib::ext::shared_ptr<QuantLib::HullWhite>& hullWhiteModel,+                        QuantLib::Real rhoSr, QuantLib::Real relTolerance, QuantLib::Size maxEvaluations,+                        QuantLib::Size meanOrder)+    : AnalyticHestonHullWhiteEngine(model, hullWhiteModel, relTolerance, maxEvaluations), rhoSr_(rhoSr), meanOrder_(meanOrder) {+      check();+    }++    void update() override {+      cached_ = false;+      AnalyticHestonHullWhiteEngine::update();+    }++    // E[sqrt(v_t)] under the Heston variance from v0: v_t / c(t) is noncentral chi-squared with d+    // degrees of freedom and noncentrality lambda(t), and E[sqrt] of that is a Poisson mixture of+    // central ones. Sum weights outwards from the mode to avoid overflow; past lambda = 1e5,+    // use the asymptotic approximation instead of summing thousands of terms.+    static QuantLib::Real meanRoot(QuantLib::Real v0, QuantLib::Real kappa, QuantLib::Real theta, QuantLib::Real sigma,+                                   QuantLib::Time t) {+      using std::exp; using std::log; using std::sqrt;+      if (t <= 0.0) return sqrt(v0);+      const QuantLib::Real e = exp(-kappa * t);+      if (sigma == 0.0) return sqrt(theta + (v0 - theta) * e);+      const QuantLib::Real oneMinusE = -std::expm1(-kappa * t);+      const QuantLib::Real c = sigma * sigma / (4.0 * kappa) * oneMinusE;+      const QuantLib::Real lambda = 4.0 * kappa * v0 * e / (sigma * sigma * oneMinusE);+      const QuantLib::Real d = 4.0 * kappa * theta / (sigma * sigma);+      if (lambda >= approximationThreshold)+        return sqrt(c * (lambda - 1.0) + c * d * (1.0 + 1.0 / (2.0 * (d + lambda))));+      const QuantLib::GammaFunction g;+      const QuantLib::Real h = 0.5 * lambda, a = 0.5 * (d + 1.0), b = 0.5 * d;+      const QuantLib::Size m = static_cast<QuantLib::Size>(std::floor(h));+      const QuantLib::Real mr = static_cast<QuantLib::Real>(m);+      const QuantLib::Real w0 = exp(-h + (m > 0 ? mr * log(h) : 0.0) - g.logValue(mr + 1.0));+      const QuantLib::Real shape = b + mr;+      const QuantLib::Real inverseShape = 1.0 / shape;+      // Gamma(x + 1/2) / Gamma(x) = sqrt(x) * (1 - 1/(8x) + 1/(128x^2) + 5/(1024x^3) + O(x^-4)).+      const QuantLib::Real g0 = shape >= gammaRatioThreshold+          ? sqrt(shape) * (1.0 + inverseShape * (-0.125 + inverseShape *+              (1.0 / 128.0 + inverseShape * 5.0 / 1024.0)))+          : 1.0 / boost::math::tgamma_delta_ratio(shape, 0.5);+      QuantLib::Real sum = w0 * g0, w = w0, r = g0, k = mr;+      for (;;) {+        w *= h / (k + 1.0);+        r *= (a + k) / (b + k);+        k += 1.0;+        const QuantLib::Real term = w * r;+        sum += term;+        if (term <= tiny * sum) break;+      }+      w = w0;+      r = g0;+      k = mr;+      while (k > 0.0) {+        w *= k / h;+        r *= (b + k - 1.0) / (a + k - 1.0);+        k -= 1.0;+        const QuantLib::Real term = w * r;+        sum += term;+        if (term <= tiny * sum) break;+      }+      return sqrt(2.0 * c) * sum;+    }++  protected:+    std::complex<QuantLib::Real> addOnTerm(QuantLib::Real u, QuantLib::Time t, QuantLib::Size j) const override {+      const QuantLib::Real lambda = hullWhiteModel_->a(), eta = hullWhiteModel_->sigma();+      const std::complex<QuantLib::Real> i4 =+          -std::complex<QuantLib::Real>(u * u, (j == 1U) ? -u : u) * meanIntegral(t, lambda);+      return AnalyticHestonHullWhiteEngine::addOnTerm(u, t, j) + eta * rhoSr_ * i4;+    }++  private:+    static constexpr QuantLib::Real approximationThreshold = 1.0e5;+    static constexpr QuantLib::Real gammaRatioThreshold = 1.0e5;+    static constexpr QuantLib::Real tiny = 1.0e-17;++    void check() const {+      QL_REQUIRE(rhoSr_ >= 0.0, "Fourier integration is not stable if the equity interest rate correlation is negative");+      QL_REQUIRE(meanOrder_ > 0, "the exact-mean quadrature needs at least one node");+    }++    // Cache int_0^t E[sqrt(v_s)] (1 - exp(-lambda (t - s))) / lambda ds.+    // The scaled kernel tends to t - s as lambda tends to zero.+    QuantLib::Real meanIntegral(QuantLib::Time t, QuantLib::Real lambda) const {+      const QuantLib::Real v0 = model_->v0(), kappa = model_->kappa(), theta = model_->theta(), sigma = model_->sigma();+      if (!(cached_ && t == keyT_ && v0 == keyV0_ && kappa == keyKappa_ && theta == keyTheta_ && sigma == keySigma_ && lambda == keyLambda_)) {+        const QuantLib::GaussLegendreIntegration quadrature(meanOrder_);+        j_ = 0.5 * t * quadrature([&](QuantLib::Real x) {+          const QuantLib::Time s = 0.5 * t * (x + 1.0);+          const QuantLib::Time tau = t - s;+          const QuantLib::Real z = lambda * tau;+          const QuantLib::Real kernel = tau * (z == 0.0 ? 1.0 : -std::expm1(-z) / z);+          return meanRoot(v0, kappa, theta, sigma, s) * kernel;+        });+        keyT_ = t;+        keyV0_ = v0;+        keyKappa_ = kappa;+        keyTheta_ = theta;+        keySigma_ = sigma;+        keyLambda_ = lambda;+        cached_ = true;+      }+      return j_;+    }++    const QuantLib::Real rhoSr_;+    const QuantLib::Size meanOrder_;+    mutable bool cached_ = false;+    mutable QuantLib::Real keyT_ = 0.0, keyV0_ = 0.0, keyKappa_ = 0.0, keyTheta_ = 0.0, keySigma_ = 0.0, keyLambda_ = 0.0, j_ = 0.0;+  };+}+#endif
cbits/qlInstrument.cpp view
@@ -86,2303 +86,2935 @@ #include <ql/experimental/swaptions/irregularswaption.hpp> #include <ql/instruments/bonds/convertiblebonds.hpp> #include <ql/cashflows/cashflows.hpp>-#include <ql/cashflows/coupon.hpp>-#include <ql/cashflows/averagebmacoupon.hpp>-#include <ql/cashflows/fixedratecoupon.hpp>-#include <ql/cashflows/iborcoupon.hpp>-#include <ql/cashflows/cmscoupon.hpp>-#include <ql/cashflows/capflooredcoupon.hpp>-#include <ql/cashflows/digitalcmscoupon.hpp>-#include <ql/cashflows/digitalcoupon.hpp>-#include <ql/cashflows/digitaliborcoupon.hpp>-#include <ql/cashflows/replication.hpp>-#include <ql/cashflows/overnightindexedcoupon.hpp>-#include <ql/cashflows/overnightindexedcouponpricer.hpp>-#include <ql/cashflows/blackovernightindexedcouponpricer.hpp>-#include <ql/cashflows/multipleresetscoupon.hpp>-#include <ql/cashflows/rangeaccrual.hpp>-#include <ql/cashflows/simplecashflow.hpp>-#include <ql/cashflows/indexedcashflow.hpp>-#include <ql/cashflows/cpicoupon.hpp>-#include <ql/cashflows/cpicouponpricer.hpp>-#include <ql/cashflows/yoyinflationcoupon.hpp>-#include <ql/cashflows/capflooredinflationcoupon.hpp>-#include <ql/cashflows/inflationcouponpricer.hpp>-#include <ql/cashflows/zeroinflationcashflow.hpp>-#include <ql/cashflows/couponpricer.hpp>-#include <ql/cashflows/dividend.hpp>-#include <ql/cashflows/couponpricer.hpp>-#include <ql/cashflows/conundrumpricer.hpp>-#include <ql/cashflows/lineartsrpricer.hpp>-#include <ql/experimental/coupons/cmsspreadcoupon.hpp>-#include <ql/experimental/coupons/digitalcmsspreadcoupon.hpp>-#include <ql/experimental/coupons/lognormalcmsspreadpricer.hpp>-#include <ql/experimental/coupons/quantocouponpricer.hpp>-#include <ql/experimental/coupons/strippedcapflooredcoupon.hpp>-#include <ql/experimental/coupons/swapspreadindex.hpp>-#include <ql/cashflows/equitycashflow.hpp>-#include <ql/indexes/equityindex.hpp>-#include <ql/instruments/inflationcapfloor.hpp>-#include <ql/instruments/cpicapfloor.hpp>-#include <ql/experimental/credit/defaultprobabilitykey.hpp>-#include <ql/experimental/credit/issuer.hpp>-#include <ql/experimental/credit/pool.hpp>-#include <ql/experimental/credit/basket.hpp>-#include <ql/experimental/credit/gaussianlhplossmodel.hpp>-#include <ql/experimental/credit/syntheticcdo.hpp>-#include <ql/experimental/credit/nthtodefault.hpp>--#include "qlaux.h"-using namespace QuantLib;-#include "qlInstrument.h"-#include "qlMisc.h"-#include "qlTermStructureAux.h"--#include <cstring>-#include <any>-#include <typeinfo>--#ifdef QLTRACK_ALLOCATIONS-QL_TRACE_NAME(Leg)-QL_TRACE_NAME(QlAdditionalResult)-#endif--namespace {-  Replication::Type qlReplicationType(int type) {-    switch (type) {-      case hasquant::ReplicationSub: return Replication::Sub;-      case hasquant::ReplicationCentral: return Replication::Central;-      case hasquant::ReplicationSuper: return Replication::Super;-      default: QL_FAIL("unknown replication type " << type);-    }-  }-  int qlReplicationTypeOut(Replication::Type type) {-    switch (type) {-      case Replication::Sub: return hasquant::ReplicationSub;-      case Replication::Central: return hasquant::ReplicationCentral;-      case Replication::Super: return hasquant::ReplicationSuper;-      default: QL_FAIL("unknown replication type " << type);-    }-  }-  // SecondaryCosts = map<string, ext::any>, used with exactly two concrete alternatives-  // (CommodityUnitCost/Money -- see energycommodity.cpp's two any_cast branches), bound as a real-  // 2-variant sum: scIsUnitCost[i] selects which of (scAmounts[i], scCurrencies[i]) alone (Money)-  // or paired with scUoms[i] (CommodityUnitCost) fills entry i. An empty (n==0) list stands in for-  // upstream's nullptr shared_ptr, matching every constructor's own optional-secondaryCosts default.-  shared_ptr<SecondaryCosts> qlBuildSecondaryCosts(unsigned n, char **keys, int *isUnitCost, double *amounts,-                                                   Currency **currencies, UnitOfMeasure **uoms) {-    if (n == 0) return shared_ptr<SecondaryCosts>();-    auto sc = ext::make_shared<SecondaryCosts>();-    for (unsigned i = 0; i < n; ++i) {-      Money amount(*arg(currencies[i]), amounts[i]);-      if (isUnitCost[i])-        (*sc)[keys[i]] = CommodityUnitCost(amount, *arg(uoms[i]));-      else-        (*sc)[keys[i]] = amount;-    }-    return sc;-  }--  // The structure-of-parallel-arrays representation of a PricingPeriods list, shared by every-  // EnergySwap-family constructor's own pricingPeriods argument and by createPricingPeriods'-  // output below.-  PricingPeriods qlPricingPeriodVector(unsigned n, int *startDates, int *endDates, int *paymentDates,-                                       CommodityType **types, UnitOfMeasure **uoms, double *amounts) {-    PricingPeriods pps;-    pps.reserve(n);-    for (unsigned i = 0; i < n; ++i)-      pps.push_back(ext::make_shared<PricingPeriod>(Date(startDates[i]), Date(endDates[i]), Date(paymentDates[i]),-                                                    Quantity(*arg(types[i]), *arg(uoms[i]), amounts[i])));-    return pps;-  }-  // ext::any is std::any in the Homebrew build and boost::any in the Docker build; both expose-  // .type() returning a std::type_info-compatible name, so we classify by typeid equality rather-  // than by a string name (which differs between the two).-  //-  // r's fields are all zero/null on entry (the caller value-initialises the whole array), so any-  // field this leaves untouched is already the correct "unset" value.-  void fillResult(struct QlAdditionalResult &r, const ext::any &v) {-    if (v.type() == typeid(double)) {-      r.type = AdditionalResultDouble;-      r.dval = ext::any_cast<double>(v);-    } else if (v.type() == typeid(std::string)) {-      r.type = AdditionalResultString;-      r.sval = tracedup(ext::any_cast<std::string>(v).c_str());-    } else if (v.type() == typeid(std::vector<double>)) {-      r.type = AdditionalResultDoubleVector;-      const std::vector<double> &vec = ext::any_cast<const std::vector<double>&>(v);-      r.vlen = static_cast<unsigned>(vec.size());-      if (r.vlen) {-        double *varr = alloc(new double[r.vlen]);-        for (unsigned i = 0; i < r.vlen; ++i) varr[i] = vec[i];-        r.varr = varr;-      }-    } else {-      r.type = AdditionalResultUnknown;-      r.sval = tracedup(v.type().name());-    }-  }-  // Payoff has exactly three pure virtuals (ql/payoff.hpp), so a Haskell-defined one needs only-  // one callback plus two strings. Unlike qlFdmRollback's whole-grid callbacks, operator() is-  // genuinely per scalar price everywhere upstream -- DiscretizedVanillaOption loops it node by-  // node, FdmCellAveragingInnerValue calls it inside a per-cell Simpson integral, AmericanPathPricer-  // calls it per path per exercise index -- and nothing batches an Array. The per-value callback-  // is therefore unavoidable, as it is for HsFdmInnerValueCalculator (qlPricingEngine.cpp).-  using PayoffFun = double (*)(double price);-  using BasketAccumulateFun = double (*)(const double* a, unsigned n);--  class HsPayoff : public Payoff {-  public:-    HsPayoff(std::string name, std::string description, PayoffFun fn)-    : name_(std::move(name)), description_(std::move(description)), fn_(fn) {}-    std::string name() const override {return name_;}-    std::string description() const override {return description_;}-    Real operator()(Real price) const override {return fn_(price);}-  private:-    std::string name_, description_;-    PayoffFun fn_;-  };--  // Same callback, but derived from StrikedTypePayoff instead of Payoff, carrying an advisory-  // (type, strike) pair. This is what makes a Haskell payoff usable with the FD vanilla engines:-  // FdBlackScholesVanillaEngine/FdHestonVanillaEngine dynamic_pointer_cast the payoff to-  // StrikedTypePayoff *without* a QL_REQUIRE and immediately call ->strike()-  // (fdblackscholesvanillaengine.cpp:154-166), so a plain HsPayoff null-derefs there. They need-  // the strike only for mesher geometry -- grid extent and the node-concentration point -- and-  // hand the payoff itself to FdmLogInnerValue, which takes a generic Payoff. So supplying a real-  // strike makes the cast succeed and the engine price the Haskell payoff correctly, rather than-  // being a guard bolted on around a crash. StrikedTypePayoff adds no pure virtuals over Payoff-  // (it supplies description(), and TypePayoff supplies optionType()), so only operator() and-  // name() are overridden here.-  class HsStrikedPayoff : public StrikedTypePayoff {-  public:-    HsStrikedPayoff(Option::Type type, Real strike, std::string name, PayoffFun fn)-    : StrikedTypePayoff(type, strike), name_(std::move(name)), fn_(fn) {}-    std::string name() const override {return name_;}-    Real operator()(Real price) const override {return fn_(price);}-  private:-    std::string name_;-    PayoffFun fn_;-  };--  // BasketPayoff's only pure virtual is accumulate(const Array&) -- the whole underlying-state-  // vector per call -- so this hook is already the coarsened shape; name()/description()/-  // operator()(Real) all delegate to the base payoff upstream and need no override.-  class HsBasketPayoff : public BasketPayoff {-  public:-    HsBasketPayoff(const shared_ptr<Payoff>& base, BasketAccumulateFun fn)-    : BasketPayoff(base), fn_(fn) {}-    Real accumulate(const Array& a) const override {-      return fn_(a.begin(), (unsigned)a.size());-    }-  private:-    BasketAccumulateFun fn_;-  };--  // Shared by RendistatoCalculator's plain-Real-vector getters (yields/durations/swapLengths/-  // swapRates/swapYields/swapDurations).-  void copyRealVector(const std::vector<Real>& v, unsigned *len, double **out) {-    double *xs = qlAllocateDoubles(v.size());-    std::copy(v.begin(), v.end(), xs);-    *len = v.size(); *out = xs;-  }-  // Stages QlAdditionalResult structs until commit(); their owned fields require the matching-  // aggregate finalizer.-  class OutAdditionalResultArray {-    unsigned *outLen_;-    QlAdditionalResult **out_;-    unsigned len_ = 0;-    QlAdditionalResult *value_ = nullptr;-    public:-    OutAdditionalResultArray(unsigned *outLen, QlAdditionalResult **out) : outLen_(outLen), out_(out) {-      *outLen_ = 0;-      *out_ = nullptr;-    }-    OutAdditionalResultArray(const OutAdditionalResultArray&) = delete;-    OutAdditionalResultArray& operator=(const OutAdditionalResultArray&) = delete;-    ~OutAdditionalResultArray() {if (value_) qlFreeAdditionalResults(len_, value_);}-    QlAdditionalResult* allocate(unsigned len) {-      // Value-initialisation makes every entry safe for the aggregate finalizer after a partial fill.-      value_ = alloc(new QlAdditionalResult[len]());-      len_ = len;-      return value_;-    }-    void commit() noexcept {*outLen_ = len_; *out_ = value_; value_ = nullptr;}-  };-}--#ifdef QLTRACK_ALLOCATIONS-// Same reason as qlPricingEngine.cpp's Hs* labels: these live in the anonymous namespace above and-// so cannot be named in qlaux.h's table, and without a specialization ObjClassName falls back to-// typeid().name(). All three are shared_ptr payloads -- alloc() only, never freed.-QL_TRACE_NAME(HsPayoff)-QL_TRACE_NAME(HsStrikedPayoff)-QL_TRACE_NAME(HsBasketPayoff)-#endif--extern "C" {-QlInstrument* qlPerpetualFutures(int payoffType, int fundingType,-                                 int fundingFrequencyLength, int fundingFrequencyUnit,-                                 Calendar* cal, DayCounter* dc, char **e) {-  try {return ret(new QlInstrument(alloc(new PerpetualFutures(-      (PerpetualFutures::PayoffType)payoffType,-      (PerpetualFutures::FundingType)fundingType,-      Period(fundingFrequencyLength, (TimeUnit)fundingFrequencyUnit), *arg(cal), *arg(dc)))));-  } catch (std::exception& er) {return handleException<QlInstrument*>(e, er);}}--double qlInstrumentNPV(QlInstrument *instr, char **e) {try {return (*arg(instr))->NPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlInstrumentSetPricingEngine(QlInstrument *instr, QlPricingEngine *eng, char **e) {try {(*arg(instr))->setPricingEngine(*arg(eng));} catch (std::exception& er) {(void)handleException<int>(e, er);}}-void qlFreeInstrument(QlInstrument *instr) {del(instr);}--void qlInstrumentAdditionalResults(QlInstrument *instr, unsigned *len,-    struct QlAdditionalResult **out, char **e) {-  OutAdditionalResultArray result(len, out);-  try {-    const std::map<std::string, ext::any> &res = (*arg(instr))->additionalResults();-    if (res.empty()) return;-    QlAdditionalResult *arr = result.allocate(static_cast<unsigned>(res.size()));-    unsigned i = 0;-    for (std::map<std::string, ext::any>::const_iterator it = res.begin(); it != res.end(); ++it, ++i) {-      arr[i].key = tracedup(it->first.c_str());-      fillResult(arr[i], it->second);-    }-    result.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}-}--void qlFreeAdditionalResults(unsigned len, struct QlAdditionalResult *out) {-  if (!out) return;-  for (unsigned i = 0; i < len; ++i) {-    qlFreeString(out[i].key);-    if (out[i].sval) qlFreeString(out[i].sval);-    delArray(out[i].varr);-  }-  delArray(out);-}--QlInstrument* qlCompositeInstrument(unsigned instrLen, QlInstrument **instrs, unsigned, double *coeff, char **e) {-  try {auto ci = ext::make_shared<CompositeInstrument>();-    for (unsigned i = 0; i < instrLen; ++i)-        ci->add(*(instrs[i]), coeff[i]);-    alloc(ci.get());-    return ret(new QlInstrument(ci));-  } catch (std::exception& er) {return handleException<QlInstrument*>(e, er);}}--double qlInstrumentErrorEstimate(QlInstrument* o, char **e) {try {return (*arg(o))->errorEstimate();} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlInstrumentIsExpired(QlInstrument* o, char **e) {try {return (*arg(o))->isExpired();} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlInstrumentValuationDate(QlInstrument* o, char **e) {try {return ((*arg(o))->valuationDate()).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-void qlFreePayoff(QlPayoff *o) {del(o);}-void qlFreeBasketPayoff(QlBasketPayoff *o) {del(o);}-QlPayoff* qlBasketPayoffAsPayoff(QlBasketPayoff *o) {return ret(new QlPayoff(*arg(o)));}-void qlFreeTypePayoff(QlTypePayoff *o) {del(o);}-QlPayoff* qlTypePayoffAsPayoff(QlTypePayoff *o) {return ret(new QlPayoff(*arg(o)));}-void qlFreeStrikedTypePayoff(QlStrikedTypePayoff *o) {del(o);}-QlTypePayoff* qlStrikedTypePayoffAsTypePayoff(QlStrikedTypePayoff *o) {return ret(new QlTypePayoff(*arg(o)));}-void qlFreePercentageStrikePayoff(QlPercentageStrikePayoff *o) {del(o);}-QlStrikedTypePayoff* qlPercentageStrikePayoffAsStrikedTypePayoff(QlPercentageStrikePayoff *o) {return ret(new QlStrikedTypePayoff(*arg(o)));}-void qlFreePlainVanillaPayoff(QlPlainVanillaPayoff *o) {del(o);}-QlStrikedTypePayoff* qlPlainVanillaPayoffAsStrikedTypePayoff(QlPlainVanillaPayoff *o) {return ret(new QlStrikedTypePayoff(*arg(o)));}--QlPayoff* qlPayoffFromFunction(const char* name, const char* description, PayoffFun fn, char **e) {-  try {return ret(new QlPayoff(alloc(new HsPayoff(name, description, fn))));-  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}-QlStrikedTypePayoff* qlStrikedPayoffFromFunction(int type, double strike, const char* name, PayoffFun fn, char **e) {-  try {return ret(new QlStrikedTypePayoff(alloc(new HsStrikedPayoff((Option::Type)type, strike, name, fn))));-  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}-QlBasketPayoff* qlBasketPayoffFromFunction(QlPayoff* base, BasketAccumulateFun fn, char **e) {-  try {return ret(new QlBasketPayoff(alloc(new HsBasketPayoff(*arg(base), fn))));-  } catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}--QlStrikedTypePayoff* qlAssetOrNothingPayoff(int type, double strike, char **e) {-  try {return ret(new QlStrikedTypePayoff(alloc(new AssetOrNothingPayoff((Option::Type)type, strike))));-  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}-QlBasketPayoff* qlAverageBasketPayoff(QlPayoff* p, unsigned n, char **e) {-  try {return ret(new QlBasketPayoff(alloc(new AverageBasketPayoff(*arg(p), n))));-  } catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}-QlBasketPayoff* qlAverageBasketPayoff1(QlPayoff* p, unsigned aLen, double* a, char **e) {-  try {return ret(new QlBasketPayoff(alloc(new AverageBasketPayoff(*arg(p), Array(a, a+aLen)))));-  } catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}-QlStrikedTypePayoff* qlCashOrNothingPayoff(int type, double strike, double cashPayoff, char **e) {-  try {return ret(new QlStrikedTypePayoff(alloc(new CashOrNothingPayoff((Option::Type)type, strike, cashPayoff))));-  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}-QlPayoff* qlDoubleStickyRatchetPayoff(double type1, double type2, double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e) {-  try {return ret(new QlPayoff(alloc(new DoubleStickyRatchetPayoff(type1, type2, gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));-  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}-QlTypePayoff* qlFloatingTypePayoff(int type, char **e) {try {return ret(new QlTypePayoff(alloc(new FloatingTypePayoff((Option::Type)type))));} catch (std::exception& er) {return handleException<QlTypePayoff*>(e, er);}}-QlPayoff* qlForwardTypePayoff(int type, double strike, char **e) {try {return ret(new QlPayoff(alloc(new ForwardTypePayoff((Position::Type)type, strike))));} catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}-QlStrikedTypePayoff* qlGapPayoff(int type, double strike, double secondStrike, char **e) {try {return ret(new QlStrikedTypePayoff(alloc(new GapPayoff((Option::Type)type, strike, secondStrike))));} catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}-QlBasketPayoff* qlMaxBasketPayoff(QlPayoff* p, char **e) {try {return ret(new QlBasketPayoff(alloc(new MaxBasketPayoff(*arg(p)))));} catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}-QlBasketPayoff* qlMinBasketPayoff(QlPayoff* p, char **e) {try {return ret(new QlBasketPayoff(alloc(new MinBasketPayoff(*arg(p)))));} catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}-QlPercentageStrikePayoff* qlPercentageStrikePayoff(int type, double moneyness, char **e) {-  try {return ret(new QlPercentageStrikePayoff(alloc(new PercentageStrikePayoff((Option::Type)type, moneyness))));-  } catch (std::exception& er) {return handleException<QlPercentageStrikePayoff*>(e, er);}}-QlPlainVanillaPayoff* qlPlainVanillaPayoff(int type, double strike, char **e) {-  try {return ret(new QlPlainVanillaPayoff(alloc(new PlainVanillaPayoff((Option::Type)type, strike))));-  } catch (std::exception& er) {return handleException<QlPlainVanillaPayoff*>(e, er);}}-QlPayoff* qlRatchetMaxPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e) {-  try {return ret(new QlPayoff(alloc(new RatchetMaxPayoff(gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));-  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}-QlPayoff* qlRatchetMinPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e) {-  try {return ret(new QlPayoff(alloc(new RatchetMinPayoff(gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));-  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}-QlPayoff* qlRatchetPayoff(double gearing1, double gearing2, double spread1, double spread2, double initialValue, double accrualFactor, char **e) {-  try {return ret(new QlPayoff(alloc(new RatchetPayoff(gearing1, gearing2, spread1, spread2, initialValue, accrualFactor))));-  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}-QlBasketPayoff* qlSpreadBasketPayoff(QlPayoff* p, char **e) {-  try {return ret(new QlBasketPayoff(alloc(new SpreadBasketPayoff(*arg(p)))));-  } catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}-QlPayoff* qlStickyMaxPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e) {-  try {return ret(new QlPayoff(alloc(new StickyMaxPayoff(gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));-  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}-QlPayoff* qlStickyMinPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e) {-  try {return ret(new QlPayoff(alloc(new StickyMinPayoff(gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));-  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}-QlPayoff* qlStickyPayoff(double gearing1, double gearing2, double spread1, double spread2, double initialValue, double accrualFactor, char **e) {-  try {return ret(new QlPayoff(alloc(new StickyPayoff(gearing1, gearing2, spread1, spread2, initialValue, accrualFactor))));-  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}-QlStrikedTypePayoff* qlSuperFundPayoff(double strike, double secondStrike, char **e) {-  try {return ret(new QlStrikedTypePayoff(alloc(new SuperFundPayoff(strike, secondStrike))));-  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}-QlStrikedTypePayoff* qlSuperSharePayoff(double strike, double secondStrike, double cashPayoff, char **e) {-  try {return ret(new QlStrikedTypePayoff(alloc(new SuperSharePayoff(strike, secondStrike, cashPayoff))));-  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}-void qlFreeAmericanExercise(QlAmericanExercise *o) {del(o);}-QlExercise* qlAmericanExerciseAsExercise(QlAmericanExercise *o) {return ret(new QlExercise(*arg(o)));}-void qlFreeBermudanExercise(QlBermudanExercise *o) {del(o);}-QlExercise* qlBermudanExerciseAsExercise(QlBermudanExercise *o) {return ret(new QlExercise(*arg(o)));}-void qlFreeEuropeanExercise(QlEuropeanExercise *o) {del(o);}-QlExercise* qlEuropeanExerciseAsExercise(QlEuropeanExercise *o) {return ret(new QlExercise(*arg(o)));}-void qlFreeExercise(QlExercise *o) {del(o);}-QlAmericanExercise* qlAmericanExercise(int earliestDate, int latestDate, int payoffAtExpiry, char **e) {-  try {return ret(new QlAmericanExercise(alloc(new AmericanExercise(Date(earliestDate), Date(latestDate), payoffAtExpiry))));-  } catch (std::exception& er) {return handleException<QlAmericanExercise*>(e, er);}}-QlBermudanExercise* qlBermudanExercise(unsigned datesLen, int *dates, int payoffAtExpiry, char **e) {-  try {return ret(new QlBermudanExercise(alloc(new BermudanExercise(qlDateVector(dates, datesLen), payoffAtExpiry))));-  } catch (std::exception& er) {return handleException<QlBermudanExercise*>(e, er);}}-QlExercise* qlEarlyExercise(int type, int payoffAtExpiry, char **e) {-  try {return ret(new QlExercise(alloc(new EarlyExercise((Exercise::Type)type, payoffAtExpiry))));-  } catch (std::exception& er) {return handleException<QlExercise*>(e, er);}}-QlExercise* qlExercise(int type, char **e) {try {return ret(new QlExercise(alloc(new Exercise((Exercise::Type)type))));-  } catch (std::exception& er) {return handleException<QlExercise*>(e, er);}}-QlEuropeanExercise* qlEuropeanExercise(int date, char **e) {try {return ret(new QlEuropeanExercise(alloc(new EuropeanExercise(Date(date)))));} catch (std::exception& er) {return handleException<QlEuropeanExercise*>(e, er);}}-QlSwingExercise* qlSwingExercise(unsigned datesLen, int* dates, unsigned secLen, unsigned* seconds, char **e) {-  try {std::vector<Size> secs(seconds, seconds+secLen);-    return ret(new QlSwingExercise(alloc(new SwingExercise(qlDateVector(dates, datesLen), secs))));-  } catch (std::exception& er) {return handleException<QlSwingExercise*>(e, er);}}--QlSwingExercise* qlSwingExercise1(int from, int to, unsigned stepSizeSecs, char **e) {-  try {return ret(new QlSwingExercise(alloc(new SwingExercise(Date(from), Date(to), stepSizeSecs))));-  } catch (std::exception& er) {return handleException<QlSwingExercise*>(e, er);}}-QlExercise* qlSwingExerciseAsExercise(QlSwingExercise *o) {return ret(new QlExercise(*arg(o)));}--void qlFreeRebatedExercise(QlRebatedExercise *o) {del(o);}-QlExercise* qlRebatedExerciseAsExercise(QlRebatedExercise *o) {return ret(new QlExercise(*arg(o)));}-QlRebatedExercise* qlRebatedExercise(QlExercise* exercise, double rebate, unsigned rebateSettlementDays, Calendar* rebatePaymentCalendar, int rebatePaymentConvention, char **e) {-  try {return ret(new QlRebatedExercise(alloc(new RebatedExercise(**arg(exercise), rebate, rebateSettlementDays, *arg(rebatePaymentCalendar), (BusinessDayConvention)rebatePaymentConvention))));-  } catch (std::exception& er) {return handleException<QlRebatedExercise*>(e, er);}}-QlAmericanExercise* qlAmericanExercise1(int latestDate, int payoffAtExpiry, char **e) {-  try {return ret(new QlAmericanExercise(alloc(new AmericanExercise(Date(latestDate), payoffAtExpiry))));-  } catch (std::exception& er) {return handleException<QlAmericanExercise*>(e, er);}}--void qlFreeCapFloor(QlCapFloor *o) {del(o);}-QlInstrument* qlCapFloorAsInstrument(QlCapFloor *o) {return ret(new QlInstrument(*arg(o)));}--QlCapFloor* qlCap(Leg* floatingLeg, unsigned exerciseRatesLen, double* exerciseRates, char **e) {-  try {return ret(new QlCapFloor(alloc(new Cap(*arg(floatingLeg), std::vector<double>(exerciseRates, exerciseRates+exerciseRatesLen)))));-  } catch (std::exception& er) {return handleException<QlCapFloor*>(e, er);}}-QlCapFloor* qlCollar(Leg* floatingLeg, unsigned capRatesLen, double* capRates, unsigned floorRatesLen, double* floorRates, char **e) {-  try {return ret(new QlCapFloor(alloc(new Collar(*arg(floatingLeg), std::vector<double>(capRates, capRates+capRatesLen), std::vector<double>(floorRates, floorRates+floorRatesLen)))));-  } catch (std::exception& er) {return handleException<QlCapFloor*>(e, er);}}-QlCapFloor* qlFloor(Leg* floatingLeg, unsigned exerciseRatesLen, double* exerciseRates, char **e) {-  try {return ret(new QlCapFloor(alloc(new Floor(*arg(floatingLeg), std::vector<double>(exerciseRates, exerciseRates+exerciseRatesLen)))));-  } catch (std::exception& er) {return handleException<QlCapFloor*>(e, er);}}-double qlCapFloorAtmRate(QlCapFloor* o, QlYieldTermStructure* discountCurve, char **e) {-  try {return (*arg(o))->atmRate(handleRef(arg(discountCurve)));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCapFloorImpliedVolatility(QlCapFloor* o, double price, QlYieldTermStructure* disc, double guess, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, int type, double displacement, char **e) {-  try {return (*arg(o))->impliedVolatility(price, *arg(disc), guess, accuracy, maxEvaluations, minVol, maxVol, (VolatilityType)type, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlCapFloor* qlCapFloorOptionlet(QlCapFloor* o, unsigned n, char **e) {-  try {return ret(new QlCapFloor(alloc((*arg(o))->optionlet(n))));-  } catch (std::exception& er) {return handleException<QlCapFloor*>(e, er);}}--void qlFreeCallability(QlCallability *o) {del(o);}--QlCallability* qlCallability(double price, int priceType, int type, int date, char **e) {-  try {Bond::Price p(price, (Bond::Price::Type)priceType);-    return ret(new QlCallability(alloc(new Callability(p, (Callability::Type)type, Date(date)))));-  } catch (std::exception& er) {return handleException<QlCallability*>(e, er);}}--void qlFreeForward(QlForward *fwd) {del(fwd);}-void qlFreeForwardRateAgreement(QlForwardRateAgreement *fwd) {del(fwd);}-QlInstrument* qlForwardRateAgreementAsInstrument(QlForwardRateAgreement *fwd) {return ret(new QlInstrument(*arg(fwd)));}-QlInstrument* qlForwardAsInstrument(QlForward *fwd) {return ret(new QlInstrument(*arg(fwd)));}-double qlForwardForwardValue(QlForward* o, char **e) {try {return (*arg(o))->forwardValue();} catch (std::exception& er) {return handleException<double>(e, er);}}--InterestRate* qlForwardImpliedYield(QlForward* o, double underlyingSpotValue, double forwardValue, int settlementDate, int compoundingConvention, DayCounter* dayCounter, char **e) {-  try {return ret(new InterestRate((*arg(o))->impliedYield(underlyingSpotValue, forwardValue, Date(settlementDate), (Compounding)compoundingConvention, *arg(dayCounter))));-  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}-int qlForwardSettlementDate(QlForward* o, char **e) {try {return ((*arg(o))->settlementDate()).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-double qlForwardSpotIncome(QlForward* o, QlYieldTermStructure* incomeDiscountCurve, char **e) {-  try {return (*arg(o))->spotIncome(*arg(incomeDiscountCurve));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlForwardSpotValue(QlForward* o, char **e) {try {return (*arg(o))->spotValue();} catch (std::exception& er) {return handleException<double>(e, er);}}--QlForwardRateAgreement* qlForwardRateAgreement(QlIborIndex* index, int valueDate, int maturityDate, int type, double strikeForwardRate, double notionalAmount, QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlForwardRateAgreement(alloc(new ForwardRateAgreement(*arg(index), Date(valueDate), Date(maturityDate), (Position::Type)type, strikeForwardRate, notionalAmount, qlNullableHandle(arg(discountCurve))))));-  } catch (std::exception& er) {return handleException<QlForwardRateAgreement*>(e, er);}}--void qlFreeBondForward(QlBondForward *fwd) {del(fwd);}-QlForward* qlBondForwardAsForward(QlBondForward *fwd) {return ret(new QlForward(*arg(fwd)));}--QlBondForward* qlBondForward(int valueDate, int maturityDate, int type, double strike, unsigned settlementDays, DayCounter* dayCounter, Calendar* calendar, int businessDayConvention, QlBond* bond, QlYieldTermStructure* discountCurve, QlYieldTermStructure* incomeDiscountCurve, char **e) {-  try {return ret(new QlBondForward(alloc(new BondForward(Date(valueDate), Date(maturityDate), (Position::Type)type, strike, settlementDays, *arg(dayCounter), *arg(calendar), (BusinessDayConvention)businessDayConvention, *arg(bond), qlNullableHandle(arg(discountCurve)), qlNullableHandle(arg(incomeDiscountCurve))))));-  } catch (std::exception& er) {return handleException<QlBondForward*>(e, er);}}--double qlBondForwardCleanForwardPrice(QlBondForward* o, char **e) {try {return (*arg(o))->cleanForwardPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondForwardForwardPrice(QlBondForward* o, char **e) {try {return (*arg(o))->forwardPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}-InterestRate* qlForwardRateAgreementForwardRate(QlForwardRateAgreement* o, char **e) {try {return ret(new InterestRate((*arg(o))->forwardRate()));} catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}-double qlForwardRateAgreementAmount(QlForwardRateAgreement* o, char **e) {try {return (*arg(o))->amount();} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeFxForward(QlFxForward *fwd) {del(fwd);}-QlInstrument* qlFxForwardAsInstrument(QlFxForward *fwd) {return ret(new QlInstrument(*arg(fwd)));}-QlFxForward* qlFxForward(double sourceNominal, Currency* sourceCurrency, double targetNominal, Currency* targetCurrency, int maturityDate, int paySourceCurrency, unsigned settlementDays, Calendar* paymentCalendar, char **e) {-  try {return ret(new QlFxForward(alloc(new FxForward(sourceNominal, *arg(sourceCurrency), targetNominal, *arg(targetCurrency), Date(maturityDate), paySourceCurrency, settlementDays, *arg(paymentCalendar)))));-  } catch (std::exception& er) {return handleException<QlFxForward*>(e, er);}}-QlFxForward* qlFxForward1(double sourceNominal, Currency* sourceCurrency, Currency* targetCurrency, double forwardRate, int maturityDate, int paySourceCurrency, unsigned settlementDays, Calendar* paymentCalendar, char **e) {-  try {return ret(new QlFxForward(alloc(new FxForward(sourceNominal, *arg(sourceCurrency), *arg(targetCurrency), forwardRate, Date(maturityDate), paySourceCurrency, settlementDays, *arg(paymentCalendar)))));-  } catch (std::exception& er) {return handleException<QlFxForward*>(e, er);}}-double qlFxForwardForwardRate(QlFxForward* o) {return (*arg(o))->forwardRate();}-double qlFxForwardFairForwardRate(QlFxForward* o, char **e) {try {return (*arg(o))->fairForwardRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFxForwardNpvSourceCurrency(QlFxForward* o, char **e) {try {return (*arg(o))->npvSourceCurrency();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFxForwardNpvTargetCurrency(QlFxForward* o, char **e) {try {return (*arg(o))->npvTargetCurrency();} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeSwap(QlSwap *o) {del(o);}-QlInstrument* qlSwapAsInstrument(QlSwap *o) {return ret(new QlInstrument(*arg(o)));}-void qlFreeFixedVsFloatingSwap(QlFixedVsFloatingSwap *o) {del(o);}-QlSwap* qlFixedVsFloatingSwapAsSwap(QlFixedVsFloatingSwap *o) {return ret(new QlSwap(*arg(o)));}-void qlFreeVanillaSwap(QlVanillaSwap *o) {del(o);}-QlFixedVsFloatingSwap* qlVanillaSwapAsFixedVsFloatingSwap(QlVanillaSwap *o) {return ret(new QlFixedVsFloatingSwap(*arg(o)));}-void qlFreeNonstandardSwap(QlNonstandardSwap *o) {del(o);}-QlSwap* qlNonstandardSwapAsSwap(QlNonstandardSwap *o) {return ret(new QlSwap(*arg(o)));}-void qlFreeBMASwap(QlBMASwap *o) {del(o);}-QlSwap* qlBMASwapAsSwap(QlBMASwap *o) {return ret(new QlSwap(*arg(o)));}-void qlFreeOvernightIndexedSwap(QlOvernightIndexedSwap *o) {del(o);}-QlSwap* qlOvernightIndexedSwapAsSwap(QlOvernightIndexedSwap *o) {return ret(new QlSwap(*arg(o)));}-QlSwap* qlSwap1(unsigned legsLen, Leg** legs, unsigned payerLen, int *payer, char **e) {-  try {return ret(new QlSwap(alloc(new Swap(qlVector(legs, legsLen), std::vector<bool>(payer, payer+payerLen)))));-  } catch (std::exception& er) {return handleException<QlSwap*>(e, er);}}--void qlFreeAssetSwap(QlAssetSwap *o) {del(o);}-QlSwap* qlAssetSwapAsSwap(QlAssetSwap *o) {return ret(new QlSwap(*arg(o)));}--QlAssetSwap* qlAssetSwap(int payBondCoupon, QlBond* bond, double bondCleanPrice, QlIborIndex* iborIndex, double spread, Schedule* floatSchedule, DayCounter* floatingDayCount, int parAssetSwap, double gearing, double nonParRepayment, int dealMaturity, char **e) {-  try {return ret(new QlAssetSwap(alloc(new AssetSwap(payBondCoupon, *arg(bond), bondCleanPrice, *arg(iborIndex), spread, *arg(floatSchedule), *arg(floatingDayCount), parAssetSwap, gearing, nonParRepayment, qlNullableDate(dealMaturity)))));-  } catch (std::exception& er) {return handleException<QlAssetSwap*>(e, er);}}-QlBMASwap* qlBMASwap(int type, double nominal, Schedule* liborSchedule, double liborFraction, double liborSpread, QlIborIndex* liborIndex, DayCounter* liborDayCount, Schedule* bmaSchedule, QlBMAIndex* bmaIndex, DayCounter* bmaDayCount, char **e) {-  try {return ret(new QlBMASwap(alloc(new BMASwap((BMASwap::Type)type, nominal, *arg(liborSchedule), liborFraction, liborSpread, *arg(liborIndex), *arg(liborDayCount), *arg(bmaSchedule), *arg(bmaIndex), *arg(bmaDayCount)))));-  } catch (std::exception& er) {return handleException<QlBMASwap*>(e, er);}}-QlVanillaSwap* qlVanillaSwap(int type, double nominal, Schedule* fixedSchedule, double fixedRate, DayCounter* fixedDayCount, Schedule* floatSchedule, QlIborIndex* iborIndex, double spread, DayCounter* floatingDayCount, int paymentConvention, int useIndexedCoupons, char **e) {-  try {return ret(new QlVanillaSwap(alloc(new VanillaSwap((VanillaSwap::Type)type, nominal, *arg(fixedSchedule), fixedRate, *arg(fixedDayCount), *arg(floatSchedule), *arg(iborIndex), spread, *arg(floatingDayCount), qlOptBusinessDayConvention(paymentConvention), qlOptBool(useIndexedCoupons)))));-  } catch (std::exception& er) {return handleException<QlVanillaSwap*>(e, er);}}--// Converts an existing FixedVsFloatingSwap (e.g. a VanillaSwap) into a NonstandardSwap-// (upstream's own conversion ctor, not a delegating convenience overload).-QlNonstandardSwap* qlNonstandardSwap1(QlFixedVsFloatingSwap* v, char **e) {-  try {return ret(new QlNonstandardSwap(alloc(new NonstandardSwap(**arg(v)))));-  } catch (std::exception& er) {return handleException<QlNonstandardSwap*>(e, er);}}-// Scalar gearing/spread ctor; fixedNominal/floatingNominal/fixedRate are still per-period vectors-// upstream (see nonstandardswap.hpp).-QlNonstandardSwap* qlNonstandardSwap(int type, unsigned fixedNominalLen, double* fixedNominal, unsigned floatingNominalLen, double* floatingNominal, Schedule* fixedSchedule, unsigned fixedRateLen, double* fixedRate, DayCounter* fixedDayCount, Schedule* floatingSchedule, QlIborIndex* iborIndex, double gearing, double spread, DayCounter* floatingDayCount, int intermediateCapitalExchange, int finalCapitalExchange, int paymentConvention, char **e) {-  try {return ret(new QlNonstandardSwap(alloc(new NonstandardSwap((Swap::Type)type, std::vector<double>(fixedNominal, fixedNominal+fixedNominalLen), std::vector<double>(floatingNominal, floatingNominal+floatingNominalLen), *arg(fixedSchedule), std::vector<double>(fixedRate, fixedRate+fixedRateLen), *arg(fixedDayCount), *arg(floatingSchedule), *arg(iborIndex), gearing, spread, *arg(floatingDayCount), intermediateCapitalExchange, finalCapitalExchange, qlOptBusinessDayConvention(paymentConvention)))));-  } catch (std::exception& er) {return handleException<QlNonstandardSwap*>(e, er);}}-// Vector gearing/spread ctor (full coverage: the example only uses the scalar form above).-QlNonstandardSwap* qlNonstandardSwap2(int type, unsigned fixedNominalLen, double* fixedNominal, unsigned floatingNominalLen, double* floatingNominal, Schedule* fixedSchedule, unsigned fixedRateLen, double* fixedRate, DayCounter* fixedDayCount, Schedule* floatingSchedule, QlIborIndex* iborIndex, unsigned gearingLen, double* gearing, unsigned spreadLen, double* spread, DayCounter* floatingDayCount, int intermediateCapitalExchange, int finalCapitalExchange, int paymentConvention, char **e) {-  try {return ret(new QlNonstandardSwap(alloc(new NonstandardSwap((Swap::Type)type, std::vector<double>(fixedNominal, fixedNominal+fixedNominalLen), std::vector<double>(floatingNominal, floatingNominal+floatingNominalLen), *arg(fixedSchedule), std::vector<double>(fixedRate, fixedRate+fixedRateLen), *arg(fixedDayCount), *arg(floatingSchedule), *arg(iborIndex), std::vector<double>(gearing, gearing+gearingLen), std::vector<double>(spread, spread+spreadLen), *arg(floatingDayCount), intermediateCapitalExchange, finalCapitalExchange, qlOptBusinessDayConvention(paymentConvention)))));-  } catch (std::exception& er) {return handleException<QlNonstandardSwap*>(e, er);}}-void qlNonstandardSwapFixedRate(QlNonstandardSwap* o, unsigned *len, double **out, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->fixedRate();}, len, out);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}--void qlFreeFloatFloatSwap(QlFloatFloatSwap *o) {del(o);}-QlSwap* qlFloatFloatSwapAsSwap(QlFloatFloatSwap *o) {return ret(new QlSwap(*arg(o)));}-// Scalar-nominal ctor. cappedRate1/flooredRate1/cappedRate2/flooredRate2 take Null<Real>()-// (via fromMaybeDouble's qlNullReal sentinel on the Haskell side) unchanged for "no cap/floor",-// matching upstream's own default -- no separate presence flag needed.-QlFloatFloatSwap* qlFloatFloatSwap(int type, double nominal1, double nominal2, Schedule* schedule1, QlInterestRateIndex* index1, DayCounter* dayCount1, Schedule* schedule2, QlInterestRateIndex* index2, DayCounter* dayCount2, int intermediateCapitalExchange, int finalCapitalExchange, double gearing1, double spread1, double cappedRate1, double flooredRate1, double gearing2, double spread2, double cappedRate2, double flooredRate2, int paymentConvention1, int paymentConvention2, char **e) {-  try {return ret(new QlFloatFloatSwap(alloc(new FloatFloatSwap((Swap::Type)type, nominal1, nominal2, *arg(schedule1), *arg(index1), *arg(dayCount1), *arg(schedule2), *arg(index2), *arg(dayCount2), intermediateCapitalExchange, finalCapitalExchange, gearing1, spread1, cappedRate1, flooredRate1, gearing2, spread2, cappedRate2, flooredRate2, qlOptBusinessDayConvention(paymentConvention1), qlOptBusinessDayConvention(paymentConvention2)))));-  } catch (std::exception& er) {return handleException<QlFloatFloatSwap*>(e, er);}}-// Vector-nominal ctor (full coverage; not used by the upstream example).-QlFloatFloatSwap* qlFloatFloatSwap2(int type, unsigned nominal1Len, double* nominal1, unsigned nominal2Len, double* nominal2, Schedule* schedule1, QlInterestRateIndex* index1, DayCounter* dayCount1, Schedule* schedule2, QlInterestRateIndex* index2, DayCounter* dayCount2, int intermediateCapitalExchange, int finalCapitalExchange, unsigned gearing1Len, double* gearing1, unsigned spread1Len, double* spread1, unsigned cappedRate1Len, double* cappedRate1, unsigned flooredRate1Len, double* flooredRate1, unsigned gearing2Len, double* gearing2, unsigned spread2Len, double* spread2, unsigned cappedRate2Len, double* cappedRate2, unsigned flooredRate2Len, double* flooredRate2, int paymentConvention1, int paymentConvention2, char **e) {-  try {return ret(new QlFloatFloatSwap(alloc(new FloatFloatSwap((Swap::Type)type, std::vector<double>(nominal1, nominal1+nominal1Len), std::vector<double>(nominal2, nominal2+nominal2Len), *arg(schedule1), *arg(index1), *arg(dayCount1), *arg(schedule2), *arg(index2), *arg(dayCount2), intermediateCapitalExchange, finalCapitalExchange, std::vector<double>(gearing1, gearing1+gearing1Len), std::vector<double>(spread1, spread1+spread1Len), std::vector<double>(cappedRate1, cappedRate1+cappedRate1Len), std::vector<double>(flooredRate1, flooredRate1+flooredRate1Len), std::vector<double>(gearing2, gearing2+gearing2Len), std::vector<double>(spread2, spread2+spread2Len), std::vector<double>(cappedRate2, cappedRate2+cappedRate2Len), std::vector<double>(flooredRate2, flooredRate2+flooredRate2Len), qlOptBusinessDayConvention(paymentConvention1), qlOptBusinessDayConvention(paymentConvention2)))));-  } catch (std::exception& er) {return handleException<QlFloatFloatSwap*>(e, er);}}-double qlFloatFloatSwapFairSpread1(QlFloatFloatSwap* o, char **e) {try {return (*arg(o))->fairSpread1();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFloatFloatSwapFairSpread2(QlFloatFloatSwap* o, char **e) {try {return (*arg(o))->fairSpread2();} catch (std::exception& er) {return handleException<double>(e, er);}}--QlSwap* qlSwap(Leg* firstLeg, Leg* secondLeg, char **e) {try {return ret(new QlSwap(alloc(new Swap(*arg(firstLeg), *arg(secondLeg)))));} catch (std::exception& er) {return handleException<QlSwap*>(e, er);} }-double qlSwapEndDiscounts(QlSwap* o, unsigned j, char **e) {try {return (*arg(o))->endDiscounts(j);} catch (std::exception& er) {return handleException<double>(e, er);}}-Leg* qlSwapLeg(QlSwap* o, unsigned j, char **e) {try {return ret(new Leg((*arg(o))->leg(j)));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlSwapLegBPS(QlSwap* o, unsigned j, char **e) {try {return (*arg(o))->legBPS(j);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwapLegNPV(QlSwap* o, unsigned j, char **e) {try {return (*arg(o))->legNPV(j);} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlSwapMaturityDate(QlSwap* o, char **e) {try {return qlNullableDate((*arg(o))->maturityDate());} catch (std::exception& er) {return handleException<int>(e, er);}}-double qlSwapNpvDateDiscount(QlSwap* o, char **e) {try {return (*arg(o))->npvDateDiscount();} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlSwapStartDate(QlSwap* o, char **e) {try {return qlNullableDate((*arg(o))->startDate());} catch (std::exception& er) {return handleException<int>(e, er);}}-double qlSwapStartDiscounts(QlSwap* o, unsigned j, char **e) {try {return (*arg(o))->startDiscounts(j);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFixedVsFloatingSwapFairRate(QlFixedVsFloatingSwap* o, char **e) {try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFixedVsFloatingSwapFairSpread(QlFixedVsFloatingSwap* o, char **e) {try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}-Leg* qlFixedVsFloatingSwapFixedLeg(QlFixedVsFloatingSwap* o, char **e) {try {return ret(new Leg((*arg(o))->fixedLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlFixedVsFloatingSwapFixedLegBPS(QlFixedVsFloatingSwap* o, char **e) {try {return (*arg(o))->fixedLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFixedVsFloatingSwapFixedLegNPV(QlFixedVsFloatingSwap* o, char **e) {try {return (*arg(o))->fixedLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-Leg* qlFixedVsFloatingSwapFloatingLeg(QlFixedVsFloatingSwap* o, char **e) {try {return ret(new Leg((*arg(o))->floatingLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlFixedVsFloatingSwapFloatingLegBPS(QlFixedVsFloatingSwap* o, char **e) {try {return (*arg(o))->floatingLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFixedVsFloatingSwapFloatingLegNPV(QlFixedVsFloatingSwap* o, char **e) {try {return (*arg(o))->floatingLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);} }--void qlFreeEquityTotalReturnSwap(QlEquityTotalReturnSwap *o) {del(o);}-QlSwap* qlEquityTotalReturnSwapAsSwap(QlEquityTotalReturnSwap *o) {return ret(new QlSwap(*arg(o)));}-QlEquityTotalReturnSwap* qlEquityTotalReturnSwapIbor(int type, double nominal, Schedule* schedule, QlEquityIndex* equityIndex, QlIborIndex* interestRateIndex, DayCounter* dayCounter, double margin, double gearing, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, char **e) {-  try {return ret(new QlEquityTotalReturnSwap(alloc(new EquityTotalReturnSwap((Swap::Type)type, nominal, *arg(schedule), *arg(equityIndex), *arg(interestRateIndex),-        *arg(dayCounter), margin, gearing, *arg(paymentCalendar), (BusinessDayConvention)paymentConvention, paymentDelay))));-  } catch (std::exception& er) {return handleException<QlEquityTotalReturnSwap*>(e, er);}}-QlEquityTotalReturnSwap* qlEquityTotalReturnSwapOvernight(int type, double nominal, Schedule* schedule, QlEquityIndex* equityIndex, QlOvernightIndex* interestRateIndex, DayCounter* dayCounter, double margin, double gearing, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, char **e) {-  try {return ret(new QlEquityTotalReturnSwap(alloc(new EquityTotalReturnSwap((Swap::Type)type, nominal, *arg(schedule), *arg(equityIndex), *arg(interestRateIndex),-        *arg(dayCounter), margin, gearing, *arg(paymentCalendar), (BusinessDayConvention)paymentConvention, paymentDelay))));-  } catch (std::exception& er) {return handleException<QlEquityTotalReturnSwap*>(e, er);}}-double qlEquityTotalReturnSwapEquityLegNPV(QlEquityTotalReturnSwap* o, char **e) {try {return (*arg(o))->equityLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlEquityTotalReturnSwapInterestRateLegNPV(QlEquityTotalReturnSwap* o, char **e) {try {return (*arg(o))->interestRateLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlEquityTotalReturnSwapFairMargin(QlEquityTotalReturnSwap* o, char **e) {try {return (*arg(o))->fairMargin();} catch (std::exception& er) {return handleException<double>(e, er);}}--QlOvernightIndexedSwap* qlOvernightIndexedSwap(int type, double nominal, Schedule* schedule, double fixedRate, DayCounter* fixedDC, QlOvernightIndex* overnightIndex, double spread, int paymentLag, int paymentAdjustment, Calendar* paymentCalendar, int telescopicValueDates, int averagingMethod, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift, char **e) {-  try {return ret(new QlOvernightIndexedSwap(alloc(new OvernightIndexedSwap((OvernightIndexedSwap::Type)type, nominal, *arg(schedule), fixedRate, *arg(fixedDC), *arg(overnightIndex), spread, paymentLag, (BusinessDayConvention)paymentAdjustment, *arg(paymentCalendar), telescopicValueDates, (RateAveraging::Type)averagingMethod, lookbackDays, lockoutDays, applyObservationShift))));-  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwap*>(e, er);}}--QlOvernightIndexedSwap* qlOvernightIndexedSwap1(int type, unsigned nominalsLen, double* nominals, Schedule* schedule, double fixedRate, DayCounter* fixedDC, QlOvernightIndex* overnightIndex, double spread, int paymentLag, int paymentAdjustment, Calendar* paymentCalendar, int telescopicValueDates, int averagingMethod, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift, char **e) {-  try {return ret(new QlOvernightIndexedSwap(alloc(new OvernightIndexedSwap((OvernightIndexedSwap::Type)type, std::vector<double>(nominals, nominals+nominalsLen), *arg(schedule), fixedRate, *arg(fixedDC), *arg(overnightIndex), spread, paymentLag, (BusinessDayConvention)paymentAdjustment, *arg(paymentCalendar), telescopicValueDates, (RateAveraging::Type)averagingMethod, lookbackDays, lockoutDays, applyObservationShift))));-  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwap*>(e, er);}}-void qlFreeConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencySwap *o) {del(o);}-QlSwap* qlConstNotionalCrossCurrencySwapAsSwap(QlConstNotionalCrossCurrencySwap *o) {return ret(new QlSwap(*arg(o)));}-QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencySwap(Leg* firstLeg, Currency* firstLegCcy, Leg* secondLeg, Currency* secondLegCcy, char **e) {-  try {return ret(new QlConstNotionalCrossCurrencySwap(alloc(new ConstNotionalCrossCurrencySwap(*arg(firstLeg), *arg(firstLegCcy), *arg(secondLeg), *arg(secondLegCcy)))));-  } catch (std::exception& er) {return handleException<QlConstNotionalCrossCurrencySwap*>(e, er);}}-QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencySwap1(unsigned legsLen, Leg** legs, unsigned payerLen, int* payer, unsigned currenciesLen, Currency** currencies, char **e) {-  try {return ret(new QlConstNotionalCrossCurrencySwap(alloc(new ConstNotionalCrossCurrencySwap(qlVector(legs, legsLen), std::vector<bool>(payer, payer+payerLen), qlVector(currencies, currenciesLen)))));-  } catch (std::exception& er) {return handleException<QlConstNotionalCrossCurrencySwap*>(e, er);}}-Currency* qlConstNotionalCrossCurrencySwapLegCurrency(QlConstNotionalCrossCurrencySwap* o, unsigned j, char **e) {try {return alloc(new Currency((*arg(o))->legCurrency(j)));} catch (std::exception& er) {return handleException<Currency*>(e, er);}}-double qlConstNotionalCrossCurrencySwapInCcyLegBPS(QlConstNotionalCrossCurrencySwap* o, unsigned j, char **e) {try {return (*arg(o))->inCcyLegBPS(j);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlConstNotionalCrossCurrencySwapInCcyLegNPV(QlConstNotionalCrossCurrencySwap* o, unsigned j, char **e) {try {return (*arg(o))->inCcyLegNPV(j);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlConstNotionalCrossCurrencySwapNpvDateDiscounts(QlConstNotionalCrossCurrencySwap* o, unsigned j, char **e) {try {return (*arg(o))->npvDateDiscounts(j);} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeConstNotionalCrossCurrencyBasisSwap(QlConstNotionalCrossCurrencyBasisSwap *o) {del(o);}-QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencyBasisSwapAsConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencyBasisSwap *o) {return ret(new QlConstNotionalCrossCurrencySwap(*arg(o)));}-QlConstNotionalCrossCurrencyBasisSwap* qlConstNotionalCrossCurrencyBasisSwap(-    double payNominal, Currency* payCurrency, Schedule* paySchedule, QlIborIndex* payIndex, double paySpread, double payGearing,-    double recNominal, Currency* recCurrency, Schedule* recSchedule, QlIborIndex* recIndex, double recSpread, double recGearing,-    int payPaymentLag, int recPaymentLag,-    int payCompoundSpread, unsigned payLookbackDays, int payObservationShift, unsigned payLockoutDays, int payAveragingMethod,-    int recCompoundSpread, unsigned recLookbackDays, int recObservationShift, unsigned recLockoutDays, int recAveragingMethod,-    int telescopicValueDates, char **e) {-  try {return ret(new QlConstNotionalCrossCurrencyBasisSwap(alloc(new ConstNotionalCrossCurrencyBasisSwap(-    payNominal, *arg(payCurrency), *arg(paySchedule), *arg(payIndex), paySpread, payGearing,-    recNominal, *arg(recCurrency), *arg(recSchedule), *arg(recIndex), recSpread, recGearing,-    payPaymentLag, recPaymentLag,-    payCompoundSpread, payLookbackDays, payObservationShift, payLockoutDays, (RateAveraging::Type)payAveragingMethod,-    recCompoundSpread, recLookbackDays, recObservationShift, recLockoutDays, (RateAveraging::Type)recAveragingMethod,-    telescopicValueDates))));-  } catch (std::exception& er) {return handleException<QlConstNotionalCrossCurrencyBasisSwap*>(e, er);}}-double qlConstNotionalCrossCurrencyBasisSwapFairPaySpread(QlConstNotionalCrossCurrencyBasisSwap* o, char **e) {try {return (*arg(o))->fairPaySpread();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlConstNotionalCrossCurrencyBasisSwapFairRecSpread(QlConstNotionalCrossCurrencyBasisSwap* o, char **e) {try {return (*arg(o))->fairRecSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeConstNotionalCrossCurrencyFixedVsFloatingSwap(QlConstNotionalCrossCurrencyFixedVsFloatingSwap *o) {del(o);}-QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencyFixedVsFloatingSwapAsConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencyFixedVsFloatingSwap *o) {return ret(new QlConstNotionalCrossCurrencySwap(*arg(o)));}-QlConstNotionalCrossCurrencyFixedVsFloatingSwap* qlConstNotionalCrossCurrencyFixedVsFloatingSwap(-    int type, double fixedNominal, Currency* fixedCurrency, Schedule* fixedSchedule, double fixedRate,-    DayCounter* fixedDayCount, int fixedPaymentBdc, unsigned fixedPaymentLag, Calendar* fixedPaymentCalendar,-    double floatNominal, Currency* floatCurrency, Schedule* floatSchedule, QlIborIndex* floatIndex, double floatSpread,-    int floatPaymentBdc, unsigned floatPaymentLag, Calendar* floatPaymentCalendar,-    int telescopicValueDates, int floatCompoundSpread, unsigned floatLookbackDays, int floatObservationShift,-    unsigned floatLockoutDays, int floatAveragingMethod, char **e) {-  try {return ret(new QlConstNotionalCrossCurrencyFixedVsFloatingSwap(alloc(new ConstNotionalCrossCurrencyFixedVsFloatingSwap(-    (Swap::Type)type, fixedNominal, *arg(fixedCurrency), *arg(fixedSchedule), fixedRate, *arg(fixedDayCount),-    (BusinessDayConvention)fixedPaymentBdc, fixedPaymentLag, *arg(fixedPaymentCalendar),-    floatNominal, *arg(floatCurrency), *arg(floatSchedule), *arg(floatIndex), floatSpread,-    (BusinessDayConvention)floatPaymentBdc, floatPaymentLag, *arg(floatPaymentCalendar),-    telescopicValueDates, floatCompoundSpread, floatLookbackDays, floatObservationShift,-    floatLockoutDays, (RateAveraging::Type)floatAveragingMethod))));-  } catch (std::exception& er) {return handleException<QlConstNotionalCrossCurrencyFixedVsFloatingSwap*>(e, er);}}-double qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairRate(QlConstNotionalCrossCurrencyFixedVsFloatingSwap* o, char **e) {try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairSpread(QlConstNotionalCrossCurrencyFixedVsFloatingSwap* o, char **e) {try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}--Leg* qlAssetSwapBondLeg(QlAssetSwap* o, char **e) {try {return ret(new Leg((*arg(o))->bondLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlAssetSwapCleanPrice(QlAssetSwap* o, char **e) {try {return (*arg(o))->cleanPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAssetSwapFairCleanPrice(QlAssetSwap* o, char **e) {try {return (*arg(o))->fairCleanPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAssetSwapFairNonParRepayment(QlAssetSwap* o, char **e) {try {return (*arg(o))->fairNonParRepayment();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAssetSwapFairSpread(QlAssetSwap* o, char **e) {try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}-Leg* qlAssetSwapFloatingLeg(QlAssetSwap* o, char **e) {try {return ret(new Leg((*arg(o))->floatingLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlAssetSwapFloatingLegBPS(QlAssetSwap* o, char **e) {try {return (*arg(o))->floatingLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAssetSwapFloatingLegNPV(QlAssetSwap* o, char **e) {try {return (*arg(o))->floatingLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAssetSwapNonParRepayment(QlAssetSwap* o, char **e) {try {return (*arg(o))->nonParRepayment();} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlAssetSwapParSwap(QlAssetSwap* o, char **e) {try {return (*arg(o))->parSwap();} catch (std::exception& er) {return handleException<int>(e, er);}}--void qlFreeZeroCouponInflationSwap(QlZeroCouponInflationSwap *o) {del(o);}-QlSwap* qlZeroCouponInflationSwapAsSwap(QlZeroCouponInflationSwap *o) {return ret(new QlSwap(*arg(o)));}-QlZeroCouponInflationSwap* qlZeroCouponInflationSwap(int type, double nominal, int startDate, int maturity, Calendar* cal, int paymentConvention, DayCounter* dayCounter, double fixedRate, QlZeroInflationIndex* index, int obsLagLen, int obsLagUnit, int observationInterpolation, int adjustInfObsDates, Calendar* infCalendar, int infConvention, char **e) {-  try {return ret(new QlZeroCouponInflationSwap(alloc(new ZeroCouponInflationSwap((ZeroCouponInflationSwap::Type)type, nominal, Date(startDate), Date(maturity), *arg(cal), (BusinessDayConvention)paymentConvention, *arg(dayCounter), fixedRate, *arg(index), Period(obsLagLen, (TimeUnit)obsLagUnit), (CPI::InterpolationType)observationInterpolation, adjustInfObsDates, infCalendar ? *arg(infCalendar) : Calendar(), (BusinessDayConvention)infConvention))));-  } catch (std::exception& er) {return handleException<QlZeroCouponInflationSwap*>(e, er);}}-double qlZeroCouponInflationSwapFairRate(QlZeroCouponInflationSwap* o, char **e) {try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeYearOnYearInflationSwap(QlYearOnYearInflationSwap *o) {del(o);}-QlSwap* qlYearOnYearInflationSwapAsSwap(QlYearOnYearInflationSwap *o) {return ret(new QlSwap(*arg(o)));}-QlYearOnYearInflationSwap* qlYearOnYearInflationSwap(int type, double nominal, Schedule* fixedSchedule, double fixedRate, DayCounter* fixedDayCount, Schedule* yoySchedule, QlYoYInflationIndex* yoyIndex, int obsLagLen, int obsLagUnit, int interpolation, double spread, DayCounter* yoyDayCount, Calendar* paymentCalendar, int paymentConvention, char **e) {-  try {return ret(new QlYearOnYearInflationSwap(alloc(new YearOnYearInflationSwap((YearOnYearInflationSwap::Type)type, nominal, *arg(fixedSchedule), fixedRate, *arg(fixedDayCount), *arg(yoySchedule), *arg(yoyIndex), Period(obsLagLen, (TimeUnit)obsLagUnit), (CPI::InterpolationType)interpolation, spread, *arg(yoyDayCount), *arg(paymentCalendar), (BusinessDayConvention)paymentConvention))));-  } catch (std::exception& er) {return handleException<QlYearOnYearInflationSwap*>(e, er);}}-double qlYearOnYearInflationSwapFairRate(QlYearOnYearInflationSwap* o, char **e) {try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlYearOnYearInflationSwapFairSpread(QlYearOnYearInflationSwap* o, char **e) {try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeCPISwap(QlCPISwap *o) {del(o);}-QlSwap* qlCPISwapAsSwap(QlCPISwap *o) {return ret(new QlSwap(*arg(o)));}-QlCPISwap* qlCPISwap(int type, double nominal, int subtractInflationNominal, double spread, DayCounter* floatDayCount, Schedule* floatSchedule, int floatRoll, unsigned fixingDays, QlIborIndex* floatIndex, double fixedRate, double baseCPI, DayCounter* fixedDayCount, Schedule* fixedSchedule, int fixedRoll, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* fixedIndex, int observationInterpolation, double inflationNominal, char **e) {-  try {return ret(new QlCPISwap(alloc(new CPISwap((CPISwap::Type)type, nominal, subtractInflationNominal, spread, *arg(floatDayCount), *arg(floatSchedule), (BusinessDayConvention)floatRoll, fixingDays, *arg(floatIndex), fixedRate, baseCPI, *arg(fixedDayCount), *arg(fixedSchedule), (BusinessDayConvention)fixedRoll, Period(obsLagLen, (TimeUnit)obsLagUnit), *arg(fixedIndex), (CPI::InterpolationType)observationInterpolation, inflationNominal))));-  } catch (std::exception& er) {return handleException<QlCPISwap*>(e, er);}}-double qlCPISwapFairRate(QlCPISwap* o, char **e) {try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCPISwapFairSpread(QlCPISwap* o, char **e) {try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeZeroCouponSwap(QlZeroCouponSwap *o) {del(o);}-QlSwap* qlZeroCouponSwapAsSwap(QlZeroCouponSwap *o) {return ret(new QlSwap(*arg(o)));}-QlZeroCouponSwap* qlZeroCouponSwap(int type, double baseNominal, int startDate, int maturityDate, double fixedPayment, QlIborIndex* iborIndex, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, char **e) {-  try {return ret(new QlZeroCouponSwap(alloc(new ZeroCouponSwap((Swap::Type)type, baseNominal, Date(startDate), Date(maturityDate), fixedPayment, *arg(iborIndex), *arg(paymentCalendar), (BusinessDayConvention)paymentConvention, paymentDelay))));-  } catch (std::exception& er) {return handleException<QlZeroCouponSwap*>(e, er);}}-QlZeroCouponSwap* qlZeroCouponSwap1(int type, double baseNominal, int startDate, int maturityDate, double fixedRate, DayCounter* fixedDayCounter, QlIborIndex* iborIndex, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, char **e) {-  try {return ret(new QlZeroCouponSwap(alloc(new ZeroCouponSwap((Swap::Type)type, baseNominal, Date(startDate), Date(maturityDate), fixedRate, *arg(fixedDayCounter), *arg(iborIndex), *arg(paymentCalendar), (BusinessDayConvention)paymentConvention, paymentDelay))));-  } catch (std::exception& er) {return handleException<QlZeroCouponSwap*>(e, er);}}-double qlZeroCouponSwapFairFixedPayment(QlZeroCouponSwap* o, char **e) {try {return (*arg(o))->fairFixedPayment();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlZeroCouponSwapFairFixedRate(QlZeroCouponSwap* o, DayCounter* dayCounter, char **e) {try {return (*arg(o))->fairFixedRate(*arg(dayCounter));} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlAssetSwapPayBondCoupon(QlAssetSwap* o, char **e) {try {return (*arg(o))->payBondCoupon();} catch (std::exception& er) {return handleException<int>(e, er);}}-Leg* qlBMASwapBmaLeg(QlBMASwap* o, char **e) {try {return ret(new Leg((*arg(o))->bmaLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlBMASwapBmaLegBPS(QlBMASwap* o, char **e) {try {return (*arg(o))->bmaLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBMASwapBmaLegNPV(QlBMASwap* o, char **e) {try {return (*arg(o))->bmaLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBMASwapFairLiborFraction(QlBMASwap* o, char **e) {try {return (*arg(o))->fairLiborFraction();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBMASwapFairLiborSpread(QlBMASwap* o, char **e) {try {return (*arg(o))->fairLiborSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBMASwapLiborFraction(QlBMASwap* o, char **e) {try {return (*arg(o))->liborFraction();} catch (std::exception& er) {return handleException<double>(e, er);}}-Leg* qlBMASwapLiborLeg(QlBMASwap* o, char **e) {try {return ret(new Leg((*arg(o))->liborLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlBMASwapLiborLegBPS(QlBMASwap* o, char **e) {try {return (*arg(o))->liborLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBMASwapLiborLegNPV(QlBMASwap* o, char **e) {try {return (*arg(o))->liborLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOvernightIndexedSwapFairRate(QlOvernightIndexedSwap* o, char **e) {try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOvernightIndexedSwapFairSpread(QlOvernightIndexedSwap* o, char **e) {try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}-Leg* qlOvernightIndexedSwapFixedLeg(QlOvernightIndexedSwap* o, char **e) {try {return ret(new Leg((*arg(o))->fixedLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlOvernightIndexedSwapFixedLegBPS(QlOvernightIndexedSwap* o, char **e) {try {return (*arg(o))->fixedLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOvernightIndexedSwapFixedLegNPV(QlOvernightIndexedSwap* o, char **e) {try {return (*arg(o))->fixedLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-Leg* qlOvernightIndexedSwapOvernightLeg(QlOvernightIndexedSwap* o, char **e) {try {return ret(new Leg((*arg(o))->overnightLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlOvernightIndexedSwapOvernightLegBPS(QlOvernightIndexedSwap* o, char **e) {try {return (*arg(o))->overnightLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOvernightIndexedSwapOvernightLegNPV(QlOvernightIndexedSwap* o, char **e) {try {return (*arg(o))->overnightLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeCdsOption(QlCdsOption *o) {del(o);}-QlOption* qlCdsOptionAsOption(QlCdsOption *o) {return ret(new QlOption(*arg(o)));}-void qlFreeCreditDefaultSwap(QlCreditDefaultSwap *o) {del(o);}-QlInstrument* qlCreditDefaultSwapAsInstrument(QlCreditDefaultSwap *o) {return ret(new QlInstrument(*arg(o)));}-void qlFreeClaim(QlClaim *o) {del(o);}-QlClaim* qlFaceValueAccrualClaim(QlBond* referenceSecurity, char **e) {try {return ret(new QlClaim(alloc(new FaceValueAccrualClaim(*arg(referenceSecurity)))));} catch (std::exception& er) {return handleException<QlClaim*>(e, er);}}--QlClaim* qlFaceValueClaim(char **e) {try {return ret(new QlClaim(alloc(new FaceValueClaim())));} catch (std::exception& er) {return handleException<QlClaim*>(e, er);}}-QlCreditDefaultSwap* qlCreditDefaultSwap1(int side, double notional, double upfront, double spread, Schedule* schedule, int paymentConvention, DayCounter* dayCounter, int settlesAccrual, int paysAtDefaultTime, int protectionStart, int upfrontDate, QlClaim* x11, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int tradeDate, unsigned cashSettlementDays, char **e) {-  try {return ret(new QlCreditDefaultSwap(alloc(new CreditDefaultSwap((Protection::Side)side, notional, upfront, spread, *arg(schedule), (BusinessDayConvention)paymentConvention, *arg(dayCounter), settlesAccrual, paysAtDefaultTime, qlNullableDate(protectionStart), qlNullableDate(upfrontDate), (*arg(x11)),-            *arg(lastPeriodDayCounter), rebatesAccrual, qlNullableDate(tradeDate), cashSettlementDays))));-  } catch (std::exception& er) {return handleException<QlCreditDefaultSwap*>(e, er);}}--QlCreditDefaultSwap* qlCreditDefaultSwap(int side, double notional, double spread, Schedule* schedule, int paymentConvention, DayCounter* dayCounter, int settlesAccrual, int paysAtDefaultTime, int protectionStart, QlClaim* x9, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int tradeDate, unsigned cashSettlementDays, char **e) {-  try {return ret(new QlCreditDefaultSwap(alloc(new CreditDefaultSwap((Protection::Side)side, notional, spread, *arg(schedule), (BusinessDayConvention)paymentConvention, *arg(dayCounter), settlesAccrual, paysAtDefaultTime, qlNullableDate(protectionStart), (*arg(x9)),-            *arg(lastPeriodDayCounter), rebatesAccrual, qlNullableDate(tradeDate), cashSettlementDays))));-  } catch (std::exception& er) {return handleException<QlCreditDefaultSwap*>(e, er);}}--double qlCreditDefaultSwapFairSpread(QlCreditDefaultSwap* o, char **e) {try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCreditDefaultSwapConventionalSpread(QlCreditDefaultSwap* o, double conventionalRecovery, QlYieldTermStructure* discountCurve, DayCounter* dayCounter, int model, char **e) {-  try {return (*arg(o))->conventionalSpread(conventionalRecovery, *arg(discountCurve), *arg(dayCounter), (CreditDefaultSwap::PricingModel)model);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCreditDefaultSwapCouponLegBPS(QlCreditDefaultSwap* o, char **e) {try {return (*arg(o))->couponLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCreditDefaultSwapCouponLegNPV(QlCreditDefaultSwap* o, char **e) {try {return (*arg(o))->couponLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-Leg* qlCreditDefaultSwapCoupons(QlCreditDefaultSwap* o, char **e) {try {return alloc(new Leg((*arg(o))->coupons()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-double qlCreditDefaultSwapDefaultLegNPV(QlCreditDefaultSwap* o, char **e) {try {return (*arg(o))->defaultLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCreditDefaultSwapFairUpfront(QlCreditDefaultSwap* o, char **e) {try {return (*arg(o))->fairUpfront();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCreditDefaultSwapImpliedHazardRate(QlCreditDefaultSwap* o, double targetNPV, QlYieldTermStructure* discountCurve, DayCounter* dayCounter, double recoveryRate, double accuracy, int model, char **e) {-  try {return (*arg(o))->impliedHazardRate(targetNPV, *arg(discountCurve), *arg(dayCounter), recoveryRate, accuracy, (CreditDefaultSwap::PricingModel)model);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCreditDefaultSwapUpfrontBPS(QlCreditDefaultSwap* o, char **e) {try {return (*arg(o))->upfrontBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCreditDefaultSwapUpfrontNPV(QlCreditDefaultSwap* o, char **e) {try {return (*arg(o))->upfrontNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCreditDefaultSwapAccrualRebateNPV(QlCreditDefaultSwap* o, char **e) {try {return (*arg(o))->accrualRebateNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeBarrierOption(QlBarrierOption *o) {del(o);}-QlOneAssetOption* qlBarrierOptionAsOneAssetOption(QlBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}-void qlFreeDoubleBarrierOption(QlDoubleBarrierOption *o) {del(o);}-QlOneAssetOption* qlDoubleBarrierOptionAsOneAssetOption(QlDoubleBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}-void qlFreeSoftBarrierOption(QlSoftBarrierOption *o) {del(o);}-QlOneAssetOption* qlSoftBarrierOptionAsOneAssetOption(QlSoftBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}-void qlFreeMargrabeOption(QlMargrabeOption *o) {del(o);}-QlMultiAssetOption* qlMargrabeOptionAsMultiAssetOption(QlMargrabeOption *o) {return ret(new QlMultiAssetOption(*arg(o)));}-void qlFreeEverestOption(QlEverestOption *o) {del(o);}-QlMultiAssetOption* qlEverestOptionAsMultiAssetOption(QlEverestOption *o) {return ret(new QlMultiAssetOption(*arg(o)));}-void qlFreeMultiAssetOption(QlMultiAssetOption *o) {del(o);}-QlOption* qlMultiAssetOptionAsOption(QlMultiAssetOption *o) {return ret(new QlOption(*arg(o)));}-void qlFreeOneAssetOption(QlOneAssetOption *o) {del(o);}-QlOption* qlOneAssetOptionAsOption(QlOneAssetOption *o) {return ret(new QlOption(*arg(o)));}-void qlFreeOption(QlOption *o) {del(o);}-QlInstrument* qlOptionAsInstrument(QlOption *o) {return ret(new QlInstrument(*arg(o)));}-void qlFreeQuantoVanillaOption(QlQuantoVanillaOption *o) {del(o);}-QlOneAssetOption* qlQuantoVanillaOptionAsOneAssetOption(QlQuantoVanillaOption *o) {return ret(new QlOneAssetOption(*arg(o)));}-void qlFreeSwaption(QlSwaption *o) {del(o);}-QlOption* qlSwaptionAsOption(QlSwaption *o) {return ret(new QlOption(*arg(o)));}-void qlFreeVanillaOption(QlVanillaOption *o) {del(o);}-QlOneAssetOption* qlVanillaOptionAsOneAssetOption(QlVanillaOption *o) {return ret(new QlOneAssetOption(*arg(o)));}-void qlFreeSwingExercise(QlSwingExercise *o) {del(o);}-QlBermudanExercise* qlSwingExerciseAsBermudanExercise(QlSwingExercise *o) {return ret(new QlBermudanExercise(*arg(o)));}-double qlCdsOptionAtmRate(QlCdsOption* o, char **e) {try {return (*arg(o))->atmRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlCdsOption* qlCdsOption(QlCreditDefaultSwap* swap, QlExercise* exercise, int knocksOut, char **e) {-  try {return ret(new QlCdsOption(alloc(new CdsOption(*arg(swap), *arg(exercise), knocksOut))));-  } catch (std::exception& er) {return handleException<QlCdsOption*>(e, er);}}-double qlCdsOptionImpliedVolatility(QlCdsOption* o, double price, QlYieldTermStructure* termStructure, QlDefaultProbabilityTermStructure* x3, double recoveryRate, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e) {-  try {return (*arg(o))->impliedVolatility(price, *arg(termStructure), Handle<DefaultProbabilityTermStructure>(*arg(x3)), recoveryRate, accuracy, maxEvaluations, minVol, maxVol);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCdsOptionRiskyAnnuity(QlCdsOption* o, char **e) {-  try {return (*arg(o))->riskyAnnuity();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionImpliedVolatility(QlSwaption* o, double price, QlYieldTermStructure* discountCurve, double guess, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, int type, double displacement, int priceType, char **e) {-  try {return (*arg(o))->impliedVolatility(price, *arg(discountCurve), guess, accuracy, maxEvaluations, minVol, maxVol, (VolatilityType)type, displacement, (Swaption::PriceType)priceType);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlSwaption* qlSwaption(QlFixedVsFloatingSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, char **e) {-  try {return ret(new QlSwaption(alloc(new Swaption(*arg(swap), *arg(exercise), (Settlement::Type) delivery, (Settlement::Method) settlementMethod))));-  } catch (std::exception& er) {return handleException<QlSwaption*>(e, er);}}-void qlFreeIrregularSwaption(QlIrregularSwaption* o) {del(o);}-QlOption* qlIrregularSwaptionAsOption(QlIrregularSwaption* o) {return ret(new QlOption(*arg(o)));}-QlIrregularSwaption* qlIrregularSwaption(QlIrregularSwap* swap, QlExercise* exercise, int settlement, char **e) {-  try {return ret(new QlIrregularSwaption(alloc(new IrregularSwaption(*arg(swap), *arg(exercise), (IrregularSettlement::Type)settlement))));-  } catch (std::exception& er) {return handleException<QlIrregularSwaption*>(e, er);}}-void qlFreeIrregularSwap(QlIrregularSwap* o) {del(o);}-QlSwap* qlIrregularSwapAsSwap(QlIrregularSwap* o) {return ret(new QlSwap(*arg(o)));}-QlIrregularSwap* qlIrregularSwap(int type, Leg* fixedLeg, Leg* floatingLeg, char **e) {-  try {return ret(new QlIrregularSwap(alloc(new IrregularSwap((Swap::Type)type, *arg(fixedLeg), *arg(floatingLeg)))));-  } catch (std::exception& er) {return handleException<QlIrregularSwap*>(e, er);}}-double qlIrregularSwapFairRate(QlIrregularSwap* o, char **e) {try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlIrregularSwapFairSpread(QlIrregularSwap* o, char **e) {try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeNonstandardSwaption(QlNonstandardSwaption *o) {del(o);}-QlOption* qlNonstandardSwaptionAsOption(QlNonstandardSwaption *o) {return ret(new QlOption(*arg(o)));}-// Converts an existing Swaption into a NonstandardSwaption (upstream's own conversion ctor).-QlNonstandardSwaption* qlNonstandardSwaption1(QlSwaption* fromSwaption, char **e) {-  try {return ret(new QlNonstandardSwaption(alloc(new NonstandardSwaption(**arg(fromSwaption)))));-  } catch (std::exception& er) {return handleException<QlNonstandardSwaption*>(e, er);}}-QlNonstandardSwaption* qlNonstandardSwaption(QlNonstandardSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, char **e) {-  try {return ret(new QlNonstandardSwaption(alloc(new NonstandardSwaption(*arg(swap), *arg(exercise), (Settlement::Type) delivery, (Settlement::Method) settlementMethod))));-  } catch (std::exception& er) {return handleException<QlNonstandardSwaption*>(e, er);}}-// QuantLib computes the basket according to CalibrationBasketType.-void qlNonstandardSwaptionCalibrationBasket(QlNonstandardSwaption* o, QlSwapIndex* swapBase, QlSwaptionVolatilityStructure* swaptionVol, int basketType, unsigned* len, QlBlackCalibrationHelper*** helpers, char **e) {-  OutPtrArrayResult<QlBlackCalibrationHelper> result(len, helpers);-  try {-    std::vector<ext::shared_ptr<BlackCalibrationHelper>> basket = (*arg(o))->calibrationBasket(*arg(swapBase), (*arg(swaptionVol)).currentLink(), (BasketGeneratingEngine::CalibrationBasketType)basketType);-    const unsigned n = (unsigned)basket.size();-    QlBlackCalibrationHelper **hs = result.allocate(n);-    for (unsigned i = 0; i < n; ++i) hs[i] = ret(new QlBlackCalibrationHelper(alloc(basket[i])));-    result.commit();-  } catch (std::exception& er) {handleException<int>(e, er);}}--void qlFreeFloatFloatSwaption(QlFloatFloatSwaption *o) {del(o);}-QlOption* qlFloatFloatSwaptionAsOption(QlFloatFloatSwaption *o) {return ret(new QlOption(*arg(o)));}-QlFloatFloatSwaption* qlFloatFloatSwaption(QlFloatFloatSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, char **e) {-  try {return ret(new QlFloatFloatSwaption(alloc(new FloatFloatSwaption(*arg(swap), *arg(exercise), (Settlement::Type) delivery, (Settlement::Method) settlementMethod))));-  } catch (std::exception& er) {return handleException<QlFloatFloatSwaption*>(e, er);}}-void qlFloatFloatSwaptionCalibrationBasket(QlFloatFloatSwaption* o, QlSwapIndex* swapBase, QlSwaptionVolatilityStructure* swaptionVol, int basketType, unsigned* len, QlBlackCalibrationHelper*** helpers, char **e) {-  OutPtrArrayResult<QlBlackCalibrationHelper> result(len, helpers);-  try {-    std::vector<ext::shared_ptr<BlackCalibrationHelper>> basket = (*arg(o))->calibrationBasket(*arg(swapBase), (*arg(swaptionVol)).currentLink(), (BasketGeneratingEngine::CalibrationBasketType)basketType);-    const unsigned n = (unsigned)basket.size();-    QlBlackCalibrationHelper **hs = result.allocate(n);-    for (unsigned i = 0; i < n; ++i) hs[i] = ret(new QlBlackCalibrationHelper(alloc(basket[i])));-    result.commit();-  } catch (std::exception& er) {handleException<int>(e, er);}}--void qlFreeQuantoBarrierOption(QlQuantoBarrierOption *o) {del(o);}-QlOneAssetOption* qlQuantoBarrierOptionAsOneAssetOption(QlQuantoBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}-void qlFreeQuantoDoubleBarrierOption(QlQuantoDoubleBarrierOption *o) {del(o);}-QlOneAssetOption* qlQuantoDoubleBarrierOptionAsOneAssetOption(QlQuantoDoubleBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}-void qlFreeQuantoForwardVanillaOption(QlQuantoForwardVanillaOption *o) {del(o);}-QlOneAssetOption* qlQuantoForwardVanillaOptionAsOneAssetOption(QlQuantoForwardVanillaOption *o) {return ret(new QlOneAssetOption(*arg(o)));}--QlBarrierOption* qlBarrierOption(int barrierType, double barrier, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlBarrierOption(alloc(new BarrierOption((Barrier::Type)barrierType, barrier, rebate, *arg(payoff), (*arg(exercise))))));-  } catch (std::exception& er) {return handleException<QlBarrierOption*>(e, er);}}-QlInstrument* qlTwoAssetBarrierOption(int barrierType, double barrier, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlInstrument(alloc(new TwoAssetBarrierOption((Barrier::Type)barrierType, barrier, *arg(payoff), (*arg(exercise))))));-  } catch (std::exception& er) {return handleException<QlInstrument*>(e, er);}}-double qlBarrierOptionImpliedVolatility(QlBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e) {-  try {DividendSchedule d = qlVector(dividends, dividendsLen);-    return (*arg(o))->impliedVolatility(price, *arg(process), d, accuracy, maxEvaluations, minVol, maxVol);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlOneAssetOption* qlPartialTimeBarrierOption(int barrierType, int barrierRange, double barrier, double rebate, int coverEventDate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new PartialTimeBarrierOption((Barrier::Type)barrierType, (PartialBarrier::Range)barrierRange, barrier, rebate, Date(coverEventDate), *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlDoubleBarrierOption* qlDoubleBarrierOption(int barrierType, double barrierLo, double barrierHi, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlDoubleBarrierOption(alloc(new DoubleBarrierOption((DoubleBarrier::Type)barrierType, barrierLo, barrierHi, rebate, *arg(payoff), (*arg(exercise))))));-  } catch (std::exception& er) {return handleException<QlDoubleBarrierOption*>(e, er);}}-double qlDoubleBarrierOptionImpliedVolatility(QlDoubleBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e) {-  try {return (*arg(o))->impliedVolatility(price, *arg(process), accuracy, maxEvaluations, minVol, maxVol);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlSoftBarrierOption* qlSoftBarrierOption(int barrierType, double barrierLo, double barrierHi, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlSoftBarrierOption(alloc(new SoftBarrierOption((Barrier::Type)barrierType, barrierLo, barrierHi, *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlSoftBarrierOption*>(e, er);}}-double qlSoftBarrierOptionImpliedVolatility(QlSoftBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e) {-  try {return (*arg(o))->impliedVolatility(price, *arg(process), accuracy, maxEvaluations, minVol, maxVol);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlOneAssetOption* qlSimpleChooserOption(int choosingDate, double strike, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new SimpleChooserOption(Date(choosingDate), strike, *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlComplexChooserOption(int choosingDate, double strikeCall, double strikePut, QlExercise* exerciseCall, QlExercise* exercisePut, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new ComplexChooserOption(Date(choosingDate), strikeCall, strikePut, *arg(exerciseCall), *arg(exercisePut)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlMultiAssetOption* qlTwoAssetCorrelationOption(int type, double strike1, double strike2, QlExercise* exercise, char **e) {-  try {return ret(new QlMultiAssetOption(alloc(new TwoAssetCorrelationOption((Option::Type)type, strike1, strike2, *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}-QlOneAssetOption* qlWriterExtensibleOption(QlPlainVanillaPayoff* payoff1, QlExercise* exercise1, QlPlainVanillaPayoff* payoff2, QlExercise* exercise2, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new WriterExtensibleOption(*arg(payoff1), *arg(exercise1), *arg(payoff2), *arg(exercise2)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlHolderExtensibleOption(int type, double premium, int secondExpiryDate, double secondStrike, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new HolderExtensibleOption((Option::Type)type, premium, Date(secondExpiryDate), secondStrike, *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlForwardVanillaOption(double moneyness, int resetDate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new ForwardVanillaOption(moneyness, Date(resetDate), *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlCompoundOption(QlStrikedTypePayoff* motherPayoff, QlExercise* motherExercise, QlStrikedTypePayoff* daughterPayoff, QlExercise* daughterExercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new CompoundOption(*arg(motherPayoff), *arg(motherExercise), *arg(daughterPayoff), *arg(daughterExercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-double qlMargrabeOptionDelta1(QlMargrabeOption* o, char **e) {try {return (*arg(o))->delta1();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlMargrabeOptionDelta2(QlMargrabeOption* o, char **e) {try {return (*arg(o))->delta2();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlMargrabeOptionGamma1(QlMargrabeOption* o, char **e) {try {return (*arg(o))->gamma1();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlMargrabeOptionGamma2(QlMargrabeOption* o, char **e) {try {return (*arg(o))->gamma2();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlMargrabeOption* qlMargrabeOption(int Q1, int Q2, QlExercise* x2, char **e) {try {return ret(new QlMargrabeOption(alloc(new MargrabeOption(Q1, Q2, (*arg(x2))))));} catch (std::exception& er) {return handleException<QlMargrabeOption*>(e, er);}}-double qlEverestOptionYield(QlEverestOption* o, char **e) {try {return (*arg(o))->yield();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlEverestOption* qlEverestOption(double notional, double guarantee, QlExercise* exercise, char **e) {try {return ret(new QlEverestOption(alloc(new EverestOption(notional, guarantee, *arg(exercise)))));} catch (std::exception& er) {return handleException<QlEverestOption*>(e, er);}}-double qlMultiAssetOptionDelta(QlMultiAssetOption* o, char **e) {try {return (*arg(o))->delta();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlMultiAssetOptionDividendRho(QlMultiAssetOption* o, char **e) {try {return (*arg(o))->dividendRho();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlMultiAssetOptionGamma(QlMultiAssetOption* o, char **e) {try {return (*arg(o))->gamma();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlMultiAssetOption* qlMultiAssetOption(QlPayoff* x0, QlExercise* x1, char **e) {try {return ret(new QlMultiAssetOption(alloc(new MultiAssetOption(*arg(x0), (*arg(x1))))));} catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}-double qlMultiAssetOptionRho(QlMultiAssetOption* o, char **e) {try {return (*arg(o))->rho();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlMultiAssetOptionTheta(QlMultiAssetOption* o, char **e) {try {return (*arg(o))->theta();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlMultiAssetOptionVega(QlMultiAssetOption* o, char **e) {try {return (*arg(o))->vega();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionDelta(QlOneAssetOption* o, char **e) {try {return (*arg(o))->delta();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionDeltaForward(QlOneAssetOption* o, char **e) {try {return (*arg(o))->deltaForward(); } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionDividendRho(QlOneAssetOption* o, char **e) {try {return (*arg(o))->dividendRho();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionElasticity(QlOneAssetOption* o, char **e) {try {return (*arg(o))->elasticity();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionGamma(QlOneAssetOption* o, char **e) {try {return (*arg(o))->gamma();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionItmCashProbability(QlOneAssetOption* o, char **e) {try {return (*arg(o))->itmCashProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlOneAssetOption* qlOneAssetOption(QlPayoff* x0, QlExercise* x1, char **e) {try {return ret(new QlOneAssetOption(alloc(new OneAssetOption(*arg(x0), (*arg(x1))))));} catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-double qlOneAssetOptionRho(QlOneAssetOption* o, char **e) {try {return (*arg(o))->rho();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionStrikeSensitivity(QlOneAssetOption* o, char **e) {try {return (*arg(o))->strikeSensitivity();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionTheta(QlOneAssetOption* o, char **e) {try {return (*arg(o))->theta();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionThetaPerDay(QlOneAssetOption* o, char **e) {try {return (*arg(o))->thetaPerDay();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlOneAssetOptionVega(QlOneAssetOption* o, char **e) {try {return (*arg(o))->vega();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantoBarrierOptionQlambda(QlQuantoBarrierOption* o, char **e) {try {return (*arg(o))->qlambda();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantoBarrierOptionQrho(QlQuantoBarrierOption* o, char **e) {try {return (*arg(o))->qrho();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlQuantoBarrierOption* qlQuantoBarrierOption(int barrierType, double barrier, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlQuantoBarrierOption(alloc(new QuantoBarrierOption((Barrier::Type)barrierType, barrier, rebate, *arg(payoff), (*arg(exercise))))));-  } catch (std::exception& er) {return handleException<QlQuantoBarrierOption*>(e, er);}}-double qlQuantoBarrierOptionQvega(QlQuantoBarrierOption* o, char **e) {try {return (*arg(o))->qvega();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantoDoubleBarrierOptionQlambda(QlQuantoDoubleBarrierOption* o, char **e) {try {return (*arg(o))->qlambda();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantoDoubleBarrierOptionQrho(QlQuantoDoubleBarrierOption* o, char **e) {try {return (*arg(o))->qrho();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlQuantoDoubleBarrierOption* qlQuantoDoubleBarrierOption(int barrierType, double barrierLo, double barrierHi, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlQuantoDoubleBarrierOption(alloc(new QuantoDoubleBarrierOption((DoubleBarrier::Type)barrierType, barrierLo, barrierHi, rebate, *arg(payoff), (*arg(exercise))))));-  } catch (std::exception& er) {return handleException<QlQuantoDoubleBarrierOption*>(e, er);}}-double qlQuantoDoubleBarrierOptionQvega(QlQuantoDoubleBarrierOption* o, char **e) {try {return (*arg(o))->qvega();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantoForwardVanillaOptionQlambda(QlQuantoForwardVanillaOption* o, char **e) {try {return (*arg(o))->qlambda();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantoForwardVanillaOptionQrho(QlQuantoForwardVanillaOption* o, char **e) {try {return (*arg(o))->qrho();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlQuantoForwardVanillaOption* qlQuantoForwardVanillaOption(double moneyness, int resetDate, QlStrikedTypePayoff* x2, QlExercise* x3, char **e) {-  try {return ret(new QlQuantoForwardVanillaOption(alloc(new QuantoForwardVanillaOption(moneyness, Date(resetDate), *arg(x2), *arg(x3)))));-  } catch (std::exception& er) {return handleException<QlQuantoForwardVanillaOption*>(e, er);}}-double qlQuantoForwardVanillaOptionQvega(QlQuantoForwardVanillaOption* o, char **e) {try {return (*arg(o))->qvega();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantoVanillaOptionQlambda(QlQuantoVanillaOption* o, char **e) {try {return (*arg(o))->qlambda();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantoVanillaOptionQrho(QlQuantoVanillaOption* o, char **e) {try {return (*arg(o))->qrho();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlQuantoVanillaOption* qlQuantoVanillaOption(QlStrikedTypePayoff* x0, QlExercise* x1, char **e) {-  try {return ret(new QlQuantoVanillaOption(alloc(new QuantoVanillaOption(*arg(x0), (*arg(x1))))));-  } catch (std::exception& er) {return handleException<QlQuantoVanillaOption*>(e, er);}}-double qlQuantoVanillaOptionQvega(QlQuantoVanillaOption* o, char **e) {try {return (*arg(o))->qvega();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlVanillaOptionImpliedVolatility(QlVanillaOption* o, double price, QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e) {-  try {DividendSchedule d = qlVector(dividends, dividendsLen);-    return (*arg(o))->impliedVolatility(price, *arg(process), d, accuracy, maxEvaluations, minVol, maxVol);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlVanillaOption* qlVanillaOption(QlStrikedTypePayoff* x0, QlExercise* x1, char **e) {-  try {return ret(new QlVanillaOption(alloc(new VanillaOption(*arg(x0), (*arg(x1))))));-  } catch (std::exception& er) {return handleException<QlVanillaOption*>(e, er);}}-QlMultiAssetOption* qlBasketOption(QlBasketPayoff* x0, QlExercise* x1, char **e) {-  try {return ret(new QlMultiAssetOption(alloc(new BasketOption(*arg(x0), (*arg(x1))))));-  } catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}-QlMultiAssetOption* qlHimalayaOption(unsigned fixingDatesLen, int* fixingDates, double strike, char **e) {-  try {return ret(new QlMultiAssetOption(alloc(new HimalayaOption(qlDateVector(fixingDates, fixingDatesLen), strike))));-  } catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}-QlMultiAssetOption* qlPagodaOption(unsigned fixingDatesLen, int* fixingDates, double roof, double fraction, char **e) {-  try {return ret(new QlMultiAssetOption(alloc(new PagodaOption(qlDateVector(fixingDates, fixingDatesLen), roof, fraction))));-  } catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}-QlOneAssetOption* qlCliquetOption(QlPercentageStrikePayoff* x0, QlEuropeanExercise* maturity, unsigned resetDatesLen, int* resetDates, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new CliquetOption(*arg(x0), *arg(maturity), qlDateVector(resetDates, resetDatesLen)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlContinuousAveragingAsianOption(int averageType, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new ContinuousAveragingAsianOption((Average::Type)averageType, *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlContinuousFixedLookbackOption(double currentMinmax, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new ContinuousFixedLookbackOption(currentMinmax, *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlContinuousFloatingLookbackOption(double currentMinmax, QlTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new ContinuousFloatingLookbackOption(currentMinmax, *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlContinuousPartialFloatingLookbackOption(double currentMinmax, double lambda, int lookbackPeriodEnd, QlTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new ContinuousPartialFloatingLookbackOption(currentMinmax, lambda, Date(lookbackPeriodEnd), *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlContinuousPartialFixedLookbackOption(int lookbackPeriodStart, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new ContinuousPartialFixedLookbackOption(Date(lookbackPeriodStart), *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlDiscreteAveragingAsianOption(int averageType, double runningAccumulator, unsigned pastFixings, unsigned fixingDatesLen, int* fixingDates, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new DiscreteAveragingAsianOption((Average::Type)averageType, runningAccumulator, pastFixings, qlDateVector(fixingDates, fixingDatesLen), *arg(payoff), *arg(exercise)))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlVanillaStorageOption(QlBermudanExercise* ex, double capacity, double load, double changeRate, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new VanillaStorageOption(*arg(ex), capacity, load, changeRate))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlOneAssetOption* qlVanillaSwingOption(QlStrikedTypePayoff* payoff, QlSwingExercise* ex, unsigned minExerciseRights, unsigned maxExerciseRights, char **e) {-  try {return ret(new QlOneAssetOption(alloc(new VanillaSwingOption(*arg(payoff), *arg(ex), minExerciseRights, maxExerciseRights))));-  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}-QlVanillaOption* qlEuropeanOption(QlStrikedTypePayoff* x0, QlExercise* x1, char **e) {try {return ret(new QlVanillaOption(alloc(new EuropeanOption(*arg(x0), (*arg(x1))))));} catch (std::exception& er) {return handleException<QlVanillaOption*>(e, er);}}-QlBond *qlBond(unsigned settlDays, Calendar *calendar, int issueDate, Leg *coupons, char **e) {-  try {return ret(new QlBond(alloc(new Bond(settlDays, *arg(calendar), qlNullableDate(issueDate), *arg(coupons)))));-  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}-int qlBondMaturityDate(QlBond *bond, char **e) {-  try {return qlNullableDate((*arg(bond))->maturityDate());-  } catch (std::exception& er) {return handleException<int>(e, er);}}-void qlFreeBond(QlBond *bond) {del(bond);}-void qlFreeFixedRateBond(QlFixedRateBond *bond) {del(bond);}-QlBond *qlFixedRateBondAsBond(QlFixedRateBond *bond) {return ret(new QlBond(*arg(bond)));}--void qlFreeCPIBond(QlCPIBond *bond) {del(bond);}-QlBond *qlCPIBondAsBond(QlCPIBond *bond) {return ret(new QlBond(*arg(bond)));}-QlCPIBond *qlCPIBond(unsigned settlementDays, double faceAmount, double baseCPI, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* index, int observationInterpolation, Schedule *schedule, unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate, Calendar *paymentCalendar, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, char **e) {-  try {std::vector<Rate> cpns(coupons, coupons+couponsLen);-    return ret(new QlCPIBond(alloc(new CPIBond(settlementDays, faceAmount, baseCPI, Period(obsLagLen, (TimeUnit)obsLagUnit), *arg(index),-              (CPI::InterpolationType)observationInterpolation, *arg(schedule), cpns, *arg(accrualDayCounter), (BusinessDayConvention)paymentConvention,-              qlNullableDate(issueDate), *arg(paymentCalendar), Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar),-              (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth))));-  } catch (std::exception& er) {return handleException<QlCPIBond *>(e, er);}}--QlFixedRateBond *qlFixedRateBond(unsigned settlDays, double face, Schedule *schedule, unsigned cLen, double *coupons, DayCounter *counter,-    int payConv, double redemption, int issue, Calendar *payCal, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, DayCounter* firstPeriodDayCounter, char **e) {-  try {std::vector<Rate> cpns(coupons, coupons+cLen);-    return ret(new QlFixedRateBond(alloc(new FixedRateBond(settlDays, face, *arg(schedule),-              cpns, *arg(counter), (BusinessDayConvention) payConv, redemption, qlNullableDate(issue), *arg(payCal),-              Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth,-              *arg(firstPeriodDayCounter)))));-  } catch (std::exception& er) {return handleException<QlFixedRateBond *>(e, er);}}--QlBTP *qlBtp(int maturityDate, double fixedRate, int startDate, int issueDate, char **e) {-  try {return ret(new QlBTP(alloc(new BTP(Date(maturityDate), fixedRate, qlNullableDate(startDate), qlNullableDate(issueDate)))));-  } catch (std::exception& er) {return handleException<QlBTP*>(e, er);}}-QlBTP *qlBtpWithRedemption(int maturityDate, double fixedRate, double redemption, int startDate, int issueDate, char **e) {-  try {return ret(new QlBTP(alloc(new BTP(Date(maturityDate), fixedRate, redemption, qlNullableDate(startDate), qlNullableDate(issueDate)))));-  } catch (std::exception& er) {return handleException<QlBTP*>(e, er);}}-void qlFreeBtp(QlBTP *o) {del(o);}-QlFixedRateBond *qlBtpAsFixedRateBond(QlBTP *o) {return ret(new QlFixedRateBond(*arg(o)));}--QlInstrument *qlBondAsInstrument(QlBond *b) {return ret(new QlInstrument(*arg(b)));}--QlBond *qlZeroCouponBond(int settlDays, Calendar *cal, double face, int maturity, int payConv, double redemption, int issue, char **e) {-  try {return ret(new QlBond(alloc(new ZeroCouponBond(settlDays, *arg(cal), face, Date(maturity), (BusinessDayConvention) payConv, redemption, qlNullableDate(issue)))));-  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}--QlBond *qlFloatingRateBond(unsigned settlDays, double face, Schedule *sched, QlIborIndex *index, DayCounter *dc, int payConv, unsigned fixDays,-  unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,-  int inArrears, double redemption, int issue, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, char **e) {-  try {std::vector<Real> gs(gearings, gearings+nGearings); std::vector<Spread> sps(spreads, spreads+nSpreads);-    std::vector<Rate> cs(caps, caps+nCaps); std::vector<Rate> fs(floors, floors+nFloors);-    return ret(new QlBond(alloc(new FloatingRateBond(settlDays, face, *arg(sched), *arg(index), *arg(dc), (BusinessDayConvention) payConv, fixDays, gs,-	  sps, cs, fs, inArrears, redemption, qlNullableDate(issue),-	  Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth,-	  (BusinessDayConvention)fixingConvention))));-  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}--QlBond *qlCmsRateBond(unsigned settlDays, double faceAmount, Schedule *sched, QlSwapIndex *index, DayCounter *dc,-  int payConv, unsigned fixDays, unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads,-  unsigned nCaps, double *caps, unsigned nFloors, double *floors, int inArrears, double redemption, int issue, char **e) {-  try {std::vector<Real> gs(gearings, gearings+nGearings); std::vector<Spread> sps(spreads, spreads+nSpreads);-    std::vector<Rate> cs(caps, caps+nCaps); std::vector<Rate> fs(floors, floors+nFloors);-    return ret(new QlBond(alloc(new CmsRateBond(settlDays, faceAmount, *arg(sched), *arg(index), *arg(dc),-      (BusinessDayConvention)payConv, fixDays, gs, sps, cs, fs, inArrears, redemption, qlNullableDate(issue)))));-  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}--QlBond *qlAmortizingCmsRateBond(unsigned settlementDays, unsigned notionalsLen, double *notionals, Schedule *sched,-  QlSwapIndex *index, DayCounter *dc, int payConv, unsigned fixDays, unsigned nGearings, double *gearings,-  unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,-  int inArrears, int issue, unsigned redemptionsLen, double *redemptions, char **e) {-  try {std::vector<Real> ns(notionals, notionals+notionalsLen);-    std::vector<Real> gs(gearings, gearings+nGearings); std::vector<Spread> sps(spreads, spreads+nSpreads);-    std::vector<Rate> cs(caps, caps+nCaps); std::vector<Rate> fs(floors, floors+nFloors);-    std::vector<Real> reds(redemptions, redemptions+redemptionsLen);-    return ret(new QlBond(alloc(new AmortizingCmsRateBond(settlementDays, ns, *arg(sched), *arg(index), *arg(dc),-      (BusinessDayConvention)payConv, fixDays, gs, sps, cs, fs, inArrears, qlNullableDate(issue), reds))));-  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}--QlBond *qlAmortizingFixedRateBond(unsigned settlementDays, unsigned notionalsLen, double *notionals, Schedule *schedule,-    unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate,-    int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth,-    unsigned redemptionsLen, double *redemptions, int paymentLag, char **e) {-  try {std::vector<Real> ns(notionals, notionals+notionalsLen); std::vector<Rate> cpns(coupons, coupons+couponsLen);-    std::vector<Real> reds(redemptions, redemptions+redemptionsLen);-    return ret(new QlBond(alloc(new AmortizingFixedRateBond(settlementDays, ns, *arg(schedule), cpns, *arg(accrualDayCounter),-              (BusinessDayConvention)paymentConvention, qlNullableDate(issueDate),-              Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention,-              exCouponEndOfMonth, reds, paymentLag))));-  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}--QlBond *qlAmortizingFloatingRateBond(unsigned settlementDays, unsigned notionalLen, double *notional, Schedule *schedule,-    QlIborIndex *index, DayCounter *accrualDayCounter, int paymentConvention, unsigned fixingDays,-    unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,-    int inArrears, int issueDate, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention,-    int exCouponEndOfMonth, unsigned redemptionsLen, double *redemptions, int paymentLag, char **e) {-  try {std::vector<Real> ns(notional, notional+notionalLen);-    std::vector<Real> gs(gearings, gearings+nGearings); std::vector<Spread> sps(spreads, spreads+nSpreads);-    std::vector<Rate> cs(caps, caps+nCaps); std::vector<Rate> fs(floors, floors+nFloors);-    std::vector<Real> reds(redemptions, redemptions+redemptionsLen);-    return ret(new QlBond(alloc(new AmortizingFloatingRateBond(settlementDays, ns, *arg(schedule), *arg(index), *arg(accrualDayCounter),-              (BusinessDayConvention)paymentConvention, fixingDays, gs, sps, cs, fs, inArrears, qlNullableDate(issueDate),-              Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention,-              exCouponEndOfMonth, reds, paymentLag))));-  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}--Schedule *qlSinkingSchedule(int startDate, int lengthLen, int lengthUnit, int frequency, Calendar *paymentCalendar, char **e) {-  try {return alloc(new Schedule(sinkingSchedule(Date(startDate), Period(lengthLen, (TimeUnit)lengthUnit), (Frequency)frequency, *arg(paymentCalendar))));-  } catch (std::exception& er) {return handleException<Schedule *>(e, er);}}-void qlSinkingNotionals(int lengthLen, int lengthUnit, int frequency, double couponRate, double initialNotional,-    unsigned *len, double **out, char **e) {-  try {fillVectorOut([&] {return sinkingNotionals(Period(lengthLen, (TimeUnit)lengthUnit), (Frequency)frequency, couponRate, initialNotional);}, len, out);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}--void qlBondNotionals(QlBond* o, unsigned *len, double **ns, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->notionals();}, len, ns);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-double qlBondYield(QlBond* o, DayCounter* dc, int comp, int freq, double accuracy, unsigned maxEvaluations, double guess, int priceType, char **e) {-  try {return (*arg(o))->yield(*arg(dc), (Compounding)comp, (Frequency)freq, accuracy, maxEvaluations, guess, (Bond::Price::Type)priceType);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--double qlBondAccruedAmount(QlBond* o, int d, char **e) {try {return (*arg(o))->accruedAmount(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}--double qlBondDirtyPrice1(QlBond* o, double yield, DayCounter* dc, int comp, int freq, int settlementDate, char **e) {-  try {return (*arg(o))->dirtyPrice(yield, *arg(dc), (Compounding)comp, (Frequency)freq, Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}--int qlBondNextCashFlowDate(QlBond* o, int d, char **e) {try {return qlNullableDate((*arg(o))->nextCashFlowDate(Date(d)));} catch (std::exception& er) {return handleException<int>(e, er);}}-double qlBondNextCouponRate(QlBond* o, int d, char **e) {try {return (*arg(o))->nextCouponRate(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondNotional(QlBond* o, int d, char **e) {try {return (*arg(o))->notional(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlBondPreviousCashFlowDate(QlBond* o, int d, char **e) {try {return qlNullableDate((*arg(o))->previousCashFlowDate(Date(d)));} catch (std::exception& er) {return handleException<int>(e, er);}}-double qlBondPreviousCouponRate(QlBond* o, int d, char **e) {try {return (*arg(o))->previousCouponRate(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondSettlementValue1(QlBond* o, double cleanPrice, char **e) {try {return (*arg(o))->settlementValue(cleanPrice);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondSettlementValue(QlBond* o, char **e) {try {return (*arg(o))->settlementValue();} catch (std::exception& er) {return handleException<double>(e, er);}}--double qlBondYield1(QlBond* o, double price, int priceType, DayCounter* dc, int comp, int freq, int settlementDate, double accuracy, unsigned maxEvaluations, char **e) {-  try {return (*arg(o))->yield(Bond::Price(price, (Bond::Price::Type)priceType), *arg(dc), (Compounding)comp, (Frequency)freq, Date(settlementDate), accuracy, maxEvaluations);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--int qlBondIsTradable(QlBond* o, int d, char **e) {try {return (*arg(o))->isTradable(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}-Leg* qlBondCashflows(QlBond* o, char **e) {try {return ret(new Leg((*arg(o))->cashflows()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlBondRedemptions(QlBond* o, char **e) {try {return ret(new Leg((*arg(o))->redemptions()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}-int qlBondSettlementDate(QlBond* o, int d, char **e) {try {return ((*arg(o))->settlementDate(Date(d))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlBondStartDate(QlBond* o, char **e) {try {return ((*arg(o))->startDate()).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}--int qlBondFunctionsAccrualDays(QlBond* bond, int settlementDate, char **e) {-  try {return BondFunctions::accrualDays(**arg(bond), Date(settlementDate));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlBondFunctionsAccrualEndDate(QlBond* bond, int settlementDate, char **e) {-  try {return qlNullableDate(BondFunctions::accrualEndDate(**arg(bond), Date(settlementDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlBondFunctionsAccrualPeriod(QlBond* bond, int settlementDate, char **e) {-  try {return BondFunctions::accrualPeriod(**arg(bond), Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlBondFunctionsAccrualStartDate(QlBond* bond, int settlementDate, char **e) {-  try {return qlNullableDate(BondFunctions::accrualStartDate(**arg(bond), Date(settlementDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlBondFunctionsAccruedDays(QlBond* bond, int settlementDate, char **e) {-  try {return BondFunctions::accruedDays(**arg(bond), Date(settlementDate));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlBondFunctionsAccruedPeriod(QlBond* bond, int settlementDate, char **e) {-  try {return BondFunctions::accruedPeriod(**arg(bond), Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsAtmRate(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, double price, int priceType, char **e) {-  try {return BondFunctions::atmRate(**arg(bond), handleRef(arg(discountCurve)), Date(settlementDate), Bond::Price(price, (Bond::Price::Type)priceType));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsBasisPointValue(QlBond* bond, InterestRate* yield, int settlementDate, char **e) {-  try {return BondFunctions::basisPointValue(**arg(bond), *arg(yield), Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsBps1(QlBond* bond, InterestRate* yield, int settlementDate, char **e) {-  try {return BondFunctions::bps(**arg(bond), *arg(yield), Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsBps(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, char **e) {-  try {return BondFunctions::bps(**arg(bond), handleRef(arg(discountCurve)), Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsCleanPrice2(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, char **e) {-  try {return BondFunctions::cleanPrice(**arg(bond), handleRef(arg(discountCurve)), Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsCleanPrice3(QlBond* bond, QlYieldTermStructure* discount, double zSpread, int compounding, int frequency, int settlementDate, char **e) {-  try {return BondFunctions::cleanPrice(**arg(bond), handlePtr(arg(discount)), zSpread, (Compounding)compounding, (Frequency)frequency, Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsCleanPrice4(QlBond* bond, InterestRate* yield, int settlementDate, char **e) {-  try {return BondFunctions::cleanPrice(**arg(bond), *arg(yield), Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsConvexity(QlBond* bond, InterestRate* yield, int settlementDate, char **e) {-  try {return BondFunctions::convexity(**arg(bond), *arg(yield), Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsDuration(QlBond* bond, InterestRate* yield, int type, int settlementDate, char **e) {-  try {return BondFunctions::duration(**arg(bond), *arg(yield), (Duration::Type)type, Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsNextCashFlowAmount(QlBond* bond, int refDate, char **e) {-  try {return BondFunctions::nextCashFlowAmount(**arg(bond), Date(refDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsPreviousCashFlowAmount(QlBond* bond, int refDate, char **e) {-  try {return BondFunctions::previousCashFlowAmount(**arg(bond), Date(refDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlBondFunctionsReferencePeriodEnd(QlBond* bond, int settlementDate, char **e) {-  try {return qlNullableDate(BondFunctions::referencePeriodEnd(**arg(bond), Date(settlementDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlBondFunctionsReferencePeriodStart(QlBond* bond, int settlementDate, char **e) {-  try {return qlNullableDate(BondFunctions::referencePeriodStart(**arg(bond), Date(settlementDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlBondFunctionsYield2(QlBond* bond, double price, int priceType, DayCounter* dayCounter, int compounding, int frequency, int settlementDate, double accuracy, unsigned maxIterations, double guess, char **e) {-  try {return BondFunctions::yield(**arg(bond), Bond::Price(price, (Bond::Price::Type)priceType), *arg(dayCounter), (Compounding)compounding, (Frequency)frequency, Date(settlementDate), accuracy, maxIterations, guess);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsYieldValueBasisPoint(QlBond* bond, InterestRate* yield, int settlementDate, char **e) {-  try {return BondFunctions::yieldValueBasisPoint(**arg(bond), *arg(yield), Date(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondFunctionsZSpread(QlBond* bond, double price, int priceType, QlYieldTermStructure* x2, int compounding, int frequency, int settlementDate, double accuracy, unsigned maxIterations, double guess, char **e) {-  try {return BondFunctions::zSpread(**arg(bond), Bond::Price(price, (Bond::Price::Type)priceType), handlePtr(arg(x2)), (Compounding)compounding, (Frequency)frequency, Date(settlementDate), accuracy, maxIterations, guess);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--double qlBondCleanPrice(QlBond* o, char **e) {try {return (*arg(o))->cleanPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBondDirtyPrice(QlBond* o, char **e) {try {return (*arg(o))->dirtyPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeCallableBond(QlCallableBond *o) {del(o);}-QlBond* qlCallableBondAsBond(QlCallableBond *o) {return ret(new QlBond(*arg(o)));}-void qlFreeConvertibleBond(QlConvertibleBond *o) {del(o);}-QlBond* qlConvertibleBondAsBond(QlConvertibleBond *o) {return ret(new QlBond(*arg(o)));}--QlCallableBond* qlCallableFixedRateBond(unsigned settlementDays, double faceAmount, Schedule* schedule, unsigned couponsLen, double* coupons, DayCounter* accrualDayCounter, int paymentConvention, double redemption, int issueDate, unsigned putCallScheduleLen, QlCallability** putCallSchedule, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, char **e) {-  try {return ret(new QlCallableBond(alloc(new CallableFixedRateBond(settlementDays, faceAmount, *arg(schedule), std::vector<double>(coupons, coupons+couponsLen), *arg(accrualDayCounter), (BusinessDayConvention)paymentConvention, redemption, qlNullableDate(issueDate), qlVector(putCallSchedule, putCallScheduleLen),-            Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth))));-  } catch (std::exception& er) {return handleException<QlCallableBond*>(e, er);}}-QlCallableBond* qlCallableZeroCouponBond(unsigned settlementDays, double faceAmount, Calendar* calendar, int maturityDate, DayCounter* dayCounter, int paymentConvention, double redemption, int issueDate, unsigned putCallScheduleLen, QlCallability** putCallSchedule, char **e) {-  try {return ret(new QlCallableBond(alloc(new CallableZeroCouponBond(settlementDays, faceAmount, *arg(calendar), Date(maturityDate), *arg(dayCounter), (BusinessDayConvention)paymentConvention, redemption, qlNullableDate(issueDate), qlVector(putCallSchedule, putCallScheduleLen)))));-  } catch (std::exception& er) {return handleException<QlCallableBond*>(e, er);}}-QlConvertibleBond* qlConvertibleFixedCouponBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, unsigned couponsLen, double* coupons, DayCounter* dayCounter, Schedule* schedule, double redemption, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, char **e) {-  try {return ret(new QlConvertibleBond(alloc(new ConvertibleFixedCouponBond(*arg(exercise), conversionRatio, qlVector(callability, callabilityLen), Date(issueDate), settlementDays, std::vector<double>(coupons, coupons+couponsLen), *arg(dayCounter), *arg(schedule), redemption,-            Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth))));-  } catch (std::exception& er) {return handleException<QlConvertibleBond*>(e, er);}}-QlConvertibleBond* qlConvertibleFloatingRateBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, QlIborIndex* index, unsigned fixingDays, unsigned spreadsLen, double* spreads, DayCounter* dayCounter, Schedule* schedule, double redemption, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, char **e) {-  try {return ret(new QlConvertibleBond(alloc(new ConvertibleFloatingRateBond(*arg(exercise), conversionRatio, qlVector(callability, callabilityLen), Date(issueDate), settlementDays, (*arg(index)), fixingDays, std::vector<double>(spreads, spreads+spreadsLen), *arg(dayCounter), *arg(schedule), redemption,-            Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth))));-  } catch (std::exception& er) {return handleException<QlConvertibleBond*>(e, er);}}-QlConvertibleBond* qlConvertibleZeroCouponBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, DayCounter* dayCounter, Schedule* schedule, double redemption, char **e) {-  try {return ret(new QlConvertibleBond(alloc(new ConvertibleZeroCouponBond(*arg(exercise), conversionRatio, qlVector(callability, callabilityLen), Date(issueDate), settlementDays, *arg(dayCounter), *arg(schedule), redemption))));-  } catch (std::exception& er) {return handleException<QlConvertibleBond*>(e, er);}}--QlCallability* qlSoftCallability(double price, int priceType, int date, double trigger, char **e) {-  try {Bond::Price p(price, (Bond::Price::Type)priceType); return ret(new QlCallability(alloc(new SoftCallability(p, Date(date), trigger))));-  } catch (std::exception& er) {return handleException<QlCallability*>(e, er);}}-Leg *qlLeg(unsigned len, double *amounts, int *dates, char **e) {-  try {std::unique_ptr<Leg> leg(new Leg()); leg->reserve(len);-    for (unsigned i = 0; i < len; ++i)-      leg->push_back(shared_ptr<CashFlow>(new SimpleCashFlow(amounts[i], Date(dates[i]))));-    return alloc(leg.release());-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}--void qlFreeCashFlow(QlCashFlow *o) {del(o);}-double qlCashFlowAmount(QlCashFlow *o, char **e) {try {return (*arg(o))->amount();} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlCashFlowDate(QlCashFlow *o) {return (*arg(o))->date().serialNumber();}-QlCashFlow *qlSimpleCashFlow(double amount, int date, char **e) {-  try {return ret(new QlCashFlow(alloc(new SimpleCashFlow(amount, Date(date)))));-  } catch (std::exception& er) {return handleException<QlCashFlow*>(e, er);}}-void qlFreeIndexedCashFlow(QlIndexedCashFlow *o) {del(o);}-QlCashFlow *qlIndexedCashFlowAsCashFlow(QlIndexedCashFlow *o) {return ret(new QlCashFlow(*arg(o)));}-QlIndexedCashFlow *qlIndexedCashFlow(double notional, QlIndex *index, int baseDate, int fixingDate, int paymentDate, int growthOnly, char **e) {-  try {return ret(new QlIndexedCashFlow(alloc(new IndexedCashFlow(notional, *arg(index), Date(baseDate), Date(fixingDate), Date(paymentDate), growthOnly))));-  } catch (std::exception& er) {return handleException<QlIndexedCashFlow*>(e, er);}}-double qlIndexedCashFlowBaseFixing(QlIndexedCashFlow *o, char **e) {try {return (*arg(o))->baseFixing();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlIndexedCashFlowIndexFixing(QlIndexedCashFlow *o, char **e) {try {return (*arg(o))->indexFixing();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlFixedRateCoupon *qlFixedRateCoupon(int paymentDate, double nominal, double rate, DayCounter *dayCounter, int accrualStartDate, int accrualEndDate, int refPeriodStart, int refPeriodEnd, int exCouponDate, char **e) {-  try {return ret(new QlFixedRateCoupon(alloc(new FixedRateCoupon(Date(paymentDate), nominal, rate, *arg(dayCounter), Date(accrualStartDate), Date(accrualEndDate), qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), qlNullableDate(exCouponDate)))));-  } catch (std::exception& er) {return handleException<QlFixedRateCoupon*>(e, er);}}-void qlFreeCoupon(QlCoupon *o) {del(o);}-QlCashFlow* qlCouponAsCashFlow(QlCoupon *o) {return ret(new QlCashFlow(*arg(o)));}-double qlCouponRate(QlCoupon *o, char **e) {try {return (*arg(o))->rate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCouponAccruedAmount(QlCoupon *o, int d, char **e) {try {return (*arg(o))->accruedAmount(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeFixedRateCoupon(QlFixedRateCoupon *o) {del(o);}-QlCoupon* qlFixedRateCouponAsCoupon(QlFixedRateCoupon *o) {return ret(new QlCoupon(*arg(o)));}-InterestRate* qlFixedRateCouponInterestRate(QlFixedRateCoupon *o) {return ret(new InterestRate((*arg(o))->interestRate()));}-QlFloatingRateCoupon *qlFloatingRateCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlInterestRateIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e) {-  try {return ret(new QlFloatingRateCoupon(alloc(new FloatingRateCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays, *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}-Leg *qlCashFlowLeg(unsigned len, QlCashFlow **cashFlows, char **e) {-  try {return ret(new Leg(qlVector(cashFlows, len)));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}--int qlLegStartDate(Leg *leg, char **e) {try {Date d = CashFlows::startDate(*arg(leg)); return d.serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-void qlFreeLeg(Leg *leg) {del(leg);}--Leg *qlNextCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {const Leg &l = *arg(leg);-    Leg::const_iterator i = CashFlows::nextCashFlow(l,-        includeSettlementDateFlows, qlNullableDate(settlementDate));-    return alloc(new Leg(i, l.end()));-  } catch (std::exception& er) {return handleException<Leg *>(e, er);}}-Leg *qlPreviousCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {const Leg &l = *arg(leg);-    Leg::const_reverse_iterator i = CashFlows::previousCashFlow(l,-        includeSettlementDateFlows, qlNullableDate(settlementDate));-    return alloc(new Leg(l.begin(), i.base()));-  } catch (std::exception& er) {return handleException<Leg *>(e, er);}}-void qlLegCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate,-   unsigned *al, double **amount, unsigned *dl, int **date, unsigned *hl, int **hasOccurred, char **e) {-  OutArrayResult<double> amountResult(al, amount);-  OutArrayResult<int> dateResult(dl, date);-  OutArrayResult<int> occurredResult(hl, hasOccurred);-  try {const Leg& l = *arg(leg);-    double *amounts = amountResult.allocate((unsigned)l.size());-    int *dates = dateResult.allocate((unsigned)l.size());-    int *occurred = occurredResult.allocate((unsigned)l.size());-    for (unsigned i = 0; i < l.size(); ++i) {-      amounts[i] = l[i]->amount();-      dates[i] = l[i]->date().serialNumber();-      occurred[i] = l[i]->hasOccurred(qlNullableDate(settlementDate), qlOptBool(includeSettlementDateFlows));-    }-    amountResult.commit(); dateResult.commit(); occurredResult.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}}--double qlCashFlowsDuration(Leg* leg, InterestRate* yield, int type, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return CashFlows::duration(*arg(leg), *arg(yield), (Duration::Type)type, includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlCashFlowsAccrualDays(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::accrualDays(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlCashFlowsAccrualEndDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return qlNullableDate(CashFlows::accrualEndDate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlCashFlowsAccrualPeriod(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::accrualPeriod(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlCashFlowsAccrualStartDate(Leg* leg, int includeSettlementDateFlows, int settlDate, char **e) {-  try {return qlNullableDate(CashFlows::accrualStartDate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlCashFlowsAccruedAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::accruedAmount(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlCashFlowsAccruedDays(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::accruedDays(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlCashFlowsAccruedPeriod(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::accruedPeriod(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsAtmRate(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, double npv, char **e) {-  try {return CashFlows::atmRate(*arg(leg), handleRef(arg(discountCurve)), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate), npv);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsBasisPointValue(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return CashFlows::basisPointValue(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsBps1(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return CashFlows::bps(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsBps(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return CashFlows::bps(*arg(leg), handleRef(arg(discountCurve)), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsConvexity(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return CashFlows::convexity(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlCashFlowsIsExpired(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::isExpired(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlCashFlowsMaturityDate(Leg* leg, char **e) {-  try {return (CashFlows::maturityDate(*arg(leg))).serialNumber();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlCashFlowsNextCashFlowAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::nextCashFlowAmount(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlCashFlowsNextCashFlowDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return qlNullableDate(CashFlows::nextCashFlowDate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlCashFlowsNextCouponRate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::nextCouponRate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsNominal(Leg* leg, int includeSettlementDateFlows, int settlDate, char **e) {-  try {return CashFlows::nominal(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsNpv1(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return CashFlows::npv(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsNpv3(Leg* leg, QlYieldTermStructure* discount, double zSpread, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return CashFlows::npv(*arg(leg), handlePtr(arg(discount)), zSpread, (Compounding)compounding, (Frequency)frequency, includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsNpv(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return CashFlows::npv(*arg(leg), handleRef(arg(discountCurve)), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlCashFlowsNpvbps(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, double *npv, double *bps, char **e) {-  try {-    auto r = CashFlows::npvbps(*arg(leg), handleRef(arg(discountCurve)), includeSettlementDateFlows, Date(settlementDate), Date(npvDate));-    *npv = r.first; *bps = r.second;-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-double qlCashFlowsPreviousCashFlowAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::previousCashFlowAmount(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlCashFlowsPreviousCashFlowDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return qlNullableDate(CashFlows::previousCashFlowDate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlCashFlowsPreviousCouponRate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e) {-  try {return CashFlows::previousCouponRate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlCashFlowsReferencePeriodEnd(Leg* leg, int includeSettlementDateFlows, int settlDate, char **e) {-  try {return qlNullableDate(CashFlows::referencePeriodEnd(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlCashFlowsReferencePeriodStart(Leg* leg, int includeSettlementDateFlows, int settlDate, char **e) {-  try {return qlNullableDate(CashFlows::referencePeriodStart(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlDate)));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlCashFlowsYield(Leg* leg, double npv, DayCounter* dayCounter, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, double accuracy, unsigned maxIterations, double guess, char **e) {-  try {return CashFlows::yield(*arg(leg), npv, *arg(dayCounter), (Compounding)compounding, (Frequency)frequency, includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate), accuracy, maxIterations, guess);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsYieldValueBasisPoint(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return CashFlows::yieldValueBasisPoint(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCashFlowsZSpread(Leg* leg, double npv, QlYieldTermStructure* x2, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, double accuracy, unsigned maxIterations, double guess, char **e) {-  try {return CashFlows::zSpread(*arg(leg), npv, handlePtr(arg(x2)), (Compounding)compounding, (Frequency)frequency, includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate), accuracy, maxIterations, guess);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlQuantLibSetCouponPricer(Leg* leg, QlFloatingRateCouponPricer* x1, char **e) {try {return setCouponPricer(*arg(leg), *arg(x1));} catch (std::exception& er) {(void)handleException<int>(e, er);} }-void qlQuantLibSetCouponPricers(Leg* leg, unsigned x1Len, QlFloatingRateCouponPricer** x1, char **e) {try {return setCouponPricers(*arg(leg), qlVector(x1, x1Len));} catch (std::exception& er) {(void)handleException<int>(e, er);}}--void qlCouponAccrualStartDates(CouponLeg* o, unsigned *len, int **days, char **e) {-  OutArrayResult<int> result(len, days);-  try {-    int *out = result.allocate((unsigned)o->size());-    for (unsigned i = 0; i < o->size(); ++i)-      out[i] = ((*o)[i]->accrualStartDate()).serialNumber();-    result.commit();-  } catch (std::exception& er) {handleException<int*>(e, er);}}--void qlCouponLegCoupons(CouponLeg* o, unsigned *len, QlCoupon ***out, char **e) {-  OutPtrArrayResult<QlCoupon> result(len, out);-  try {-    QlCoupon **cs = result.allocate((unsigned)o->size());-    for (unsigned i = 0; i < o->size(); ++i)-      cs[i] = ret(new QlCoupon((*o)[i]));-    result.commit();-  } catch (std::exception& er) {handleException<int>(e, er);}}--void qlFreeDividend(QlDividend *o) {del(o);}-void qlFreeCouponLeg(CouponLeg *o) {del(o);}-Leg* qlCouponLegAsLeg(CouponLeg *o) {return alloc(new Leg(o->begin(), o->end()));}-void qlFreeFloatingCouponPricer(QlFloatingRateCouponPricer *p) {del(p);}--QlDividend* qlFixedDividend(double amount, int date, char **e) {try {return ret(new QlDividend(alloc(new FixedDividend(amount, Date(date)))));} catch (std::exception& er) {return handleException<QlDividend*>(e, er);} }-QlDividend* qlFractionalDividend1(double rate, double nominal, int date, char **e) {-  try {return ret(new QlDividend(alloc(new FractionalDividend(rate, nominal, Date(date)))));-  } catch (std::exception& er) {return handleException<QlDividend*>(e, er);}}-QlDividend* qlFractionalDividend(double rate, int date, char **e) {-  try {return ret(new QlDividend(alloc(new FractionalDividend(rate, Date(date)))));-  } catch (std::exception& er) {return handleException<QlDividend*>(e, er);}}-Leg* qlAverageBMALeg(Schedule* schedule, QlBMAIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, char **e) {-  try {return alloc(new Leg(AverageBMALeg(*arg(schedule), *arg(index)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))-        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlFixedRateLeg(Schedule* schedule, unsigned NotionalsLen, double* Notionals, unsigned couponRatesLen, InterestRate** couponRates, int paymentAdjustment, DayCounter* firstPeriodDayCounter, Calendar* paymentCalendar, char **e) {-  try {return alloc(new Leg(FixedRateLeg(*arg(schedule)).withNotionals(std::vector<double>(Notionals, Notionals+NotionalsLen)).withCouponRates(qlVector(couponRates, couponRatesLen))-        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFirstPeriodDayCounter(*arg(firstPeriodDayCounter)).withPaymentCalendar(*arg(paymentCalendar))));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlIborLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments,-  int paymentLag, Calendar* paymentCalendar, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, int useIndexedCoupons, char **e) {-  try {return alloc(new Leg(IborLeg(*arg(schedule), *arg(index)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))-        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<unsigned>(fixingDays, fixingDays+fixingDaysLen))-        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))-        .withCaps(std::vector<double>(caps, caps+capsLen)).withFloors(std::vector<double>(floors, floors+floorsLen)).inArrears(inArrears).withZeroPayments(zeroPayments)-        .withPaymentLag(paymentLag).withPaymentCalendar(*arg(paymentCalendar))-        .withExCouponPeriod(Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth)-        .withFixingConvention((BusinessDayConvention)fixingConvention).withIndexedCoupons(qlOptBool(useIndexedCoupons))));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlCmsLeg(Schedule* schedule, QlSwapIndex* swapIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments,-  int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, char **e) {-  try {return alloc(new Leg(CmsLeg(*arg(schedule), *arg(swapIndex)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))-        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<unsigned>(fixingDays, fixingDays+fixingDaysLen))-        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))-        .withCaps(std::vector<double>(caps, caps+capsLen)).withFloors(std::vector<double>(floors, floors+floorsLen)).inArrears(inArrears).withZeroPayments(zeroPayments)-        .withExCouponPeriod(Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth)-        .withFixingConvention((BusinessDayConvention)fixingConvention)));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlOvernightLeg(Schedule* schedule, QlOvernightIndex* overnightIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, char **e) {-  try {return alloc(new Leg(OvernightLeg(*arg(schedule), *arg(overnightIndex)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))-        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlRangeAccrualLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned lowerTriggersLen, double* lowerTriggers, unsigned upperTriggersLen, double* upperTriggers, int l, int u, int observationConvention, char **e) {-  try {return alloc(new Leg(RangeAccrualLeg(*arg(schedule), *arg(index)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))-        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<unsigned>(fixingDays, fixingDays+fixingDaysLen))-        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen)).-        withLowerTriggers(std::vector<double>(lowerTriggers, lowerTriggers+lowerTriggersLen)).withUpperTriggers(std::vector<double>(upperTriggers, upperTriggers+upperTriggersLen))-        .withObservationTenor(Period(l, (TimeUnit)u)).withObservationConvention((BusinessDayConvention)observationConvention)));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlCPILeg(Schedule* schedule, QlZeroInflationIndex* index, double baseCPI, int obsLagLen, int obsLagUnit, unsigned notionalsLen, double* notionals, unsigned fixedRatesLen, double* fixedRates, DayCounter* paymentDayCounter, int paymentAdjustment, Calendar* paymentCalendar, int observationInterpolation, int subtractInflationNominal, char **e) {-  try {return alloc(new Leg(CPILeg(*arg(schedule), *arg(index), baseCPI, Period(obsLagLen, (TimeUnit)obsLagUnit))-        .withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withFixedRates(std::vector<double>(fixedRates, fixedRates+fixedRatesLen))-        .withPaymentDayCounter(*arg(paymentDayCounter)).withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withPaymentCalendar(*arg(paymentCalendar))-        .withObservationInterpolation((CPI::InterpolationType)observationInterpolation).withSubtractInflationNominal(subtractInflationNominal)));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlYoYInflationLeg(Schedule* schedule, Calendar* cal, QlYoYInflationIndex* index, int obsLagLen, int obsLagUnit, int interpolation, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, char **e) {-  try {return alloc(new Leg(yoyInflationLeg(*arg(schedule), *arg(cal), *arg(index), Period(obsLagLen, (TimeUnit)obsLagUnit), (CPI::InterpolationType)interpolation)-        .withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))-        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<Natural>(fixingDays, fixingDays+fixingDaysLen))-        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))-        .withCaps(std::vector<double>(caps, caps+capsLen)).withFloors(std::vector<double>(floors, floors+floorsLen))));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}--/* YoYInflationCouponPricer -- all 3 concrete pricers share this ctor shape (caplet vol handle,-   nominal discount curve handle); mirrors the 3 YoY cap/floor engines in qlInflationVol.cpp. */-QlYoYInflationCouponPricer *qlBlackYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, char **e) {-  try {return ret(new QlYoYInflationCouponPricer(alloc(new BlackYoYInflationCouponPricer(*arg(vol), *arg(nominalTs)))));-  } catch (std::exception& er) {return handleException<QlYoYInflationCouponPricer*>(e, er);}}-QlYoYInflationCouponPricer *qlUnitDisplacedBlackYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, char **e) {-  try {return ret(new QlYoYInflationCouponPricer(alloc(new UnitDisplacedBlackYoYInflationCouponPricer(*arg(vol), *arg(nominalTs)))));-  } catch (std::exception& er) {return handleException<QlYoYInflationCouponPricer*>(e, er);}}-QlYoYInflationCouponPricer *qlBachelierYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, char **e) {-  try {return ret(new QlYoYInflationCouponPricer(alloc(new BachelierYoYInflationCouponPricer(*arg(vol), *arg(nominalTs)))));-  } catch (std::exception& er) {return handleException<QlYoYInflationCouponPricer*>(e, er);}}-void qlFreeYoYInflationCouponPricer(QlYoYInflationCouponPricer *p) {del(p);}-void qlSetYoYInflationCouponPricer(Leg* leg, QlYoYInflationCouponPricer* pricer, char **e) {-  try {return setCouponPricer(*arg(leg), *arg(pricer));} catch (std::exception& er) {(void)handleException<int>(e, er);}}--void qlFreeZeroInflationCashFlow(QlZeroInflationCashFlow *o) {del(o);}-QlIndexedCashFlow *qlZeroInflationCashFlowAsIndexedCashFlow(QlZeroInflationCashFlow *o) {return ret(new QlIndexedCashFlow(*arg(o)));}-QlZeroInflationCashFlow* qlZeroInflationCashFlow(double notional, QlZeroInflationIndex* index, int observationInterpolation, int startDate, int endDate, int obsLagLen, int obsLagUnit, int paymentDate, int growthOnly, char **e) {-  try {return ret(new QlZeroInflationCashFlow(alloc(new ZeroInflationCashFlow(notional, *arg(index), (CPI::InterpolationType)observationInterpolation,-        Date(startDate), Date(endDate), Period(obsLagLen, (TimeUnit)obsLagUnit), Date(paymentDate), growthOnly))));-  } catch (std::exception& er) {return handleException<QlZeroInflationCashFlow*>(e, er);}}--void qlFreeCPICashFlow(QlCPICashFlow *o) {del(o);}-QlIndexedCashFlow *qlCPICashFlowAsIndexedCashFlow(QlCPICashFlow *o) {return ret(new QlIndexedCashFlow(*arg(o)));}-QlCPICashFlow* qlCPICashFlow(double notional, QlZeroInflationIndex* index, int baseDate, double baseFixing, int observationDate, int obsLagLen, int obsLagUnit, int interpolation, int paymentDate, int growthOnly, char **e) {-  try {return ret(new QlCPICashFlow(alloc(new CPICashFlow(notional, *arg(index), qlNullableDate(baseDate), baseFixing,-        Date(observationDate), Period(obsLagLen, (TimeUnit)obsLagUnit), (CPI::InterpolationType)interpolation, Date(paymentDate), growthOnly))));-  } catch (std::exception& er) {return handleException<QlCPICashFlow*>(e, er);}}--void qlFreeEquityCashFlow(QlEquityCashFlow *o) {del(o);}-QlIndexedCashFlow *qlEquityCashFlowAsIndexedCashFlow(QlEquityCashFlow *o) {return ret(new QlIndexedCashFlow(*arg(o)));}-QlEquityCashFlow* qlEquityCashFlow(double notional, QlEquityIndex* index, int baseDate, int fixingDate, int paymentDate, int growthOnly, char **e) {-  try {return ret(new QlEquityCashFlow(alloc(new EquityCashFlow(notional, *arg(index),-        Date(baseDate), Date(fixingDate), Date(paymentDate), growthOnly))));-  } catch (std::exception& er) {return handleException<QlEquityCashFlow*>(e, er);}}-void qlEquityCashFlowSetPricer(QlEquityCashFlow* o, QlEquityCashFlowPricer* pricer, char **e) {-  try {(*arg(o))->setPricer(*arg(pricer));-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}--void qlFreeEquityCashFlowPricer(QlEquityCashFlowPricer *o) {del(o);}-QlEquityCashFlowPricer* qlEquityQuantoCashFlowPricer(QlYieldTermStructure* quantoCurrencyTermStructure, QlBlackVolTermStructure* equityVolatility, QlBlackVolTermStructure* fxVolatility, QlQuote* correlation, char **e) {-  try {return ret(new QlEquityCashFlowPricer(alloc(new EquityQuantoCashFlowPricer(*arg(quantoCurrencyTermStructure),-        *arg(equityVolatility), *arg(fxVolatility), *arg(correlation)))));-  } catch (std::exception& er) {return handleException<QlEquityCashFlowPricer*>(e, er);}}-void qlQuantLibSetEquityCashFlowPricer(Leg* leg, QlEquityCashFlowPricer* pricer, char **e) {-  try {setCouponPricer(*arg(leg), *arg(pricer));-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}--CouponLeg* qlLegToCouponLeg(Leg *o, char **e) {-  try {std::unique_ptr<CouponLeg> cl(new CouponLeg()); cl->reserve(o->size());-    for (unsigned i = 0; i < o->size(); ++i) {-      shared_ptr<Coupon> c = coupon_cast((*o)[i]);-      if (c != nullptr) cl->push_back(c);-      else QL_FAIL("Cash flow #" << i << " is not a coupon");-    }-    return alloc(cl.release());-  } catch (std::exception& er) {return handleException<CouponLeg*>(e, er);}}--QlFloatingRateCouponPricer *qlBlackIborCouponPricer(QlOptionletVolatilityStructure *vol, int timingAdjustment, QlQuote *correlation, int useIndexedCoupon, char **e) {-  try {Handle<Quote> corr = qlNullableHandleOr(correlation, [] { return shared_ptr<Quote>(alloc(new SimpleQuote(1.0))); });-    return ret(new QlFloatingRateCouponPricer(alloc(new BlackIborCouponPricer(*arg(vol), (BlackIborCouponPricer::TimingAdjustment)timingAdjustment, corr, qlOptBool(useIndexedCoupon)))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer *>(e, er);}}-QlFloatingRateCouponPricer *qlBlackIborQuantoCouponPricer(QlBlackVolTermStructure *fxRateBlackVolatility, QlQuote *underlyingFxCorrelation, QlOptionletVolatilityStructure *capletVolatility, char **e) {-  try {return ret(new QlFloatingRateCouponPricer(alloc(new BlackIborQuantoCouponPricer(*arg(fxRateBlackVolatility), *arg(underlyingFxCorrelation), *arg(capletVolatility)))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer *>(e, er);}}-void qlFreeCmsCouponPricer(QlCmsCouponPricer *p) {del(p);}-QlFloatingRateCouponPricer* qlCmsCouponPricerAsFloatingRateCouponPricer(QlCmsCouponPricer* p) {return ret(new QlFloatingRateCouponPricer(*arg(p)));}-QlCmsCouponPricer* qlAnalyticHaganPricer(QlSwaptionVolatilityStructure* swaptionVol, int modelOfYieldCurve, QlQuote* meanReversion, char **e) {-  try {return ret(new QlCmsCouponPricer(alloc(new AnalyticHaganPricer(*arg(swaptionVol), (GFunctionFactory::YieldCurveModel)modelOfYieldCurve, *arg(meanReversion)))));-  } catch (std::exception& er) {return handleException<QlCmsCouponPricer*>(e, er);}}-QlCmsCouponPricer* qlNumericHaganPricer(QlSwaptionVolatilityStructure* swaptionVol, int modelOfYieldCurve, QlQuote* meanReversion, double lowerLimit, double upperLimit, double precision, double hardUpperLimit, char **e) {-  try {return ret(new QlCmsCouponPricer(alloc(new NumericHaganPricer(*arg(swaptionVol), (GFunctionFactory::YieldCurveModel)modelOfYieldCurve, *arg(meanReversion), lowerLimit, upperLimit, precision, hardUpperLimit))));-  } catch (std::exception& er) {return handleException<QlCmsCouponPricer*>(e, er);}}-QlCmsCouponPricer* qlLinearTsrPricer(QlSwaptionVolatilityStructure* swaptionVol, QlQuote* meanReversion, QlYieldTermStructure* couponDiscountCurve, int strategy, double param, int haveBounds, double lowerBound, double upperBound, char **e) {-  try {-    LinearTsrPricer::Settings settings;-    switch (strategy) {-      case hasquant::LinearTsrPricerRateBound: haveBounds ? settings.withRateBound(lowerBound, upperBound) : settings.withRateBound(); break;-      case hasquant::LinearTsrPricerVegaRatio: haveBounds ? settings.withVegaRatio(param, lowerBound, upperBound) : settings.withVegaRatio(param); break;-      case hasquant::LinearTsrPricerPriceThreshold: haveBounds ? settings.withPriceThreshold(param, lowerBound, upperBound) : settings.withPriceThreshold(param); break;-      case hasquant::LinearTsrPricerBSStdDevs: haveBounds ? settings.withBSStdDevs(param, lowerBound, upperBound) : settings.withBSStdDevs(param); break;-      default: QL_FAIL("unknown LinearTsrPricer strategy " << strategy);-    }-    return ret(new QlCmsCouponPricer(alloc(new LinearTsrPricer(*arg(swaptionVol), *arg(meanReversion),-        qlNullableHandle(couponDiscountCurve), settings))));-  } catch (std::exception& er) {return handleException<QlCmsCouponPricer*>(e, er);}}-QlFloatingRateCouponPricer* qlRangeAccrualPricerByBgm(double correlation, QlSmileSection* smilesOnExpiry, QlSmileSection* smilesOnPayment, int withSmile, int byCallSpread, char **e) {-  try {return ret(new QlFloatingRateCouponPricer(alloc(new RangeAccrualPricerByBgm(correlation, *arg(smilesOnExpiry), *arg(smilesOnPayment), withSmile, byCallSpread))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}--void qlFreeFloatingRateCoupon(QlFloatingRateCoupon *o) {del(o);}-void qlFreeIborCoupon(QlIborCoupon *o) {del(o);}-QlFloatingRateCoupon* qlIborCouponAsFloatingRateCoupon(QlIborCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}-QlIborCoupon* qlIborCouponExact(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlIborIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e) {-  try {return ret(new QlIborCoupon(alloc(new IborCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays, *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));-  } catch (std::exception& er) {return handleException<QlIborCoupon*>(e, er);}}-void qlFreeAverageBMACoupon(QlAverageBMACoupon *o) {del(o);}-QlFloatingRateCoupon* qlAverageBMACouponAsFloatingRateCoupon(QlAverageBMACoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}-QlAverageBMACoupon* qlAverageBMACoupon(int paymentDate, double nominal, int startDate, int endDate, QlBMAIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, char **e) {-  try {return ret(new QlAverageBMACoupon(alloc(new AverageBMACoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter)))));-  } catch (std::exception& er) {return handleException<QlAverageBMACoupon*>(e, er);}}-void qlAverageBMACouponFixingDates(QlAverageBMACoupon *o, unsigned *len, int **ds, char **e) {-  OutArrayResult<int> result(len, ds);-  try {const std::vector<Date>& d = (*arg(o))->fixingDates(); int *out = result.allocate((unsigned)d.size());-    std::transform(d.begin(), d.end(), out, [](const Date& x) {return (int)x.serialNumber();});-    result.commit();-  } catch (std::exception& er) {(void)handleException<int*>(e, er);}}-void qlAverageBMACouponIndexFixings(QlAverageBMACoupon *o, unsigned *len, double **fs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->indexFixings();}, len, fs);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-QlFloatingRateCoupon* qlCappedFlooredCoupon(QlFloatingRateCoupon *underlying, double cap, double floor, char **e) {-  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredCoupon(*arg(underlying), cap, floor))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}-void qlFreeStrippedCappedFlooredCoupon(QlStrippedCappedFlooredCoupon *o) {del(o);}-QlFloatingRateCoupon* qlStrippedCappedFlooredCouponAsFloatingRateCoupon(QlStrippedCappedFlooredCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}-QlStrippedCappedFlooredCoupon* qlStrippedCappedFlooredCoupon(QlFloatingRateCoupon *underlying, double cap, double floor, char **e) {-  try {auto capped = ext::make_shared<CappedFlooredCoupon>(*arg(underlying), cap, floor);-    return ret(new QlStrippedCappedFlooredCoupon(alloc(new StrippedCappedFlooredCoupon(capped))));-  } catch (std::exception& er) {return handleException<QlStrippedCappedFlooredCoupon*>(e, er);}}-double qlStrippedCappedFlooredCouponCap(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->cap();}-double qlStrippedCappedFlooredCouponFloor(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->floor();}-double qlStrippedCappedFlooredCouponEffectiveCap(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->effectiveCap();}-double qlStrippedCappedFlooredCouponEffectiveFloor(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->effectiveFloor();}-int qlStrippedCappedFlooredCouponIsCap(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->isCap();}-int qlStrippedCappedFlooredCouponIsFloor(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->isFloor();}-int qlStrippedCappedFlooredCouponIsCollar(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->isCollar();}-QlFloatingRateCoupon* qlCappedFlooredIborCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlIborIndex *index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e) {-  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredIborCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays, *arg(index), gearing, spread, cap, floor, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}-QlDigitalCoupon* qlDigitalIborCoupon(QlIborCoupon *underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication *replication, int nakedOption, char **e) {-  try {return ret(new QlDigitalCoupon(alloc(new DigitalIborCoupon(*arg(underlying), callStrike, (Position::Type)callPosition, callATM, callPayoff, putStrike, (Position::Type)putPosition, putATM, putPayoff, replication ? *arg(replication) : shared_ptr<DigitalReplication>(), nakedOption))));-  } catch (std::exception& er) {return handleException<QlDigitalCoupon*>(e, er);}}-void qlFreeDigitalCoupon(QlDigitalCoupon* o) {del(o);}-QlFloatingRateCoupon* qlDigitalCouponAsFloatingRateCoupon(QlDigitalCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}-QlDigitalCoupon* qlDigitalCoupon(QlFloatingRateCoupon *underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication *replication, int nakedOption, char **e) {-  try {return ret(new QlDigitalCoupon(alloc(new DigitalCoupon(*arg(underlying), callStrike, (Position::Type)callPosition, callATM, callPayoff, putStrike, (Position::Type)putPosition, putATM, putPayoff, replication ? *arg(replication) : shared_ptr<DigitalReplication>(), nakedOption))));-  } catch (std::exception& er) {return handleException<QlDigitalCoupon*>(e, er);}}-double qlDigitalCouponCallOptionRate(QlDigitalCoupon* o, char **e) {try {return (*arg(o))->callOptionRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDigitalCouponPutOptionRate(QlDigitalCoupon* o, char **e) {try {return (*arg(o))->putOptionRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeMultipleResetsCoupon(QlMultipleResetsCoupon *o) {del(o);}-QlFloatingRateCoupon* qlMultipleResetsCouponAsFloatingRateCoupon(QlMultipleResetsCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}-QlMultipleResetsCoupon* qlMultipleResetsCoupon(int paymentDate, double nominal, Schedule *schedule, unsigned fixingDays, QlIborIndex *index, double gearing, double couponSpread, double rateSpread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int exCouponDate, char **e) {-  try {return ret(new QlMultipleResetsCoupon(alloc(new MultipleResetsCoupon(Date(paymentDate), nominal, *arg(schedule), fixingDays, *arg(index), gearing, couponSpread, rateSpread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), qlNullableDate(exCouponDate)))));-  } catch (std::exception& er) {return handleException<QlMultipleResetsCoupon*>(e, er);}}-void qlMultipleResetsCouponFixingDates(QlMultipleResetsCoupon *o, unsigned *len, int **dates, char **e) {-  OutArrayResult<int> result(len, dates);-  try {const std::vector<Date>& ds = (*arg(o))->fixingDates();-    int *out = result.allocate((unsigned)ds.size());-    for (unsigned i = 0; i < ds.size(); ++i) out[i] = ds[i].serialNumber();-    result.commit();-  } catch (std::exception& er) {(void)handleException<int*>(e, er);}}-void qlFreeRangeAccrualFloatersCoupon(QlRangeAccrualFloatersCoupon* o) {del(o);}-QlFloatingRateCoupon* qlRangeAccrualFloatersCouponAsFloatingRateCoupon(QlRangeAccrualFloatersCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}-QlRangeAccrualFloatersCoupon* qlRangeAccrualFloatersCoupon(int paymentDate, double nominal, QlIborIndex* index, int startDate, int endDate, unsigned fixingDays, DayCounter* dayCounter, double gearing, double spread, int refStart, int refEnd, Schedule* observations, double lower, double upper, char **e) {-  try {return ret(new QlRangeAccrualFloatersCoupon(alloc(new RangeAccrualFloatersCoupon(Date(paymentDate), nominal, *arg(index), Date(startDate), Date(endDate), fixingDays, *arg(dayCounter), gearing, spread, qlNullableDate(refStart), qlNullableDate(refEnd), *arg(observations), lower, upper))));-  } catch (std::exception& er) {return handleException<QlRangeAccrualFloatersCoupon*>(e, er);}}-double qlRangeAccrualFloatersCouponPriceWithoutOptionality(QlRangeAccrualFloatersCoupon* o, QlYieldTermStructure* curve, char **e) {try {return (*arg(o))->priceWithoutOptionality(*arg(curve));} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeYoYInflationCoupon(QlYoYInflationCoupon* o) {del(o);}-QlCoupon* qlYoYInflationCouponAsCoupon(QlYoYInflationCoupon* o) {return ret(new QlCoupon(*arg(o)));}-QlYoYInflationCoupon* qlYoYInflationCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlYoYInflationIndex* index, int lagLen, int lagUnit, int interpolation, DayCounter* dayCounter, double gearing, double spread, int refStart, int refEnd, char **e) {-  try {return ret(new QlYoYInflationCoupon(alloc(new YoYInflationCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays, *arg(index), Period(lagLen, (TimeUnit)lagUnit), (CPI::InterpolationType)interpolation, *arg(dayCounter), gearing, spread, qlNullableDate(refStart), qlNullableDate(refEnd)))));-  } catch (std::exception& er) {return handleException<QlYoYInflationCoupon*>(e, er);}}-double qlYoYInflationCouponAdjustedFixing(QlYoYInflationCoupon* o, char **e) {try {return (*arg(o))->adjustedFixing();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlFloatingRateCouponPricer* qlAveragingMultipleResetsPricer(char **e) {try {return ret(new QlFloatingRateCouponPricer(alloc(new AveragingMultipleResetsPricer())));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}-QlFloatingRateCouponPricer* qlCompoundingMultipleResetsPricer(char **e) {try {return ret(new QlFloatingRateCouponPricer(alloc(new CompoundingMultipleResetsPricer())));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}-void qlFreeOvernightIndexedCoupon(QlOvernightIndexedCoupon *o) {del(o);}-QlFloatingRateCoupon* qlOvernightIndexedCouponAsFloatingRateCoupon(QlOvernightIndexedCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}-QlOvernightIndexedCoupon* qlOvernightIndexedCoupon(int paymentDate, double nominal, int startDate, int endDate, QlOvernightIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int telescopic, int averaging, unsigned lookback, unsigned lockout, int observationShift, int compoundSpread, int rateStart, int rateEnd, int exCouponDate, int rounding, char **e) {-  try {return ret(new QlOvernightIndexedCoupon(alloc(new OvernightIndexedCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), telescopic, (RateAveraging::Type)averaging, lookback, lockout, observationShift, compoundSpread, qlNullableDate(rateStart), qlNullableDate(rateEnd), qlNullableDate(exCouponDate), rounding == Null<Integer>() ? ext::optional<Integer>() : ext::optional<Integer>(rounding)))));-  } catch (std::exception& er) {return handleException<QlOvernightIndexedCoupon*>(e, er);}}-QlFloatingRateCoupon* qlCappedFlooredOvernightIndexedCoupon(QlOvernightIndexedCoupon *underlying, double cap, double floor, int naked, int daily, char **e) {-  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredOvernightIndexedCoupon(*arg(underlying), cap, floor, naked, daily))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}-void qlOvernightIndexedCouponFixingDates(QlOvernightIndexedCoupon *o, unsigned *len, int **dates, char **e) {-  OutArrayResult<int> result(len, dates);-  try {const std::vector<Date>& ds = (*arg(o))->fixingDates();-    int *out = result.allocate((unsigned)ds.size());-    for (unsigned i = 0; i < ds.size(); ++i) out[i] = ds[i].serialNumber();-    result.commit();-  } catch (std::exception& er) {(void)handleException<int*>(e, er);}}-void qlOvernightIndexedCouponIndexFixings(QlOvernightIndexedCoupon *o, unsigned *len, double **fixings, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->indexFixings();}, len, fixings);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-QlFloatingRateCouponPricer* qlCompoundingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, char **e) {try {return ret(new QlFloatingRateCouponPricer(alloc(new CompoundingOvernightIndexedCouponPricer(qlNullableHandle(vol), effective))));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}-QlFloatingRateCouponPricer* qlArithmeticAveragedOvernightIndexedCouponPricer(double mr, double volatility, int byApprox, QlOptionletVolatilityStructure *vol, int effective, char **e) {try {return ret(new QlFloatingRateCouponPricer(alloc(new ArithmeticAveragedOvernightIndexedCouponPricer(mr, volatility, byApprox, qlNullableHandle(vol), effective))));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}-QlFloatingRateCouponPricer* qlBlackCompoundingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, char **e) {try {return ret(new QlFloatingRateCouponPricer(alloc(new BlackCompoundingOvernightIndexedCouponPricer(qlNullableHandle(vol), effective))));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}-QlFloatingRateCouponPricer* qlBlackAveragingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, char **e) {try {return ret(new QlFloatingRateCouponPricer(alloc(new BlackAveragingOvernightIndexedCouponPricer(qlNullableHandle(vol), effective))));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}-void qlFreeCPICoupon(QlCPICoupon *o) {del(o);}-QlCPICoupon* qlCPICoupon(double baseCPI, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, char **e) {try {return ret(new QlCPICoupon(alloc(new CPICoupon(baseCPI, Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), Period(lagLen, (TimeUnit)lagUnit), (CPI::InterpolationType)interpolation, *arg(dc), fixedRate, qlNullableDate(refStart), qlNullableDate(refEnd), qlNullableDate(exCoupon)))));} catch (std::exception& er) {return handleException<QlCPICoupon*>(e, er);}}-QlCPICoupon* qlCPICouponFromBaseDate(int baseDate, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, char **e) {try {return ret(new QlCPICoupon(alloc(new CPICoupon(Date(baseDate), Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), Period(lagLen, (TimeUnit)lagUnit), (CPI::InterpolationType)interpolation, *arg(dc), fixedRate, qlNullableDate(refStart), qlNullableDate(refEnd), qlNullableDate(exCoupon)))));} catch (std::exception& er) {return handleException<QlCPICoupon*>(e, er);}}-QlCPICoupon* qlCPICouponWithBaseDate(double baseCPI, int baseDate, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, char **e) {try {return ret(new QlCPICoupon(alloc(new CPICoupon(baseCPI, Date(baseDate), Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), Period(lagLen, (TimeUnit)lagUnit), (CPI::InterpolationType)interpolation, *arg(dc), fixedRate, qlNullableDate(refStart), qlNullableDate(refEnd), qlNullableDate(exCoupon)))));} catch (std::exception& er) {return handleException<QlCPICoupon*>(e, er);}}-void qlFreeCPICouponPricer(QlCPICouponPricer *o) {del(o);}-QlCPICouponPricer* qlCPICouponPricer(QlYieldTermStructure *nominal, char **e) {try {return ret(new QlCPICouponPricer(alloc(new CPICouponPricer(qlNullableHandle(nominal)))));} catch (std::exception& er) {return handleException<QlCPICouponPricer*>(e, er);}}-QlCPICouponPricer* qlCPICouponPricerWithVol(QlCPIVolatilitySurface *vol, QlYieldTermStructure *nominal, char **e) {try {return ret(new QlCPICouponPricer(alloc(new CPICouponPricer(*arg(vol), qlNullableHandle(nominal)))));} catch (std::exception& er) {return handleException<QlCPICouponPricer*>(e, er);}}-QlCoupon* qlCPICouponAsCoupon(QlCPICoupon* o) {return ret(new QlCoupon(*arg(o)));}-void qlCPICouponSetPricer(QlCPICoupon *coupon, QlCPICouponPricer *pricer, char **e) {try {(*arg(coupon))->setPricer(*arg(pricer));} catch (std::exception& er) {(void)handleException<int>(e, er);}}-QlCashFlow* qlRedemption(double amount, int date, char **e) {try {return ret(new QlCashFlow(alloc(new Redemption(amount, Date(date)))));} catch (std::exception& er) {return handleException<QlCashFlow*>(e, er);}}-QlCashFlow* qlAmortizingPayment(double amount, int date, char **e) {try {return ret(new QlCashFlow(alloc(new AmortizingPayment(amount, Date(date)))));} catch (std::exception& er) {return handleException<QlCashFlow*>(e, er);}}-QlCoupon* qlFloatingRateCouponAsCoupon(QlFloatingRateCoupon* o) {return ret(new QlCoupon(*arg(o)));}-void qlFloatingRateCouponSetPricer(QlFloatingRateCoupon* o, QlFloatingRateCouponPricer* pricer, char **e) {-  try {(*arg(o))->setPricer(*arg(pricer));-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-double qlFloatingRateCouponPrice(QlFloatingRateCoupon* o, QlYieldTermStructure* discountingCurve, char **e) {-  try {return (*arg(o))->price(qlNullableHandle(discountingCurve));} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFloatingRateCouponConvexityAdjustment(QlFloatingRateCoupon* o, char **e) {try {return (*arg(o))->convexityAdjustment();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCPICouponIndexRatio(QlCPICoupon* o, int d, char **e) {try {return (*arg(o))->indexRatio(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFloatingRateCouponPricerSwapletRate(QlFloatingRateCouponPricer* o, char **e) {try {return (*arg(o))->swapletRate();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFloatingRateCouponPricerSwapletPrice(QlFloatingRateCouponPricer* o, char **e) {try {return (*arg(o))->swapletPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFloatingRateCouponPricerCapletPrice(QlFloatingRateCouponPricer* o, double effectiveCap, char **e) {try {return (*arg(o))->capletPrice(effectiveCap);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFloatingRateCouponPricerCapletRate(QlFloatingRateCouponPricer* o, double effectiveCap, char **e) {try {return (*arg(o))->capletRate(effectiveCap);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFloatingRateCouponPricerFloorletPrice(QlFloatingRateCouponPricer* o, double effectiveFloor, char **e) {try {return (*arg(o))->floorletPrice(effectiveFloor);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlFloatingRateCouponPricerFloorletRate(QlFloatingRateCouponPricer* o, double effectiveFloor, char **e) {try {return (*arg(o))->floorletRate(effectiveFloor);} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeCmsCoupon(QlCmsCoupon *o) {del(o);}-QlFloatingRateCoupon* qlCmsCouponAsFloatingRateCoupon(QlCmsCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}-QlCmsCoupon* qlCmsCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e) {-  try {return ret(new QlCmsCoupon(alloc(new CmsCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,-      *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears,-      qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));-  } catch (std::exception& er) {return handleException<QlCmsCoupon*>(e, er);}}--QlFloatingRateCoupon* qlCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e) {-  try {return ret(new QlFloatingRateCoupon(alloc(new CmsSpreadCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,-      *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}-QlFloatingRateCoupon* qlCappedFlooredCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e) {-  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredCmsSpreadCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,-      *arg(index), gearing, spread, cap, floor, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}-QlFloatingRateCouponPricer* qlLognormalCmsSpreadPricer(QlCmsCouponPricer* cmsPricer, QlQuote* correlation, QlYieldTermStructure* couponDiscountCurve, unsigned integrationPoints, int haveVolatilityType, int volatilityType, double shift1, double shift2, char **e) {-  try {return ret(new QlFloatingRateCouponPricer(alloc(new LognormalCmsSpreadPricer(*arg(cmsPricer), *arg(correlation), qlNullableHandle(couponDiscountCurve), integrationPoints,-      haveVolatilityType ? ext::optional<VolatilityType>((VolatilityType)volatilityType) : ext::nullopt, shift1, shift2))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}-Leg* qlCmsSpreadLeg(Schedule* schedule, QlSwapSpreadIndex* swapSpreadIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments, char **e) {-  try {return alloc(new Leg(CmsSpreadLeg(*arg(schedule), *arg(swapSpreadIndex)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))-        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<unsigned>(fixingDays, fixingDays+fixingDaysLen))-        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))-        .withCaps(std::vector<double>(caps, caps+capsLen)).withFloors(std::vector<double>(floors, floors+floorsLen)).inArrears(inArrears).withZeroPayments(zeroPayments)));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}--void qlFreeDigitalCmsSpreadCoupon(QlDigitalCmsSpreadCoupon *o) {del(o);}-QlDigitalCoupon* qlDigitalCmsSpreadCouponAsDigitalCoupon(QlDigitalCmsSpreadCoupon* o) {return ret(new QlDigitalCoupon(*arg(o)));}-QlDigitalCmsSpreadCoupon* qlDigitalCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication* replication, int nakedOption, char **e) {-  try {auto underlying = ext::make_shared<CmsSpreadCoupon>(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,-      *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention);-    return ret(new QlDigitalCmsSpreadCoupon(alloc(new DigitalCmsSpreadCoupon(underlying, callStrike, (Position::Type)callPosition, callATM,-      callPayoff, putStrike, (Position::Type)putPosition, putATM, putPayoff, replication ? *arg(replication) : shared_ptr<DigitalReplication>(), nakedOption))));-  } catch (std::exception& er) {return handleException<QlDigitalCmsSpreadCoupon*>(e, er);}}-Leg* qlDigitalCmsSpreadLeg(Schedule* schedule, QlSwapSpreadIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, char **e) {-  try {DigitalCmsSpreadLeg builder(*arg(schedule), *arg(index));-    builder.withNotionals(std::vector<Real>(notionals, notionals + notionalsLen))-      .withPaymentDayCounter(*arg(paymentDayCounter)).withPaymentAdjustment((BusinessDayConvention)paymentAdjustment)-      .withFixingDays(std::vector<Natural>(fixingDays, fixingDays + fixingDaysLen))-      .withGearings(std::vector<Real>(gearings, gearings + gearingsLen)).withSpreads(std::vector<Spread>(spreads, spreads + spreadsLen))-      .inArrears(inArrears).withCallStrikes(std::vector<Rate>(callStrikes, callStrikes + callStrikesLen))-      .withLongCallOption((Position::Type)callPosition).withCallATM(callATM)-      .withCallPayoffs(std::vector<Rate>(callPayoffs, callPayoffs + callPayoffsLen))-      .withPutStrikes(std::vector<Rate>(putStrikes, putStrikes + putStrikesLen)).withLongPutOption((Position::Type)putPosition)-      .withPutATM(putATM).withPutPayoffs(std::vector<Rate>(putPayoffs, putPayoffs + putPayoffsLen))-      .withReplication(replication ? *arg(replication) : shared_ptr<DigitalReplication>()).withNakedOption(nakedOption);-    return ret(new Leg(builder));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}--void qlFreeSwapSpreadIndex(QlSwapSpreadIndex *o) {del(o);}-QlInterestRateIndex* qlSwapSpreadIndexAsInterestRateIndex(QlSwapSpreadIndex* o) {return ret(new QlInterestRateIndex(*arg(o)));}-QlSwapSpreadIndex* qlSwapSpreadIndex(const char* familyName, QlSwapIndex* swapIndex1, QlSwapIndex* swapIndex2, double gearing1, double gearing2, char **e) {-  try {return ret(new QlSwapSpreadIndex(alloc(new SwapSpreadIndex(familyName, *arg(swapIndex1), *arg(swapIndex2), gearing1, gearing2))));-  } catch (std::exception& er) {return handleException<QlSwapSpreadIndex*>(e, er);}}--QlFloatingRateCoupon* qlCappedFlooredCmsCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapIndex* index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e) {-  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredCmsCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,-      *arg(index), gearing, spread, cap, floor, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears,-      qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));-  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}--void qlFreeDigitalReplication(QlDigitalReplication *o) {del(o);}-QlDigitalReplication* qlDigitalReplication(int type, double gap, char **e) {-  try {return ret(new QlDigitalReplication(alloc(new DigitalReplication(qlReplicationType(type), gap))));-  } catch (std::exception& er) {return handleException<QlDigitalReplication*>(e, er);}}-int qlDigitalReplicationType(QlDigitalReplication* o) {return qlReplicationTypeOut((*arg(o))->replicationType());}-double qlDigitalReplicationGap(QlDigitalReplication* o) {return (*arg(o))->gap();}--void qlFreeDigitalCmsCoupon(QlDigitalCmsCoupon *o) {del(o);}-QlDigitalCoupon* qlDigitalCmsCouponAsDigitalCoupon(QlDigitalCmsCoupon* o) {return ret(new QlDigitalCoupon(*arg(o)));}-QlDigitalCmsCoupon* qlDigitalCmsCoupon(QlCmsCoupon* underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication* replication, int nakedOption, char **e) {-  try {return ret(new QlDigitalCmsCoupon(alloc(new DigitalCmsCoupon(*arg(underlying), callStrike, (Position::Type)callPosition, callATM,-      callPayoff, putStrike, (Position::Type)putPosition, putATM, putPayoff, replication ? *arg(replication) : shared_ptr<DigitalReplication>(), nakedOption))));-  } catch (std::exception& er) {return handleException<QlDigitalCmsCoupon*>(e, er);}}--Leg* qlDigitalCmsLeg(Schedule* schedule, QlSwapIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, char **e) {-  try {DigitalCmsLeg builder(*arg(schedule), *arg(index));-    builder.withNotionals(std::vector<Real>(notionals, notionals + notionalsLen))-      .withPaymentDayCounter(*arg(paymentDayCounter)).withPaymentAdjustment((BusinessDayConvention)paymentAdjustment)-      .withFixingDays(std::vector<Natural>(fixingDays, fixingDays + fixingDaysLen))-      .withGearings(std::vector<Real>(gearings, gearings + gearingsLen)).withSpreads(std::vector<Spread>(spreads, spreads + spreadsLen))-      .inArrears(inArrears).withCallStrikes(std::vector<Rate>(callStrikes, callStrikes + callStrikesLen))-      .withLongCallOption((Position::Type)callPosition).withCallATM(callATM)-      .withCallPayoffs(std::vector<Rate>(callPayoffs, callPayoffs + callPayoffsLen))-      .withPutStrikes(std::vector<Rate>(putStrikes, putStrikes + putStrikesLen)).withLongPutOption((Position::Type)putPosition)-      .withPutATM(putATM).withPutPayoffs(std::vector<Rate>(putPayoffs, putPayoffs + putPayoffsLen))-      .withReplication(replication ? *arg(replication) : shared_ptr<DigitalReplication>()).withNakedOption(nakedOption);-    return ret(new Leg(builder));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlDigitalIborLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, char **e) {-  try {DigitalIborLeg builder(*arg(schedule), *arg(index));-    builder.withNotionals(std::vector<Real>(notionals, notionals + notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter)).withPaymentAdjustment((BusinessDayConvention)paymentAdjustment)-      .withFixingDays(std::vector<Natural>(fixingDays, fixingDays + fixingDaysLen)).withGearings(std::vector<Real>(gearings, gearings + gearingsLen)).withSpreads(std::vector<Spread>(spreads, spreads + spreadsLen)).inArrears(inArrears)-      .withCallStrikes(std::vector<Rate>(callStrikes, callStrikes + callStrikesLen)).withLongCallOption((Position::Type)callPosition).withCallATM(callATM).withCallPayoffs(std::vector<Rate>(callPayoffs, callPayoffs + callPayoffsLen))-      .withPutStrikes(std::vector<Rate>(putStrikes, putStrikes + putStrikesLen)).withLongPutOption((Position::Type)putPosition).withPutATM(putATM).withPutPayoffs(std::vector<Rate>(putPayoffs, putPayoffs + putPayoffsLen)).withReplication(replication ? *arg(replication) : shared_ptr<DigitalReplication>()).withNakedOption(nakedOption);-    return ret(new Leg(builder));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-Leg* qlMultipleResetsLeg(Schedule* schedule, QlIborIndex* index, unsigned resetsPerCoupon, unsigned notionalsLen, double* notionals, DayCounter* dc, int adjustment, Calendar* calendar, int lag, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned couponSpreadsLen, double* couponSpreads, unsigned rateSpreadsLen, double* rateSpreads, int exLen, int exUnit, Calendar* exCalendar, int exConvention, int exEom, int averaging, char **e) {-  try {MultipleResetsLeg builder(*arg(schedule), *arg(index), resetsPerCoupon);-    builder.withNotionals(std::vector<Real>(notionals, notionals + notionalsLen)).withPaymentDayCounter(*arg(dc)).withPaymentAdjustment((BusinessDayConvention)adjustment).withPaymentCalendar(*arg(calendar)).withPaymentLag(lag)-      .withFixingDays(std::vector<Natural>(fixingDays, fixingDays + fixingDaysLen)).withGearings(std::vector<Real>(gearings, gearings + gearingsLen)).withCouponSpreads(std::vector<Spread>(couponSpreads, couponSpreads + couponSpreadsLen)).withRateSpreads(std::vector<Spread>(rateSpreads, rateSpreads + rateSpreadsLen))-      .withExCouponPeriod(Period(exLen, (TimeUnit)exUnit), *arg(exCalendar), (BusinessDayConvention)exConvention, exEom).withAveragingMethod((RateAveraging::Type)averaging);-    return ret(new Leg(builder));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}--void qlFreeVarianceSwap(QlVarianceSwap *o) {del(o);}-QlInstrument* qlVarianceSwapAsInstrument(QlVarianceSwap *o) {return ret(new QlInstrument(*arg(o)));}-QlVarianceSwap* qlVarianceSwap(int position, double strike, double notional, int startDate, int maturityDate, char **e) {-  try {return ret(new QlVarianceSwap(alloc(new VarianceSwap((Position::Type)position, strike, notional, Date(startDate), Date(maturityDate)))));-  } catch (std::exception& er) {return handleException<QlVarianceSwap*>(e, er);}}-double qlVarianceSwapVariance(QlVarianceSwap* o, char **e) {try {return (*arg(o))->variance();} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeVarianceOption(QlVarianceOption *o) {del(o);}-QlInstrument* qlVarianceOptionAsInstrument(QlVarianceOption *o) {return ret(new QlInstrument(*arg(o)));}-QlVarianceOption* qlVarianceOption(QlPayoff* payoff, double notional, int startDate, int maturityDate, char **e) {-  try {return ret(new QlVarianceOption(alloc(new VarianceOption(*arg(payoff), notional, Date(startDate), Date(maturityDate)))));-  } catch (std::exception& er) {return handleException<QlVarianceOption*>(e, er);}}--// Commodity and EnergyCommodity are abstract binding roots reached through their concrete leaves.-// Their constructor-echo getters are intentionally not bound.-void qlFreeCommodity(QlCommodity *o) {del(o);}-QlInstrument* qlCommodityAsInstrument(QlCommodity *o) {return ret(new QlInstrument(*arg(o)));}-void qlFreeEnergyCommodity(QlEnergyCommodity *o) {del(o);}-QlCommodity* qlEnergyCommodityAsCommodity(QlEnergyCommodity *o) {return ret(new QlCommodity(*arg(o)));}--/* Commodity base-level operations shared by every leaf. */-void qlCommodityAddPricingError(QlCommodity *o, int level, char *error, char *detail) {-  (*arg(o))->addPricingError((PricingError::Level)level, arg(error), arg(detail));-}--void qlCommoditySecondaryCostAmounts(QlCommodity *o, unsigned *len, char ***keys,-    unsigned *len2, double **amounts, unsigned *len3, Currency ***currencies, char **e) {-  OutStringArrayResult keyResult(len, keys);-  OutArrayResult<double> amountResult(len2, amounts);-  OutPtrArrayResult<Currency> currencyResult(len3, currencies);-  try {-    const SecondaryCostAmounts &m = (*arg(o))->secondaryCostAmounts();-    const unsigned n = (unsigned)m.size();-    char **ks = keyResult.allocate(n);-    double *am = amountResult.allocate(n);-    Currency **cs = currencyResult.allocate(n);-    unsigned i = 0;-    for (SecondaryCostAmounts::const_iterator it = m.begin(); it != m.end(); ++it, ++i) {-      ks[i] = tracedup(it->first.c_str());-      am[i] = it->second.value();-      cs[i] = ret(new Currency(it->second.currency()));-    }-    keyResult.commit(); amountResult.commit(); currencyResult.commit();-  } catch (std::exception& er) {handleException<int>(e, er);}-}--void qlCommodityPricingErrors(QlCommodity *o, unsigned *len, int **levels,-    unsigned *len2, char ***errors, unsigned *len3, char ***details, char **e) {-  OutArrayResult<int> levelResult(len, levels);-  OutStringArrayResult errorResult(len2, errors);-  OutStringArrayResult detailResult(len3, details);-  try {-    const PricingErrors &errs = (*arg(o))->pricingErrors();-    const unsigned n = (unsigned)errs.size();-    int *lv = levelResult.allocate(n);-    char **errs2 = errorResult.allocate(n);-    char **dets = detailResult.allocate(n);-    for (unsigned i = 0; i < n; ++i) {-      lv[i] = errs[i].errorLevel;-      errs2[i] = tracedup(errs[i].error.c_str());-      dets[i] = tracedup(errs[i].detail.c_str());-    }-    levelResult.commit(); errorResult.commit(); detailResult.commit();-  } catch (std::exception& er) {handleException<int>(e, er);}-}--/* EnergyCommodity -- quantity() is pure virtual upstream; one shim, dispatched virtually, covers-   every leaf (EnergyFuture's own override is a plain echo of its constructor argument, but-   EnergySwap's is a real computed sum -- see energyswap.cpp). */-double qlEnergyCommodityQuantity(QlEnergyCommodity *o, CommodityType **outCt, UnitOfMeasure **outUom, char **e) {-  *outCt = 0; *outUom = 0;-  try {-    Quantity q = (*arg(o))->quantity();-    // unique_ptr until both allocations have succeeded, so a throw from the second one releases-    // the first without any cleanup in the catch -- and ret() runs only on the pointers actually-    // handed out, so nothing half-built is ever traced as returned.-    std::unique_ptr<CommodityType> ct(new CommodityType(q.commodityType()));-    std::unique_ptr<UnitOfMeasure> uom(new UnitOfMeasure(q.unitOfMeasure()));-    *outCt = ret(ct.release());-    *outUom = ret(uom.release());-    return q.amount();-  } catch (std::exception& er) {-    return handleException<double>(e, er);-  }-}--/* tradePrice()/index() are constructor echoes and intentionally not bound. quantity() is exposed-   once through the EnergyCommodity base. */-void qlFreeEnergyFuture(QlEnergyFuture *o) {del(o);}-QlEnergyCommodity* qlEnergyFutureAsEnergyCommodity(QlEnergyFuture *o) {return ret(new QlEnergyCommodity(*arg(o)));}-QlEnergyFuture* qlEnergyFuture(int buySell,-    CommodityType *qCt, UnitOfMeasure *qUom, double qAmount,-    double tpAmount, Currency *tpCcy, UnitOfMeasure *tpUom,-    QlCommodityIndex *index, CommodityType *commodityType,-    unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,-    unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,-    char **e) {-  try {-    return ret(new QlEnergyFuture(alloc(new EnergyFuture(-        buySell,-        Quantity(*arg(qCt), *arg(qUom), qAmount),-        CommodityUnitCost(Money(*arg(tpCcy), tpAmount), *arg(tpUom)),-        *arg(index),-        *arg(commodityType),-        qlBuildSecondaryCosts(scLen, scKeys, scIsUnitCost, scAmounts, scCurrencies, scUoms)))));-  } catch (std::exception& er) {return handleException<QlEnergyFuture*>(e, er);}}--/* EnergySwap -- binds no constructor (falls through to Instrument's null-engine QL_REQUIRE, see-   qlaux.h); calendar/payCurrency/receiveCurrency/pricingPeriods/commodityType are all plain,-   never-mutated echoes of (or, for commodityType/quantity, pure functions of) each leaf's own-   constructor arguments -- not bound. dailyPositions/paymentCashFlows are genuinely computed-   during performCalculations, so those are the two worth binding, generalized over both leaves. */-void qlFreeEnergySwap(QlEnergySwap *o) {del(o);}-QlEnergyCommodity* qlEnergySwapAsEnergyCommodity(QlEnergySwap *o) {return ret(new QlEnergyCommodity(*arg(o)));}--void qlEnergySwapDailyPositions(QlEnergySwap *o, unsigned *len, int **dates,-    unsigned *len2, double **quantityAmounts, unsigned *len3, double **payLegPrices,-    unsigned *len4, double **receiveLegPrices, unsigned *len5, double **riskDeltas,-    unsigned *len6, int **unrealized, char **e) {-  OutArrayResult<int> dateResult(len, dates), unrealizedResult(len6, unrealized);-  OutArrayResult<double> quantityResult(len2, quantityAmounts), payResult(len3, payLegPrices),-      receiveResult(len4, receiveLegPrices), deltaResult(len5, riskDeltas);-  try {-    const EnergyDailyPositions &m = (*arg(o))->dailyPositions();-    const unsigned n = (unsigned)m.size();-    int *ds = dateResult.allocate(n), *ur = unrealizedResult.allocate(n);-    double *qa = quantityResult.allocate(n), *plp = payResult.allocate(n),-           *rlp = receiveResult.allocate(n), *rd = deltaResult.allocate(n);-    unsigned i = 0;-    for (EnergyDailyPositions::const_iterator it = m.begin(); it != m.end(); ++it, ++i) {-      ds[i] = it->first.serialNumber();-      qa[i] = it->second.quantityAmount;-      plp[i] = it->second.payLegPrice;-      rlp[i] = it->second.receiveLegPrice;-      rd[i] = it->second.riskDelta;-      ur[i] = it->second.unrealized;-    }-    dateResult.commit(); quantityResult.commit(); payResult.commit();-    receiveResult.commit(); deltaResult.commit(); unrealizedResult.commit();-  } catch (std::exception& er) {handleException<int>(e, er);}-}--void qlEnergySwapPaymentCashFlows(QlEnergySwap *o, unsigned *len, QlCommodityCashFlow ***out, char **e) {-  OutPtrArrayResult<QlCommodityCashFlow> result(len, out);-  try {-    const CommodityCashFlows &m = (*arg(o))->paymentCashFlows();-    QlCommodityCashFlow **cs = result.allocate((unsigned)m.size());-    unsigned i = 0;-    for (CommodityCashFlows::const_iterator it = m.begin(); it != m.end(); ++it, ++i)-      cs[i] = ret(new QlCommodityCashFlow(alloc(it->second)));-    result.commit();-  } catch (std::exception& er) {handleException<int>(e, er);}-}--/* EnergyVanillaSwap -- payReceive()/fixedPrice()/fixedPriceUnitOfMeasure()/index() are all plain,-   never-mutated echoes of this constructor's own arguments -- not bound (payReceive_ is a trivial-   `payer ? 1 : 0` of the ctor's own bool, reproducible in Haskell with no C++ call at all). */-void qlFreeEnergyVanillaSwap(QlEnergyVanillaSwap *o) {del(o);}-QlEnergySwap* qlEnergyVanillaSwapAsEnergySwap(QlEnergyVanillaSwap *o) {return ret(new QlEnergySwap(*arg(o)));}-QlEnergyVanillaSwap* qlEnergyVanillaSwap(int payer, Calendar *calendar,-    double fixedPriceAmount, Currency *fixedPriceCurrency, UnitOfMeasure *fixedPriceUnitOfMeasure,-    QlCommodityIndex *index, Currency *payCurrency, Currency *receiveCurrency,-    unsigned ppLen, int *ppStartDates, unsigned, int *ppEndDates, unsigned, int *ppPaymentDates,-    unsigned, CommodityType **ppTypes, unsigned, UnitOfMeasure **ppUoms, unsigned, double *ppAmounts,-    CommodityType *commodityType,-    unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,-    unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,-    QlYieldTermStructure *payLegTS, QlYieldTermStructure *receiveLegTS, QlYieldTermStructure *discountTS,-    char **e) {-  try {-    return ret(new QlEnergyVanillaSwap(alloc(new EnergyVanillaSwap(-        payer,-        *arg(calendar),-        Money(*arg(fixedPriceCurrency), fixedPriceAmount),-        *arg(fixedPriceUnitOfMeasure),-        *arg(index),-        *arg(payCurrency),-        *arg(receiveCurrency),-        qlPricingPeriodVector(ppLen, ppStartDates, ppEndDates, ppPaymentDates, ppTypes, ppUoms, ppAmounts),-        *arg(commodityType),-        qlBuildSecondaryCosts(scLen, scKeys, scIsUnitCost, scAmounts, scCurrencies, scUoms),-        *arg(payLegTS), *arg(receiveLegTS), *arg(discountTS)))));-  } catch (std::exception& er) {return handleException<QlEnergyVanillaSwap*>(e, er);}}--/* EnergyBasisSwap -- payIndex()/receiveIndex()/basis() are likewise plain constructor-argument-   echoes -- not bound. */-void qlFreeEnergyBasisSwap(QlEnergyBasisSwap *o) {del(o);}-QlEnergySwap* qlEnergyBasisSwapAsEnergySwap(QlEnergyBasisSwap *o) {return ret(new QlEnergySwap(*arg(o)));}-QlEnergyBasisSwap* qlEnergyBasisSwap(Calendar *calendar,-    QlCommodityIndex *spreadIndex, QlCommodityIndex *payIndex, QlCommodityIndex *receiveIndex,-    int spreadToPayLeg, Currency *payCurrency, Currency *receiveCurrency,-    unsigned ppLen, int *ppStartDates, unsigned, int *ppEndDates, unsigned, int *ppPaymentDates,-    unsigned, CommodityType **ppTypes, unsigned, UnitOfMeasure **ppUoms, unsigned, double *ppAmounts,-    double basisAmount, Currency *basisCurrency, UnitOfMeasure *basisUnitOfMeasure,-    CommodityType *commodityType,-    unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,-    unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,-    QlYieldTermStructure *payLegTS, QlYieldTermStructure *receiveLegTS, QlYieldTermStructure *discountTS,-    char **e) {-  try {-    return ret(new QlEnergyBasisSwap(alloc(new EnergyBasisSwap(-        *arg(calendar),-        *arg(spreadIndex), *arg(payIndex), *arg(receiveIndex),-        spreadToPayLeg,-        *arg(payCurrency), *arg(receiveCurrency),-        qlPricingPeriodVector(ppLen, ppStartDates, ppEndDates, ppPaymentDates, ppTypes, ppUoms, ppAmounts),-        CommodityUnitCost(Money(*arg(basisCurrency), basisAmount), *arg(basisUnitOfMeasure)),-        *arg(commodityType),-        qlBuildSecondaryCosts(scLen, scKeys, scIsUnitCost, scAmounts, scCurrencies, scUoms),-        *arg(payLegTS), *arg(receiveLegTS), *arg(discountTS)))));-  } catch (std::exception& er) {return handleException<QlEnergyBasisSwap*>(e, er);}}--/* CommodityCashFlow -- a standalone CashFlow leaf, never Haskell-constructed (only ever produced-   by EnergySwap::paymentCashFlows() above). The upstream field reads themselves can't throw, but-   each shim also does `ret(new Currency(...))`, which is a bad_alloc-only throw point -- char **e-   guards that, not the upstream call. */-void qlFreeCommodityCashFlow(QlCommodityCashFlow *o) {del(o);}-QlCashFlow *qlCommodityCashFlowAsCashFlow(QlCommodityCashFlow *o) {return ret(new QlCashFlow(*arg(o)));}-double qlCommodityCashFlowDiscountedAmount(QlCommodityCashFlow *o, Currency **outCcy, char **e) {-  *outCcy = 0;-  try {-    const Money &m = (*arg(o))->discountedAmount();-    *outCcy = ret(new Currency(m.currency()));-    return m.value();-  } catch (std::exception& er) {return handleException<double>(e, er);}-}-double qlCommodityCashFlowUndiscountedAmount(QlCommodityCashFlow *o, Currency **outCcy, char **e) {-  *outCcy = 0;-  try {-    const Money &m = (*arg(o))->undiscountedAmount();-    *outCcy = ret(new Currency(m.currency()));-    return m.value();-  } catch (std::exception& er) {return handleException<double>(e, er);}-}-double qlCommodityCashFlowDiscountedPaymentAmount(QlCommodityCashFlow *o, Currency **outCcy, char **e) {-  *outCcy = 0;-  try {-    const Money &m = (*arg(o))->discountedPaymentAmount();-    *outCcy = ret(new Currency(m.currency()));-    return m.value();-  } catch (std::exception& er) {return handleException<double>(e, er);}-}-double qlCommodityCashFlowUndiscountedPaymentAmount(QlCommodityCashFlow *o, Currency **outCcy, char **e) {-  *outCcy = 0;-  try {-    const Money &m = (*arg(o))->undiscountedPaymentAmount();-    *outCcy = ret(new Currency(m.currency()));-    return m.value();-  } catch (std::exception& er) {return handleException<double>(e, er);}-}-double qlCommodityCashFlowDiscountFactor(QlCommodityCashFlow *o) {return (*arg(o))->discountFactor();}-double qlCommodityCashFlowPaymentDiscountFactor(QlCommodityCashFlow *o) {return (*arg(o))->paymentDiscountFactor();}-int qlCommodityCashFlowFinalized(QlCommodityCashFlow *o) {return (*arg(o))->finalized();}--/* The other CommodityPricingHelper static methods duplicate conversion APIs already bound. */-void qlCreatePricingPeriods(int startDate, int endDate, CommodityType *qCt, UnitOfMeasure *qUom, double qAmount,-    int deliverySchedule, int qtyPeriodicity, PaymentTerm *paymentTerm,-    unsigned *len, int **ppStartDates, unsigned *len2, int **ppEndDates, unsigned *len3, int **ppPaymentDates,-    unsigned *len4, CommodityType ***ppTypes, unsigned *len5, UnitOfMeasure ***ppUoms, unsigned *len6, double **ppAmounts,-    char **e) {-  OutArrayResult<int> startResult(len, ppStartDates), endResult(len2, ppEndDates), payResult(len3, ppPaymentDates);-  OutPtrArrayResult<CommodityType> typeResult(len4, ppTypes);-  OutPtrArrayResult<UnitOfMeasure> uomResult(len5, ppUoms);-  OutArrayResult<double> amountResult(len6, ppAmounts);-  try {-    PricingPeriods pps;-    CommodityPricingHelper::createPricingPeriods(Date(startDate), Date(endDate),-        Quantity(*arg(qCt), *arg(qUom), qAmount),-        (EnergyCommodity::DeliverySchedule)deliverySchedule,-        (EnergyCommodity::QuantityPeriodicity)qtyPeriodicity,-        *arg(paymentTerm), pps);-    const unsigned n = (unsigned)pps.size();-    int *starts = startResult.allocate(n), *ends = endResult.allocate(n), *pays = payResult.allocate(n);-    double *amounts = amountResult.allocate(n);-    CommodityType **types = typeResult.allocate(n);-    UnitOfMeasure **uoms = uomResult.allocate(n);-    for (unsigned i = 0; i < n; ++i) {-      starts[i] = pps[i]->startDate().serialNumber();-      ends[i] = pps[i]->endDate().serialNumber();-      pays[i] = pps[i]->paymentDate().serialNumber();-      types[i] = ret(new CommodityType(pps[i]->quantity().commodityType()));-      uoms[i] = ret(new UnitOfMeasure(pps[i]->quantity().unitOfMeasure()));-      amounts[i] = pps[i]->quantity().amount();-    }-    startResult.commit(); endResult.commit(); payResult.commit();-    typeResult.commit(); uomResult.commit(); amountResult.commit();-  } catch (std::exception& er) {handleException<int>(e, er);}-}--void qlFreeYoYInflationCapFloor(QlYoYInflationCapFloor *o) {del(o);}-QlInstrument *qlYoYInflationCapFloorAsInstrument(QlYoYInflationCapFloor *o) {return ret(new QlInstrument(*arg(o)));}--QlYoYInflationCapFloor *qlYoYInflationCap(Leg *yoyLeg, unsigned exerciseRatesLen, double *exerciseRates, char **e) {-  try {return ret(new QlYoYInflationCapFloor(alloc(new YoYInflationCapFloor(YoYInflationCapFloor::Cap, *arg(yoyLeg),-      std::vector<double>(exerciseRates, exerciseRates+exerciseRatesLen), std::vector<double>()))));-  } catch (std::exception& er) {return handleException<QlYoYInflationCapFloor*>(e, er);}}--QlYoYInflationCapFloor *qlYoYInflationFloor(Leg *yoyLeg, unsigned exerciseRatesLen, double *exerciseRates, char **e) {-  try {return ret(new QlYoYInflationCapFloor(alloc(new YoYInflationCapFloor(YoYInflationCapFloor::Floor, *arg(yoyLeg),-      std::vector<double>(), std::vector<double>(exerciseRates, exerciseRates+exerciseRatesLen)))));-  } catch (std::exception& er) {return handleException<QlYoYInflationCapFloor*>(e, er);}}--QlYoYInflationCapFloor *qlYoYInflationCollar(Leg *yoyLeg, unsigned capRatesLen, double *capRates,-    unsigned floorRatesLen, double *floorRates, char **e) {-  try {return ret(new QlYoYInflationCapFloor(alloc(new YoYInflationCapFloor(YoYInflationCapFloor::Collar, *arg(yoyLeg),-      std::vector<double>(capRates, capRates+capRatesLen), std::vector<double>(floorRates, floorRates+floorRatesLen)))));-  } catch (std::exception& er) {return handleException<QlYoYInflationCapFloor*>(e, er);}}--// atmRate takes a plain YieldTermStructure& (not a Handle), same reasoning as qlCapFloorAtmRate.-double qlYoYInflationCapFloorAtmRate(QlYoYInflationCapFloor *o, QlYieldTermStructure *discountCurve, char **e) {-  try {return (*arg(o))->atmRate(handleRef(arg(discountCurve)));-  } catch (std::exception& er) {return handleException<double>(e, er);}}--QlYoYInflationCapFloor *qlYoYInflationCapFloorOptionlet(QlYoYInflationCapFloor *o, unsigned n, char **e) {-  try {return ret(new QlYoYInflationCapFloor(alloc((*arg(o))->optionlet(n))));-  } catch (std::exception& er) {return handleException<QlYoYInflationCapFloor*>(e, er);}}--void qlFreeCPICapFloor(QlCPICapFloor *o) {del(o);}-QlInstrument *qlCPICapFloorAsInstrument(QlCPICapFloor *o) {return ret(new QlInstrument(*arg(o)));}--QlCPICapFloor *qlCPICapFloor(int type, double nominal, int startDate, double baseCPI, int maturity,-    Calendar *fixCalendar, int fixConvention, Calendar *payCalendar, int payConvention, double strike,-    QlZeroInflationIndex *index, int observationLagLen, int observationLagUnit, int observationInterpolation,-    char **e) {-  try {return ret(new QlCPICapFloor(alloc(new CPICapFloor((Option::Type)type, nominal, Date(startDate), baseCPI,-      Date(maturity), *arg(fixCalendar), (BusinessDayConvention)fixConvention, *arg(payCalendar),-      (BusinessDayConvention)payConvention, strike, *arg(index),-      Period(observationLagLen, (TimeUnit)observationLagUnit), (CPI::InterpolationType)observationInterpolation))));-  } catch (std::exception& er) {return handleException<QlCPICapFloor*>(e, er);}}--DefaultProbKey* qlNorthAmericaCorpDefaultKey(Currency* currency, int seniority, int graceFailureToPayLen, int graceFailureToPayUnit, double amountFailure, int restructuringType, char **e) {-  try {return ret(new DefaultProbKey(NorthAmericaCorpDefaultKey(*arg(currency), (Seniority)seniority,-      Period(graceFailureToPayLen, (TimeUnit)graceFailureToPayUnit), amountFailure, (Restructuring::Type)restructuringType)));-  } catch (std::exception& er) {return handleException<DefaultProbKey*>(e, er);}}-void qlFreeDefaultProbKey(DefaultProbKey *o) {del(o);}--Issuer* qlIssuer(unsigned probabilitiesLen, DefaultProbKey** keys, QlDefaultProbabilityTermStructure** curves, char **e) {-  try {-    std::vector<Issuer::key_curve_pair> probs;-    probs.reserve(probabilitiesLen);-    for (unsigned i = 0; i < probabilitiesLen; ++i)-      probs.emplace_back(*keys[i], Handle<DefaultProbabilityTermStructure>(*curves[i]));-    return ret(new Issuer(probs));-  } catch (std::exception& er) {return handleException<Issuer*>(e, er);}}-void qlFreeIssuer(Issuer *o) {del(o);}--QlPool* qlPool(unsigned namesLen, char** names, Issuer** issuers, DefaultProbKey** keys, char **e) {-  try {-    auto p = allocShared(new Pool());-    for (unsigned i = 0; i < namesLen; ++i) p->add(names[i], *issuers[i], *keys[i]);-    return ret(new QlPool(p));-  } catch (std::exception& er) {return handleException<QlPool*>(e, er);}}-void qlFreePool(QlPool *o) {del(o);}--QlBasket* qlBasket(int refDate, unsigned namesLen, char** names, double* notionals, QlPool* pool, double attachmentRatio, double detachmentRatio, QlClaim* claim, QlDefaultLossModel* lossModel, char **e) {-  try {-    std::vector<std::string> nm(names, names + namesLen);-    auto b = allocShared(new Basket(Date(refDate), nm, std::vector<double>(notionals, notionals + namesLen),-        *arg(pool), attachmentRatio, detachmentRatio, *arg(claim)));-    b->setLossModel(*arg(lossModel));-    return ret(new QlBasket(b));-  } catch (std::exception& er) {return handleException<QlBasket*>(e, er);}}-void qlFreeBasket(QlBasket *o) {del(o);}-double qlBasketNotional(QlBasket* o, char **e) {-  try {return (*arg(o))->notional();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBasketExpectedTrancheLoss(QlBasket* o, int d, char **e) {-  try {return (*arg(o))->expectedTrancheLoss(Date(d));-  } catch (std::exception& er) {return handleException<double>(e, er);}}--QlBasket* qlDigitalBasket(int refDate, unsigned namesLen, char** names, double* notionals, QlPool* pool, double attachmentRatio, double detachmentRatio, QlClaim* claim, QlDefaultLossModel* lossModel, char **e) {-  return qlBasket(refDate, namesLen, names, notionals, pool, attachmentRatio, detachmentRatio, claim, lossModel, e);-}--double qlBasketRemainingNotional(QlBasket* o, int d, char **e) {-  try {return (*arg(o))->remainingNotional(Date(d));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBasketRecoveryRate(QlBasket* o, int d, unsigned iName, char **e) {-  try {return (*arg(o))->recoveryRate(Date(d), iName);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--double qlBasketProbOverLoss(QlBasket* o, int d, double lossFraction, char **e) {-  try {return (*arg(o))->probOverLoss(Date(d), lossFraction);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBasketPercentile(QlBasket* o, int d, double prob, char **e) {-  try {return (*arg(o))->percentile(Date(d), prob);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBasketExpectedShortfall(QlBasket* o, int d, double prob, char **e) {-  try {return (*arg(o))->expectedShortfall(Date(d), prob);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--double qlBasketDefaultCorrelation(QlBasket* o, int d, unsigned iName, unsigned jName, char **e) {-  try {return (*arg(o))->defaultCorrelation(Date(d), iName, jName);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBasketProbAtLeastNEvents(QlBasket* o, unsigned n, int d, char **e) {-  try {return (*arg(o))->probAtLeastNEvents(n, Date(d));-  } catch (std::exception& er) {return handleException<double>(e, er);}}--QlDefaultLossModel* qlGaussianLHPLossModel(QlQuote* correlQuote, unsigned recoveriesLen, double* recoveries, char **e) {-  try {return ret(new QlDefaultLossModel(shared_ptr<DefaultLossModel>(allocAs<DefaultLossModel>(-      new GaussianLHPLossModel(*arg(correlQuote), std::vector<double>(recoveries, recoveries + recoveriesLen))))));-  } catch (std::exception& er) {return handleException<QlDefaultLossModel*>(e, er);}}-void qlFreeDefaultLossModel(QlDefaultLossModel *o) {del(o);}--QlSyntheticCDO* qlSyntheticCDO(QlBasket* basket, int side, Schedule* schedule, double upfrontRate, double runningRate, DayCounter* dayCounter, int paymentConvention, int haveNotional, double notional, char **e) {-  try {return ret(new QlSyntheticCDO(alloc(new SyntheticCDO(*arg(basket), (Protection::Side)side, *arg(schedule), upfrontRate, runningRate,-      *arg(dayCounter), (BusinessDayConvention)paymentConvention, haveNotional ? ext::optional<Real>(notional) : ext::nullopt))));-  } catch (std::exception& er) {return handleException<QlSyntheticCDO*>(e, er);}}-void qlFreeSyntheticCDO(QlSyntheticCDO *o) {del(o);}-QlInstrument* qlSyntheticCDOAsInstrument(QlSyntheticCDO *o) {return ret(new QlInstrument(*arg(o)));}-double qlSyntheticCDOFairPremium(QlSyntheticCDO* o, char **e) {-  try {return (*arg(o))->fairPremium();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSyntheticCDOFairUpfrontPremium(QlSyntheticCDO* o, char **e) {-  try {return (*arg(o))->fairUpfrontPremium();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSyntheticCDOPremiumValue(QlSyntheticCDO* o, char **e) {-  try {return (*arg(o))->premiumValue();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSyntheticCDOProtectionValue(QlSyntheticCDO* o, char **e) {-  try {return (*arg(o))->protectionValue();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSyntheticCDOPremiumLegNPV(QlSyntheticCDO* o, char **e) {-  try {return (*arg(o))->premiumLegNPV();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSyntheticCDOProtectionLegNPV(QlSyntheticCDO* o, char **e) {-  try {return (*arg(o))->protectionLegNPV();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSyntheticCDORemainingNotional(QlSyntheticCDO* o, char **e) {-  try {return (*arg(o))->remainingNotional();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSyntheticCDOImplicitCorrelation(QlSyntheticCDO* o, unsigned recoveriesLen, double* recoveries, QlYieldTermStructure* discountCurve, double targetNPV, double accuracy, char **e) {-  try {return (*arg(o))->implicitCorrelation(std::vector<double>(recoveries, recoveries + recoveriesLen), *arg(discountCurve), targetNPV, accuracy);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--QlDefaultLossModel* qlConstantLossModel(QlQuote* correlQuote, unsigned recoveriesLen, double* recoveries, int integralType, unsigned tOrdersLen, int* tOrders, char **e) {-  try {return ret(new QlDefaultLossModel(alloc(qlConstantLossModelAux(*arg(correlQuote),-      std::vector<double>(recoveries, recoveries + recoveriesLen),-      (LatentModelIntegrationType::LatentModelIntegrationType)integralType, recoveriesLen,-      std::vector<Integer>(tOrders, tOrders + tOrdersLen)))));-  } catch (std::exception& er) {return handleException<QlDefaultLossModel*>(e, er);}}--QlNthToDefault* qlNthToDefault(QlBasket* basket, unsigned n, int side, Schedule* premiumSchedule, double upfrontRate, double premiumRate, DayCounter* dayCounter, double nominal, int settlePremiumAccrual, char **e) {-  try {return ret(new QlNthToDefault(alloc(new NthToDefault(*arg(basket), n, (Protection::Side)side,-      *arg(premiumSchedule), upfrontRate, premiumRate, *arg(dayCounter), nominal, settlePremiumAccrual != 0))));-  } catch (std::exception& er) {return handleException<QlNthToDefault*>(e, er);}}-void qlFreeNthToDefault(QlNthToDefault *o) {del(o);}-QlInstrument* qlNthToDefaultAsInstrument(QlNthToDefault *o) {return ret(new QlInstrument(*arg(o)));}-double qlNthToDefaultFairPremium(QlNthToDefault* o, char **e) {-  try {return (*arg(o))->fairPremium();-  } catch (std::exception& er) {return handleException<double>(e, er);}}--QlRendistatoBasket *qlRendistatoBasket(unsigned btpsLen, QlBTP **btps, unsigned outstandingsLen, double *outstandings, unsigned quotesLen, QlQuote **cleanPriceQuotes, char **e) {-  try {return ret(new QlRendistatoBasket(alloc(new RendistatoBasket(qlVector(btps, btpsLen),-      std::vector<double>(outstandings, outstandings+outstandingsLen), qlHandleVector(cleanPriceQuotes, quotesLen)))));-  } catch (std::exception& er) {return handleException<QlRendistatoBasket*>(e, er);}}-void qlFreeRendistatoBasket(QlRendistatoBasket *o) {del(o);}--QlRendistatoCalculator *qlRendistatoCalculator(QlRendistatoBasket *basket, int euriborTenorLen, int euriborTenorUnit,-    QlYieldTermStructure *euriborForwardCurve, QlYieldTermStructure *discountCurve, char **e) {-  try {-    auto idx = ext::make_shared<Euribor>(Period(euriborTenorLen, (TimeUnit)euriborTenorUnit), qlNullableHandle(euriborForwardCurve));-    return ret(new QlRendistatoCalculator(alloc(new RendistatoCalculator(*arg(basket), idx, *arg(discountCurve)))));-  } catch (std::exception& er) {return handleException<QlRendistatoCalculator*>(e, er);}}-void qlFreeRendistatoCalculator(QlRendistatoCalculator *o) {del(o);}-double qlRendistatoCalculatorYield(QlRendistatoCalculator *o, char **e) {-  try {return (*arg(o))->yield();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRendistatoCalculatorDuration(QlRendistatoCalculator *o, char **e) {-  try {return (*arg(o))->duration();-  } catch (std::exception& er) {return handleException<double>(e, er);}}--void qlRendistatoCalculatorYields(QlRendistatoCalculator *o, unsigned *len, double **out, char **e) {-  *len = 0; *out = 0;-  try {copyRealVector((*arg(o))->yields(), len, out);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-void qlRendistatoCalculatorDurations(QlRendistatoCalculator *o, unsigned *len, double **out, char **e) {-  *len = 0; *out = 0;-  try {copyRealVector((*arg(o))->durations(), len, out);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-void qlRendistatoCalculatorSwapLengths(QlRendistatoCalculator *o, unsigned *len, double **out, char **e) {-  *len = 0; *out = 0;-  try {copyRealVector((*arg(o))->swapLengths(), len, out);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-void qlRendistatoCalculatorSwapRates(QlRendistatoCalculator *o, unsigned *len, double **out, char **e) {-  *len = 0; *out = 0;-  try {copyRealVector((*arg(o))->swapRates(), len, out);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-void qlRendistatoCalculatorSwapYields(QlRendistatoCalculator *o, unsigned *len, double **out, char **e) {-  *len = 0; *out = 0;-  try {copyRealVector((*arg(o))->swapYields(), len, out);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-void qlRendistatoCalculatorSwapDurations(QlRendistatoCalculator *o, unsigned *len, double **out, char **e) {-  *len = 0; *out = 0;-  try {copyRealVector((*arg(o))->swapDurations(), len, out);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-QlVanillaSwap *qlRendistatoCalculatorEquivalentSwap(QlRendistatoCalculator *o, char **e) {-  try {return ret(new QlVanillaSwap((*arg(o))->equivalentSwap()));-  } catch (std::exception& er) {return handleException<QlVanillaSwap*>(e, er);}}-double qlRendistatoCalculatorEquivalentSwapRate(QlRendistatoCalculator *o, char **e) {-  try {return (*arg(o))->equivalentSwapRate();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRendistatoCalculatorEquivalentSwapYield(QlRendistatoCalculator *o, char **e) {-  try {return (*arg(o))->equivalentSwapYield();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRendistatoCalculatorEquivalentSwapDuration(QlRendistatoCalculator *o, char **e) {-  try {return (*arg(o))->equivalentSwapDuration();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRendistatoCalculatorEquivalentSwapLength(QlRendistatoCalculator *o, char **e) {-  try {return (*arg(o))->equivalentSwapLength();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRendistatoCalculatorEquivalentSwapSpread(QlRendistatoCalculator *o, char **e) {-  try {return (*arg(o))->equivalentSwapSpread();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlQuote *qlRendistatoEquivalentSwapLengthQuote(QlRendistatoCalculator *o, char **e) {-  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new RendistatoEquivalentSwapLengthQuote(*arg(o))))));-  } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-QlQuote *qlRendistatoEquivalentSwapSpreadQuote(QlRendistatoCalculator *o, char **e) {-  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new RendistatoEquivalentSwapSpreadQuote(*arg(o))))));-  } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}--QlFixedVsFloatingSwap* qlSwaptionUnderlying(QlSwaption* o, char **e) {-  try {return ret(new QlFixedVsFloatingSwap((*arg(o))->underlying()));}-  catch (std::exception& er) {return handleException<QlFixedVsFloatingSwap*>(e, er);}}-QlNonstandardSwap* qlNonstandardSwaptionUnderlyingSwap(QlNonstandardSwaption* o, char **e) {-  try {return ret(new QlNonstandardSwap((*arg(o))->underlyingSwap()));}-  catch (std::exception& er) {return handleException<QlNonstandardSwap*>(e, er);}}-QlFloatFloatSwap* qlFloatFloatSwaptionUnderlyingSwap(QlFloatFloatSwaption* o, char **e) {-  try {return ret(new QlFloatFloatSwap((*arg(o))->underlyingSwap()));}-  catch (std::exception& er) {return handleException<QlFloatFloatSwap*>(e, er);}}-QlIrregularSwap* qlIrregularSwaptionUnderlyingSwap(QlIrregularSwaption* o, char **e) {-  try {return ret(new QlIrregularSwap((*arg(o))->underlyingSwap()));}-  catch (std::exception& er) {return handleException<QlIrregularSwap*>(e, er);}}-QlCreditDefaultSwap* qlCdsOptionUnderlyingSwap(QlCdsOption* o, char **e) {-  try {return ret(new QlCreditDefaultSwap((*arg(o))->underlyingSwap()));}-  catch (std::exception& er) {return handleException<QlCreditDefaultSwap*>(e, er);}}-+#include <ql/version.hpp>+#if QL_HEX_VERSION >= 0x01440000+#include <ql/cashflows/stubiborcoupon.hpp>+#endif+#include <ql/cashflows/coupon.hpp>+#include <ql/cashflows/averagebmacoupon.hpp>+#include <ql/cashflows/fixedratecoupon.hpp>+#include <ql/cashflows/iborcoupon.hpp>+#include <ql/cashflows/cmscoupon.hpp>+#include <ql/cashflows/capflooredcoupon.hpp>+#include <ql/cashflows/digitalcmscoupon.hpp>+#include <ql/cashflows/digitalcoupon.hpp>+#include <ql/cashflows/digitaliborcoupon.hpp>+#include <ql/cashflows/replication.hpp>+#include <ql/cashflows/overnightindexedcoupon.hpp>+#include <ql/cashflows/overnightindexedcouponpricer.hpp>+#include <ql/cashflows/blackovernightindexedcouponpricer.hpp>+#include <ql/cashflows/multipleresetscoupon.hpp>+#include <ql/cashflows/rangeaccrual.hpp>+#include <ql/cashflows/simplecashflow.hpp>+#include <ql/cashflows/indexedcashflow.hpp>+#include <ql/cashflows/cpicoupon.hpp>+#include <ql/cashflows/cpicouponpricer.hpp>+#include <ql/cashflows/yoyinflationcoupon.hpp>+#include <ql/cashflows/capflooredinflationcoupon.hpp>+#include <ql/cashflows/inflationcouponpricer.hpp>+#include <ql/cashflows/zeroinflationcashflow.hpp>+#include <ql/cashflows/couponpricer.hpp>+#include <ql/cashflows/dividend.hpp>+#include <ql/cashflows/couponpricer.hpp>+#include <ql/cashflows/conundrumpricer.hpp>+#include <ql/cashflows/lineartsrpricer.hpp>+#include <ql/experimental/coupons/cmsspreadcoupon.hpp>+#include <ql/experimental/coupons/digitalcmsspreadcoupon.hpp>+#include <ql/experimental/coupons/lognormalcmsspreadpricer.hpp>+#include <ql/experimental/coupons/quantocouponpricer.hpp>+#include <ql/experimental/coupons/strippedcapflooredcoupon.hpp>+#include <ql/experimental/coupons/swapspreadindex.hpp>+#include <ql/cashflows/equitycashflow.hpp>+#include <ql/indexes/equityindex.hpp>+#include <ql/instruments/inflationcapfloor.hpp>+#include <ql/instruments/cpicapfloor.hpp>+#include <ql/experimental/credit/defaultprobabilitykey.hpp>+#include <ql/experimental/credit/issuer.hpp>+#include <ql/experimental/credit/pool.hpp>+#include <ql/experimental/credit/basket.hpp>+#include <ql/experimental/credit/gaussianlhplossmodel.hpp>+#include <ql/experimental/credit/syntheticcdo.hpp>+#include <ql/experimental/credit/nthtodefault.hpp>+#include <ql/experimental/termstructures/basisswapratehelpers.hpp>+#include <ql/experimental/termstructures/crosscurrencyratehelpers.hpp>+#include <ql/termstructures/yield/multipleresetsswaphelper.hpp>+#include <ql/termstructures/yield/overnightindexfutureratehelper.hpp>+#include <ql/version.hpp>+#include <cmath>+#if QL_HEX_VERSION >= 0x01440000+#include <ql/experimental/termstructures/overnightindexedfundingratehelper.hpp>+#endif++#include "qlaux.h"+#if QL_HEX_VERSION >= 0x01440000+#include <ql/experimental/fx/mtmcrosscurrencybasisswap.hpp>+#include <ql/experimental/fx/fxresetcashflows.hpp>+#include <ql/cashflows/stubiborcoupon.hpp>+#endif+using namespace QuantLib;+#include "qlInstrument.h"+#include "qlMisc.h"+#include "qlTermStructureAux.h"++#include <cstring>++#ifdef QLTRACK_ALLOCATIONS+QL_TRACE_NAME(Leg)+QL_TRACE_NAME(QlAdditionalResult)+#endif++namespace {+  // QuantLib <= 1.43 prices an OIS underlying as Ibor coupons; 1.44 dispatches on this same type.+  bool qlOvernightUnderlyingSupported(QlError **e, const shared_ptr<FixedVsFloatingSwap>& swap, const char* call) {+#if QL_HEX_VERSION >= 0x01440000+    (void)e; (void)swap; (void)call;+    return true;+#else+    if (!ext::dynamic_pointer_cast<OvernightIndexedSwap>(swap)) return true;+    qlUnsupportedVersion(e, call, "1.44");+    return false;+#endif+  }+  Replication::Type qlReplicationType(int type) {+    switch (type) {+      case hasquant::ReplicationSub: return Replication::Sub;+      case hasquant::ReplicationCentral: return Replication::Central;+      case hasquant::ReplicationSuper: return Replication::Super;+      default: QL_FAIL("unknown replication type " << type);+    }+  }+  int qlReplicationTypeOut(Replication::Type type) {+    switch (type) {+      case Replication::Sub: return hasquant::ReplicationSub;+      case Replication::Central: return hasquant::ReplicationCentral;+      case Replication::Super: return hasquant::ReplicationSuper;+      default: QL_FAIL("unknown replication type " << type);+    }+  }+  // SecondaryCosts = map<string, ext::any>, used with exactly two concrete alternatives+  // (CommodityUnitCost/Money -- see energycommodity.cpp's two any_cast branches), bound as a real+  // 2-variant sum: scIsUnitCost[i] selects which of (scAmounts[i], scCurrencies[i]) alone (Money)+  // or paired with scUoms[i] (CommodityUnitCost) fills entry i. An empty (n==0) list stands in for+  // upstream's nullptr shared_ptr, matching every constructor's own optional-secondaryCosts default.+  shared_ptr<SecondaryCosts> qlBuildSecondaryCosts(unsigned n, char **keys, int *isUnitCost, double *amounts,+                                                   Currency **currencies, UnitOfMeasure **uoms) {+    if (n == 0) return shared_ptr<SecondaryCosts>();+    auto sc = ext::make_shared<SecondaryCosts>();+    for (unsigned i = 0; i < n; ++i) {+      Money amount(*arg(currencies[i]), amounts[i]);+      if (isUnitCost[i])+        (*sc)[keys[i]] = CommodityUnitCost(amount, *arg(uoms[i]));+      else+        (*sc)[keys[i]] = amount;+    }+    return sc;+  }++  // The structure-of-parallel-arrays representation of a PricingPeriods list, shared by every+  // EnergySwap-family constructor's own pricingPeriods argument and by createPricingPeriods'+  // output below.+  PricingPeriods qlPricingPeriodVector(unsigned n, int *startDates, int *endDates, int *paymentDates,+                                       CommodityType **types, UnitOfMeasure **uoms, double *amounts) {+    PricingPeriods pps;+    pps.reserve(n);+    for (unsigned i = 0; i < n; ++i)+      pps.push_back(ext::make_shared<PricingPeriod>(Date(startDates[i]), Date(endDates[i]), Date(paymentDates[i]),+                                                    Quantity(*arg(types[i]), *arg(uoms[i]), amounts[i])));+    return pps;+  }+  // r's fields are all zero/null on entry (the caller value-initialises the whole array), so any+  // field this leaves untouched is already the correct "unset" value.+  void fillResult(struct QlAdditionalResult &r, const any &v) {+    if (v.type() == typeid(double)) {+      r.type = AdditionalResultDouble;+      r.dval = any_cast<double>(v);+    } else if (v.type() == typeid(std::string)) {+      r.type = AdditionalResultString;+      r.sval = tracedup(any_cast<std::string>(v).c_str());+    } else if (v.type() == typeid(std::vector<double>)) {+      r.type = AdditionalResultDoubleVector;+      const std::vector<double> &vec = any_cast<const std::vector<double>&>(v);+      r.vlen = static_cast<unsigned>(vec.size());+      if (r.vlen) {+        double *varr = alloc(new double[r.vlen]);+        for (unsigned i = 0; i < r.vlen; ++i) varr[i] = vec[i];+        r.varr = varr;+      }+    } else {+      r.type = AdditionalResultUnknown;+      r.sval = tracedup(v.type().name());+    }+  }+  // Payoff has exactly three pure virtuals (ql/payoff.hpp), so a Haskell-defined one needs only+  // one callback plus two strings. Unlike qlFdmRollback's whole-grid callbacks, operator() is+  // genuinely per scalar price everywhere upstream -- DiscretizedVanillaOption loops it node by+  // node, FdmCellAveragingInnerValue calls it inside a per-cell Simpson integral, AmericanPathPricer+  // calls it per path per exercise index -- and nothing batches an Array. The per-value callback+  // is therefore unavoidable, as it is for HsFdmInnerValueCalculator (qlPricingEngine.cpp).+  using PayoffFun = QlCallback;+  using BasketAccumulateFun = QlCallback;++  class HsPayoff : public Payoff {+  public:+    HsPayoff(std::string name, std::string description, PayoffFun fn)+    : name_(std::move(name)), description_(std::move(description)), fn_(fn) {}+    std::string name() const override {return name_;}+    std::string description() const override {return description_;}+    Real operator()(Real price) const override {return fn_->scalar(price);}+  private:+    std::string name_, description_;+    PayoffFun fn_;+  };++  // Same callback, but derived from StrikedTypePayoff instead of Payoff, carrying an advisory+  // (type, strike) pair. This is what makes a Haskell payoff usable with the FD vanilla engines:+  // FdBlackScholesVanillaEngine/FdHestonVanillaEngine dynamic_pointer_cast the payoff to+  // StrikedTypePayoff and call ->strike(), so they reject a plain HsPayoff -- and QuantLib <= 1.43,+  // which omits the QL_REQUIRE, null-derefs there. They need+  // the strike only for mesher geometry -- grid extent and the node-concentration point -- and+  // hand the payoff itself to FdmLogInnerValue, which takes a generic Payoff. So supplying a real+  // strike makes the cast succeed and the engine price the Haskell payoff correctly, rather than+  // being a guard bolted on around a crash. StrikedTypePayoff adds no pure virtuals over Payoff+  // (it supplies description(), and TypePayoff supplies optionType()), so only operator() and+  // name() are overridden here.+  class HsStrikedPayoff : public StrikedTypePayoff {+  public:+    HsStrikedPayoff(Option::Type type, Real strike, std::string name, PayoffFun fn)+    : StrikedTypePayoff(type, strike), name_(std::move(name)), fn_(fn) {}+    std::string name() const override {return name_;}+    Real operator()(Real price) const override {return fn_->scalar(price);}+  private:+    std::string name_;+    PayoffFun fn_;+  };++  // BasketPayoff's only pure virtual is accumulate(const Array&) -- the whole underlying-state+  // vector per call -- so this hook is already the coarsened shape; name()/description()/+  // operator()(Real) all delegate to the base payoff upstream and need no override.+  class HsBasketPayoff : public BasketPayoff {+  public:+    HsBasketPayoff(const shared_ptr<Payoff>& base, BasketAccumulateFun fn)+    : BasketPayoff(base), fn_(fn) {}+    Real accumulate(const Array& a) const override {+      return fn_->array(a.begin(), (unsigned)a.size());+    }+  private:+    BasketAccumulateFun fn_;+  };++  // Shared by RendistatoCalculator's plain-Real-vector getters (yields/durations/swapLengths/+  // swapRates/swapYields/swapDurations).+  void copyRealVector(const std::vector<Real>& v, unsigned *len, double **out) {+    double *xs = qlAllocateDoubles(v.size());+    std::copy(v.begin(), v.end(), xs);+    *len = v.size(); *out = xs;+  }+  // Stages QlAdditionalResult structs until commit(); their owned fields require the matching+  // aggregate finalizer.+  class OutAdditionalResultArray {+    unsigned *outLen_;+    QlAdditionalResult **out_;+    unsigned len_ = 0;+    QlAdditionalResult *value_ = nullptr;+    public:+    OutAdditionalResultArray(unsigned *outLen, QlAdditionalResult **out) : outLen_(outLen), out_(out) {+      *outLen_ = 0;+      *out_ = nullptr;+    }+    OutAdditionalResultArray(const OutAdditionalResultArray&) = delete;+    OutAdditionalResultArray& operator=(const OutAdditionalResultArray&) = delete;+    ~OutAdditionalResultArray() {if (value_) qlFreeAdditionalResults(len_, value_);}+    QlAdditionalResult* allocate(unsigned len) {+      // Value-initialisation makes every entry safe for the aggregate finalizer after a partial fill.+      value_ = alloc(new QlAdditionalResult[len]());+      len_ = len;+      return value_;+    }+    void commit() noexcept {*outLen_ = len_; *out_ = value_; value_ = nullptr;}+  };++  // Every fixing a cash flow needs, as (index name, fixing date) pairs, for dependency+  // extraction. QuantLib 1.43 has no requiredFixings() API, so its acyclic visitor supplies the+  // concrete coupon type after a Leg has erased it to CashFlow.+  // A cash flow that carries no index -- a redemption, a fixed-rate coupon, a plain payment --+  // needs no fixing and contributes nothing; that is not an error.+  void collectIndexFixing(const ext::shared_ptr<Index>& index, const Date& date,+                          std::vector<std::pair<std::string, Date> >& out) {+    if (!index || date == Date()) return;+    // A spread index holds no fixings of its own: SwapSpreadIndex::pastFixing reads both+    // underlying swap indexes, so those are the names the store must carry. Index has no+    // accept() or dependency virtual, and generic IndexedCashFlow accepts a base Index, making+    // this the one upstream-forced downcast in the walk.+    if (auto spread = ext::dynamic_pointer_cast<SwapSpreadIndex>(index)) {+      collectIndexFixing(spread->swapIndex1(), date, out);+      collectIndexFixing(spread->swapIndex2(), date, out);+      return;+    }+#if QL_HEX_VERSION >= 0x01440000+    // The composite is erased to Index; its components own the actual fixing histories.+    if (auto weighted = ext::dynamic_pointer_cast<StubIborCoupon::WeightedIndex>(index)) {+      for (const auto& component : weighted->components())+        collectIndexFixing(component.first, date, out);+      return;+    }+#endif+    out.emplace_back(index->name(), date);+  }++  // The CPI fixings CPI::laggedFixing reads for a date d (inflationindex.cpp): the start of the+  // index period holding d - lag, and under Linear the next period's start too, unless d is+  // itself a period start. QuantLib's store is read at period starts only+  // (ZeroInflationIndex::pastFixing), so these are the keys a fixing must be filed under.+  void collectLaggedFixing(const ext::shared_ptr<ZeroInflationIndex>& index, const Date& d,+                           const Period& lag, CPI::InterpolationType interpolation,+                           std::vector<std::pair<std::string, Date> >& out) {+    if (!index || d == Date()) return;+    std::pair<Date, Date> period = inflationPeriod(d - lag, index->frequency());+    out.emplace_back(index->name(), period.first);+    if (interpolation == CPI::Linear && d != inflationPeriod(d, index->frequency()).first)+      out.emplace_back(index->name(), period.second + 1);+  }++  // CPICashFlow keeps a given base CPI in a protected member and answers baseFixing() from it+  // without saying whether it was given; a pointer to the member, taken in a derived scope, reads+  // it (upstream offers no accessor).+  struct CpiCashFlowBase : CPICashFlow {+    static Real of(const CPICashFlow& c) {return c.*(&CpiCashFlowBase::baseFixing_);}+  };++  class FixingDependencyVisitor : public AcyclicVisitor,+                                  public Visitor<CashFlow>,+#if QL_HEX_VERSION >= 0x01440000+                                  public Visitor<FxResetCoupon>,+#endif+                                  public Visitor<CappedFlooredOvernightIndexedCoupon>,+                                  public Visitor<StrippedCappedFlooredCoupon>,+                                  public Visitor<DigitalCoupon>,+                                  public Visitor<CappedFlooredCoupon>,+                                  public Visitor<AverageBMACoupon>,+                                  public Visitor<MultipleResetsCoupon>,+                                  public Visitor<OvernightIndexedCoupon>,+                                  public Visitor<CmsSpreadCoupon>,+                                  public Visitor<FloatingRateCoupon>,+                                  public Visitor<CPICoupon>,+                                  public Visitor<YoYInflationCoupon>,+                                  public Visitor<InflationCoupon>,+                                  public Visitor<ZeroInflationCashFlow>,+                                  public Visitor<IndexedCashFlow> {+    std::vector<std::pair<std::string, Date> >& out_;++    void accept(const ext::shared_ptr<CashFlow>& cf) {+      if (cf) cf->accept(*this);+    }++  public:+    explicit FixingDependencyVisitor(std::vector<std::pair<std::string, Date> >& out)+    : out_(out) {}++    void visit(CashFlow&) override {}+#if QL_HEX_VERSION >= 0x01440000+    void visit(FxResetCoupon& c) override {accept(c.underlying());}+#endif+    void visit(CappedFlooredOvernightIndexedCoupon& c) override {accept(c.underlying());}++    // StrippedCappedFlooredCoupon::accept visits its underlying before visiting itself.+    void visit(StrippedCappedFlooredCoupon&) override {}++    void visit(DigitalCoupon& c) override {accept(c.underlying());}+    void visit(CappedFlooredCoupon& c) override {accept(c.underlying());}++    void visit(AverageBMACoupon& c) override {+      for (const Date& d : c.fixingDates()) collectIndexFixing(c.index(), d, out_);+    }+    void visit(MultipleResetsCoupon& c) override {+      for (const Date& d : c.fixingDates()) collectIndexFixing(c.index(), d, out_);+    }+    void visit(OvernightIndexedCoupon& c) override {+      for (const Date& d : c.fixingDates()) collectIndexFixing(c.index(), d, out_);+    }+    void visit(CmsSpreadCoupon& c) override {+      const ext::shared_ptr<SwapSpreadIndex>& spread = c.swapSpreadIndex();+      if (!spread || c.fixingDate() == Date()) return;+      collectIndexFixing(spread->swapIndex1(), c.fixingDate(), out_);+      collectIndexFixing(spread->swapIndex2(), c.fixingDate(), out_);+    }+    void visit(FloatingRateCoupon& c) override {+      collectIndexFixing(c.index(), c.fixingDate(), out_);+    }+    // CPICoupon::indexRatio: the accrual end through the lag, and a base read only when no base+    // CPI is given, at baseDate() + lag (cpicoupon.cpp)+    void visit(CPICoupon& c) override {+      collectLaggedFixing(c.cpiIndex(), c.accrualEndDate(), c.observationLag(), c.observationInterpolation(), out_);+      if (c.baseCPI() == Null<Real>())+        collectLaggedFixing(c.cpiIndex(), c.baseDate() + c.observationLag(), c.observationLag(), c.observationInterpolation(), out_);+    }+    // CPI::laggedYoYRate: a quoted index's own fixings; a ratio index reads its underlying zero+    // index a year apart (YoYInflationIndex::fixing, or interpolated first under Linear)+    void visit(YoYInflationCoupon& c) override {+      const ext::shared_ptr<YoYInflationIndex>& index = c.yoyIndex();+      if (!index) return;+      const Date d = c.accrualEndDate();+      if (index->ratio()) {+        const ext::shared_ptr<ZeroInflationIndex> underlying = index->underlyingIndex();+        if (c.interpolation() == CPI::Linear) {+          collectLaggedFixing(underlying, d, c.observationLag(), CPI::Linear, out_);+          collectLaggedFixing(underlying, d - 1 * Years, c.observationLag(), CPI::Linear, out_);+        } else {+          const Date start = inflationPeriod(d - c.observationLag(), index->frequency()).first;+          collectLaggedFixing(underlying, start, 0 * Months, CPI::Flat, out_);+          collectLaggedFixing(underlying, start - 1 * Years, 0 * Months, CPI::Flat, out_);+        }+      } else {+        std::pair<Date, Date> period = inflationPeriod(d - c.observationLag(), index->frequency());+        out_.emplace_back(index->name(), period.first);+        if (c.interpolation() == CPI::Linear && d != inflationPeriod(d, index->frequency()).first)+          out_.emplace_back(index->name(), period.second + 1);+      }+    }+    void visit(InflationCoupon& c) override {+      collectIndexFixing(c.index(), c.fixingDate(), out_);+    }+    // ZeroInflationCashFlow reads laggedFixing at its start and end dates, which it keeps private;+    // IndexedCashFlow's base and fixing dates are those less the lag, so their period starts are+    // the keys, and under Linear the next ones unless the dates fall on a month's first day+    void visit(ZeroInflationCashFlow& c) override {+      const ext::shared_ptr<ZeroInflationIndex>& index = c.zeroInflationIndex();+      if (!index) return;+      for (const Date& lagged : {c.baseDate(), c.fixingDate()}) {+        std::pair<Date, Date> period = inflationPeriod(lagged, index->frequency());+        out_.emplace_back(index->name(), period.first);+        if (c.observationInterpolation() == CPI::Linear && lagged.dayOfMonth() != 1)+          out_.emplace_back(index->name(), period.second + 1);+      }+    }+    void visit(IndexedCashFlow& c) override {+      // CPICashFlow has no accept() of its own, so it arrives here: a downcast is the only way+      // to read its lag and interpolation (CPICashFlow::indexFixing, ::baseFixing)+      if (auto* cpi = dynamic_cast<CPICashFlow*>(&c)) {+        collectLaggedFixing(cpi->cpiIndex(), cpi->observationDate(), cpi->observationLag(), cpi->interpolation(), out_);+        if (CpiCashFlowBase::of(*cpi) == Null<Real>())+          collectLaggedFixing(cpi->cpiIndex(), cpi->baseDate(), 0 * Months, cpi->interpolation(), out_);+        return;+      }+      collectIndexFixing(c.index(), c.fixingDate(), out_);+      try {collectIndexFixing(c.index(), c.baseDate(), out_);} catch (const std::exception&) {}+    }+  };++  void collectFixingDependencies(const ext::shared_ptr<CashFlow>& cf,+                                 std::vector<std::pair<std::string, Date> >& out) {+    if (!cf) return;+    FixingDependencyVisitor visitor(out);+    cf->accept(visitor);+  }++  void collectLegFixingDependencies(const Leg& leg,+                                    std::vector<std::pair<std::string, Date> >& out) {+    for (const auto& cf : leg) collectFixingDependencies(cf, out);+  }++  void collectSwapFixingDependencies(const Swap& swap,+                                     std::vector<std::pair<std::string, Date> >& out) {+    for (Size j = 0; j < swap.numberOfLegs(); ++j)+      collectLegFixingDependencies(swap.leg(j), out);+  }++  class RateHelperFixingDependencyVisitor : public AcyclicVisitor,+                                            public Visitor<RateHelper>,+                                            public Visitor<DepositRateHelper>,+                                            public Visitor<FixedDateDepositRateHelper>,+                                            public Visitor<FraRateHelper>,+                                            public Visitor<FixedDateFraRateHelper>,+                                            public Visitor<FuturesRateHelper>,+                                            public Visitor<FxSwapRateHelper>,+                                            public Visitor<SwapRateHelper>,+                                            public Visitor<OISRateHelper>,+                                            public Visitor<IborIborBasisSwapRateHelper>,+                                            public Visitor<OvernightIborBasisSwapRateHelper>,+#if QL_HEX_VERSION >= 0x01440000+                                            public Visitor<OvernightOvernightBasisSwapRateHelper>,+                                            public Visitor<OvernightIndexedFundingRateHelper>,+#endif+                                            public Visitor<BondHelper>,+                                            public Visitor<BMASwapRateHelper>,+                                            public Visitor<MultipleResetsSwapRateHelper>,+                                            public Visitor<OvernightIndexFutureRateHelper>,+                                            public Visitor<ConstNotionalCrossCurrencyBasisSwapRateHelper>,+                                            public Visitor<MtMCrossCurrencyBasisSwapRateHelper>,+                                            public Visitor<ConstNotionalCrossCurrencySwapRateHelper> {+    std::vector<std::pair<std::string, Date> >& out_;+    bool opaque_;++    // Helpers that keep their instrument in a protected member: a derived class may name it through+    // a pointer to member, which reaches it without touching QuantLib.+#if QL_HEX_VERSION < 0x01440000+    struct BMAPeek : BMASwapRateHelper {+      static const ext::shared_ptr<BMASwap>& swap(BMASwapRateHelper& h) {return h.*(&BMAPeek::swap_);}+    };+    struct MultipleResetsPeek : MultipleResetsSwapRateHelper {+      static const ext::shared_ptr<MultipleResetsSwap>& swap(MultipleResetsSwapRateHelper& h) {+        return h.*(&MultipleResetsPeek::swap_);}+    };+    struct CrossCurrencySwapPeek : ConstNotionalCrossCurrencySwapRateHelper {+      static const ext::shared_ptr<ConstNotionalCrossCurrencyFixedVsFloatingSwap>& swap(+          ConstNotionalCrossCurrencySwapRateHelper& h) {return h.*(&CrossCurrencySwapPeek::xccySwap_);}+    };+#endif+    // The basis helpers price these legs; the swap() later versions expose is a unit-notional mirror.+    struct CrossCurrencyBasisPeek : CrossCurrencyBasisSwapRateHelperBase {+      static const Leg& baseLeg(CrossCurrencyBasisSwapRateHelperBase& h) {+        return h.*(&CrossCurrencyBasisPeek::baseCcyIborLeg_);}+      static const Leg& quoteLeg(CrossCurrencyBasisSwapRateHelperBase& h) {+        return h.*(&CrossCurrencyBasisPeek::quoteCcyIborLeg_);}+    };++    void collectPastFixing(const std::string& name, const Date& d) {+      if (d < Settings::instance().evaluationDate()) out_.emplace_back(name, d);+    }++    void collectCrossCurrencyBasis(CrossCurrencyBasisSwapRateHelperBase& h) {+      collectLegFixingDependencies(CrossCurrencyBasisPeek::baseLeg(h), out_);+      collectLegFixingDependencies(CrossCurrencyBasisPeek::quoteLeg(h), out_);+    }++  public:+    explicit RateHelperFixingDependencyVisitor(+        std::vector<std::pair<std::string, Date> >& out) : out_(out), opaque_(false) {}++    // True when the helper's instrument is one this walk cannot see, so an empty answer is not "needs nothing".+    bool opaque() const {return opaque_;}++    // A helper with no case below may read stored fixings, so it is "cannot see it" until given one.+    void visit(RateHelper&) override {opaque_ = true;}+    // The relative-date deposit and FRA forms read no stored fixing: they adjust the evaluation date+    // to a business day before advancing to spot, so they fix on or after it, and fixing(d, true)+    // forecasts from the evaluation date on.+    void visit(DepositRateHelper&) override {}+    void visit(FraRateHelper&) override {}+    // The fixed-date forms read the store once their fixing date has passed, and not on it, where+    // fixing(d, true) still forecasts. The FRA reads it only with an indexed coupon.+    void visit(FixedDateDepositRateHelper& h) override {collectPastFixing(h.indexName(), h.fixingDate());}+    void visit(FixedDateFraRateHelper& h) override {+      if (h.useIndexedCoupon()) collectPastFixing(h.indexName(), h.fixingDate());+    }+    void visit(FuturesRateHelper&) override {}+    void visit(FxSwapRateHelper&) override {}+    void visit(SwapRateHelper& h) override {collectSwapFixingDependencies(*h.swap(), out_);}+    void visit(OISRateHelper& h) override {collectSwapFixingDependencies(*h.swap(), out_);}+    void visit(IborIborBasisSwapRateHelper& h) override {+      collectSwapFixingDependencies(*h.swap(), out_);+    }+    void visit(OvernightIborBasisSwapRateHelper& h) override {+      collectSwapFixingDependencies(*h.swap(), out_);+    }+#if QL_HEX_VERSION >= 0x01440000+    void visit(OvernightOvernightBasisSwapRateHelper& h) override {+      collectSwapFixingDependencies(*h.swap(), out_);+    }+    void visit(OvernightIndexedFundingRateHelper& h) override {+      collectSwapFixingDependencies(*h.swap(), out_);+    }+#endif+    void visit(BondHelper& h) override {collectLegFixingDependencies(h.bond()->cashflows(), out_);}+#if QL_HEX_VERSION >= 0x01440000+    void visit(BMASwapRateHelper& h) override {collectSwapFixingDependencies(*h.swap(), out_);}+    void visit(MultipleResetsSwapRateHelper& h) override {collectSwapFixingDependencies(*h.swap(), out_);}+    // OvernightIndexFuture's rate reads the stored fixing of each business day from its value date,+    // adjusted Preceding, up to today, today's only if present; an expired future reads none.+    void visit(OvernightIndexFutureRateHelper& h) override {+      const ext::shared_ptr<OvernightIndexFuture> future = h.future();+      if (future->isExpired()) return;+      const ext::shared_ptr<OvernightIndex>& index = future->overnightIndex();+      const Calendar calendar = index->fixingCalendar();+      const Date today = Settings::instance().evaluationDate();+      Date d = future->valueDate();+      for (Date fixingDate = calendar.adjust(d, Preceding);+           d < future->maturityDate() && fixingDate <= today; fixingDate = d = calendar.advance(d, 1, Days))+        out_.emplace_back(index->name(), fixingDate);+    }+    void visit(ConstNotionalCrossCurrencySwapRateHelper& h) override {+      collectSwapFixingDependencies(*h.swap(), out_);+    }+#else+    void visit(BMASwapRateHelper& h) override {collectSwapFixingDependencies(*BMAPeek::swap(h), out_);}+    void visit(MultipleResetsSwapRateHelper& h) override {+      collectSwapFixingDependencies(*MultipleResetsPeek::swap(h), out_);+    }+    // The future is private, and reads past fixings from its value date adjusted Preceding on a calendar+    // it also hides; two weeks before the start covers any holiday run, and before that it reads none.+    void visit(OvernightIndexFutureRateHelper& h) override {+      if (h.earliestDate() - 14 <= Settings::instance().evaluationDate()) opaque_ = true;+    }+    void visit(ConstNotionalCrossCurrencySwapRateHelper& h) override {+      collectSwapFixingDependencies(*CrossCurrencySwapPeek::swap(h), out_);+    }+#endif+    void visit(ConstNotionalCrossCurrencyBasisSwapRateHelper& h) override {collectCrossCurrencyBasis(h);}+    void visit(MtMCrossCurrencyBasisSwapRateHelper& h) override {collectCrossCurrencyBasis(h);}+  };+}++#ifdef QLTRACK_ALLOCATIONS+// Same reason as qlPricingEngine.cpp's Hs* labels: these live in the anonymous namespace above and+// so cannot be named in qlaux.h's table, and without a specialization ObjClassName falls back to+// typeid().name(). All three are shared_ptr payloads -- alloc() only, never freed.+QL_TRACE_NAME(HsPayoff)+QL_TRACE_NAME(HsStrikedPayoff)+QL_TRACE_NAME(HsBasketPayoff)+#endif++extern "C" {+QlInstrument* qlPerpetualFutures(int payoffType, int fundingType,+                                 int fundingFrequencyLength, int fundingFrequencyUnit,+                                 Calendar* cal, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlInstrument(alloc(new PerpetualFutures(+      (PerpetualFutures::PayoffType)payoffType,+      (PerpetualFutures::FundingType)fundingType,+      Period(fundingFrequencyLength, (TimeUnit)fundingFrequencyUnit), *arg(cal), *arg(dc)))));+  } catch (std::exception& er) {return handleException<QlInstrument*>(e, er);}}++double qlInstrumentNPV(QlInstrument *instr, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(instr))->NPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlInstrumentSetPricingEngine(QlInstrument *instr, QlPricingEngine *eng, QlError **e) { QlCallScope callbackScope(e);try {(*arg(instr))->setPricingEngine(*arg(eng));} catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlFreeInstrument(QlInstrument *instr) {del(instr);}++void qlInstrumentAdditionalResults(QlInstrument *instr, unsigned *len,+    struct QlAdditionalResult **out, QlError **e) { QlCallScope callbackScope(e);+  OutAdditionalResultArray result(len, out);+  try {+    const std::map<std::string, any> &res = (*arg(instr))->additionalResults();+    if (res.empty()) return;+    QlAdditionalResult *arr = result.allocate(static_cast<unsigned>(res.size()));+    unsigned i = 0;+    for (std::map<std::string, any>::const_iterator it = res.begin(); it != res.end(); ++it, ++i) {+      arr[i].key = tracedup(it->first.c_str());+      fillResult(arr[i], it->second);+    }+    result.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}+}++void qlFreeAdditionalResults(unsigned len, struct QlAdditionalResult *out) {+  if (!out) return;+  for (unsigned i = 0; i < len; ++i) {+    qlFreeString(out[i].key);+    if (out[i].sval) qlFreeString(out[i].sval);+    delArray(out[i].varr);+  }+  delArray(out);+}++QlInstrument* qlCompositeInstrument(unsigned instrLen, QlInstrument **instrs, unsigned, double *coeff, QlError **e) { QlCallScope callbackScope(e);+  try {auto ci = ext::make_shared<CompositeInstrument>();+    for (unsigned i = 0; i < instrLen; ++i)+        ci->add(*(instrs[i]), coeff[i]);+    alloc(ci.get());+    return ret(new QlInstrument(ci));+  } catch (std::exception& er) {return handleException<QlInstrument*>(e, er);}}++double qlInstrumentErrorEstimate(QlInstrument* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->errorEstimate();} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlInstrumentIsExpired(QlInstrument* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->isExpired();} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlInstrumentValuationDate(QlInstrument* o, QlError **e) { QlCallScope callbackScope(e);try {return ((*arg(o))->valuationDate()).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+void qlFreePayoff(QlPayoff *o) {del(o);}+void qlFreeBasketPayoff(QlBasketPayoff *o) {del(o);}+QlPayoff* qlBasketPayoffAsPayoff(QlBasketPayoff *o) {return ret(new QlPayoff(*arg(o)));}+void qlFreeTypePayoff(QlTypePayoff *o) {del(o);}+QlPayoff* qlTypePayoffAsPayoff(QlTypePayoff *o) {return ret(new QlPayoff(*arg(o)));}+void qlFreeStrikedTypePayoff(QlStrikedTypePayoff *o) {del(o);}+QlTypePayoff* qlStrikedTypePayoffAsTypePayoff(QlStrikedTypePayoff *o) {return ret(new QlTypePayoff(*arg(o)));}+void qlFreePercentageStrikePayoff(QlPercentageStrikePayoff *o) {del(o);}+QlStrikedTypePayoff* qlPercentageStrikePayoffAsStrikedTypePayoff(QlPercentageStrikePayoff *o) {return ret(new QlStrikedTypePayoff(*arg(o)));}+void qlFreePlainVanillaPayoff(QlPlainVanillaPayoff *o) {del(o);}+QlStrikedTypePayoff* qlPlainVanillaPayoffAsStrikedTypePayoff(QlPlainVanillaPayoff *o) {return ret(new QlStrikedTypePayoff(*arg(o)));}++QlPayoff* qlPayoffFromFunction(const char* name, const char* description, QlCallback* fn, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPayoff(alloc(new HsPayoff(name, description, *arg(fn)))));+  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}+QlStrikedTypePayoff* qlStrikedPayoffFromFunction(int type, double strike, const char* name, QlCallback* fn, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStrikedTypePayoff(alloc(new HsStrikedPayoff((Option::Type)type, strike, name, *arg(fn)))));+  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}+QlBasketPayoff* qlBasketPayoffFromFunction(QlPayoff* base, QlCallback* fn, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBasketPayoff(alloc(new HsBasketPayoff(*arg(base), *arg(fn)))));+  } catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}++QlStrikedTypePayoff* qlAssetOrNothingPayoff(int type, double strike, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStrikedTypePayoff(alloc(new AssetOrNothingPayoff((Option::Type)type, strike))));+  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}+QlBasketPayoff* qlAverageBasketPayoff(QlPayoff* p, unsigned n, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBasketPayoff(alloc(new AverageBasketPayoff(*arg(p), n))));+  } catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}+QlBasketPayoff* qlAverageBasketPayoff1(QlPayoff* p, unsigned aLen, double* a, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBasketPayoff(alloc(new AverageBasketPayoff(*arg(p), Array(a, a+aLen)))));+  } catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}+QlStrikedTypePayoff* qlCashOrNothingPayoff(int type, double strike, double cashPayoff, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStrikedTypePayoff(alloc(new CashOrNothingPayoff((Option::Type)type, strike, cashPayoff))));+  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}+QlPayoff* qlDoubleStickyRatchetPayoff(double type1, double type2, double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPayoff(alloc(new DoubleStickyRatchetPayoff(type1, type2, gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));+  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}+QlTypePayoff* qlFloatingTypePayoff(int type, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlTypePayoff(alloc(new FloatingTypePayoff((Option::Type)type))));} catch (std::exception& er) {return handleException<QlTypePayoff*>(e, er);}}+QlPayoff* qlForwardTypePayoff(int type, double strike, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlPayoff(alloc(new ForwardTypePayoff((Position::Type)type, strike))));} catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}+QlStrikedTypePayoff* qlGapPayoff(int type, double strike, double secondStrike, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlStrikedTypePayoff(alloc(new GapPayoff((Option::Type)type, strike, secondStrike))));} catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}+QlBasketPayoff* qlMaxBasketPayoff(QlPayoff* p, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlBasketPayoff(alloc(new MaxBasketPayoff(*arg(p)))));} catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}+QlBasketPayoff* qlMinBasketPayoff(QlPayoff* p, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlBasketPayoff(alloc(new MinBasketPayoff(*arg(p)))));} catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}+QlPercentageStrikePayoff* qlPercentageStrikePayoff(int type, double moneyness, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPercentageStrikePayoff(alloc(new PercentageStrikePayoff((Option::Type)type, moneyness))));+  } catch (std::exception& er) {return handleException<QlPercentageStrikePayoff*>(e, er);}}+QlPlainVanillaPayoff* qlPlainVanillaPayoff(int type, double strike, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPlainVanillaPayoff(alloc(new PlainVanillaPayoff((Option::Type)type, strike))));+  } catch (std::exception& er) {return handleException<QlPlainVanillaPayoff*>(e, er);}}+QlPayoff* qlRatchetMaxPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPayoff(alloc(new RatchetMaxPayoff(gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));+  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}+QlPayoff* qlRatchetMinPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPayoff(alloc(new RatchetMinPayoff(gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));+  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}+QlPayoff* qlRatchetPayoff(double gearing1, double gearing2, double spread1, double spread2, double initialValue, double accrualFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPayoff(alloc(new RatchetPayoff(gearing1, gearing2, spread1, spread2, initialValue, accrualFactor))));+  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}+QlBasketPayoff* qlSpreadBasketPayoff(QlPayoff* p, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBasketPayoff(alloc(new SpreadBasketPayoff(*arg(p)))));+  } catch (std::exception& er) {return handleException<QlBasketPayoff*>(e, er);}}+QlPayoff* qlStickyMaxPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPayoff(alloc(new StickyMaxPayoff(gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));+  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}+QlPayoff* qlStickyMinPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPayoff(alloc(new StickyMinPayoff(gearing1, gearing2, gearing3, spread1, spread2, spread3, initialValue1, initialValue2, accrualFactor))));+  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}+QlPayoff* qlStickyPayoff(double gearing1, double gearing2, double spread1, double spread2, double initialValue, double accrualFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPayoff(alloc(new StickyPayoff(gearing1, gearing2, spread1, spread2, initialValue, accrualFactor))));+  } catch (std::exception& er) {return handleException<QlPayoff*>(e, er);}}+QlStrikedTypePayoff* qlSuperFundPayoff(double strike, double secondStrike, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStrikedTypePayoff(alloc(new SuperFundPayoff(strike, secondStrike))));+  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}+QlStrikedTypePayoff* qlSuperSharePayoff(double strike, double secondStrike, double cashPayoff, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStrikedTypePayoff(alloc(new SuperSharePayoff(strike, secondStrike, cashPayoff))));+  } catch (std::exception& er) {return handleException<QlStrikedTypePayoff*>(e, er);}}+void qlFreeAmericanExercise(QlAmericanExercise *o) {del(o);}+QlExercise* qlAmericanExerciseAsExercise(QlAmericanExercise *o) {return ret(new QlExercise(*arg(o)));}+void qlFreeBermudanExercise(QlBermudanExercise *o) {del(o);}+QlExercise* qlBermudanExerciseAsExercise(QlBermudanExercise *o) {return ret(new QlExercise(*arg(o)));}+void qlFreeEuropeanExercise(QlEuropeanExercise *o) {del(o);}+QlExercise* qlEuropeanExerciseAsExercise(QlEuropeanExercise *o) {return ret(new QlExercise(*arg(o)));}+void qlFreeExercise(QlExercise *o) {del(o);}+QlAmericanExercise* qlAmericanExercise(int earliestDate, int latestDate, int payoffAtExpiry, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlAmericanExercise(alloc(new AmericanExercise(Date(earliestDate), Date(latestDate), payoffAtExpiry))));+  } catch (std::exception& er) {return handleException<QlAmericanExercise*>(e, er);}}+QlBermudanExercise* qlBermudanExercise(unsigned datesLen, int *dates, int payoffAtExpiry, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBermudanExercise(alloc(new BermudanExercise(qlDateVector(dates, datesLen), payoffAtExpiry))));+  } catch (std::exception& er) {return handleException<QlBermudanExercise*>(e, er);}}+QlExercise* qlEarlyExercise(int type, int payoffAtExpiry, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlExercise(alloc(new EarlyExercise((Exercise::Type)type, payoffAtExpiry))));+  } catch (std::exception& er) {return handleException<QlExercise*>(e, er);}}+QlExercise* qlExercise(int type, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlExercise(alloc(new Exercise((Exercise::Type)type))));+  } catch (std::exception& er) {return handleException<QlExercise*>(e, er);}}+QlEuropeanExercise* qlEuropeanExercise(int date, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlEuropeanExercise(alloc(new EuropeanExercise(Date(date)))));} catch (std::exception& er) {return handleException<QlEuropeanExercise*>(e, er);}}+QlSwingExercise* qlSwingExercise(unsigned datesLen, int* dates, unsigned secLen, unsigned* seconds, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<Size> secs(seconds, seconds+secLen);+    return ret(new QlSwingExercise(alloc(new SwingExercise(qlDateVector(dates, datesLen), secs))));+  } catch (std::exception& er) {return handleException<QlSwingExercise*>(e, er);}}++QlSwingExercise* qlSwingExercise1(int from, int to, unsigned stepSizeSecs, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwingExercise(alloc(new SwingExercise(Date(from), Date(to), stepSizeSecs))));+  } catch (std::exception& er) {return handleException<QlSwingExercise*>(e, er);}}+QlExercise* qlSwingExerciseAsExercise(QlSwingExercise *o) {return ret(new QlExercise(*arg(o)));}++void qlFreeRebatedExercise(QlRebatedExercise *o) {del(o);}+QlExercise* qlRebatedExerciseAsExercise(QlRebatedExercise *o) {return ret(new QlExercise(*arg(o)));}+QlRebatedExercise* qlRebatedExercise(QlExercise* exercise, double rebate, unsigned rebateSettlementDays, Calendar* rebatePaymentCalendar, int rebatePaymentConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRebatedExercise(alloc(new RebatedExercise(**arg(exercise), rebate, rebateSettlementDays, *arg(rebatePaymentCalendar), (BusinessDayConvention)rebatePaymentConvention))));+  } catch (std::exception& er) {return handleException<QlRebatedExercise*>(e, er);}}+QlAmericanExercise* qlAmericanExercise1(int latestDate, int payoffAtExpiry, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlAmericanExercise(alloc(new AmericanExercise(Date(latestDate), payoffAtExpiry))));+  } catch (std::exception& er) {return handleException<QlAmericanExercise*>(e, er);}}++void qlFreeCapFloor(QlCapFloor *o) {del(o);}+QlInstrument* qlCapFloorAsInstrument(QlCapFloor *o) {return ret(new QlInstrument(*arg(o)));}++QlCapFloor* qlCap(Leg* floatingLeg, unsigned exerciseRatesLen, double* exerciseRates, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloor(alloc(new Cap(*arg(floatingLeg), std::vector<double>(exerciseRates, exerciseRates+exerciseRatesLen)))));+  } catch (std::exception& er) {return handleException<QlCapFloor*>(e, er);}}+QlCapFloor* qlCollar(Leg* floatingLeg, unsigned capRatesLen, double* capRates, unsigned floorRatesLen, double* floorRates, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloor(alloc(new Collar(*arg(floatingLeg), std::vector<double>(capRates, capRates+capRatesLen), std::vector<double>(floorRates, floorRates+floorRatesLen)))));+  } catch (std::exception& er) {return handleException<QlCapFloor*>(e, er);}}+QlCapFloor* qlFloor(Leg* floatingLeg, unsigned exerciseRatesLen, double* exerciseRates, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloor(alloc(new Floor(*arg(floatingLeg), std::vector<double>(exerciseRates, exerciseRates+exerciseRatesLen)))));+  } catch (std::exception& er) {return handleException<QlCapFloor*>(e, er);}}+double qlCapFloorAtmRate(QlCapFloor* o, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmRate(handleRef(arg(discountCurve)));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCapFloorImpliedVolatility(QlCapFloor* o, double price, QlYieldTermStructure* disc, double guess, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, int type, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->impliedVolatility(price, *arg(disc), guess, accuracy, maxEvaluations, minVol, maxVol, (VolatilityType)type, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlCapFloor* qlCapFloorOptionlet(QlCapFloor* o, unsigned n, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloor(alloc((*arg(o))->optionlet(n))));+  } catch (std::exception& er) {return handleException<QlCapFloor*>(e, er);}}++void qlFreeCallability(QlCallability *o) {del(o);}++QlCallability* qlCallability(double price, int priceType, int type, int date, QlError **e) { QlCallScope callbackScope(e);+  try {Bond::Price p(price, (Bond::Price::Type)priceType);+    return ret(new QlCallability(alloc(new Callability(p, (Callability::Type)type, Date(date)))));+  } catch (std::exception& er) {return handleException<QlCallability*>(e, er);}}++void qlFreeForward(QlForward *fwd) {del(fwd);}+void qlFreeForwardRateAgreement(QlForwardRateAgreement *fwd) {del(fwd);}+QlInstrument* qlForwardRateAgreementAsInstrument(QlForwardRateAgreement *fwd) {return ret(new QlInstrument(*arg(fwd)));}+QlInstrument* qlForwardAsInstrument(QlForward *fwd) {return ret(new QlInstrument(*arg(fwd)));}+double qlForwardForwardValue(QlForward* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->forwardValue();} catch (std::exception& er) {return handleException<double>(e, er);}}++InterestRate* qlForwardImpliedYield(QlForward* o, double underlyingSpotValue, double forwardValue, int settlementDate, int compoundingConvention, DayCounter* dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new InterestRate((*arg(o))->impliedYield(underlyingSpotValue, forwardValue, Date(settlementDate), (Compounding)compoundingConvention, *arg(dayCounter))));+  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}+int qlForwardSettlementDate(QlForward* o, QlError **e) { QlCallScope callbackScope(e);try {return ((*arg(o))->settlementDate()).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+double qlForwardSpotIncome(QlForward* o, QlYieldTermStructure* incomeDiscountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->spotIncome(*arg(incomeDiscountCurve));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlForwardSpotValue(QlForward* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->spotValue();} catch (std::exception& er) {return handleException<double>(e, er);}}++QlForwardRateAgreement* qlForwardRateAgreement(QlIborIndex* index, int valueDate, int maturityDate, int type, double strikeForwardRate, double notionalAmount, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlForwardRateAgreement(alloc(new ForwardRateAgreement(*arg(index), Date(valueDate), Date(maturityDate), (Position::Type)type, strikeForwardRate, notionalAmount, qlNullableHandle(arg(discountCurve))))));+  } catch (std::exception& er) {return handleException<QlForwardRateAgreement*>(e, er);}}++void qlFreeBondForward(QlBondForward *fwd) {del(fwd);}+QlForward* qlBondForwardAsForward(QlBondForward *fwd) {return ret(new QlForward(*arg(fwd)));}++QlBondForward* qlBondForward(int valueDate, int maturityDate, int type, double strike, unsigned settlementDays, DayCounter* dayCounter, Calendar* calendar, int businessDayConvention, QlBond* bond, QlYieldTermStructure* discountCurve, QlYieldTermStructure* incomeDiscountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBondForward(alloc(new BondForward(Date(valueDate), Date(maturityDate), (Position::Type)type, strike, settlementDays, *arg(dayCounter), *arg(calendar), (BusinessDayConvention)businessDayConvention, *arg(bond), qlNullableHandle(arg(discountCurve)), qlNullableHandle(arg(incomeDiscountCurve))))));+  } catch (std::exception& er) {return handleException<QlBondForward*>(e, er);}}++double qlBondForwardCleanForwardPrice(QlBondForward* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->cleanForwardPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondForwardForwardPrice(QlBondForward* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->forwardPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}+InterestRate* qlForwardRateAgreementForwardRate(QlForwardRateAgreement* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new InterestRate((*arg(o))->forwardRate()));} catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}+double qlForwardRateAgreementAmount(QlForwardRateAgreement* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->amount();} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeFxForward(QlFxForward *fwd) {del(fwd);}+QlInstrument* qlFxForwardAsInstrument(QlFxForward *fwd) {return ret(new QlInstrument(*arg(fwd)));}+QlFxForward* qlFxForward(double sourceNominal, Currency* sourceCurrency, double targetNominal, Currency* targetCurrency, int maturityDate, int paySourceCurrency, unsigned settlementDays, Calendar* paymentCalendar, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFxForward(alloc(new FxForward(sourceNominal, *arg(sourceCurrency), targetNominal, *arg(targetCurrency), Date(maturityDate), paySourceCurrency, settlementDays, *arg(paymentCalendar)))));+  } catch (std::exception& er) {return handleException<QlFxForward*>(e, er);}}+QlFxForward* qlFxForward1(double sourceNominal, Currency* sourceCurrency, Currency* targetCurrency, double forwardRate, int maturityDate, int paySourceCurrency, unsigned settlementDays, Calendar* paymentCalendar, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFxForward(alloc(new FxForward(sourceNominal, *arg(sourceCurrency), *arg(targetCurrency), forwardRate, Date(maturityDate), paySourceCurrency, settlementDays, *arg(paymentCalendar)))));+  } catch (std::exception& er) {return handleException<QlFxForward*>(e, er);}}+double qlFxForwardForwardRate(QlFxForward* o) {return (*arg(o))->forwardRate();}+double qlFxForwardFairForwardRate(QlFxForward* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairForwardRate();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFxForwardNpvSourceCurrency(QlFxForward* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->npvSourceCurrency();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFxForwardNpvTargetCurrency(QlFxForward* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->npvTargetCurrency();} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeSwap(QlSwap *o) {del(o);}+QlInstrument* qlSwapAsInstrument(QlSwap *o) {return ret(new QlInstrument(*arg(o)));}+void qlFreeFixedVsFloatingSwap(QlFixedVsFloatingSwap *o) {del(o);}+QlSwap* qlFixedVsFloatingSwapAsSwap(QlFixedVsFloatingSwap *o) {return ret(new QlSwap(*arg(o)));}+void qlFreeVanillaSwap(QlVanillaSwap *o) {del(o);}+QlFixedVsFloatingSwap* qlVanillaSwapAsFixedVsFloatingSwap(QlVanillaSwap *o) {return ret(new QlFixedVsFloatingSwap(*arg(o)));}+void qlFreeNonstandardSwap(QlNonstandardSwap *o) {del(o);}+QlSwap* qlNonstandardSwapAsSwap(QlNonstandardSwap *o) {return ret(new QlSwap(*arg(o)));}+void qlFreeBMASwap(QlBMASwap *o) {del(o);}+QlSwap* qlBMASwapAsSwap(QlBMASwap *o) {return ret(new QlSwap(*arg(o)));}+void qlFreeOvernightIndexedSwap(QlOvernightIndexedSwap *o) {del(o);}+QlFixedVsFloatingSwap* qlOvernightIndexedSwapAsFixedVsFloatingSwap(QlOvernightIndexedSwap *o) {return ret(new QlFixedVsFloatingSwap(*arg(o)));}+QlSwap* qlSwap1(unsigned legsLen, Leg** legs, unsigned payerLen, int *payer, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwap(alloc(new Swap(qlVector(legs, legsLen), std::vector<bool>(payer, payer+payerLen)))));+  } catch (std::exception& er) {return handleException<QlSwap*>(e, er);}}++void qlFreeAssetSwap(QlAssetSwap *o) {del(o);}+QlSwap* qlAssetSwapAsSwap(QlAssetSwap *o) {return ret(new QlSwap(*arg(o)));}++QlAssetSwap* qlAssetSwap(int payBondCoupon, QlBond* bond, double bondCleanPrice, QlIborIndex* iborIndex, double spread, Schedule* floatSchedule, DayCounter* floatingDayCount, int parAssetSwap, double gearing, double nonParRepayment, int dealMaturity, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlAssetSwap(alloc(new AssetSwap(payBondCoupon, *arg(bond), bondCleanPrice, *arg(iborIndex), spread, *arg(floatSchedule), *arg(floatingDayCount), parAssetSwap, gearing, nonParRepayment, qlNullableDate(dealMaturity)))));+  } catch (std::exception& er) {return handleException<QlAssetSwap*>(e, er);}}+QlBMASwap* qlBMASwap(int type, double nominal, Schedule* liborSchedule, double liborFraction, double liborSpread, QlIborIndex* liborIndex, DayCounter* liborDayCount, Schedule* bmaSchedule, QlBMAIndex* bmaIndex, DayCounter* bmaDayCount, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBMASwap(alloc(new BMASwap((BMASwap::Type)type, nominal, *arg(liborSchedule), liborFraction, liborSpread, *arg(liborIndex), *arg(liborDayCount), *arg(bmaSchedule), *arg(bmaIndex), *arg(bmaDayCount)))));+  } catch (std::exception& er) {return handleException<QlBMASwap*>(e, er);}}+QlVanillaSwap* qlVanillaSwap(int type, double nominal, Schedule* fixedSchedule, double fixedRate, DayCounter* fixedDayCount, Schedule* floatSchedule, QlIborIndex* iborIndex, double spread, DayCounter* floatingDayCount, int paymentConvention, int useIndexedCoupons, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlVanillaSwap(alloc(new VanillaSwap((VanillaSwap::Type)type, nominal, *arg(fixedSchedule), fixedRate, *arg(fixedDayCount), *arg(floatSchedule), *arg(iborIndex), spread, *arg(floatingDayCount), qlOptBusinessDayConvention(paymentConvention), qlOptBool(useIndexedCoupons)))));+  } catch (std::exception& er) {return handleException<QlVanillaSwap*>(e, er);}}++// Converts an existing FixedVsFloatingSwap (e.g. a VanillaSwap) into a NonstandardSwap+// (upstream's own conversion ctor, not a delegating convenience overload).+QlNonstandardSwap* qlNonstandardSwap1(QlFixedVsFloatingSwap* v, QlError **e) { QlCallScope callbackScope(e);+  if (!qlOvernightUnderlyingSupported(e, *arg(v), "nonstandardSwapFromVanilla")) return nullptr;+  try {return ret(new QlNonstandardSwap(alloc(new NonstandardSwap(**arg(v)))));+  } catch (std::exception& er) {return handleException<QlNonstandardSwap*>(e, er);}}+// Scalar gearing/spread ctor; fixedNominal/floatingNominal/fixedRate are still per-period vectors+// upstream (see nonstandardswap.hpp).+QlNonstandardSwap* qlNonstandardSwap(int type, unsigned fixedNominalLen, double* fixedNominal, unsigned floatingNominalLen, double* floatingNominal, Schedule* fixedSchedule, unsigned fixedRateLen, double* fixedRate, DayCounter* fixedDayCount, Schedule* floatingSchedule, QlIborIndex* iborIndex, double gearing, double spread, DayCounter* floatingDayCount, int intermediateCapitalExchange, int finalCapitalExchange, int paymentConvention, int paymentLag, Calendar* paymentCalendar, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "nonstandardSwap", paymentLag == 0 && !paymentCalendar)) return nullptr;+  try {return ret(new QlNonstandardSwap(alloc(new NonstandardSwap((Swap::Type)type, std::vector<double>(fixedNominal, fixedNominal+fixedNominalLen), std::vector<double>(floatingNominal, floatingNominal+floatingNominalLen), *arg(fixedSchedule), std::vector<double>(fixedRate, fixedRate+fixedRateLen), *arg(fixedDayCount), *arg(floatingSchedule), *arg(iborIndex), gearing, spread, *arg(floatingDayCount), intermediateCapitalExchange, finalCapitalExchange, qlOptBusinessDayConvention(paymentConvention) QL144_ARGS(paymentLag, paymentCalendar ? *paymentCalendar : Calendar())))));+  } catch (std::exception& er) {return handleException<QlNonstandardSwap*>(e, er);}}+// Vector gearing/spread ctor (full coverage: the example only uses the scalar form above).+QlNonstandardSwap* qlNonstandardSwap2(int type, unsigned fixedNominalLen, double* fixedNominal, unsigned floatingNominalLen, double* floatingNominal, Schedule* fixedSchedule, unsigned fixedRateLen, double* fixedRate, DayCounter* fixedDayCount, Schedule* floatingSchedule, QlIborIndex* iborIndex, unsigned gearingLen, double* gearing, unsigned spreadLen, double* spread, DayCounter* floatingDayCount, int intermediateCapitalExchange, int finalCapitalExchange, int paymentConvention, int paymentLag, Calendar* paymentCalendar, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "nonstandardSwapFromGearingsAndSpreads", paymentLag == 0 && !paymentCalendar)) return nullptr;+  try {return ret(new QlNonstandardSwap(alloc(new NonstandardSwap((Swap::Type)type, std::vector<double>(fixedNominal, fixedNominal+fixedNominalLen), std::vector<double>(floatingNominal, floatingNominal+floatingNominalLen), *arg(fixedSchedule), std::vector<double>(fixedRate, fixedRate+fixedRateLen), *arg(fixedDayCount), *arg(floatingSchedule), *arg(iborIndex), std::vector<double>(gearing, gearing+gearingLen), std::vector<double>(spread, spread+spreadLen), *arg(floatingDayCount), intermediateCapitalExchange, finalCapitalExchange, qlOptBusinessDayConvention(paymentConvention) QL144_ARGS(paymentLag, paymentCalendar ? *paymentCalendar : Calendar())))));+  } catch (std::exception& er) {return handleException<QlNonstandardSwap*>(e, er);}}+void qlNonstandardSwapFixedRate(QlNonstandardSwap* o, unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->fixedRate();}, len, out);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}++void qlFreeFloatFloatSwap(QlFloatFloatSwap *o) {del(o);}+QlSwap* qlFloatFloatSwapAsSwap(QlFloatFloatSwap *o) {return ret(new QlSwap(*arg(o)));}+// Scalar-nominal ctor. cappedRate1/flooredRate1/cappedRate2/flooredRate2 take Null<Real>()+// (via fromMaybeDouble's qlNullReal sentinel on the Haskell side) unchanged for "no cap/floor",+// matching upstream's own default -- no separate presence flag needed.+QlFloatFloatSwap* qlFloatFloatSwap(int type, double nominal1, double nominal2, Schedule* schedule1, QlInterestRateIndex* index1, DayCounter* dayCount1, Schedule* schedule2, QlInterestRateIndex* index2, DayCounter* dayCount2, int intermediateCapitalExchange, int finalCapitalExchange, double gearing1, double spread1, double cappedRate1, double flooredRate1, double gearing2, double spread2, double cappedRate2, double flooredRate2, int paymentConvention1, int paymentConvention2, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatFloatSwap(alloc(new FloatFloatSwap((Swap::Type)type, nominal1, nominal2, *arg(schedule1), *arg(index1), *arg(dayCount1), *arg(schedule2), *arg(index2), *arg(dayCount2), intermediateCapitalExchange, finalCapitalExchange, gearing1, spread1, cappedRate1, flooredRate1, gearing2, spread2, cappedRate2, flooredRate2, qlOptBusinessDayConvention(paymentConvention1), qlOptBusinessDayConvention(paymentConvention2)))));+  } catch (std::exception& er) {return handleException<QlFloatFloatSwap*>(e, er);}}+// Vector-nominal ctor (full coverage; not used by the upstream example).+QlFloatFloatSwap* qlFloatFloatSwap2(int type, unsigned nominal1Len, double* nominal1, unsigned nominal2Len, double* nominal2, Schedule* schedule1, QlInterestRateIndex* index1, DayCounter* dayCount1, Schedule* schedule2, QlInterestRateIndex* index2, DayCounter* dayCount2, int intermediateCapitalExchange, int finalCapitalExchange, unsigned gearing1Len, double* gearing1, unsigned spread1Len, double* spread1, unsigned cappedRate1Len, double* cappedRate1, unsigned flooredRate1Len, double* flooredRate1, unsigned gearing2Len, double* gearing2, unsigned spread2Len, double* spread2, unsigned cappedRate2Len, double* cappedRate2, unsigned flooredRate2Len, double* flooredRate2, int paymentConvention1, int paymentConvention2, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatFloatSwap(alloc(new FloatFloatSwap((Swap::Type)type, std::vector<double>(nominal1, nominal1+nominal1Len), std::vector<double>(nominal2, nominal2+nominal2Len), *arg(schedule1), *arg(index1), *arg(dayCount1), *arg(schedule2), *arg(index2), *arg(dayCount2), intermediateCapitalExchange, finalCapitalExchange, std::vector<double>(gearing1, gearing1+gearing1Len), std::vector<double>(spread1, spread1+spread1Len), std::vector<double>(cappedRate1, cappedRate1+cappedRate1Len), std::vector<double>(flooredRate1, flooredRate1+flooredRate1Len), std::vector<double>(gearing2, gearing2+gearing2Len), std::vector<double>(spread2, spread2+spread2Len), std::vector<double>(cappedRate2, cappedRate2+cappedRate2Len), std::vector<double>(flooredRate2, flooredRate2+flooredRate2Len), qlOptBusinessDayConvention(paymentConvention1), qlOptBusinessDayConvention(paymentConvention2)))));+  } catch (std::exception& er) {return handleException<QlFloatFloatSwap*>(e, er);}}+double qlFloatFloatSwapFairSpread1(QlFloatFloatSwap* o, QlError **e) { QlCallScope callbackScope(e);try {const double value = (*arg(o))->fairSpread1(); QL_REQUIRE(std::isfinite(value), "fair rate/spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFloatFloatSwapFairSpread2(QlFloatFloatSwap* o, QlError **e) { QlCallScope callbackScope(e);try {const double value = (*arg(o))->fairSpread2(); QL_REQUIRE(std::isfinite(value), "fair rate/spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}}++QlSwap* qlSwap(Leg* firstLeg, Leg* secondLeg, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlSwap(alloc(new Swap(*arg(firstLeg), *arg(secondLeg)))));} catch (std::exception& er) {return handleException<QlSwap*>(e, er);} }+double qlSwapEndDiscounts(QlSwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->endDiscounts(j);} catch (std::exception& er) {return handleException<double>(e, er);}}+unsigned qlSwapNumberOfLegs(QlSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (unsigned)(*arg(o))->numberOfLegs();} catch (std::exception& er) {return handleException<unsigned>(e, er);}}+Leg* qlSwapLeg(QlSwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->leg(j)));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+double qlSwapLegBPS(QlSwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->legBPS(j);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwapLegNPV(QlSwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->legNPV(j);} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlSwapMaturityDate(QlSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return qlNullableDate((*arg(o))->maturityDate());} catch (std::exception& er) {return handleException<int>(e, er);}}+double qlSwapNpvDateDiscount(QlSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->npvDateDiscount();} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlSwapStartDate(QlSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return qlNullableDate((*arg(o))->startDate());} catch (std::exception& er) {return handleException<int>(e, er);}}+double qlSwapStartDiscounts(QlSwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->startDiscounts(j);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFixedVsFloatingSwapFairRate(QlFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {const double value = (*arg(o))->fairRate(); QL_REQUIRE(std::isfinite(value), "fair rate/spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFixedVsFloatingSwapFairSpread(QlFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {const double value = (*arg(o))->fairSpread(); QL_REQUIRE(std::isfinite(value), "fair rate/spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}}+Leg* qlFixedVsFloatingSwapFixedLeg(QlFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->fixedLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+double qlFixedVsFloatingSwapFixedLegBPS(QlFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fixedLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFixedVsFloatingSwapFixedLegNPV(QlFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fixedLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+Leg* qlFixedVsFloatingSwapFloatingLeg(QlFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->floatingLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+double qlFixedVsFloatingSwapFloatingLegBPS(QlFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->floatingLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFixedVsFloatingSwapFloatingLegNPV(QlFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->floatingLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);} }++void qlFreeEquityTotalReturnSwap(QlEquityTotalReturnSwap *o) {del(o);}+QlSwap* qlEquityTotalReturnSwapAsSwap(QlEquityTotalReturnSwap *o) {return ret(new QlSwap(*arg(o)));}+QlEquityTotalReturnSwap* qlEquityTotalReturnSwapIbor(int type, double nominal, Schedule* schedule, QlEquityIndex* equityIndex, QlIborIndex* interestRateIndex, DayCounter* dayCounter, double margin, double gearing, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlEquityTotalReturnSwap(alloc(new EquityTotalReturnSwap((Swap::Type)type, nominal, *arg(schedule), *arg(equityIndex), *arg(interestRateIndex),+        *arg(dayCounter), margin, gearing, *arg(paymentCalendar), (BusinessDayConvention)paymentConvention, paymentDelay))));+  } catch (std::exception& er) {return handleException<QlEquityTotalReturnSwap*>(e, er);}}+QlEquityTotalReturnSwap* qlEquityTotalReturnSwapOvernight(int type, double nominal, Schedule* schedule, QlEquityIndex* equityIndex, QlOvernightIndex* interestRateIndex, DayCounter* dayCounter, double margin, double gearing, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlEquityTotalReturnSwap(alloc(new EquityTotalReturnSwap((Swap::Type)type, nominal, *arg(schedule), *arg(equityIndex), *arg(interestRateIndex),+        *arg(dayCounter), margin, gearing, *arg(paymentCalendar), (BusinessDayConvention)paymentConvention, paymentDelay))));+  } catch (std::exception& er) {return handleException<QlEquityTotalReturnSwap*>(e, er);}}+double qlEquityTotalReturnSwapEquityLegNPV(QlEquityTotalReturnSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->equityLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlEquityTotalReturnSwapInterestRateLegNPV(QlEquityTotalReturnSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->interestRateLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlEquityTotalReturnSwapFairMargin(QlEquityTotalReturnSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairMargin();} catch (std::exception& er) {return handleException<double>(e, er);}}++QlOvernightIndexedSwap* qlOvernightIndexedSwap(int type, double nominal, Schedule* schedule, double fixedRate, DayCounter* fixedDC, QlOvernightIndex* overnightIndex, double spread, int paymentLag, int paymentAdjustment, Calendar* paymentCalendar, int telescopicValueDates, int averagingMethod, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift, int roundingPrecision, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "overnightIndexedSwap", roundingPrecision == Null<int>())) return nullptr;+  try {return ret(new QlOvernightIndexedSwap(alloc(new OvernightIndexedSwap((OvernightIndexedSwap::Type)type, nominal, *arg(schedule), fixedRate, *arg(fixedDC), *arg(overnightIndex), spread, paymentLag, (BusinessDayConvention)paymentAdjustment, *arg(paymentCalendar), telescopicValueDates, (RateAveraging::Type)averagingMethod, lookbackDays, lockoutDays, applyObservationShift QL144_ARGS(roundingPrecision == Null<int>() ? optional<Integer>() : optional<Integer>(roundingPrecision))))));+  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwap*>(e, er);}}++QlOvernightIndexedSwap* qlOvernightIndexedSwap1(int type, unsigned nominalsLen, double* nominals, Schedule* schedule, double fixedRate, DayCounter* fixedDC, QlOvernightIndex* overnightIndex, double spread, int paymentLag, int paymentAdjustment, Calendar* paymentCalendar, int telescopicValueDates, int averagingMethod, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift, int roundingPrecision, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "overnightIndexedSwapFromNominals", roundingPrecision == Null<int>())) return nullptr;+  try {return ret(new QlOvernightIndexedSwap(alloc(new OvernightIndexedSwap((OvernightIndexedSwap::Type)type, std::vector<double>(nominals, nominals+nominalsLen), *arg(schedule), fixedRate, *arg(fixedDC), *arg(overnightIndex), spread, paymentLag, (BusinessDayConvention)paymentAdjustment, *arg(paymentCalendar), telescopicValueDates, (RateAveraging::Type)averagingMethod, lookbackDays, lockoutDays, applyObservationShift QL144_ARGS(roundingPrecision == Null<int>() ? optional<Integer>() : optional<Integer>(roundingPrecision))))));+  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwap*>(e, er);}}+void qlFreeConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencySwap *o) {del(o);}+QlSwap* qlConstNotionalCrossCurrencySwapAsSwap(QlConstNotionalCrossCurrencySwap *o) {return ret(new QlSwap(*arg(o)));}+QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencySwap(Leg* firstLeg, Currency* firstLegCcy, Leg* secondLeg, Currency* secondLegCcy, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlConstNotionalCrossCurrencySwap(alloc(new ConstNotionalCrossCurrencySwap(*arg(firstLeg), *arg(firstLegCcy), *arg(secondLeg), *arg(secondLegCcy)))));+  } catch (std::exception& er) {return handleException<QlConstNotionalCrossCurrencySwap*>(e, er);}}+QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencySwap1(unsigned legsLen, Leg** legs, unsigned payerLen, int* payer, unsigned currenciesLen, Currency** currencies, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlConstNotionalCrossCurrencySwap(alloc(new ConstNotionalCrossCurrencySwap(qlVector(legs, legsLen), std::vector<bool>(payer, payer+payerLen), qlVector(currencies, currenciesLen)))));+  } catch (std::exception& er) {return handleException<QlConstNotionalCrossCurrencySwap*>(e, er);}}+Currency* qlConstNotionalCrossCurrencySwapLegCurrency(QlConstNotionalCrossCurrencySwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);try {return alloc(new Currency((*arg(o))->legCurrency(j)));} catch (std::exception& er) {return handleException<Currency*>(e, er);}}+double qlConstNotionalCrossCurrencySwapInCcyLegBPS(QlConstNotionalCrossCurrencySwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->inCcyLegBPS(j);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlConstNotionalCrossCurrencySwapInCcyLegNPV(QlConstNotionalCrossCurrencySwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->inCcyLegNPV(j);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlConstNotionalCrossCurrencySwapNpvDateDiscounts(QlConstNotionalCrossCurrencySwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->npvDateDiscounts(j);} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeConstNotionalCrossCurrencyBasisSwap(QlConstNotionalCrossCurrencyBasisSwap *o) {del(o);}+QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencyBasisSwapAsConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencyBasisSwap *o) {return ret(new QlConstNotionalCrossCurrencySwap(*arg(o)));}+QlConstNotionalCrossCurrencyBasisSwap* qlConstNotionalCrossCurrencyBasisSwap(+    double payNominal, Currency* payCurrency, Schedule* paySchedule, QlIborIndex* payIndex, double paySpread, double payGearing,+    double recNominal, Currency* recCurrency, Schedule* recSchedule, QlIborIndex* recIndex, double recSpread, double recGearing,+    int payPaymentLag, int recPaymentLag,+    int payCompoundSpread, unsigned payLookbackDays, int payObservationShift, unsigned payLockoutDays, int payAveragingMethod,+    int recCompoundSpread, unsigned recLookbackDays, int recObservationShift, unsigned recLockoutDays, int recAveragingMethod,+    int telescopicValueDates, int useIndexedCoupons, int paymentLagOnNotionalExchanges, QlStubIndexSelection* payStub, QlStubIndexSelection* recStub, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "constNotionalCrossCurrencyBasisSwap", useIndexedCoupons == -1 && !paymentLagOnNotionalExchanges && !payStub && !recStub)) return nullptr;+  try {return ret(new QlConstNotionalCrossCurrencyBasisSwap(alloc(new ConstNotionalCrossCurrencyBasisSwap(+    payNominal, *arg(payCurrency), *arg(paySchedule), *arg(payIndex), paySpread, payGearing,+    recNominal, *arg(recCurrency), *arg(recSchedule), *arg(recIndex), recSpread, recGearing,+    payPaymentLag, recPaymentLag,+    payCompoundSpread, payLookbackDays, payObservationShift, payLockoutDays, (RateAveraging::Type)payAveragingMethod,+    recCompoundSpread, recLookbackDays, recObservationShift, recLockoutDays, (RateAveraging::Type)recAveragingMethod,+    telescopicValueDates QL144_ARGS(qlOptBool(useIndexedCoupons), paymentLagOnNotionalExchanges, qlStubSelection(payStub), qlStubSelection(recStub))))));+  } catch (std::exception& er) {return handleException<QlConstNotionalCrossCurrencyBasisSwap*>(e, er);}}+double qlConstNotionalCrossCurrencyBasisSwapFairPaySpread(QlConstNotionalCrossCurrencyBasisSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairPaySpread();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlConstNotionalCrossCurrencyBasisSwapFairRecSpread(QlConstNotionalCrossCurrencyBasisSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairRecSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeConstNotionalCrossCurrencyFixedVsFloatingSwap(QlConstNotionalCrossCurrencyFixedVsFloatingSwap *o) {del(o);}+QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencyFixedVsFloatingSwapAsConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencyFixedVsFloatingSwap *o) {return ret(new QlConstNotionalCrossCurrencySwap(*arg(o)));}+QlConstNotionalCrossCurrencyFixedVsFloatingSwap* qlConstNotionalCrossCurrencyFixedVsFloatingSwap(+    int type, double fixedNominal, Currency* fixedCurrency, Schedule* fixedSchedule, double fixedRate,+    DayCounter* fixedDayCount, int fixedPaymentBdc, unsigned fixedPaymentLag, Calendar* fixedPaymentCalendar,+    double floatNominal, Currency* floatCurrency, Schedule* floatSchedule, QlIborIndex* floatIndex, double floatSpread,+    int floatPaymentBdc, unsigned floatPaymentLag, Calendar* floatPaymentCalendar,+    int telescopicValueDates, int floatCompoundSpread, unsigned floatLookbackDays, int floatObservationShift,+    unsigned floatLockoutDays, int floatAveragingMethod, int useIndexedCoupons, QlStubIndexSelection* floatStub, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "constNotionalCrossCurrencyFixedVsFloatingSwap", useIndexedCoupons == -1 && !floatStub)) return nullptr;+  try {return ret(new QlConstNotionalCrossCurrencyFixedVsFloatingSwap(alloc(new ConstNotionalCrossCurrencyFixedVsFloatingSwap(+    (Swap::Type)type, fixedNominal, *arg(fixedCurrency), *arg(fixedSchedule), fixedRate, *arg(fixedDayCount),+    (BusinessDayConvention)fixedPaymentBdc, fixedPaymentLag, *arg(fixedPaymentCalendar),+    floatNominal, *arg(floatCurrency), *arg(floatSchedule), *arg(floatIndex), floatSpread,+    (BusinessDayConvention)floatPaymentBdc, floatPaymentLag, *arg(floatPaymentCalendar),+    telescopicValueDates, floatCompoundSpread, floatLookbackDays, floatObservationShift,+    floatLockoutDays, (RateAveraging::Type)floatAveragingMethod QL144_ARGS(qlOptBool(useIndexedCoupons), qlStubSelection(floatStub))))));+  } catch (std::exception& er) {return handleException<QlConstNotionalCrossCurrencyFixedVsFloatingSwap*>(e, er);}}+double qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairRate(QlConstNotionalCrossCurrencyFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairSpread(QlConstNotionalCrossCurrencyFixedVsFloatingSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}++Leg* qlAssetSwapBondLeg(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->bondLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+double qlAssetSwapCleanPrice(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->cleanPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAssetSwapFairCleanPrice(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairCleanPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAssetSwapFairNonParRepayment(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairNonParRepayment();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAssetSwapFairSpread(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}+Leg* qlAssetSwapFloatingLeg(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->floatingLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+double qlAssetSwapFloatingLegBPS(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->floatingLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAssetSwapFloatingLegNPV(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->floatingLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAssetSwapNonParRepayment(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->nonParRepayment();} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlAssetSwapParSwap(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->parSwap();} catch (std::exception& er) {return handleException<int>(e, er);}}++void qlFreeZeroCouponInflationSwap(QlZeroCouponInflationSwap *o) {del(o);}+QlSwap* qlZeroCouponInflationSwapAsSwap(QlZeroCouponInflationSwap *o) {return ret(new QlSwap(*arg(o)));}+QlZeroCouponInflationSwap* qlZeroCouponInflationSwap(int type, double nominal, int startDate, int maturity, Calendar* cal, int paymentConvention, DayCounter* dayCounter, double fixedRate, QlZeroInflationIndex* index, int obsLagLen, int obsLagUnit, int observationInterpolation, int adjustInfObsDates, Calendar* infCalendar, int infConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlZeroCouponInflationSwap(alloc(new ZeroCouponInflationSwap((ZeroCouponInflationSwap::Type)type, nominal, Date(startDate), Date(maturity), *arg(cal), (BusinessDayConvention)paymentConvention, *arg(dayCounter), fixedRate, *arg(index), Period(obsLagLen, (TimeUnit)obsLagUnit), (CPI::InterpolationType)observationInterpolation, adjustInfObsDates, infCalendar ? *arg(infCalendar) : Calendar(), (BusinessDayConvention)infConvention))));+  } catch (std::exception& er) {return handleException<QlZeroCouponInflationSwap*>(e, er);}}+double qlZeroCouponInflationSwapFairRate(QlZeroCouponInflationSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeYearOnYearInflationSwap(QlYearOnYearInflationSwap *o) {del(o);}+QlSwap* qlYearOnYearInflationSwapAsSwap(QlYearOnYearInflationSwap *o) {return ret(new QlSwap(*arg(o)));}+QlYearOnYearInflationSwap* qlYearOnYearInflationSwap(int type, double nominal, Schedule* fixedSchedule, double fixedRate, DayCounter* fixedDayCount, Schedule* yoySchedule, QlYoYInflationIndex* yoyIndex, int obsLagLen, int obsLagUnit, int interpolation, double spread, DayCounter* yoyDayCount, Calendar* paymentCalendar, int paymentConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYearOnYearInflationSwap(alloc(new YearOnYearInflationSwap((YearOnYearInflationSwap::Type)type, nominal, *arg(fixedSchedule), fixedRate, *arg(fixedDayCount), *arg(yoySchedule), *arg(yoyIndex), Period(obsLagLen, (TimeUnit)obsLagUnit), (CPI::InterpolationType)interpolation, spread, *arg(yoyDayCount), *arg(paymentCalendar), (BusinessDayConvention)paymentConvention))));+  } catch (std::exception& er) {return handleException<QlYearOnYearInflationSwap*>(e, er);}}+double qlYearOnYearInflationSwapFairRate(QlYearOnYearInflationSwap* o, QlError **e) { QlCallScope callbackScope(e);try {const double value = (*arg(o))->fairRate(); QL_REQUIRE(std::isfinite(value), "fair rate/spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlYearOnYearInflationSwapFairSpread(QlYearOnYearInflationSwap* o, QlError **e) { QlCallScope callbackScope(e);try {const double value = (*arg(o))->fairSpread(); QL_REQUIRE(std::isfinite(value), "fair rate/spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeCPISwap(QlCPISwap *o) {del(o);}+QlSwap* qlCPISwapAsSwap(QlCPISwap *o) {return ret(new QlSwap(*arg(o)));}+QlCPISwap* qlCPISwap(int type, double nominal, int subtractInflationNominal, double spread, DayCounter* floatDayCount, Schedule* floatSchedule, int floatRoll, unsigned fixingDays, QlIborIndex* floatIndex, double fixedRate, double baseCPI, DayCounter* fixedDayCount, Schedule* fixedSchedule, int fixedRoll, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* fixedIndex, int observationInterpolation, double inflationNominal, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCPISwap(alloc(new CPISwap((CPISwap::Type)type, nominal, subtractInflationNominal, spread, *arg(floatDayCount), *arg(floatSchedule), (BusinessDayConvention)floatRoll, fixingDays, *arg(floatIndex), fixedRate, baseCPI, *arg(fixedDayCount), *arg(fixedSchedule), (BusinessDayConvention)fixedRoll, Period(obsLagLen, (TimeUnit)obsLagUnit), *arg(fixedIndex), (CPI::InterpolationType)observationInterpolation, inflationNominal))));+  } catch (std::exception& er) {return handleException<QlCPISwap*>(e, er);}}+double qlCPISwapFairRate(QlCPISwap* o, QlError **e) { QlCallScope callbackScope(e);try {const double value = (*arg(o))->fairRate(); QL_REQUIRE(std::isfinite(value), "fair rate/spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCPISwapFairSpread(QlCPISwap* o, QlError **e) { QlCallScope callbackScope(e);try {const double value = (*arg(o))->fairSpread(); QL_REQUIRE(std::isfinite(value), "fair rate/spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeZeroCouponSwap(QlZeroCouponSwap *o) {del(o);}+QlSwap* qlZeroCouponSwapAsSwap(QlZeroCouponSwap *o) {return ret(new QlSwap(*arg(o)));}+QlZeroCouponSwap* qlZeroCouponSwap(int type, double baseNominal, int startDate, int maturityDate, double fixedPayment, QlIborIndex* iborIndex, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlZeroCouponSwap(alloc(new ZeroCouponSwap((Swap::Type)type, baseNominal, Date(startDate), Date(maturityDate), fixedPayment, *arg(iborIndex), *arg(paymentCalendar), (BusinessDayConvention)paymentConvention, paymentDelay))));+  } catch (std::exception& er) {return handleException<QlZeroCouponSwap*>(e, er);}}+QlZeroCouponSwap* qlZeroCouponSwap1(int type, double baseNominal, int startDate, int maturityDate, double fixedRate, DayCounter* fixedDayCounter, QlIborIndex* iborIndex, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlZeroCouponSwap(alloc(new ZeroCouponSwap((Swap::Type)type, baseNominal, Date(startDate), Date(maturityDate), fixedRate, *arg(fixedDayCounter), *arg(iborIndex), *arg(paymentCalendar), (BusinessDayConvention)paymentConvention, paymentDelay))));+  } catch (std::exception& er) {return handleException<QlZeroCouponSwap*>(e, er);}}+double qlZeroCouponSwapFairFixedPayment(QlZeroCouponSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairFixedPayment();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlZeroCouponSwapFairFixedRate(QlZeroCouponSwap* o, DayCounter* dayCounter, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairFixedRate(*arg(dayCounter));} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlAssetSwapPayBondCoupon(QlAssetSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->payBondCoupon();} catch (std::exception& er) {return handleException<int>(e, er);}}+Leg* qlBMASwapBmaLeg(QlBMASwap* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->bmaLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+double qlBMASwapBmaLegBPS(QlBMASwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->bmaLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBMASwapBmaLegNPV(QlBMASwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->bmaLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBMASwapFairLiborFraction(QlBMASwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairLiborFraction();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBMASwapFairLiborSpread(QlBMASwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairLiborSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBMASwapLiborFraction(QlBMASwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->liborFraction();} catch (std::exception& er) {return handleException<double>(e, er);}}+Leg* qlBMASwapLiborLeg(QlBMASwap* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->liborLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+double qlBMASwapLiborLegBPS(QlBMASwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->liborLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBMASwapLiborLegNPV(QlBMASwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->liborLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+Leg* qlOvernightIndexedSwapOvernightLeg(QlOvernightIndexedSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->overnightLeg()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+double qlOvernightIndexedSwapOvernightLegBPS(QlOvernightIndexedSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->overnightLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOvernightIndexedSwapOvernightLegNPV(QlOvernightIndexedSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->overnightLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeCdsOption(QlCdsOption *o) {del(o);}+QlOption* qlCdsOptionAsOption(QlCdsOption *o) {return ret(new QlOption(*arg(o)));}+void qlFreeCreditDefaultSwap(QlCreditDefaultSwap *o) {del(o);}+QlInstrument* qlCreditDefaultSwapAsInstrument(QlCreditDefaultSwap *o) {return ret(new QlInstrument(*arg(o)));}+void qlFreeClaim(QlClaim *o) {del(o);}+QlClaim* qlFaceValueAccrualClaim(QlBond* referenceSecurity, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlClaim(alloc(new FaceValueAccrualClaim(*arg(referenceSecurity)))));} catch (std::exception& er) {return handleException<QlClaim*>(e, er);}}++QlClaim* qlFaceValueClaim(QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlClaim(alloc(new FaceValueClaim())));} catch (std::exception& er) {return handleException<QlClaim*>(e, er);}}+QlCreditDefaultSwap* qlCreditDefaultSwap1(int side, double notional, double upfront, double spread, Schedule* schedule, int paymentConvention, DayCounter* dayCounter, int settlesAccrual, int paysAtDefaultTime, int protectionStart, int upfrontDate, QlClaim* x11, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int tradeDate, unsigned cashSettlementDays, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCreditDefaultSwap(alloc(new CreditDefaultSwap((Protection::Side)side, notional, upfront, spread, *arg(schedule), (BusinessDayConvention)paymentConvention, *arg(dayCounter), settlesAccrual, paysAtDefaultTime, qlNullableDate(protectionStart), qlNullableDate(upfrontDate), (*arg(x11)),+            *arg(lastPeriodDayCounter), rebatesAccrual, qlNullableDate(tradeDate), cashSettlementDays))));+  } catch (std::exception& er) {return handleException<QlCreditDefaultSwap*>(e, er);}}++QlCreditDefaultSwap* qlCreditDefaultSwap(int side, double notional, double spread, Schedule* schedule, int paymentConvention, DayCounter* dayCounter, int settlesAccrual, int paysAtDefaultTime, int protectionStart, QlClaim* x9, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int tradeDate, unsigned cashSettlementDays, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCreditDefaultSwap(alloc(new CreditDefaultSwap((Protection::Side)side, notional, spread, *arg(schedule), (BusinessDayConvention)paymentConvention, *arg(dayCounter), settlesAccrual, paysAtDefaultTime, qlNullableDate(protectionStart), (*arg(x9)),+            *arg(lastPeriodDayCounter), rebatesAccrual, qlNullableDate(tradeDate), cashSettlementDays))));+  } catch (std::exception& er) {return handleException<QlCreditDefaultSwap*>(e, er);}}++double qlCreditDefaultSwapFairSpread(QlCreditDefaultSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCreditDefaultSwapConventionalSpread(QlCreditDefaultSwap* o, double conventionalRecovery, QlYieldTermStructure* discountCurve, DayCounter* dayCounter, int model, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->conventionalSpread(conventionalRecovery, *arg(discountCurve), *arg(dayCounter), (CreditDefaultSwap::PricingModel)model);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCreditDefaultSwapCouponLegBPS(QlCreditDefaultSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->couponLegBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCreditDefaultSwapCouponLegNPV(QlCreditDefaultSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->couponLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+Leg* qlCreditDefaultSwapCoupons(QlCreditDefaultSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return alloc(new Leg((*arg(o))->coupons()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+double qlCreditDefaultSwapDefaultLegNPV(QlCreditDefaultSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->defaultLegNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCreditDefaultSwapFairUpfront(QlCreditDefaultSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairUpfront();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCreditDefaultSwapImpliedHazardRate(QlCreditDefaultSwap* o, double targetNPV, QlYieldTermStructure* discountCurve, DayCounter* dayCounter, double recoveryRate, double accuracy, int model, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->impliedHazardRate(targetNPV, *arg(discountCurve), *arg(dayCounter), recoveryRate, accuracy, (CreditDefaultSwap::PricingModel)model);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCreditDefaultSwapUpfrontBPS(QlCreditDefaultSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->upfrontBPS();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCreditDefaultSwapUpfrontNPV(QlCreditDefaultSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->upfrontNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCreditDefaultSwapAccrualRebateNPV(QlCreditDefaultSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->accrualRebateNPV();} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeBarrierOption(QlBarrierOption *o) {del(o);}+QlOneAssetOption* qlBarrierOptionAsOneAssetOption(QlBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}+void qlFreeDoubleBarrierOption(QlDoubleBarrierOption *o) {del(o);}+QlOneAssetOption* qlDoubleBarrierOptionAsOneAssetOption(QlDoubleBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}+void qlFreeSoftBarrierOption(QlSoftBarrierOption *o) {del(o);}+QlOneAssetOption* qlSoftBarrierOptionAsOneAssetOption(QlSoftBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}+void qlFreeMargrabeOption(QlMargrabeOption *o) {del(o);}+QlMultiAssetOption* qlMargrabeOptionAsMultiAssetOption(QlMargrabeOption *o) {return ret(new QlMultiAssetOption(*arg(o)));}+void qlFreeEverestOption(QlEverestOption *o) {del(o);}+QlMultiAssetOption* qlEverestOptionAsMultiAssetOption(QlEverestOption *o) {return ret(new QlMultiAssetOption(*arg(o)));}+void qlFreeMultiAssetOption(QlMultiAssetOption *o) {del(o);}+QlOption* qlMultiAssetOptionAsOption(QlMultiAssetOption *o) {return ret(new QlOption(*arg(o)));}+void qlFreeOneAssetOption(QlOneAssetOption *o) {del(o);}+QlOption* qlOneAssetOptionAsOption(QlOneAssetOption *o) {return ret(new QlOption(*arg(o)));}+void qlFreeOption(QlOption *o) {del(o);}+QlInstrument* qlOptionAsInstrument(QlOption *o) {return ret(new QlInstrument(*arg(o)));}+void qlFreeQuantoVanillaOption(QlQuantoVanillaOption *o) {del(o);}+QlOneAssetOption* qlQuantoVanillaOptionAsOneAssetOption(QlQuantoVanillaOption *o) {return ret(new QlOneAssetOption(*arg(o)));}+void qlFreeSwaption(QlSwaption *o) {del(o);}+QlOption* qlSwaptionAsOption(QlSwaption *o) {return ret(new QlOption(*arg(o)));}+void qlFreeVanillaOption(QlVanillaOption *o) {del(o);}+QlOneAssetOption* qlVanillaOptionAsOneAssetOption(QlVanillaOption *o) {return ret(new QlOneAssetOption(*arg(o)));}+void qlFreeSwingExercise(QlSwingExercise *o) {del(o);}+QlBermudanExercise* qlSwingExerciseAsBermudanExercise(QlSwingExercise *o) {return ret(new QlBermudanExercise(*arg(o)));}+double qlCdsOptionAtmRate(QlCdsOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->atmRate();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlCdsOption* qlCdsOption(QlCreditDefaultSwap* swap, QlExercise* exercise, int knocksOut, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCdsOption(alloc(new CdsOption(*arg(swap), *arg(exercise), knocksOut))));+  } catch (std::exception& er) {return handleException<QlCdsOption*>(e, er);}}+double qlCdsOptionImpliedVolatility(QlCdsOption* o, double price, QlYieldTermStructure* termStructure, QlDefaultProbabilityTermStructure* x3, double recoveryRate, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->impliedVolatility(price, *arg(termStructure), Handle<DefaultProbabilityTermStructure>(*arg(x3)), recoveryRate, accuracy, maxEvaluations, minVol, maxVol);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCdsOptionRiskyAnnuity(QlCdsOption* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->riskyAnnuity();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionImpliedVolatility(QlSwaption* o, double price, QlYieldTermStructure* discountCurve, double guess, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, int type, double displacement, int priceType, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->impliedVolatility(price, *arg(discountCurve), guess, accuracy, maxEvaluations, minVol, maxVol, (VolatilityType)type, displacement, (Swaption::PriceType)priceType);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlSwaption* qlSwaption(QlFixedVsFloatingSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, QlError **e) { QlCallScope callbackScope(e);+  if (!qlOvernightUnderlyingSupported(e, *arg(swap), "swaption on OvernightIndexedSwap")) return nullptr;+  try {return ret(new QlSwaption(alloc(new Swaption(*arg(swap), *arg(exercise), (Settlement::Type) delivery, (Settlement::Method) settlementMethod))));+  } catch (std::exception& er) {return handleException<QlSwaption*>(e, er);}}+void qlFreeIrregularSwaption(QlIrregularSwaption* o) {del(o);}+QlOption* qlIrregularSwaptionAsOption(QlIrregularSwaption* o) {return ret(new QlOption(*arg(o)));}+QlIrregularSwaption* qlIrregularSwaption(QlIrregularSwap* swap, QlExercise* exercise, int settlement, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlIrregularSwaption(alloc(new IrregularSwaption(*arg(swap), *arg(exercise), (IrregularSettlement::Type)settlement))));+  } catch (std::exception& er) {return handleException<QlIrregularSwaption*>(e, er);}}+void qlFreeIrregularSwap(QlIrregularSwap* o) {del(o);}+QlSwap* qlIrregularSwapAsSwap(QlIrregularSwap* o) {return ret(new QlSwap(*arg(o)));}+QlIrregularSwap* qlIrregularSwap(int type, Leg* fixedLeg, Leg* floatingLeg, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlIrregularSwap(alloc(new IrregularSwap((Swap::Type)type, *arg(fixedLeg), *arg(floatingLeg)))));+  } catch (std::exception& er) {return handleException<QlIrregularSwap*>(e, er);}}+double qlIrregularSwapFairRate(QlIrregularSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairRate();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlIrregularSwapFairSpread(QlIrregularSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fairSpread();} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeNonstandardSwaption(QlNonstandardSwaption *o) {del(o);}+QlOption* qlNonstandardSwaptionAsOption(QlNonstandardSwaption *o) {return ret(new QlOption(*arg(o)));}+// Converts an existing Swaption into a NonstandardSwaption (upstream's own conversion ctor).+QlNonstandardSwaption* qlNonstandardSwaption1(QlSwaption* fromSwaption, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlNonstandardSwaption(alloc(new NonstandardSwaption(**arg(fromSwaption)))));+  } catch (std::exception& er) {return handleException<QlNonstandardSwaption*>(e, er);}}+QlNonstandardSwaption* qlNonstandardSwaption(QlNonstandardSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlNonstandardSwaption(alloc(new NonstandardSwaption(*arg(swap), *arg(exercise), (Settlement::Type) delivery, (Settlement::Method) settlementMethod))));+  } catch (std::exception& er) {return handleException<QlNonstandardSwaption*>(e, er);}}+// QuantLib computes the basket according to CalibrationBasketType.+void qlNonstandardSwaptionCalibrationBasket(QlNonstandardSwaption* o, QlSwapIndex* swapBase, QlSwaptionVolatilityStructure* swaptionVol, int basketType, unsigned* len, QlBlackCalibrationHelper*** helpers, QlError **e) { QlCallScope callbackScope(e);+  OutPtrArrayResult<QlBlackCalibrationHelper> result(len, helpers);+  try {+    std::vector<ext::shared_ptr<BlackCalibrationHelper>> basket = (*arg(o))->calibrationBasket(*arg(swapBase), (*arg(swaptionVol)).currentLink(), (BasketGeneratingEngine::CalibrationBasketType)basketType);+    const unsigned n = (unsigned)basket.size();+    QlBlackCalibrationHelper **hs = result.allocate(n);+    for (unsigned i = 0; i < n; ++i) hs[i] = ret(new QlBlackCalibrationHelper(alloc(basket[i])));+    result.commit();+  } catch (std::exception& er) {handleException<int>(e, er);}}++void qlFreeFloatFloatSwaption(QlFloatFloatSwaption *o) {del(o);}+QlOption* qlFloatFloatSwaptionAsOption(QlFloatFloatSwaption *o) {return ret(new QlOption(*arg(o)));}+QlFloatFloatSwaption* qlFloatFloatSwaption(QlFloatFloatSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatFloatSwaption(alloc(new FloatFloatSwaption(*arg(swap), *arg(exercise), (Settlement::Type) delivery, (Settlement::Method) settlementMethod))));+  } catch (std::exception& er) {return handleException<QlFloatFloatSwaption*>(e, er);}}+void qlFloatFloatSwaptionCalibrationBasket(QlFloatFloatSwaption* o, QlSwapIndex* swapBase, QlSwaptionVolatilityStructure* swaptionVol, int basketType, unsigned* len, QlBlackCalibrationHelper*** helpers, QlError **e) { QlCallScope callbackScope(e);+  OutPtrArrayResult<QlBlackCalibrationHelper> result(len, helpers);+  try {+    std::vector<ext::shared_ptr<BlackCalibrationHelper>> basket = (*arg(o))->calibrationBasket(*arg(swapBase), (*arg(swaptionVol)).currentLink(), (BasketGeneratingEngine::CalibrationBasketType)basketType);+    const unsigned n = (unsigned)basket.size();+    QlBlackCalibrationHelper **hs = result.allocate(n);+    for (unsigned i = 0; i < n; ++i) hs[i] = ret(new QlBlackCalibrationHelper(alloc(basket[i])));+    result.commit();+  } catch (std::exception& er) {handleException<int>(e, er);}}++void qlFreeQuantoBarrierOption(QlQuantoBarrierOption *o) {del(o);}+QlOneAssetOption* qlQuantoBarrierOptionAsOneAssetOption(QlQuantoBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}+void qlFreeQuantoDoubleBarrierOption(QlQuantoDoubleBarrierOption *o) {del(o);}+QlOneAssetOption* qlQuantoDoubleBarrierOptionAsOneAssetOption(QlQuantoDoubleBarrierOption *o) {return ret(new QlOneAssetOption(*arg(o)));}+void qlFreeQuantoForwardVanillaOption(QlQuantoForwardVanillaOption *o) {del(o);}+QlOneAssetOption* qlQuantoForwardVanillaOptionAsOneAssetOption(QlQuantoForwardVanillaOption *o) {return ret(new QlOneAssetOption(*arg(o)));}++QlBarrierOption* qlBarrierOption(int barrierType, double barrier, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBarrierOption(alloc(new BarrierOption((Barrier::Type)barrierType, barrier, rebate, *arg(payoff), (*arg(exercise))))));+  } catch (std::exception& er) {return handleException<QlBarrierOption*>(e, er);}}+QlInstrument* qlTwoAssetBarrierOption(int barrierType, double barrier, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlInstrument(alloc(new TwoAssetBarrierOption((Barrier::Type)barrierType, barrier, *arg(payoff), (*arg(exercise))))));+  } catch (std::exception& er) {return handleException<QlInstrument*>(e, er);}}+double qlBarrierOptionImpliedVolatility(QlBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e) { QlCallScope callbackScope(e);+  try {DividendSchedule d = qlVector(dividends, dividendsLen);+    return (*arg(o))->impliedVolatility(price, *arg(process), d, accuracy, maxEvaluations, minVol, maxVol);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlOneAssetOption* qlPartialTimeBarrierOption(int barrierType, int barrierRange, double barrier, double rebate, int coverEventDate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new PartialTimeBarrierOption((Barrier::Type)barrierType, (PartialBarrier::Range)barrierRange, barrier, rebate, Date(coverEventDate), *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlDoubleBarrierOption* qlDoubleBarrierOption(int barrierType, double barrierLo, double barrierHi, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDoubleBarrierOption(alloc(new DoubleBarrierOption((DoubleBarrier::Type)barrierType, barrierLo, barrierHi, rebate, *arg(payoff), (*arg(exercise))))));+  } catch (std::exception& er) {return handleException<QlDoubleBarrierOption*>(e, er);}}+double qlDoubleBarrierOptionImpliedVolatility(QlDoubleBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->impliedVolatility(price, *arg(process), accuracy, maxEvaluations, minVol, maxVol);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlSoftBarrierOption* qlSoftBarrierOption(int barrierType, double barrierLo, double barrierHi, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSoftBarrierOption(alloc(new SoftBarrierOption((Barrier::Type)barrierType, barrierLo, barrierHi, *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlSoftBarrierOption*>(e, er);}}+double qlSoftBarrierOptionImpliedVolatility(QlSoftBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->impliedVolatility(price, *arg(process), accuracy, maxEvaluations, minVol, maxVol);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlOneAssetOption* qlSimpleChooserOption(int choosingDate, double strike, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new SimpleChooserOption(Date(choosingDate), strike, *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlComplexChooserOption(int choosingDate, double strikeCall, double strikePut, QlExercise* exerciseCall, QlExercise* exercisePut, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new ComplexChooserOption(Date(choosingDate), strikeCall, strikePut, *arg(exerciseCall), *arg(exercisePut)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlMultiAssetOption* qlTwoAssetCorrelationOption(int type, double strike1, double strike2, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlMultiAssetOption(alloc(new TwoAssetCorrelationOption((Option::Type)type, strike1, strike2, *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}+QlOneAssetOption* qlWriterExtensibleOption(QlPlainVanillaPayoff* payoff1, QlExercise* exercise1, QlPlainVanillaPayoff* payoff2, QlExercise* exercise2, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new WriterExtensibleOption(*arg(payoff1), *arg(exercise1), *arg(payoff2), *arg(exercise2)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlHolderExtensibleOption(int type, double premium, int secondExpiryDate, double secondStrike, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new HolderExtensibleOption((Option::Type)type, premium, Date(secondExpiryDate), secondStrike, *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlForwardVanillaOption(double moneyness, int resetDate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new ForwardVanillaOption(moneyness, Date(resetDate), *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlCompoundOption(QlStrikedTypePayoff* motherPayoff, QlExercise* motherExercise, QlStrikedTypePayoff* daughterPayoff, QlExercise* daughterExercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new CompoundOption(*arg(motherPayoff), *arg(motherExercise), *arg(daughterPayoff), *arg(daughterExercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+double qlMargrabeOptionDelta1(QlMargrabeOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->delta1();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlMargrabeOptionDelta2(QlMargrabeOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->delta2();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlMargrabeOptionGamma1(QlMargrabeOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->gamma1();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlMargrabeOptionGamma2(QlMargrabeOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->gamma2();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlMargrabeOption* qlMargrabeOption(int Q1, int Q2, QlExercise* x2, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlMargrabeOption(alloc(new MargrabeOption(Q1, Q2, (*arg(x2))))));} catch (std::exception& er) {return handleException<QlMargrabeOption*>(e, er);}}+double qlEverestOptionYield(QlEverestOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->yield();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlEverestOption* qlEverestOption(double notional, double guarantee, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlEverestOption(alloc(new EverestOption(notional, guarantee, *arg(exercise)))));} catch (std::exception& er) {return handleException<QlEverestOption*>(e, er);}}+double qlMultiAssetOptionDelta(QlMultiAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->delta();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlMultiAssetOptionDividendRho(QlMultiAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->dividendRho();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlMultiAssetOptionGamma(QlMultiAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->gamma();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlMultiAssetOption* qlMultiAssetOption(QlPayoff* x0, QlExercise* x1, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlMultiAssetOption(alloc(new MultiAssetOption(*arg(x0), (*arg(x1))))));} catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}+double qlMultiAssetOptionRho(QlMultiAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->rho();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlMultiAssetOptionTheta(QlMultiAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->theta();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlMultiAssetOptionVega(QlMultiAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->vega();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionDelta(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->delta();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionDeltaForward(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->deltaForward(); } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionDividendRho(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->dividendRho();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionElasticity(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->elasticity();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionGamma(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->gamma();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionItmCashProbability(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->itmCashProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlOneAssetOption* qlOneAssetOption(QlPayoff* x0, QlExercise* x1, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlOneAssetOption(alloc(new OneAssetOption(*arg(x0), (*arg(x1))))));} catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+double qlOneAssetOptionRho(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->rho();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionStrikeSensitivity(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->strikeSensitivity();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionTheta(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->theta();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionThetaPerDay(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->thetaPerDay();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlOneAssetOptionVega(QlOneAssetOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->vega();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantoBarrierOptionQlambda(QlQuantoBarrierOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qlambda();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantoBarrierOptionQrho(QlQuantoBarrierOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qrho();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlQuantoBarrierOption* qlQuantoBarrierOption(int barrierType, double barrier, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuantoBarrierOption(alloc(new QuantoBarrierOption((Barrier::Type)barrierType, barrier, rebate, *arg(payoff), (*arg(exercise))))));+  } catch (std::exception& er) {return handleException<QlQuantoBarrierOption*>(e, er);}}+double qlQuantoBarrierOptionQvega(QlQuantoBarrierOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qvega();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantoDoubleBarrierOptionQlambda(QlQuantoDoubleBarrierOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qlambda();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantoDoubleBarrierOptionQrho(QlQuantoDoubleBarrierOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qrho();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlQuantoDoubleBarrierOption* qlQuantoDoubleBarrierOption(int barrierType, double barrierLo, double barrierHi, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuantoDoubleBarrierOption(alloc(new QuantoDoubleBarrierOption((DoubleBarrier::Type)barrierType, barrierLo, barrierHi, rebate, *arg(payoff), (*arg(exercise))))));+  } catch (std::exception& er) {return handleException<QlQuantoDoubleBarrierOption*>(e, er);}}+double qlQuantoDoubleBarrierOptionQvega(QlQuantoDoubleBarrierOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qvega();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantoForwardVanillaOptionQlambda(QlQuantoForwardVanillaOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qlambda();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantoForwardVanillaOptionQrho(QlQuantoForwardVanillaOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qrho();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlQuantoForwardVanillaOption* qlQuantoForwardVanillaOption(double moneyness, int resetDate, QlStrikedTypePayoff* x2, QlExercise* x3, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuantoForwardVanillaOption(alloc(new QuantoForwardVanillaOption(moneyness, Date(resetDate), *arg(x2), *arg(x3)))));+  } catch (std::exception& er) {return handleException<QlQuantoForwardVanillaOption*>(e, er);}}+double qlQuantoForwardVanillaOptionQvega(QlQuantoForwardVanillaOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qvega();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantoVanillaOptionQlambda(QlQuantoVanillaOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qlambda();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantoVanillaOptionQrho(QlQuantoVanillaOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qrho();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlQuantoVanillaOption* qlQuantoVanillaOption(QlStrikedTypePayoff* x0, QlExercise* x1, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuantoVanillaOption(alloc(new QuantoVanillaOption(*arg(x0), (*arg(x1))))));+  } catch (std::exception& er) {return handleException<QlQuantoVanillaOption*>(e, er);}}+double qlQuantoVanillaOptionQvega(QlQuantoVanillaOption* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->qvega();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlVanillaOptionImpliedVolatility(QlVanillaOption* o, double price, QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e) { QlCallScope callbackScope(e);+  try {DividendSchedule d = qlVector(dividends, dividendsLen);+    return (*arg(o))->impliedVolatility(price, *arg(process), d, accuracy, maxEvaluations, minVol, maxVol);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlVanillaOption* qlVanillaOption(QlStrikedTypePayoff* x0, QlExercise* x1, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlVanillaOption(alloc(new VanillaOption(*arg(x0), (*arg(x1))))));+  } catch (std::exception& er) {return handleException<QlVanillaOption*>(e, er);}}+QlMultiAssetOption* qlBasketOption(QlBasketPayoff* x0, QlExercise* x1, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlMultiAssetOption(alloc(new BasketOption(*arg(x0), (*arg(x1))))));+  } catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}+QlMultiAssetOption* qlHimalayaOption(unsigned fixingDatesLen, int* fixingDates, double strike, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlMultiAssetOption(alloc(new HimalayaOption(qlDateVector(fixingDates, fixingDatesLen), strike))));+  } catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}+QlMultiAssetOption* qlPagodaOption(unsigned fixingDatesLen, int* fixingDates, double roof, double fraction, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlMultiAssetOption(alloc(new PagodaOption(qlDateVector(fixingDates, fixingDatesLen), roof, fraction))));+  } catch (std::exception& er) {return handleException<QlMultiAssetOption*>(e, er);}}+QlOneAssetOption* qlCliquetOption(QlPercentageStrikePayoff* x0, QlEuropeanExercise* maturity, unsigned resetDatesLen, int* resetDates, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new CliquetOption(*arg(x0), *arg(maturity), qlDateVector(resetDates, resetDatesLen)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlContinuousAveragingAsianOption(int averageType, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new ContinuousAveragingAsianOption((Average::Type)averageType, *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlContinuousFixedLookbackOption(double currentMinmax, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new ContinuousFixedLookbackOption(currentMinmax, *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlContinuousFloatingLookbackOption(double currentMinmax, QlTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new ContinuousFloatingLookbackOption(currentMinmax, *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlContinuousPartialFloatingLookbackOption(double currentMinmax, double lambda, int lookbackPeriodEnd, QlTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new ContinuousPartialFloatingLookbackOption(currentMinmax, lambda, Date(lookbackPeriodEnd), *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlContinuousPartialFixedLookbackOption(int lookbackPeriodStart, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new ContinuousPartialFixedLookbackOption(Date(lookbackPeriodStart), *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlDiscreteAveragingAsianOption(int averageType, double runningAccumulator, unsigned pastFixings, unsigned fixingDatesLen, int* fixingDates, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new DiscreteAveragingAsianOption((Average::Type)averageType, runningAccumulator, pastFixings, qlDateVector(fixingDates, fixingDatesLen), *arg(payoff), *arg(exercise)))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlVanillaStorageOption(QlBermudanExercise* ex, double capacity, double load, double changeRate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new VanillaStorageOption(*arg(ex), capacity, load, changeRate))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlOneAssetOption* qlVanillaSwingOption(QlStrikedTypePayoff* payoff, QlSwingExercise* ex, unsigned minExerciseRights, unsigned maxExerciseRights, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneAssetOption(alloc(new VanillaSwingOption(*arg(payoff), *arg(ex), minExerciseRights, maxExerciseRights))));+  } catch (std::exception& er) {return handleException<QlOneAssetOption*>(e, er);}}+QlVanillaOption* qlEuropeanOption(QlStrikedTypePayoff* x0, QlExercise* x1, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlVanillaOption(alloc(new EuropeanOption(*arg(x0), (*arg(x1))))));} catch (std::exception& er) {return handleException<QlVanillaOption*>(e, er);}}+QlBond *qlBond(unsigned settlDays, Calendar *calendar, int issueDate, Leg *coupons, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBond(alloc(new Bond(settlDays, *arg(calendar), qlNullableDate(issueDate), *arg(coupons)))));+  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}+int qlBondMaturityDate(QlBond *bond, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate((*arg(bond))->maturityDate());+  } catch (std::exception& er) {return handleException<int>(e, er);}}+void qlFreeBond(QlBond *bond) {del(bond);}+void qlFreeFixedRateBond(QlFixedRateBond *bond) {del(bond);}+QlBond *qlFixedRateBondAsBond(QlFixedRateBond *bond) {return ret(new QlBond(*arg(bond)));}++void qlFreeCPIBond(QlCPIBond *bond) {del(bond);}+QlBond *qlCPIBondAsBond(QlCPIBond *bond) {return ret(new QlBond(*arg(bond)));}+QlCPIBond *qlCPIBond(unsigned settlementDays, double faceAmount, double baseCPI, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* index, int observationInterpolation, Schedule *schedule, unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate, Calendar *paymentCalendar, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<Rate> cpns(coupons, coupons+couponsLen);+    return ret(new QlCPIBond(alloc(new CPIBond(settlementDays, faceAmount, baseCPI, Period(obsLagLen, (TimeUnit)obsLagUnit), *arg(index),+              (CPI::InterpolationType)observationInterpolation, *arg(schedule), cpns, *arg(accrualDayCounter), (BusinessDayConvention)paymentConvention,+              qlNullableDate(issueDate), *arg(paymentCalendar), Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar),+              (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth))));+  } catch (std::exception& er) {return handleException<QlCPIBond *>(e, er);}}++QlFixedRateBond *qlFixedRateBond(unsigned settlDays, double face, Schedule *schedule, unsigned cLen, double *coupons, DayCounter *counter,+    int payConv, double redemption, int issue, Calendar *payCal, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, DayCounter* firstPeriodDayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<Rate> cpns(coupons, coupons+cLen);+    return ret(new QlFixedRateBond(alloc(new FixedRateBond(settlDays, face, *arg(schedule),+              cpns, *arg(counter), (BusinessDayConvention) payConv, redemption, qlNullableDate(issue), *arg(payCal),+              Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth,+              *arg(firstPeriodDayCounter)))));+  } catch (std::exception& er) {return handleException<QlFixedRateBond *>(e, er);}}++QlBTP *qlBtp(int maturityDate, double fixedRate, int startDate, int issueDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBTP(alloc(new BTP(Date(maturityDate), fixedRate, qlNullableDate(startDate), qlNullableDate(issueDate)))));+  } catch (std::exception& er) {return handleException<QlBTP*>(e, er);}}+QlBTP *qlBtpWithRedemption(int maturityDate, double fixedRate, double redemption, int startDate, int issueDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBTP(alloc(new BTP(Date(maturityDate), fixedRate, redemption, qlNullableDate(startDate), qlNullableDate(issueDate)))));+  } catch (std::exception& er) {return handleException<QlBTP*>(e, er);}}+void qlFreeBtp(QlBTP *o) {del(o);}+QlFixedRateBond *qlBtpAsFixedRateBond(QlBTP *o) {return ret(new QlFixedRateBond(*arg(o)));}++QlInstrument *qlBondAsInstrument(QlBond *b) {return ret(new QlInstrument(*arg(b)));}++QlBond *qlZeroCouponBond(int settlDays, Calendar *cal, double face, int maturity, int payConv, double redemption, int issue, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBond(alloc(new ZeroCouponBond(settlDays, *arg(cal), face, Date(maturity), (BusinessDayConvention) payConv, redemption, qlNullableDate(issue)))));+  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}++QlBond *qlFloatingRateBond(unsigned settlDays, double face, Schedule *sched, QlIborIndex *index, DayCounter *dc, int payConv, unsigned fixDays,+  unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,+  int inArrears, double redemption, int issue, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<Real> gs(gearings, gearings+nGearings); std::vector<Spread> sps(spreads, spreads+nSpreads);+    std::vector<Rate> cs(caps, caps+nCaps); std::vector<Rate> fs(floors, floors+nFloors);+    return ret(new QlBond(alloc(new FloatingRateBond(settlDays, face, *arg(sched), *arg(index), *arg(dc), (BusinessDayConvention) payConv, fixDays, gs,+	  sps, cs, fs, inArrears, redemption, qlNullableDate(issue),+	  Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth,+	  (BusinessDayConvention)fixingConvention))));+  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}++QlBond *qlCmsRateBond(unsigned settlDays, double faceAmount, Schedule *sched, QlSwapIndex *index, DayCounter *dc,+  int payConv, unsigned fixDays, unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads,+  unsigned nCaps, double *caps, unsigned nFloors, double *floors, int inArrears, double redemption, int issue, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<Real> gs(gearings, gearings+nGearings); std::vector<Spread> sps(spreads, spreads+nSpreads);+    std::vector<Rate> cs(caps, caps+nCaps); std::vector<Rate> fs(floors, floors+nFloors);+    return ret(new QlBond(alloc(new CmsRateBond(settlDays, faceAmount, *arg(sched), *arg(index), *arg(dc),+      (BusinessDayConvention)payConv, fixDays, gs, sps, cs, fs, inArrears, redemption, qlNullableDate(issue)))));+  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}++QlBond *qlAmortizingCmsRateBond(unsigned settlementDays, unsigned notionalsLen, double *notionals, Schedule *sched,+  QlSwapIndex *index, DayCounter *dc, int payConv, unsigned fixDays, unsigned nGearings, double *gearings,+  unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,+  int inArrears, int issue, unsigned redemptionsLen, double *redemptions, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<Real> ns(notionals, notionals+notionalsLen);+    std::vector<Real> gs(gearings, gearings+nGearings); std::vector<Spread> sps(spreads, spreads+nSpreads);+    std::vector<Rate> cs(caps, caps+nCaps); std::vector<Rate> fs(floors, floors+nFloors);+    std::vector<Real> reds(redemptions, redemptions+redemptionsLen);+    return ret(new QlBond(alloc(new AmortizingCmsRateBond(settlementDays, ns, *arg(sched), *arg(index), *arg(dc),+      (BusinessDayConvention)payConv, fixDays, gs, sps, cs, fs, inArrears, qlNullableDate(issue), reds))));+  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}++QlBond *qlAmortizingFixedRateBond(unsigned settlementDays, unsigned notionalsLen, double *notionals, Schedule *schedule,+    unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate,+    int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth,+    unsigned redemptionsLen, double *redemptions, int paymentLag, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<Real> ns(notionals, notionals+notionalsLen); std::vector<Rate> cpns(coupons, coupons+couponsLen);+    std::vector<Real> reds(redemptions, redemptions+redemptionsLen);+    return ret(new QlBond(alloc(new AmortizingFixedRateBond(settlementDays, ns, *arg(schedule), cpns, *arg(accrualDayCounter),+              (BusinessDayConvention)paymentConvention, qlNullableDate(issueDate),+              Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention,+              exCouponEndOfMonth, reds, paymentLag))));+  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}++QlBond *qlAmortizingFloatingRateBond(unsigned settlementDays, unsigned notionalLen, double *notional, Schedule *schedule,+    QlIborIndex *index, DayCounter *accrualDayCounter, int paymentConvention, unsigned fixingDays,+    unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,+    int inArrears, int issueDate, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention,+    int exCouponEndOfMonth, unsigned redemptionsLen, double *redemptions, int paymentLag, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<Real> ns(notional, notional+notionalLen);+    std::vector<Real> gs(gearings, gearings+nGearings); std::vector<Spread> sps(spreads, spreads+nSpreads);+    std::vector<Rate> cs(caps, caps+nCaps); std::vector<Rate> fs(floors, floors+nFloors);+    std::vector<Real> reds(redemptions, redemptions+redemptionsLen);+    return ret(new QlBond(alloc(new AmortizingFloatingRateBond(settlementDays, ns, *arg(schedule), *arg(index), *arg(accrualDayCounter),+              (BusinessDayConvention)paymentConvention, fixingDays, gs, sps, cs, fs, inArrears, qlNullableDate(issueDate),+              Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention,+              exCouponEndOfMonth, reds, paymentLag))));+  } catch (std::exception& er) {return handleException<QlBond *>(e, er);}}++Schedule *qlSinkingSchedule(int startDate, int lengthLen, int lengthUnit, int frequency, Calendar *paymentCalendar, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Schedule(sinkingSchedule(Date(startDate), Period(lengthLen, (TimeUnit)lengthUnit), (Frequency)frequency, *arg(paymentCalendar))));+  } catch (std::exception& er) {return handleException<Schedule *>(e, er);}}+void qlSinkingNotionals(int lengthLen, int lengthUnit, int frequency, double couponRate, double initialNotional,+    unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return sinkingNotionals(Period(lengthLen, (TimeUnit)lengthUnit), (Frequency)frequency, couponRate, initialNotional);}, len, out);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}++void qlBondNotionals(QlBond* o, unsigned *len, double **ns, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->notionals();}, len, ns);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+double qlBondYield(QlBond* o, DayCounter* dc, int comp, int freq, double accuracy, unsigned maxEvaluations, double guess, int priceType, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->yield(*arg(dc), (Compounding)comp, (Frequency)freq, accuracy, maxEvaluations, guess, (Bond::Price::Type)priceType);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++double qlBondAccruedAmount(QlBond* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->accruedAmount(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}++double qlBondDirtyPrice1(QlBond* o, double yield, DayCounter* dc, int comp, int freq, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->dirtyPrice(yield, *arg(dc), (Compounding)comp, (Frequency)freq, Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++int qlBondNextCashFlowDate(QlBond* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return qlNullableDate((*arg(o))->nextCashFlowDate(Date(d)));} catch (std::exception& er) {return handleException<int>(e, er);}}+double qlBondNextCouponRate(QlBond* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->nextCouponRate(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondNotional(QlBond* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->notional(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlBondPreviousCashFlowDate(QlBond* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return qlNullableDate((*arg(o))->previousCashFlowDate(Date(d)));} catch (std::exception& er) {return handleException<int>(e, er);}}+double qlBondPreviousCouponRate(QlBond* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->previousCouponRate(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondSettlementValue1(QlBond* o, double cleanPrice, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->settlementValue(cleanPrice);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondSettlementValue(QlBond* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->settlementValue();} catch (std::exception& er) {return handleException<double>(e, er);}}++double qlBondYield1(QlBond* o, double price, int priceType, DayCounter* dc, int comp, int freq, int settlementDate, double accuracy, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->yield(Bond::Price(price, (Bond::Price::Type)priceType), *arg(dc), (Compounding)comp, (Frequency)freq, Date(settlementDate), accuracy, maxEvaluations);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++int qlBondIsTradable(QlBond* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->isTradable(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}+Leg* qlBondCashflows(QlBond* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->cashflows()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlBondRedemptions(QlBond* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new Leg((*arg(o))->redemptions()));} catch (std::exception& er) {return handleException<Leg*>(e, er);}}+int qlBondSettlementDate(QlBond* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return ((*arg(o))->settlementDate(Date(d))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlBondStartDate(QlBond* o, QlError **e) { QlCallScope callbackScope(e);try {return ((*arg(o))->startDate()).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}++int qlBondFunctionsAccrualDays(QlBond* bond, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::accrualDays(**arg(bond), Date(settlementDate));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlBondFunctionsAccrualEndDate(QlBond* bond, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(BondFunctions::accrualEndDate(**arg(bond), Date(settlementDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlBondFunctionsAccrualPeriod(QlBond* bond, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::accrualPeriod(**arg(bond), Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlBondFunctionsAccrualStartDate(QlBond* bond, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(BondFunctions::accrualStartDate(**arg(bond), Date(settlementDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlBondFunctionsAccruedDays(QlBond* bond, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::accruedDays(**arg(bond), Date(settlementDate));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlBondFunctionsAccruedPeriod(QlBond* bond, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::accruedPeriod(**arg(bond), Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsAtmRate(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, double price, int priceType, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::atmRate(**arg(bond), handleRef(arg(discountCurve)), Date(settlementDate), Bond::Price(price, (Bond::Price::Type)priceType));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsBasisPointValue(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::basisPointValue(**arg(bond), *arg(yield), Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsBps1(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::bps(**arg(bond), *arg(yield), Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsBps(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::bps(**arg(bond), handleRef(arg(discountCurve)), Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsCleanPrice2(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::cleanPrice(**arg(bond), handleRef(arg(discountCurve)), Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsCleanPrice3(QlBond* bond, QlYieldTermStructure* discount, double zSpread, int compounding, int frequency, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::cleanPrice(**arg(bond), handlePtr(arg(discount)), zSpread, (Compounding)compounding, (Frequency)frequency, Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsCleanPrice4(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::cleanPrice(**arg(bond), *arg(yield), Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsConvexity(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::convexity(**arg(bond), *arg(yield), Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsDuration(QlBond* bond, InterestRate* yield, int type, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::duration(**arg(bond), *arg(yield), (Duration::Type)type, Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsNextCashFlowAmount(QlBond* bond, int refDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::nextCashFlowAmount(**arg(bond), Date(refDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsPreviousCashFlowAmount(QlBond* bond, int refDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::previousCashFlowAmount(**arg(bond), Date(refDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlBondFunctionsReferencePeriodEnd(QlBond* bond, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(BondFunctions::referencePeriodEnd(**arg(bond), Date(settlementDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlBondFunctionsReferencePeriodStart(QlBond* bond, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(BondFunctions::referencePeriodStart(**arg(bond), Date(settlementDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlBondFunctionsYield2(QlBond* bond, double price, int priceType, DayCounter* dayCounter, int compounding, int frequency, int settlementDate, double accuracy, unsigned maxIterations, double guess, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::yield(**arg(bond), Bond::Price(price, (Bond::Price::Type)priceType), *arg(dayCounter), (Compounding)compounding, (Frequency)frequency, Date(settlementDate), accuracy, maxIterations, guess);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsYieldValueBasisPoint(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::yieldValueBasisPoint(**arg(bond), *arg(yield), Date(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondFunctionsZSpread(QlBond* bond, double price, int priceType, QlYieldTermStructure* x2, int compounding, int frequency, int settlementDate, double accuracy, unsigned maxIterations, double guess, QlError **e) { QlCallScope callbackScope(e);+  try {return BondFunctions::zSpread(**arg(bond), Bond::Price(price, (Bond::Price::Type)priceType), handlePtr(arg(x2)), (Compounding)compounding, (Frequency)frequency, Date(settlementDate), accuracy, maxIterations, guess);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++double qlBondCleanPrice(QlBond* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->cleanPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBondDirtyPrice(QlBond* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->dirtyPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeCallableBond(QlCallableBond *o) {del(o);}+QlBond* qlCallableBondAsBond(QlCallableBond *o) {return ret(new QlBond(*arg(o)));}+void qlFreeConvertibleBond(QlConvertibleBond *o) {del(o);}+QlBond* qlConvertibleBondAsBond(QlConvertibleBond *o) {return ret(new QlBond(*arg(o)));}++QlCallableBond* qlCallableFixedRateBond(unsigned settlementDays, double faceAmount, Schedule* schedule, unsigned couponsLen, double* coupons, DayCounter* accrualDayCounter, int paymentConvention, double redemption, int issueDate, unsigned putCallScheduleLen, QlCallability** putCallSchedule, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCallableBond(alloc(new CallableFixedRateBond(settlementDays, faceAmount, *arg(schedule), std::vector<double>(coupons, coupons+couponsLen), *arg(accrualDayCounter), (BusinessDayConvention)paymentConvention, redemption, qlNullableDate(issueDate), qlVector(putCallSchedule, putCallScheduleLen),+            Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth))));+  } catch (std::exception& er) {return handleException<QlCallableBond*>(e, er);}}+QlCallableBond* qlCallableZeroCouponBond(unsigned settlementDays, double faceAmount, Calendar* calendar, int maturityDate, DayCounter* dayCounter, int paymentConvention, double redemption, int issueDate, unsigned putCallScheduleLen, QlCallability** putCallSchedule, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCallableBond(alloc(new CallableZeroCouponBond(settlementDays, faceAmount, *arg(calendar), Date(maturityDate), *arg(dayCounter), (BusinessDayConvention)paymentConvention, redemption, qlNullableDate(issueDate), qlVector(putCallSchedule, putCallScheduleLen)))));+  } catch (std::exception& er) {return handleException<QlCallableBond*>(e, er);}}+QlConvertibleBond* qlConvertibleFixedCouponBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, unsigned couponsLen, double* coupons, DayCounter* dayCounter, Schedule* schedule, double redemption, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlConvertibleBond(alloc(new ConvertibleFixedCouponBond(*arg(exercise), conversionRatio, qlVector(callability, callabilityLen), Date(issueDate), settlementDays, std::vector<double>(coupons, coupons+couponsLen), *arg(dayCounter), *arg(schedule), redemption,+            Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth))));+  } catch (std::exception& er) {return handleException<QlConvertibleBond*>(e, er);}}+QlConvertibleBond* qlConvertibleFloatingRateBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, QlIborIndex* index, unsigned fixingDays, unsigned spreadsLen, double* spreads, DayCounter* dayCounter, Schedule* schedule, double redemption, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlConvertibleBond(alloc(new ConvertibleFloatingRateBond(*arg(exercise), conversionRatio, qlVector(callability, callabilityLen), Date(issueDate), settlementDays, (*arg(index)), fixingDays, std::vector<double>(spreads, spreads+spreadsLen), *arg(dayCounter), *arg(schedule), redemption,+            Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth))));+  } catch (std::exception& er) {return handleException<QlConvertibleBond*>(e, er);}}+QlConvertibleBond* qlConvertibleZeroCouponBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, DayCounter* dayCounter, Schedule* schedule, double redemption, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlConvertibleBond(alloc(new ConvertibleZeroCouponBond(*arg(exercise), conversionRatio, qlVector(callability, callabilityLen), Date(issueDate), settlementDays, *arg(dayCounter), *arg(schedule), redemption))));+  } catch (std::exception& er) {return handleException<QlConvertibleBond*>(e, er);}}++QlCallability* qlSoftCallability(double price, int priceType, int date, double trigger, QlError **e) { QlCallScope callbackScope(e);+  try {Bond::Price p(price, (Bond::Price::Type)priceType); return ret(new QlCallability(alloc(new SoftCallability(p, Date(date), trigger))));+  } catch (std::exception& er) {return handleException<QlCallability*>(e, er);}}+Leg *qlLeg(unsigned len, double *amounts, int *dates, QlError **e) { QlCallScope callbackScope(e);+  try {std::unique_ptr<Leg> leg(new Leg()); leg->reserve(len);+    for (unsigned i = 0; i < len; ++i)+      leg->push_back(shared_ptr<CashFlow>(new SimpleCashFlow(amounts[i], Date(dates[i]))));+    return alloc(leg.release());+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}++void qlFreeCashFlow(QlCashFlow *o) {del(o);}+double qlCashFlowAmount(QlCashFlow *o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->amount();} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlCashFlowDate(QlCashFlow *o) {return (*arg(o))->date().serialNumber();}+QlCashFlow *qlSimpleCashFlow(double amount, int date, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCashFlow(alloc(new SimpleCashFlow(amount, Date(date)))));+  } catch (std::exception& er) {return handleException<QlCashFlow*>(e, er);}}+void qlFreeIndexedCashFlow(QlIndexedCashFlow *o) {del(o);}+QlCashFlow *qlIndexedCashFlowAsCashFlow(QlIndexedCashFlow *o) {return ret(new QlCashFlow(*arg(o)));}+QlIndexedCashFlow *qlIndexedCashFlow(double notional, QlIndex *index, int baseDate, int fixingDate, int paymentDate, int growthOnly, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlIndexedCashFlow(alloc(new IndexedCashFlow(notional, *arg(index), Date(baseDate), Date(fixingDate), Date(paymentDate), growthOnly))));+  } catch (std::exception& er) {return handleException<QlIndexedCashFlow*>(e, er);}}+double qlIndexedCashFlowBaseFixing(QlIndexedCashFlow *o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->baseFixing();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlIndexedCashFlowIndexFixing(QlIndexedCashFlow *o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->indexFixing();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlFixedRateCoupon *qlFixedRateCoupon(int paymentDate, double nominal, double rate, DayCounter *dayCounter, int accrualStartDate, int accrualEndDate, int refPeriodStart, int refPeriodEnd, int exCouponDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFixedRateCoupon(alloc(new FixedRateCoupon(Date(paymentDate), nominal, rate, *arg(dayCounter), Date(accrualStartDate), Date(accrualEndDate), qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), qlNullableDate(exCouponDate)))));+  } catch (std::exception& er) {return handleException<QlFixedRateCoupon*>(e, er);}}+void qlFreeCoupon(QlCoupon *o) {del(o);}+QlCashFlow* qlCouponAsCashFlow(QlCoupon *o) {return ret(new QlCashFlow(*arg(o)));}+double qlCouponRate(QlCoupon *o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->rate();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCouponAccruedAmount(QlCoupon *o, int d, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->accruedAmount(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeFixedRateCoupon(QlFixedRateCoupon *o) {del(o);}+QlCoupon* qlFixedRateCouponAsCoupon(QlFixedRateCoupon *o) {return ret(new QlCoupon(*arg(o)));}+InterestRate* qlFixedRateCouponInterestRate(QlFixedRateCoupon *o) {return ret(new InterestRate((*arg(o))->interestRate()));}+QlFloatingRateCoupon *qlFloatingRateCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlInterestRateIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCoupon(alloc(new FloatingRateCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays, *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}+Leg *qlCashFlowLeg(unsigned len, QlCashFlow **cashFlows, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new Leg(qlVector(cashFlows, len)));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}++int qlLegStartDate(Leg *leg, QlError **e) { QlCallScope callbackScope(e);try {Date d = CashFlows::startDate(*arg(leg)); return d.serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+void qlFreeLeg(Leg *leg) {del(leg);}++Leg *qlNextCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {const Leg &l = *arg(leg);+    Leg::const_iterator i = CashFlows::nextCashFlow(l,+        includeSettlementDateFlows, qlNullableDate(settlementDate));+    return alloc(new Leg(i, l.end()));+  } catch (std::exception& er) {return handleException<Leg *>(e, er);}}+Leg *qlPreviousCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {const Leg &l = *arg(leg);+    Leg::const_reverse_iterator i = CashFlows::previousCashFlow(l,+        includeSettlementDateFlows, qlNullableDate(settlementDate));+    return alloc(new Leg(l.begin(), i.base()));+  } catch (std::exception& er) {return handleException<Leg *>(e, er);}}+// Every fixing the cash flows of this leg need, as parallel (index name, fixing date) arrays in+// leg order. QuantLib exposes no such query, so this walks the leg itself; see+// collectFixingDependencies above for the cast cascade and why its order matters. Names are+// Index::name(), the same key QuantLib's process-global fixing store uses. Duplicates are left+// in: two coupons may legitimately fix the same index on the same date, and the caller decides+// whether that matters.+void qlLegFixingDependencies(Leg *leg, unsigned *nameLen, char ***names, unsigned *dateLen, int **dates, QlError **e) { QlCallScope callbackScope(e);+  OutStringArrayResult nameResult(nameLen, names);+  OutArrayResult<int> dateResult(dateLen, dates);+  try {const Leg& l = *arg(leg);+    std::vector<std::pair<std::string, Date> > deps;+    collectLegFixingDependencies(l, deps);+    const unsigned n = (unsigned)deps.size();+    char **ns = nameResult.allocate(n);+    int *ds = dateResult.allocate(n);+    for (unsigned i = 0; i < n; ++i) {+      ns[i] = tracedup(deps[i].first.c_str());+      ds[i] = deps[i].second.serialNumber();+    }+    nameResult.commit(); dateResult.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}+// The same walk for one of the rate helpers a curve was bootstrapped from. A bootstrapped curve+// cannot be asked what it was built from: PiecewiseYieldCurve is a template whose only accessors+// are maxDate/times/dates/data/nodes, and Observer does not expose the observables it registered+// with, so the helper list stays the caller's. A helper whose underlying instrument QuantLib+// hands back owns Legs, and a Leg is qlLegFixingDependencies' walk -- the underlying is reached+// through the only accessors 1.43 gives: SwapRateHelper::swap, OISRateHelper::swap,+// BondHelper::bond, and the two basis-swap helpers' swap; BMA, multiple-resets and cross-currency+// helpers keep theirs protected, which a derived-class pointer-to-member reaches.+//+// A futures or FX swap helper contributes nothing, and neither does a relative-date deposit or FRA,+// and that is an answer rather than a gap: the convention forms of the last two build their index+// with a "no-fix" name, and every relative form fixes on or after the evaluation date, where+// fixing(d, true) forecasts rather than reading the store. The fixed-date deposit and FRA forms+// read a fixing once its date has passed, and QuantLib keeps that date private, so hasquant builds+// them as FixedDateDepositRateHelper and FixedDateFraRateHelper (qlTermStructureAux.h), which keep+// a copy for this walk and report it from the day after it. An overnight-index (or SOFR) futures helper reads past fixings once+// its reference period is about to start and keeps its future private, so from then *reachable is+// set to 0 for it: an empty answer with reachable == 0 is "cannot see it". So is a helper type+// the visitor has no case for, which is how a newly bound helper fails until it gets one.+//+// The dates follow Settings::evaluationDate, because a relative-date helper re-initialises its+// schedule when that date moves. Call it on the date whose fixings are being asked about.+//+// The alias is local for the reason qlTermStructure.cpp gives where it declares its own:+// RateHelper is a typedef, so qlaux.h cannot alias it from a forward declaration.+using QlRateHelper = shared_ptr<RateHelper>;+void qlRateHelperFixingDependencies(QlRateHelper *helper, unsigned *nameLen, char ***names, unsigned *dateLen, int **dates, int *reachable, QlError **e) { QlCallScope callbackScope(e);+  OutStringArrayResult nameResult(nameLen, names);+  OutArrayResult<int> dateResult(dateLen, dates);+  try {const ext::shared_ptr<RateHelper>& h = *arg(helper);+    std::vector<std::pair<std::string, Date> > deps;+    RateHelperFixingDependencyVisitor visitor(deps);+    h->accept(visitor);+    *reachable = !visitor.opaque();+    const unsigned n = (unsigned)deps.size();+    char **ns = nameResult.allocate(n);+    int *ds = dateResult.allocate(n);+    for (unsigned i = 0; i < n; ++i) {+      ns[i] = tracedup(deps[i].first.c_str());+      ds[i] = deps[i].second.serialNumber();+    }+    nameResult.commit(); dateResult.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}+void qlLegCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate,+   unsigned *al, double **amount, unsigned *dl, int **date, unsigned *hl, int **hasOccurred, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> amountResult(al, amount);+  OutArrayResult<int> dateResult(dl, date);+  OutArrayResult<int> occurredResult(hl, hasOccurred);+  try {const Leg& l = *arg(leg);+    double *amounts = amountResult.allocate((unsigned)l.size());+    int *dates = dateResult.allocate((unsigned)l.size());+    int *occurred = occurredResult.allocate((unsigned)l.size());+    for (unsigned i = 0; i < l.size(); ++i) {+      amounts[i] = l[i]->amount();+      dates[i] = l[i]->date().serialNumber();+      occurred[i] = l[i]->hasOccurred(qlNullableDate(settlementDate), qlOptBool(includeSettlementDateFlows));+    }+    amountResult.commit(); dateResult.commit(); occurredResult.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}++double qlCashFlowsDuration(Leg* leg, InterestRate* yield, int type, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::duration(*arg(leg), *arg(yield), (Duration::Type)type, includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlCashFlowsAccrualDays(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::accrualDays(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlCashFlowsAccrualEndDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(CashFlows::accrualEndDate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlCashFlowsAccrualPeriod(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::accrualPeriod(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlCashFlowsAccrualStartDate(Leg* leg, int includeSettlementDateFlows, int settlDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(CashFlows::accrualStartDate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlCashFlowsAccruedAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::accruedAmount(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlCashFlowsAccruedDays(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::accruedDays(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlCashFlowsAccruedPeriod(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::accruedPeriod(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsAtmRate(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, double npv, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::atmRate(*arg(leg), handleRef(arg(discountCurve)), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate), npv);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsBasisPointValue(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::basisPointValue(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsBps1(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::bps(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsBps(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::bps(*arg(leg), handleRef(arg(discountCurve)), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsConvexity(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::convexity(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlCashFlowsIsExpired(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::isExpired(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlCashFlowsMaturityDate(Leg* leg, QlError **e) { QlCallScope callbackScope(e);+  try {return (CashFlows::maturityDate(*arg(leg))).serialNumber();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlCashFlowsNextCashFlowAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::nextCashFlowAmount(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlCashFlowsNextCashFlowDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(CashFlows::nextCashFlowDate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlCashFlowsNextCouponRate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::nextCouponRate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsNominal(Leg* leg, int includeSettlementDateFlows, int settlDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::nominal(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsNpv1(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::npv(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsNpv3(Leg* leg, QlYieldTermStructure* discount, double zSpread, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::npv(*arg(leg), handlePtr(arg(discount)), zSpread, (Compounding)compounding, (Frequency)frequency, includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsNpv(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::npv(*arg(leg), handleRef(arg(discountCurve)), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlCashFlowsNpvbps(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, double *npv, double *bps, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto r = CashFlows::npvbps(*arg(leg), handleRef(arg(discountCurve)), includeSettlementDateFlows, Date(settlementDate), Date(npvDate));+    *npv = r.first; *bps = r.second;+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+double qlCashFlowsPreviousCashFlowAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::previousCashFlowAmount(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlCashFlowsPreviousCashFlowDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(CashFlows::previousCashFlowDate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlCashFlowsPreviousCouponRate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::previousCouponRate(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlementDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlCashFlowsReferencePeriodEnd(Leg* leg, int includeSettlementDateFlows, int settlDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(CashFlows::referencePeriodEnd(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlCashFlowsReferencePeriodStart(Leg* leg, int includeSettlementDateFlows, int settlDate, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate(CashFlows::referencePeriodStart(*arg(leg), includeSettlementDateFlows, qlNullableDate(settlDate)));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlCashFlowsYield(Leg* leg, double npv, DayCounter* dayCounter, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, double accuracy, unsigned maxIterations, double guess, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::yield(*arg(leg), npv, *arg(dayCounter), (Compounding)compounding, (Frequency)frequency, includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate), accuracy, maxIterations, guess);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsYieldValueBasisPoint(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::yieldValueBasisPoint(*arg(leg), *arg(yield), includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCashFlowsZSpread(Leg* leg, double npv, QlYieldTermStructure* x2, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, double accuracy, unsigned maxIterations, double guess, QlError **e) { QlCallScope callbackScope(e);+  try {return CashFlows::zSpread(*arg(leg), npv, handlePtr(arg(x2)), (Compounding)compounding, (Frequency)frequency, includeSettlementDateFlows, qlNullableDate(settlementDate), qlNullableDate(npvDate), accuracy, maxIterations, guess);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlQuantLibSetCouponPricer(Leg* leg, QlFloatingRateCouponPricer* x1, QlError **e) { QlCallScope callbackScope(e);try {return setCouponPricer(*arg(leg), *arg(x1));} catch (std::exception& er) {(void)handleException<int>(e, er);} }+void qlQuantLibSetCouponPricers(Leg* leg, unsigned x1Len, QlFloatingRateCouponPricer** x1, QlError **e) { QlCallScope callbackScope(e);try {return setCouponPricers(*arg(leg), qlVector(x1, x1Len));} catch (std::exception& er) {(void)handleException<int>(e, er);}}++void qlCouponAccrualStartDates(CouponLeg* o, unsigned *len, int **days, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(len, days);+  try {+    int *out = result.allocate((unsigned)o->size());+    for (unsigned i = 0; i < o->size(); ++i)+      out[i] = ((*o)[i]->accrualStartDate()).serialNumber();+    result.commit();+  } catch (std::exception& er) {handleException<int*>(e, er);}}++void qlCouponLegCoupons(CouponLeg* o, unsigned *len, QlCoupon ***out, QlError **e) { QlCallScope callbackScope(e);+  OutPtrArrayResult<QlCoupon> result(len, out);+  try {+    QlCoupon **cs = result.allocate((unsigned)o->size());+    for (unsigned i = 0; i < o->size(); ++i)+      cs[i] = ret(new QlCoupon((*o)[i]));+    result.commit();+  } catch (std::exception& er) {handleException<int>(e, er);}}++void qlFreeDividend(QlDividend *o) {del(o);}+void qlFreeCouponLeg(CouponLeg *o) {del(o);}+Leg* qlCouponLegAsLeg(CouponLeg *o) {return alloc(new Leg(o->begin(), o->end()));}+void qlFreeFloatingCouponPricer(QlFloatingRateCouponPricer *p) {del(p);}++QlDividend* qlFixedDividend(double amount, int date, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlDividend(alloc(new FixedDividend(amount, Date(date)))));} catch (std::exception& er) {return handleException<QlDividend*>(e, er);} }+QlDividend* qlFractionalDividend1(double rate, double nominal, int date, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDividend(alloc(new FractionalDividend(rate, nominal, Date(date)))));+  } catch (std::exception& er) {return handleException<QlDividend*>(e, er);}}+QlDividend* qlFractionalDividend(double rate, int date, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDividend(alloc(new FractionalDividend(rate, Date(date)))));+  } catch (std::exception& er) {return handleException<QlDividend*>(e, er);}}+Leg* qlAverageBMALeg(Schedule* schedule, QlBMAIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Leg(AverageBMALeg(*arg(schedule), *arg(index)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))+        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlFixedRateLeg(Schedule* schedule, unsigned NotionalsLen, double* Notionals, unsigned couponRatesLen, InterestRate** couponRates, int paymentAdjustment, DayCounter* firstPeriodDayCounter, Calendar* paymentCalendar, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Leg(FixedRateLeg(*arg(schedule)).withNotionals(std::vector<double>(Notionals, Notionals+NotionalsLen)).withCouponRates(qlVector(couponRates, couponRatesLen))+        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFirstPeriodDayCounter(*arg(firstPeriodDayCounter)).withPaymentCalendar(*arg(paymentCalendar))));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlIborLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments,+  int paymentLag, Calendar* paymentCalendar, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, int useIndexedCoupons, QlStubIndexSelection* stub, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "iborLegWithOptions", !stub)) return nullptr;+  try {return alloc(new Leg(IborLeg(*arg(schedule), *arg(index)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))+        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<unsigned>(fixingDays, fixingDays+fixingDaysLen))+        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))+        .withCaps(std::vector<double>(caps, caps+capsLen)).withFloors(std::vector<double>(floors, floors+floorsLen)).inArrears(inArrears).withZeroPayments(zeroPayments)+        .withPaymentLag(paymentLag).withPaymentCalendar(*arg(paymentCalendar))+        .withExCouponPeriod(Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth)+        .withFixingConvention((BusinessDayConvention)fixingConvention).withIndexedCoupons(qlOptBool(useIndexedCoupons))+#if QL_HEX_VERSION >= 0x01440000+      .withStubIndexSelection(qlStubSelection(stub))+#endif+));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlCmsLeg(Schedule* schedule, QlSwapIndex* swapIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments,+  int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Leg(CmsLeg(*arg(schedule), *arg(swapIndex)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))+        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<unsigned>(fixingDays, fixingDays+fixingDaysLen))+        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))+        .withCaps(std::vector<double>(caps, caps+capsLen)).withFloors(std::vector<double>(floors, floors+floorsLen)).inArrears(inArrears).withZeroPayments(zeroPayments)+        .withExCouponPeriod(Period(exCouponPeriodLen, (TimeUnit)exCouponPeriodUnit), *arg(exCouponCalendar), (BusinessDayConvention)exCouponConvention, exCouponEndOfMonth)+        .withFixingConvention((BusinessDayConvention)fixingConvention)));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlOvernightLeg(Schedule* schedule, QlOvernightIndex* overnightIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Leg(OvernightLeg(*arg(schedule), *arg(overnightIndex)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))+        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlRangeAccrualLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned lowerTriggersLen, double* lowerTriggers, unsigned upperTriggersLen, double* upperTriggers, int l, int u, int observationConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Leg(RangeAccrualLeg(*arg(schedule), *arg(index)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))+        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<unsigned>(fixingDays, fixingDays+fixingDaysLen))+        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen)).+        withLowerTriggers(std::vector<double>(lowerTriggers, lowerTriggers+lowerTriggersLen)).withUpperTriggers(std::vector<double>(upperTriggers, upperTriggers+upperTriggersLen))+        .withObservationTenor(Period(l, (TimeUnit)u)).withObservationConvention((BusinessDayConvention)observationConvention)));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlCPILeg(Schedule* schedule, QlZeroInflationIndex* index, double baseCPI, int obsLagLen, int obsLagUnit, unsigned notionalsLen, double* notionals, unsigned fixedRatesLen, double* fixedRates, DayCounter* paymentDayCounter, int paymentAdjustment, Calendar* paymentCalendar, int observationInterpolation, int subtractInflationNominal, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Leg(CPILeg(*arg(schedule), *arg(index), baseCPI, Period(obsLagLen, (TimeUnit)obsLagUnit))+        .withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withFixedRates(std::vector<double>(fixedRates, fixedRates+fixedRatesLen))+        .withPaymentDayCounter(*arg(paymentDayCounter)).withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withPaymentCalendar(*arg(paymentCalendar))+        .withObservationInterpolation((CPI::InterpolationType)observationInterpolation).withSubtractInflationNominal(subtractInflationNominal)));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlYoYInflationLeg(Schedule* schedule, Calendar* cal, QlYoYInflationIndex* index, int obsLagLen, int obsLagUnit, int interpolation, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Leg(yoyInflationLeg(*arg(schedule), *arg(cal), *arg(index), Period(obsLagLen, (TimeUnit)obsLagUnit), (CPI::InterpolationType)interpolation)+        .withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))+        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<Natural>(fixingDays, fixingDays+fixingDaysLen))+        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))+        .withCaps(std::vector<double>(caps, caps+capsLen)).withFloors(std::vector<double>(floors, floors+floorsLen))));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}++/* YoYInflationCouponPricer -- all 3 concrete pricers share this ctor shape (caplet vol handle,+   nominal discount curve handle); mirrors the 3 YoY cap/floor engines in qlInflationVol.cpp. */+QlYoYInflationCouponPricer *qlBlackYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationCouponPricer(alloc(new BlackYoYInflationCouponPricer(*arg(vol), *arg(nominalTs)))));+  } catch (std::exception& er) {return handleException<QlYoYInflationCouponPricer*>(e, er);}}+QlYoYInflationCouponPricer *qlUnitDisplacedBlackYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationCouponPricer(alloc(new UnitDisplacedBlackYoYInflationCouponPricer(*arg(vol), *arg(nominalTs)))));+  } catch (std::exception& er) {return handleException<QlYoYInflationCouponPricer*>(e, er);}}+QlYoYInflationCouponPricer *qlBachelierYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationCouponPricer(alloc(new BachelierYoYInflationCouponPricer(*arg(vol), *arg(nominalTs)))));+  } catch (std::exception& er) {return handleException<QlYoYInflationCouponPricer*>(e, er);}}+void qlFreeYoYInflationCouponPricer(QlYoYInflationCouponPricer *p) {del(p);}+void qlSetYoYInflationCouponPricer(Leg* leg, QlYoYInflationCouponPricer* pricer, QlError **e) { QlCallScope callbackScope(e);+  try {return setCouponPricer(*arg(leg), *arg(pricer));} catch (std::exception& er) {(void)handleException<int>(e, er);}}++void qlFreeZeroInflationCashFlow(QlZeroInflationCashFlow *o) {del(o);}+QlIndexedCashFlow *qlZeroInflationCashFlowAsIndexedCashFlow(QlZeroInflationCashFlow *o) {return ret(new QlIndexedCashFlow(*arg(o)));}+QlZeroInflationCashFlow* qlZeroInflationCashFlow(double notional, QlZeroInflationIndex* index, int observationInterpolation, int startDate, int endDate, int obsLagLen, int obsLagUnit, int paymentDate, int growthOnly, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlZeroInflationCashFlow(alloc(new ZeroInflationCashFlow(notional, *arg(index), (CPI::InterpolationType)observationInterpolation,+        Date(startDate), Date(endDate), Period(obsLagLen, (TimeUnit)obsLagUnit), Date(paymentDate), growthOnly))));+  } catch (std::exception& er) {return handleException<QlZeroInflationCashFlow*>(e, er);}}++void qlFreeCPICashFlow(QlCPICashFlow *o) {del(o);}+QlIndexedCashFlow *qlCPICashFlowAsIndexedCashFlow(QlCPICashFlow *o) {return ret(new QlIndexedCashFlow(*arg(o)));}+QlCPICashFlow* qlCPICashFlow(double notional, QlZeroInflationIndex* index, int baseDate, double baseFixing, int observationDate, int obsLagLen, int obsLagUnit, int interpolation, int paymentDate, int growthOnly, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCPICashFlow(alloc(new CPICashFlow(notional, *arg(index), qlNullableDate(baseDate), baseFixing,+        Date(observationDate), Period(obsLagLen, (TimeUnit)obsLagUnit), (CPI::InterpolationType)interpolation, Date(paymentDate), growthOnly))));+  } catch (std::exception& er) {return handleException<QlCPICashFlow*>(e, er);}}++void qlFreeEquityCashFlow(QlEquityCashFlow *o) {del(o);}+QlIndexedCashFlow *qlEquityCashFlowAsIndexedCashFlow(QlEquityCashFlow *o) {return ret(new QlIndexedCashFlow(*arg(o)));}+QlEquityCashFlow* qlEquityCashFlow(double notional, QlEquityIndex* index, int baseDate, int fixingDate, int paymentDate, int growthOnly, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlEquityCashFlow(alloc(new EquityCashFlow(notional, *arg(index),+        Date(baseDate), Date(fixingDate), Date(paymentDate), growthOnly))));+  } catch (std::exception& er) {return handleException<QlEquityCashFlow*>(e, er);}}+void qlEquityCashFlowSetPricer(QlEquityCashFlow* o, QlEquityCashFlowPricer* pricer, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->setPricer(*arg(pricer));+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}++void qlFreeEquityCashFlowPricer(QlEquityCashFlowPricer *o) {del(o);}+QlEquityCashFlowPricer* qlEquityQuantoCashFlowPricer(QlYieldTermStructure* quantoCurrencyTermStructure, QlBlackVolTermStructure* equityVolatility, QlBlackVolTermStructure* fxVolatility, QlQuote* correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlEquityCashFlowPricer(alloc(new EquityQuantoCashFlowPricer(*arg(quantoCurrencyTermStructure),+        *arg(equityVolatility), *arg(fxVolatility), *arg(correlation)))));+  } catch (std::exception& er) {return handleException<QlEquityCashFlowPricer*>(e, er);}}+void qlQuantLibSetEquityCashFlowPricer(Leg* leg, QlEquityCashFlowPricer* pricer, QlError **e) { QlCallScope callbackScope(e);+  try {setCouponPricer(*arg(leg), *arg(pricer));+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}++CouponLeg* qlLegToCouponLeg(Leg *o, QlError **e) { QlCallScope callbackScope(e);+  try {std::unique_ptr<CouponLeg> cl(new CouponLeg()); cl->reserve(o->size());+    for (unsigned i = 0; i < o->size(); ++i) {+      shared_ptr<Coupon> c = coupon_cast((*o)[i]);+      if (c != nullptr) cl->push_back(c);+      else QL_FAIL("Cash flow #" << i << " is not a coupon");+    }+    return alloc(cl.release());+  } catch (std::exception& er) {return handleException<CouponLeg*>(e, er);}}++QlFloatingRateCouponPricer *qlBlackIborCouponPricer(QlOptionletVolatilityStructure *vol, int timingAdjustment, QlQuote *correlation, int useIndexedCoupon, QlError **e) { QlCallScope callbackScope(e);+  try {Handle<Quote> corr = qlNullableHandleOr(correlation, [] { return shared_ptr<Quote>(alloc(new SimpleQuote(1.0))); });+    return ret(new QlFloatingRateCouponPricer(alloc(new BlackIborCouponPricer(*arg(vol), (BlackIborCouponPricer::TimingAdjustment)timingAdjustment, corr, qlOptBool(useIndexedCoupon)))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer *>(e, er);}}+QlFloatingRateCouponPricer *qlBlackIborQuantoCouponPricer(QlBlackVolTermStructure *fxRateBlackVolatility, QlQuote *underlyingFxCorrelation, QlOptionletVolatilityStructure *capletVolatility, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCouponPricer(alloc(new BlackIborQuantoCouponPricer(*arg(fxRateBlackVolatility), *arg(underlyingFxCorrelation), *arg(capletVolatility)))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer *>(e, er);}}+void qlFreeCmsCouponPricer(QlCmsCouponPricer *p) {del(p);}+QlFloatingRateCouponPricer* qlCmsCouponPricerAsFloatingRateCouponPricer(QlCmsCouponPricer* p) {return ret(new QlFloatingRateCouponPricer(*arg(p)));}+QlCmsCouponPricer* qlAnalyticHaganPricer(QlSwaptionVolatilityStructure* swaptionVol, int modelOfYieldCurve, QlQuote* meanReversion, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCmsCouponPricer(alloc(new AnalyticHaganPricer(*arg(swaptionVol), (GFunctionFactory::YieldCurveModel)modelOfYieldCurve, *arg(meanReversion)))));+  } catch (std::exception& er) {return handleException<QlCmsCouponPricer*>(e, er);}}+QlCmsCouponPricer* qlNumericHaganPricer(QlSwaptionVolatilityStructure* swaptionVol, int modelOfYieldCurve, QlQuote* meanReversion, double lowerLimit, double upperLimit, double precision, double hardUpperLimit, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCmsCouponPricer(alloc(new NumericHaganPricer(*arg(swaptionVol), (GFunctionFactory::YieldCurveModel)modelOfYieldCurve, *arg(meanReversion), lowerLimit, upperLimit, precision, hardUpperLimit))));+  } catch (std::exception& er) {return handleException<QlCmsCouponPricer*>(e, er);}}+QlCmsCouponPricer* qlLinearTsrPricer(QlSwaptionVolatilityStructure* swaptionVol, QlQuote* meanReversion, QlYieldTermStructure* couponDiscountCurve, int strategy, double param, int haveBounds, double lowerBound, double upperBound, QlError **e) { QlCallScope callbackScope(e);+  try {+    LinearTsrPricer::Settings settings;+    switch (strategy) {+      case hasquant::LinearTsrPricerRateBound: haveBounds ? settings.withRateBound(lowerBound, upperBound) : settings.withRateBound(); break;+      case hasquant::LinearTsrPricerVegaRatio: haveBounds ? settings.withVegaRatio(param, lowerBound, upperBound) : settings.withVegaRatio(param); break;+      case hasquant::LinearTsrPricerPriceThreshold: haveBounds ? settings.withPriceThreshold(param, lowerBound, upperBound) : settings.withPriceThreshold(param); break;+      case hasquant::LinearTsrPricerBSStdDevs: haveBounds ? settings.withBSStdDevs(param, lowerBound, upperBound) : settings.withBSStdDevs(param); break;+      default: QL_FAIL("unknown LinearTsrPricer strategy " << strategy);+    }+    return ret(new QlCmsCouponPricer(alloc(new LinearTsrPricer(*arg(swaptionVol), *arg(meanReversion),+        qlNullableHandle(couponDiscountCurve), settings))));+  } catch (std::exception& er) {return handleException<QlCmsCouponPricer*>(e, er);}}+QlFloatingRateCouponPricer* qlRangeAccrualPricerByBgm(double correlation, QlSmileSection* smilesOnExpiry, QlSmileSection* smilesOnPayment, int withSmile, int byCallSpread, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCouponPricer(alloc(new RangeAccrualPricerByBgm(correlation, *arg(smilesOnExpiry), *arg(smilesOnPayment), withSmile, byCallSpread))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}++void qlFreeFloatingRateCoupon(QlFloatingRateCoupon *o) {del(o);}+void qlFreeIborCoupon(QlIborCoupon *o) {del(o);}+QlFloatingRateCoupon* qlIborCouponAsFloatingRateCoupon(QlIborCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}+QlIborCoupon* qlIborCouponExact(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlIborIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlIborCoupon(alloc(new IborCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays, *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));+  } catch (std::exception& er) {return handleException<QlIborCoupon*>(e, er);}}+void qlFreeAverageBMACoupon(QlAverageBMACoupon *o) {del(o);}+QlFloatingRateCoupon* qlAverageBMACouponAsFloatingRateCoupon(QlAverageBMACoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}+QlAverageBMACoupon* qlAverageBMACoupon(int paymentDate, double nominal, int startDate, int endDate, QlBMAIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlAverageBMACoupon(alloc(new AverageBMACoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter)))));+  } catch (std::exception& er) {return handleException<QlAverageBMACoupon*>(e, er);}}+void qlAverageBMACouponFixingDates(QlAverageBMACoupon *o, unsigned *len, int **ds, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(len, ds);+  try {const std::vector<Date>& d = (*arg(o))->fixingDates(); int *out = result.allocate((unsigned)d.size());+    std::transform(d.begin(), d.end(), out, [](const Date& x) {return (int)x.serialNumber();});+    result.commit();+  } catch (std::exception& er) {(void)handleException<int*>(e, er);}}+void qlAverageBMACouponIndexFixings(QlAverageBMACoupon *o, unsigned *len, double **fs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->indexFixings();}, len, fs);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+QlFloatingRateCoupon* qlCappedFlooredCoupon(QlFloatingRateCoupon *underlying, double cap, double floor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredCoupon(*arg(underlying), cap, floor))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}+void qlFreeStrippedCappedFlooredCoupon(QlStrippedCappedFlooredCoupon *o) {del(o);}+QlFloatingRateCoupon* qlStrippedCappedFlooredCouponAsFloatingRateCoupon(QlStrippedCappedFlooredCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}+QlStrippedCappedFlooredCoupon* qlStrippedCappedFlooredCoupon(QlFloatingRateCoupon *underlying, double cap, double floor, QlError **e) { QlCallScope callbackScope(e);+  try {auto capped = ext::make_shared<CappedFlooredCoupon>(*arg(underlying), cap, floor);+    return ret(new QlStrippedCappedFlooredCoupon(alloc(new StrippedCappedFlooredCoupon(capped))));+  } catch (std::exception& er) {return handleException<QlStrippedCappedFlooredCoupon*>(e, er);}}+double qlStrippedCappedFlooredCouponCap(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->cap();}+double qlStrippedCappedFlooredCouponFloor(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->floor();}+double qlStrippedCappedFlooredCouponEffectiveCap(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->effectiveCap();}+double qlStrippedCappedFlooredCouponEffectiveFloor(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->effectiveFloor();}+int qlStrippedCappedFlooredCouponIsCap(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->isCap();}+int qlStrippedCappedFlooredCouponIsFloor(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->isFloor();}+int qlStrippedCappedFlooredCouponIsCollar(QlStrippedCappedFlooredCoupon *o) {return (*arg(o))->isCollar();}+QlFloatingRateCoupon* qlCappedFlooredIborCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlIborIndex *index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredIborCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays, *arg(index), gearing, spread, cap, floor, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}+QlDigitalCoupon* qlDigitalIborCoupon(QlIborCoupon *underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication *replication, int nakedOption, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDigitalCoupon(alloc(new DigitalIborCoupon(*arg(underlying), callStrike, (Position::Type)callPosition, callATM, callPayoff, putStrike, (Position::Type)putPosition, putATM, putPayoff, replication ? *arg(replication) : shared_ptr<DigitalReplication>(), nakedOption))));+  } catch (std::exception& er) {return handleException<QlDigitalCoupon*>(e, er);}}+void qlFreeDigitalCoupon(QlDigitalCoupon* o) {del(o);}+QlFloatingRateCoupon* qlDigitalCouponAsFloatingRateCoupon(QlDigitalCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}+QlDigitalCoupon* qlDigitalCoupon(QlFloatingRateCoupon *underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication *replication, int nakedOption, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDigitalCoupon(alloc(new DigitalCoupon(*arg(underlying), callStrike, (Position::Type)callPosition, callATM, callPayoff, putStrike, (Position::Type)putPosition, putATM, putPayoff, replication ? *arg(replication) : shared_ptr<DigitalReplication>(), nakedOption))));+  } catch (std::exception& er) {return handleException<QlDigitalCoupon*>(e, er);}}+double qlDigitalCouponCallOptionRate(QlDigitalCoupon* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->callOptionRate();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDigitalCouponPutOptionRate(QlDigitalCoupon* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->putOptionRate();} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeMultipleResetsCoupon(QlMultipleResetsCoupon *o) {del(o);}+QlFloatingRateCoupon* qlMultipleResetsCouponAsFloatingRateCoupon(QlMultipleResetsCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}+QlMultipleResetsCoupon* qlMultipleResetsCoupon(int paymentDate, double nominal, Schedule *schedule, unsigned fixingDays, QlIborIndex *index, double gearing, double couponSpread, double rateSpread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int exCouponDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlMultipleResetsCoupon(alloc(new MultipleResetsCoupon(Date(paymentDate), nominal, *arg(schedule), fixingDays, *arg(index), gearing, couponSpread, rateSpread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), qlNullableDate(exCouponDate)))));+  } catch (std::exception& er) {return handleException<QlMultipleResetsCoupon*>(e, er);}}+void qlMultipleResetsCouponFixingDates(QlMultipleResetsCoupon *o, unsigned *len, int **dates, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(len, dates);+  try {const std::vector<Date>& ds = (*arg(o))->fixingDates();+    int *out = result.allocate((unsigned)ds.size());+    for (unsigned i = 0; i < ds.size(); ++i) out[i] = ds[i].serialNumber();+    result.commit();+  } catch (std::exception& er) {(void)handleException<int*>(e, er);}}+void qlFreeRangeAccrualFloatersCoupon(QlRangeAccrualFloatersCoupon* o) {del(o);}+QlFloatingRateCoupon* qlRangeAccrualFloatersCouponAsFloatingRateCoupon(QlRangeAccrualFloatersCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}+QlRangeAccrualFloatersCoupon* qlRangeAccrualFloatersCoupon(int paymentDate, double nominal, QlIborIndex* index, int startDate, int endDate, unsigned fixingDays, DayCounter* dayCounter, double gearing, double spread, int refStart, int refEnd, Schedule* observations, double lower, double upper, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRangeAccrualFloatersCoupon(alloc(new RangeAccrualFloatersCoupon(Date(paymentDate), nominal, *arg(index), Date(startDate), Date(endDate), fixingDays, *arg(dayCounter), gearing, spread, qlNullableDate(refStart), qlNullableDate(refEnd), *arg(observations), lower, upper))));+  } catch (std::exception& er) {return handleException<QlRangeAccrualFloatersCoupon*>(e, er);}}+double qlRangeAccrualFloatersCouponPriceWithoutOptionality(QlRangeAccrualFloatersCoupon* o, QlYieldTermStructure* curve, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->priceWithoutOptionality(*arg(curve));} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeYoYInflationCoupon(QlYoYInflationCoupon* o) {del(o);}+QlCoupon* qlYoYInflationCouponAsCoupon(QlYoYInflationCoupon* o) {return ret(new QlCoupon(*arg(o)));}+QlYoYInflationCoupon* qlYoYInflationCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlYoYInflationIndex* index, int lagLen, int lagUnit, int interpolation, DayCounter* dayCounter, double gearing, double spread, int refStart, int refEnd, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationCoupon(alloc(new YoYInflationCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays, *arg(index), Period(lagLen, (TimeUnit)lagUnit), (CPI::InterpolationType)interpolation, *arg(dayCounter), gearing, spread, qlNullableDate(refStart), qlNullableDate(refEnd)))));+  } catch (std::exception& er) {return handleException<QlYoYInflationCoupon*>(e, er);}}+double qlYoYInflationCouponAdjustedFixing(QlYoYInflationCoupon* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->adjustedFixing();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlFloatingRateCouponPricer* qlAveragingMultipleResetsPricer(QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlFloatingRateCouponPricer(alloc(new AveragingMultipleResetsPricer())));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}+QlFloatingRateCouponPricer* qlCompoundingMultipleResetsPricer(QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlFloatingRateCouponPricer(alloc(new CompoundingMultipleResetsPricer())));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}+void qlFreeOvernightIndexedCoupon(QlOvernightIndexedCoupon *o) {del(o);}+QlFloatingRateCoupon* qlOvernightIndexedCouponAsFloatingRateCoupon(QlOvernightIndexedCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}+QlOvernightIndexedCoupon* qlOvernightIndexedCoupon(int paymentDate, double nominal, int startDate, int endDate, QlOvernightIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int telescopic, int averaging, unsigned lookback, unsigned lockout, int observationShift, int compoundSpread, int rateStart, int rateEnd, int exCouponDate, int rounding, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOvernightIndexedCoupon(alloc(new OvernightIndexedCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), telescopic, (RateAveraging::Type)averaging, lookback, lockout, observationShift, compoundSpread, qlNullableDate(rateStart), qlNullableDate(rateEnd), qlNullableDate(exCouponDate), rounding == Null<Integer>() ? optional<Integer>() : optional<Integer>(rounding)))));+  } catch (std::exception& er) {return handleException<QlOvernightIndexedCoupon*>(e, er);}}+QlFloatingRateCoupon* qlCappedFlooredOvernightIndexedCoupon(QlOvernightIndexedCoupon *underlying, double cap, double floor, int naked, int daily, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredOvernightIndexedCoupon(*arg(underlying), cap, floor, naked, daily))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}+void qlOvernightIndexedCouponFixingDates(QlOvernightIndexedCoupon *o, unsigned *len, int **dates, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(len, dates);+  try {const std::vector<Date>& ds = (*arg(o))->fixingDates();+    int *out = result.allocate((unsigned)ds.size());+    for (unsigned i = 0; i < ds.size(); ++i) out[i] = ds[i].serialNumber();+    result.commit();+  } catch (std::exception& er) {(void)handleException<int*>(e, er);}}+void qlOvernightIndexedCouponIndexFixings(QlOvernightIndexedCoupon *o, unsigned *len, double **fixings, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->indexFixings();}, len, fixings);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+QlFloatingRateCouponPricer* qlCompoundingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlFloatingRateCouponPricer(alloc(new CompoundingOvernightIndexedCouponPricer(qlNullableHandle(vol), effective))));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}+QlFloatingRateCouponPricer* qlArithmeticAveragedOvernightIndexedCouponPricer(double mr, double volatility, int byApprox, QlOptionletVolatilityStructure *vol, int effective, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlFloatingRateCouponPricer(alloc(new ArithmeticAveragedOvernightIndexedCouponPricer(mr, volatility, byApprox, qlNullableHandle(vol), effective))));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}+QlFloatingRateCouponPricer* qlBlackCompoundingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlFloatingRateCouponPricer(alloc(new BlackCompoundingOvernightIndexedCouponPricer(qlNullableHandle(vol), effective))));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}+QlFloatingRateCouponPricer* qlBlackAveragingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlFloatingRateCouponPricer(alloc(new BlackAveragingOvernightIndexedCouponPricer(qlNullableHandle(vol), effective))));} catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}+void qlFreeCPICoupon(QlCPICoupon *o) {del(o);}+QlCPICoupon* qlCPICoupon(double baseCPI, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlCPICoupon(alloc(new CPICoupon(baseCPI, Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), Period(lagLen, (TimeUnit)lagUnit), (CPI::InterpolationType)interpolation, *arg(dc), fixedRate, qlNullableDate(refStart), qlNullableDate(refEnd), qlNullableDate(exCoupon)))));} catch (std::exception& er) {return handleException<QlCPICoupon*>(e, er);}}+QlCPICoupon* qlCPICouponFromBaseDate(int baseDate, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlCPICoupon(alloc(new CPICoupon(Date(baseDate), Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), Period(lagLen, (TimeUnit)lagUnit), (CPI::InterpolationType)interpolation, *arg(dc), fixedRate, qlNullableDate(refStart), qlNullableDate(refEnd), qlNullableDate(exCoupon)))));} catch (std::exception& er) {return handleException<QlCPICoupon*>(e, er);}}+QlCPICoupon* qlCPICouponWithBaseDate(double baseCPI, int baseDate, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlCPICoupon(alloc(new CPICoupon(baseCPI, Date(baseDate), Date(paymentDate), nominal, Date(startDate), Date(endDate), *arg(index), Period(lagLen, (TimeUnit)lagUnit), (CPI::InterpolationType)interpolation, *arg(dc), fixedRate, qlNullableDate(refStart), qlNullableDate(refEnd), qlNullableDate(exCoupon)))));} catch (std::exception& er) {return handleException<QlCPICoupon*>(e, er);}}+void qlFreeCPICouponPricer(QlCPICouponPricer *o) {del(o);}+QlCPICouponPricer* qlCPICouponPricer(QlYieldTermStructure *nominal, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlCPICouponPricer(alloc(new CPICouponPricer(qlNullableHandle(nominal)))));} catch (std::exception& er) {return handleException<QlCPICouponPricer*>(e, er);}}+QlCPICouponPricer* qlCPICouponPricerWithVol(QlCPIVolatilitySurface *vol, QlYieldTermStructure *nominal, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlCPICouponPricer(alloc(new CPICouponPricer(*arg(vol), qlNullableHandle(nominal)))));} catch (std::exception& er) {return handleException<QlCPICouponPricer*>(e, er);}}+QlCoupon* qlCPICouponAsCoupon(QlCPICoupon* o) {return ret(new QlCoupon(*arg(o)));}+void qlCPICouponSetPricer(QlCPICoupon *coupon, QlCPICouponPricer *pricer, QlError **e) { QlCallScope callbackScope(e);try {(*arg(coupon))->setPricer(*arg(pricer));} catch (std::exception& er) {(void)handleException<int>(e, er);}}+QlCashFlow* qlRedemption(double amount, int date, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlCashFlow(alloc(new Redemption(amount, Date(date)))));} catch (std::exception& er) {return handleException<QlCashFlow*>(e, er);}}+QlCashFlow* qlAmortizingPayment(double amount, int date, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlCashFlow(alloc(new AmortizingPayment(amount, Date(date)))));} catch (std::exception& er) {return handleException<QlCashFlow*>(e, er);}}+QlCoupon* qlFloatingRateCouponAsCoupon(QlFloatingRateCoupon* o) {return ret(new QlCoupon(*arg(o)));}+void qlFloatingRateCouponSetPricer(QlFloatingRateCoupon* o, QlFloatingRateCouponPricer* pricer, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->setPricer(*arg(pricer));+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+double qlFloatingRateCouponPrice(QlFloatingRateCoupon* o, QlYieldTermStructure* discountingCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->price(qlNullableHandle(discountingCurve));} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFloatingRateCouponConvexityAdjustment(QlFloatingRateCoupon* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->convexityAdjustment();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCPICouponIndexRatio(QlCPICoupon* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->indexRatio(Date(d));} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFloatingRateCouponPricerSwapletRate(QlFloatingRateCouponPricer* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->swapletRate();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFloatingRateCouponPricerSwapletPrice(QlFloatingRateCouponPricer* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->swapletPrice();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFloatingRateCouponPricerCapletPrice(QlFloatingRateCouponPricer* o, double effectiveCap, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->capletPrice(effectiveCap);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFloatingRateCouponPricerCapletRate(QlFloatingRateCouponPricer* o, double effectiveCap, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->capletRate(effectiveCap);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFloatingRateCouponPricerFloorletPrice(QlFloatingRateCouponPricer* o, double effectiveFloor, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->floorletPrice(effectiveFloor);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlFloatingRateCouponPricerFloorletRate(QlFloatingRateCouponPricer* o, double effectiveFloor, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->floorletRate(effectiveFloor);} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeCmsCoupon(QlCmsCoupon *o) {del(o);}+QlFloatingRateCoupon* qlCmsCouponAsFloatingRateCoupon(QlCmsCoupon* o) {return ret(new QlFloatingRateCoupon(*arg(o)));}+QlCmsCoupon* qlCmsCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCmsCoupon(alloc(new CmsCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,+      *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears,+      qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));+  } catch (std::exception& er) {return handleException<QlCmsCoupon*>(e, er);}}++QlFloatingRateCoupon* qlCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCoupon(alloc(new CmsSpreadCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,+      *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}+QlFloatingRateCoupon* qlCappedFlooredCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredCmsSpreadCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,+      *arg(index), gearing, spread, cap, floor, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}+QlFloatingRateCouponPricer* qlLognormalCmsSpreadPricer(QlCmsCouponPricer* cmsPricer, QlQuote* correlation, QlYieldTermStructure* couponDiscountCurve, unsigned integrationPoints, int haveVolatilityType, int volatilityType, double shift1, double shift2, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCouponPricer(alloc(new LognormalCmsSpreadPricer(*arg(cmsPricer), *arg(correlation), qlNullableHandle(couponDiscountCurve), integrationPoints,+      haveVolatilityType ? optional<VolatilityType>((VolatilityType)volatilityType) : nullopt, shift1, shift2))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCouponPricer*>(e, er);}}+Leg* qlCmsSpreadLeg(Schedule* schedule, QlSwapSpreadIndex* swapSpreadIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Leg(CmsSpreadLeg(*arg(schedule), *arg(swapSpreadIndex)).withNotionals(std::vector<double>(notionals, notionals+notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter))+        .withPaymentAdjustment((BusinessDayConvention)paymentAdjustment).withFixingDays(std::vector<unsigned>(fixingDays, fixingDays+fixingDaysLen))+        .withGearings(std::vector<double>(gearings, gearings+gearingsLen)).withSpreads(std::vector<double>(spreads, spreads+spreadsLen))+        .withCaps(std::vector<double>(caps, caps+capsLen)).withFloors(std::vector<double>(floors, floors+floorsLen)).inArrears(inArrears).withZeroPayments(zeroPayments)));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}++void qlFreeDigitalCmsSpreadCoupon(QlDigitalCmsSpreadCoupon *o) {del(o);}+QlDigitalCoupon* qlDigitalCmsSpreadCouponAsDigitalCoupon(QlDigitalCmsSpreadCoupon* o) {return ret(new QlDigitalCoupon(*arg(o)));}+QlDigitalCmsSpreadCoupon* qlDigitalCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication* replication, int nakedOption, QlError **e) { QlCallScope callbackScope(e);+  try {auto underlying = ext::make_shared<CmsSpreadCoupon>(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,+      *arg(index), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention);+    return ret(new QlDigitalCmsSpreadCoupon(alloc(new DigitalCmsSpreadCoupon(underlying, callStrike, (Position::Type)callPosition, callATM,+      callPayoff, putStrike, (Position::Type)putPosition, putATM, putPayoff, replication ? *arg(replication) : shared_ptr<DigitalReplication>(), nakedOption))));+  } catch (std::exception& er) {return handleException<QlDigitalCmsSpreadCoupon*>(e, er);}}+Leg* qlDigitalCmsSpreadLeg(Schedule* schedule, QlSwapSpreadIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, QlError **e) { QlCallScope callbackScope(e);+  try {DigitalCmsSpreadLeg builder(*arg(schedule), *arg(index));+    builder.withNotionals(std::vector<Real>(notionals, notionals + notionalsLen))+      .withPaymentDayCounter(*arg(paymentDayCounter)).withPaymentAdjustment((BusinessDayConvention)paymentAdjustment)+      .withFixingDays(std::vector<Natural>(fixingDays, fixingDays + fixingDaysLen))+      .withGearings(std::vector<Real>(gearings, gearings + gearingsLen)).withSpreads(std::vector<Spread>(spreads, spreads + spreadsLen))+      .inArrears(inArrears).withCallStrikes(std::vector<Rate>(callStrikes, callStrikes + callStrikesLen))+      .withLongCallOption((Position::Type)callPosition).withCallATM(callATM)+      .withCallPayoffs(std::vector<Rate>(callPayoffs, callPayoffs + callPayoffsLen))+      .withPutStrikes(std::vector<Rate>(putStrikes, putStrikes + putStrikesLen)).withLongPutOption((Position::Type)putPosition)+      .withPutATM(putATM).withPutPayoffs(std::vector<Rate>(putPayoffs, putPayoffs + putPayoffsLen))+      .withReplication(replication ? *arg(replication) : shared_ptr<DigitalReplication>()).withNakedOption(nakedOption);+    return ret(new Leg(builder));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}++void qlFreeSwapSpreadIndex(QlSwapSpreadIndex *o) {del(o);}+QlInterestRateIndex* qlSwapSpreadIndexAsInterestRateIndex(QlSwapSpreadIndex* o) {return ret(new QlInterestRateIndex(*arg(o)));}+QlSwapSpreadIndex* qlSwapSpreadIndex(const char* familyName, QlSwapIndex* swapIndex1, QlSwapIndex* swapIndex2, double gearing1, double gearing2, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwapSpreadIndex(alloc(new SwapSpreadIndex(familyName, *arg(swapIndex1), *arg(swapIndex2), gearing1, gearing2))));+  } catch (std::exception& er) {return handleException<QlSwapSpreadIndex*>(e, er);}}++QlFloatingRateCoupon* qlCappedFlooredCmsCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapIndex* index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatingRateCoupon(alloc(new CappedFlooredCmsCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays,+      *arg(index), gearing, spread, cap, floor, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), *arg(dayCounter), inArrears,+      qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));+  } catch (std::exception& er) {return handleException<QlFloatingRateCoupon*>(e, er);}}++void qlFreeDigitalReplication(QlDigitalReplication *o) {del(o);}+QlDigitalReplication* qlDigitalReplication(int type, double gap, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDigitalReplication(alloc(new DigitalReplication(qlReplicationType(type), gap))));+  } catch (std::exception& er) {return handleException<QlDigitalReplication*>(e, er);}}+int qlDigitalReplicationType(QlDigitalReplication* o) {return qlReplicationTypeOut((*arg(o))->replicationType());}+double qlDigitalReplicationGap(QlDigitalReplication* o) {return (*arg(o))->gap();}++void qlFreeDigitalCmsCoupon(QlDigitalCmsCoupon *o) {del(o);}+QlDigitalCoupon* qlDigitalCmsCouponAsDigitalCoupon(QlDigitalCmsCoupon* o) {return ret(new QlDigitalCoupon(*arg(o)));}+QlDigitalCmsCoupon* qlDigitalCmsCoupon(QlCmsCoupon* underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication* replication, int nakedOption, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDigitalCmsCoupon(alloc(new DigitalCmsCoupon(*arg(underlying), callStrike, (Position::Type)callPosition, callATM,+      callPayoff, putStrike, (Position::Type)putPosition, putATM, putPayoff, replication ? *arg(replication) : shared_ptr<DigitalReplication>(), nakedOption))));+  } catch (std::exception& er) {return handleException<QlDigitalCmsCoupon*>(e, er);}}++Leg* qlDigitalCmsLeg(Schedule* schedule, QlSwapIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, QlError **e) { QlCallScope callbackScope(e);+  try {DigitalCmsLeg builder(*arg(schedule), *arg(index));+    builder.withNotionals(std::vector<Real>(notionals, notionals + notionalsLen))+      .withPaymentDayCounter(*arg(paymentDayCounter)).withPaymentAdjustment((BusinessDayConvention)paymentAdjustment)+      .withFixingDays(std::vector<Natural>(fixingDays, fixingDays + fixingDaysLen))+      .withGearings(std::vector<Real>(gearings, gearings + gearingsLen)).withSpreads(std::vector<Spread>(spreads, spreads + spreadsLen))+      .inArrears(inArrears).withCallStrikes(std::vector<Rate>(callStrikes, callStrikes + callStrikesLen))+      .withLongCallOption((Position::Type)callPosition).withCallATM(callATM)+      .withCallPayoffs(std::vector<Rate>(callPayoffs, callPayoffs + callPayoffsLen))+      .withPutStrikes(std::vector<Rate>(putStrikes, putStrikes + putStrikesLen)).withLongPutOption((Position::Type)putPosition)+      .withPutATM(putATM).withPutPayoffs(std::vector<Rate>(putPayoffs, putPayoffs + putPayoffsLen))+      .withReplication(replication ? *arg(replication) : shared_ptr<DigitalReplication>()).withNakedOption(nakedOption);+    return ret(new Leg(builder));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlDigitalIborLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, QlError **e) { QlCallScope callbackScope(e);+  try {DigitalIborLeg builder(*arg(schedule), *arg(index));+    builder.withNotionals(std::vector<Real>(notionals, notionals + notionalsLen)).withPaymentDayCounter(*arg(paymentDayCounter)).withPaymentAdjustment((BusinessDayConvention)paymentAdjustment)+      .withFixingDays(std::vector<Natural>(fixingDays, fixingDays + fixingDaysLen)).withGearings(std::vector<Real>(gearings, gearings + gearingsLen)).withSpreads(std::vector<Spread>(spreads, spreads + spreadsLen)).inArrears(inArrears)+      .withCallStrikes(std::vector<Rate>(callStrikes, callStrikes + callStrikesLen)).withLongCallOption((Position::Type)callPosition).withCallATM(callATM).withCallPayoffs(std::vector<Rate>(callPayoffs, callPayoffs + callPayoffsLen))+      .withPutStrikes(std::vector<Rate>(putStrikes, putStrikes + putStrikesLen)).withLongPutOption((Position::Type)putPosition).withPutATM(putATM).withPutPayoffs(std::vector<Rate>(putPayoffs, putPayoffs + putPayoffsLen)).withReplication(replication ? *arg(replication) : shared_ptr<DigitalReplication>()).withNakedOption(nakedOption);+    return ret(new Leg(builder));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+Leg* qlMultipleResetsLeg(Schedule* schedule, QlIborIndex* index, unsigned resetsPerCoupon, unsigned notionalsLen, double* notionals, DayCounter* dc, int adjustment, Calendar* calendar, int lag, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned couponSpreadsLen, double* couponSpreads, unsigned rateSpreadsLen, double* rateSpreads, int exLen, int exUnit, Calendar* exCalendar, int exConvention, int exEom, int averaging, QlError **e) { QlCallScope callbackScope(e);+  try {MultipleResetsLeg builder(*arg(schedule), *arg(index), resetsPerCoupon);+    builder.withNotionals(std::vector<Real>(notionals, notionals + notionalsLen)).withPaymentDayCounter(*arg(dc)).withPaymentAdjustment((BusinessDayConvention)adjustment).withPaymentCalendar(*arg(calendar)).withPaymentLag(lag)+      .withFixingDays(std::vector<Natural>(fixingDays, fixingDays + fixingDaysLen)).withGearings(std::vector<Real>(gearings, gearings + gearingsLen)).withCouponSpreads(std::vector<Spread>(couponSpreads, couponSpreads + couponSpreadsLen)).withRateSpreads(std::vector<Spread>(rateSpreads, rateSpreads + rateSpreadsLen))+      .withExCouponPeriod(Period(exLen, (TimeUnit)exUnit), *arg(exCalendar), (BusinessDayConvention)exConvention, exEom).withAveragingMethod((RateAveraging::Type)averaging);+    return ret(new Leg(builder));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}++void qlFreeVarianceSwap(QlVarianceSwap *o) {del(o);}+QlInstrument* qlVarianceSwapAsInstrument(QlVarianceSwap *o) {return ret(new QlInstrument(*arg(o)));}+QlVarianceSwap* qlVarianceSwap(int position, double strike, double notional, int startDate, int maturityDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlVarianceSwap(alloc(new VarianceSwap((Position::Type)position, strike, notional, Date(startDate), Date(maturityDate)))));+  } catch (std::exception& er) {return handleException<QlVarianceSwap*>(e, er);}}+double qlVarianceSwapVariance(QlVarianceSwap* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->variance();} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeVarianceOption(QlVarianceOption *o) {del(o);}+QlInstrument* qlVarianceOptionAsInstrument(QlVarianceOption *o) {return ret(new QlInstrument(*arg(o)));}+QlVarianceOption* qlVarianceOption(QlPayoff* payoff, double notional, int startDate, int maturityDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlVarianceOption(alloc(new VarianceOption(*arg(payoff), notional, Date(startDate), Date(maturityDate)))));+  } catch (std::exception& er) {return handleException<QlVarianceOption*>(e, er);}}++// Commodity and EnergyCommodity are abstract binding roots reached through their concrete leaves.+// Their constructor-echo getters are intentionally not bound.+void qlFreeCommodity(QlCommodity *o) {del(o);}+QlInstrument* qlCommodityAsInstrument(QlCommodity *o) {return ret(new QlInstrument(*arg(o)));}+void qlFreeEnergyCommodity(QlEnergyCommodity *o) {del(o);}+QlCommodity* qlEnergyCommodityAsCommodity(QlEnergyCommodity *o) {return ret(new QlCommodity(*arg(o)));}++/* Commodity base-level operations shared by every leaf. */+void qlCommodityAddPricingError(QlCommodity *o, int level, char *error, char *detail) {+  (*arg(o))->addPricingError((PricingError::Level)level, arg(error), arg(detail));+}++void qlCommoditySecondaryCostAmounts(QlCommodity *o, unsigned *len, char ***keys,+    unsigned *len2, double **amounts, unsigned *len3, Currency ***currencies, QlError **e) { QlCallScope callbackScope(e);+  OutStringArrayResult keyResult(len, keys);+  OutArrayResult<double> amountResult(len2, amounts);+  OutPtrArrayResult<Currency> currencyResult(len3, currencies);+  try {+    const SecondaryCostAmounts &m = (*arg(o))->secondaryCostAmounts();+    const unsigned n = (unsigned)m.size();+    char **ks = keyResult.allocate(n);+    double *am = amountResult.allocate(n);+    Currency **cs = currencyResult.allocate(n);+    unsigned i = 0;+    for (SecondaryCostAmounts::const_iterator it = m.begin(); it != m.end(); ++it, ++i) {+      ks[i] = tracedup(it->first.c_str());+      am[i] = it->second.value();+      cs[i] = ret(new Currency(it->second.currency()));+    }+    keyResult.commit(); amountResult.commit(); currencyResult.commit();+  } catch (std::exception& er) {handleException<int>(e, er);}+}++void qlCommodityPricingErrors(QlCommodity *o, unsigned *len, int **levels,+    unsigned *len2, char ***errors, unsigned *len3, char ***details, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> levelResult(len, levels);+  OutStringArrayResult errorResult(len2, errors);+  OutStringArrayResult detailResult(len3, details);+  try {+    const PricingErrors &errs = (*arg(o))->pricingErrors();+    const unsigned n = (unsigned)errs.size();+    int *lv = levelResult.allocate(n);+    char **errs2 = errorResult.allocate(n);+    char **dets = detailResult.allocate(n);+    for (unsigned i = 0; i < n; ++i) {+      lv[i] = errs[i].errorLevel;+      errs2[i] = tracedup(errs[i].error.c_str());+      dets[i] = tracedup(errs[i].detail.c_str());+    }+    levelResult.commit(); errorResult.commit(); detailResult.commit();+  } catch (std::exception& er) {handleException<int>(e, er);}+}++/* EnergyCommodity -- quantity() is pure virtual upstream; one shim, dispatched virtually, covers+   every leaf (EnergyFuture's own override is a plain echo of its constructor argument, but+   EnergySwap's is a real computed sum -- see energyswap.cpp). */+double qlEnergyCommodityQuantity(QlEnergyCommodity *o, CommodityType **outCt, UnitOfMeasure **outUom, QlError **e) { QlCallScope callbackScope(e);+  *outCt = 0; *outUom = 0;+  try {+    Quantity q = (*arg(o))->quantity();+    // unique_ptr until both allocations have succeeded, so a throw from the second one releases+    // the first without any cleanup in the catch -- and ret() runs only on the pointers actually+    // handed out, so nothing half-built is ever traced as returned.+    std::unique_ptr<CommodityType> ct(new CommodityType(q.commodityType()));+    std::unique_ptr<UnitOfMeasure> uom(new UnitOfMeasure(q.unitOfMeasure()));+    *outCt = ret(ct.release());+    *outUom = ret(uom.release());+    return q.amount();+  } catch (std::exception& er) {+    return handleException<double>(e, er);+  }+}++/* tradePrice()/index() are constructor echoes and intentionally not bound. quantity() is exposed+   once through the EnergyCommodity base. */+void qlFreeEnergyFuture(QlEnergyFuture *o) {del(o);}+QlEnergyCommodity* qlEnergyFutureAsEnergyCommodity(QlEnergyFuture *o) {return ret(new QlEnergyCommodity(*arg(o)));}+QlEnergyFuture* qlEnergyFuture(int buySell,+    CommodityType *qCt, UnitOfMeasure *qUom, double qAmount,+    double tpAmount, Currency *tpCcy, UnitOfMeasure *tpUom,+    QlCommodityIndex *index, CommodityType *commodityType,+    unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,+    unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,+    QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlEnergyFuture(alloc(new EnergyFuture(+        buySell,+        Quantity(*arg(qCt), *arg(qUom), qAmount),+        CommodityUnitCost(Money(*arg(tpCcy), tpAmount), *arg(tpUom)),+        *arg(index),+        *arg(commodityType),+        qlBuildSecondaryCosts(scLen, scKeys, scIsUnitCost, scAmounts, scCurrencies, scUoms)))));+  } catch (std::exception& er) {return handleException<QlEnergyFuture*>(e, er);}}++/* EnergySwap -- binds no constructor (falls through to Instrument's null-engine QL_REQUIRE, see+   qlaux.h); calendar/payCurrency/receiveCurrency/pricingPeriods/commodityType are all plain,+   never-mutated echoes of (or, for commodityType/quantity, pure functions of) each leaf's own+   constructor arguments -- not bound. dailyPositions/paymentCashFlows are genuinely computed+   during performCalculations, so those are the two worth binding, generalized over both leaves. */+void qlFreeEnergySwap(QlEnergySwap *o) {del(o);}+QlEnergyCommodity* qlEnergySwapAsEnergyCommodity(QlEnergySwap *o) {return ret(new QlEnergyCommodity(*arg(o)));}++void qlEnergySwapDailyPositions(QlEnergySwap *o, unsigned *len, int **dates,+    unsigned *len2, double **quantityAmounts, unsigned *len3, double **payLegPrices,+    unsigned *len4, double **receiveLegPrices, unsigned *len5, double **riskDeltas,+    unsigned *len6, int **unrealized, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> dateResult(len, dates), unrealizedResult(len6, unrealized);+  OutArrayResult<double> quantityResult(len2, quantityAmounts), payResult(len3, payLegPrices),+      receiveResult(len4, receiveLegPrices), deltaResult(len5, riskDeltas);+  try {+    const EnergyDailyPositions &m = (*arg(o))->dailyPositions();+    const unsigned n = (unsigned)m.size();+    int *ds = dateResult.allocate(n), *ur = unrealizedResult.allocate(n);+    double *qa = quantityResult.allocate(n), *plp = payResult.allocate(n),+           *rlp = receiveResult.allocate(n), *rd = deltaResult.allocate(n);+    unsigned i = 0;+    for (EnergyDailyPositions::const_iterator it = m.begin(); it != m.end(); ++it, ++i) {+      ds[i] = it->first.serialNumber();+      qa[i] = it->second.quantityAmount;+      plp[i] = it->second.payLegPrice;+      rlp[i] = it->second.receiveLegPrice;+      rd[i] = it->second.riskDelta;+      ur[i] = it->second.unrealized;+    }+    dateResult.commit(); quantityResult.commit(); payResult.commit();+    receiveResult.commit(); deltaResult.commit(); unrealizedResult.commit();+  } catch (std::exception& er) {handleException<int>(e, er);}+}++void qlEnergySwapPaymentCashFlows(QlEnergySwap *o, unsigned *len, QlCommodityCashFlow ***out, QlError **e) { QlCallScope callbackScope(e);+  OutPtrArrayResult<QlCommodityCashFlow> result(len, out);+  try {+    const CommodityCashFlows &m = (*arg(o))->paymentCashFlows();+    QlCommodityCashFlow **cs = result.allocate((unsigned)m.size());+    unsigned i = 0;+    for (CommodityCashFlows::const_iterator it = m.begin(); it != m.end(); ++it, ++i)+      cs[i] = ret(new QlCommodityCashFlow(alloc(it->second)));+    result.commit();+  } catch (std::exception& er) {handleException<int>(e, er);}+}++/* EnergyVanillaSwap -- payReceive()/fixedPrice()/fixedPriceUnitOfMeasure()/index() are all plain,+   never-mutated echoes of this constructor's own arguments -- not bound (payReceive_ is a trivial+   `payer ? 1 : 0` of the ctor's own bool, reproducible in Haskell with no C++ call at all). */+void qlFreeEnergyVanillaSwap(QlEnergyVanillaSwap *o) {del(o);}+QlEnergySwap* qlEnergyVanillaSwapAsEnergySwap(QlEnergyVanillaSwap *o) {return ret(new QlEnergySwap(*arg(o)));}+QlEnergyVanillaSwap* qlEnergyVanillaSwap(int payer, Calendar *calendar,+    double fixedPriceAmount, Currency *fixedPriceCurrency, UnitOfMeasure *fixedPriceUnitOfMeasure,+    QlCommodityIndex *index, Currency *payCurrency, Currency *receiveCurrency,+    unsigned ppLen, int *ppStartDates, unsigned, int *ppEndDates, unsigned, int *ppPaymentDates,+    unsigned, CommodityType **ppTypes, unsigned, UnitOfMeasure **ppUoms, unsigned, double *ppAmounts,+    CommodityType *commodityType,+    unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,+    unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,+    QlYieldTermStructure *payLegTS, QlYieldTermStructure *receiveLegTS, QlYieldTermStructure *discountTS,+    QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlEnergyVanillaSwap(alloc(new EnergyVanillaSwap(+        payer,+        *arg(calendar),+        Money(*arg(fixedPriceCurrency), fixedPriceAmount),+        *arg(fixedPriceUnitOfMeasure),+        *arg(index),+        *arg(payCurrency),+        *arg(receiveCurrency),+        qlPricingPeriodVector(ppLen, ppStartDates, ppEndDates, ppPaymentDates, ppTypes, ppUoms, ppAmounts),+        *arg(commodityType),+        qlBuildSecondaryCosts(scLen, scKeys, scIsUnitCost, scAmounts, scCurrencies, scUoms),+        *arg(payLegTS), *arg(receiveLegTS), *arg(discountTS)))));+  } catch (std::exception& er) {return handleException<QlEnergyVanillaSwap*>(e, er);}}++/* EnergyBasisSwap -- payIndex()/receiveIndex()/basis() are likewise plain constructor-argument+   echoes -- not bound. */+void qlFreeEnergyBasisSwap(QlEnergyBasisSwap *o) {del(o);}+QlEnergySwap* qlEnergyBasisSwapAsEnergySwap(QlEnergyBasisSwap *o) {return ret(new QlEnergySwap(*arg(o)));}+QlEnergyBasisSwap* qlEnergyBasisSwap(Calendar *calendar,+    QlCommodityIndex *spreadIndex, QlCommodityIndex *payIndex, QlCommodityIndex *receiveIndex,+    int spreadToPayLeg, Currency *payCurrency, Currency *receiveCurrency,+    unsigned ppLen, int *ppStartDates, unsigned, int *ppEndDates, unsigned, int *ppPaymentDates,+    unsigned, CommodityType **ppTypes, unsigned, UnitOfMeasure **ppUoms, unsigned, double *ppAmounts,+    double basisAmount, Currency *basisCurrency, UnitOfMeasure *basisUnitOfMeasure,+    CommodityType *commodityType,+    unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,+    unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,+    QlYieldTermStructure *payLegTS, QlYieldTermStructure *receiveLegTS, QlYieldTermStructure *discountTS,+    QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlEnergyBasisSwap(alloc(new EnergyBasisSwap(+        *arg(calendar),+        *arg(spreadIndex), *arg(payIndex), *arg(receiveIndex),+        spreadToPayLeg,+        *arg(payCurrency), *arg(receiveCurrency),+        qlPricingPeriodVector(ppLen, ppStartDates, ppEndDates, ppPaymentDates, ppTypes, ppUoms, ppAmounts),+        CommodityUnitCost(Money(*arg(basisCurrency), basisAmount), *arg(basisUnitOfMeasure)),+        *arg(commodityType),+        qlBuildSecondaryCosts(scLen, scKeys, scIsUnitCost, scAmounts, scCurrencies, scUoms),+        *arg(payLegTS), *arg(receiveLegTS), *arg(discountTS)))));+  } catch (std::exception& er) {return handleException<QlEnergyBasisSwap*>(e, er);}}++/* CommodityCashFlow -- a standalone CashFlow leaf, never Haskell-constructed (only ever produced+   by EnergySwap::paymentCashFlows() above). The upstream field reads themselves can't throw, but+   each shim also does `ret(new Currency(...))`, which is a bad_alloc-only throw point -- QlError **e+   guards that, not the upstream call. */+void qlFreeCommodityCashFlow(QlCommodityCashFlow *o) {del(o);}+QlCashFlow *qlCommodityCashFlowAsCashFlow(QlCommodityCashFlow *o) {return ret(new QlCashFlow(*arg(o)));}+double qlCommodityCashFlowDiscountedAmount(QlCommodityCashFlow *o, Currency **outCcy, QlError **e) { QlCallScope callbackScope(e);+  *outCcy = 0;+  try {+    const Money &m = (*arg(o))->discountedAmount();+    *outCcy = ret(new Currency(m.currency()));+    return m.value();+  } catch (std::exception& er) {return handleException<double>(e, er);}+}+double qlCommodityCashFlowUndiscountedAmount(QlCommodityCashFlow *o, Currency **outCcy, QlError **e) { QlCallScope callbackScope(e);+  *outCcy = 0;+  try {+    const Money &m = (*arg(o))->undiscountedAmount();+    *outCcy = ret(new Currency(m.currency()));+    return m.value();+  } catch (std::exception& er) {return handleException<double>(e, er);}+}+double qlCommodityCashFlowDiscountedPaymentAmount(QlCommodityCashFlow *o, Currency **outCcy, QlError **e) { QlCallScope callbackScope(e);+  *outCcy = 0;+  try {+    const Money &m = (*arg(o))->discountedPaymentAmount();+    *outCcy = ret(new Currency(m.currency()));+    return m.value();+  } catch (std::exception& er) {return handleException<double>(e, er);}+}+double qlCommodityCashFlowUndiscountedPaymentAmount(QlCommodityCashFlow *o, Currency **outCcy, QlError **e) { QlCallScope callbackScope(e);+  *outCcy = 0;+  try {+    const Money &m = (*arg(o))->undiscountedPaymentAmount();+    *outCcy = ret(new Currency(m.currency()));+    return m.value();+  } catch (std::exception& er) {return handleException<double>(e, er);}+}+double qlCommodityCashFlowDiscountFactor(QlCommodityCashFlow *o) {return (*arg(o))->discountFactor();}+double qlCommodityCashFlowPaymentDiscountFactor(QlCommodityCashFlow *o) {return (*arg(o))->paymentDiscountFactor();}+int qlCommodityCashFlowFinalized(QlCommodityCashFlow *o) {return (*arg(o))->finalized();}++/* The other CommodityPricingHelper static methods duplicate conversion APIs already bound. */+void qlCreatePricingPeriods(int startDate, int endDate, CommodityType *qCt, UnitOfMeasure *qUom, double qAmount,+    int deliverySchedule, int qtyPeriodicity, PaymentTerm *paymentTerm,+    unsigned *len, int **ppStartDates, unsigned *len2, int **ppEndDates, unsigned *len3, int **ppPaymentDates,+    unsigned *len4, CommodityType ***ppTypes, unsigned *len5, UnitOfMeasure ***ppUoms, unsigned *len6, double **ppAmounts,+    QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> startResult(len, ppStartDates), endResult(len2, ppEndDates), payResult(len3, ppPaymentDates);+  OutPtrArrayResult<CommodityType> typeResult(len4, ppTypes);+  OutPtrArrayResult<UnitOfMeasure> uomResult(len5, ppUoms);+  OutArrayResult<double> amountResult(len6, ppAmounts);+  try {+    PricingPeriods pps;+    CommodityPricingHelper::createPricingPeriods(Date(startDate), Date(endDate),+        Quantity(*arg(qCt), *arg(qUom), qAmount),+        (EnergyCommodity::DeliverySchedule)deliverySchedule,+        (EnergyCommodity::QuantityPeriodicity)qtyPeriodicity,+        *arg(paymentTerm), pps);+    const unsigned n = (unsigned)pps.size();+    int *starts = startResult.allocate(n), *ends = endResult.allocate(n), *pays = payResult.allocate(n);+    double *amounts = amountResult.allocate(n);+    CommodityType **types = typeResult.allocate(n);+    UnitOfMeasure **uoms = uomResult.allocate(n);+    for (unsigned i = 0; i < n; ++i) {+      starts[i] = pps[i]->startDate().serialNumber();+      ends[i] = pps[i]->endDate().serialNumber();+      pays[i] = pps[i]->paymentDate().serialNumber();+      types[i] = ret(new CommodityType(pps[i]->quantity().commodityType()));+      uoms[i] = ret(new UnitOfMeasure(pps[i]->quantity().unitOfMeasure()));+      amounts[i] = pps[i]->quantity().amount();+    }+    startResult.commit(); endResult.commit(); payResult.commit();+    typeResult.commit(); uomResult.commit(); amountResult.commit();+  } catch (std::exception& er) {handleException<int>(e, er);}+}++void qlFreeYoYInflationCapFloor(QlYoYInflationCapFloor *o) {del(o);}+QlInstrument *qlYoYInflationCapFloorAsInstrument(QlYoYInflationCapFloor *o) {return ret(new QlInstrument(*arg(o)));}++QlYoYInflationCapFloor *qlYoYInflationCap(Leg *yoyLeg, unsigned exerciseRatesLen, double *exerciseRates, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationCapFloor(alloc(new YoYInflationCapFloor(YoYInflationCapFloor::Cap, *arg(yoyLeg),+      std::vector<double>(exerciseRates, exerciseRates+exerciseRatesLen), std::vector<double>()))));+  } catch (std::exception& er) {return handleException<QlYoYInflationCapFloor*>(e, er);}}++QlYoYInflationCapFloor *qlYoYInflationFloor(Leg *yoyLeg, unsigned exerciseRatesLen, double *exerciseRates, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationCapFloor(alloc(new YoYInflationCapFloor(YoYInflationCapFloor::Floor, *arg(yoyLeg),+      std::vector<double>(), std::vector<double>(exerciseRates, exerciseRates+exerciseRatesLen)))));+  } catch (std::exception& er) {return handleException<QlYoYInflationCapFloor*>(e, er);}}++QlYoYInflationCapFloor *qlYoYInflationCollar(Leg *yoyLeg, unsigned capRatesLen, double *capRates,+    unsigned floorRatesLen, double *floorRates, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationCapFloor(alloc(new YoYInflationCapFloor(YoYInflationCapFloor::Collar, *arg(yoyLeg),+      std::vector<double>(capRates, capRates+capRatesLen), std::vector<double>(floorRates, floorRates+floorRatesLen)))));+  } catch (std::exception& er) {return handleException<QlYoYInflationCapFloor*>(e, er);}}++// atmRate takes a plain YieldTermStructure& (not a Handle), same reasoning as qlCapFloorAtmRate.+double qlYoYInflationCapFloorAtmRate(QlYoYInflationCapFloor *o, QlYieldTermStructure *discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmRate(handleRef(arg(discountCurve)));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++QlYoYInflationCapFloor *qlYoYInflationCapFloorOptionlet(QlYoYInflationCapFloor *o, unsigned n, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationCapFloor(alloc((*arg(o))->optionlet(n))));+  } catch (std::exception& er) {return handleException<QlYoYInflationCapFloor*>(e, er);}}++void qlFreeCPICapFloor(QlCPICapFloor *o) {del(o);}+QlInstrument *qlCPICapFloorAsInstrument(QlCPICapFloor *o) {return ret(new QlInstrument(*arg(o)));}++QlCPICapFloor *qlCPICapFloor(int type, double nominal, int startDate, double baseCPI, int maturity,+    Calendar *fixCalendar, int fixConvention, Calendar *payCalendar, int payConvention, double strike,+    QlZeroInflationIndex *index, int observationLagLen, int observationLagUnit, int observationInterpolation,+    QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCPICapFloor(alloc(new CPICapFloor((Option::Type)type, nominal, Date(startDate), baseCPI,+      Date(maturity), *arg(fixCalendar), (BusinessDayConvention)fixConvention, *arg(payCalendar),+      (BusinessDayConvention)payConvention, strike, *arg(index),+      Period(observationLagLen, (TimeUnit)observationLagUnit), (CPI::InterpolationType)observationInterpolation))));+  } catch (std::exception& er) {return handleException<QlCPICapFloor*>(e, er);}}++DefaultProbKey* qlNorthAmericaCorpDefaultKey(Currency* currency, int seniority, int graceFailureToPayLen, int graceFailureToPayUnit, double amountFailure, int restructuringType, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new DefaultProbKey(NorthAmericaCorpDefaultKey(*arg(currency), (Seniority)seniority,+      Period(graceFailureToPayLen, (TimeUnit)graceFailureToPayUnit), amountFailure, (Restructuring::Type)restructuringType)));+  } catch (std::exception& er) {return handleException<DefaultProbKey*>(e, er);}}+void qlFreeDefaultProbKey(DefaultProbKey *o) {del(o);}++Issuer* qlIssuer(unsigned probabilitiesLen, DefaultProbKey** keys, QlDefaultProbabilityTermStructure** curves, QlError **e) { QlCallScope callbackScope(e);+  try {+    std::vector<Issuer::key_curve_pair> probs;+    probs.reserve(probabilitiesLen);+    for (unsigned i = 0; i < probabilitiesLen; ++i)+      probs.emplace_back(*keys[i], Handle<DefaultProbabilityTermStructure>(*curves[i]));+    return ret(new Issuer(probs));+  } catch (std::exception& er) {return handleException<Issuer*>(e, er);}}+void qlFreeIssuer(Issuer *o) {del(o);}++QlPool* qlPool(unsigned namesLen, char** names, Issuer** issuers, DefaultProbKey** keys, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto p = allocShared(new Pool());+    for (unsigned i = 0; i < namesLen; ++i) p->add(names[i], *issuers[i], *keys[i]);+    return ret(new QlPool(p));+  } catch (std::exception& er) {return handleException<QlPool*>(e, er);}}+void qlFreePool(QlPool *o) {del(o);}++QlBasket* qlBasket(int refDate, unsigned namesLen, char** names, double* notionals, QlPool* pool, double attachmentRatio, double detachmentRatio, QlClaim* claim, QlDefaultLossModel* lossModel, QlError **e) { QlCallScope callbackScope(e);+  try {+    std::vector<std::string> nm(names, names + namesLen);+    auto b = allocShared(new Basket(Date(refDate), nm, std::vector<double>(notionals, notionals + namesLen),+        *arg(pool), attachmentRatio, detachmentRatio, *arg(claim)));+    b->setLossModel(*arg(lossModel));+    return ret(new QlBasket(b));+  } catch (std::exception& er) {return handleException<QlBasket*>(e, er);}}+void qlFreeBasket(QlBasket *o) {del(o);}+double qlBasketNotional(QlBasket* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->notional();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBasketExpectedTrancheLoss(QlBasket* o, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->expectedTrancheLoss(Date(d));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++QlBasket* qlDigitalBasket(int refDate, unsigned namesLen, char** names, double* notionals, QlPool* pool, double attachmentRatio, double detachmentRatio, QlClaim* claim, QlDefaultLossModel* lossModel, QlError **e) { QlCallScope callbackScope(e);+  return qlBasket(refDate, namesLen, names, notionals, pool, attachmentRatio, detachmentRatio, claim, lossModel, e);+}++double qlBasketRemainingNotional(QlBasket* o, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->remainingNotional(Date(d));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBasketRecoveryRate(QlBasket* o, int d, unsigned iName, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->recoveryRate(Date(d), iName);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++double qlBasketProbOverLoss(QlBasket* o, int d, double lossFraction, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->probOverLoss(Date(d), lossFraction);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBasketPercentile(QlBasket* o, int d, double prob, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->percentile(Date(d), prob);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBasketExpectedShortfall(QlBasket* o, int d, double prob, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->expectedShortfall(Date(d), prob);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++double qlBasketDefaultCorrelation(QlBasket* o, int d, unsigned iName, unsigned jName, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->defaultCorrelation(Date(d), iName, jName);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBasketProbAtLeastNEvents(QlBasket* o, unsigned n, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->probAtLeastNEvents(n, Date(d));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++QlDefaultLossModel* qlGaussianLHPLossModel(QlQuote* correlQuote, unsigned recoveriesLen, double* recoveries, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDefaultLossModel(shared_ptr<DefaultLossModel>(allocAs<DefaultLossModel>(+      new GaussianLHPLossModel(*arg(correlQuote), std::vector<double>(recoveries, recoveries + recoveriesLen))))));+  } catch (std::exception& er) {return handleException<QlDefaultLossModel*>(e, er);}}+void qlFreeDefaultLossModel(QlDefaultLossModel *o) {del(o);}++QlSyntheticCDO* qlSyntheticCDO(QlBasket* basket, int side, Schedule* schedule, double upfrontRate, double runningRate, DayCounter* dayCounter, int paymentConvention, int haveNotional, double notional, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSyntheticCDO(alloc(new SyntheticCDO(*arg(basket), (Protection::Side)side, *arg(schedule), upfrontRate, runningRate,+      *arg(dayCounter), (BusinessDayConvention)paymentConvention, haveNotional ? optional<Real>(notional) : nullopt))));+  } catch (std::exception& er) {return handleException<QlSyntheticCDO*>(e, er);}}+void qlFreeSyntheticCDO(QlSyntheticCDO *o) {del(o);}+QlInstrument* qlSyntheticCDOAsInstrument(QlSyntheticCDO *o) {return ret(new QlInstrument(*arg(o)));}+double qlSyntheticCDOFairPremium(QlSyntheticCDO* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->fairPremium();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSyntheticCDOFairUpfrontPremium(QlSyntheticCDO* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->fairUpfrontPremium();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSyntheticCDOPremiumValue(QlSyntheticCDO* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->premiumValue();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSyntheticCDOProtectionValue(QlSyntheticCDO* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->protectionValue();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSyntheticCDOPremiumLegNPV(QlSyntheticCDO* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->premiumLegNPV();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSyntheticCDOProtectionLegNPV(QlSyntheticCDO* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->protectionLegNPV();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSyntheticCDORemainingNotional(QlSyntheticCDO* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->remainingNotional();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSyntheticCDOImplicitCorrelation(QlSyntheticCDO* o, unsigned recoveriesLen, double* recoveries, QlYieldTermStructure* discountCurve, double targetNPV, double accuracy, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->implicitCorrelation(std::vector<double>(recoveries, recoveries + recoveriesLen), *arg(discountCurve), targetNPV, accuracy);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++QlDefaultLossModel* qlConstantLossModel(QlQuote* correlQuote, unsigned recoveriesLen, double* recoveries, int integralType, unsigned tOrdersLen, int* tOrders, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDefaultLossModel(alloc(qlConstantLossModelAux(*arg(correlQuote),+      std::vector<double>(recoveries, recoveries + recoveriesLen),+      (LatentModelIntegrationType::LatentModelIntegrationType)integralType, recoveriesLen,+      std::vector<Integer>(tOrders, tOrders + tOrdersLen)))));+  } catch (std::exception& er) {return handleException<QlDefaultLossModel*>(e, er);}}++QlNthToDefault* qlNthToDefault(QlBasket* basket, unsigned n, int side, Schedule* premiumSchedule, double upfrontRate, double premiumRate, DayCounter* dayCounter, double nominal, int settlePremiumAccrual, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlNthToDefault(alloc(new NthToDefault(*arg(basket), n, (Protection::Side)side,+      *arg(premiumSchedule), upfrontRate, premiumRate, *arg(dayCounter), nominal, settlePremiumAccrual != 0))));+  } catch (std::exception& er) {return handleException<QlNthToDefault*>(e, er);}}+void qlFreeNthToDefault(QlNthToDefault *o) {del(o);}+QlInstrument* qlNthToDefaultAsInstrument(QlNthToDefault *o) {return ret(new QlInstrument(*arg(o)));}+double qlNthToDefaultFairPremium(QlNthToDefault* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->fairPremium();+  } catch (std::exception& er) {return handleException<double>(e, er);}}++QlRendistatoBasket *qlRendistatoBasket(unsigned btpsLen, QlBTP **btps, unsigned outstandingsLen, double *outstandings, unsigned quotesLen, QlQuote **cleanPriceQuotes, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRendistatoBasket(alloc(new RendistatoBasket(qlVector(btps, btpsLen),+      std::vector<double>(outstandings, outstandings+outstandingsLen), qlHandleVector(cleanPriceQuotes, quotesLen)))));+  } catch (std::exception& er) {return handleException<QlRendistatoBasket*>(e, er);}}+void qlFreeRendistatoBasket(QlRendistatoBasket *o) {del(o);}++QlRendistatoCalculator *qlRendistatoCalculator(QlRendistatoBasket *basket, int euriborTenorLen, int euriborTenorUnit,+    QlYieldTermStructure *euriborForwardCurve, QlYieldTermStructure *discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto idx = ext::make_shared<Euribor>(Period(euriborTenorLen, (TimeUnit)euriborTenorUnit), qlNullableHandle(euriborForwardCurve));+    return ret(new QlRendistatoCalculator(alloc(new RendistatoCalculator(*arg(basket), idx, *arg(discountCurve)))));+  } catch (std::exception& er) {return handleException<QlRendistatoCalculator*>(e, er);}}+void qlFreeRendistatoCalculator(QlRendistatoCalculator *o) {del(o);}+double qlRendistatoCalculatorYield(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->yield();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlRendistatoCalculatorDuration(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->duration();+  } catch (std::exception& er) {return handleException<double>(e, er);}}++void qlRendistatoCalculatorYields(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  *len = 0; *out = 0;+  try {copyRealVector((*arg(o))->yields(), len, out);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+void qlRendistatoCalculatorDurations(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  *len = 0; *out = 0;+  try {copyRealVector((*arg(o))->durations(), len, out);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+void qlRendistatoCalculatorSwapLengths(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  *len = 0; *out = 0;+  try {copyRealVector((*arg(o))->swapLengths(), len, out);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+void qlRendistatoCalculatorSwapRates(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  *len = 0; *out = 0;+  try {copyRealVector((*arg(o))->swapRates(), len, out);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+void qlRendistatoCalculatorSwapYields(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  *len = 0; *out = 0;+  try {copyRealVector((*arg(o))->swapYields(), len, out);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+void qlRendistatoCalculatorSwapDurations(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  *len = 0; *out = 0;+  try {copyRealVector((*arg(o))->swapDurations(), len, out);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+QlVanillaSwap *qlRendistatoCalculatorEquivalentSwap(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlVanillaSwap((*arg(o))->equivalentSwap()));+  } catch (std::exception& er) {return handleException<QlVanillaSwap*>(e, er);}}+double qlRendistatoCalculatorEquivalentSwapRate(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->equivalentSwapRate();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlRendistatoCalculatorEquivalentSwapYield(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->equivalentSwapYield();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlRendistatoCalculatorEquivalentSwapDuration(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->equivalentSwapDuration();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlRendistatoCalculatorEquivalentSwapLength(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->equivalentSwapLength();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlRendistatoCalculatorEquivalentSwapSpread(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->equivalentSwapSpread();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlQuote *qlRendistatoEquivalentSwapLengthQuote(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new RendistatoEquivalentSwapLengthQuote(*arg(o))))));+  } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}+QlQuote *qlRendistatoEquivalentSwapSpreadQuote(QlRendistatoCalculator *o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new RendistatoEquivalentSwapSpreadQuote(*arg(o))))));+  } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}++QlFixedVsFloatingSwap* qlSwaptionUnderlying(QlSwaption* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFixedVsFloatingSwap((*arg(o))->underlying()));}+  catch (std::exception& er) {return handleException<QlFixedVsFloatingSwap*>(e, er);}}+QlNonstandardSwap* qlNonstandardSwaptionUnderlyingSwap(QlNonstandardSwaption* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlNonstandardSwap((*arg(o))->underlyingSwap()));}+  catch (std::exception& er) {return handleException<QlNonstandardSwap*>(e, er);}}+QlFloatFloatSwap* qlFloatFloatSwaptionUnderlyingSwap(QlFloatFloatSwaption* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFloatFloatSwap((*arg(o))->underlyingSwap()));}+  catch (std::exception& er) {return handleException<QlFloatFloatSwap*>(e, er);}}+QlIrregularSwap* qlIrregularSwaptionUnderlyingSwap(QlIrregularSwaption* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlIrregularSwap((*arg(o))->underlyingSwap()));}+  catch (std::exception& er) {return handleException<QlIrregularSwap*>(e, er);}}+QlCreditDefaultSwap* qlCdsOptionUnderlyingSwap(QlCdsOption* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCreditDefaultSwap((*arg(o))->underlyingSwap()));}+  catch (std::exception& er) {return handleException<QlCreditDefaultSwap*>(e, er);}}++void qlFreeMtMCrossCurrencyBasisSwap(QlMtMCrossCurrencyBasisSwap* o) {del(o);}+QlSwap* qlMtMCrossCurrencyBasisSwapAsSwap(QlMtMCrossCurrencyBasisSwap* o) {+#if QL_HEX_VERSION >= 0x01440000+  return ret(new QlSwap(*arg(o)));+#else+  (void)o; return nullptr;+#endif+}+QlMtMCrossCurrencyBasisSwap* qlMtMCrossCurrencyBasisSwap(int type, double fxBaseNominal, Currency* fxBaseCurrency, Schedule* fxBaseSchedule, QlIborIndex* fxBaseIndex, double fxBaseSpread, double fxBaseGearing, double fxQuoteNominal, Currency* fxQuoteCurrency, Schedule* fxQuoteSchedule, QlIborIndex* fxQuoteIndex, double fxQuoteSpread, double fxQuoteGearing, int resetBase, unsigned fxResetFixingDays, Calendar* fxResetFixingCalendar, int fxBasePaymentLag, int fxQuotePaymentLag, int fxBasePaymentConvention, int fxQuotePaymentConvention, int fxBaseCompoundSpread, unsigned fxBaseLookbackDays, int fxBaseObservationShift, unsigned fxBaseLockoutDays, int fxBaseAveragingMethod, int fxQuoteCompoundSpread, unsigned fxQuoteLookbackDays, int fxQuoteObservationShift, unsigned fxQuoteLockoutDays, int fxQuoteAveragingMethod, int telescopicValueDates, int useIndexedCoupons, QlStubIndexSelection* fxBaseStubIndexSelection, QlStubIndexSelection* fxQuoteStubIndexSelection, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlMtMCrossCurrencyBasisSwap(alloc(new MtMCrossCurrencyBasisSwap((MtMCrossCurrencyBasisSwap::Type)type, fxBaseNominal, *arg(fxBaseCurrency), *arg(fxBaseSchedule), *arg(fxBaseIndex), fxBaseSpread, fxBaseGearing, fxQuoteNominal, *arg(fxQuoteCurrency), *arg(fxQuoteSchedule), *arg(fxQuoteIndex), fxQuoteSpread, fxQuoteGearing, resetBase, fxResetFixingDays, fxResetFixingCalendar ? *arg(fxResetFixingCalendar) : Calendar(), fxBasePaymentLag, fxQuotePaymentLag, (BusinessDayConvention)fxBasePaymentConvention, (BusinessDayConvention)fxQuotePaymentConvention, fxBaseCompoundSpread, fxBaseLookbackDays, fxBaseObservationShift, fxBaseLockoutDays, (RateAveraging::Type)fxBaseAveragingMethod, fxQuoteCompoundSpread, fxQuoteLookbackDays, fxQuoteObservationShift, fxQuoteLockoutDays, (RateAveraging::Type)fxQuoteAveragingMethod, telescopicValueDates, qlOptBool(useIndexedCoupons), qlStubSelection(fxBaseStubIndexSelection), qlStubSelection(fxQuoteStubIndexSelection)))));} catch (std::exception& er) {return handleException<QlMtMCrossCurrencyBasisSwap*>(e, er);}+#else+  (void)type; (void)fxBaseNominal; (void)fxBaseCurrency; (void)fxBaseSchedule; (void)fxBaseIndex; (void)fxBaseSpread; (void)fxBaseGearing; (void)fxQuoteNominal; (void)fxQuoteCurrency; (void)fxQuoteSchedule; (void)fxQuoteIndex; (void)fxQuoteSpread; (void)fxQuoteGearing; (void)resetBase; (void)fxResetFixingDays; (void)fxResetFixingCalendar; (void)fxBasePaymentLag; (void)fxQuotePaymentLag; (void)fxBasePaymentConvention; (void)fxQuotePaymentConvention; (void)fxBaseCompoundSpread; (void)fxBaseLookbackDays; (void)fxBaseObservationShift; (void)fxBaseLockoutDays; (void)fxBaseAveragingMethod; (void)fxQuoteCompoundSpread; (void)fxQuoteLookbackDays; (void)fxQuoteObservationShift; (void)fxQuoteLockoutDays; (void)fxQuoteAveragingMethod; (void)telescopicValueDates; (void)useIndexedCoupons; (void)fxBaseStubIndexSelection; (void)fxQuoteStubIndexSelection;+  qlUnsupportedVersion(e, "mtmCrossCurrencyBasisSwap", "1.44"); return nullptr;+#endif+}+Currency* qlMtMLegCurrency(QlMtMCrossCurrencyBasisSwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new Currency((*arg(o))->legCurrency(j)));} catch (std::exception& er) {return handleException<Currency*>(e, er);}+#else+  (void)o; (void)j;+  qlUnsupportedVersion(e, "legCurrency", "1.44"); return nullptr;+#endif+}+double qlMtMInCcyLegBPS(QlMtMCrossCurrencyBasisSwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->inCcyLegBPS(j);} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o; (void)j;+  qlUnsupportedVersion(e, "inCcyLegBps", "1.44"); return 0;+#endif+}+double qlMtMInCcyLegNPV(QlMtMCrossCurrencyBasisSwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->inCcyLegNPV(j);} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o; (void)j;+  qlUnsupportedVersion(e, "inCcyLegNpv", "1.44"); return 0;+#endif+}+double qlMtMNpvDateDiscounts(QlMtMCrossCurrencyBasisSwap* o, unsigned j, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->npvDateDiscounts(j);} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o; (void)j;+  qlUnsupportedVersion(e, "npvDateDiscounts", "1.44"); return 0;+#endif+}+double qlMtMFairFxBaseSpread(QlMtMCrossCurrencyBasisSwap* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {const double value = (*arg(o))->fairFxBaseSpread(); QL_REQUIRE(std::isfinite(value), "fair spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "fairFxBaseSpread", "1.44"); return 0;+#endif+}+double qlMtMFairFxQuoteSpread(QlMtMCrossCurrencyBasisSwap* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {const double value = (*arg(o))->fairFxQuoteSpread(); QL_REQUIRE(std::isfinite(value), "fair spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "fairFxQuoteSpread", "1.44"); return 0;+#endif+}+double qlMtMFairPaySpread(QlMtMCrossCurrencyBasisSwap* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {const double value = (*arg(o))->fairPaySpread(); QL_REQUIRE(std::isfinite(value), "fair spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "fairPaySpread", "1.44"); return 0;+#endif+}+double qlMtMFairRecSpread(QlMtMCrossCurrencyBasisSwap* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {const double value = (*arg(o))->fairRecSpread(); QL_REQUIRE(std::isfinite(value), "fair spread is undefined for zero leg BPS"); return value;} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "fairRecSpread", "1.44"); return 0;+#endif+}+void qlMtMFxResetRates(QlMtMCrossCurrencyBasisSwap* o, unsigned* len, double** out, QlError **e) { QlCallScope callbackScope(e);+  *len = 0; *out = nullptr;+#if QL_HEX_VERSION >= 0x01440000+  try {fillVectorOut([&] {return (*arg(o))->fxResetRates();}, len, out);} catch (std::exception& er) {qlSetError(e, er.what());}+#else+  (void)o; (void)len; (void)out;+  qlUnsupportedVersion(e, "fxResetRates", "1.44");+#endif+}+void qlMtMFxResetNotionals(QlMtMCrossCurrencyBasisSwap* o, unsigned* len, double** out, QlError **e) { QlCallScope callbackScope(e);+  *len = 0; *out = nullptr;+#if QL_HEX_VERSION >= 0x01440000+  try {fillVectorOut([&] {return (*arg(o))->fxResetNotionals();}, len, out);} catch (std::exception& er) {qlSetError(e, er.what());}+#else+  (void)o; (void)len; (void)out;+  qlUnsupportedVersion(e, "fxResetNotionals", "1.44");+#endif+}+void qlFxResetConventionReset(unsigned fixingDays, Calendar* calendar, int date, int* fixing, int* value, QlError **e) { QlCallScope callbackScope(e);+  *fixing = 0; *value = 0;+#if QL_HEX_VERSION >= 0x01440000+  try {auto reset = FxResetConvention(fixingDays, calendar ? *arg(calendar) : Calendar()).reset(Date(date)); *fixing = reset.fixingDate().serialNumber(); *value = reset.valueDate().serialNumber();} catch (std::exception& er) {qlSetError(e, er.what());}+#else+  (void)fixingDays; (void)calendar; (void)date; (void)fixing; (void)value;+  qlUnsupportedVersion(e, "fxResetObservation", "1.44");+#endif+}+int qlFxResetConventionValueDate(unsigned fixingDays, Calendar* calendar, int date, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return FxResetConvention(fixingDays, calendar ? *arg(calendar) : Calendar()).valueDate(Date(date)).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}+#else+  (void)fixingDays; (void)calendar; (void)date;+  qlUnsupportedVersion(e, "fxResetValueDate", "1.44"); return 0;+#endif+}+void qlFreeFxResetPricer(QlFxResetPricer* o) {del(o);}+QlFxResetPricer* qlDiscountingFxResetPricer(Currency* constantCcy, Currency* resetCcy, QlYieldTermStructure* constantCurve, QlYieldTermStructure* resetCurve, QlQuote* spotFx, int spotIsResettablePerConstant, int spotFxSettleDate, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlFxResetPricer(alloc(new DiscountingFxResetPricer(*arg(constantCcy), *arg(resetCcy), *arg(constantCurve), *arg(resetCurve), *arg(spotFx), spotIsResettablePerConstant, qlNullableDate(spotFxSettleDate)))));} catch (std::exception& er) {return handleException<QlFxResetPricer*>(e, er);}+#else+  (void)constantCcy; (void)resetCcy; (void)constantCurve; (void)resetCurve; (void)spotFx; (void)spotIsResettablePerConstant; (void)spotFxSettleDate;+  qlUnsupportedVersion(e, "discountingFxResetPricer", "1.44"); return nullptr;+#endif+}+double qlFxResetRate(QlFxResetPricer* o, int fixing, int value, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->fxRate(FxReset(Date(fixing), Date(value)));} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o; (void)fixing; (void)value;+  qlUnsupportedVersion(e, "fxResetRate", "1.44"); return 0;+#endif+}+void qlFreeFxResetCoupon(QlFxResetCoupon* o) {del(o);}+QlFloatingRateCoupon* qlFxResetCouponAsFloatingRateCoupon(QlFxResetCoupon* o) {+#if QL_HEX_VERSION >= 0x01440000+  return ret(new QlFloatingRateCoupon(*arg(o)));+#else+  (void)o; return nullptr;+#endif+}+void qlFreeFxResetNotionalExchange(QlFxResetNotionalExchange* o) {del(o);}+QlCashFlow* qlFxResetNotionalExchangeAsCashFlow(QlFxResetNotionalExchange* o) {+#if QL_HEX_VERSION >= 0x01440000+  return ret(new QlCashFlow(*arg(o)));+#else+  (void)o; return nullptr;+#endif+}+QlFxResetCoupon* qlFxResetCoupon(QlFloatingRateCoupon* underlying, double notional, int fixing, int value, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlFxResetCoupon(alloc(new FxResetCoupon(*arg(underlying), notional, FxReset(Date(fixing), Date(value))))));} catch (std::exception& er) {return handleException<QlFxResetCoupon*>(e, er);}+#else+  (void)underlying; (void)notional; (void)fixing; (void)value;+  qlUnsupportedVersion(e, "fxResetCoupon", "1.44"); return nullptr;+#endif+}+QlFxResetNotionalExchange* qlFxResetNotionalExchange(int payment, double notional, int previousFixing, int previousValue, int currentFixing, int currentValue, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {optional<FxReset> previous, current; if (previousFixing) previous.emplace(Date(previousFixing), Date(previousValue)); if (currentFixing) current.emplace(Date(currentFixing), Date(currentValue)); return ret(new QlFxResetNotionalExchange(alloc(new FxResetNotionalExchange(Date(payment), notional, previous, current))));} catch (std::exception& er) {return handleException<QlFxResetNotionalExchange*>(e, er);}+#else+  (void)payment; (void)notional; (void)previousFixing; (void)previousValue; (void)currentFixing; (void)currentValue;+  qlUnsupportedVersion(e, "fxResetNotionalExchange", "1.44"); return nullptr;+#endif+}+void qlFxResetCouponSetFxResetPricer(QlFxResetCoupon* o, QlFxResetPricer* pricer, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {(*arg(o))->setFxResetPricer(*arg(pricer));} catch (std::exception& er) {qlSetError(e, er.what());}+#else+  (void)o; (void)pricer;+  qlUnsupportedVersion(e, "setFxResetPricer", "1.44");+#endif+}+void qlFxResetNotionalExchangeSetFxResetPricer(QlFxResetNotionalExchange* o, QlFxResetPricer* pricer, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {(*arg(o))->setFxResetPricer(*arg(pricer));} catch (std::exception& er) {qlSetError(e, er.what());}+#else+  (void)o; (void)pricer;+  qlUnsupportedVersion(e, "setFxResetPricer", "1.44");+#endif+}+void qlSetFxResetLegPricer(Leg* leg, QlFxResetPricer* pricer, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {QuantLib::setFxResetPricer(*arg(leg), *arg(pricer));} catch (std::exception& er) {qlSetError(e, er.what());}+#else+  (void)leg; (void)pricer;+  qlUnsupportedVersion(e, "setFxResetLegPricer", "1.44");+#endif+}+QlIborCoupon* qlStubIborCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlStubIndexSelection* selection, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlIborCoupon(alloc(new StubIborCoupon(Date(paymentDate), nominal, Date(startDate), Date(endDate), fixingDays, qlStubSelection(selection), gearing, spread, qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd), dayCounter ? *arg(dayCounter) : DayCounter(), inArrears, qlNullableDate(exCouponDate), (BusinessDayConvention)fixingConvention))));} catch (std::exception& er) {return handleException<QlIborCoupon*>(e, er);}+#else+  (void)paymentDate; (void)nominal; (void)startDate; (void)endDate; (void)fixingDays; (void)selection; (void)gearing; (void)spread; (void)refPeriodStart; (void)refPeriodEnd; (void)dayCounter; (void)inArrears; (void)exCouponDate; (void)fixingConvention;+  qlUnsupportedVersion(e, "stubIborCoupon", "1.44"); return nullptr;+#endif+}+double qlCouponNominal(QlCoupon* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->nominal();} catch (std::exception& er) {return handleException<double>(e, er);}} } /* vim: set ft=cpp ff=unix ts=8 sts=2 sw=2 et: */
cbits/qlInstrument.h view
@@ -25,989 +25,1006 @@     unsigned vlen;  // varr's length   };   void qlInstrumentAdditionalResults(QlInstrument *instr, unsigned *len,-    struct QlAdditionalResult **out, char **e);-  void qlFreeAdditionalResults(unsigned len, struct QlAdditionalResult *out);--  void qlInstrumentSetPricingEngine(QlInstrument *instr, QlPricingEngine *eng,-    char **e);-  QlInstrument* qlPerpetualFutures(int payoffType, int fundingType,-    int fundingFrequencyLength, int fundingFrequencyUnit, Calendar* cal,-    DayCounter* dc, char **e);-  double qlInstrumentNPV(QlInstrument *instr, char **e);-  void qlFreeInstrument(QlInstrument *instr);-  QlInstrument* qlCompositeInstrument(unsigned instrLen, QlInstrument **instrs, unsigned cLen, double *coeff, char **e);-  double qlInstrumentErrorEstimate(QlInstrument* o, char **e);-  int qlInstrumentIsExpired(QlInstrument* o, char **e);-  int qlInstrumentValuationDate(QlInstrument* o, char **e);-  void qlFreePayoff(QlPayoff *o);-  void qlFreeBasketPayoff(QlBasketPayoff *o);-  QlPayoff* qlBasketPayoffAsPayoff(QlBasketPayoff *o);-  void qlFreeStrikedTypePayoff(QlStrikedTypePayoff *o);-  QlTypePayoff* qlStrikedTypePayoffAsTypePayoff(QlStrikedTypePayoff *o);-  void qlFreeTypePayoff(QlTypePayoff *o);-  QlPayoff* qlTypePayoffAsPayoff(QlTypePayoff *o);-  void qlFreePercentageStrikePayoff(QlPercentageStrikePayoff *o);-  QlStrikedTypePayoff* qlPercentageStrikePayoffAsStrikedTypePayoff(QlPercentageStrikePayoff *o);-  void qlFreePlainVanillaPayoff(QlPlainVanillaPayoff *o);-  QlStrikedTypePayoff* qlPlainVanillaPayoffAsStrikedTypePayoff(QlPlainVanillaPayoff *o);--  // Haskell-defined payoffs. Unlike every other constructor here, the returned object keeps-  // calling back into Haskell through `fn' for its whole lifetime (Payoff::operator() is invoked-  // per scalar price, from wherever the payoff was stored -- an Instrument at NPV time, an-  // FdmInnerValueCalculator at solve time), so the caller must keep the FunPtr alive until the-  // payoff itself is gone. See QuantLib.Internal.Common.withCustomPayoff.-  QlPayoff* qlPayoffFromFunction(const char* name, const char* description,-    double (*fn)(double price), char **e);-  // accumulate() takes the whole underlying-state vector at once, so this one crosses the-  // language boundary once per evaluation, not once per component.-  QlBasketPayoff* qlBasketPayoffFromFunction(QlPayoff* base,-    double (*fn)(const double* a, unsigned n), char **e);-  // As qlPayoffFromFunction, but a real StrikedTypePayoff: the (type, strike) pair is advisory ---  // it does not define the payoff, it is what QuantLib's FD vanilla engines downcast to reach for-  // when sizing their mesher. description() comes from StrikedTypePayoff itself, so unlike-  // qlPayoffFromFunction there is no description argument.-  QlStrikedTypePayoff* qlStrikedPayoffFromFunction(int type, double strike, const char* name,-    double (*fn)(double price), char **e);--  QlStrikedTypePayoff* qlAssetOrNothingPayoff(int type, double strike, char **e);-  QlBasketPayoff* qlAverageBasketPayoff(QlPayoff* p, unsigned n, char **e);-  QlBasketPayoff* qlAverageBasketPayoff1(QlPayoff* p, unsigned aLen, double* a, char **e);-  QlStrikedTypePayoff* qlCashOrNothingPayoff(int type, double strike, double cashPayoff, char **e);-  QlPayoff* qlDoubleStickyRatchetPayoff(double type1, double type2, double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e);-  QlTypePayoff* qlFloatingTypePayoff(int type, char **e);-  QlPayoff* qlForwardTypePayoff(int type, double strike, char **e);-  QlStrikedTypePayoff* qlGapPayoff(int type, double strike, double secondStrike, char **e);-  QlBasketPayoff* qlMaxBasketPayoff(QlPayoff* p, char **e);-  QlBasketPayoff* qlMinBasketPayoff(QlPayoff* p, char **e);-  QlPercentageStrikePayoff* qlPercentageStrikePayoff(int type, double moneyness, char **e);-  QlPlainVanillaPayoff* qlPlainVanillaPayoff(int type, double strike, char **e);-  QlPayoff* qlRatchetMaxPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e);-  QlPayoff* qlRatchetMinPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e);-  QlPayoff* qlRatchetPayoff(double gearing1, double gearing2, double spread1, double spread2, double initialValue, double accrualFactor, char **e);-  QlBasketPayoff* qlSpreadBasketPayoff(QlPayoff* p, char **e);-  QlPayoff* qlStickyMaxPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e);-  QlPayoff* qlStickyMinPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, char **e);-  QlPayoff* qlStickyPayoff(double gearing1, double gearing2, double spread1, double spread2, double initialValue, double accrualFactor, char **e);-  QlStrikedTypePayoff* qlSuperFundPayoff(double strike, double secondStrike, char **e);-  QlStrikedTypePayoff* qlSuperSharePayoff(double strike, double secondStrike, double cashPayoff, char **e);--  void qlFreeAmericanExercise(QlAmericanExercise *o);-  QlExercise* qlAmericanExerciseAsExercise(QlAmericanExercise *o);-  void qlFreeBermudanExercise(QlBermudanExercise *o);-  QlExercise* qlBermudanExerciseAsExercise(QlBermudanExercise *o);-  void qlFreeEuropeanExercise(QlEuropeanExercise *o);-  QlExercise* qlEuropeanExerciseAsExercise(QlEuropeanExercise *o);-  void qlFreeExercise(QlExercise *o);-  QlAmericanExercise* qlAmericanExercise(int earliestDate, int latestDate, int payoffAtExpiry, char **e);-  QlBermudanExercise* qlBermudanExercise(unsigned datesLen, int *dates, int payoffAtExpiry, char **e);-  QlExercise* qlEarlyExercise(int type, int payoffAtExpiry, char **e);-  QlExercise* qlExercise(int type, char **e);-  QlEuropeanExercise* qlEuropeanExercise(int date, char **e);--  QlAmericanExercise* qlAmericanExercise1(int latestDate, int payoffAtExpiry, char **e);-  QlSwingExercise* qlSwingExercise(unsigned datesLen, int* dates, unsigned secLen, unsigned* seconds, char **e);-  QlSwingExercise* qlSwingExercise1(int from, int to, unsigned stepSizeSecs, char **e);-  QlExercise* qlSwingExerciseAsExercise(QlSwingExercise *o);--  void qlFreeRebatedExercise(QlRebatedExercise *o);-  QlExercise* qlRebatedExerciseAsExercise(QlRebatedExercise *o);-  QlRebatedExercise* qlRebatedExercise(QlExercise* exercise, double rebate, unsigned rebateSettlementDays, Calendar* rebatePaymentCalendar, int rebatePaymentConvention, char **e);--  void qlFreeCapFloor(QlCapFloor *o);-  QlInstrument* qlCapFloorAsInstrument(QlCapFloor *o);-  QlCapFloor* qlCap(Leg* floatingLeg, unsigned exerciseRatesLen, double* exerciseRates, char **e);-  QlCapFloor* qlCollar(Leg* floatingLeg, unsigned capRatesLen, double* capRates, unsigned floorRatesLen, double* floorRates, char **e);-  QlCapFloor* qlFloor(Leg* floatingLeg, unsigned exerciseRatesLen, double* exerciseRates, char **e);-  double qlCapFloorAtmRate(QlCapFloor* o, QlYieldTermStructure* discountCurve, char **e);-  double qlCapFloorImpliedVolatility(QlCapFloor* o, double price, QlYieldTermStructure* disc, double guess, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, int type, double displacement, char **e);-  QlCapFloor* qlCapFloorOptionlet(QlCapFloor* o, unsigned n, char **e);--  void qlFreeCallability(QlCallability *o);-  QlCallability* qlCallability(double price, int priceType, int type, int date, char **e);-  void qlFreeBondForward(QlBondForward *fwd);-  QlForward* qlBondForwardAsForward(QlBondForward *fwd);-  QlBondForward* qlBondForward(int valueDate, int maturityDate, int type, double strike, unsigned settlementDays, DayCounter* dayCounter, Calendar* calendar, int businessDayConvention, QlBond* fixedCouponBond, QlYieldTermStructure* discountCurve, QlYieldTermStructure* incomeDiscountCurve, char **e);-  double qlBondForwardCleanForwardPrice(QlBondForward* o, char **e);-  double qlBondForwardForwardPrice(QlBondForward* o, char **e);-  void qlFreeForward(QlForward *fwd);-  QlInstrument* qlForwardAsInstrument(QlForward *fwd);-  double qlForwardForwardValue(QlForward* o, char **e);-  InterestRate* qlForwardImpliedYield(QlForward* o, double underlyingSpotValue, double forwardValue, int settlementDate, int compoundingConvention, DayCounter* dayCounter, char **e);-  int qlForwardSettlementDate(QlForward* o, char **e);-  double qlForwardSpotIncome(QlForward* o, QlYieldTermStructure* incomeDiscountCurve, char **e);-  double qlForwardSpotValue(QlForward* o, char **e);-  void qlFreeForwardRateAgreement(QlForwardRateAgreement *fwd);-  QlInstrument* qlForwardRateAgreementAsInstrument(QlForwardRateAgreement *fwd);-  QlForwardRateAgreement* qlForwardRateAgreement(QlIborIndex* index, int valueDate, int maturityDate, int type, double strikeForwardRate, double notionalAmount, QlYieldTermStructure* discountCurve, char **e);--  InterestRate* qlForwardRateAgreementForwardRate(QlForwardRateAgreement* o, char **e);--  void qlFreeFxForward(QlFxForward *fwd);-  QlInstrument* qlFxForwardAsInstrument(QlFxForward *fwd);-  QlFxForward* qlFxForward(double sourceNominal, Currency* sourceCurrency, double targetNominal, Currency* targetCurrency, int maturityDate, int paySourceCurrency, unsigned settlementDays, Calendar* paymentCalendar, char **e);-  QlFxForward* qlFxForward1(double sourceNominal, Currency* sourceCurrency, Currency* targetCurrency, double forwardRate, int maturityDate, int paySourceCurrency, unsigned settlementDays, Calendar* paymentCalendar, char **e);-  double qlForwardRateAgreementAmount(QlForwardRateAgreement* o, char **e);-  double qlFxForwardForwardRate(QlFxForward* o);-  double qlFxForwardFairForwardRate(QlFxForward* o, char **e);-  double qlFxForwardNpvSourceCurrency(QlFxForward* o, char **e);-  double qlFxForwardNpvTargetCurrency(QlFxForward* o, char **e);--  void qlFreeSwap(QlSwap *o);-  QlInstrument* qlSwapAsInstrument(QlSwap *o);-  void qlFreeFixedVsFloatingSwap(QlFixedVsFloatingSwap *o);-  QlSwap* qlFixedVsFloatingSwapAsSwap(QlFixedVsFloatingSwap *o);-  void qlFreeVanillaSwap(QlVanillaSwap *o);-  QlFixedVsFloatingSwap* qlVanillaSwapAsFixedVsFloatingSwap(QlVanillaSwap *o);-  void qlFreeNonstandardSwap(QlNonstandardSwap *o);-  QlSwap* qlNonstandardSwapAsSwap(QlNonstandardSwap *o);-  void qlFreeFloatFloatSwap(QlFloatFloatSwap *o);-  QlSwap* qlFloatFloatSwapAsSwap(QlFloatFloatSwap *o);-  void qlFreeBMASwap(QlBMASwap *o);-  QlSwap* qlBMASwapAsSwap(QlBMASwap *o);-  void qlFreeOvernightIndexedSwap(QlOvernightIndexedSwap *o);-  QlSwap* qlOvernightIndexedSwapAsSwap(QlOvernightIndexedSwap *o);-  void qlFreeAssetSwap(QlAssetSwap *o);-  QlSwap* qlAssetSwapAsSwap(QlAssetSwap *o);-  void qlFreeZeroCouponInflationSwap(QlZeroCouponInflationSwap *o);-  QlSwap* qlZeroCouponInflationSwapAsSwap(QlZeroCouponInflationSwap *o);-  QlZeroCouponInflationSwap* qlZeroCouponInflationSwap(int type, double nominal, int startDate, int maturity, Calendar* cal, int paymentConvention, DayCounter* dayCounter, double fixedRate, QlZeroInflationIndex* index, int obsLagLen, int obsLagUnit, int observationInterpolation, int adjustInfObsDates, Calendar* infCalendar, int infConvention, char **e);-  double qlZeroCouponInflationSwapFairRate(QlZeroCouponInflationSwap* o, char **e);-  void qlFreeYearOnYearInflationSwap(QlYearOnYearInflationSwap *o);-  QlSwap* qlYearOnYearInflationSwapAsSwap(QlYearOnYearInflationSwap *o);-  QlYearOnYearInflationSwap* qlYearOnYearInflationSwap(int type, double nominal, Schedule* fixedSchedule, double fixedRate, DayCounter* fixedDayCount, Schedule* yoySchedule, QlYoYInflationIndex* yoyIndex, int obsLagLen, int obsLagUnit, int interpolation, double spread, DayCounter* yoyDayCount, Calendar* paymentCalendar, int paymentConvention, char **e);-  double qlYearOnYearInflationSwapFairRate(QlYearOnYearInflationSwap* o, char **e);-  double qlYearOnYearInflationSwapFairSpread(QlYearOnYearInflationSwap* o, char **e);-  void qlFreeCPISwap(QlCPISwap *o);-  QlSwap* qlCPISwapAsSwap(QlCPISwap *o);-  QlCPISwap* qlCPISwap(int type, double nominal, int subtractInflationNominal, double spread, DayCounter* floatDayCount, Schedule* floatSchedule, int floatRoll, unsigned fixingDays, QlIborIndex* floatIndex, double fixedRate, double baseCPI, DayCounter* fixedDayCount, Schedule* fixedSchedule, int fixedRoll, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* fixedIndex, int observationInterpolation, double inflationNominal, char **e);-  double qlCPISwapFairRate(QlCPISwap* o, char **e);-  double qlCPISwapFairSpread(QlCPISwap* o, char **e);-  void qlFreeZeroCouponSwap(QlZeroCouponSwap *o);-  QlSwap* qlZeroCouponSwapAsSwap(QlZeroCouponSwap *o);-  QlZeroCouponSwap* qlZeroCouponSwap(int type, double baseNominal, int startDate, int maturityDate, double fixedPayment, QlIborIndex* iborIndex, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, char **e);-  QlZeroCouponSwap* qlZeroCouponSwap1(int type, double baseNominal, int startDate, int maturityDate, double fixedRate, DayCounter* fixedDayCounter, QlIborIndex* iborIndex, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, char **e);-  double qlZeroCouponSwapFairFixedPayment(QlZeroCouponSwap* o, char **e);-  double qlZeroCouponSwapFairFixedRate(QlZeroCouponSwap* o, DayCounter* dayCounter, char **e);-  QlOvernightIndexedSwap* qlOvernightIndexedSwap(int type, double nominal, Schedule* schedule, double fixedRate, DayCounter* fixedDC, QlOvernightIndex* overnightIndex, double spread, int paymentLag, int paymentAdjustment, Calendar* paymentCalendar, int telescopicValueDates, int averagingMethod, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift, char **e);-  QlOvernightIndexedSwap* qlOvernightIndexedSwap1(int type, unsigned nominalsLen, double* nominals, Schedule* schedule, double fixedRate, DayCounter* fixedDC, QlOvernightIndex* overnightIndex, double spread, int paymentLag, int paymentAdjustment, Calendar* paymentCalendar, int telescopicValueDates, int averagingMethod, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift, char **e);-  QlSwap* qlSwap1(unsigned legsLen, Leg** legs, unsigned payerLen, int *payer, char **e);-  QlAssetSwap* qlAssetSwap(int payBondCoupon, QlBond* bond, double bondCleanPrice, QlIborIndex* iborIndex, double spread, Schedule* floatSchedule, DayCounter* floatingDayCount, int parAssetSwap, double gearing, double nonParRepayment, int dealMaturity, char **e);-  QlBMASwap* qlBMASwap(int type, double nominal, Schedule* liborSchedule, double liborFraction, double liborSpread, QlIborIndex* liborIndex, DayCounter* liborDayCount, Schedule* bmaSchedule, QlBMAIndex* bmaIndex, DayCounter* bmaDayCount, char **e);-  QlVanillaSwap* qlVanillaSwap(int type, double nominal, Schedule* fixedSchedule, double fixedRate, DayCounter* fixedDayCount, Schedule* floatSchedule, QlIborIndex* iborIndex, double spread, DayCounter* floatingDayCount, int paymentConvention, int useIndexedCoupons, char **e);-  QlNonstandardSwap* qlNonstandardSwap1(QlFixedVsFloatingSwap* v, char **e);-  QlNonstandardSwap* qlNonstandardSwap(int type, unsigned fixedNominalLen, double* fixedNominal, unsigned floatingNominalLen, double* floatingNominal, Schedule* fixedSchedule, unsigned fixedRateLen, double* fixedRate, DayCounter* fixedDayCount, Schedule* floatingSchedule, QlIborIndex* iborIndex, double gearing, double spread, DayCounter* floatingDayCount, int intermediateCapitalExchange, int finalCapitalExchange, int paymentConvention, char **e);-  QlNonstandardSwap* qlNonstandardSwap2(int type, unsigned fixedNominalLen, double* fixedNominal, unsigned floatingNominalLen, double* floatingNominal, Schedule* fixedSchedule, unsigned fixedRateLen, double* fixedRate, DayCounter* fixedDayCount, Schedule* floatingSchedule, QlIborIndex* iborIndex, unsigned gearingLen, double* gearing, unsigned spreadLen, double* spread, DayCounter* floatingDayCount, int intermediateCapitalExchange, int finalCapitalExchange, int paymentConvention, char **e);-  void qlNonstandardSwapFixedRate(QlNonstandardSwap* o, unsigned *len, double **out, char **e);-  QlFloatFloatSwap* qlFloatFloatSwap(int type, double nominal1, double nominal2, Schedule* schedule1, QlInterestRateIndex* index1, DayCounter* dayCount1, Schedule* schedule2, QlInterestRateIndex* index2, DayCounter* dayCount2, int intermediateCapitalExchange, int finalCapitalExchange, double gearing1, double spread1, double cappedRate1, double flooredRate1, double gearing2, double spread2, double cappedRate2, double flooredRate2, int paymentConvention1, int paymentConvention2, char **e);-  QlFloatFloatSwap* qlFloatFloatSwap2(int type, unsigned nominal1Len, double* nominal1, unsigned nominal2Len, double* nominal2, Schedule* schedule1, QlInterestRateIndex* index1, DayCounter* dayCount1, Schedule* schedule2, QlInterestRateIndex* index2, DayCounter* dayCount2, int intermediateCapitalExchange, int finalCapitalExchange, unsigned gearing1Len, double* gearing1, unsigned spread1Len, double* spread1, unsigned cappedRate1Len, double* cappedRate1, unsigned flooredRate1Len, double* flooredRate1, unsigned gearing2Len, double* gearing2, unsigned spread2Len, double* spread2, unsigned cappedRate2Len, double* cappedRate2, unsigned flooredRate2Len, double* flooredRate2, int paymentConvention1, int paymentConvention2, char **e);-  double qlFloatFloatSwapFairSpread1(QlFloatFloatSwap* o, char **e);-  double qlFloatFloatSwapFairSpread2(QlFloatFloatSwap* o, char **e);-  QlSwap* qlSwap(Leg* firstLeg, Leg* secondLeg, char **e);-  Leg* qlSwapLeg(QlSwap* o, unsigned j, char **e);-  Leg* qlFixedVsFloatingSwapFixedLeg(QlFixedVsFloatingSwap* o, char **e);-  Leg* qlFixedVsFloatingSwapFloatingLeg(QlFixedVsFloatingSwap* o, char **e);-  void qlFreeConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencySwap *o);-  QlSwap* qlConstNotionalCrossCurrencySwapAsSwap(QlConstNotionalCrossCurrencySwap *o);-  QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencySwap(Leg* firstLeg, Currency* firstLegCcy, Leg* secondLeg, Currency* secondLegCcy, char **e);-  QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencySwap1(unsigned legsLen, Leg** legs, unsigned payerLen, int* payer, unsigned currenciesLen, Currency** currencies, char **e);-  Currency* qlConstNotionalCrossCurrencySwapLegCurrency(QlConstNotionalCrossCurrencySwap* o, unsigned j, char **e);-  double qlConstNotionalCrossCurrencySwapInCcyLegBPS(QlConstNotionalCrossCurrencySwap* o, unsigned j, char **e);-  double qlConstNotionalCrossCurrencySwapInCcyLegNPV(QlConstNotionalCrossCurrencySwap* o, unsigned j, char **e);-  double qlConstNotionalCrossCurrencySwapNpvDateDiscounts(QlConstNotionalCrossCurrencySwap* o, unsigned j, char **e);--  void qlFreeConstNotionalCrossCurrencyBasisSwap(QlConstNotionalCrossCurrencyBasisSwap *o);-  QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencyBasisSwapAsConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencyBasisSwap *o);-  QlConstNotionalCrossCurrencyBasisSwap* qlConstNotionalCrossCurrencyBasisSwap(-    double payNominal, Currency* payCurrency, Schedule* paySchedule, QlIborIndex* payIndex, double paySpread, double payGearing,-    double recNominal, Currency* recCurrency, Schedule* recSchedule, QlIborIndex* recIndex, double recSpread, double recGearing,-    int payPaymentLag, int recPaymentLag,-    int payCompoundSpread, unsigned payLookbackDays, int payObservationShift, unsigned payLockoutDays, int payAveragingMethod,-    int recCompoundSpread, unsigned recLookbackDays, int recObservationShift, unsigned recLockoutDays, int recAveragingMethod,-    int telescopicValueDates, char **e);-  double qlConstNotionalCrossCurrencyBasisSwapFairPaySpread(QlConstNotionalCrossCurrencyBasisSwap* o, char **e);-  double qlConstNotionalCrossCurrencyBasisSwapFairRecSpread(QlConstNotionalCrossCurrencyBasisSwap* o, char **e);--  void qlFreeConstNotionalCrossCurrencyFixedVsFloatingSwap(QlConstNotionalCrossCurrencyFixedVsFloatingSwap *o);-  QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencyFixedVsFloatingSwapAsConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencyFixedVsFloatingSwap *o);-  QlConstNotionalCrossCurrencyFixedVsFloatingSwap* qlConstNotionalCrossCurrencyFixedVsFloatingSwap(-    int type, double fixedNominal, Currency* fixedCurrency, Schedule* fixedSchedule, double fixedRate,-    DayCounter* fixedDayCount, int fixedPaymentBdc, unsigned fixedPaymentLag, Calendar* fixedPaymentCalendar,-    double floatNominal, Currency* floatCurrency, Schedule* floatSchedule, QlIborIndex* floatIndex, double floatSpread,-    int floatPaymentBdc, unsigned floatPaymentLag, Calendar* floatPaymentCalendar,-    int telescopicValueDates, int floatCompoundSpread, unsigned floatLookbackDays, int floatObservationShift,-    unsigned floatLockoutDays, int floatAveragingMethod, char **e);-  double qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairRate(QlConstNotionalCrossCurrencyFixedVsFloatingSwap* o, char **e);-  double qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairSpread(QlConstNotionalCrossCurrencyFixedVsFloatingSwap* o, char **e);--  Leg* qlAssetSwapBondLeg(QlAssetSwap* o, char **e);-  Leg* qlAssetSwapFloatingLeg(QlAssetSwap* o, char **e);-  Leg* qlBMASwapBmaLeg(QlBMASwap* o, char **e);-  Leg* qlBMASwapLiborLeg(QlBMASwap* o, char **e);-  Leg* qlOvernightIndexedSwapFixedLeg(QlOvernightIndexedSwap* o, char **e);-  Leg* qlOvernightIndexedSwapOvernightLeg(QlOvernightIndexedSwap* o, char **e);-  double qlAssetSwapCleanPrice(QlAssetSwap* o, char **e);-  double qlAssetSwapFairCleanPrice(QlAssetSwap* o, char **e);-  double qlAssetSwapFairNonParRepayment(QlAssetSwap* o, char **e);-  double qlAssetSwapFairSpread(QlAssetSwap* o, char **e);-  double qlAssetSwapFloatingLegBPS(QlAssetSwap* o, char **e);-  double qlAssetSwapFloatingLegNPV(QlAssetSwap* o, char **e);-  double qlAssetSwapNonParRepayment(QlAssetSwap* o, char **e);-  int qlAssetSwapParSwap(QlAssetSwap* o, char **e);-  int qlAssetSwapPayBondCoupon(QlAssetSwap* o, char **e);-  double qlBMASwapBmaLegBPS(QlBMASwap* o, char **e);-  double qlBMASwapBmaLegNPV(QlBMASwap* o, char **e);-  double qlBMASwapFairLiborFraction(QlBMASwap* o, char **e);-  double qlBMASwapFairLiborSpread(QlBMASwap* o, char **e);-  double qlBMASwapLiborFraction(QlBMASwap* o, char **e);-  double qlBMASwapLiborLegBPS(QlBMASwap* o, char **e);-  double qlBMASwapLiborLegNPV(QlBMASwap* o, char **e);-  double qlOvernightIndexedSwapFairRate(QlOvernightIndexedSwap* o, char **e);-  double qlOvernightIndexedSwapFairSpread(QlOvernightIndexedSwap* o, char **e);-  double qlOvernightIndexedSwapFixedLegBPS(QlOvernightIndexedSwap* o, char **e);-  double qlOvernightIndexedSwapFixedLegNPV(QlOvernightIndexedSwap* o, char **e);-  double qlOvernightIndexedSwapOvernightLegBPS(QlOvernightIndexedSwap* o, char **e);-  double qlOvernightIndexedSwapOvernightLegNPV(QlOvernightIndexedSwap* o, char **e);-  double qlSwapEndDiscounts(QlSwap* o, unsigned j, char **e);-  double qlSwapLegBPS(QlSwap* o, unsigned j, char **e);-  double qlSwapLegNPV(QlSwap* o, unsigned j, char **e);-  int qlSwapMaturityDate(QlSwap* o, char **e);-  double qlSwapNpvDateDiscount(QlSwap* o, char **e);-  int qlSwapStartDate(QlSwap* o, char **e);-  double qlSwapStartDiscounts(QlSwap* o, unsigned j, char **e);-  double qlFixedVsFloatingSwapFairRate(QlFixedVsFloatingSwap* o, char **e);-  double qlFixedVsFloatingSwapFairSpread(QlFixedVsFloatingSwap* o, char **e);-  double qlFixedVsFloatingSwapFixedLegBPS(QlFixedVsFloatingSwap* o, char **e);-  double qlFixedVsFloatingSwapFixedLegNPV(QlFixedVsFloatingSwap* o, char **e);-  double qlFixedVsFloatingSwapFloatingLegBPS(QlFixedVsFloatingSwap* o, char **e);-  double qlFixedVsFloatingSwapFloatingLegNPV(QlFixedVsFloatingSwap* o, char **e);--  void qlFreeEquityTotalReturnSwap(QlEquityTotalReturnSwap *o);-  QlSwap* qlEquityTotalReturnSwapAsSwap(QlEquityTotalReturnSwap *o);-  QlEquityTotalReturnSwap* qlEquityTotalReturnSwapIbor(int type, double nominal, Schedule* schedule, QlEquityIndex* equityIndex, QlIborIndex* interestRateIndex, DayCounter* dayCounter, double margin, double gearing, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, char **e);-  QlEquityTotalReturnSwap* qlEquityTotalReturnSwapOvernight(int type, double nominal, Schedule* schedule, QlEquityIndex* equityIndex, QlOvernightIndex* interestRateIndex, DayCounter* dayCounter, double margin, double gearing, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, char **e);-  double qlEquityTotalReturnSwapEquityLegNPV(QlEquityTotalReturnSwap* o, char **e);-  double qlEquityTotalReturnSwapInterestRateLegNPV(QlEquityTotalReturnSwap* o, char **e);-  double qlEquityTotalReturnSwapFairMargin(QlEquityTotalReturnSwap* o, char **e);--  void qlFreeCreditDefaultSwap(QlCreditDefaultSwap *o);-  QlInstrument* qlCreditDefaultSwapAsInstrument(QlCreditDefaultSwap *o);-  void qlFreeClaim(QlClaim *o);-  QlClaim* qlFaceValueAccrualClaim(QlBond* referenceSecurity, char **e);-  QlClaim* qlFaceValueClaim(char **e);-  QlCreditDefaultSwap* qlCreditDefaultSwap(int side, double notional, double spread, Schedule* schedule, int paymentConvention, DayCounter* dayCounter, int settlesAccrual, int paysAtDefaultTime, int protectionStart, QlClaim* x9, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int tradeDate, unsigned cashSettlementDays, char **e);-  QlCreditDefaultSwap* qlCreditDefaultSwap1(int side, double notional, double upfront, double spread, Schedule* schedule, int paymentConvention, DayCounter* dayCounter, int settlesAccrual, int paysAtDefaultTime, int protectionStart, int upfrontDate, QlClaim* x11, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int tradeDate, unsigned cashSettlementDays, char **e);-  QlOption* qlCdsOptionAsOption(QlCdsOption *o);-  void qlFreeCdsOption(QlCdsOption *o);-  double qlCreditDefaultSwapFairSpread(QlCreditDefaultSwap* o, char **e);-  double qlCreditDefaultSwapConventionalSpread(QlCreditDefaultSwap* o, double conventionalRecovery, QlYieldTermStructure* discountCurve, DayCounter* dayCounter, int model, char **e);-  double qlCreditDefaultSwapCouponLegBPS(QlCreditDefaultSwap* o, char **e);-  double qlCreditDefaultSwapCouponLegNPV(QlCreditDefaultSwap* o, char **e);-  Leg* qlCreditDefaultSwapCoupons(QlCreditDefaultSwap* o, char **e);-  double qlCreditDefaultSwapDefaultLegNPV(QlCreditDefaultSwap* o, char **e);-  double qlCreditDefaultSwapFairUpfront(QlCreditDefaultSwap* o, char **e);-  double qlCreditDefaultSwapImpliedHazardRate(QlCreditDefaultSwap* o, double targetNPV, QlYieldTermStructure* discountCurve, DayCounter* dayCounter, double recoveryRate, double accuracy, int model, char **e);-  double qlCreditDefaultSwapUpfrontBPS(QlCreditDefaultSwap* o, char **e);-  double qlCreditDefaultSwapUpfrontNPV(QlCreditDefaultSwap* o, char **e);-  double qlCreditDefaultSwapAccrualRebateNPV(QlCreditDefaultSwap* o, char **e);-  void qlFreeBarrierOption(QlBarrierOption *o);-  QlOneAssetOption* qlBarrierOptionAsOneAssetOption(QlBarrierOption *o);-  void qlFreeDoubleBarrierOption(QlDoubleBarrierOption *o);-  QlOneAssetOption* qlDoubleBarrierOptionAsOneAssetOption(QlDoubleBarrierOption *o);-  void qlFreeSoftBarrierOption(QlSoftBarrierOption *o);-  QlOneAssetOption* qlSoftBarrierOptionAsOneAssetOption(QlSoftBarrierOption *o);-  void qlFreeMargrabeOption(QlMargrabeOption *o);-  QlMultiAssetOption* qlMargrabeOptionAsMultiAssetOption(QlMargrabeOption *o);-  void qlFreeEverestOption(QlEverestOption *o);-  QlMultiAssetOption* qlEverestOptionAsMultiAssetOption(QlEverestOption *o);-  void qlFreeMultiAssetOption(QlMultiAssetOption *o);-  QlOption* qlMultiAssetOptionAsOption(QlMultiAssetOption *o);-  void qlFreeOneAssetOption(QlOneAssetOption *o);-  QlOption* qlOneAssetOptionAsOption(QlOneAssetOption *o);-  void qlFreeOption(QlOption *o);-  QlInstrument* qlOptionAsInstrument(QlOption *o);-  void qlFreeQuantoVanillaOption(QlQuantoVanillaOption *o);-  QlOneAssetOption* qlQuantoVanillaOptionAsOneAssetOption(QlQuantoVanillaOption *o);-  void qlFreeSwaption(QlSwaption *o);-  QlOption* qlSwaptionAsOption(QlSwaption *o);-  void qlFreeSwingExercise(QlSwingExercise *o);-  QlBermudanExercise* qlSwingExerciseAsBermudanExercise(QlSwingExercise *o);-  void qlFreeVanillaOption(QlVanillaOption *o);-  QlOneAssetOption* qlVanillaOptionAsOneAssetOption(QlVanillaOption *o);-  double qlCdsOptionAtmRate(QlCdsOption* o, char **e);-  QlCdsOption* qlCdsOption(QlCreditDefaultSwap* swap, QlExercise* exercise, int knocksOut, char **e);-  QlCreditDefaultSwap* qlCdsOptionUnderlyingSwap(QlCdsOption* o, char **e);-  double qlCdsOptionImpliedVolatility(QlCdsOption* o, double price, QlYieldTermStructure* termStructure, QlDefaultProbabilityTermStructure* x3, double recoveryRate, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e);-  double qlCdsOptionRiskyAnnuity(QlCdsOption* o, char **e);-  double qlSwaptionImpliedVolatility(QlSwaption* o, double price, QlYieldTermStructure* discountCurve, double guess, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, int type, double displacement, int priceType, char **e);-  QlSwaption* qlSwaption(QlFixedVsFloatingSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, char **e);-  QlFixedVsFloatingSwap* qlSwaptionUnderlying(QlSwaption* o, char **e);-  void qlFreeIrregularSwaption(QlIrregularSwaption*);-  QlOption* qlIrregularSwaptionAsOption(QlIrregularSwaption*);-  QlIrregularSwaption* qlIrregularSwaption(QlIrregularSwap*, QlExercise*, int settlement, char **e);-  QlIrregularSwap* qlIrregularSwaptionUnderlyingSwap(QlIrregularSwaption* o, char **e);-  void qlFreeIrregularSwap(QlIrregularSwap*);-  QlSwap* qlIrregularSwapAsSwap(QlIrregularSwap*);-  QlIrregularSwap* qlIrregularSwap(int type, Leg*, Leg*, char **e);-  double qlIrregularSwapFairRate(QlIrregularSwap*, char **e);-  double qlIrregularSwapFairSpread(QlIrregularSwap*, char **e);-  void qlFreeNonstandardSwaption(QlNonstandardSwaption *o);-  QlOption* qlNonstandardSwaptionAsOption(QlNonstandardSwaption *o);-  QlNonstandardSwaption* qlNonstandardSwaption1(QlSwaption* fromSwaption, char **e);-  QlNonstandardSwaption* qlNonstandardSwaption(QlNonstandardSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, char **e);-  QlNonstandardSwap* qlNonstandardSwaptionUnderlyingSwap(QlNonstandardSwaption* o, char **e);-  void qlNonstandardSwaptionCalibrationBasket(QlNonstandardSwaption* o, QlSwapIndex* swapBase, QlSwaptionVolatilityStructure* swaptionVol, int basketType, unsigned* len, QlBlackCalibrationHelper*** helpers, char **e);-  void qlFreeFloatFloatSwaption(QlFloatFloatSwaption *o);-  QlOption* qlFloatFloatSwaptionAsOption(QlFloatFloatSwaption *o);-  QlFloatFloatSwaption* qlFloatFloatSwaption(QlFloatFloatSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, char **e);-  QlFloatFloatSwap* qlFloatFloatSwaptionUnderlyingSwap(QlFloatFloatSwaption* o, char **e);-  void qlFloatFloatSwaptionCalibrationBasket(QlFloatFloatSwaption* o, QlSwapIndex* swapBase, QlSwaptionVolatilityStructure* swaptionVol, int basketType, unsigned* len, QlBlackCalibrationHelper*** helpers, char **e);-  void qlFreeQuantoBarrierOption(QlQuantoBarrierOption *o);-  QlOneAssetOption* qlQuantoBarrierOptionAsOneAssetOption(QlQuantoBarrierOption *o);-  void qlFreeQuantoDoubleBarrierOption(QlQuantoDoubleBarrierOption *o);-  QlOneAssetOption* qlQuantoDoubleBarrierOptionAsOneAssetOption(QlQuantoDoubleBarrierOption *o);-  void qlFreeQuantoForwardVanillaOption(QlQuantoForwardVanillaOption *o);-  QlOption* qlQuantoForwardVanillaOptionAsOption(QlQuantoForwardVanillaOption *o);--  QlBarrierOption* qlBarrierOption(int barrierType, double barrier, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  QlInstrument* qlTwoAssetBarrierOption(int barrierType, double barrier, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  double qlBarrierOptionImpliedVolatility(QlBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e);-  QlOneAssetOption* qlPartialTimeBarrierOption(int barrierType, int barrierRange, double barrier, double rebate, int coverEventDate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  QlDoubleBarrierOption* qlDoubleBarrierOption(int barrierType, double barrierLo, double barrierHi, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  double qlDoubleBarrierOptionImpliedVolatility(QlDoubleBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e);-  QlSoftBarrierOption* qlSoftBarrierOption(int barrierType, double barrierLo, double barrierHi, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  double qlSoftBarrierOptionImpliedVolatility(QlSoftBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e);-  QlOneAssetOption* qlSimpleChooserOption(int choosingDate, double strike, QlExercise* exercise, char **e);-  QlOneAssetOption* qlComplexChooserOption(int choosingDate, double strikeCall, double strikePut, QlExercise* exerciseCall, QlExercise* exercisePut, char **e);-  QlMultiAssetOption* qlTwoAssetCorrelationOption(int type, double strike1, double strike2, QlExercise* exercise, char **e);-  QlOneAssetOption* qlWriterExtensibleOption(QlPlainVanillaPayoff* payoff1, QlExercise* exercise1, QlPlainVanillaPayoff* payoff2, QlExercise* exercise2, char **e);-  QlOneAssetOption* qlHolderExtensibleOption(int type, double premium, int secondExpiryDate, double secondStrike, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  QlOneAssetOption* qlForwardVanillaOption(double moneyness, int resetDate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  QlOneAssetOption* qlCompoundOption(QlStrikedTypePayoff* motherPayoff, QlExercise* motherExercise, QlStrikedTypePayoff* daughterPayoff, QlExercise* daughterExercise, char **e);-  double qlMargrabeOptionDelta1(QlMargrabeOption* o, char **e);-  double qlMargrabeOptionDelta2(QlMargrabeOption* o, char **e);-  double qlMargrabeOptionGamma1(QlMargrabeOption* o, char **e);-  double qlMargrabeOptionGamma2(QlMargrabeOption* o, char **e);-  QlMargrabeOption* qlMargrabeOption(int Q1, int Q2, QlExercise* x2, char **e);-  double qlEverestOptionYield(QlEverestOption* o, char **e);-  QlEverestOption* qlEverestOption(double notional, double guarantee, QlExercise* exercise, char **e);-  double qlMultiAssetOptionDelta(QlMultiAssetOption* o, char **e);-  double qlMultiAssetOptionDividendRho(QlMultiAssetOption* o, char **e);-  double qlMultiAssetOptionGamma(QlMultiAssetOption* o, char **e);-  QlMultiAssetOption* qlMultiAssetOption(QlPayoff* x0, QlExercise* x1, char **e);-  double qlMultiAssetOptionRho(QlMultiAssetOption* o, char **e);-  double qlMultiAssetOptionTheta(QlMultiAssetOption* o, char **e);-  double qlMultiAssetOptionVega(QlMultiAssetOption* o, char **e);-  double qlOneAssetOptionDelta(QlOneAssetOption* o, char **e);-  double qlOneAssetOptionDeltaForward(QlOneAssetOption* o, char **e);-  double qlOneAssetOptionDividendRho(QlOneAssetOption* o, char **e);-  double qlOneAssetOptionElasticity(QlOneAssetOption* o, char **e);-  double qlOneAssetOptionGamma(QlOneAssetOption* o, char **e);-  double qlOneAssetOptionItmCashProbability(QlOneAssetOption* o, char **e);-  QlOneAssetOption* qlOneAssetOption(QlPayoff* x0, QlExercise* x1, char **e);-  double qlOneAssetOptionRho(QlOneAssetOption* o, char **e);-  double qlOneAssetOptionStrikeSensitivity(QlOneAssetOption* o, char **e);-  double qlOneAssetOptionTheta(QlOneAssetOption* o, char **e);-  double qlOneAssetOptionThetaPerDay(QlOneAssetOption* o, char **e);-  double qlOneAssetOptionVega(QlOneAssetOption* o, char **e);-  double qlQuantoBarrierOptionQlambda(QlQuantoBarrierOption* o, char **e);-  double qlQuantoBarrierOptionQrho(QlQuantoBarrierOption* o, char **e);-  QlQuantoBarrierOption* qlQuantoBarrierOption(int barrierType, double barrier, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  double qlQuantoBarrierOptionQvega(QlQuantoBarrierOption* o, char **e);-  double qlQuantoDoubleBarrierOptionQlambda(QlQuantoDoubleBarrierOption* o, char **e);-  double qlQuantoDoubleBarrierOptionQrho(QlQuantoDoubleBarrierOption* o, char **e);-  QlQuantoDoubleBarrierOption* qlQuantoDoubleBarrierOption(int barrierType, double barrierLo, double barrierHi, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  double qlQuantoDoubleBarrierOptionQvega(QlQuantoDoubleBarrierOption* o, char **e);-  double qlQuantoForwardVanillaOptionQlambda(QlQuantoForwardVanillaOption* o, char **e);-  double qlQuantoForwardVanillaOptionQrho(QlQuantoForwardVanillaOption* o, char **e);-  QlQuantoForwardVanillaOption* qlQuantoForwardVanillaOption(double moneyness, int resetDate, QlStrikedTypePayoff* x2, QlExercise* x3, char **e);-  double qlQuantoForwardVanillaOptionQvega(QlQuantoForwardVanillaOption* o, char **e);-  double qlQuantoVanillaOptionQlambda(QlQuantoVanillaOption* o, char **e);-  double qlQuantoVanillaOptionQrho(QlQuantoVanillaOption* o, char **e);-  QlQuantoVanillaOption* qlQuantoVanillaOption(QlStrikedTypePayoff* x0, QlExercise* x1, char **e);-  double qlQuantoVanillaOptionQvega(QlQuantoVanillaOption* o, char **e);-  double qlVanillaOptionImpliedVolatility(QlVanillaOption* o, double price, QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e);-  QlVanillaOption* qlVanillaOption(QlStrikedTypePayoff* x0, QlExercise* x1, char **e);-  QlMultiAssetOption* qlBasketOption(QlBasketPayoff* x0, QlExercise* x1, char **e);-  QlMultiAssetOption* qlHimalayaOption(unsigned fixingDatesLen, int* fixingDates, double strike, char **e);-  QlMultiAssetOption* qlPagodaOption(unsigned fixingDatesLen, int* fixingDates, double roof, double fraction, char **e);-  QlOneAssetOption* qlCliquetOption(QlPercentageStrikePayoff* x0, QlEuropeanExercise* maturity, unsigned resetDatesLen, int* resetDates, char **e);-  QlOneAssetOption* qlContinuousAveragingAsianOption(int averageType, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  QlOneAssetOption* qlContinuousFixedLookbackOption(double currentMinmax, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  QlOneAssetOption* qlContinuousFloatingLookbackOption(double currentMinmax, QlTypePayoff* payoff, QlExercise* exercise, char **e);-  QlOneAssetOption* qlContinuousPartialFloatingLookbackOption(double currentMinmax, double lambda, int lookbackPeriodEnd, QlTypePayoff* payoff, QlExercise* exercise, char **e);-  QlOneAssetOption* qlContinuousPartialFixedLookbackOption(int lookbackPeriodStart, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  QlOneAssetOption* qlDiscreteAveragingAsianOption(int averageType, double runningAccumulator, unsigned pastFixings, unsigned fixingDatesLen, int* fixingDates, QlStrikedTypePayoff* payoff, QlExercise* exercise, char **e);-  QlOneAssetOption* qlVanillaStorageOption(QlBermudanExercise* ex, double capacity, double load, double changeRate, char **e);-  QlOneAssetOption* qlVanillaSwingOption(QlStrikedTypePayoff* payoff, QlSwingExercise* ex, unsigned minExerciseRights, unsigned maxExerciseRights, char **e);-  QlVanillaOption* qlEuropeanOption(QlStrikedTypePayoff* x0, QlExercise* x1, char **e);--  QlBond *qlBond(unsigned settlDays, Calendar *calendar, int issueDate, Leg *coupons, char **e);-  Leg* qlBondCashflows(QlBond* o, char **e);-  Leg* qlBondRedemptions(QlBond* o, char **e);-  int qlBondSettlementDate(QlBond* o, int d, char **e);-  int qlBondStartDate(QlBond* o, char **e);-  int qlBondMaturityDate(QlBond *bond, char **e);-  QlInstrument *qlBondAsInstrument(QlBond *bond);--  QlFixedRateBond *qlFixedRateBond(unsigned settlDays, double face, Schedule *schedule, unsigned cLen, double *coupons, DayCounter *counter, int payConv, double redemption, int issue, Calendar *payCal, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, DayCounter* firstPeriodDayCounter, char **e);-  QlBond *qlZeroCouponBond(int settlDays, Calendar *cal, double face, int maturity, int payConv, double redemption, int issue, char **e);-  QlBond *qlFloatingRateBond(unsigned settlDays, double face, Schedule *sched, QlIborIndex *index, DayCounter *dc, int payConv, unsigned fixDays,-    unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,-    int inArrears, double redemption, int issue, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, char **e);-  QlBond *qlCmsRateBond(unsigned settlDays, double faceAmount, Schedule *sched, QlSwapIndex *index, DayCounter *dc,-    int payConv, unsigned fixDays, unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads,-    unsigned nCaps, double *caps, unsigned nFloors, double *floors, int inArrears, double redemption, int issue, char **e);-  QlBond *qlAmortizingCmsRateBond(unsigned settlementDays, unsigned notionalsLen, double *notionals, Schedule *sched,-    QlSwapIndex *index, DayCounter *dc, int payConv, unsigned fixDays, unsigned nGearings, double *gearings,-    unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,-    int inArrears, int issue, unsigned redemptionsLen, double *redemptions, char **e);-  QlBond *qlFixedRateBondAsBond(QlFixedRateBond *bond);--  // BTP -- an Italian Treasury bond: FixedRateBond with the market's own hardcoded conventions-  // (semiannual, Actual/Actual ISMA, ModifiedFollowing, TARGET, par redemption). Kept as its own-  // leaf type (rather than folded into the generic fixedRateBond, per AGENTS.md's "don't mirror-  // the hierarchy 1:1" rule) only because RendistatoBasket's constructor genuinely requires-  // vector<shared_ptr<BTP>> -- BTP::yield and CCTEU are convenience wrappers over already-bound-  // functionality and are not bound (see tools/ql-methods-1.43.txt / AGENTS.md).-  QlBTP *qlBtp(int maturityDate, double fixedRate, int startDate, int issueDate, char **e);-  // legacy non-par redemption constructor; upstream notes only one such BTP remains.-  QlBTP *qlBtpWithRedemption(int maturityDate, double fixedRate, double redemption, int startDate, int issueDate, char **e);-  void qlFreeBtp(QlBTP *o);-  QlFixedRateBond *qlBtpAsFixedRateBond(QlBTP *o);--  QlCPIBond *qlCPIBond(unsigned settlementDays, double faceAmount, double baseCPI, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* index, int observationInterpolation, Schedule *schedule, unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate, Calendar *paymentCalendar, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, char **e);-  QlBond *qlCPIBondAsBond(QlCPIBond *bond);--  QlBond *qlAmortizingFixedRateBond(unsigned settlementDays, unsigned notionalsLen, double *notionals, Schedule *schedule,-    unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate,-    int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth,-    unsigned redemptionsLen, double *redemptions, int paymentLag, char **e);-  QlBond *qlAmortizingFloatingRateBond(unsigned settlementDays, unsigned notionalLen, double *notional, Schedule *schedule,-    QlIborIndex *index, DayCounter *accrualDayCounter, int paymentConvention, unsigned fixingDays,-    unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,-    int inArrears, int issueDate, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention,-    int exCouponEndOfMonth, unsigned redemptionsLen, double *redemptions, int paymentLag, char **e);-  Schedule *qlSinkingSchedule(int startDate, int lengthLen, int lengthUnit, int frequency, Calendar *paymentCalendar, char **e);-  void qlSinkingNotionals(int lengthLen, int lengthUnit, int frequency, double couponRate, double initialNotional,-    unsigned *len, double **out, char **e);--  double qlBondYield(QlBond* o, DayCounter* dc, int comp, int freq, double accuracy,-    unsigned maxEvaluations, double guess, int priceType, char **e);-  double qlBondAccruedAmount(QlBond* o, int d, char **e);-  double qlBondCleanPrice(QlBond* o, char **e);-  double qlBondDirtyPrice(QlBond* o, char **e);-  double qlBondDirtyPrice1(QlBond* o, double yield, DayCounter* dc, int comp, int freq, int settlementDate, char **e);-  int qlBondNextCashFlowDate(QlBond* o, int d, char **e);-  double qlBondNextCouponRate(QlBond* o, int d, char **e);-  double qlBondNotional(QlBond* o, int d, char **e);-  int qlBondPreviousCashFlowDate(QlBond* o, int d, char **e);-  double qlBondPreviousCouponRate(QlBond* o, int d, char **e);-  double qlBondSettlementValue1(QlBond* o, double cleanPrice, char **e);-  double qlBondSettlementValue(QlBond* o, char **e);-  double qlBondYield1(QlBond* o, double price, int, DayCounter* dc, int comp, int freq, int settlementDate, double accuracy, unsigned maxEvaluations, char **e);-  int qlBondIsTradable(QlBond* o, int d, char **e);-  void qlBondNotionals(QlBond* o, unsigned *len, double **ns, char **e);--  int qlBondFunctionsAccrualDays(QlBond* bond, int settlementDate, char **e);-  int qlBondFunctionsAccrualEndDate(QlBond* bond, int settlementDate, char **e);-  double qlBondFunctionsAccrualPeriod(QlBond* bond, int settlementDate, char **e);-  int qlBondFunctionsAccrualStartDate(QlBond* bond, int settlementDate, char **e);-  int qlBondFunctionsAccruedDays(QlBond* bond, int settlementDate, char **e);-  double qlBondFunctionsAccruedPeriod(QlBond* bond, int settlementDate, char **e);-  double qlBondFunctionsAtmRate(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, double price, int, char **e);-  double qlBondFunctionsBasisPointValue(QlBond* bond, InterestRate* yield, int settlementDate, char **e);-  double qlBondFunctionsBps1(QlBond* bond, InterestRate* yield, int settlementDate, char **e);-  double qlBondFunctionsBps(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, char **e);-  double qlBondFunctionsCleanPrice2(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, char **e);-  double qlBondFunctionsCleanPrice3(QlBond* bond, QlYieldTermStructure* discount, double zSpread, int compounding, int frequency, int settlementDate, char **e);-  double qlBondFunctionsCleanPrice4(QlBond* bond, InterestRate* yield, int settlementDate, char **e);-  double qlBondFunctionsConvexity(QlBond* bond, InterestRate* yield, int settlementDate, char **e);-  double qlBondFunctionsDuration(QlBond* bond, InterestRate* yield, int type, int settlementDate, char **e);-  double qlBondFunctionsNextCashFlowAmount(QlBond* bond, int refDate, char **e);-  double qlBondFunctionsPreviousCashFlowAmount(QlBond* bond, int refDate, char **e);-  int qlBondFunctionsReferencePeriodEnd(QlBond* bond, int settlementDate, char **e);-  int qlBondFunctionsReferencePeriodStart(QlBond* bond, int settlementDate, char **e);-  double qlBondFunctionsYield2(QlBond* bond, double price, int, DayCounter* dayCounter, int compounding, int frequency, int settlementDate, double accuracy, unsigned maxIterations, double guess, char **e);-  double qlBondFunctionsYieldValueBasisPoint(QlBond* bond, InterestRate* yield, int settlementDate, char **e);-  double qlBondFunctionsZSpread(QlBond* bond, double price, int, QlYieldTermStructure* x2, int compounding, int frequency, int settlementDate, double accuracy, unsigned maxIterations, double guess, char **e);--  void qlFreeBond(QlBond *bond);-  void qlFreeFixedRateBond(QlFixedRateBond *bond);-  void qlFreeCPIBond(QlCPIBond *bond);-  void qlFreeCallableBond(QlCallableBond *o);-  QlBond* qlCallableBondAsBond(QlCallableBond *o);-  void qlFreeConvertibleBond(QlConvertibleBond *o);-  QlBond* qlConvertibleBondAsBond(QlConvertibleBond *o);--  QlCallableBond* qlCallableFixedRateBond(unsigned settlementDays, double faceAmount, Schedule* schedule, unsigned couponsLen, double* coupons, DayCounter* accrualDayCounter, int paymentConvention, double redemption, int issueDate, unsigned putCallScheduleLen, QlCallability** putCallSchedule, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, char **e);-  QlCallableBond* qlCallableZeroCouponBond(unsigned settlementDays, double faceAmount, Calendar* calendar, int maturityDate, DayCounter* dayCounter, int paymentConvention, double redemption, int issueDate, unsigned putCallScheduleLen, QlCallability** putCallSchedule, char **e);-  QlConvertibleBond* qlConvertibleFixedCouponBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, unsigned couponsLen, double* coupons, DayCounter* dayCounter, Schedule* schedule, double redemption, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, char **e);-  QlConvertibleBond* qlConvertibleFloatingRateBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, QlIborIndex* index, unsigned fixingDays, unsigned spreadsLen, double* spreads, DayCounter* dayCounter, Schedule* schedule, double redemption, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, char **e);-  QlConvertibleBond* qlConvertibleZeroCouponBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, DayCounter* dayCounter, Schedule* schedule, double redemption, char **e);-  QlCallability* qlSoftCallability(double price, int priceType, int date, double trigger, char **e);--  Leg *qlLeg(unsigned len, double *amounts, int *dates, char **e);-  void qlFreeCashFlow(QlCashFlow *o);-  double qlCashFlowAmount(QlCashFlow *o, char **e);-  int qlCashFlowDate(QlCashFlow *o);-  QlCashFlow *qlSimpleCashFlow(double amount, int date, char **e);-  void qlFreeIndexedCashFlow(QlIndexedCashFlow *o);-  QlCashFlow *qlIndexedCashFlowAsCashFlow(QlIndexedCashFlow *o);-  QlIndexedCashFlow *qlIndexedCashFlow(double notional, QlIndex *index, int baseDate, int fixingDate, int paymentDate, int growthOnly, char **e);-  double qlIndexedCashFlowBaseFixing(QlIndexedCashFlow *o, char **e);-  double qlIndexedCashFlowIndexFixing(QlIndexedCashFlow *o, char **e);-  QlFixedRateCoupon *qlFixedRateCoupon(int paymentDate, double nominal, double rate, DayCounter *dayCounter, int accrualStartDate, int accrualEndDate, int refPeriodStart, int refPeriodEnd, int exCouponDate, char **e);-  void qlFreeCoupon(QlCoupon *o);-  QlCashFlow* qlCouponAsCashFlow(QlCoupon *o);-  double qlCouponRate(QlCoupon *o, char **e);-  double qlCouponAccruedAmount(QlCoupon *o, int d, char **e);-  void qlFreeFixedRateCoupon(QlFixedRateCoupon *o);-  QlCoupon* qlFixedRateCouponAsCoupon(QlFixedRateCoupon *o);-  InterestRate* qlFixedRateCouponInterestRate(QlFixedRateCoupon *o);-  QlFloatingRateCoupon *qlFloatingRateCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlInterestRateIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e);-  Leg *qlCashFlowLeg(unsigned len, QlCashFlow **cashFlows, char **e);-  int qlLegStartDate(Leg *leg, char **e);--  void qlFreeLeg(Leg *leg);-  Leg *qlNextCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, char **e);-  Leg *qlPreviousCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, char **e);-  void qlLegCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, unsigned *al, double **amount, unsigned *dl, int **date, unsigned *hl, int **hasOccurred, char **e);--  double qlCashFlowsDuration(Leg* leg, InterestRate* yield, int type, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  int qlCashFlowsAccrualDays(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  int qlCashFlowsAccrualEndDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  double qlCashFlowsAccrualPeriod(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  int qlCashFlowsAccrualStartDate(Leg* leg, int includeSettlementDateFlows, int settlDate, char **e);-  double qlCashFlowsAccruedAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  int qlCashFlowsAccruedDays(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  double qlCashFlowsAccruedPeriod(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  double qlCashFlowsAtmRate(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, double npv, char **e);-  double qlCashFlowsBasisPointValue(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  double qlCashFlowsBps1(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  double qlCashFlowsBps(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  double qlCashFlowsConvexity(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  int qlCashFlowsIsExpired(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  int qlCashFlowsMaturityDate(Leg* leg, char **e);-  double qlCashFlowsNextCashFlowAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  int qlCashFlowsNextCashFlowDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  double qlCashFlowsNextCouponRate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  double qlCashFlowsNominal(Leg* leg, int includeSettlementDateFlows, int settlDate, char **e);-  double qlCashFlowsNpv1(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  double qlCashFlowsNpv3(Leg* leg, QlYieldTermStructure* discount, double zSpread, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  double qlCashFlowsNpv(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  void qlCashFlowsNpvbps(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, double *npv, double *bps, char **e);-  double qlCashFlowsPreviousCashFlowAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  int qlCashFlowsPreviousCashFlowDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  double qlCashFlowsPreviousCouponRate(Leg* leg, int includeSettlementDateFlows, int settlementDate, char **e);-  int qlCashFlowsReferencePeriodEnd(Leg* leg, int includeSettlementDateFlows, int settlDate, char **e);-  int qlCashFlowsReferencePeriodStart(Leg* leg, int includeSettlementDateFlows, int settlDate, char **e);-  double qlCashFlowsYield(Leg* leg, double npv, DayCounter* dayCounter, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, double accuracy, unsigned maxIterations, double guess, char **e);-  double qlCashFlowsYieldValueBasisPoint(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  double qlCashFlowsZSpread(Leg* leg, double npv, QlYieldTermStructure* x2, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, double accuracy, unsigned maxIterations, double guess, char **e);--  void qlQuantLibSetCouponPricer(Leg* leg, QlFloatingRateCouponPricer* x1, char **e);-  void qlQuantLibSetCouponPricers(Leg* leg, unsigned x1Len, QlFloatingRateCouponPricer** x1, char **e);--  void qlCouponAccrualStartDates(CouponLeg* o, unsigned *len, int **days, char **e);-  void qlCouponLegCoupons(CouponLeg* o, unsigned *len, QlCoupon ***out, char **e);--  void qlFreeDividend(QlDividend *o);-  QlDividend* qlFixedDividend(double amount, int date, char **e);-  QlDividend* qlFractionalDividend1(double rate, double nominal, int date, char **e);-  QlDividend* qlFractionalDividend(double rate, int date, char **e);--  Leg* qlAverageBMALeg(Schedule* schedule, QlBMAIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, char **e);-  Leg* qlFixedRateLeg(Schedule* schedule, unsigned NotionalsLen, double* Notionals, unsigned couponRatesLen, InterestRate** couponRates, int paymentAdjustment, DayCounter* firstPeriodDayCounter, Calendar* paymentCalendar, char **e);-  Leg* qlIborLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments,-    int paymentLag, Calendar* paymentCalendar, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, int useIndexedCoupons, char **e);-  Leg* qlCmsLeg(Schedule* schedule, QlSwapIndex* swapIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments,-    int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, char **e);-  Leg* qlOvernightLeg(Schedule* schedule, QlOvernightIndex* overnightIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, char **e);-  Leg* qlRangeAccrualLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned lowerTriggersLen, double* lowerTriggers, unsigned upperTriggersLen, double* upperTriggers, int, int, int observationConvention, char **e);-  void qlFreeCouponLeg(CouponLeg *o);-  Leg* qlCouponLegAsLeg(CouponLeg *o);--  CouponLeg* qlLegToCouponLeg(Leg *o, char **e);-  Leg* qlCPILeg(Schedule* schedule, QlZeroInflationIndex* index, double baseCPI, int obsLagLen, int obsLagUnit, unsigned notionalsLen, double* notionals, unsigned fixedRatesLen, double* fixedRates, DayCounter* paymentDayCounter, int paymentAdjustment, Calendar* paymentCalendar, int observationInterpolation, int subtractInflationNominal, char **e);-  Leg* qlYoYInflationLeg(Schedule* schedule, Calendar* cal, QlYoYInflationIndex* index, int obsLagLen, int obsLagUnit, int interpolation, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, char **e);--  /* YoYInflationCouponPricer -- all 3 concrete pricers share this ctor shape */-  QlYoYInflationCouponPricer *qlBlackYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, char **e);-  QlYoYInflationCouponPricer *qlUnitDisplacedBlackYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, char **e);-  QlYoYInflationCouponPricer *qlBachelierYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, char **e);-  void qlFreeYoYInflationCouponPricer(QlYoYInflationCouponPricer *p);-  void qlSetYoYInflationCouponPricer(Leg* leg, QlYoYInflationCouponPricer* pricer, char **e);--  void qlFreeZeroInflationCashFlow(QlZeroInflationCashFlow *o);-  QlIndexedCashFlow *qlZeroInflationCashFlowAsIndexedCashFlow(QlZeroInflationCashFlow *o);-  QlZeroInflationCashFlow* qlZeroInflationCashFlow(double notional, QlZeroInflationIndex* index, int observationInterpolation, int startDate, int endDate, int obsLagLen, int obsLagUnit, int paymentDate, int growthOnly, char **e);--  void qlFreeCPICashFlow(QlCPICashFlow *o);-  QlIndexedCashFlow *qlCPICashFlowAsIndexedCashFlow(QlCPICashFlow *o);-  QlCPICashFlow* qlCPICashFlow(double notional, QlZeroInflationIndex* index, int baseDate, double baseFixing, int observationDate, int obsLagLen, int obsLagUnit, int interpolation, int paymentDate, int growthOnly, char **e);--  void qlFreeEquityCashFlow(QlEquityCashFlow *o);-  QlIndexedCashFlow *qlEquityCashFlowAsIndexedCashFlow(QlEquityCashFlow *o);-  QlEquityCashFlow* qlEquityCashFlow(double notional, QlEquityIndex* index, int baseDate, int fixingDate, int paymentDate, int growthOnly, char **e);-  void qlEquityCashFlowSetPricer(QlEquityCashFlow* o, QlEquityCashFlowPricer* pricer, char **e);--  void qlFreeEquityCashFlowPricer(QlEquityCashFlowPricer *o);-  QlEquityCashFlowPricer* qlEquityQuantoCashFlowPricer(QlYieldTermStructure* quantoCurrencyTermStructure, QlBlackVolTermStructure* equityVolatility, QlBlackVolTermStructure* fxVolatility, QlQuote* correlation, char **e);-  void qlQuantLibSetEquityCashFlowPricer(Leg* leg, QlEquityCashFlowPricer* pricer, char **e);--  QlFloatingRateCouponPricer *qlBlackIborCouponPricer(QlOptionletVolatilityStructure *vol, int timingAdjustment, QlQuote *correlation, int useIndexedCoupon, char **e);-  QlFloatingRateCouponPricer *qlBlackIborQuantoCouponPricer(QlBlackVolTermStructure *fxRateBlackVolatility, QlQuote *underlyingFxCorrelation, QlOptionletVolatilityStructure *capletVolatility, char **e);-  void qlFreeFloatingCouponPricer(QlFloatingRateCouponPricer *p);-  void qlFreeCmsCouponPricer(QlCmsCouponPricer *p);-  QlFloatingRateCouponPricer* qlCmsCouponPricerAsFloatingRateCouponPricer(QlCmsCouponPricer *p);-  QlCmsCouponPricer* qlAnalyticHaganPricer(QlSwaptionVolatilityStructure* swaptionVol, int modelOfYieldCurve, QlQuote* meanReversion, char **e);-  QlCmsCouponPricer* qlNumericHaganPricer(QlSwaptionVolatilityStructure* swaptionVol, int modelOfYieldCurve, QlQuote* meanReversion, double lowerLimit, double upperLimit, double precision, double hardUpperLimit, char **e);-  QlCmsCouponPricer* qlLinearTsrPricer(QlSwaptionVolatilityStructure* swaptionVol, QlQuote* meanReversion, QlYieldTermStructure* couponDiscountCurve, int strategy, double param, int haveBounds, double lowerBound, double upperBound, char **e);-  QlFloatingRateCouponPricer* qlRangeAccrualPricerByBgm(double correlation, QlSmileSection* smilesOnExpiry, QlSmileSection* smilesOnPayment, int withSmile, int byCallSpread, char **e);--  void qlFreeFloatingRateCoupon(QlFloatingRateCoupon *o);-  void qlFreeIborCoupon(QlIborCoupon *o);-  QlFloatingRateCoupon* qlIborCouponAsFloatingRateCoupon(QlIborCoupon *o);-  QlIborCoupon* qlIborCouponExact(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlIborIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e);-  void qlFreeAverageBMACoupon(QlAverageBMACoupon *o);-  QlFloatingRateCoupon* qlAverageBMACouponAsFloatingRateCoupon(QlAverageBMACoupon* o);-  QlAverageBMACoupon* qlAverageBMACoupon(int paymentDate, double nominal, int startDate, int endDate, QlBMAIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, char **e);-  void qlAverageBMACouponFixingDates(QlAverageBMACoupon *o, unsigned *len, int **ds, char **e);-  void qlAverageBMACouponIndexFixings(QlAverageBMACoupon *o, unsigned *len, double **fs, char **e);-  QlFloatingRateCoupon* qlCappedFlooredCoupon(QlFloatingRateCoupon *underlying, double cap, double floor, char **e);-  void qlFreeStrippedCappedFlooredCoupon(QlStrippedCappedFlooredCoupon *o);-  QlFloatingRateCoupon* qlStrippedCappedFlooredCouponAsFloatingRateCoupon(QlStrippedCappedFlooredCoupon *o);-  QlStrippedCappedFlooredCoupon* qlStrippedCappedFlooredCoupon(QlFloatingRateCoupon *underlying, double cap, double floor, char **e);-  double qlStrippedCappedFlooredCouponCap(QlStrippedCappedFlooredCoupon *o);-  double qlStrippedCappedFlooredCouponFloor(QlStrippedCappedFlooredCoupon *o);-  double qlStrippedCappedFlooredCouponEffectiveCap(QlStrippedCappedFlooredCoupon *o);-  double qlStrippedCappedFlooredCouponEffectiveFloor(QlStrippedCappedFlooredCoupon *o);-  int qlStrippedCappedFlooredCouponIsCap(QlStrippedCappedFlooredCoupon *o);-  int qlStrippedCappedFlooredCouponIsFloor(QlStrippedCappedFlooredCoupon *o);-  int qlStrippedCappedFlooredCouponIsCollar(QlStrippedCappedFlooredCoupon *o);-  QlFloatingRateCoupon* qlCappedFlooredIborCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlIborIndex *index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e);-  QlDigitalCoupon* qlDigitalIborCoupon(QlIborCoupon *underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication *replication, int nakedOption, char **e);-  void qlFreeDigitalCoupon(QlDigitalCoupon*);-  QlFloatingRateCoupon* qlDigitalCouponAsFloatingRateCoupon(QlDigitalCoupon*);-  QlDigitalCoupon* qlDigitalCoupon(QlFloatingRateCoupon *underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication *replication, int nakedOption, char **e);-  double qlDigitalCouponCallOptionRate(QlDigitalCoupon *o, char **e);-  double qlDigitalCouponPutOptionRate(QlDigitalCoupon *o, char **e);-  void qlFreeMultipleResetsCoupon(QlMultipleResetsCoupon *o);-  QlFloatingRateCoupon* qlMultipleResetsCouponAsFloatingRateCoupon(QlMultipleResetsCoupon* o);-  QlMultipleResetsCoupon* qlMultipleResetsCoupon(int paymentDate, double nominal, Schedule *schedule, unsigned fixingDays, QlIborIndex *index, double gearing, double couponSpread, double rateSpread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int exCouponDate, char **e);-  void qlMultipleResetsCouponFixingDates(QlMultipleResetsCoupon *o, unsigned *len, int **dates, char **e);-  void qlFreeRangeAccrualFloatersCoupon(QlRangeAccrualFloatersCoupon*);-  QlFloatingRateCoupon* qlRangeAccrualFloatersCouponAsFloatingRateCoupon(QlRangeAccrualFloatersCoupon*);-  QlRangeAccrualFloatersCoupon* qlRangeAccrualFloatersCoupon(int paymentDate, double nominal, QlIborIndex*, int startDate, int endDate, unsigned fixingDays, DayCounter*, double gearing, double spread, int refStart, int refEnd, Schedule*, double lower, double upper, char **e);-  double qlRangeAccrualFloatersCouponPriceWithoutOptionality(QlRangeAccrualFloatersCoupon*, QlYieldTermStructure*, char **e);-  void qlFreeYoYInflationCoupon(QlYoYInflationCoupon*);-  QlCoupon* qlYoYInflationCouponAsCoupon(QlYoYInflationCoupon*);-  QlYoYInflationCoupon* qlYoYInflationCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlYoYInflationIndex*, int lagLen, int lagUnit, int interpolation, DayCounter*, double gearing, double spread, int refStart, int refEnd, char **e);-  double qlYoYInflationCouponAdjustedFixing(QlYoYInflationCoupon*, char **e);-  QlFloatingRateCouponPricer* qlAveragingMultipleResetsPricer(char **e);-  QlFloatingRateCouponPricer* qlCompoundingMultipleResetsPricer(char **e);-  void qlFreeOvernightIndexedCoupon(QlOvernightIndexedCoupon *o);-  QlFloatingRateCoupon* qlOvernightIndexedCouponAsFloatingRateCoupon(QlOvernightIndexedCoupon *o);-  QlOvernightIndexedCoupon* qlOvernightIndexedCoupon(int paymentDate, double nominal, int startDate, int endDate, QlOvernightIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int telescopic, int averaging, unsigned lookback, unsigned lockout, int observationShift, int compoundSpread, int rateStart, int rateEnd, int exCouponDate, int rounding, char **e);-  QlFloatingRateCoupon* qlCappedFlooredOvernightIndexedCoupon(QlOvernightIndexedCoupon *underlying, double cap, double floor, int naked, int daily, char **e);-  void qlOvernightIndexedCouponFixingDates(QlOvernightIndexedCoupon *o, unsigned *len, int **dates, char **e);-  void qlOvernightIndexedCouponIndexFixings(QlOvernightIndexedCoupon *o, unsigned *len, double **fixings, char **e);-  QlFloatingRateCouponPricer* qlCompoundingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, char **e);-  QlFloatingRateCouponPricer* qlArithmeticAveragedOvernightIndexedCouponPricer(double mr, double volatility, int byApprox, QlOptionletVolatilityStructure *vol, int effective, char **e);-  QlFloatingRateCouponPricer* qlBlackCompoundingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, char **e);-  QlFloatingRateCouponPricer* qlBlackAveragingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, char **e);-  void qlFreeCPICoupon(QlCPICoupon *o);-  QlCPICoupon* qlCPICoupon(double baseCPI, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, char **e);-  QlCPICoupon* qlCPICouponFromBaseDate(int baseDate, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, char **e);-  QlCPICoupon* qlCPICouponWithBaseDate(double baseCPI, int baseDate, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, char **e);-  void qlFreeCPICouponPricer(QlCPICouponPricer *o);-  QlCPICouponPricer* qlCPICouponPricer(QlYieldTermStructure *nominal, char **e);-  QlCPICouponPricer* qlCPICouponPricerWithVol(QlCPIVolatilitySurface *vol, QlYieldTermStructure *nominal, char **e);-  QlCoupon* qlCPICouponAsCoupon(QlCPICoupon *o);-  void qlCPICouponSetPricer(QlCPICoupon *coupon, QlCPICouponPricer *pricer, char **e);-  QlCashFlow* qlRedemption(double amount, int date, char **e);-  QlCashFlow* qlAmortizingPayment(double amount, int date, char **e);-  QlCoupon* qlFloatingRateCouponAsCoupon(QlFloatingRateCoupon* o);-  void qlFloatingRateCouponSetPricer(QlFloatingRateCoupon* o, QlFloatingRateCouponPricer* pricer, char **e);-  double qlFloatingRateCouponPrice(QlFloatingRateCoupon* o, QlYieldTermStructure* discountingCurve, char **e);-  double qlFloatingRateCouponConvexityAdjustment(QlFloatingRateCoupon* o, char **e);-  double qlCPICouponIndexRatio(QlCPICoupon *o, int d, char **e);-  double qlFloatingRateCouponPricerSwapletRate(QlFloatingRateCouponPricer* o, char **e);-  double qlFloatingRateCouponPricerSwapletPrice(QlFloatingRateCouponPricer* o, char **e);-  double qlFloatingRateCouponPricerCapletPrice(QlFloatingRateCouponPricer* o, double effectiveCap, char **e);-  double qlFloatingRateCouponPricerCapletRate(QlFloatingRateCouponPricer* o, double effectiveCap, char **e);-  double qlFloatingRateCouponPricerFloorletPrice(QlFloatingRateCouponPricer* o, double effectiveFloor, char **e);-  double qlFloatingRateCouponPricerFloorletRate(QlFloatingRateCouponPricer* o, double effectiveFloor, char **e);--  void qlFreeCmsCoupon(QlCmsCoupon *o);-  QlFloatingRateCoupon* qlCmsCouponAsFloatingRateCoupon(QlCmsCoupon *o);-  QlCmsCoupon* qlCmsCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e);--  QlFloatingRateCoupon* qlCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e);-  QlFloatingRateCoupon* qlCappedFlooredCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e);-  QlFloatingRateCouponPricer* qlLognormalCmsSpreadPricer(QlCmsCouponPricer* cmsPricer, QlQuote* correlation, QlYieldTermStructure* couponDiscountCurve, unsigned integrationPoints, int haveVolatilityType, int volatilityType, double shift1, double shift2, char **e);-  Leg* qlCmsSpreadLeg(Schedule* schedule, QlSwapSpreadIndex* swapSpreadIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments, char **e);--  void qlFreeDigitalCmsSpreadCoupon(QlDigitalCmsSpreadCoupon *o);-  QlDigitalCoupon* qlDigitalCmsSpreadCouponAsDigitalCoupon(QlDigitalCmsSpreadCoupon *o);-  QlDigitalCmsSpreadCoupon* qlDigitalCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication* replication, int nakedOption, char **e);-  Leg* qlDigitalCmsSpreadLeg(Schedule* schedule, QlSwapSpreadIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, char **e);--  void qlFreeSwapSpreadIndex(QlSwapSpreadIndex *o);-  QlInterestRateIndex* qlSwapSpreadIndexAsInterestRateIndex(QlSwapSpreadIndex *o);-  QlSwapSpreadIndex* qlSwapSpreadIndex(const char* familyName, QlSwapIndex* swapIndex1, QlSwapIndex* swapIndex2, double gearing1, double gearing2, char **e);--  QlFloatingRateCoupon* qlCappedFlooredCmsCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapIndex* index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, char **e);--  void qlFreeDigitalReplication(QlDigitalReplication *o);-  QlDigitalReplication* qlDigitalReplication(int type, double gap, char **e);-  int qlDigitalReplicationType(QlDigitalReplication* o);-  double qlDigitalReplicationGap(QlDigitalReplication* o);--  void qlFreeDigitalCmsCoupon(QlDigitalCmsCoupon *o);-  QlDigitalCoupon* qlDigitalCmsCouponAsDigitalCoupon(QlDigitalCmsCoupon *o);-  QlDigitalCmsCoupon* qlDigitalCmsCoupon(QlCmsCoupon* underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication* replication, int nakedOption, char **e);--  Leg* qlDigitalCmsLeg(Schedule* schedule, QlSwapIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, char **e);-  Leg* qlDigitalIborLeg(Schedule*, QlIborIndex*, unsigned, double*, DayCounter*, int, unsigned, unsigned*, unsigned, double*, unsigned, double*, int, unsigned, double*, int, int, unsigned, double*, unsigned, double*, int, int, unsigned, double*, QlDigitalReplication*, int, char **e);-  Leg* qlMultipleResetsLeg(Schedule*, QlIborIndex*, unsigned, unsigned, double*, DayCounter*, int, Calendar*, int, unsigned, unsigned*, unsigned, double*, unsigned, double*, unsigned, double*, int, int, Calendar*, int, int, int, char **e);--  void qlFreeVarianceSwap(QlVarianceSwap *o);-  QlInstrument* qlVarianceSwapAsInstrument(QlVarianceSwap *o);-  QlVarianceSwap* qlVarianceSwap(int position, double strike, double notional, int startDate, int maturityDate, char **e);-  double qlVarianceSwapVariance(QlVarianceSwap* o, char **e);--  void qlFreeVarianceOption(QlVarianceOption *o);-  QlInstrument* qlVarianceOptionAsInstrument(QlVarianceOption *o);-  QlVarianceOption* qlVarianceOption(QlPayoff* payoff, double notional, int startDate, int maturityDate, char **e);--  void qlFreeCommodity(QlCommodity *o);-  QlInstrument* qlCommodityAsInstrument(QlCommodity *o);-  void qlFreeEnergyCommodity(QlEnergyCommodity *o);-  QlCommodity* qlEnergyCommodityAsCommodity(QlEnergyCommodity *o);--  /* Commodity base-level getters. Each output array needs its own c2hs `preArray-` length cell,-     even though arrays returned by one call have equal lengths. */-  void qlCommodityAddPricingError(QlCommodity *o, int level, char *error, char *detail);-  void qlCommoditySecondaryCostAmounts(QlCommodity *o, unsigned *len, char ***keys,-      unsigned *len2, double **amounts, unsigned *len3, Currency ***currencies, char **e);-  void qlCommodityPricingErrors(QlCommodity *o, unsigned *len, int **levels,-      unsigned *len2, char ***errors, unsigned *len3, char ***details, char **e);--  /* EnergyCommodity -- quantity() is pure virtual upstream; one shim covers every leaf. */-  double qlEnergyCommodityQuantity(QlEnergyCommodity *o, CommodityType **outCt, UnitOfMeasure **outUom, char **e);--  /* EnergyFuture. secondaryCosts is 5 c2hs-marshalled arrays (keys/isUnitCost/amounts/currencies/-     uoms), each an independent `withXArray*&` clause -- c2hs emits one length parameter per array-     clause even though all 5 always carry the same Haskell-side length, so 4 of the 5 `unsigned`s-     below are deliberately unnamed (same convention as qlCompositeInstrument's `unsigned, double-     *coeff` above) and only the first (scLen) is read. */-  QlEnergyFuture* qlEnergyFuture(int buySell,-      CommodityType *qCt, UnitOfMeasure *qUom, double qAmount,-      double tpAmount, Currency *tpCcy, UnitOfMeasure *tpUom,-      QlCommodityIndex *index, CommodityType *commodityType,-      unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,-      unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,-      char **e);-  void qlFreeEnergyFuture(QlEnergyFuture *o);--  /* EnergySwap -- binds no constructor (see qlaux.h); base-level getters generalized over both-     leaves below. */-  void qlFreeEnergySwap(QlEnergySwap *o);-  QlEnergyCommodity* qlEnergySwapAsEnergyCommodity(QlEnergySwap *o);-  void qlEnergySwapDailyPositions(QlEnergySwap *o, unsigned *len, int **dates,-      unsigned *len2, double **quantityAmounts, unsigned *len3, double **payLegPrices,-      unsigned *len4, double **receiveLegPrices, unsigned *len5, double **riskDeltas,-      unsigned *len6, int **unrealized, char **e);-  void qlEnergySwapPaymentCashFlows(QlEnergySwap *o, unsigned *len, QlCommodityCashFlow ***out, char **e);--  /* EnergyVanillaSwap. pricingPeriods is 6 parallel arrays (start/end/payment dates, quantity-     type/uom/amount); like secondaryCosts above, only the first length parameter of each group-     (ppLen, scLen) is read. */-  void qlFreeEnergyVanillaSwap(QlEnergyVanillaSwap *o);-  QlEnergySwap* qlEnergyVanillaSwapAsEnergySwap(QlEnergyVanillaSwap *o);-  QlEnergyVanillaSwap* qlEnergyVanillaSwap(int payer, Calendar *calendar,-      double fixedPriceAmount, Currency *fixedPriceCurrency, UnitOfMeasure *fixedPriceUnitOfMeasure,-      QlCommodityIndex *index, Currency *payCurrency, Currency *receiveCurrency,-      unsigned ppLen, int *ppStartDates, unsigned, int *ppEndDates, unsigned, int *ppPaymentDates,-      unsigned, CommodityType **ppTypes, unsigned, UnitOfMeasure **ppUoms, unsigned, double *ppAmounts,-      CommodityType *commodityType,-      unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,-      unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,-      QlYieldTermStructure *payLegTS, QlYieldTermStructure *receiveLegTS, QlYieldTermStructure *discountTS,-      char **e);--  /* EnergyBasisSwap -- same pricingPeriods/secondaryCosts array-group shape as EnergyVanillaSwap. */-  void qlFreeEnergyBasisSwap(QlEnergyBasisSwap *o);-  QlEnergySwap* qlEnergyBasisSwapAsEnergySwap(QlEnergyBasisSwap *o);-  QlEnergyBasisSwap* qlEnergyBasisSwap(Calendar *calendar,-      QlCommodityIndex *spreadIndex, QlCommodityIndex *payIndex, QlCommodityIndex *receiveIndex,-      int spreadToPayLeg, Currency *payCurrency, Currency *receiveCurrency,-      unsigned ppLen, int *ppStartDates, unsigned, int *ppEndDates, unsigned, int *ppPaymentDates,-      unsigned, CommodityType **ppTypes, unsigned, UnitOfMeasure **ppUoms, unsigned, double *ppAmounts,-      double basisAmount, Currency *basisCurrency, UnitOfMeasure *basisUnitOfMeasure,-      CommodityType *commodityType,-      unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,-      unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,-      QlYieldTermStructure *payLegTS, QlYieldTermStructure *receiveLegTS, QlYieldTermStructure *discountTS,-      char **e);--  /* CommodityCashFlow -- a standalone CashFlow leaf, never Haskell-constructed (only ever produced-     by EnergySwap::paymentCashFlows()). */-  void qlFreeCommodityCashFlow(QlCommodityCashFlow *o);-  QlCashFlow *qlCommodityCashFlowAsCashFlow(QlCommodityCashFlow *o);-  double qlCommodityCashFlowDiscountedAmount(QlCommodityCashFlow *o, Currency **outCcy, char **e);-  double qlCommodityCashFlowUndiscountedAmount(QlCommodityCashFlow *o, Currency **outCcy, char **e);-  double qlCommodityCashFlowDiscountedPaymentAmount(QlCommodityCashFlow *o, Currency **outCcy, char **e);-  double qlCommodityCashFlowUndiscountedPaymentAmount(QlCommodityCashFlow *o, Currency **outCcy, char **e);-  double qlCommodityCashFlowDiscountFactor(QlCommodityCashFlow *o);-  double qlCommodityCashFlowPaymentDiscountFactor(QlCommodityCashFlow *o);-  int qlCommodityCashFlowFinalized(QlCommodityCashFlow *o);--  /* CommodityPricingHelper::createPricingPeriods */-  void qlCreatePricingPeriods(int startDate, int endDate, CommodityType *qCt, UnitOfMeasure *qUom, double qAmount,-      int deliverySchedule, int qtyPeriodicity, PaymentTerm *paymentTerm,-      unsigned *len, int **ppStartDates, unsigned *len2, int **ppEndDates, unsigned *len3, int **ppPaymentDates,-      unsigned *len4, CommodityType ***ppTypes, unsigned *len5, UnitOfMeasure ***ppUoms, unsigned *len6, double **ppAmounts,-      char **e);-  /* YoYInflationCapFloor -- constructed directly at the given Type (Cap/Floor/Collar are thin-     ctor-only subclasses upstream with no logic of their own, so there's no need to touch them). */-  QlYoYInflationCapFloor *qlYoYInflationCap(Leg *yoyLeg, unsigned exerciseRatesLen, double *exerciseRates, char **e);-  QlYoYInflationCapFloor *qlYoYInflationFloor(Leg *yoyLeg, unsigned exerciseRatesLen, double *exerciseRates, char **e);-  QlYoYInflationCapFloor *qlYoYInflationCollar(Leg *yoyLeg, unsigned capRatesLen, double *capRates,-      unsigned floorRatesLen, double *floorRates, char **e);-  void qlFreeYoYInflationCapFloor(QlYoYInflationCapFloor *o);-  QlInstrument *qlYoYInflationCapFloorAsInstrument(QlYoYInflationCapFloor *o);-  double qlYoYInflationCapFloorAtmRate(QlYoYInflationCapFloor *o, QlYieldTermStructure *discountCurve, char **e);-  QlYoYInflationCapFloor *qlYoYInflationCapFloorOptionlet(QlYoYInflationCapFloor *o, unsigned n, char **e);--  /* CPICapFloor -- a single cumulative option, unlike YoYInflationCapFloor; no impliedVolatility-     (no vol-driven engine exists for it in QL 1.43, see qlInterpolatingCPICapFloorEngine below). */-  QlCPICapFloor *qlCPICapFloor(int type, double nominal, int startDate, double baseCPI, int maturity,-      Calendar *fixCalendar, int fixConvention, Calendar *payCalendar, int payConvention, double strike,-      QlZeroInflationIndex *index, int observationLagLen, int observationLagUnit, int observationInterpolation,-      char **e);-  void qlFreeCPICapFloor(QlCPICapFloor *o);-  QlInstrument *qlCPICapFloorAsInstrument(QlCPICapFloor *o);--  // ql/experimental/credit -- portfolio credit scaffolding (Pool/Issuer/Basket/loss models) plus-  // the SyntheticCDO/NthToDefault instruments built on it. Folded in here rather than kept in a-  // dedicated qlCredit.{h,cpp} pair -- too small to justify its own source files.--  // ql/experimental/credit/defaultprobabilitykey.hpp -- only the NorthAmericaCorpDefaultKey-  // constructor is bound; DefaultProbKey itself has no public constructor of its own upstream.-  DefaultProbKey* qlNorthAmericaCorpDefaultKey(Currency* currency, int seniority, int graceFailureToPayLen, int graceFailureToPayUnit, double amountFailure, int restructuringType, char **e);-  void qlFreeDefaultProbKey(DefaultProbKey *o);--  // ql/experimental/credit/issuer.hpp -- only the key_curve_pair-vector constructor (empty-  // DefaultEventSet) is bound.-  Issuer* qlIssuer(unsigned probabilitiesLen, DefaultProbKey** keys, QlDefaultProbabilityTermStructure** curves, char **e);-  void qlFreeIssuer(Issuer *o);--  // ql/experimental/credit/pool.hpp -- Pool::add is looped over internally; no add mutator is-  // exposed to Haskell.-  QlPool* qlPool(unsigned namesLen, char** names, Issuer** issuers, DefaultProbKey** keys, char **e);-  void qlFreePool(QlPool *o);--  // ql/experimental/credit/basket.hpp -- the loss model is a constructor argument here; the-  // shim calls Basket::setLossModel internally, so no setter is exposed to Haskell.-  QlBasket* qlBasket(int refDate, unsigned namesLen, char** names, double* notionals, QlPool* pool, double attachmentRatio, double detachmentRatio, QlClaim* claim, QlDefaultLossModel* lossModel, char **e);-  void qlFreeBasket(QlBasket *o);-  double qlBasketNotional(QlBasket* o, char **e);-  // Bound early (ahead of the rest of Basket's risk-output surface) to give this step's own-  // test a discriminating check that the loss model actually wired up; the remaining outputs-  // (percentile, expectedShortfall, lossDistribution, ...) are a separate step.-  double qlBasketExpectedTrancheLoss(QlBasket* o, int d, char **e);-  // Identical to qlBasket -- QuantLib's own Basket doesn't distinguish which DefaultLossModel-  // subclass it holds. This entry point exists only so the Haskell side can bind its result as-  // the distinct DigitalBasket type (see QuantLib/Internal/Type.hs's CREDIT comment), which is-  // the only basket type qlNthToDefault accepts: GaussianLHPLossModel-backed baskets (built via-  // qlBasket) don't implement the probAtLeastNEvents/probsBeingNthEvent virtuals-  // IntegralNtdEngine needs, and ConstantLossModel-backed baskets don't implement-  // expectedTrancheLoss -- QL_FAILs at runtime either way, caught here at compile time instead.-  QlBasket* qlDigitalBasket(int refDate, unsigned namesLen, char** names, double* notionals, QlPool* pool, double attachmentRatio, double detachmentRatio, QlClaim* claim, QlDefaultLossModel* lossModel, char **e);--  // Loss-model-agnostic: basket state, not delegated to the loss model.-  double qlBasketRemainingNotional(QlBasket* o, int d, char **e);-  double qlBasketRecoveryRate(QlBasket* o, int d, unsigned iName, char **e);--  // Tranche-loss outputs -- implemented by GaussianLHPLossModel.-  double qlBasketProbOverLoss(QlBasket* o, int d, double lossFraction, char **e);-  double qlBasketPercentile(QlBasket* o, int d, double prob, char **e);-  double qlBasketExpectedShortfall(QlBasket* o, int d, double prob, char **e);--  // Digital-loss outputs -- implemented by ConstantLossModel.-  double qlBasketDefaultCorrelation(QlBasket* o, int d, unsigned iName, unsigned jName, char **e);-  double qlBasketProbAtLeastNEvents(QlBasket* o, unsigned n, int d, char **e);--  // ql/experimental/credit/gaussianlhplossmodel.hpp -- only the Handle<Quote> correlation-  // overload is bound, per the std::variant/Handle<Quote> convention (a caller with a bare-  // number gets a simpleQuote for free).-  QlDefaultLossModel* qlGaussianLHPLossModel(QlQuote* correlQuote, unsigned recoveriesLen, double* recoveries, char **e);-  void qlFreeDefaultLossModel(QlDefaultLossModel *o);--  // ql/experimental/credit/syntheticcdo.hpp -- notional is ext::optional<Real>; haveNotional-  // selects between the "leveraged off basket tranche notional" default (0) and an explicit-  // override notional.-  QlSyntheticCDO* qlSyntheticCDO(QlBasket* basket, int side, Schedule* schedule, double upfrontRate, double runningRate, DayCounter* dayCounter, int paymentConvention, int haveNotional, double notional, char **e);-  void qlFreeSyntheticCDO(QlSyntheticCDO *o);-  QlInstrument* qlSyntheticCDOAsInstrument(QlSyntheticCDO *o);-  double qlSyntheticCDOFairPremium(QlSyntheticCDO* o, char **e);-  double qlSyntheticCDOFairUpfrontPremium(QlSyntheticCDO* o, char **e);-  double qlSyntheticCDOPremiumValue(QlSyntheticCDO* o, char **e);-  double qlSyntheticCDOProtectionValue(QlSyntheticCDO* o, char **e);-  double qlSyntheticCDOPremiumLegNPV(QlSyntheticCDO* o, char **e);-  double qlSyntheticCDOProtectionLegNPV(QlSyntheticCDO* o, char **e);-  double qlSyntheticCDORemainingNotional(QlSyntheticCDO* o, char **e);-  // leverageFactor() is skipped -- a constructor echo (notional / basket tranche notional).-  double qlSyntheticCDOImplicitCorrelation(QlSyntheticCDO* o, unsigned recoveriesLen, double* recoveries, QlYieldTermStructure* discountCurve, double targetNPV, double accuracy, char **e);--  // ql/experimental/credit/constantlosslatentmodel.hpp -- ConstantLossModel<CopulaPolicy>, only-  // the Handle<Quote>/nVariables (one-factor) constructor. tOrdersLen == 0 selects-  // GaussianCopulaPolicy; tOrdersLen > 0 selects TCopulaPolicy with these degrees of freedom-  // (see qlTermStructureAux.h for the exact-length requirement). The dispatch itself lives in-  // qlTermStructureAux.cpp, alongside the other DefaultProbabilityTermStructure/credit dispatch-  // already there, per AGENTS.md's rule that a runtime-enum-selects-a-template-argument switch-  // belongs in its domain's Aux TU.-  QlDefaultLossModel* qlConstantLossModel(QlQuote* correlQuote, unsigned recoveriesLen, double* recoveries, int integralType, unsigned tOrdersLen, int* tOrders, char **e);--  // ql/experimental/credit/nthtodefault.hpp -- only fairPremium() is bound; premium/nominal/-  // dayCounter/side/rank/basketSize are all constructor echoes.-  QlNthToDefault* qlNthToDefault(QlBasket* basket, unsigned n, int side, Schedule* premiumSchedule, double upfrontRate, double premiumRate, DayCounter* dayCounter, double nominal, int settlePremiumAccrual, char **e);-  void qlFreeNthToDefault(QlNthToDefault *o);-  QlInstrument* qlNthToDefaultAsInstrument(QlNthToDefault *o);-  double qlNthToDefaultFairPremium(QlNthToDefault* o, char **e);--  // ql/instruments/bonds/btp.hpp -- RendistatoBasket/RendistatoCalculator, QuantLib's own-  // BTP-vs-swap-curve relative-value tool for the Italian bond market. size/btps/-  // cleanPriceQuotes/outstandings/weights/outstanding on RendistatoBasket are all constructor-  // echoes and are not bound; only the basket constructor itself is needed to build a-  // RendistatoCalculator.-  QlRendistatoBasket *qlRendistatoBasket(unsigned btpsLen, QlBTP **btps, unsigned outstandingsLen, double *outstandings, unsigned quotesLen, QlQuote **cleanPriceQuotes, char **e);-  void qlFreeRendistatoBasket(QlRendistatoBasket *o);--  // euriborTenor/euriborForwardCurve build the Euribor index RendistatoCalculator needs-  // internally (for its ladder of comparison swaps); Euribor itself is never exposed back to-  // Haskell, since nothing calls it back -- constructed transiently here exactly like-  // GarmanKlass's IntervalPrice.-  QlRendistatoCalculator *qlRendistatoCalculator(QlRendistatoBasket *basket, int euriborTenorLen, int euriborTenorUnit, QlYieldTermStructure *euriborForwardCurve, QlYieldTermStructure *discountCurve, char **e);-  void qlFreeRendistatoCalculator(QlRendistatoCalculator *o);-  double qlRendistatoCalculatorYield(QlRendistatoCalculator *o, char **e);-  double qlRendistatoCalculatorDuration(QlRendistatoCalculator *o, char **e);-  void qlRendistatoCalculatorYields(QlRendistatoCalculator *o, unsigned *len, double **out, char **e);-  void qlRendistatoCalculatorDurations(QlRendistatoCalculator *o, unsigned *len, double **out, char **e);-  void qlRendistatoCalculatorSwapLengths(QlRendistatoCalculator *o, unsigned *len, double **out, char **e);-  void qlRendistatoCalculatorSwapRates(QlRendistatoCalculator *o, unsigned *len, double **out, char **e);-  void qlRendistatoCalculatorSwapYields(QlRendistatoCalculator *o, unsigned *len, double **out, char **e);-  void qlRendistatoCalculatorSwapDurations(QlRendistatoCalculator *o, unsigned *len, double **out, char **e);-  QlVanillaSwap *qlRendistatoCalculatorEquivalentSwap(QlRendistatoCalculator *o, char **e);-  double qlRendistatoCalculatorEquivalentSwapRate(QlRendistatoCalculator *o, char **e);-  double qlRendistatoCalculatorEquivalentSwapYield(QlRendistatoCalculator *o, char **e);-  double qlRendistatoCalculatorEquivalentSwapDuration(QlRendistatoCalculator *o, char **e);-  double qlRendistatoCalculatorEquivalentSwapLength(QlRendistatoCalculator *o, char **e);-  double qlRendistatoCalculatorEquivalentSwapSpread(QlRendistatoCalculator *o, char **e);-  QlQuote *qlRendistatoEquivalentSwapLengthQuote(QlRendistatoCalculator *o, char **e);-  QlQuote *qlRendistatoEquivalentSwapSpreadQuote(QlRendistatoCalculator *o, char **e);+    struct QlAdditionalResult **out, QlError **e);+  void qlFreeAdditionalResults(unsigned len, struct QlAdditionalResult *out);++  void qlInstrumentSetPricingEngine(QlInstrument *instr, QlPricingEngine *eng,+    QlError **e);+  QlInstrument* qlPerpetualFutures(int payoffType, int fundingType,+    int fundingFrequencyLength, int fundingFrequencyUnit, Calendar* cal,+    DayCounter* dc, QlError **e);+  double qlInstrumentNPV(QlInstrument *instr, QlError **e);+  void qlFreeInstrument(QlInstrument *instr);+  QlInstrument* qlCompositeInstrument(unsigned instrLen, QlInstrument **instrs, unsigned cLen, double *coeff, QlError **e);+  double qlInstrumentErrorEstimate(QlInstrument* o, QlError **e);+  int qlInstrumentIsExpired(QlInstrument* o, QlError **e);+  int qlInstrumentValuationDate(QlInstrument* o, QlError **e);+  void qlFreePayoff(QlPayoff *o);+  void qlFreeBasketPayoff(QlBasketPayoff *o);+  QlPayoff* qlBasketPayoffAsPayoff(QlBasketPayoff *o);+  void qlFreeStrikedTypePayoff(QlStrikedTypePayoff *o);+  QlTypePayoff* qlStrikedTypePayoffAsTypePayoff(QlStrikedTypePayoff *o);+  void qlFreeTypePayoff(QlTypePayoff *o);+  QlPayoff* qlTypePayoffAsPayoff(QlTypePayoff *o);+  void qlFreePercentageStrikePayoff(QlPercentageStrikePayoff *o);+  QlStrikedTypePayoff* qlPercentageStrikePayoffAsStrikedTypePayoff(QlPercentageStrikePayoff *o);+  void qlFreePlainVanillaPayoff(QlPlainVanillaPayoff *o);+  QlStrikedTypePayoff* qlPlainVanillaPayoffAsStrikedTypePayoff(QlPlainVanillaPayoff *o);++  // Native payoffs retain shared callback ownership for their complete lifetime.+  QlPayoff* qlPayoffFromFunction(const char* name, const char* description,+    QlCallback* fn, QlError **e);+  // accumulate() takes the whole underlying-state vector at once, so this one crosses the+  // language boundary once per evaluation, not once per component.+  QlBasketPayoff* qlBasketPayoffFromFunction(QlPayoff* base,+    QlCallback* fn, QlError **e);+  // As qlPayoffFromFunction, but a real StrikedTypePayoff: the (type, strike) pair is advisory --+  // it does not define the payoff, it is what QuantLib's FD vanilla engines downcast to reach for+  // when sizing their mesher. description() comes from StrikedTypePayoff itself, so unlike+  // qlPayoffFromFunction there is no description argument.+  QlStrikedTypePayoff* qlStrikedPayoffFromFunction(int type, double strike, const char* name,+    QlCallback* fn, QlError **e);++  QlStrikedTypePayoff* qlAssetOrNothingPayoff(int type, double strike, QlError **e);+  QlBasketPayoff* qlAverageBasketPayoff(QlPayoff* p, unsigned n, QlError **e);+  QlBasketPayoff* qlAverageBasketPayoff1(QlPayoff* p, unsigned aLen, double* a, QlError **e);+  QlStrikedTypePayoff* qlCashOrNothingPayoff(int type, double strike, double cashPayoff, QlError **e);+  QlPayoff* qlDoubleStickyRatchetPayoff(double type1, double type2, double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e);+  QlTypePayoff* qlFloatingTypePayoff(int type, QlError **e);+  QlPayoff* qlForwardTypePayoff(int type, double strike, QlError **e);+  QlStrikedTypePayoff* qlGapPayoff(int type, double strike, double secondStrike, QlError **e);+  QlBasketPayoff* qlMaxBasketPayoff(QlPayoff* p, QlError **e);+  QlBasketPayoff* qlMinBasketPayoff(QlPayoff* p, QlError **e);+  QlPercentageStrikePayoff* qlPercentageStrikePayoff(int type, double moneyness, QlError **e);+  QlPlainVanillaPayoff* qlPlainVanillaPayoff(int type, double strike, QlError **e);+  QlPayoff* qlRatchetMaxPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e);+  QlPayoff* qlRatchetMinPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e);+  QlPayoff* qlRatchetPayoff(double gearing1, double gearing2, double spread1, double spread2, double initialValue, double accrualFactor, QlError **e);+  QlBasketPayoff* qlSpreadBasketPayoff(QlPayoff* p, QlError **e);+  QlPayoff* qlStickyMaxPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e);+  QlPayoff* qlStickyMinPayoff(double gearing1, double gearing2, double gearing3, double spread1, double spread2, double spread3, double initialValue1, double initialValue2, double accrualFactor, QlError **e);+  QlPayoff* qlStickyPayoff(double gearing1, double gearing2, double spread1, double spread2, double initialValue, double accrualFactor, QlError **e);+  QlStrikedTypePayoff* qlSuperFundPayoff(double strike, double secondStrike, QlError **e);+  QlStrikedTypePayoff* qlSuperSharePayoff(double strike, double secondStrike, double cashPayoff, QlError **e);++  void qlFreeAmericanExercise(QlAmericanExercise *o);+  QlExercise* qlAmericanExerciseAsExercise(QlAmericanExercise *o);+  void qlFreeBermudanExercise(QlBermudanExercise *o);+  QlExercise* qlBermudanExerciseAsExercise(QlBermudanExercise *o);+  void qlFreeEuropeanExercise(QlEuropeanExercise *o);+  QlExercise* qlEuropeanExerciseAsExercise(QlEuropeanExercise *o);+  void qlFreeExercise(QlExercise *o);+  QlAmericanExercise* qlAmericanExercise(int earliestDate, int latestDate, int payoffAtExpiry, QlError **e);+  QlBermudanExercise* qlBermudanExercise(unsigned datesLen, int *dates, int payoffAtExpiry, QlError **e);+  QlExercise* qlEarlyExercise(int type, int payoffAtExpiry, QlError **e);+  QlExercise* qlExercise(int type, QlError **e);+  QlEuropeanExercise* qlEuropeanExercise(int date, QlError **e);++  QlAmericanExercise* qlAmericanExercise1(int latestDate, int payoffAtExpiry, QlError **e);+  QlSwingExercise* qlSwingExercise(unsigned datesLen, int* dates, unsigned secLen, unsigned* seconds, QlError **e);+  QlSwingExercise* qlSwingExercise1(int from, int to, unsigned stepSizeSecs, QlError **e);+  QlExercise* qlSwingExerciseAsExercise(QlSwingExercise *o);++  void qlFreeRebatedExercise(QlRebatedExercise *o);+  QlExercise* qlRebatedExerciseAsExercise(QlRebatedExercise *o);+  QlRebatedExercise* qlRebatedExercise(QlExercise* exercise, double rebate, unsigned rebateSettlementDays, Calendar* rebatePaymentCalendar, int rebatePaymentConvention, QlError **e);++  void qlFreeCapFloor(QlCapFloor *o);+  QlInstrument* qlCapFloorAsInstrument(QlCapFloor *o);+  QlCapFloor* qlCap(Leg* floatingLeg, unsigned exerciseRatesLen, double* exerciseRates, QlError **e);+  QlCapFloor* qlCollar(Leg* floatingLeg, unsigned capRatesLen, double* capRates, unsigned floorRatesLen, double* floorRates, QlError **e);+  QlCapFloor* qlFloor(Leg* floatingLeg, unsigned exerciseRatesLen, double* exerciseRates, QlError **e);+  double qlCapFloorAtmRate(QlCapFloor* o, QlYieldTermStructure* discountCurve, QlError **e);+  double qlCapFloorImpliedVolatility(QlCapFloor* o, double price, QlYieldTermStructure* disc, double guess, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, int type, double displacement, QlError **e);+  QlCapFloor* qlCapFloorOptionlet(QlCapFloor* o, unsigned n, QlError **e);++  void qlFreeCallability(QlCallability *o);+  QlCallability* qlCallability(double price, int priceType, int type, int date, QlError **e);+  void qlFreeBondForward(QlBondForward *fwd);+  QlForward* qlBondForwardAsForward(QlBondForward *fwd);+  QlBondForward* qlBondForward(int valueDate, int maturityDate, int type, double strike, unsigned settlementDays, DayCounter* dayCounter, Calendar* calendar, int businessDayConvention, QlBond* fixedCouponBond, QlYieldTermStructure* discountCurve, QlYieldTermStructure* incomeDiscountCurve, QlError **e);+  double qlBondForwardCleanForwardPrice(QlBondForward* o, QlError **e);+  double qlBondForwardForwardPrice(QlBondForward* o, QlError **e);+  void qlFreeForward(QlForward *fwd);+  QlInstrument* qlForwardAsInstrument(QlForward *fwd);+  double qlForwardForwardValue(QlForward* o, QlError **e);+  InterestRate* qlForwardImpliedYield(QlForward* o, double underlyingSpotValue, double forwardValue, int settlementDate, int compoundingConvention, DayCounter* dayCounter, QlError **e);+  int qlForwardSettlementDate(QlForward* o, QlError **e);+  double qlForwardSpotIncome(QlForward* o, QlYieldTermStructure* incomeDiscountCurve, QlError **e);+  double qlForwardSpotValue(QlForward* o, QlError **e);+  void qlFreeForwardRateAgreement(QlForwardRateAgreement *fwd);+  QlInstrument* qlForwardRateAgreementAsInstrument(QlForwardRateAgreement *fwd);+  QlForwardRateAgreement* qlForwardRateAgreement(QlIborIndex* index, int valueDate, int maturityDate, int type, double strikeForwardRate, double notionalAmount, QlYieldTermStructure* discountCurve, QlError **e);++  InterestRate* qlForwardRateAgreementForwardRate(QlForwardRateAgreement* o, QlError **e);++  void qlFreeFxForward(QlFxForward *fwd);+  QlInstrument* qlFxForwardAsInstrument(QlFxForward *fwd);+  QlFxForward* qlFxForward(double sourceNominal, Currency* sourceCurrency, double targetNominal, Currency* targetCurrency, int maturityDate, int paySourceCurrency, unsigned settlementDays, Calendar* paymentCalendar, QlError **e);+  QlFxForward* qlFxForward1(double sourceNominal, Currency* sourceCurrency, Currency* targetCurrency, double forwardRate, int maturityDate, int paySourceCurrency, unsigned settlementDays, Calendar* paymentCalendar, QlError **e);+  double qlForwardRateAgreementAmount(QlForwardRateAgreement* o, QlError **e);+  double qlFxForwardForwardRate(QlFxForward* o);+  double qlFxForwardFairForwardRate(QlFxForward* o, QlError **e);+  double qlFxForwardNpvSourceCurrency(QlFxForward* o, QlError **e);+  double qlFxForwardNpvTargetCurrency(QlFxForward* o, QlError **e);++  void qlFreeSwap(QlSwap *o);+  QlInstrument* qlSwapAsInstrument(QlSwap *o);+  void qlFreeFixedVsFloatingSwap(QlFixedVsFloatingSwap *o);+  QlSwap* qlFixedVsFloatingSwapAsSwap(QlFixedVsFloatingSwap *o);+  void qlFreeVanillaSwap(QlVanillaSwap *o);+  QlFixedVsFloatingSwap* qlVanillaSwapAsFixedVsFloatingSwap(QlVanillaSwap *o);+  void qlFreeNonstandardSwap(QlNonstandardSwap *o);+  QlSwap* qlNonstandardSwapAsSwap(QlNonstandardSwap *o);+  void qlFreeFloatFloatSwap(QlFloatFloatSwap *o);+  QlSwap* qlFloatFloatSwapAsSwap(QlFloatFloatSwap *o);+  void qlFreeBMASwap(QlBMASwap *o);+  QlSwap* qlBMASwapAsSwap(QlBMASwap *o);+  void qlFreeOvernightIndexedSwap(QlOvernightIndexedSwap *o);+  QlFixedVsFloatingSwap* qlOvernightIndexedSwapAsFixedVsFloatingSwap(QlOvernightIndexedSwap *o);+  void qlFreeAssetSwap(QlAssetSwap *o);+  QlSwap* qlAssetSwapAsSwap(QlAssetSwap *o);+  void qlFreeZeroCouponInflationSwap(QlZeroCouponInflationSwap *o);+  QlSwap* qlZeroCouponInflationSwapAsSwap(QlZeroCouponInflationSwap *o);+  QlZeroCouponInflationSwap* qlZeroCouponInflationSwap(int type, double nominal, int startDate, int maturity, Calendar* cal, int paymentConvention, DayCounter* dayCounter, double fixedRate, QlZeroInflationIndex* index, int obsLagLen, int obsLagUnit, int observationInterpolation, int adjustInfObsDates, Calendar* infCalendar, int infConvention, QlError **e);+  double qlZeroCouponInflationSwapFairRate(QlZeroCouponInflationSwap* o, QlError **e);+  void qlFreeYearOnYearInflationSwap(QlYearOnYearInflationSwap *o);+  QlSwap* qlYearOnYearInflationSwapAsSwap(QlYearOnYearInflationSwap *o);+  QlYearOnYearInflationSwap* qlYearOnYearInflationSwap(int type, double nominal, Schedule* fixedSchedule, double fixedRate, DayCounter* fixedDayCount, Schedule* yoySchedule, QlYoYInflationIndex* yoyIndex, int obsLagLen, int obsLagUnit, int interpolation, double spread, DayCounter* yoyDayCount, Calendar* paymentCalendar, int paymentConvention, QlError **e);+  double qlYearOnYearInflationSwapFairRate(QlYearOnYearInflationSwap* o, QlError **e);+  double qlYearOnYearInflationSwapFairSpread(QlYearOnYearInflationSwap* o, QlError **e);+  void qlFreeCPISwap(QlCPISwap *o);+  QlSwap* qlCPISwapAsSwap(QlCPISwap *o);+  QlCPISwap* qlCPISwap(int type, double nominal, int subtractInflationNominal, double spread, DayCounter* floatDayCount, Schedule* floatSchedule, int floatRoll, unsigned fixingDays, QlIborIndex* floatIndex, double fixedRate, double baseCPI, DayCounter* fixedDayCount, Schedule* fixedSchedule, int fixedRoll, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* fixedIndex, int observationInterpolation, double inflationNominal, QlError **e);+  double qlCPISwapFairRate(QlCPISwap* o, QlError **e);+  double qlCPISwapFairSpread(QlCPISwap* o, QlError **e);+  void qlFreeZeroCouponSwap(QlZeroCouponSwap *o);+  QlSwap* qlZeroCouponSwapAsSwap(QlZeroCouponSwap *o);+  QlZeroCouponSwap* qlZeroCouponSwap(int type, double baseNominal, int startDate, int maturityDate, double fixedPayment, QlIborIndex* iborIndex, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, QlError **e);+  QlZeroCouponSwap* qlZeroCouponSwap1(int type, double baseNominal, int startDate, int maturityDate, double fixedRate, DayCounter* fixedDayCounter, QlIborIndex* iborIndex, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, QlError **e);+  double qlZeroCouponSwapFairFixedPayment(QlZeroCouponSwap* o, QlError **e);+  double qlZeroCouponSwapFairFixedRate(QlZeroCouponSwap* o, DayCounter* dayCounter, QlError **e);+  QlOvernightIndexedSwap* qlOvernightIndexedSwap(int type, double nominal, Schedule* schedule, double fixedRate, DayCounter* fixedDC, QlOvernightIndex* overnightIndex, double spread, int paymentLag, int paymentAdjustment, Calendar* paymentCalendar, int telescopicValueDates, int averagingMethod, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift, int roundingPrecision, QlError **e);+  QlOvernightIndexedSwap* qlOvernightIndexedSwap1(int type, unsigned nominalsLen, double* nominals, Schedule* schedule, double fixedRate, DayCounter* fixedDC, QlOvernightIndex* overnightIndex, double spread, int paymentLag, int paymentAdjustment, Calendar* paymentCalendar, int telescopicValueDates, int averagingMethod, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift, int roundingPrecision, QlError **e);+  QlSwap* qlSwap1(unsigned legsLen, Leg** legs, unsigned payerLen, int *payer, QlError **e);+  QlAssetSwap* qlAssetSwap(int payBondCoupon, QlBond* bond, double bondCleanPrice, QlIborIndex* iborIndex, double spread, Schedule* floatSchedule, DayCounter* floatingDayCount, int parAssetSwap, double gearing, double nonParRepayment, int dealMaturity, QlError **e);+  QlBMASwap* qlBMASwap(int type, double nominal, Schedule* liborSchedule, double liborFraction, double liborSpread, QlIborIndex* liborIndex, DayCounter* liborDayCount, Schedule* bmaSchedule, QlBMAIndex* bmaIndex, DayCounter* bmaDayCount, QlError **e);+  QlVanillaSwap* qlVanillaSwap(int type, double nominal, Schedule* fixedSchedule, double fixedRate, DayCounter* fixedDayCount, Schedule* floatSchedule, QlIborIndex* iborIndex, double spread, DayCounter* floatingDayCount, int paymentConvention, int useIndexedCoupons, QlError **e);+  QlNonstandardSwap* qlNonstandardSwap1(QlFixedVsFloatingSwap* v, QlError **e);+  QlNonstandardSwap* qlNonstandardSwap(int type, unsigned fixedNominalLen, double* fixedNominal, unsigned floatingNominalLen, double* floatingNominal, Schedule* fixedSchedule, unsigned fixedRateLen, double* fixedRate, DayCounter* fixedDayCount, Schedule* floatingSchedule, QlIborIndex* iborIndex, double gearing, double spread, DayCounter* floatingDayCount, int intermediateCapitalExchange, int finalCapitalExchange, int paymentConvention, int paymentLag, Calendar* paymentCalendar, QlError **e);+  QlNonstandardSwap* qlNonstandardSwap2(int type, unsigned fixedNominalLen, double* fixedNominal, unsigned floatingNominalLen, double* floatingNominal, Schedule* fixedSchedule, unsigned fixedRateLen, double* fixedRate, DayCounter* fixedDayCount, Schedule* floatingSchedule, QlIborIndex* iborIndex, unsigned gearingLen, double* gearing, unsigned spreadLen, double* spread, DayCounter* floatingDayCount, int intermediateCapitalExchange, int finalCapitalExchange, int paymentConvention, int paymentLag, Calendar* paymentCalendar, QlError **e);+  void qlNonstandardSwapFixedRate(QlNonstandardSwap* o, unsigned *len, double **out, QlError **e);+  QlFloatFloatSwap* qlFloatFloatSwap(int type, double nominal1, double nominal2, Schedule* schedule1, QlInterestRateIndex* index1, DayCounter* dayCount1, Schedule* schedule2, QlInterestRateIndex* index2, DayCounter* dayCount2, int intermediateCapitalExchange, int finalCapitalExchange, double gearing1, double spread1, double cappedRate1, double flooredRate1, double gearing2, double spread2, double cappedRate2, double flooredRate2, int paymentConvention1, int paymentConvention2, QlError **e);+  QlFloatFloatSwap* qlFloatFloatSwap2(int type, unsigned nominal1Len, double* nominal1, unsigned nominal2Len, double* nominal2, Schedule* schedule1, QlInterestRateIndex* index1, DayCounter* dayCount1, Schedule* schedule2, QlInterestRateIndex* index2, DayCounter* dayCount2, int intermediateCapitalExchange, int finalCapitalExchange, unsigned gearing1Len, double* gearing1, unsigned spread1Len, double* spread1, unsigned cappedRate1Len, double* cappedRate1, unsigned flooredRate1Len, double* flooredRate1, unsigned gearing2Len, double* gearing2, unsigned spread2Len, double* spread2, unsigned cappedRate2Len, double* cappedRate2, unsigned flooredRate2Len, double* flooredRate2, int paymentConvention1, int paymentConvention2, QlError **e);+  double qlFloatFloatSwapFairSpread1(QlFloatFloatSwap* o, QlError **e);+  double qlFloatFloatSwapFairSpread2(QlFloatFloatSwap* o, QlError **e);+  QlSwap* qlSwap(Leg* firstLeg, Leg* secondLeg, QlError **e);+  unsigned qlSwapNumberOfLegs(QlSwap* o, QlError **e);+  Leg* qlSwapLeg(QlSwap* o, unsigned j, QlError **e);+  Leg* qlFixedVsFloatingSwapFixedLeg(QlFixedVsFloatingSwap* o, QlError **e);+  Leg* qlFixedVsFloatingSwapFloatingLeg(QlFixedVsFloatingSwap* o, QlError **e);+  void qlFreeConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencySwap *o);+  QlSwap* qlConstNotionalCrossCurrencySwapAsSwap(QlConstNotionalCrossCurrencySwap *o);+  QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencySwap(Leg* firstLeg, Currency* firstLegCcy, Leg* secondLeg, Currency* secondLegCcy, QlError **e);+  QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencySwap1(unsigned legsLen, Leg** legs, unsigned payerLen, int* payer, unsigned currenciesLen, Currency** currencies, QlError **e);+  Currency* qlConstNotionalCrossCurrencySwapLegCurrency(QlConstNotionalCrossCurrencySwap* o, unsigned j, QlError **e);+  double qlConstNotionalCrossCurrencySwapInCcyLegBPS(QlConstNotionalCrossCurrencySwap* o, unsigned j, QlError **e);+  double qlConstNotionalCrossCurrencySwapInCcyLegNPV(QlConstNotionalCrossCurrencySwap* o, unsigned j, QlError **e);+  double qlConstNotionalCrossCurrencySwapNpvDateDiscounts(QlConstNotionalCrossCurrencySwap* o, unsigned j, QlError **e);++  void qlFreeConstNotionalCrossCurrencyBasisSwap(QlConstNotionalCrossCurrencyBasisSwap *o);+  QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencyBasisSwapAsConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencyBasisSwap *o);+  QlConstNotionalCrossCurrencyBasisSwap* qlConstNotionalCrossCurrencyBasisSwap(+    double payNominal, Currency* payCurrency, Schedule* paySchedule, QlIborIndex* payIndex, double paySpread, double payGearing,+    double recNominal, Currency* recCurrency, Schedule* recSchedule, QlIborIndex* recIndex, double recSpread, double recGearing,+    int payPaymentLag, int recPaymentLag,+    int payCompoundSpread, unsigned payLookbackDays, int payObservationShift, unsigned payLockoutDays, int payAveragingMethod,+    int recCompoundSpread, unsigned recLookbackDays, int recObservationShift, unsigned recLockoutDays, int recAveragingMethod,+    int telescopicValueDates, int useIndexedCoupons, int paymentLagOnNotionalExchanges, QlStubIndexSelection* payStub, QlStubIndexSelection* recStub, QlError **e);+  double qlConstNotionalCrossCurrencyBasisSwapFairPaySpread(QlConstNotionalCrossCurrencyBasisSwap* o, QlError **e);+  double qlConstNotionalCrossCurrencyBasisSwapFairRecSpread(QlConstNotionalCrossCurrencyBasisSwap* o, QlError **e);++  void qlFreeConstNotionalCrossCurrencyFixedVsFloatingSwap(QlConstNotionalCrossCurrencyFixedVsFloatingSwap *o);+  QlConstNotionalCrossCurrencySwap* qlConstNotionalCrossCurrencyFixedVsFloatingSwapAsConstNotionalCrossCurrencySwap(QlConstNotionalCrossCurrencyFixedVsFloatingSwap *o);+  QlConstNotionalCrossCurrencyFixedVsFloatingSwap* qlConstNotionalCrossCurrencyFixedVsFloatingSwap(+    int type, double fixedNominal, Currency* fixedCurrency, Schedule* fixedSchedule, double fixedRate,+    DayCounter* fixedDayCount, int fixedPaymentBdc, unsigned fixedPaymentLag, Calendar* fixedPaymentCalendar,+    double floatNominal, Currency* floatCurrency, Schedule* floatSchedule, QlIborIndex* floatIndex, double floatSpread,+    int floatPaymentBdc, unsigned floatPaymentLag, Calendar* floatPaymentCalendar,+    int telescopicValueDates, int floatCompoundSpread, unsigned floatLookbackDays, int floatObservationShift,+    unsigned floatLockoutDays, int floatAveragingMethod, int useIndexedCoupons, QlStubIndexSelection* floatStub, QlError **e);+  double qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairRate(QlConstNotionalCrossCurrencyFixedVsFloatingSwap* o, QlError **e);+  double qlConstNotionalCrossCurrencyFixedVsFloatingSwapFairSpread(QlConstNotionalCrossCurrencyFixedVsFloatingSwap* o, QlError **e);++  Leg* qlAssetSwapBondLeg(QlAssetSwap* o, QlError **e);+  Leg* qlAssetSwapFloatingLeg(QlAssetSwap* o, QlError **e);+  Leg* qlBMASwapBmaLeg(QlBMASwap* o, QlError **e);+  Leg* qlBMASwapLiborLeg(QlBMASwap* o, QlError **e);+  Leg* qlOvernightIndexedSwapOvernightLeg(QlOvernightIndexedSwap* o, QlError **e);+  double qlAssetSwapCleanPrice(QlAssetSwap* o, QlError **e);+  double qlAssetSwapFairCleanPrice(QlAssetSwap* o, QlError **e);+  double qlAssetSwapFairNonParRepayment(QlAssetSwap* o, QlError **e);+  double qlAssetSwapFairSpread(QlAssetSwap* o, QlError **e);+  double qlAssetSwapFloatingLegBPS(QlAssetSwap* o, QlError **e);+  double qlAssetSwapFloatingLegNPV(QlAssetSwap* o, QlError **e);+  double qlAssetSwapNonParRepayment(QlAssetSwap* o, QlError **e);+  int qlAssetSwapParSwap(QlAssetSwap* o, QlError **e);+  int qlAssetSwapPayBondCoupon(QlAssetSwap* o, QlError **e);+  double qlBMASwapBmaLegBPS(QlBMASwap* o, QlError **e);+  double qlBMASwapBmaLegNPV(QlBMASwap* o, QlError **e);+  double qlBMASwapFairLiborFraction(QlBMASwap* o, QlError **e);+  double qlBMASwapFairLiborSpread(QlBMASwap* o, QlError **e);+  double qlBMASwapLiborFraction(QlBMASwap* o, QlError **e);+  double qlBMASwapLiborLegBPS(QlBMASwap* o, QlError **e);+  double qlBMASwapLiborLegNPV(QlBMASwap* o, QlError **e);+  double qlOvernightIndexedSwapOvernightLegBPS(QlOvernightIndexedSwap* o, QlError **e);+  double qlOvernightIndexedSwapOvernightLegNPV(QlOvernightIndexedSwap* o, QlError **e);+  double qlSwapEndDiscounts(QlSwap* o, unsigned j, QlError **e);+  double qlSwapLegBPS(QlSwap* o, unsigned j, QlError **e);+  double qlSwapLegNPV(QlSwap* o, unsigned j, QlError **e);+  int qlSwapMaturityDate(QlSwap* o, QlError **e);+  double qlSwapNpvDateDiscount(QlSwap* o, QlError **e);+  int qlSwapStartDate(QlSwap* o, QlError **e);+  double qlSwapStartDiscounts(QlSwap* o, unsigned j, QlError **e);+  double qlFixedVsFloatingSwapFairRate(QlFixedVsFloatingSwap* o, QlError **e);+  double qlFixedVsFloatingSwapFairSpread(QlFixedVsFloatingSwap* o, QlError **e);+  double qlFixedVsFloatingSwapFixedLegBPS(QlFixedVsFloatingSwap* o, QlError **e);+  double qlFixedVsFloatingSwapFixedLegNPV(QlFixedVsFloatingSwap* o, QlError **e);+  double qlFixedVsFloatingSwapFloatingLegBPS(QlFixedVsFloatingSwap* o, QlError **e);+  double qlFixedVsFloatingSwapFloatingLegNPV(QlFixedVsFloatingSwap* o, QlError **e);++  void qlFreeEquityTotalReturnSwap(QlEquityTotalReturnSwap *o);+  QlSwap* qlEquityTotalReturnSwapAsSwap(QlEquityTotalReturnSwap *o);+  QlEquityTotalReturnSwap* qlEquityTotalReturnSwapIbor(int type, double nominal, Schedule* schedule, QlEquityIndex* equityIndex, QlIborIndex* interestRateIndex, DayCounter* dayCounter, double margin, double gearing, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, QlError **e);+  QlEquityTotalReturnSwap* qlEquityTotalReturnSwapOvernight(int type, double nominal, Schedule* schedule, QlEquityIndex* equityIndex, QlOvernightIndex* interestRateIndex, DayCounter* dayCounter, double margin, double gearing, Calendar* paymentCalendar, int paymentConvention, unsigned paymentDelay, QlError **e);+  double qlEquityTotalReturnSwapEquityLegNPV(QlEquityTotalReturnSwap* o, QlError **e);+  double qlEquityTotalReturnSwapInterestRateLegNPV(QlEquityTotalReturnSwap* o, QlError **e);+  double qlEquityTotalReturnSwapFairMargin(QlEquityTotalReturnSwap* o, QlError **e);++  void qlFreeCreditDefaultSwap(QlCreditDefaultSwap *o);+  QlInstrument* qlCreditDefaultSwapAsInstrument(QlCreditDefaultSwap *o);+  void qlFreeClaim(QlClaim *o);+  QlClaim* qlFaceValueAccrualClaim(QlBond* referenceSecurity, QlError **e);+  QlClaim* qlFaceValueClaim(QlError **e);+  QlCreditDefaultSwap* qlCreditDefaultSwap(int side, double notional, double spread, Schedule* schedule, int paymentConvention, DayCounter* dayCounter, int settlesAccrual, int paysAtDefaultTime, int protectionStart, QlClaim* x9, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int tradeDate, unsigned cashSettlementDays, QlError **e);+  QlCreditDefaultSwap* qlCreditDefaultSwap1(int side, double notional, double upfront, double spread, Schedule* schedule, int paymentConvention, DayCounter* dayCounter, int settlesAccrual, int paysAtDefaultTime, int protectionStart, int upfrontDate, QlClaim* x11, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int tradeDate, unsigned cashSettlementDays, QlError **e);+  QlOption* qlCdsOptionAsOption(QlCdsOption *o);+  void qlFreeCdsOption(QlCdsOption *o);+  double qlCreditDefaultSwapFairSpread(QlCreditDefaultSwap* o, QlError **e);+  double qlCreditDefaultSwapConventionalSpread(QlCreditDefaultSwap* o, double conventionalRecovery, QlYieldTermStructure* discountCurve, DayCounter* dayCounter, int model, QlError **e);+  double qlCreditDefaultSwapCouponLegBPS(QlCreditDefaultSwap* o, QlError **e);+  double qlCreditDefaultSwapCouponLegNPV(QlCreditDefaultSwap* o, QlError **e);+  Leg* qlCreditDefaultSwapCoupons(QlCreditDefaultSwap* o, QlError **e);+  double qlCreditDefaultSwapDefaultLegNPV(QlCreditDefaultSwap* o, QlError **e);+  double qlCreditDefaultSwapFairUpfront(QlCreditDefaultSwap* o, QlError **e);+  double qlCreditDefaultSwapImpliedHazardRate(QlCreditDefaultSwap* o, double targetNPV, QlYieldTermStructure* discountCurve, DayCounter* dayCounter, double recoveryRate, double accuracy, int model, QlError **e);+  double qlCreditDefaultSwapUpfrontBPS(QlCreditDefaultSwap* o, QlError **e);+  double qlCreditDefaultSwapUpfrontNPV(QlCreditDefaultSwap* o, QlError **e);+  double qlCreditDefaultSwapAccrualRebateNPV(QlCreditDefaultSwap* o, QlError **e);+  void qlFreeBarrierOption(QlBarrierOption *o);+  QlOneAssetOption* qlBarrierOptionAsOneAssetOption(QlBarrierOption *o);+  void qlFreeDoubleBarrierOption(QlDoubleBarrierOption *o);+  QlOneAssetOption* qlDoubleBarrierOptionAsOneAssetOption(QlDoubleBarrierOption *o);+  void qlFreeSoftBarrierOption(QlSoftBarrierOption *o);+  QlOneAssetOption* qlSoftBarrierOptionAsOneAssetOption(QlSoftBarrierOption *o);+  void qlFreeMargrabeOption(QlMargrabeOption *o);+  QlMultiAssetOption* qlMargrabeOptionAsMultiAssetOption(QlMargrabeOption *o);+  void qlFreeEverestOption(QlEverestOption *o);+  QlMultiAssetOption* qlEverestOptionAsMultiAssetOption(QlEverestOption *o);+  void qlFreeMultiAssetOption(QlMultiAssetOption *o);+  QlOption* qlMultiAssetOptionAsOption(QlMultiAssetOption *o);+  void qlFreeOneAssetOption(QlOneAssetOption *o);+  QlOption* qlOneAssetOptionAsOption(QlOneAssetOption *o);+  void qlFreeOption(QlOption *o);+  QlInstrument* qlOptionAsInstrument(QlOption *o);+  void qlFreeQuantoVanillaOption(QlQuantoVanillaOption *o);+  QlOneAssetOption* qlQuantoVanillaOptionAsOneAssetOption(QlQuantoVanillaOption *o);+  void qlFreeSwaption(QlSwaption *o);+  QlOption* qlSwaptionAsOption(QlSwaption *o);+  void qlFreeSwingExercise(QlSwingExercise *o);+  QlBermudanExercise* qlSwingExerciseAsBermudanExercise(QlSwingExercise *o);+  void qlFreeVanillaOption(QlVanillaOption *o);+  QlOneAssetOption* qlVanillaOptionAsOneAssetOption(QlVanillaOption *o);+  double qlCdsOptionAtmRate(QlCdsOption* o, QlError **e);+  QlCdsOption* qlCdsOption(QlCreditDefaultSwap* swap, QlExercise* exercise, int knocksOut, QlError **e);+  QlCreditDefaultSwap* qlCdsOptionUnderlyingSwap(QlCdsOption* o, QlError **e);+  double qlCdsOptionImpliedVolatility(QlCdsOption* o, double price, QlYieldTermStructure* termStructure, QlDefaultProbabilityTermStructure* x3, double recoveryRate, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e);+  double qlCdsOptionRiskyAnnuity(QlCdsOption* o, QlError **e);+  double qlSwaptionImpliedVolatility(QlSwaption* o, double price, QlYieldTermStructure* discountCurve, double guess, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, int type, double displacement, int priceType, QlError **e);+  QlSwaption* qlSwaption(QlFixedVsFloatingSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, QlError **e);+  QlFixedVsFloatingSwap* qlSwaptionUnderlying(QlSwaption* o, QlError **e);+  void qlFreeIrregularSwaption(QlIrregularSwaption*);+  QlOption* qlIrregularSwaptionAsOption(QlIrregularSwaption*);+  QlIrregularSwaption* qlIrregularSwaption(QlIrregularSwap*, QlExercise*, int settlement, QlError **e);+  QlIrregularSwap* qlIrregularSwaptionUnderlyingSwap(QlIrregularSwaption* o, QlError **e);+  void qlFreeIrregularSwap(QlIrregularSwap*);+  QlSwap* qlIrregularSwapAsSwap(QlIrregularSwap*);+  QlIrregularSwap* qlIrregularSwap(int type, Leg*, Leg*, QlError **e);+  double qlIrregularSwapFairRate(QlIrregularSwap*, QlError **e);+  double qlIrregularSwapFairSpread(QlIrregularSwap*, QlError **e);+  void qlFreeNonstandardSwaption(QlNonstandardSwaption *o);+  QlOption* qlNonstandardSwaptionAsOption(QlNonstandardSwaption *o);+  QlNonstandardSwaption* qlNonstandardSwaption1(QlSwaption* fromSwaption, QlError **e);+  QlNonstandardSwaption* qlNonstandardSwaption(QlNonstandardSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, QlError **e);+  QlNonstandardSwap* qlNonstandardSwaptionUnderlyingSwap(QlNonstandardSwaption* o, QlError **e);+  void qlNonstandardSwaptionCalibrationBasket(QlNonstandardSwaption* o, QlSwapIndex* swapBase, QlSwaptionVolatilityStructure* swaptionVol, int basketType, unsigned* len, QlBlackCalibrationHelper*** helpers, QlError **e);+  void qlFreeFloatFloatSwaption(QlFloatFloatSwaption *o);+  QlOption* qlFloatFloatSwaptionAsOption(QlFloatFloatSwaption *o);+  QlFloatFloatSwaption* qlFloatFloatSwaption(QlFloatFloatSwap* swap, QlExercise* exercise, int delivery, int settlementMethod, QlError **e);+  QlFloatFloatSwap* qlFloatFloatSwaptionUnderlyingSwap(QlFloatFloatSwaption* o, QlError **e);+  void qlFloatFloatSwaptionCalibrationBasket(QlFloatFloatSwaption* o, QlSwapIndex* swapBase, QlSwaptionVolatilityStructure* swaptionVol, int basketType, unsigned* len, QlBlackCalibrationHelper*** helpers, QlError **e);+  void qlFreeQuantoBarrierOption(QlQuantoBarrierOption *o);+  QlOneAssetOption* qlQuantoBarrierOptionAsOneAssetOption(QlQuantoBarrierOption *o);+  void qlFreeQuantoDoubleBarrierOption(QlQuantoDoubleBarrierOption *o);+  QlOneAssetOption* qlQuantoDoubleBarrierOptionAsOneAssetOption(QlQuantoDoubleBarrierOption *o);+  void qlFreeQuantoForwardVanillaOption(QlQuantoForwardVanillaOption *o);+  QlOption* qlQuantoForwardVanillaOptionAsOption(QlQuantoForwardVanillaOption *o);++  QlBarrierOption* qlBarrierOption(int barrierType, double barrier, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlInstrument* qlTwoAssetBarrierOption(int barrierType, double barrier, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  double qlBarrierOptionImpliedVolatility(QlBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e);+  QlOneAssetOption* qlPartialTimeBarrierOption(int barrierType, int barrierRange, double barrier, double rebate, int coverEventDate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlDoubleBarrierOption* qlDoubleBarrierOption(int barrierType, double barrierLo, double barrierHi, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  double qlDoubleBarrierOptionImpliedVolatility(QlDoubleBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e);+  QlSoftBarrierOption* qlSoftBarrierOption(int barrierType, double barrierLo, double barrierHi, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  double qlSoftBarrierOptionImpliedVolatility(QlSoftBarrierOption* o, double price, QlGeneralizedBlackScholesProcess* process, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e);+  QlOneAssetOption* qlSimpleChooserOption(int choosingDate, double strike, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlComplexChooserOption(int choosingDate, double strikeCall, double strikePut, QlExercise* exerciseCall, QlExercise* exercisePut, QlError **e);+  QlMultiAssetOption* qlTwoAssetCorrelationOption(int type, double strike1, double strike2, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlWriterExtensibleOption(QlPlainVanillaPayoff* payoff1, QlExercise* exercise1, QlPlainVanillaPayoff* payoff2, QlExercise* exercise2, QlError **e);+  QlOneAssetOption* qlHolderExtensibleOption(int type, double premium, int secondExpiryDate, double secondStrike, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlForwardVanillaOption(double moneyness, int resetDate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlCompoundOption(QlStrikedTypePayoff* motherPayoff, QlExercise* motherExercise, QlStrikedTypePayoff* daughterPayoff, QlExercise* daughterExercise, QlError **e);+  double qlMargrabeOptionDelta1(QlMargrabeOption* o, QlError **e);+  double qlMargrabeOptionDelta2(QlMargrabeOption* o, QlError **e);+  double qlMargrabeOptionGamma1(QlMargrabeOption* o, QlError **e);+  double qlMargrabeOptionGamma2(QlMargrabeOption* o, QlError **e);+  QlMargrabeOption* qlMargrabeOption(int Q1, int Q2, QlExercise* x2, QlError **e);+  double qlEverestOptionYield(QlEverestOption* o, QlError **e);+  QlEverestOption* qlEverestOption(double notional, double guarantee, QlExercise* exercise, QlError **e);+  double qlMultiAssetOptionDelta(QlMultiAssetOption* o, QlError **e);+  double qlMultiAssetOptionDividendRho(QlMultiAssetOption* o, QlError **e);+  double qlMultiAssetOptionGamma(QlMultiAssetOption* o, QlError **e);+  QlMultiAssetOption* qlMultiAssetOption(QlPayoff* x0, QlExercise* x1, QlError **e);+  double qlMultiAssetOptionRho(QlMultiAssetOption* o, QlError **e);+  double qlMultiAssetOptionTheta(QlMultiAssetOption* o, QlError **e);+  double qlMultiAssetOptionVega(QlMultiAssetOption* o, QlError **e);+  double qlOneAssetOptionDelta(QlOneAssetOption* o, QlError **e);+  double qlOneAssetOptionDeltaForward(QlOneAssetOption* o, QlError **e);+  double qlOneAssetOptionDividendRho(QlOneAssetOption* o, QlError **e);+  double qlOneAssetOptionElasticity(QlOneAssetOption* o, QlError **e);+  double qlOneAssetOptionGamma(QlOneAssetOption* o, QlError **e);+  double qlOneAssetOptionItmCashProbability(QlOneAssetOption* o, QlError **e);+  QlOneAssetOption* qlOneAssetOption(QlPayoff* x0, QlExercise* x1, QlError **e);+  double qlOneAssetOptionRho(QlOneAssetOption* o, QlError **e);+  double qlOneAssetOptionStrikeSensitivity(QlOneAssetOption* o, QlError **e);+  double qlOneAssetOptionTheta(QlOneAssetOption* o, QlError **e);+  double qlOneAssetOptionThetaPerDay(QlOneAssetOption* o, QlError **e);+  double qlOneAssetOptionVega(QlOneAssetOption* o, QlError **e);+  double qlQuantoBarrierOptionQlambda(QlQuantoBarrierOption* o, QlError **e);+  double qlQuantoBarrierOptionQrho(QlQuantoBarrierOption* o, QlError **e);+  QlQuantoBarrierOption* qlQuantoBarrierOption(int barrierType, double barrier, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  double qlQuantoBarrierOptionQvega(QlQuantoBarrierOption* o, QlError **e);+  double qlQuantoDoubleBarrierOptionQlambda(QlQuantoDoubleBarrierOption* o, QlError **e);+  double qlQuantoDoubleBarrierOptionQrho(QlQuantoDoubleBarrierOption* o, QlError **e);+  QlQuantoDoubleBarrierOption* qlQuantoDoubleBarrierOption(int barrierType, double barrierLo, double barrierHi, double rebate, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  double qlQuantoDoubleBarrierOptionQvega(QlQuantoDoubleBarrierOption* o, QlError **e);+  double qlQuantoForwardVanillaOptionQlambda(QlQuantoForwardVanillaOption* o, QlError **e);+  double qlQuantoForwardVanillaOptionQrho(QlQuantoForwardVanillaOption* o, QlError **e);+  QlQuantoForwardVanillaOption* qlQuantoForwardVanillaOption(double moneyness, int resetDate, QlStrikedTypePayoff* x2, QlExercise* x3, QlError **e);+  double qlQuantoForwardVanillaOptionQvega(QlQuantoForwardVanillaOption* o, QlError **e);+  double qlQuantoVanillaOptionQlambda(QlQuantoVanillaOption* o, QlError **e);+  double qlQuantoVanillaOptionQrho(QlQuantoVanillaOption* o, QlError **e);+  QlQuantoVanillaOption* qlQuantoVanillaOption(QlStrikedTypePayoff* x0, QlExercise* x1, QlError **e);+  double qlQuantoVanillaOptionQvega(QlQuantoVanillaOption* o, QlError **e);+  double qlVanillaOptionImpliedVolatility(QlVanillaOption* o, double price, QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e);+  QlVanillaOption* qlVanillaOption(QlStrikedTypePayoff* x0, QlExercise* x1, QlError **e);+  QlMultiAssetOption* qlBasketOption(QlBasketPayoff* x0, QlExercise* x1, QlError **e);+  QlMultiAssetOption* qlHimalayaOption(unsigned fixingDatesLen, int* fixingDates, double strike, QlError **e);+  QlMultiAssetOption* qlPagodaOption(unsigned fixingDatesLen, int* fixingDates, double roof, double fraction, QlError **e);+  QlOneAssetOption* qlCliquetOption(QlPercentageStrikePayoff* x0, QlEuropeanExercise* maturity, unsigned resetDatesLen, int* resetDates, QlError **e);+  QlOneAssetOption* qlContinuousAveragingAsianOption(int averageType, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlContinuousFixedLookbackOption(double currentMinmax, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlContinuousFloatingLookbackOption(double currentMinmax, QlTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlContinuousPartialFloatingLookbackOption(double currentMinmax, double lambda, int lookbackPeriodEnd, QlTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlContinuousPartialFixedLookbackOption(int lookbackPeriodStart, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlDiscreteAveragingAsianOption(int averageType, double runningAccumulator, unsigned pastFixings, unsigned fixingDatesLen, int* fixingDates, QlStrikedTypePayoff* payoff, QlExercise* exercise, QlError **e);+  QlOneAssetOption* qlVanillaStorageOption(QlBermudanExercise* ex, double capacity, double load, double changeRate, QlError **e);+  QlOneAssetOption* qlVanillaSwingOption(QlStrikedTypePayoff* payoff, QlSwingExercise* ex, unsigned minExerciseRights, unsigned maxExerciseRights, QlError **e);+  QlVanillaOption* qlEuropeanOption(QlStrikedTypePayoff* x0, QlExercise* x1, QlError **e);++  QlBond *qlBond(unsigned settlDays, Calendar *calendar, int issueDate, Leg *coupons, QlError **e);+  Leg* qlBondCashflows(QlBond* o, QlError **e);+  Leg* qlBondRedemptions(QlBond* o, QlError **e);+  int qlBondSettlementDate(QlBond* o, int d, QlError **e);+  int qlBondStartDate(QlBond* o, QlError **e);+  int qlBondMaturityDate(QlBond *bond, QlError **e);+  QlInstrument *qlBondAsInstrument(QlBond *bond);++  QlFixedRateBond *qlFixedRateBond(unsigned settlDays, double face, Schedule *schedule, unsigned cLen, double *coupons, DayCounter *counter, int payConv, double redemption, int issue, Calendar *payCal, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, DayCounter* firstPeriodDayCounter, QlError **e);+  QlBond *qlZeroCouponBond(int settlDays, Calendar *cal, double face, int maturity, int payConv, double redemption, int issue, QlError **e);+  QlBond *qlFloatingRateBond(unsigned settlDays, double face, Schedule *sched, QlIborIndex *index, DayCounter *dc, int payConv, unsigned fixDays,+    unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,+    int inArrears, double redemption, int issue, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, QlError **e);+  QlBond *qlCmsRateBond(unsigned settlDays, double faceAmount, Schedule *sched, QlSwapIndex *index, DayCounter *dc,+    int payConv, unsigned fixDays, unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads,+    unsigned nCaps, double *caps, unsigned nFloors, double *floors, int inArrears, double redemption, int issue, QlError **e);+  QlBond *qlAmortizingCmsRateBond(unsigned settlementDays, unsigned notionalsLen, double *notionals, Schedule *sched,+    QlSwapIndex *index, DayCounter *dc, int payConv, unsigned fixDays, unsigned nGearings, double *gearings,+    unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,+    int inArrears, int issue, unsigned redemptionsLen, double *redemptions, QlError **e);+  QlBond *qlFixedRateBondAsBond(QlFixedRateBond *bond);++  // RendistatoBasket requires BTP values, so this Italian Treasury bond has its own type.+  QlBTP *qlBtp(int maturityDate, double fixedRate, int startDate, int issueDate, QlError **e);+  // Non-par redemption constructor.+  QlBTP *qlBtpWithRedemption(int maturityDate, double fixedRate, double redemption, int startDate, int issueDate, QlError **e);+  void qlFreeBtp(QlBTP *o);+  QlFixedRateBond *qlBtpAsFixedRateBond(QlBTP *o);++  QlCPIBond *qlCPIBond(unsigned settlementDays, double faceAmount, double baseCPI, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* index, int observationInterpolation, Schedule *schedule, unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate, Calendar *paymentCalendar, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, QlError **e);+  QlBond *qlCPIBondAsBond(QlCPIBond *bond);++  QlBond *qlAmortizingFixedRateBond(unsigned settlementDays, unsigned notionalsLen, double *notionals, Schedule *schedule,+    unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate,+    int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth,+    unsigned redemptionsLen, double *redemptions, int paymentLag, QlError **e);+  QlBond *qlAmortizingFloatingRateBond(unsigned settlementDays, unsigned notionalLen, double *notional, Schedule *schedule,+    QlIborIndex *index, DayCounter *accrualDayCounter, int paymentConvention, unsigned fixingDays,+    unsigned nGearings, double *gearings, unsigned nSpreads, double *spreads, unsigned nCaps, double *caps, unsigned nFloors, double *floors,+    int inArrears, int issueDate, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention,+    int exCouponEndOfMonth, unsigned redemptionsLen, double *redemptions, int paymentLag, QlError **e);+  Schedule *qlSinkingSchedule(int startDate, int lengthLen, int lengthUnit, int frequency, Calendar *paymentCalendar, QlError **e);+  void qlSinkingNotionals(int lengthLen, int lengthUnit, int frequency, double couponRate, double initialNotional,+    unsigned *len, double **out, QlError **e);++  double qlBondYield(QlBond* o, DayCounter* dc, int comp, int freq, double accuracy,+    unsigned maxEvaluations, double guess, int priceType, QlError **e);+  double qlBondAccruedAmount(QlBond* o, int d, QlError **e);+  double qlBondCleanPrice(QlBond* o, QlError **e);+  double qlBondDirtyPrice(QlBond* o, QlError **e);+  double qlBondDirtyPrice1(QlBond* o, double yield, DayCounter* dc, int comp, int freq, int settlementDate, QlError **e);+  int qlBondNextCashFlowDate(QlBond* o, int d, QlError **e);+  double qlBondNextCouponRate(QlBond* o, int d, QlError **e);+  double qlBondNotional(QlBond* o, int d, QlError **e);+  int qlBondPreviousCashFlowDate(QlBond* o, int d, QlError **e);+  double qlBondPreviousCouponRate(QlBond* o, int d, QlError **e);+  double qlBondSettlementValue1(QlBond* o, double cleanPrice, QlError **e);+  double qlBondSettlementValue(QlBond* o, QlError **e);+  double qlBondYield1(QlBond* o, double price, int, DayCounter* dc, int comp, int freq, int settlementDate, double accuracy, unsigned maxEvaluations, QlError **e);+  int qlBondIsTradable(QlBond* o, int d, QlError **e);+  void qlBondNotionals(QlBond* o, unsigned *len, double **ns, QlError **e);++  int qlBondFunctionsAccrualDays(QlBond* bond, int settlementDate, QlError **e);+  int qlBondFunctionsAccrualEndDate(QlBond* bond, int settlementDate, QlError **e);+  double qlBondFunctionsAccrualPeriod(QlBond* bond, int settlementDate, QlError **e);+  int qlBondFunctionsAccrualStartDate(QlBond* bond, int settlementDate, QlError **e);+  int qlBondFunctionsAccruedDays(QlBond* bond, int settlementDate, QlError **e);+  double qlBondFunctionsAccruedPeriod(QlBond* bond, int settlementDate, QlError **e);+  double qlBondFunctionsAtmRate(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, double price, int, QlError **e);+  double qlBondFunctionsBasisPointValue(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e);+  double qlBondFunctionsBps1(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e);+  double qlBondFunctionsBps(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, QlError **e);+  double qlBondFunctionsCleanPrice2(QlBond* bond, QlYieldTermStructure* discountCurve, int settlementDate, QlError **e);+  double qlBondFunctionsCleanPrice3(QlBond* bond, QlYieldTermStructure* discount, double zSpread, int compounding, int frequency, int settlementDate, QlError **e);+  double qlBondFunctionsCleanPrice4(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e);+  double qlBondFunctionsConvexity(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e);+  double qlBondFunctionsDuration(QlBond* bond, InterestRate* yield, int type, int settlementDate, QlError **e);+  double qlBondFunctionsNextCashFlowAmount(QlBond* bond, int refDate, QlError **e);+  double qlBondFunctionsPreviousCashFlowAmount(QlBond* bond, int refDate, QlError **e);+  int qlBondFunctionsReferencePeriodEnd(QlBond* bond, int settlementDate, QlError **e);+  int qlBondFunctionsReferencePeriodStart(QlBond* bond, int settlementDate, QlError **e);+  double qlBondFunctionsYield2(QlBond* bond, double price, int, DayCounter* dayCounter, int compounding, int frequency, int settlementDate, double accuracy, unsigned maxIterations, double guess, QlError **e);+  double qlBondFunctionsYieldValueBasisPoint(QlBond* bond, InterestRate* yield, int settlementDate, QlError **e);+  double qlBondFunctionsZSpread(QlBond* bond, double price, int, QlYieldTermStructure* x2, int compounding, int frequency, int settlementDate, double accuracy, unsigned maxIterations, double guess, QlError **e);++  void qlFreeBond(QlBond *bond);+  void qlFreeFixedRateBond(QlFixedRateBond *bond);+  void qlFreeCPIBond(QlCPIBond *bond);+  void qlFreeCallableBond(QlCallableBond *o);+  QlBond* qlCallableBondAsBond(QlCallableBond *o);+  void qlFreeConvertibleBond(QlConvertibleBond *o);+  QlBond* qlConvertibleBondAsBond(QlConvertibleBond *o);++  QlCallableBond* qlCallableFixedRateBond(unsigned settlementDays, double faceAmount, Schedule* schedule, unsigned couponsLen, double* coupons, DayCounter* accrualDayCounter, int paymentConvention, double redemption, int issueDate, unsigned putCallScheduleLen, QlCallability** putCallSchedule, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, QlError **e);+  QlCallableBond* qlCallableZeroCouponBond(unsigned settlementDays, double faceAmount, Calendar* calendar, int maturityDate, DayCounter* dayCounter, int paymentConvention, double redemption, int issueDate, unsigned putCallScheduleLen, QlCallability** putCallSchedule, QlError **e);+  QlConvertibleBond* qlConvertibleFixedCouponBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, unsigned couponsLen, double* coupons, DayCounter* dayCounter, Schedule* schedule, double redemption, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, QlError **e);+  QlConvertibleBond* qlConvertibleFloatingRateBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, QlIborIndex* index, unsigned fixingDays, unsigned spreadsLen, double* spreads, DayCounter* dayCounter, Schedule* schedule, double redemption, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, QlError **e);+  QlConvertibleBond* qlConvertibleZeroCouponBond(QlExercise* exercise, double conversionRatio, unsigned callabilityLen, QlCallability** callability, int issueDate, unsigned settlementDays, DayCounter* dayCounter, Schedule* schedule, double redemption, QlError **e);+  QlCallability* qlSoftCallability(double price, int priceType, int date, double trigger, QlError **e);++  Leg *qlLeg(unsigned len, double *amounts, int *dates, QlError **e);+  void qlFreeCashFlow(QlCashFlow *o);+  double qlCashFlowAmount(QlCashFlow *o, QlError **e);+  int qlCashFlowDate(QlCashFlow *o);+  QlCashFlow *qlSimpleCashFlow(double amount, int date, QlError **e);+  void qlFreeIndexedCashFlow(QlIndexedCashFlow *o);+  QlCashFlow *qlIndexedCashFlowAsCashFlow(QlIndexedCashFlow *o);+  QlIndexedCashFlow *qlIndexedCashFlow(double notional, QlIndex *index, int baseDate, int fixingDate, int paymentDate, int growthOnly, QlError **e);+  double qlIndexedCashFlowBaseFixing(QlIndexedCashFlow *o, QlError **e);+  double qlIndexedCashFlowIndexFixing(QlIndexedCashFlow *o, QlError **e);+  QlFixedRateCoupon *qlFixedRateCoupon(int paymentDate, double nominal, double rate, DayCounter *dayCounter, int accrualStartDate, int accrualEndDate, int refPeriodStart, int refPeriodEnd, int exCouponDate, QlError **e);+  void qlFreeCoupon(QlCoupon *o);+  QlCashFlow* qlCouponAsCashFlow(QlCoupon *o);+  double qlCouponRate(QlCoupon *o, QlError **e);+  double qlCouponAccruedAmount(QlCoupon *o, int d, QlError **e);+  void qlFreeFixedRateCoupon(QlFixedRateCoupon *o);+  QlCoupon* qlFixedRateCouponAsCoupon(QlFixedRateCoupon *o);+  InterestRate* qlFixedRateCouponInterestRate(QlFixedRateCoupon *o);+  QlFloatingRateCoupon *qlFloatingRateCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlInterestRateIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e);+  Leg *qlCashFlowLeg(unsigned len, QlCashFlow **cashFlows, QlError **e);+  int qlLegStartDate(Leg *leg, QlError **e);++  void qlFreeLeg(Leg *leg);+  Leg *qlNextCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  Leg *qlPreviousCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  void qlLegCashFlows(Leg *leg, int includeSettlementDateFlows, int settlementDate, unsigned *al, double **amount, unsigned *dl, int **date, unsigned *hl, int **hasOccurred, QlError **e);+  void qlLegFixingDependencies(Leg *leg, unsigned *nameLen, char ***names, unsigned *dateLen, int **dates, QlError **e);++  double qlCashFlowsDuration(Leg* leg, InterestRate* yield, int type, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  int qlCashFlowsAccrualDays(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  int qlCashFlowsAccrualEndDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  double qlCashFlowsAccrualPeriod(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  int qlCashFlowsAccrualStartDate(Leg* leg, int includeSettlementDateFlows, int settlDate, QlError **e);+  double qlCashFlowsAccruedAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  int qlCashFlowsAccruedDays(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  double qlCashFlowsAccruedPeriod(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  double qlCashFlowsAtmRate(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, double npv, QlError **e);+  double qlCashFlowsBasisPointValue(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  double qlCashFlowsBps1(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  double qlCashFlowsBps(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  double qlCashFlowsConvexity(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  int qlCashFlowsIsExpired(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  int qlCashFlowsMaturityDate(Leg* leg, QlError **e);+  double qlCashFlowsNextCashFlowAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  int qlCashFlowsNextCashFlowDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  double qlCashFlowsNextCouponRate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  double qlCashFlowsNominal(Leg* leg, int includeSettlementDateFlows, int settlDate, QlError **e);+  double qlCashFlowsNpv1(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  double qlCashFlowsNpv3(Leg* leg, QlYieldTermStructure* discount, double zSpread, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  double qlCashFlowsNpv(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  void qlCashFlowsNpvbps(Leg* leg, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, double *npv, double *bps, QlError **e);+  double qlCashFlowsPreviousCashFlowAmount(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  int qlCashFlowsPreviousCashFlowDate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  double qlCashFlowsPreviousCouponRate(Leg* leg, int includeSettlementDateFlows, int settlementDate, QlError **e);+  int qlCashFlowsReferencePeriodEnd(Leg* leg, int includeSettlementDateFlows, int settlDate, QlError **e);+  int qlCashFlowsReferencePeriodStart(Leg* leg, int includeSettlementDateFlows, int settlDate, QlError **e);+  double qlCashFlowsYield(Leg* leg, double npv, DayCounter* dayCounter, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, double accuracy, unsigned maxIterations, double guess, QlError **e);+  double qlCashFlowsYieldValueBasisPoint(Leg* leg, InterestRate* yield, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  double qlCashFlowsZSpread(Leg* leg, double npv, QlYieldTermStructure* x2, int compounding, int frequency, int includeSettlementDateFlows, int settlementDate, int npvDate, double accuracy, unsigned maxIterations, double guess, QlError **e);++  void qlQuantLibSetCouponPricer(Leg* leg, QlFloatingRateCouponPricer* x1, QlError **e);+  void qlQuantLibSetCouponPricers(Leg* leg, unsigned x1Len, QlFloatingRateCouponPricer** x1, QlError **e);++  void qlCouponAccrualStartDates(CouponLeg* o, unsigned *len, int **days, QlError **e);+  void qlCouponLegCoupons(CouponLeg* o, unsigned *len, QlCoupon ***out, QlError **e);++  void qlFreeDividend(QlDividend *o);+  QlDividend* qlFixedDividend(double amount, int date, QlError **e);+  QlDividend* qlFractionalDividend1(double rate, double nominal, int date, QlError **e);+  QlDividend* qlFractionalDividend(double rate, int date, QlError **e);++  Leg* qlAverageBMALeg(Schedule* schedule, QlBMAIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, QlError **e);+  Leg* qlFixedRateLeg(Schedule* schedule, unsigned NotionalsLen, double* Notionals, unsigned couponRatesLen, InterestRate** couponRates, int paymentAdjustment, DayCounter* firstPeriodDayCounter, Calendar* paymentCalendar, QlError **e);+  Leg* qlIborLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments,+    int paymentLag, Calendar* paymentCalendar, int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, int useIndexedCoupons, QlStubIndexSelection* stub, QlError **e);+  Leg* qlCmsLeg(Schedule* schedule, QlSwapIndex* swapIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments,+    int exCouponPeriodLen, int exCouponPeriodUnit, Calendar* exCouponCalendar, int exCouponConvention, int exCouponEndOfMonth, int fixingConvention, QlError **e);+  Leg* qlOvernightLeg(Schedule* schedule, QlOvernightIndex* overnightIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, QlError **e);+  Leg* qlRangeAccrualLeg(Schedule* schedule, QlIborIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned lowerTriggersLen, double* lowerTriggers, unsigned upperTriggersLen, double* upperTriggers, int, int, int observationConvention, QlError **e);+  void qlFreeCouponLeg(CouponLeg *o);+  Leg* qlCouponLegAsLeg(CouponLeg *o);++  CouponLeg* qlLegToCouponLeg(Leg *o, QlError **e);+  Leg* qlCPILeg(Schedule* schedule, QlZeroInflationIndex* index, double baseCPI, int obsLagLen, int obsLagUnit, unsigned notionalsLen, double* notionals, unsigned fixedRatesLen, double* fixedRates, DayCounter* paymentDayCounter, int paymentAdjustment, Calendar* paymentCalendar, int observationInterpolation, int subtractInflationNominal, QlError **e);+  Leg* qlYoYInflationLeg(Schedule* schedule, Calendar* cal, QlYoYInflationIndex* index, int obsLagLen, int obsLagUnit, int interpolation, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, QlError **e);++  /* YoYInflationCouponPricer -- all 3 concrete pricers share this ctor shape */+  QlYoYInflationCouponPricer *qlBlackYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, QlError **e);+  QlYoYInflationCouponPricer *qlUnitDisplacedBlackYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, QlError **e);+  QlYoYInflationCouponPricer *qlBachelierYoYInflationCouponPricer(QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, QlError **e);+  void qlFreeYoYInflationCouponPricer(QlYoYInflationCouponPricer *p);+  void qlSetYoYInflationCouponPricer(Leg* leg, QlYoYInflationCouponPricer* pricer, QlError **e);++  void qlFreeZeroInflationCashFlow(QlZeroInflationCashFlow *o);+  QlIndexedCashFlow *qlZeroInflationCashFlowAsIndexedCashFlow(QlZeroInflationCashFlow *o);+  QlZeroInflationCashFlow* qlZeroInflationCashFlow(double notional, QlZeroInflationIndex* index, int observationInterpolation, int startDate, int endDate, int obsLagLen, int obsLagUnit, int paymentDate, int growthOnly, QlError **e);++  void qlFreeCPICashFlow(QlCPICashFlow *o);+  QlIndexedCashFlow *qlCPICashFlowAsIndexedCashFlow(QlCPICashFlow *o);+  QlCPICashFlow* qlCPICashFlow(double notional, QlZeroInflationIndex* index, int baseDate, double baseFixing, int observationDate, int obsLagLen, int obsLagUnit, int interpolation, int paymentDate, int growthOnly, QlError **e);++  void qlFreeEquityCashFlow(QlEquityCashFlow *o);+  QlIndexedCashFlow *qlEquityCashFlowAsIndexedCashFlow(QlEquityCashFlow *o);+  QlEquityCashFlow* qlEquityCashFlow(double notional, QlEquityIndex* index, int baseDate, int fixingDate, int paymentDate, int growthOnly, QlError **e);+  void qlEquityCashFlowSetPricer(QlEquityCashFlow* o, QlEquityCashFlowPricer* pricer, QlError **e);++  void qlFreeEquityCashFlowPricer(QlEquityCashFlowPricer *o);+  QlEquityCashFlowPricer* qlEquityQuantoCashFlowPricer(QlYieldTermStructure* quantoCurrencyTermStructure, QlBlackVolTermStructure* equityVolatility, QlBlackVolTermStructure* fxVolatility, QlQuote* correlation, QlError **e);+  void qlQuantLibSetEquityCashFlowPricer(Leg* leg, QlEquityCashFlowPricer* pricer, QlError **e);++  QlFloatingRateCouponPricer *qlBlackIborCouponPricer(QlOptionletVolatilityStructure *vol, int timingAdjustment, QlQuote *correlation, int useIndexedCoupon, QlError **e);+  QlFloatingRateCouponPricer *qlBlackIborQuantoCouponPricer(QlBlackVolTermStructure *fxRateBlackVolatility, QlQuote *underlyingFxCorrelation, QlOptionletVolatilityStructure *capletVolatility, QlError **e);+  void qlFreeFloatingCouponPricer(QlFloatingRateCouponPricer *p);+  void qlFreeCmsCouponPricer(QlCmsCouponPricer *p);+  QlFloatingRateCouponPricer* qlCmsCouponPricerAsFloatingRateCouponPricer(QlCmsCouponPricer *p);+  QlCmsCouponPricer* qlAnalyticHaganPricer(QlSwaptionVolatilityStructure* swaptionVol, int modelOfYieldCurve, QlQuote* meanReversion, QlError **e);+  QlCmsCouponPricer* qlNumericHaganPricer(QlSwaptionVolatilityStructure* swaptionVol, int modelOfYieldCurve, QlQuote* meanReversion, double lowerLimit, double upperLimit, double precision, double hardUpperLimit, QlError **e);+  QlCmsCouponPricer* qlLinearTsrPricer(QlSwaptionVolatilityStructure* swaptionVol, QlQuote* meanReversion, QlYieldTermStructure* couponDiscountCurve, int strategy, double param, int haveBounds, double lowerBound, double upperBound, QlError **e);+  QlFloatingRateCouponPricer* qlRangeAccrualPricerByBgm(double correlation, QlSmileSection* smilesOnExpiry, QlSmileSection* smilesOnPayment, int withSmile, int byCallSpread, QlError **e);++  void qlFreeFloatingRateCoupon(QlFloatingRateCoupon *o);+  void qlFreeIborCoupon(QlIborCoupon *o);+  QlFloatingRateCoupon* qlIborCouponAsFloatingRateCoupon(QlIborCoupon *o);+  QlIborCoupon* qlIborCouponExact(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlIborIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e);+  void qlFreeAverageBMACoupon(QlAverageBMACoupon *o);+  QlFloatingRateCoupon* qlAverageBMACouponAsFloatingRateCoupon(QlAverageBMACoupon* o);+  QlAverageBMACoupon* qlAverageBMACoupon(int paymentDate, double nominal, int startDate, int endDate, QlBMAIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, QlError **e);+  void qlAverageBMACouponFixingDates(QlAverageBMACoupon *o, unsigned *len, int **ds, QlError **e);+  void qlAverageBMACouponIndexFixings(QlAverageBMACoupon *o, unsigned *len, double **fs, QlError **e);+  QlFloatingRateCoupon* qlCappedFlooredCoupon(QlFloatingRateCoupon *underlying, double cap, double floor, QlError **e);+  void qlFreeStrippedCappedFlooredCoupon(QlStrippedCappedFlooredCoupon *o);+  QlFloatingRateCoupon* qlStrippedCappedFlooredCouponAsFloatingRateCoupon(QlStrippedCappedFlooredCoupon *o);+  QlStrippedCappedFlooredCoupon* qlStrippedCappedFlooredCoupon(QlFloatingRateCoupon *underlying, double cap, double floor, QlError **e);+  double qlStrippedCappedFlooredCouponCap(QlStrippedCappedFlooredCoupon *o);+  double qlStrippedCappedFlooredCouponFloor(QlStrippedCappedFlooredCoupon *o);+  double qlStrippedCappedFlooredCouponEffectiveCap(QlStrippedCappedFlooredCoupon *o);+  double qlStrippedCappedFlooredCouponEffectiveFloor(QlStrippedCappedFlooredCoupon *o);+  int qlStrippedCappedFlooredCouponIsCap(QlStrippedCappedFlooredCoupon *o);+  int qlStrippedCappedFlooredCouponIsFloor(QlStrippedCappedFlooredCoupon *o);+  int qlStrippedCappedFlooredCouponIsCollar(QlStrippedCappedFlooredCoupon *o);+  QlFloatingRateCoupon* qlCappedFlooredIborCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlIborIndex *index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e);+  QlDigitalCoupon* qlDigitalIborCoupon(QlIborCoupon *underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication *replication, int nakedOption, QlError **e);+  void qlFreeDigitalCoupon(QlDigitalCoupon*);+  QlFloatingRateCoupon* qlDigitalCouponAsFloatingRateCoupon(QlDigitalCoupon*);+  QlDigitalCoupon* qlDigitalCoupon(QlFloatingRateCoupon *underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication *replication, int nakedOption, QlError **e);+  double qlDigitalCouponCallOptionRate(QlDigitalCoupon *o, QlError **e);+  double qlDigitalCouponPutOptionRate(QlDigitalCoupon *o, QlError **e);+  void qlFreeMultipleResetsCoupon(QlMultipleResetsCoupon *o);+  QlFloatingRateCoupon* qlMultipleResetsCouponAsFloatingRateCoupon(QlMultipleResetsCoupon* o);+  QlMultipleResetsCoupon* qlMultipleResetsCoupon(int paymentDate, double nominal, Schedule *schedule, unsigned fixingDays, QlIborIndex *index, double gearing, double couponSpread, double rateSpread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int exCouponDate, QlError **e);+  void qlMultipleResetsCouponFixingDates(QlMultipleResetsCoupon *o, unsigned *len, int **dates, QlError **e);+  void qlFreeRangeAccrualFloatersCoupon(QlRangeAccrualFloatersCoupon*);+  QlFloatingRateCoupon* qlRangeAccrualFloatersCouponAsFloatingRateCoupon(QlRangeAccrualFloatersCoupon*);+  QlRangeAccrualFloatersCoupon* qlRangeAccrualFloatersCoupon(int paymentDate, double nominal, QlIborIndex*, int startDate, int endDate, unsigned fixingDays, DayCounter*, double gearing, double spread, int refStart, int refEnd, Schedule*, double lower, double upper, QlError **e);+  double qlRangeAccrualFloatersCouponPriceWithoutOptionality(QlRangeAccrualFloatersCoupon*, QlYieldTermStructure*, QlError **e);+  void qlFreeYoYInflationCoupon(QlYoYInflationCoupon*);+  QlCoupon* qlYoYInflationCouponAsCoupon(QlYoYInflationCoupon*);+  QlYoYInflationCoupon* qlYoYInflationCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlYoYInflationIndex*, int lagLen, int lagUnit, int interpolation, DayCounter*, double gearing, double spread, int refStart, int refEnd, QlError **e);+  double qlYoYInflationCouponAdjustedFixing(QlYoYInflationCoupon*, QlError **e);+  QlFloatingRateCouponPricer* qlAveragingMultipleResetsPricer(QlError **e);+  QlFloatingRateCouponPricer* qlCompoundingMultipleResetsPricer(QlError **e);+  void qlFreeOvernightIndexedCoupon(QlOvernightIndexedCoupon *o);+  QlFloatingRateCoupon* qlOvernightIndexedCouponAsFloatingRateCoupon(QlOvernightIndexedCoupon *o);+  QlOvernightIndexedCoupon* qlOvernightIndexedCoupon(int paymentDate, double nominal, int startDate, int endDate, QlOvernightIndex *index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter *dayCounter, int telescopic, int averaging, unsigned lookback, unsigned lockout, int observationShift, int compoundSpread, int rateStart, int rateEnd, int exCouponDate, int rounding, QlError **e);+  QlFloatingRateCoupon* qlCappedFlooredOvernightIndexedCoupon(QlOvernightIndexedCoupon *underlying, double cap, double floor, int naked, int daily, QlError **e);+  void qlOvernightIndexedCouponFixingDates(QlOvernightIndexedCoupon *o, unsigned *len, int **dates, QlError **e);+  void qlOvernightIndexedCouponIndexFixings(QlOvernightIndexedCoupon *o, unsigned *len, double **fixings, QlError **e);+  QlFloatingRateCouponPricer* qlCompoundingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, QlError **e);+  QlFloatingRateCouponPricer* qlArithmeticAveragedOvernightIndexedCouponPricer(double mr, double volatility, int byApprox, QlOptionletVolatilityStructure *vol, int effective, QlError **e);+  QlFloatingRateCouponPricer* qlBlackCompoundingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, QlError **e);+  QlFloatingRateCouponPricer* qlBlackAveragingOvernightIndexedCouponPricer(QlOptionletVolatilityStructure *vol, int effective, QlError **e);+  void qlFreeCPICoupon(QlCPICoupon *o);+  QlCPICoupon* qlCPICoupon(double baseCPI, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, QlError **e);+  QlCPICoupon* qlCPICouponFromBaseDate(int baseDate, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, QlError **e);+  QlCPICoupon* qlCPICouponWithBaseDate(double baseCPI, int baseDate, int paymentDate, double nominal, int startDate, int endDate, QlZeroInflationIndex *index, int lagLen, int lagUnit, int interpolation, DayCounter *dc, double fixedRate, int refStart, int refEnd, int exCoupon, QlError **e);+  void qlFreeCPICouponPricer(QlCPICouponPricer *o);+  QlCPICouponPricer* qlCPICouponPricer(QlYieldTermStructure *nominal, QlError **e);+  QlCPICouponPricer* qlCPICouponPricerWithVol(QlCPIVolatilitySurface *vol, QlYieldTermStructure *nominal, QlError **e);+  QlCoupon* qlCPICouponAsCoupon(QlCPICoupon *o);+  void qlCPICouponSetPricer(QlCPICoupon *coupon, QlCPICouponPricer *pricer, QlError **e);+  QlCashFlow* qlRedemption(double amount, int date, QlError **e);+  QlCashFlow* qlAmortizingPayment(double amount, int date, QlError **e);+  QlCoupon* qlFloatingRateCouponAsCoupon(QlFloatingRateCoupon* o);+  void qlFloatingRateCouponSetPricer(QlFloatingRateCoupon* o, QlFloatingRateCouponPricer* pricer, QlError **e);+  double qlFloatingRateCouponPrice(QlFloatingRateCoupon* o, QlYieldTermStructure* discountingCurve, QlError **e);+  double qlFloatingRateCouponConvexityAdjustment(QlFloatingRateCoupon* o, QlError **e);+  double qlCPICouponIndexRatio(QlCPICoupon *o, int d, QlError **e);+  double qlFloatingRateCouponPricerSwapletRate(QlFloatingRateCouponPricer* o, QlError **e);+  double qlFloatingRateCouponPricerSwapletPrice(QlFloatingRateCouponPricer* o, QlError **e);+  double qlFloatingRateCouponPricerCapletPrice(QlFloatingRateCouponPricer* o, double effectiveCap, QlError **e);+  double qlFloatingRateCouponPricerCapletRate(QlFloatingRateCouponPricer* o, double effectiveCap, QlError **e);+  double qlFloatingRateCouponPricerFloorletPrice(QlFloatingRateCouponPricer* o, double effectiveFloor, QlError **e);+  double qlFloatingRateCouponPricerFloorletRate(QlFloatingRateCouponPricer* o, double effectiveFloor, QlError **e);++  void qlFreeCmsCoupon(QlCmsCoupon *o);+  QlFloatingRateCoupon* qlCmsCouponAsFloatingRateCoupon(QlCmsCoupon *o);+  QlCmsCoupon* qlCmsCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e);++  QlFloatingRateCoupon* qlCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e);+  QlFloatingRateCoupon* qlCappedFlooredCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e);+  QlFloatingRateCouponPricer* qlLognormalCmsSpreadPricer(QlCmsCouponPricer* cmsPricer, QlQuote* correlation, QlYieldTermStructure* couponDiscountCurve, unsigned integrationPoints, int haveVolatilityType, int volatilityType, double shift1, double shift2, QlError **e);+  Leg* qlCmsSpreadLeg(Schedule* schedule, QlSwapSpreadIndex* swapSpreadIndex, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, unsigned capsLen, double* caps, unsigned floorsLen, double* floors, int inArrears, int zeroPayments, QlError **e);++  void qlFreeDigitalCmsSpreadCoupon(QlDigitalCmsSpreadCoupon *o);+  QlDigitalCoupon* qlDigitalCmsSpreadCouponAsDigitalCoupon(QlDigitalCmsSpreadCoupon *o);+  QlDigitalCmsSpreadCoupon* qlDigitalCmsSpreadCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapSpreadIndex* index, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication* replication, int nakedOption, QlError **e);+  Leg* qlDigitalCmsSpreadLeg(Schedule* schedule, QlSwapSpreadIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, QlError **e);++  void qlFreeSwapSpreadIndex(QlSwapSpreadIndex *o);+  QlInterestRateIndex* qlSwapSpreadIndexAsInterestRateIndex(QlSwapSpreadIndex *o);+  QlSwapSpreadIndex* qlSwapSpreadIndex(const char* familyName, QlSwapIndex* swapIndex1, QlSwapIndex* swapIndex2, double gearing1, double gearing2, QlError **e);++  QlFloatingRateCoupon* qlCappedFlooredCmsCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlSwapIndex* index, double gearing, double spread, double cap, double floor, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e);++  void qlFreeDigitalReplication(QlDigitalReplication *o);+  QlDigitalReplication* qlDigitalReplication(int type, double gap, QlError **e);+  int qlDigitalReplicationType(QlDigitalReplication* o);+  double qlDigitalReplicationGap(QlDigitalReplication* o);++  void qlFreeDigitalCmsCoupon(QlDigitalCmsCoupon *o);+  QlDigitalCoupon* qlDigitalCmsCouponAsDigitalCoupon(QlDigitalCmsCoupon *o);+  QlDigitalCmsCoupon* qlDigitalCmsCoupon(QlCmsCoupon* underlying, double callStrike, int callPosition, int callATM, double callPayoff, double putStrike, int putPosition, int putATM, double putPayoff, QlDigitalReplication* replication, int nakedOption, QlError **e);++  Leg* qlDigitalCmsLeg(Schedule* schedule, QlSwapIndex* index, unsigned notionalsLen, double* notionals, DayCounter* paymentDayCounter, int paymentAdjustment, unsigned fixingDaysLen, unsigned* fixingDays, unsigned gearingsLen, double* gearings, unsigned spreadsLen, double* spreads, int inArrears, unsigned callStrikesLen, double* callStrikes, int callPosition, int callATM, unsigned callPayoffsLen, double* callPayoffs, unsigned putStrikesLen, double* putStrikes, int putPosition, int putATM, unsigned putPayoffsLen, double* putPayoffs, QlDigitalReplication* replication, int nakedOption, QlError **e);+  Leg* qlDigitalIborLeg(Schedule*, QlIborIndex*, unsigned, double*, DayCounter*, int, unsigned, unsigned*, unsigned, double*, unsigned, double*, int, unsigned, double*, int, int, unsigned, double*, unsigned, double*, int, int, unsigned, double*, QlDigitalReplication*, int, QlError **e);+  Leg* qlMultipleResetsLeg(Schedule*, QlIborIndex*, unsigned, unsigned, double*, DayCounter*, int, Calendar*, int, unsigned, unsigned*, unsigned, double*, unsigned, double*, unsigned, double*, int, int, Calendar*, int, int, int, QlError **e);++  void qlFreeVarianceSwap(QlVarianceSwap *o);+  QlInstrument* qlVarianceSwapAsInstrument(QlVarianceSwap *o);+  QlVarianceSwap* qlVarianceSwap(int position, double strike, double notional, int startDate, int maturityDate, QlError **e);+  double qlVarianceSwapVariance(QlVarianceSwap* o, QlError **e);++  void qlFreeVarianceOption(QlVarianceOption *o);+  QlInstrument* qlVarianceOptionAsInstrument(QlVarianceOption *o);+  QlVarianceOption* qlVarianceOption(QlPayoff* payoff, double notional, int startDate, int maturityDate, QlError **e);++  void qlFreeCommodity(QlCommodity *o);+  QlInstrument* qlCommodityAsInstrument(QlCommodity *o);+  void qlFreeEnergyCommodity(QlEnergyCommodity *o);+  QlCommodity* qlEnergyCommodityAsCommodity(QlEnergyCommodity *o);++  /* Commodity base-level getters. Each output array needs its own c2hs `preArray-` length cell,+     even though arrays returned by one call have equal lengths. */+  void qlCommodityAddPricingError(QlCommodity *o, int level, char *error, char *detail);+  void qlCommoditySecondaryCostAmounts(QlCommodity *o, unsigned *len, char ***keys,+      unsigned *len2, double **amounts, unsigned *len3, Currency ***currencies, QlError **e);+  void qlCommodityPricingErrors(QlCommodity *o, unsigned *len, int **levels,+      unsigned *len2, char ***errors, unsigned *len3, char ***details, QlError **e);++  /* EnergyCommodity -- quantity() is pure virtual upstream; one shim covers every leaf. */+  double qlEnergyCommodityQuantity(QlEnergyCommodity *o, CommodityType **outCt, UnitOfMeasure **outUom, QlError **e);++  /* EnergyFuture. secondaryCosts is 5 c2hs-marshalled arrays (keys/isUnitCost/amounts/currencies/+     uoms), each an independent `withXArray*&` clause -- c2hs emits one length parameter per array+     clause even though all 5 always carry the same Haskell-side length, so 4 of the 5 `unsigned`s+     below are deliberately unnamed (same convention as qlCompositeInstrument's `unsigned, double+     *coeff` above) and only the first (scLen) is read. */+  QlEnergyFuture* qlEnergyFuture(int buySell,+      CommodityType *qCt, UnitOfMeasure *qUom, double qAmount,+      double tpAmount, Currency *tpCcy, UnitOfMeasure *tpUom,+      QlCommodityIndex *index, CommodityType *commodityType,+      unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,+      unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,+      QlError **e);+  void qlFreeEnergyFuture(QlEnergyFuture *o);++  /* EnergySwap -- binds no constructor (see qlaux.h); base-level getters generalized over both+     leaves below. */+  void qlFreeEnergySwap(QlEnergySwap *o);+  QlEnergyCommodity* qlEnergySwapAsEnergyCommodity(QlEnergySwap *o);+  void qlEnergySwapDailyPositions(QlEnergySwap *o, unsigned *len, int **dates,+      unsigned *len2, double **quantityAmounts, unsigned *len3, double **payLegPrices,+      unsigned *len4, double **receiveLegPrices, unsigned *len5, double **riskDeltas,+      unsigned *len6, int **unrealized, QlError **e);+  void qlEnergySwapPaymentCashFlows(QlEnergySwap *o, unsigned *len, QlCommodityCashFlow ***out, QlError **e);++  /* EnergyVanillaSwap. pricingPeriods is 6 parallel arrays (start/end/payment dates, quantity+     type/uom/amount); like secondaryCosts above, only the first length parameter of each group+     (ppLen, scLen) is read. */+  void qlFreeEnergyVanillaSwap(QlEnergyVanillaSwap *o);+  QlEnergySwap* qlEnergyVanillaSwapAsEnergySwap(QlEnergyVanillaSwap *o);+  QlEnergyVanillaSwap* qlEnergyVanillaSwap(int payer, Calendar *calendar,+      double fixedPriceAmount, Currency *fixedPriceCurrency, UnitOfMeasure *fixedPriceUnitOfMeasure,+      QlCommodityIndex *index, Currency *payCurrency, Currency *receiveCurrency,+      unsigned ppLen, int *ppStartDates, unsigned, int *ppEndDates, unsigned, int *ppPaymentDates,+      unsigned, CommodityType **ppTypes, unsigned, UnitOfMeasure **ppUoms, unsigned, double *ppAmounts,+      CommodityType *commodityType,+      unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,+      unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,+      QlYieldTermStructure *payLegTS, QlYieldTermStructure *receiveLegTS, QlYieldTermStructure *discountTS,+      QlError **e);++  /* EnergyBasisSwap -- same pricingPeriods/secondaryCosts array-group shape as EnergyVanillaSwap. */+  void qlFreeEnergyBasisSwap(QlEnergyBasisSwap *o);+  QlEnergySwap* qlEnergyBasisSwapAsEnergySwap(QlEnergyBasisSwap *o);+  QlEnergyBasisSwap* qlEnergyBasisSwap(Calendar *calendar,+      QlCommodityIndex *spreadIndex, QlCommodityIndex *payIndex, QlCommodityIndex *receiveIndex,+      int spreadToPayLeg, Currency *payCurrency, Currency *receiveCurrency,+      unsigned ppLen, int *ppStartDates, unsigned, int *ppEndDates, unsigned, int *ppPaymentDates,+      unsigned, CommodityType **ppTypes, unsigned, UnitOfMeasure **ppUoms, unsigned, double *ppAmounts,+      double basisAmount, Currency *basisCurrency, UnitOfMeasure *basisUnitOfMeasure,+      CommodityType *commodityType,+      unsigned scLen, char **scKeys, unsigned, int *scIsUnitCost, unsigned, double *scAmounts,+      unsigned, Currency **scCurrencies, unsigned, UnitOfMeasure **scUoms,+      QlYieldTermStructure *payLegTS, QlYieldTermStructure *receiveLegTS, QlYieldTermStructure *discountTS,+      QlError **e);++  /* CommodityCashFlow -- a standalone CashFlow leaf, never Haskell-constructed (only ever produced+     by EnergySwap::paymentCashFlows()). */+  void qlFreeCommodityCashFlow(QlCommodityCashFlow *o);+  QlCashFlow *qlCommodityCashFlowAsCashFlow(QlCommodityCashFlow *o);+  double qlCommodityCashFlowDiscountedAmount(QlCommodityCashFlow *o, Currency **outCcy, QlError **e);+  double qlCommodityCashFlowUndiscountedAmount(QlCommodityCashFlow *o, Currency **outCcy, QlError **e);+  double qlCommodityCashFlowDiscountedPaymentAmount(QlCommodityCashFlow *o, Currency **outCcy, QlError **e);+  double qlCommodityCashFlowUndiscountedPaymentAmount(QlCommodityCashFlow *o, Currency **outCcy, QlError **e);+  double qlCommodityCashFlowDiscountFactor(QlCommodityCashFlow *o);+  double qlCommodityCashFlowPaymentDiscountFactor(QlCommodityCashFlow *o);+  int qlCommodityCashFlowFinalized(QlCommodityCashFlow *o);++  /* CommodityPricingHelper::createPricingPeriods */+  void qlCreatePricingPeriods(int startDate, int endDate, CommodityType *qCt, UnitOfMeasure *qUom, double qAmount,+      int deliverySchedule, int qtyPeriodicity, PaymentTerm *paymentTerm,+      unsigned *len, int **ppStartDates, unsigned *len2, int **ppEndDates, unsigned *len3, int **ppPaymentDates,+      unsigned *len4, CommodityType ***ppTypes, unsigned *len5, UnitOfMeasure ***ppUoms, unsigned *len6, double **ppAmounts,+      QlError **e);+  /* YoYInflationCapFloor -- constructed directly at the given Type (Cap/Floor/Collar are thin+     ctor-only subclasses upstream with no logic of their own, so there's no need to touch them). */+  QlYoYInflationCapFloor *qlYoYInflationCap(Leg *yoyLeg, unsigned exerciseRatesLen, double *exerciseRates, QlError **e);+  QlYoYInflationCapFloor *qlYoYInflationFloor(Leg *yoyLeg, unsigned exerciseRatesLen, double *exerciseRates, QlError **e);+  QlYoYInflationCapFloor *qlYoYInflationCollar(Leg *yoyLeg, unsigned capRatesLen, double *capRates,+      unsigned floorRatesLen, double *floorRates, QlError **e);+  void qlFreeYoYInflationCapFloor(QlYoYInflationCapFloor *o);+  QlInstrument *qlYoYInflationCapFloorAsInstrument(QlYoYInflationCapFloor *o);+  double qlYoYInflationCapFloorAtmRate(QlYoYInflationCapFloor *o, QlYieldTermStructure *discountCurve, QlError **e);+  QlYoYInflationCapFloor *qlYoYInflationCapFloorOptionlet(QlYoYInflationCapFloor *o, unsigned n, QlError **e);++  /* CPICapFloor -- a single cumulative option, unlike YoYInflationCapFloor; no impliedVolatility+     (no vol-driven engine exists for it in QL 1.43, see qlInterpolatingCPICapFloorEngine below). */+  QlCPICapFloor *qlCPICapFloor(int type, double nominal, int startDate, double baseCPI, int maturity,+      Calendar *fixCalendar, int fixConvention, Calendar *payCalendar, int payConvention, double strike,+      QlZeroInflationIndex *index, int observationLagLen, int observationLagUnit, int observationInterpolation,+      QlError **e);+  void qlFreeCPICapFloor(QlCPICapFloor *o);+  QlInstrument *qlCPICapFloorAsInstrument(QlCPICapFloor *o);++  // ql/experimental/credit -- portfolio credit scaffolding (Pool/Issuer/Basket/loss models) plus+  // the SyntheticCDO/NthToDefault instruments built on it. Folded in here rather than kept in a+  // dedicated qlCredit.{h,cpp} pair -- too small to justify its own source files.++  // ql/experimental/credit/defaultprobabilitykey.hpp -- only the NorthAmericaCorpDefaultKey+  // constructor is bound; DefaultProbKey itself has no public constructor of its own upstream.+  DefaultProbKey* qlNorthAmericaCorpDefaultKey(Currency* currency, int seniority, int graceFailureToPayLen, int graceFailureToPayUnit, double amountFailure, int restructuringType, QlError **e);+  void qlFreeDefaultProbKey(DefaultProbKey *o);++  // ql/experimental/credit/issuer.hpp -- only the key_curve_pair-vector constructor (empty+  // DefaultEventSet) is bound.+  Issuer* qlIssuer(unsigned probabilitiesLen, DefaultProbKey** keys, QlDefaultProbabilityTermStructure** curves, QlError **e);+  void qlFreeIssuer(Issuer *o);++  // ql/experimental/credit/pool.hpp -- Pool::add is looped over internally; no add mutator is+  // exposed to Haskell.+  QlPool* qlPool(unsigned namesLen, char** names, Issuer** issuers, DefaultProbKey** keys, QlError **e);+  void qlFreePool(QlPool *o);++  // ql/experimental/credit/basket.hpp -- the loss model is a constructor argument here; the+  // shim calls Basket::setLossModel internally, so no setter is exposed to Haskell.+  QlBasket* qlBasket(int refDate, unsigned namesLen, char** names, double* notionals, QlPool* pool, double attachmentRatio, double detachmentRatio, QlClaim* claim, QlDefaultLossModel* lossModel, QlError **e);+  void qlFreeBasket(QlBasket *o);+  double qlBasketNotional(QlBasket* o, QlError **e);+  // Bound early (ahead of the rest of Basket's risk-output surface) to give this step's own+  // test a discriminating check that the loss model actually wired up; the remaining outputs+  // (percentile, expectedShortfall, lossDistribution, ...) are a separate step.+  double qlBasketExpectedTrancheLoss(QlBasket* o, int d, QlError **e);+  // Identical to qlBasket -- QuantLib's own Basket doesn't distinguish which DefaultLossModel+  // subclass it holds. This entry point exists only so the Haskell side can bind its result as+  // the distinct DigitalBasket type (see QuantLib/Internal/Type.hs's CREDIT comment), which is+  // the only basket type qlNthToDefault accepts: GaussianLHPLossModel-backed baskets (built via+  // qlBasket) don't implement the probAtLeastNEvents/probsBeingNthEvent virtuals+  // IntegralNtdEngine needs, and ConstantLossModel-backed baskets don't implement+  // expectedTrancheLoss -- QL_FAILs at runtime either way, caught here at compile time instead.+  QlBasket* qlDigitalBasket(int refDate, unsigned namesLen, char** names, double* notionals, QlPool* pool, double attachmentRatio, double detachmentRatio, QlClaim* claim, QlDefaultLossModel* lossModel, QlError **e);++  // Loss-model-agnostic: basket state, not delegated to the loss model.+  double qlBasketRemainingNotional(QlBasket* o, int d, QlError **e);+  double qlBasketRecoveryRate(QlBasket* o, int d, unsigned iName, QlError **e);++  // Tranche-loss outputs -- implemented by GaussianLHPLossModel.+  double qlBasketProbOverLoss(QlBasket* o, int d, double lossFraction, QlError **e);+  double qlBasketPercentile(QlBasket* o, int d, double prob, QlError **e);+  double qlBasketExpectedShortfall(QlBasket* o, int d, double prob, QlError **e);++  // Digital-loss outputs -- implemented by ConstantLossModel.+  double qlBasketDefaultCorrelation(QlBasket* o, int d, unsigned iName, unsigned jName, QlError **e);+  double qlBasketProbAtLeastNEvents(QlBasket* o, unsigned n, int d, QlError **e);++  // ql/experimental/credit/gaussianlhplossmodel.hpp -- only the Handle<Quote> correlation+  // overload is bound, per the std::variant/Handle<Quote> convention (a caller with a bare+  // number gets a simpleQuote for free).+  QlDefaultLossModel* qlGaussianLHPLossModel(QlQuote* correlQuote, unsigned recoveriesLen, double* recoveries, QlError **e);+  void qlFreeDefaultLossModel(QlDefaultLossModel *o);++  // ql/experimental/credit/syntheticcdo.hpp -- notional is ext::optional<Real>; haveNotional+  // selects between the "leveraged off basket tranche notional" default (0) and an explicit+  // override notional.+  QlSyntheticCDO* qlSyntheticCDO(QlBasket* basket, int side, Schedule* schedule, double upfrontRate, double runningRate, DayCounter* dayCounter, int paymentConvention, int haveNotional, double notional, QlError **e);+  void qlFreeSyntheticCDO(QlSyntheticCDO *o);+  QlInstrument* qlSyntheticCDOAsInstrument(QlSyntheticCDO *o);+  double qlSyntheticCDOFairPremium(QlSyntheticCDO* o, QlError **e);+  double qlSyntheticCDOFairUpfrontPremium(QlSyntheticCDO* o, QlError **e);+  double qlSyntheticCDOPremiumValue(QlSyntheticCDO* o, QlError **e);+  double qlSyntheticCDOProtectionValue(QlSyntheticCDO* o, QlError **e);+  double qlSyntheticCDOPremiumLegNPV(QlSyntheticCDO* o, QlError **e);+  double qlSyntheticCDOProtectionLegNPV(QlSyntheticCDO* o, QlError **e);+  double qlSyntheticCDORemainingNotional(QlSyntheticCDO* o, QlError **e);+  // leverageFactor() is skipped -- a constructor echo (notional / basket tranche notional).+  double qlSyntheticCDOImplicitCorrelation(QlSyntheticCDO* o, unsigned recoveriesLen, double* recoveries, QlYieldTermStructure* discountCurve, double targetNPV, double accuracy, QlError **e);++  // ql/experimental/credit/constantlosslatentmodel.hpp -- ConstantLossModel<CopulaPolicy>, only+  // the Handle<Quote>/nVariables (one-factor) constructor. tOrdersLen == 0 selects+  // GaussianCopulaPolicy; tOrdersLen > 0 selects TCopulaPolicy with these degrees of freedom+  // (see qlTermStructureAux.h for the exact-length requirement). The dispatch itself lives in+  // qlTermStructureAux.cpp, alongside the other DefaultProbabilityTermStructure/credit dispatch+  // already there, per AGENTS.md's rule that a runtime-enum-selects-a-template-argument switch+  // belongs in its domain's Aux TU.+  QlDefaultLossModel* qlConstantLossModel(QlQuote* correlQuote, unsigned recoveriesLen, double* recoveries, int integralType, unsigned tOrdersLen, int* tOrders, QlError **e);++  // ql/experimental/credit/nthtodefault.hpp -- only fairPremium() is bound; premium/nominal/+  // dayCounter/side/rank/basketSize are all constructor echoes.+  QlNthToDefault* qlNthToDefault(QlBasket* basket, unsigned n, int side, Schedule* premiumSchedule, double upfrontRate, double premiumRate, DayCounter* dayCounter, double nominal, int settlePremiumAccrual, QlError **e);+  void qlFreeNthToDefault(QlNthToDefault *o);+  QlInstrument* qlNthToDefaultAsInstrument(QlNthToDefault *o);+  double qlNthToDefaultFairPremium(QlNthToDefault* o, QlError **e);++  // ql/instruments/bonds/btp.hpp -- RendistatoBasket/RendistatoCalculator, QuantLib's own+  // BTP-vs-swap-curve relative-value tool for the Italian bond market. size/btps/+  // cleanPriceQuotes/outstandings/weights/outstanding on RendistatoBasket are all constructor+  // echoes and are not bound; only the basket constructor itself is needed to build a+  // RendistatoCalculator.+  QlRendistatoBasket *qlRendistatoBasket(unsigned btpsLen, QlBTP **btps, unsigned outstandingsLen, double *outstandings, unsigned quotesLen, QlQuote **cleanPriceQuotes, QlError **e);+  void qlFreeRendistatoBasket(QlRendistatoBasket *o);++  // euriborTenor/euriborForwardCurve build the Euribor index RendistatoCalculator needs+  // internally (for its ladder of comparison swaps); Euribor itself is never exposed back to+  // Haskell, since nothing calls it back -- constructed transiently here exactly like+  // GarmanKlass's IntervalPrice.+  QlRendistatoCalculator *qlRendistatoCalculator(QlRendistatoBasket *basket, int euriborTenorLen, int euriborTenorUnit, QlYieldTermStructure *euriborForwardCurve, QlYieldTermStructure *discountCurve, QlError **e);+  void qlFreeRendistatoCalculator(QlRendistatoCalculator *o);+  double qlRendistatoCalculatorYield(QlRendistatoCalculator *o, QlError **e);+  double qlRendistatoCalculatorDuration(QlRendistatoCalculator *o, QlError **e);+  void qlRendistatoCalculatorYields(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e);+  void qlRendistatoCalculatorDurations(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e);+  void qlRendistatoCalculatorSwapLengths(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e);+  void qlRendistatoCalculatorSwapRates(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e);+  void qlRendistatoCalculatorSwapYields(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e);+  void qlRendistatoCalculatorSwapDurations(QlRendistatoCalculator *o, unsigned *len, double **out, QlError **e);+  QlVanillaSwap *qlRendistatoCalculatorEquivalentSwap(QlRendistatoCalculator *o, QlError **e);+  double qlRendistatoCalculatorEquivalentSwapRate(QlRendistatoCalculator *o, QlError **e);+  double qlRendistatoCalculatorEquivalentSwapYield(QlRendistatoCalculator *o, QlError **e);+  double qlRendistatoCalculatorEquivalentSwapDuration(QlRendistatoCalculator *o, QlError **e);+  double qlRendistatoCalculatorEquivalentSwapLength(QlRendistatoCalculator *o, QlError **e);+  double qlRendistatoCalculatorEquivalentSwapSpread(QlRendistatoCalculator *o, QlError **e);+  QlQuote *qlRendistatoEquivalentSwapLengthQuote(QlRendistatoCalculator *o, QlError **e);+  QlQuote *qlRendistatoEquivalentSwapSpreadQuote(QlRendistatoCalculator *o, QlError **e);+void qlFreeMtMCrossCurrencyBasisSwap(QlMtMCrossCurrencyBasisSwap* o);+QlSwap* qlMtMCrossCurrencyBasisSwapAsSwap(QlMtMCrossCurrencyBasisSwap* o);+QlMtMCrossCurrencyBasisSwap* qlMtMCrossCurrencyBasisSwap(int type, double fxBaseNominal, Currency* fxBaseCurrency, Schedule* fxBaseSchedule, QlIborIndex* fxBaseIndex, double fxBaseSpread, double fxBaseGearing, double fxQuoteNominal, Currency* fxQuoteCurrency, Schedule* fxQuoteSchedule, QlIborIndex* fxQuoteIndex, double fxQuoteSpread, double fxQuoteGearing, int resetBase, unsigned fxResetFixingDays, Calendar* fxResetFixingCalendar, int fxBasePaymentLag, int fxQuotePaymentLag, int fxBasePaymentConvention, int fxQuotePaymentConvention, int fxBaseCompoundSpread, unsigned fxBaseLookbackDays, int fxBaseObservationShift, unsigned fxBaseLockoutDays, int fxBaseAveragingMethod, int fxQuoteCompoundSpread, unsigned fxQuoteLookbackDays, int fxQuoteObservationShift, unsigned fxQuoteLockoutDays, int fxQuoteAveragingMethod, int telescopicValueDates, int useIndexedCoupons, QlStubIndexSelection* fxBaseStubIndexSelection, QlStubIndexSelection* fxQuoteStubIndexSelection, QlError **e);+Currency* qlMtMLegCurrency(QlMtMCrossCurrencyBasisSwap* o, unsigned j, QlError **e);+double qlMtMInCcyLegBPS(QlMtMCrossCurrencyBasisSwap* o, unsigned j, QlError **e);+double qlMtMInCcyLegNPV(QlMtMCrossCurrencyBasisSwap* o, unsigned j, QlError **e);+double qlMtMNpvDateDiscounts(QlMtMCrossCurrencyBasisSwap* o, unsigned j, QlError **e);+double qlMtMFairFxBaseSpread(QlMtMCrossCurrencyBasisSwap* o, QlError **e);+double qlMtMFairFxQuoteSpread(QlMtMCrossCurrencyBasisSwap* o, QlError **e);+double qlMtMFairPaySpread(QlMtMCrossCurrencyBasisSwap* o, QlError **e);+double qlMtMFairRecSpread(QlMtMCrossCurrencyBasisSwap* o, QlError **e);+void qlMtMFxResetRates(QlMtMCrossCurrencyBasisSwap* o, unsigned* len, double** out, QlError **e);+void qlMtMFxResetNotionals(QlMtMCrossCurrencyBasisSwap* o, unsigned* len, double** out, QlError **e);+void qlFxResetConventionReset(unsigned fixingDays, Calendar* calendar, int date, int* fixing, int* value, QlError **e);+int qlFxResetConventionValueDate(unsigned fixingDays, Calendar* calendar, int date, QlError **e);+void qlFreeFxResetPricer(QlFxResetPricer* o);+QlFxResetPricer* qlDiscountingFxResetPricer(Currency* constantCcy, Currency* resetCcy, QlYieldTermStructure* constantCurve, QlYieldTermStructure* resetCurve, QlQuote* spotFx, int spotIsResettablePerConstant, int spotFxSettleDate, QlError **e);+double qlFxResetRate(QlFxResetPricer* o, int fixing, int value, QlError **e);+void qlFreeFxResetCoupon(QlFxResetCoupon* o);+QlFloatingRateCoupon* qlFxResetCouponAsFloatingRateCoupon(QlFxResetCoupon* o);+void qlFreeFxResetNotionalExchange(QlFxResetNotionalExchange* o);+QlCashFlow* qlFxResetNotionalExchangeAsCashFlow(QlFxResetNotionalExchange* o);+QlFxResetCoupon* qlFxResetCoupon(QlFloatingRateCoupon* underlying, double notional, int fixing, int value, QlError **e);+QlFxResetNotionalExchange* qlFxResetNotionalExchange(int payment, double notional, int previousFixing, int previousValue, int currentFixing, int currentValue, QlError **e);+void qlFxResetCouponSetFxResetPricer(QlFxResetCoupon* o, QlFxResetPricer* pricer, QlError **e);+void qlFxResetNotionalExchangeSetFxResetPricer(QlFxResetNotionalExchange* o, QlFxResetPricer* pricer, QlError **e);+void qlSetFxResetLegPricer(Leg* leg, QlFxResetPricer* pricer, QlError **e);+QlIborCoupon* qlStubIborCoupon(int paymentDate, double nominal, int startDate, int endDate, unsigned fixingDays, QlStubIndexSelection* selection, double gearing, double spread, int refPeriodStart, int refPeriodEnd, DayCounter* dayCounter, int inArrears, int exCouponDate, int fixingConvention, QlError **e);+double qlCouponNominal(QlCoupon* o, QlError **e); #ifdef __cplusplus } #endif
cbits/qlMisc.cpp view
@@ -30,6 +30,9 @@ #include <ql/experimental/commodities/unitofmeasureconversionmanager.hpp> #include <ql/experimental/commodities/commoditysettings.hpp> #include <ql/index.hpp>+#if QL_HEX_VERSION >= 0x01440000+#include <ql/cashflows/stubiborcoupon.hpp>+#endif #include <ql/math/statistics/sequencestatistics.hpp> #include <ql/math/statistics/riskstatistics.hpp> #include <ql/math/array.hpp>@@ -58,8 +61,18 @@ }  using namespace QuantLib;+#if QL_HEX_VERSION >= 0x01440000+StubIndexSelection qlStubSelection(const QlStubIndexSelection* p) {+  return p ? StubIndexSelection((StubIndexSelection::Convention)p->convention, p->indices) : StubIndexSelection();+}+#endif  namespace {+  void requireDirectCompounding(Compounding comp) {+    QL_REQUIRE(comp != SimpleThenCompounded && comp != CompoundedThenSimple,+               "mixed compounding is not supported for direct calculations: use CashFlow methods");+  }+   class SavedSettingsWithObservable {     public:       SavedSettingsWithObservable()@@ -87,16 +100,16 @@   // No bound caller requires the multi-output values() operation.   class HsCostFunction : public CostFunction {     public:-      explicit HsCostFunction(double (*fn)(double*, unsigned)) : fn_(fn) {}+      explicit HsCostFunction(QlCallback fn) : fn_(fn) {}       Real value(const Array& x) const override {         std::vector<double> xs(x.begin(), x.end());-        return fn_(xs.data(), (unsigned)xs.size());+        return fn_->array(xs.data(), (unsigned)xs.size());       }       Array values(const Array&) const override {         QL_FAIL("HsCostFunction::values not implemented");       }     private:-      double (*fn_)(double*, unsigned);+      QlCallback fn_;   };    // Quote composition remains inside QuantLib's observer graph so dependent objects update.@@ -147,15 +160,15 @@   using OpDerivedQuote = DerivedQuote<QuoteUnaryOp>;   using OpCompositeQuote = CompositeQuote<QuoteBinaryOp>;   using OpMultiCompositeQuote = MultiCompositeQuote<QuoteArrayOp>;-  using HsDerivedQuote = DerivedQuote<double (*)(double)>;-  using HsCompositeQuote = CompositeQuote<double (*)(double, double)>;+  using HsDerivedQuote = DerivedQuote<hasquant::UnaryCallback>;+  using HsCompositeQuote = CompositeQuote<hasquant::BinaryCallback>;   // MultiCompositeQuote calls its ArrayFunction with an Array, so unlike the unary/binary cases   // (where a plain double(*)(double...) is already a usable functor) the C function pointer needs   // a thin adapter. It is still handed the whole state vector per evaluation, so this crosses the   // language boundary once per value(), not once per element.   struct HsArrayFun {-    double (*fn)(const double*, unsigned);-    Real operator()(const Array& a) const {return fn(a.begin(), (unsigned)a.size());}+    QlCallback fn;+    Real operator()(const Array& a) const {return fn->array(a.begin(), (unsigned)a.size());}   };   using HsMultiCompositeQuote = MultiCompositeQuote<HsArrayFun>; @@ -167,7 +180,7 @@   // Shared TimeSeries<Real> marshalling for real-valued volatility estimators.   void realSeriesCalculate(const std::function<TimeSeries<Volatility>(const TimeSeries<Real>&)>& calc,       unsigned len, int *dates, double *values,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);     OutArrayResult<int> dateResult(outDatesLen, outDates);     OutArrayResult<double> valueResult(outValuesLen, outValues);     try {@@ -181,13 +194,13 @@       for (unsigned n = 0; n < outDs.size(); ++n) ds[n] = outDs[n].serialNumber();       for (unsigned n = 0; n < outVs.size(); ++n) vs[n] = outVs[n];       dateResult.commit(); valueResult.commit();-    } catch (std::exception& er) {*e = tracedup(er.what());}+    } catch (std::exception& er) {qlSetError(e, er.what());}   }    // TimeSeries<IntervalPrice> marshalling for the Garman-Klass estimators.   void intervalPriceSeriesCalculate(const std::function<TimeSeries<Volatility>(const TimeSeries<IntervalPrice>&)>& calc,       unsigned len, int *dates, double *opens, double *closes, double *highs, double *lows,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);     OutArrayResult<int> dateResult(outDatesLen, outDates);     OutArrayResult<double> valueResult(outValuesLen, outValues);     try {@@ -201,7 +214,7 @@       for (unsigned n = 0; n < outDs.size(); ++n) ds[n] = outDs[n].serialNumber();       for (unsigned n = 0; n < outVs.size(); ++n) vs[n] = outVs[n];       dateResult.commit(); valueResult.commit();-    } catch (std::exception& er) {*e = tracedup(er.what());}+    } catch (std::exception& er) {qlSetError(e, er.what());}   } } @@ -235,15 +248,16 @@ QL_TRACE_NAME(HsDerivedQuote) QL_TRACE_NAME(HsCompositeQuote) QL_TRACE_NAME(HsMultiCompositeQuote)+QL_TRACE_NAME(SavedSettingsWithObservable) #endif  int *qlAllocateInts(size_t size) {return ret(new int[size]);} double *qlAllocateDoubles(size_t size) {return ret(new double[size]);} const QuantLib::Date qlNullableDate(int serialNumber) {return !serialNumber ? Date() : Date(serialNumber);} int qlNullableDate(const QuantLib::Date &date) {return date == Date() ? 0 : date.serialNumber();}-ext::optional<bool> qlOptBool(int b) {return b == -1 ? ext::nullopt : ext::optional<bool>(b);}+optional<bool> qlOptBool(int b) {return b == -1 ? nullopt : optional<bool>(b);} int qlOptBool(optional<bool> b) {return b ? *b : -1;}-ext::optional<BusinessDayConvention> qlOptBusinessDayConvention(int c) {return c == -1 ? ext::nullopt : ext::optional<BusinessDayConvention>((BusinessDayConvention)c);}+optional<BusinessDayConvention> qlOptBusinessDayConvention(int c) {return c == -1 ? nullopt : optional<BusinessDayConvention>((BusinessDayConvention)c);}  char *tracedup(const char *p) {   trace("Duplicating string", (void *)p);@@ -411,7 +425,7 @@ double qlNullReal() {return Null<Real>();} double qlEpsilon() {return QL_EPSILON;} -Currency *qlCurrency(int ccy, char **e) {+Currency *qlCurrency(int ccy, QlError **e) { QlCallScope callbackScope(e);   try {     if (ccy < 0 || ccy >= (int)std::size(ccys))       QL_FAIL("Invalid currency index: " << ccy);@@ -435,9 +449,17 @@  /* dates are passed as int = serial number of the date, the code assumes that Haskell bindings validate date */ int qlSettingsEvaluationDate() {return Settings::instance().evaluationDate().operator Date().serialNumber();}+int qlSettingsRawEvaluationDate() {return Settings::instance().evaluationDate().value().serialNumber();}+const char *qlIndexHistoryNameKey(const char *name, QlError **e) { QlCallScope callbackScope(e);+  try {+    std::string key(name);+    for (auto& c : key) c = static_cast<char>(std::toupper(static_cast<unsigned char>(c)));+    return tracedup(key.c_str());+  } catch (std::exception& er) { return handleException<const char *>(e, er); }+} int qlSettingsEnforceTodaysHistoricFixings() {return Settings::instance().enforcesTodaysHistoricFixings();} -void qlSettingsSetEvaluationDate(int x, char **e) {+void qlSettingsSetEvaluationDate(int x, QlError **e) { QlCallScope callbackScope(e);   try {Settings::instance().evaluationDate() = qlNullableDate(x);   } catch (std::exception& er) {handleException<void *>(e, er);}} @@ -447,9 +469,9 @@ int qlSettingsIncludeReferenceDateEvents() {return Settings::instance().includeReferenceDateEvents();} void qlSettingsSetIncludeReferenceDateEvents(int x0) {Settings::instance().includeReferenceDateEvents() = x0;} void qlObservableSettingsDisableUpdates(int deferred) {ObservableSettings::instance().disableUpdates(deferred);}-void qlObservableSettingsEnableUpdates(char **e) {+void qlObservableSettingsEnableUpdates(QlError **e) { QlCallScope callbackScope(e);   try {ObservableSettings::instance().enableUpdates();-  } catch (std::exception& er) {*e = tracedup(er.what());}}+  } catch (std::exception& er) {qlSetError(e, er.what());}} int qlObservableSettingsUpdatesEnabled() {return ObservableSettings::instance().updatesEnabled();} int qlObservableSettingsUpdatesDeferred() {return ObservableSettings::instance().updatesDeferred();} void *qlSavedSettings() {return ret(new SavedSettingsWithObservable());}@@ -492,14 +514,14 @@     } }; -Currency* qlCreateCurrency(char* name, char* code, int numericCode, char* symbol, char* fractionSymbol, int fractionsPerUnit, Rounding* rounding, Currency* triangulationCurrency, char **e) {+Currency* qlCreateCurrency(char* name, char* code, int numericCode, char* symbol, char* fractionSymbol, int fractionsPerUnit, Rounding* rounding, Currency* triangulationCurrency, QlError **e) { QlCallScope callbackScope(e);   try {     return alloc(new CustomCurrency(arg(name), arg(code), numericCode,           arg(symbol), arg(fractionSymbol), fractionsPerUnit,           rounding, triangulationCurrency));   } catch (std::exception& er) {return handleException<Currency*>(e, er);}} -ExchangeRate *qlExchangeRate(Currency *source, Currency *target, double rate, char **e) {+ExchangeRate *qlExchangeRate(Currency *source, Currency *target, double rate, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new ExchangeRate(*arg(source), *arg(target), rate));   } catch (std::exception& er) {return handleException<ExchangeRate*>(e, er);} }@@ -507,7 +529,7 @@ double qlExchangeRateRate(ExchangeRate *o) {return arg(o)->rate();} int qlExchangeRateType_(ExchangeRate *o) {return arg(o)->type();} -double qlExchangeRateExchange(ExchangeRate *o, double amount, Currency *ccy, Currency **outCcy, char **e) {+double qlExchangeRateExchange(ExchangeRate *o, double amount, Currency *ccy, Currency **outCcy, QlError **e) { QlCallScope callbackScope(e);   *outCcy = 0;   try {     Money m = arg(o)->exchange(Money(amount, *arg(ccy)));@@ -516,18 +538,18 @@   } catch (std::exception& er) {return handleException<double>(e, er);} } -ExchangeRate *qlExchangeRateChain(ExchangeRate *r1, ExchangeRate *r2, char **e) {+ExchangeRate *qlExchangeRateChain(ExchangeRate *r1, ExchangeRate *r2, QlError **e) { QlCallScope callbackScope(e);   try {     return ret(new ExchangeRate(ExchangeRate::chain(*arg(r1), *arg(r2))));   } catch (std::exception& er) {return handleException<ExchangeRate*>(e, er);} } -void qlExchangeRateManagerAdd(ExchangeRate *rate, int startSerial, int endSerial, char **e) {+void qlExchangeRateManagerAdd(ExchangeRate *rate, int startSerial, int endSerial, QlError **e) { QlCallScope callbackScope(e);   try {ExchangeRateManager::instance().add(*arg(rate), qlNullableDate(startSerial), qlNullableDate(endSerial));-  } catch (std::exception& er) {*e = tracedup(er.what());}+  } catch (std::exception& er) {qlSetError(e, er.what());} } -ExchangeRate *qlExchangeRateManagerLookup(Currency *source, Currency *target, int dateSerial, int type, char **e) {+ExchangeRate *qlExchangeRateManagerLookup(Currency *source, Currency *target, int dateSerial, int type, QlError **e) { QlCallScope callbackScope(e);   try {     return ret(new ExchangeRate(ExchangeRateManager::instance().lookup(         *arg(source), *arg(target), qlNullableDate(dateSerial), (ExchangeRate::Type)type)));@@ -538,7 +560,7 @@  int qlMoneySettingsConversionType() {return Money::Settings::instance().conversionType();} void qlMoneySettingsSetConversionType(int t) {Money::Settings::instance().conversionType() = (Money::ConversionType)t;}-Currency *qlMoneySettingsBaseCurrency(char **e) {+Currency *qlMoneySettingsBaseCurrency(QlError **e) { QlCallScope callbackScope(e);   try {     const Currency &base = Money::Settings::instance().baseCurrency();     return base.empty() ? 0 : ret(new Currency(base));@@ -546,7 +568,7 @@ } void qlMoneySettingsSetBaseCurrency(Currency *c) {Money::Settings::instance().baseCurrency() = *arg(c);} -double qlConvertToBaseCurrency(double amount, Currency *ccy, Currency **outCcy, char **e) {+double qlConvertToBaseCurrency(double amount, Currency *ccy, Currency **outCcy, QlError **e) { QlCallScope callbackScope(e);   *outCcy = 0;   try {     const Currency &base = Money::Settings::instance().baseCurrency();@@ -561,73 +583,73 @@   } catch (std::exception& er) {return handleException<double>(e, er);} } -InterestRate *qlInterestRate(double r, DayCounter *dc, int comp, int freq, char **e) {+InterestRate *qlInterestRate(double r, DayCounter *dc, int comp, int freq, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new InterestRate(r, *arg(dc), (Compounding) comp, (Frequency) freq));   } catch (std::exception& er) {return handleException<InterestRate *>(e, er);}}  // generated code-double qlInterestRateCompoundFactor1(InterestRate* o, int d1, int d2, int refStart, int refEnd, char **e) {-  try {return (arg(o))->compoundFactor(Date(d1), Date(d2), qlNullableDate(refStart), qlNullableDate(refEnd));+double qlInterestRateCompoundFactor1(InterestRate* o, int d1, int d2, int refStart, int refEnd, QlError **e) { QlCallScope callbackScope(e);+  try {requireDirectCompounding(o->compounding()); return (arg(o))->compoundFactor(Date(d1), Date(d2), qlNullableDate(refStart), qlNullableDate(refEnd));   } catch (std::exception& er) {return handleException<double>(e, er);}} -double qlInterestRateCompoundFactor(InterestRate* o, double t, char **e) {-  try {return (arg(o))->compoundFactor(t);+double qlInterestRateCompoundFactor(InterestRate* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {requireDirectCompounding(o->compounding()); return (arg(o))->compoundFactor(t);   } catch (std::exception& er) {return handleException<double>(e, er);}} -double qlInterestRateDiscountFactor1(InterestRate* o, int d1, int d2, int refStart, int refEnd, char **e) {-  try {return (arg(o))->discountFactor(Date(d1), Date(d2), qlNullableDate(refStart), qlNullableDate(refEnd));+double qlInterestRateDiscountFactor1(InterestRate* o, int d1, int d2, int refStart, int refEnd, QlError **e) { QlCallScope callbackScope(e);+  try {requireDirectCompounding(o->compounding()); return (arg(o))->discountFactor(Date(d1), Date(d2), qlNullableDate(refStart), qlNullableDate(refEnd));   } catch (std::exception& er) {return handleException<double>(e, er);}} -double qlInterestRateDiscountFactor(InterestRate* o, double t, char **e) {-  try {return (arg(o))->discountFactor(t);+double qlInterestRateDiscountFactor(InterestRate* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {requireDirectCompounding(o->compounding()); return (arg(o))->discountFactor(t);   } catch (std::exception& er) {return handleException<double>(e, er);}} -InterestRate* qlInterestRateEquivalentRate1(InterestRate* o, DayCounter* resultDC, int comp, int freq, int d1, int d2, int refStart, int refEnd, char **e) {-  try {return ret(new InterestRate(arg(o)->equivalentRate(*arg(resultDC), (Compounding)comp, (Frequency)freq, Date(d1), Date(d2), qlNullableDate(refStart), qlNullableDate(refEnd))));+InterestRate* qlInterestRateEquivalentRate1(InterestRate* o, DayCounter* resultDC, int comp, int freq, int d1, int d2, int refStart, int refEnd, QlError **e) { QlCallScope callbackScope(e);+  try {requireDirectCompounding((Compounding)comp); requireDirectCompounding(o->compounding()); return ret(new InterestRate(arg(o)->equivalentRate(*arg(resultDC), (Compounding)comp, (Frequency)freq, Date(d1), Date(d2), qlNullableDate(refStart), qlNullableDate(refEnd))));   } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}} -InterestRate* qlInterestRateEquivalentRate(InterestRate* o, int comp, int freq, double t, char **e) {-  try {return ret(new InterestRate(arg(o)->equivalentRate((Compounding)comp, (Frequency)freq, t)));+InterestRate* qlInterestRateEquivalentRate(InterestRate* o, int comp, int freq, double t, QlError **e) { QlCallScope callbackScope(e);+  try {requireDirectCompounding((Compounding)comp); requireDirectCompounding(o->compounding()); return ret(new InterestRate(arg(o)->equivalentRate((Compounding)comp, (Frequency)freq, t)));   } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}} -InterestRate* qlInterestRateImpliedRate1(InterestRate* o, double compound, DayCounter* resultDC, int comp, int freq, int d1, int d2, int refStart, int refEnd, char **e) {-  try {return ret(new InterestRate(arg(o)->impliedRate(compound, *arg(resultDC), (Compounding)comp, (Frequency)freq, Date(d1), Date(d2), qlNullableDate(refStart), qlNullableDate(refEnd))));+InterestRate* qlInterestRateImpliedRate1(InterestRate* o, double compound, DayCounter* resultDC, int comp, int freq, int d1, int d2, int refStart, int refEnd, QlError **e) { QlCallScope callbackScope(e);+  try {requireDirectCompounding((Compounding)comp); return ret(new InterestRate(arg(o)->impliedRate(compound, *arg(resultDC), (Compounding)comp, (Frequency)freq, Date(d1), Date(d2), qlNullableDate(refStart), qlNullableDate(refEnd))));   } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}} -InterestRate* qlInterestRateImpliedRate(InterestRate* o, double compound, DayCounter* resultDC, int comp, int freq, double t, char **e) {-  try {return ret(new InterestRate(arg(o)->impliedRate(compound, *arg(resultDC), (Compounding)comp, (Frequency)freq, t)));+InterestRate* qlInterestRateImpliedRate(InterestRate* o, double compound, DayCounter* resultDC, int comp, int freq, double t, QlError **e) { QlCallScope callbackScope(e);+  try {requireDirectCompounding((Compounding)comp); return ret(new InterestRate(arg(o)->impliedRate(compound, *arg(resultDC), (Compounding)comp, (Frequency)freq, t)));   } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}} -Constraint* qlBoundaryConstraint(double low, double high, char **e) {+Constraint* qlBoundaryConstraint(double low, double high, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new BoundaryConstraint(low, high));   } catch (std::exception& er) {return handleException<Constraint*>(e, er);}}-Constraint* qlCompositeConstraint(Constraint* c1, Constraint* c2, char **e) {+Constraint* qlCompositeConstraint(Constraint* c1, Constraint* c2, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new CompositeConstraint(*arg(c1), *arg(c2)));   } catch (std::exception& er) {return handleException<Constraint*>(e, er);}}-Constraint* qlNoConstraint(char **e) {+Constraint* qlNoConstraint(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new NoConstraint());   } catch (std::exception& er) {return handleException<Constraint*>(e, er);}}-Constraint* qlPositiveConstraint(char **e) {+Constraint* qlPositiveConstraint(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new PositiveConstraint());   } catch (std::exception& er) {return handleException<Constraint*>(e, er);}} -QlOptimizationMethod* qlLevenbergMarquardt(double epsfcn, double xtol, double gtol, int useCostFunctionsJacobian, char **e) {+QlOptimizationMethod* qlLevenbergMarquardt(double epsfcn, double xtol, double gtol, int useCostFunctionsJacobian, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlOptimizationMethod(shared_ptr<OptimizationMethod>(alloc(new LevenbergMarquardt(epsfcn, xtol, gtol, useCostFunctionsJacobian)))));   } catch (std::exception& er) {return handleException<QlOptimizationMethod*>(e, er);}}-QlOptimizationMethod* qlSimplex(double lambda, char **e) {+QlOptimizationMethod* qlSimplex(double lambda, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlOptimizationMethod(shared_ptr<OptimizationMethod>(alloc(new Simplex(lambda)))));   } catch (std::exception& er) {return handleException<QlOptimizationMethod*>(e, er);}} -QlEndCriteria* qlEndCriteria(unsigned maxIterations, unsigned maxStationaryStateIterations, double rootEpsilon, double functionEpsilon, double gradientNormEpsilon, char **e) {+QlEndCriteria* qlEndCriteria(unsigned maxIterations, unsigned maxStationaryStateIterations, double rootEpsilon, double functionEpsilon, double gradientNormEpsilon, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlEndCriteria(shared_ptr<EndCriteria>(alloc(new EndCriteria(maxIterations, maxStationaryStateIterations, rootEpsilon, functionEpsilon, gradientNormEpsilon)))));   } catch (std::exception& er) {return handleException<QlEndCriteria*>(e, er);}} -void qlOptimize(double (*costFn)(double*, unsigned), unsigned x0Len, double* x0, Constraint* constraint, QlOptimizationMethod* method, QlEndCriteria* endCriteria, unsigned* outLen, double** outValues, double* outCost, int* outEndCriteriaType, char **e) {+void qlOptimize(QlCallback* costFn, unsigned x0Len, double* x0, Constraint* constraint, QlOptimizationMethod* method, QlEndCriteria* endCriteria, unsigned* outLen, double** outValues, double* outCost, int* outEndCriteriaType, QlError **e) { QlCallScope callbackScope(e);   OutArrayResult<double> valuesResult(outLen, outValues);   OutValue<double> costResult(outCost);   OutValue<int> endCriteriaResult(outEndCriteriaType);   try {-    HsCostFunction cf(costFn);+    HsCostFunction cf(*arg(costFn));     NoConstraint noConstraint;     Problem problem(cf, constraint ? *arg(constraint) : static_cast<Constraint&>(noConstraint), Array(x0, x0+x0Len));     endCriteriaResult.set((int)(*arg(method))->minimize(problem, **arg(endCriteria)));@@ -640,91 +662,91 @@     endCriteriaResult.commit();   } catch (std::exception& er) {(void)handleException<int>(e, er);}} -TimeGrid* qlTimeGrid1(double end, unsigned steps, char **e) {+TimeGrid* qlTimeGrid1(double end, unsigned steps, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new TimeGrid(end, steps));   } catch (std::exception& er) {return handleException<TimeGrid*>(e, er);}}-TimeGrid* qlTimeGrid2(unsigned x0Len, double* x0, char **e) {+TimeGrid* qlTimeGrid2(unsigned x0Len, double* x0, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new TimeGrid(x0, x0+x0Len));   } catch (std::exception& er) {return handleException<TimeGrid*>(e, er);}}-TimeGrid* qlTimeGrid3(unsigned x0Len, double* x0, unsigned steps, char **e) {+TimeGrid* qlTimeGrid3(unsigned x0Len, double* x0, unsigned steps, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new TimeGrid(x0, x0+x0Len, steps));   } catch (std::exception& er) {return handleException<TimeGrid*>(e, er);}} unsigned qlTimeGridSize(TimeGrid* t) {return arg(t)->size();}-double qlTimeGridAt(TimeGrid* t, unsigned i, char **e) {try {return arg(t)->at(i);} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlTimeGridPoints(TimeGrid *t, unsigned *len, double **p, char **e) {+double qlTimeGridAt(TimeGrid* t, unsigned i, QlError **e) { QlCallScope callbackScope(e);try {return arg(t)->at(i);} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlTimeGridPoints(TimeGrid *t, unsigned *len, double **p, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return std::vector<double>(arg(t)->begin(), t->end());}, len, p);   } catch (std::exception& er) {(void)handleException<double*>(e, er);}} -double qlRiskStatisticsMean(unsigned n, double *xs, char **e) {+double qlRiskStatisticsMean(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).mean();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsStandardDeviation(unsigned n, double *xs, char **e) {+double qlRiskStatisticsStandardDeviation(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).standardDeviation();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsVariance(unsigned n, double *xs, char **e) {+double qlRiskStatisticsVariance(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).variance();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsSkewness(unsigned n, double *xs, char **e) {+double qlRiskStatisticsSkewness(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).skewness();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsKurtosis(unsigned n, double *xs, char **e) {+double qlRiskStatisticsKurtosis(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).kurtosis();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsMin(unsigned n, double *xs, char **e) {+double qlRiskStatisticsMin(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).min();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsMax(unsigned n, double *xs, char **e) {+double qlRiskStatisticsMax(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).max();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsSemiVariance(unsigned n, double *xs, char **e) {+double qlRiskStatisticsSemiVariance(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).semiVariance();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsSemiDeviation(unsigned n, double *xs, char **e) {+double qlRiskStatisticsSemiDeviation(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).semiDeviation();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsDownsideVariance(unsigned n, double *xs, char **e) {+double qlRiskStatisticsDownsideVariance(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).downsideVariance();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsDownsideDeviation(unsigned n, double *xs, char **e) {+double qlRiskStatisticsDownsideDeviation(unsigned n, double *xs, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).downsideDeviation();   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsPercentile(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsPercentile(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).percentile(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsGaussianPercentile(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsGaussianPercentile(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).gaussianPercentile(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsValueAtRisk(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsValueAtRisk(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).valueAtRisk(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsGaussianValueAtRisk(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsGaussianValueAtRisk(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).gaussianValueAtRisk(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsExpectedShortfall(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsExpectedShortfall(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).expectedShortfall(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsGaussianExpectedShortfall(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsGaussianExpectedShortfall(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).gaussianExpectedShortfall(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsPotentialUpside(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsPotentialUpside(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).potentialUpside(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsGaussianPotentialUpside(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsGaussianPotentialUpside(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).gaussianPotentialUpside(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsRegret(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsRegret(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).regret(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsShortfall(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsShortfall(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).shortfall(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlRiskStatisticsAverageShortfall(unsigned n, double *xs, double y, char **e) {+double qlRiskStatisticsAverageShortfall(unsigned n, double *xs, double y, QlError **e) { QlCallScope callbackScope(e);   try {return riskStats(n, xs).averageShortfall(y);   } catch (std::exception& er) {return handleException<double>(e, er);}}  void qlSymmetricSchurDecomposition(unsigned rows, unsigned cols, double *m,     unsigned *valuesLen, double **values,-    unsigned *vectorRows, unsigned *vectorCols, unsigned *vectorsLen, double **vectors, char **e) {+    unsigned *vectorRows, unsigned *vectorCols, unsigned *vectorsLen, double **vectors, QlError **e) { QlCallScope callbackScope(e);   // Both outputs are staged and committed together, so a failure building either leaves neither   // array published.   OutArrayResult<double> valueResult(valuesLen, values);@@ -745,91 +767,91 @@   } catch (std::exception& er) {handleException<double*>(e, er);}}  void qlPseudoSqrt(unsigned rows, unsigned cols, double *m, int salvaging,-    unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, char **e) {+    unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillMatrixOut([&] {return pseudoSqrt(qlMatrix(m, rows, cols), (SalvagingAlgorithm::Type)salvaging);},       outRows, outCols, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}}  void qlRankReducedSqrt(unsigned rows, unsigned cols, double *m, unsigned maxRank,     double componentRetainedPercentage, int salvaging,-    unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, char **e) {+    unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillMatrixOut([&] {return rankReducedSqrt(qlMatrix(m, rows, cols), maxRank,         componentRetainedPercentage, (SalvagingAlgorithm::Type)salvaging);},       outRows, outCols, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}}  void qlCholeskyDecomposition(unsigned rows, unsigned cols, double *m, int flexible,-    unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, char **e) {+    unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillMatrixOut([&] {return CholeskyDecomposition(qlMatrix(m, rows, cols), flexible != 0);},       outRows, outCols, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}}  void qlCholeskySolveFor(unsigned rows, unsigned cols, double *l, unsigned bLen, double *b,-    unsigned *len, double **vs, char **e) {+    unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return CholeskySolveFor(qlMatrix(l, rows, cols), Array(b, b + bLen));}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -Rounding* qlRounding(char **e) {try {return alloc(new Rounding());} catch (std::exception& er) {return handleException<Rounding*>(e, er);}}-Rounding* qlRounding1(int precision, int type, int digit, char **e) {try {return alloc(new Rounding(precision, (Rounding::Type)type, digit));} catch (std::exception& er) {return handleException<Rounding*>(e, er);}}+Rounding* qlRounding(QlError **e) { QlCallScope callbackScope(e);try {return alloc(new Rounding());} catch (std::exception& er) {return handleException<Rounding*>(e, er);}}+Rounding* qlRounding1(int precision, int type, int digit, QlError **e) { QlCallScope callbackScope(e);try {return alloc(new Rounding(precision, (Rounding::Type)type, digit));} catch (std::exception& er) {return handleException<Rounding*>(e, er);}} -QlSimpleQuote *qlSimpleQuote(double value, char **e) {try {return ret(new QlSimpleQuote(alloc(new SimpleQuote(value))));} catch (std::exception& er) {return handleException<QlSimpleQuote *>(e, er);}}-double qlQuoteValue(QlQuote *quote, char **e) {try {return (*arg(quote))->value();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSimpleQuoteSetValue(QlSimpleQuote* o, double value, char **e) {try {return (*arg(o))->setValue(value);} catch (std::exception& er) {return handleException<double>(e, er);}}+QlSimpleQuote *qlSimpleQuote(double value, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlSimpleQuote(alloc(new SimpleQuote(value))));} catch (std::exception& er) {return handleException<QlSimpleQuote *>(e, er);}}+double qlQuoteValue(QlQuote *quote, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(quote))->value();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSimpleQuoteSetValue(QlSimpleQuote* o, double value, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->setValue(value);} catch (std::exception& er) {return handleException<double>(e, er);}} -QlQuote* qlEurodollarFuturesImpliedStdDevQuote(QlQuote* forward, QlQuote* callPrice, QlQuote* putPrice, double strike, double guess, double accuracy, unsigned maxIter, char **e) {+QlQuote* qlEurodollarFuturesImpliedStdDevQuote(QlQuote* forward, QlQuote* callPrice, QlQuote* putPrice, double strike, double guess, double accuracy, unsigned maxIter, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new EurodollarFuturesImpliedStdDevQuote(*arg(forward), *arg(callPrice), *arg(putPrice), strike, guess, accuracy, maxIter)))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-QlQuote* qlForwardSwapQuote(QlSwapIndex* swapIndex, QlQuote* spread, int l, int u, char **e) {+QlQuote* qlForwardSwapQuote(QlSwapIndex* swapIndex, QlQuote* spread, int l, int u, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new ForwardSwapQuote(*arg(swapIndex), *arg(spread), Period(l, (TimeUnit)u))))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-QlQuote* qlForwardValueQuote(QlIndex* index, int fixingDate, char **e) {+QlQuote* qlForwardValueQuote(QlIndex* index, int fixingDate, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new ForwardValueQuote(*arg(index), Date(fixingDate))))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-QlFuturesConvAdjustmentQuote* qlFuturesConvAdjustmentQuote1(QlIborIndex* index, char* immCode, QlQuote* futuresQuote, QlQuote* volatility, QlQuote* meanReversion, char **e) {+QlFuturesConvAdjustmentQuote* qlFuturesConvAdjustmentQuote1(QlIborIndex* index, char* immCode, QlQuote* futuresQuote, QlQuote* volatility, QlQuote* meanReversion, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlFuturesConvAdjustmentQuote(alloc(new FuturesConvAdjustmentQuote(*arg(index), std::string(arg(immCode)), *arg(futuresQuote), *arg(volatility), *arg(meanReversion)))));   } catch (std::exception& er) {return handleException<QlFuturesConvAdjustmentQuote*>(e, er);}}-QlFuturesConvAdjustmentQuote* qlFuturesConvAdjustmentQuote(QlIborIndex* index, int futuresDate, QlQuote* futuresQuote, QlQuote* volatility, QlQuote* meanReversion, char **e) {+QlFuturesConvAdjustmentQuote* qlFuturesConvAdjustmentQuote(QlIborIndex* index, int futuresDate, QlQuote* futuresQuote, QlQuote* volatility, QlQuote* meanReversion, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlFuturesConvAdjustmentQuote(alloc(new FuturesConvAdjustmentQuote(*arg(index), Date(futuresDate), *arg(futuresQuote), *arg(volatility), *arg(meanReversion)))));   } catch (std::exception& er) {return handleException<QlFuturesConvAdjustmentQuote*>(e, er);}} void qlFreeFuturesConvAdjustmentQuote(QlFuturesConvAdjustmentQuote *o) {del(o);} // Fresh Handle for this newly built object -- same shape as qlDeltaVolQuoteAsQuote. QlQuote* qlFuturesConvAdjustmentQuoteAsQuote(QlFuturesConvAdjustmentQuote *o) {return ret(new QlQuote(*arg(o)));}-double qlFuturesConvAdjustmentQuoteFuturesValue(QlFuturesConvAdjustmentQuote *o, char **e) {+double qlFuturesConvAdjustmentQuoteFuturesValue(QlFuturesConvAdjustmentQuote *o, QlError **e) { QlCallScope callbackScope(e);   try {return (*arg(o))->futuresValue();   } catch (std::exception& er) {return handleException<double>(e, er);}}-QlQuote* qlImpliedStdDevQuote(int optionType, QlQuote* forward, QlQuote* price, double strike, double guess, double accuracy, unsigned maxIter, char **e) {+QlQuote* qlImpliedStdDevQuote(int optionType, QlQuote* forward, QlQuote* price, double strike, double guess, double accuracy, unsigned maxIter, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new ImpliedStdDevQuote((Option::Type)optionType, *arg(forward), *arg(price), strike, guess, accuracy, maxIter)))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-QlQuote* qlLastFixingQuote(QlIndex* index, char **e) {try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new LastFixingQuote(*arg(index))))));} catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-int qlQuoteIsValid(QlQuote* o, char **e) {try {return (*arg(o))->isValid();} catch (std::exception& er) {return handleException<int>(e, er);}}-QlQuote* qlDerivedQuote(int op, QlQuote* element, double operand, char **e) {+QlQuote* qlLastFixingQuote(QlIndex* index, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new LastFixingQuote(*arg(index))))));} catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}+int qlQuoteIsValid(QlQuote* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->isValid();} catch (std::exception& er) {return handleException<int>(e, er);}}+QlQuote* qlDerivedQuote(int op, QlQuote* element, double operand, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new OpDerivedQuote(*arg(element), QuoteUnaryOp{op, operand})))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-QlQuote* qlCompositeQuote(int op, QlQuote* element1, QlQuote* element2, char **e) {+QlQuote* qlCompositeQuote(int op, QlQuote* element1, QlQuote* element2, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new OpCompositeQuote(*arg(element1), *arg(element2), QuoteBinaryOp{op})))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-QlQuote* qlMultiCompositeQuote(int op, unsigned elementsLen, QlQuote** elements, char **e) {+QlQuote* qlMultiCompositeQuote(int op, unsigned elementsLen, QlQuote** elements, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new OpMultiCompositeQuote(qlHandleVector(elements, elementsLen), QuoteArrayOp{op})))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}} -QlQuote* qlDerivedQuoteFromFunction(QlQuote* element, double (*fn)(double), char **e) {-  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new HsDerivedQuote(*arg(element), fn)))));+QlQuote* qlDerivedQuoteFromFunction(QlQuote* element, QlCallback* fn, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new HsDerivedQuote(*arg(element), hasquant::UnaryCallback{*arg(fn)})))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-QlQuote* qlCompositeQuoteFromFunction(QlQuote* element1, QlQuote* element2, double (*fn)(double, double), char **e) {-  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new HsCompositeQuote(*arg(element1), *arg(element2), fn)))));+QlQuote* qlCompositeQuoteFromFunction(QlQuote* element1, QlQuote* element2, QlCallback* fn, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new HsCompositeQuote(*arg(element1), *arg(element2), hasquant::BinaryCallback{*arg(fn)})))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}-QlQuote* qlMultiCompositeQuoteFromFunction(unsigned elementsLen, QlQuote** elements, double (*fn)(const double*, unsigned), char **e) {-  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new HsMultiCompositeQuote(qlHandleVector(elements, elementsLen), HsArrayFun{fn})))));+QlQuote* qlMultiCompositeQuoteFromFunction(unsigned elementsLen, QlQuote** elements, QlCallback* fn, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuote(shared_ptr<Quote>(alloc(new HsMultiCompositeQuote(qlHandleVector(elements, elementsLen), HsArrayFun{*arg(fn)})))));   } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}  // A relinkable handle, empty when `initial` is null -- mirrors qlRelinkableYieldTermStructure // in cbits/qlTermStructure.cpp; see its comments for the rationale.-QlRelinkableQuote* qlRelinkableQuote(QlQuote *initial, char **e) {+QlRelinkableQuote* qlRelinkableQuote(QlQuote *initial, QlError **e) { QlCallScope callbackScope(e);   try {return ret(initial ? new QlRelinkableQuote(handlePtr(arg(initial)))                           : new QlRelinkableQuote());   } catch (std::exception& er) {return handleException<QlRelinkableQuote*>(e, er);}} void qlFreeRelinkableQuote(QlRelinkableQuote *o) {del(o);}-void qlRelinkableQuoteLinkTo(QlRelinkableQuote *o, QlQuote *c, char **e) {+void qlRelinkableQuoteLinkTo(QlRelinkableQuote *o, QlQuote *c, QlError **e) { QlCallScope callbackScope(e);   try {arg(o)->linkTo(handlePtr(arg(c)));} catch (std::exception& er) {(void)handleException<void *>(e, er);}} // The hierarchy upcast. Copy-constructing Handle<Quote> from RelinkableHandle<Quote> is the // same T, so link_ is shared and relinking through the original still reaches everything built@@ -845,10 +867,10 @@ void qlFreeQuote(QlQuote *quote) {del(quote);} void qlFreeSimpleQuote(QlSimpleQuote *o) {del(o);} QlQuote* qlSimpleQuoteAsQuote(QlSimpleQuote *o) {return ret(new QlQuote(*arg(o)));}-QlDeltaVolQuote *qlDeltaVolQuote1(double delta, QlQuote *vol, double maturity, int deltaType, char **e) {+QlDeltaVolQuote *qlDeltaVolQuote1(double delta, QlQuote *vol, double maturity, int deltaType, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlDeltaVolQuote(alloc(new DeltaVolQuote(delta, *arg(vol), maturity, (DeltaVolQuote::DeltaType)deltaType))));   } catch (std::exception& er) {return handleException<QlDeltaVolQuote*>(e, er);}}-QlDeltaVolQuote *qlDeltaVolQuote2(QlQuote *vol, int deltaType, double maturity, int atmType, char **e) {+QlDeltaVolQuote *qlDeltaVolQuote2(QlQuote *vol, int deltaType, double maturity, int atmType, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new QlDeltaVolQuote(alloc(new DeltaVolQuote(*arg(vol), (DeltaVolQuote::DeltaType)deltaType, maturity, (DeltaVolQuote::AtmType)atmType))));   } catch (std::exception& er) {return handleException<QlDeltaVolQuote*>(e, er);}} void qlFreeDeltaVolQuote(QlDeltaVolQuote *o) {del(o);}@@ -867,7 +889,7 @@ // Needs an error channel where its Date-taking siblings above do not: `n' is a caller-supplied // count, not a date, so no Haskell-side marshaller constrains it, and Date::nthWeekday requires // 0 < n < 6.-int qlDateNthWeekday(unsigned n, int w, int m, int y, char **e) {+int qlDateNthWeekday(unsigned n, int w, int m, int y, QlError **e) { QlCallScope callbackScope(e);   try {return Date::nthWeekday(n, (Weekday)w, (Month)m, y).serialNumber();   } catch (std::exception& er) {return handleException<int>(e, er);}} int qlIMMIsIMMcode(char* in, int mainCycle) {return IMM::isIMMcode(std::string(arg(in)), mainCycle);}@@ -875,49 +897,49 @@ char* qlIMMNextCode(int d, int mainCycle) {return tracedup(IMM::nextCode(Date(d), mainCycle).c_str());} int qlIMMNextDate(int d, int mainCycle) {return IMM::nextDate(Date(d), mainCycle).serialNumber();} -char* qlIMMCode(int immDate, char **e) {try {return tracedup((IMM::code(Date(immDate))).c_str());} catch (std::exception& er) {return handleException<char*>(e, er);}}-int qlIMMDate(char* immCode, int referenceDate, char **e) {+char* qlIMMCode(int immDate, QlError **e) { QlCallScope callbackScope(e);try {return tracedup((IMM::code(Date(immDate))).c_str());} catch (std::exception& er) {return handleException<char*>(e, er);}}+int qlIMMDate(char* immCode, int referenceDate, QlError **e) { QlCallScope callbackScope(e);   try {return (IMM::date(std::string(immCode), Date(referenceDate))).serialNumber();   } catch (std::exception& er) {return handleException<int>(e, er);}}-char* qlIMMNextCode1(char* immCode, int mainCycle, int referenceDate, char **e) {+char* qlIMMNextCode1(char* immCode, int mainCycle, int referenceDate, QlError **e) { QlCallScope callbackScope(e);   try {return tracedup(IMM::nextCode(std::string(arg(immCode)), mainCycle, Date(referenceDate)).c_str());   } catch (std::exception& er) {return handleException<char*>(e, er);}} -int qlIMMNextDate1(char* immCode, int mainCycle, int referenceDate, char **e) {try {return (IMM::nextDate(std::string(arg(immCode)), mainCycle, Date(referenceDate))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlAddPeriod(int d, int n, int u, char **e) {try {return (Date(d) + Period(n, (TimeUnit)u)).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-void qlECBAddDate(int d, char **e) {try {ECB::addDate(Date(d));} catch (std::exception& er) {(void)handleException<int>(e, er);}}-char* qlECBCode(int ecbDate, char **e) {try {return tracedup((ECB::code(Date(ecbDate))).c_str());} catch (std::exception& er) {return handleException<char*>(e, er);}}-int qlECBDate1(char* ecbCode, int referenceDate, char **e) {try {return (ECB::date(std::string(arg(ecbCode)), qlNullableDate(referenceDate))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlECBDate(int m, int y, char **e) {try {return (ECB::date((Month)m, y)).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlECBIsECBcode(char* in, char **e) {try {return ECB::isECBcode(arg(in));} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlECBIsECBdate(int d, char **e) {try {return ECB::isECBdate(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}-void qlECBKnownDates(unsigned *count, int **ds, char **e) {+int qlIMMNextDate1(char* immCode, int mainCycle, int referenceDate, QlError **e) { QlCallScope callbackScope(e);try {return (IMM::nextDate(std::string(arg(immCode)), mainCycle, Date(referenceDate))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlAddPeriod(int d, int n, int u, QlError **e) { QlCallScope callbackScope(e);try {return (Date(d) + Period(n, (TimeUnit)u)).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+void qlECBAddDate(int d, QlError **e) { QlCallScope callbackScope(e);try {ECB::addDate(Date(d));} catch (std::exception& er) {(void)handleException<int>(e, er);}}+char* qlECBCode(int ecbDate, QlError **e) { QlCallScope callbackScope(e);try {return tracedup((ECB::code(Date(ecbDate))).c_str());} catch (std::exception& er) {return handleException<char*>(e, er);}}+int qlECBDate1(char* ecbCode, int referenceDate, QlError **e) { QlCallScope callbackScope(e);try {return (ECB::date(std::string(arg(ecbCode)), qlNullableDate(referenceDate))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlECBDate(int m, int y, QlError **e) { QlCallScope callbackScope(e);try {return (ECB::date((Month)m, y)).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlECBIsECBcode(char* in, QlError **e) { QlCallScope callbackScope(e);try {return ECB::isECBcode(arg(in));} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlECBIsECBdate(int d, QlError **e) { QlCallScope callbackScope(e);try {return ECB::isECBdate(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}+void qlECBKnownDates(unsigned *count, int **ds, QlError **e) { QlCallScope callbackScope(e);   OutArrayResult<int> result(count, ds);   try { const std::set<Date> &dates = ECB::knownDates(); int *out = result.allocate((unsigned)dates.size());     std::transform(dates.begin(), dates.end(), out, std::mem_fn(&Date::serialNumber));     result.commit();   } catch (std::exception& er) {(void)handleException<int>(e, er);}}-char* qlECBNextCode1(char* ecbCode, char **e) {try {return tracedup((ECB::nextCode(std::string(arg(ecbCode)))).c_str());} catch (std::exception& er) {return handleException<char*>(e, er);}}-char* qlECBNextCode(int d, char **e) {try {return tracedup((ECB::nextCode(qlNullableDate(d))).c_str());} catch (std::exception& er) {return handleException<char*>(e, er);}}-int qlECBNextDate1(char* ecbCode, int referenceDate, char **e) {+char* qlECBNextCode1(char* ecbCode, QlError **e) { QlCallScope callbackScope(e);try {return tracedup((ECB::nextCode(std::string(arg(ecbCode)))).c_str());} catch (std::exception& er) {return handleException<char*>(e, er);}}+char* qlECBNextCode(int d, QlError **e) { QlCallScope callbackScope(e);try {return tracedup((ECB::nextCode(qlNullableDate(d))).c_str());} catch (std::exception& er) {return handleException<char*>(e, er);}}+int qlECBNextDate1(char* ecbCode, int referenceDate, QlError **e) { QlCallScope callbackScope(e);   try {return (ECB::nextDate(std::string(arg(ecbCode)), qlNullableDate(referenceDate))).serialNumber();   } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlECBNextDate(int d, char **e) {try {return (ECB::nextDate(qlNullableDate(d))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-void qlECBNextDates1(char* ecbCode, int referenceDate, unsigned *count, int **ds, char **e) {+int qlECBNextDate(int d, QlError **e) { QlCallScope callbackScope(e);try {return (ECB::nextDate(qlNullableDate(d))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+void qlECBNextDates1(char* ecbCode, int referenceDate, unsigned *count, int **ds, QlError **e) { QlCallScope callbackScope(e);   OutArrayResult<int> result(count, ds);   try {const std::vector<Date> &dates = ECB::nextDates(ecbCode, qlNullableDate(referenceDate));     int *out = result.allocate((unsigned)dates.size());     std::transform(dates.begin(), dates.end(), out, std::mem_fn(&Date::serialNumber));     result.commit();   } catch (std::exception& er) {(void)handleException<int*>(e, er);}}-void qlECBNextDates(int d, unsigned *count, int **ds, char **e) {+void qlECBNextDates(int d, unsigned *count, int **ds, QlError **e) { QlCallScope callbackScope(e);   OutArrayResult<int> result(count, ds);   try {const std::vector<Date> &dates = ECB::nextDates(qlNullableDate(d));     int *out = result.allocate((unsigned)dates.size());     std::transform(dates.begin(), dates.end(), out, std::mem_fn(&Date::serialNumber));     result.commit();   } catch (std::exception& er) {(void)handleException<int*>(e, er);}}-void qlECBRemoveDate(int d, char **e) {try {ECB::removeDate(Date(d));} catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlECBRemoveDate(int d, QlError **e) { QlCallScope callbackScope(e);try {ECB::removeDate(Date(d));} catch (std::exception& er) {(void)handleException<int>(e, er);}}  const char *qlCalendarName(Calendar *calendar) {std::string name = arg(calendar)->name(); return tracedup(name.c_str());} // must match with the order of qlEnumObjects.h:CalendarCountry@@ -972,35 +994,46 @@   , &makeCalendar<Serbia>   , &makeCalendar<Slovenia>   , &makeCalendar<Uzbekistan>+#if QL_HEX_VERSION >= 0x01440000+  , &makeCalendar<Malaysia>+  , &makeCalendar<Philippines>+#else+  , nullptr+  , nullptr+#endif }; -Calendar *qlCalendar(int country, int market, char **e) {+Calendar *qlCalendar(int country, int market, QlError **e) { QlCallScope callbackScope(e);   try {     if (country < 0 || country >= (int)std::size(calendars))       QL_FAIL("Invalid country index: " << country);+    if (!calendars[country]) {+      qlUnsupportedVersion(e, country == hasquant::Malaysia ? "calendar Malaysia" : "calendar Philippines", "1.44");+      return nullptr;+    }     return alloc(calendars[country](market));   } catch (std::exception& er) {return handleException<Calendar *>(e, er);}} -int qlCalendarAdjust(Calendar *c, int date, int conv, char **e) {+int qlCalendarAdjust(Calendar *c, int date, int conv, QlError **e) { QlCallScope callbackScope(e);   try {return arg(c)->adjust(Date(date), (BusinessDayConvention) conv).serialNumber();   } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlCalendarAdvance(Calendar *c, int date, int n, int unit, int conv, int eom, char **e) {+int qlCalendarAdvance(Calendar *c, int date, int n, int unit, int conv, int eom, QlError **e) { QlCallScope callbackScope(e);   try {return arg(c)->advance(Date(date), n, (TimeUnit) unit,(BusinessDayConvention) conv, eom).serialNumber();   } catch (std::exception& er) {return handleException<int>(e, er);}}-void qlCalendarAddHoliday(Calendar* o, int x0, char **e) {try {arg(o)->addHoliday(Date(x0));} catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlCalendarAddHoliday(Calendar* o, int x0, QlError **e) { QlCallScope callbackScope(e);try {arg(o)->addHoliday(Date(x0));} catch (std::exception& er) {(void)handleException<int>(e, er);}} -int qlCalendarBusinessDaysBetween(Calendar* o, int from, int to, int includeFirst, int includeLast, char **e) {+int qlCalendarBusinessDaysBetween(Calendar* o, int from, int to, int includeFirst, int includeLast, QlError **e) { QlCallScope callbackScope(e);   try {return arg(o)->businessDaysBetween(Date(from), Date(to), includeFirst, includeLast);   } catch (std::exception& er) {return handleException<int>(e, er);}} -int qlCalendarEndOfMonth(Calendar* o, int d, char **e) {try {return (arg(o)->endOfMonth(Date(d))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlCalendarIsBusinessDay(Calendar* o, int d, char **e) {try {return arg(o)->isBusinessDay(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlCalendarIsEndOfMonth(Calendar* o, int d, char **e) {try {return arg(o)->isEndOfMonth(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlCalendarIsHoliday(Calendar* o, int d, char **e) {try {return arg(o)->isHoliday(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlCalendarIsWeekend(Calendar* o, int w, char **e) {try {return arg(o)->isWeekend((Weekday) w);} catch (std::exception& er) {return handleException<int>(e, er);}}-void qlCalendarRemoveHoliday(Calendar* o, int x0, char **e) {try {arg(o)->removeHoliday(Date(x0));} catch (std::exception& er) {(void)handleException<int>(e, er);}}+int qlCalendarEndOfMonth(Calendar* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return (arg(o)->endOfMonth(Date(d))).serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlCalendarIsBusinessDay(Calendar* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return arg(o)->isBusinessDay(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlCalendarIsEndOfMonth(Calendar* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return arg(o)->isEndOfMonth(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlCalendarIsHoliday(Calendar* o, int d, QlError **e) { QlCallScope callbackScope(e);try {return arg(o)->isHoliday(Date(d));} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlCalendarIsWeekend(Calendar* o, int w, QlError **e) { QlCallScope callbackScope(e);try {return arg(o)->isWeekend((Weekday) w);} catch (std::exception& er) {return handleException<int>(e, er);}}+void qlCalendarRemoveHoliday(Calendar* o, int x0, QlError **e) { QlCallScope callbackScope(e);try {arg(o)->removeHoliday(Date(x0));} catch (std::exception& er) {(void)handleException<int>(e, er);}} -Calendar* qlBespokeCalendar(char* name, unsigned len, int *weekends, char **e) {+Calendar* qlBespokeCalendar(char* name, unsigned len, int *weekends, QlError **e) { QlCallScope callbackScope(e);   try {     // BespokeCalendar keeps its own extra shared_ptr member (bespokeImpl_,     // aliased to the same control block as the inherited impl_) alongside@@ -1018,16 +1051,16 @@     return ret(new Calendar(cal));   } catch (std::exception& er) {return handleException<Calendar*>(e, er);}} -Calendar* qlJointCalendar4(Calendar* x_1, Calendar* x0, Calendar* x1, Calendar* x2, int x3, char **e) {+Calendar* qlJointCalendar4(Calendar* x_1, Calendar* x0, Calendar* x1, Calendar* x2, int x3, QlError **e) { QlCallScope callbackScope(e);   try {return allocAs<Calendar>(new JointCalendar(*arg(x_1), *arg(x0), *arg(x1), *arg(x2), (JointCalendarRule)x3));   } catch (std::exception& er) {return handleException<Calendar*>(e, er);}}-Calendar* qlJointCalendar3(Calendar* x_1, Calendar* x0, Calendar* x1, int x2, char **e) {+Calendar* qlJointCalendar3(Calendar* x_1, Calendar* x0, Calendar* x1, int x2, QlError **e) { QlCallScope callbackScope(e);   try {return allocAs<Calendar>(new JointCalendar(*arg(x_1), *arg(x0), *arg(x1), (JointCalendarRule)x2));   } catch (std::exception& er) {return handleException<Calendar*>(e, er);}}-Calendar* qlJointCalendar2(Calendar* x_1, Calendar* x0, int x1, char **e) {+Calendar* qlJointCalendar2(Calendar* x_1, Calendar* x0, int x1, QlError **e) { QlCallScope callbackScope(e);   try {return allocAs<Calendar>(new JointCalendar(*arg(x_1), *arg(x0), (JointCalendarRule)x1));   } catch (std::exception& er) {return handleException<Calendar*>(e, er);}}-void qlCalendarHolidayList(Calendar* calendar, int from, int to, int includeWeekEnds, unsigned *len, int **days, char **e) {+void qlCalendarHolidayList(Calendar* calendar, int from, int to, int includeWeekEnds, unsigned *len, int **days, QlError **e) { QlCallScope callbackScope(e);   OutArrayResult<int> result(len, days);   try {const std::vector<Date> dates = arg(calendar)->holidayList(Date(from), Date(to), includeWeekEnds);     int *out = result.allocate((unsigned)dates.size());@@ -1035,25 +1068,25 @@       out[i] = dates[i].serialNumber();     result.commit();   } catch (std::exception& er) {(void)handleException<int*>(e, er);}}-Schedule *qlSchedule1(unsigned len, int *dates, Calendar *cal, int conv, int termConv, int tenorLen, int tenorUnit, int rule, int eom, char **e) {+Schedule *qlSchedule1(unsigned len, int *dates, Calendar *cal, int conv, int termConv, int tenorLen, int tenorUnit, int rule, int eom, QlError **e) { QlCallScope callbackScope(e);   try {std::vector<Date> d; d.reserve(len);     for (unsigned i = 0; i < len; ++i)       d.push_back(Date(dates[i]));     return alloc(new Schedule(d, *arg(cal), (BusinessDayConvention) conv,       qlOptBusinessDayConvention(termConv),-      tenorUnit < 0 ? ext::optional<Period>() : ext::optional<Period>(Period(tenorLen, (TimeUnit)tenorUnit)),-      rule < 0 ? ext::optional<DateGeneration::Rule>() : ext::optional<DateGeneration::Rule>((DateGeneration::Rule)rule),+      tenorUnit < 0 ? optional<Period>() : optional<Period>(Period(tenorLen, (TimeUnit)tenorUnit)),+      rule < 0 ? optional<DateGeneration::Rule>() : optional<DateGeneration::Rule>((DateGeneration::Rule)rule),       qlOptBool(eom)));   } catch (std::exception& er) {return handleException<Schedule *>(e, er);}}-Schedule *qlSchedule(int eff, int term, int l, int u, Calendar *cal, int conv, int termConv, int rule, int eom, int first, int nextToLast, char **e) {+Schedule *qlSchedule(int eff, int term, int l, int u, Calendar *cal, int conv, int termConv, int rule, int eom, int first, int nextToLast, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new Schedule(qlNullableDate(eff), Date(term), Period(l, (TimeUnit)u), *arg(cal),         (BusinessDayConvention) conv, (BusinessDayConvention) termConv, (DateGeneration::Rule) rule,         eom, qlNullableDate(first), qlNullableDate(nextToLast)));   } catch (std::exception& er) {return handleException<Schedule *>(e, er);}}-Schedule *qlScheduleUntil(Schedule *sched, int date, char **e) {+Schedule *qlScheduleUntil(Schedule *sched, int date, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new Schedule(arg(sched)->until(Date(date))));   } catch (std::exception& er) {return handleException<Schedule *>(e, er);}}-void qlScheduleDates(Schedule *sched, unsigned *count, int **days, char **e) {+void qlScheduleDates(Schedule *sched, unsigned *count, int **days, QlError **e) { QlCallScope callbackScope(e);   OutArrayResult<int> result(count, days);   try {     const std::vector<Date> &dates = arg(sched)->dates();@@ -1061,28 +1094,28 @@     for (size_t i = 0; i < dates.size(); ++i)       out[i] = dates[i].serialNumber();     result.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}+  } catch (std::exception& er) {qlSetError(e, er.what());} } -int qlPeriodFromFrequency1(int freq, int *u, char **e) {+int qlPeriodFromFrequency1(int freq, int *u, QlError **e) { QlCallScope callbackScope(e);   try {Period p((Frequency) freq); *u = p.units(); return p.length();   } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlPeriodToFrequency1(int l, int u, char **e) {+int qlPeriodToFrequency1(int l, int u, QlError **e) { QlCallScope callbackScope(e);   try {return Period(l, (TimeUnit)u).frequency();   } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlPeriodParserParse1(char* str, int* u, char **e) {+int qlPeriodParserParse1(char* str, int* u, QlError **e) { QlCallScope callbackScope(e);   try {const Period &p = (PeriodParser::parse(std::string(arg(str)))); *u = p.units(); return p.length();   } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlPeriodAdd1(int n1, int u1, int n2, int u2, int *u, char **e) {+int qlPeriodAdd1(int n1, int u1, int n2, int u2, int *u, QlError **e) { QlCallScope callbackScope(e);   try {Period p = Period(n1, (TimeUnit)u1) + Period(n2, (TimeUnit)u2); *u = p.units(); return p.length();   } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlPeriodDivide1(int n1, int u1, int n, int *u, char **e) {+int qlPeriodDivide1(int n1, int u1, int n, int *u, QlError **e) { QlCallScope callbackScope(e);   try {Period p = Period(n1, (TimeUnit)u1)/n; *u = p.units(); return p.length();   } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlPeriodNormalize1(int n1, int u1, int *u, char **e) {+int qlPeriodNormalize1(int n1, int u1, int *u, QlError **e) { QlCallScope callbackScope(e);   try {Period p(n1, (TimeUnit)u1); p.normalize(); *u = p.units(); return p.length();   } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlPeriodsLT1(int n1, int u1, int n2, int u2, char **e) {+int qlPeriodsLT1(int n1, int u1, int n2, int u2, QlError **e) { QlCallScope callbackScope(e);   try {Period p1(n1, (TimeUnit)u1); Period p2(n2, (TimeUnit)u2); return p1 < p2;   } catch (std::exception& er) {return handleException<int>(e, er);}} @@ -1101,35 +1134,34 @@   , &makeFlagDayCounter<Actual366> }; -DayCounter *qlDayCounter(int type, int convention, char **e) {+DayCounter *qlDayCounter(int type, int convention, QlError **e) { QlCallScope callbackScope(e);   try {     if (type < 0 || type >= (int)std::size(dayCounters))       QL_FAIL("Invalid DayCounter type: " << type);     return alloc(dayCounters[type](convention));   } catch (std::exception& er) {return handleException<DayCounter *>(e, er);}} -DayCounter *qlDayCounterBusiness252(Calendar *cal, char **e) {try {return allocAs<DayCounter>(new Business252(*arg(cal)));} catch (std::exception& er) {return handleException<DayCounter *>(e, er);}}-DayCounter *qlDayCounterActualActualBond(Schedule *schedule, char **e) {try {return allocAs<DayCounter>(new ActualActual(ActualActual::Bond, *arg(schedule)));} catch (std::exception& er) {return handleException<DayCounter *>(e, er);}}-DayCounter *qlDayCounterActualActualISMA(Schedule *schedule, char **e) {try {return allocAs<DayCounter>(new ActualActual(ActualActual::ISMA, *arg(schedule)));} catch (std::exception& er) {return handleException<DayCounter *>(e, er);}}+DayCounter *qlDayCounterBusiness252(Calendar *cal, QlError **e) { QlCallScope callbackScope(e);try {return allocAs<DayCounter>(new Business252(*arg(cal)));} catch (std::exception& er) {return handleException<DayCounter *>(e, er);}}+DayCounter *qlDayCounterActualActualBond(Schedule *schedule, QlError **e) { QlCallScope callbackScope(e);try {return allocAs<DayCounter>(new ActualActual(ActualActual::Bond, *arg(schedule)));} catch (std::exception& er) {return handleException<DayCounter *>(e, er);}}+DayCounter *qlDayCounterActualActualISMA(Schedule *schedule, QlError **e) { QlCallScope callbackScope(e);try {return allocAs<DayCounter>(new ActualActual(ActualActual::ISMA, *arg(schedule)));} catch (std::exception& er) {return handleException<DayCounter *>(e, er);}} void qlFreeCalendar(Calendar *calendar) {del(calendar);} void qlFreeSchedule(Schedule *s) {del(s);} void  qlFreeDayCounter(DayCounter *counter) {del(counter);} const char *qlDayCounterName(DayCounter *counter) {std::string name = arg(counter)->name(); return tracedup(name.c_str());} int qlDayCounterDayCount(DayCounter* o, int x0, int x1) {return arg(o)->dayCount(Date(x0), Date(x1));} -double qlDayCounterYearFraction(DayCounter* o, int x0, int x1, int refPeriodStart, int refPeriodEnd, char **e) {+double qlDayCounterYearFraction(DayCounter* o, int x0, int x1, int refPeriodStart, int refPeriodEnd, QlError **e) { QlCallScope callbackScope(e);   try {return arg(o)->yearFraction(Date(x0), Date(x1), qlNullableDate(refPeriodStart), qlNullableDate(refPeriodEnd));   } catch (std::exception& er) {return handleException<double>(e, er);}}  /* CommodityType */ -CommodityType *qlCommodityType(char *code, char *name, char **e) {-  // commoditytype.hpp's declaration names its params (code, name), but the out-of-line-  // definition in commoditytype.cpp takes (name, code) -- and that's what actually executes.+CommodityType *qlCommodityType(char *code, char *name, QlError **e) { QlCallScope callbackScope(e);+  // The Haskell API takes code/name; QuantLib constructs name/code.   try {return alloc(new CommodityType(arg(name), arg(code)));   } catch (std::exception& er) {return handleException<CommodityType*>(e, er);}} -CommodityType *qlNullCommodityType(char **e) {+CommodityType *qlNullCommodityType(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new CommodityType(NullCommodityType()));   } catch (std::exception& er) {return handleException<CommodityType*>(e, er);}} @@ -1140,7 +1172,7 @@  /* UnitOfMeasure */ -UnitOfMeasure *qlUnitOfMeasure(char *name, char *code, int unitType, char **e) {+UnitOfMeasure *qlUnitOfMeasure(char *name, char *code, int unitType, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasure(arg(name), arg(code), (UnitOfMeasure::Type)unitType));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}} @@ -1150,34 +1182,34 @@ int qlUnitOfMeasureUnitType(UnitOfMeasure *o) {return arg(o)->unitType();} int qlUnitOfMeasureEmpty(UnitOfMeasure *o) {return arg(o)->empty();} -UnitOfMeasure *qlLotUnitOfMeasure(char **e) {+UnitOfMeasure *qlLotUnitOfMeasure(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasure(LotUnitOfMeasure()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-UnitOfMeasure *qlBarrelUnitOfMeasure(char **e) {+UnitOfMeasure *qlBarrelUnitOfMeasure(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasure(BarrelUnitOfMeasure()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-UnitOfMeasure *qlMTUnitOfMeasure(char **e) {+UnitOfMeasure *qlMTUnitOfMeasure(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasure(MTUnitOfMeasure()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-UnitOfMeasure *qlMBUnitOfMeasure(char **e) {+UnitOfMeasure *qlMBUnitOfMeasure(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasure(MBUnitOfMeasure()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-UnitOfMeasure *qlGallonUnitOfMeasure(char **e) {+UnitOfMeasure *qlGallonUnitOfMeasure(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasure(GallonUnitOfMeasure()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-UnitOfMeasure *qlLitreUnitOfMeasure(char **e) {+UnitOfMeasure *qlLitreUnitOfMeasure(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasure(LitreUnitOfMeasure()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-UnitOfMeasure *qlKilolitreUnitOfMeasure(char **e) {+UnitOfMeasure *qlKilolitreUnitOfMeasure(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasure(KilolitreUnitOfMeasure()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-UnitOfMeasure *qlTokyoKilolitreUnitOfMeasure(char **e) {+UnitOfMeasure *qlTokyoKilolitreUnitOfMeasure(QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasure(TokyoKilolitreUnitOfMeasure()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}  /* PaymentTerm */ -PaymentTerm *qlPaymentTerm(char *name, int eventType, int offsetDays, Calendar *calendar, char **e) {+PaymentTerm *qlPaymentTerm(char *name, int eventType, int offsetDays, Calendar *calendar, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new PaymentTerm(arg(name), (PaymentTerm::EventType)eventType, offsetDays, *arg(calendar)));   } catch (std::exception& er) {return handleException<PaymentTerm*>(e, er);}} @@ -1185,12 +1217,12 @@ char *qlPaymentTermName(PaymentTerm *o) {return tracedup(arg(o)->name().c_str());} int qlPaymentTermEventType_(PaymentTerm *o) {return arg(o)->eventType();} int qlPaymentTermOffsetDays(PaymentTerm *o) {return arg(o)->offsetDays();}-Calendar *qlPaymentTermCalendar(PaymentTerm *o, char **e) {+Calendar *qlPaymentTermCalendar(PaymentTerm *o, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new Calendar(arg(o)->calendar()));   } catch (std::exception& er) {return handleException<Calendar*>(e, er);}} int qlPaymentTermEmpty(PaymentTerm *o) {return arg(o)->empty();} -int qlPaymentTermGetPaymentDate(PaymentTerm *o, int date, char **e) {+int qlPaymentTermGetPaymentDate(PaymentTerm *o, int date, QlError **e) { QlCallScope callbackScope(e);   try {return arg(o)->getPaymentDate(qlNullableDate(date)).serialNumber();   } catch (std::exception& er) {return handleException<int>(e, er);}} @@ -1200,13 +1232,13 @@   return arg(uom)->rounding()(amount);}  int qlQuantityClose(CommodityType *ct1, UnitOfMeasure *uom1, double amount1,-                    CommodityType *ct2, UnitOfMeasure *uom2, double amount2, int n, char **e) {+                    CommodityType *ct2, UnitOfMeasure *uom2, double amount2, int n, QlError **e) { QlCallScope callbackScope(e);   try {return close(Quantity(*arg(ct1), *arg(uom1), amount1),                     Quantity(*arg(ct2), *arg(uom2), amount2), n);   } catch (std::exception& er) {return handleException<int>(e, er);}}  int qlQuantityCloseEnough(CommodityType *ct1, UnitOfMeasure *uom1, double amount1,-                          CommodityType *ct2, UnitOfMeasure *uom2, double amount2, int n, char **e) {+                          CommodityType *ct2, UnitOfMeasure *uom2, double amount2, int n, QlError **e) { QlCallScope callbackScope(e);   try {return close_enough(Quantity(*arg(ct1), *arg(uom1), amount1),                            Quantity(*arg(ct2), *arg(uom2), amount2), n);   } catch (std::exception& er) {return handleException<int>(e, er);}}@@ -1214,18 +1246,18 @@ /* UnitOfMeasureConversion */  UnitOfMeasureConversion *qlUnitOfMeasureConversion(CommodityType *commodityType, UnitOfMeasure *source,-                                                   UnitOfMeasure *target, double conversionFactor, char **e) {+                                                   UnitOfMeasure *target, double conversionFactor, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasureConversion(*arg(commodityType), *arg(source), *arg(target), conversionFactor));   } catch (std::exception& er) {return handleException<UnitOfMeasureConversion*>(e, er);}}  void qlFreeUnitOfMeasureConversion(UnitOfMeasureConversion *o) {del(o);}-UnitOfMeasure *qlUnitOfMeasureConversionSource(UnitOfMeasureConversion *o, char **e) {+UnitOfMeasure *qlUnitOfMeasureConversionSource(UnitOfMeasureConversion *o, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new UnitOfMeasure(arg(o)->source()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-UnitOfMeasure *qlUnitOfMeasureConversionTarget(UnitOfMeasureConversion *o, char **e) {+UnitOfMeasure *qlUnitOfMeasureConversionTarget(UnitOfMeasureConversion *o, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new UnitOfMeasure(arg(o)->target()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-CommodityType *qlUnitOfMeasureConversionCommodityType(UnitOfMeasureConversion *o, char **e) {+CommodityType *qlUnitOfMeasureConversionCommodityType(UnitOfMeasureConversion *o, QlError **e) { QlCallScope callbackScope(e);   try {return ret(new CommodityType(arg(o)->commodityType()));   } catch (std::exception& er) {return handleException<CommodityType*>(e, er);}} int qlUnitOfMeasureConversionType_(UnitOfMeasureConversion *o) {return arg(o)->type();}@@ -1233,7 +1265,7 @@ char *qlUnitOfMeasureConversionCode(UnitOfMeasureConversion *o) {return tracedup(arg(o)->code().c_str());}  double qlUnitOfMeasureConversionConvert(UnitOfMeasureConversion *o, CommodityType *ct, UnitOfMeasure *uom,-                                        double amount, CommodityType **outCt, UnitOfMeasure **outUom, char **e) {+                                        double amount, CommodityType **outCt, UnitOfMeasure **outUom, QlError **e) { QlCallScope callbackScope(e);   *outCt = 0; *outUom = 0;   try {     Quantity r = arg(o)->convert(Quantity(*arg(ct), *arg(uom), amount));@@ -1249,14 +1281,14 @@     return handleException<double>(e, er);   }} -UnitOfMeasureConversion *qlUnitOfMeasureConversionChain(UnitOfMeasureConversion *r1, UnitOfMeasureConversion *r2, char **e) {+UnitOfMeasureConversion *qlUnitOfMeasureConversionChain(UnitOfMeasureConversion *r1, UnitOfMeasureConversion *r2, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasureConversion(UnitOfMeasureConversion::chain(*arg(r1), *arg(r2))));   } catch (std::exception& er) {return handleException<UnitOfMeasureConversion*>(e, er);}}  /* UnitOfMeasureConversionManager */  UnitOfMeasureConversion *qlUnitOfMeasureConversionManagerLookup(-    CommodityType *commodityType, UnitOfMeasure *source, UnitOfMeasure *target, int type, char **e) {+    CommodityType *commodityType, UnitOfMeasure *source, UnitOfMeasure *target, int type, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new UnitOfMeasureConversion(UnitOfMeasureConversionManager::instance().lookup(       *arg(commodityType), *arg(source), *arg(target), (UnitOfMeasureConversion::Type)type)));   } catch (std::exception& er) {return handleException<UnitOfMeasureConversion*>(e, er);}}@@ -1268,11 +1300,11 @@  /* CommoditySettings */ -Currency *qlCommoditySettingsCurrency(char **e) {+Currency *qlCommoditySettingsCurrency(QlError **e) { QlCallScope callbackScope(e);   try {return ret(new Currency(CommoditySettings::instance().currency()));   } catch (std::exception& er) {return handleException<Currency*>(e, er);}} void qlCommoditySettingsSetCurrency(Currency *c) {CommoditySettings::instance().currency() = *arg(c);}-UnitOfMeasure *qlCommoditySettingsUnitOfMeasure(char **e) {+UnitOfMeasure *qlCommoditySettingsUnitOfMeasure(QlError **e) { QlCallScope callbackScope(e);   try {return ret(new UnitOfMeasure(CommoditySettings::instance().unitOfMeasure()));   } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}} void qlCommoditySettingsSetUnitOfMeasure(UnitOfMeasure *u) {CommoditySettings::instance().unitOfMeasure() = *arg(u);}@@ -1299,7 +1331,7 @@ }  QlHistoricalIndexAnalysis *qlHistoricalIndexAnalysis(int startDate, int endDate,-    int stepLen, int stepUnit, unsigned indexesLen, QlIndex **indexes, char **e) {+    int stepLen, int stepUnit, unsigned indexesLen, QlIndex **indexes, QlError **e) { QlCallScope callbackScope(e);   try {     Size nIdx = indexesLen;     shared_ptr<SequenceStatistics> stats = ext::make_shared<SequenceStatistics>(nIdx);@@ -1335,17 +1367,17 @@  void qlFreeHistoricalIndexAnalysis(QlHistoricalIndexAnalysis *o) {del(o);} -void qlHistoricalIndexAnalysisSkippedDates(QlHistoricalIndexAnalysis *o, unsigned *count, int **days, char **e) {+void qlHistoricalIndexAnalysisSkippedDates(QlHistoricalIndexAnalysis *o, unsigned *count, int **days, QlError **e) { QlCallScope callbackScope(e);   OutArrayResult<int> result(count, days);   try {     const std::vector<Date> &dates = (*arg(o))->skippedDates();     int *out = result.allocate((unsigned)dates.size());     for (unsigned i = 0; i < dates.size(); ++i) out[i] = dates[i].serialNumber();     result.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}+  } catch (std::exception& er) {qlSetError(e, er.what());} } -void qlHistoricalIndexAnalysisSkippedDatesErrorMessage(QlHistoricalIndexAnalysis *o, unsigned *count, char ***msgs, char **e) {+void qlHistoricalIndexAnalysisSkippedDatesErrorMessage(QlHistoricalIndexAnalysis *o, unsigned *count, char ***msgs, QlError **e) { QlCallScope callbackScope(e);   OutStringArrayResult result(count, msgs);   try {     const std::vector<std::string> &m = (*arg(o))->skippedDatesErrorMessage();@@ -1353,113 +1385,113 @@     char **ms = result.allocate(n);     for (unsigned i = 0; i < n; ++i) ms[i] = tracedup(m[i].c_str());     result.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}+  } catch (std::exception& er) {qlSetError(e, er.what());} } -void qlHistoricalIndexAnalysisMean(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisMean(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->mean();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisStandardDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisStandardDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->standardDeviation();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisSkewness(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisSkewness(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->skewness();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisKurtosis(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisKurtosis(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->kurtosis();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisMin(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisMin(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->min();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisMax(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisMax(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->max();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisSemiVariance(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisSemiVariance(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->semiVariance();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisSemiDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisSemiDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->semiDeviation();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisDownsideVariance(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisDownsideVariance(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->downsideVariance();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisDownsideDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisDownsideDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->downsideDeviation();}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisPercentile(QlHistoricalIndexAnalysis *o, double y, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisPercentile(QlHistoricalIndexAnalysis *o, double y, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->percentile(y);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisGaussianPercentile(QlHistoricalIndexAnalysis *o, double y, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisGaussianPercentile(QlHistoricalIndexAnalysis *o, double y, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->gaussianPercentile(y);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisValueAtRisk(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisValueAtRisk(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->valueAtRisk(centile);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisGaussianValueAtRisk(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisGaussianValueAtRisk(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->gaussianValueAtRisk(centile);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisExpectedShortfall(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisExpectedShortfall(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->expectedShortfall(centile);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisGaussianExpectedShortfall(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisGaussianExpectedShortfall(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->gaussianExpectedShortfall(centile);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisPotentialUpside(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisPotentialUpside(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->potentialUpside(centile);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisGaussianPotentialUpside(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisGaussianPotentialUpside(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->gaussianPotentialUpside(centile);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisRegret(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisRegret(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->regret(target);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->shortfall(target);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisGaussianShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisGaussianShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->gaussianShortfall(target);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisAverageShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisAverageShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->averageShortfall(target);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisGaussianAverageShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisGaussianAverageShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillVectorOut([&] {return (*arg(o))->stats()->gaussianAverageShortfall(target);}, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisCovariance(QlHistoricalIndexAnalysis *o, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisCovariance(QlHistoricalIndexAnalysis *o, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillMatrixOut([&] {return (*arg(o))->stats()->covariance();}, rows, cols, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -void qlHistoricalIndexAnalysisCorrelation(QlHistoricalIndexAnalysis *o, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e) {+void qlHistoricalIndexAnalysisCorrelation(QlHistoricalIndexAnalysis *o, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);   try {fillMatrixOut([&] {return (*arg(o))->stats()->correlation();}, rows, cols, len, vs);   } catch (std::exception& er) {handleException<double*>(e, er);}} -Garch11 *qlGarch11(double alpha, double beta, double vl, char **e) {+Garch11 *qlGarch11(double alpha, double beta, double vl, QlError **e) { QlCallScope callbackScope(e);   try {return alloc(new Garch11(alpha, beta, vl));   } catch (std::exception& er) {return handleException<Garch11*>(e, er);}}-Garch11 *qlGarch11Calibrated(unsigned datesLen, int *dates, unsigned /*valuesLen*/, double *values, int mode, char **e) {+Garch11 *qlGarch11Calibrated(unsigned datesLen, int *dates, unsigned /*valuesLen*/, double *values, int mode, QlError **e) { QlCallScope callbackScope(e);   try {     Garch11::time_series ts;     for (unsigned n = 0; n < datesLen; ++n) ts[Date(dates[n])] = values[n];@@ -1473,7 +1505,7 @@ double qlGarch11LogLikelihood(Garch11 *o) {return arg(o)->logLikelihood();} double qlGarch11Forecast(Garch11 *o, double r, double sigma2) {return arg(o)->forecast(r, sigma2);} void qlGarch11Calculate(Garch11 *o, unsigned datesLen, int *dates, unsigned /*valuesLen*/, double *values,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   Garch11 *g = arg(o);   realSeriesCalculate([g](const TimeSeries<Real>& ts){return g->calculate(ts);},       datesLen, dates, values, outDatesLen, outDates, outValuesLen, outValues, e);@@ -1482,7 +1514,7 @@ void qlGarmanKlassSimpleSigma(double yearFraction,     unsigned datesLen, int *dates, unsigned /*opensLen*/, double *opens, unsigned /*closesLen*/, double *closes,     unsigned /*highsLen*/, double *highs, unsigned /*lowsLen*/, double *lows,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   GarmanKlassSimpleSigma est(yearFraction);   intervalPriceSeriesCalculate([&est](const TimeSeries<IntervalPrice>& ts){return est.calculate(ts);},       datesLen, dates, opens, closes, highs, lows, outDatesLen, outDates, outValuesLen, outValues, e);@@ -1490,7 +1522,7 @@ void qlGarmanKlassSigma1(double yearFraction, double marketOpenFraction,     unsigned datesLen, int *dates, unsigned /*opensLen*/, double *opens, unsigned /*closesLen*/, double *closes,     unsigned /*highsLen*/, double *highs, unsigned /*lowsLen*/, double *lows,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   GarmanKlassSigma1 est(yearFraction, marketOpenFraction);   intervalPriceSeriesCalculate([&est](const TimeSeries<IntervalPrice>& ts){return est.calculate(ts);},       datesLen, dates, opens, closes, highs, lows, outDatesLen, outDates, outValuesLen, outValues, e);@@ -1498,7 +1530,7 @@ void qlParkinsonSigma(double yearFraction,     unsigned datesLen, int *dates, unsigned /*opensLen*/, double *opens, unsigned /*closesLen*/, double *closes,     unsigned /*highsLen*/, double *highs, unsigned /*lowsLen*/, double *lows,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   ParkinsonSigma est(yearFraction);   intervalPriceSeriesCalculate([&est](const TimeSeries<IntervalPrice>& ts){return est.calculate(ts);},       datesLen, dates, opens, closes, highs, lows, outDatesLen, outDates, outValuesLen, outValues, e);@@ -1506,7 +1538,7 @@ void qlGarmanKlassSigma3(double yearFraction, double marketOpenFraction,     unsigned datesLen, int *dates, unsigned /*opensLen*/, double *opens, unsigned /*closesLen*/, double *closes,     unsigned /*highsLen*/, double *highs, unsigned /*lowsLen*/, double *lows,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   GarmanKlassSigma3 est(yearFraction, marketOpenFraction);   intervalPriceSeriesCalculate([&est](const TimeSeries<IntervalPrice>& ts){return est.calculate(ts);},       datesLen, dates, opens, closes, highs, lows, outDatesLen, outDates, outValuesLen, outValues, e);@@ -1514,7 +1546,7 @@ void qlGarmanKlassSigma4(double yearFraction,     unsigned datesLen, int *dates, unsigned /*opensLen*/, double *opens, unsigned /*closesLen*/, double *closes,     unsigned /*highsLen*/, double *highs, unsigned /*lowsLen*/, double *lows,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   GarmanKlassSigma4 est(yearFraction);   intervalPriceSeriesCalculate([&est](const TimeSeries<IntervalPrice>& ts){return est.calculate(ts);},       datesLen, dates, opens, closes, highs, lows, outDatesLen, outDates, outValuesLen, outValues, e);@@ -1522,7 +1554,7 @@ void qlGarmanKlassSigma5(double yearFraction,     unsigned datesLen, int *dates, unsigned /*opensLen*/, double *opens, unsigned /*closesLen*/, double *closes,     unsigned /*highsLen*/, double *highs, unsigned /*lowsLen*/, double *lows,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   GarmanKlassSigma5 est(yearFraction);   intervalPriceSeriesCalculate([&est](const TimeSeries<IntervalPrice>& ts){return est.calculate(ts);},       datesLen, dates, opens, closes, highs, lows, outDatesLen, outDates, outValuesLen, outValues, e);@@ -1530,24 +1562,49 @@ void qlGarmanKlassSigma6(double yearFraction, double marketOpenFraction,     unsigned datesLen, int *dates, unsigned /*opensLen*/, double *opens, unsigned /*closesLen*/, double *closes,     unsigned /*highsLen*/, double *highs, unsigned /*lowsLen*/, double *lows,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   GarmanKlassSigma6 est(yearFraction, marketOpenFraction);   intervalPriceSeriesCalculate([&est](const TimeSeries<IntervalPrice>& ts){return est.calculate(ts);},       datesLen, dates, opens, closes, highs, lows, outDatesLen, outDates, outValuesLen, outValues, e); } void qlConstantVolatilityEstimator(unsigned windowSize,     unsigned datesLen, int *dates, unsigned /*valuesLen*/, double *values,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   ConstantEstimator est(windowSize);   realSeriesCalculate([&est](const TimeSeries<Real>& ts){return est.calculate(ts);},       datesLen, dates, values, outDatesLen, outDates, outValuesLen, outValues, e); } void qlSimpleLocalVolatilityEstimator(double yearFraction,     unsigned datesLen, int *dates, unsigned /*valuesLen*/, double *values,-    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e) {+    unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);   SimpleLocalEstimator est(yearFraction);   realSeriesCalculate([&est](const TimeSeries<Real>& ts){return est.calculate(ts);},       datesLen, dates, values, outDatesLen, outDates, outValuesLen, outValues, e); }+double qlInterestRateDiscountFactorFirstDerivative(InterestRate* o, double t, QlError **e) { QlCallScope scope(e);+#if QL_HEX_VERSION >= 0x01440000+  try {return o->discountFactorFirstDerivative(t);} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o; (void)t; qlUnsupportedVersion(e, "discountFactorFirstDerivative", "1.44"); return 0;+#endif+}+double qlInterestRateDiscountFactorSecondDerivative(InterestRate* o, double t, QlError **e) { QlCallScope scope(e);+#if QL_HEX_VERSION >= 0x01440000+  try {return o->discountFactorSecondDerivative(t);} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o; (void)t; qlUnsupportedVersion(e, "discountFactorSecondDerivative", "1.44"); return 0;+#endif+}+QlStubIndexSelection* qlStubIndexSelection([[maybe_unused]] int convention, [[maybe_unused]] unsigned count, [[maybe_unused]] QlIborIndex** indices, QlError **e) { QlCallScope scope(e);+  try {+#if QL_HEX_VERSION >= 0x01440000+    return ret(new QlStubIndexSelection{convention, qlVector(indices, count)});+#else+    return ret(new QlStubIndexSelection{0, {}});+#endif+  } catch (std::exception& er) {return handleException<QlStubIndexSelection*>(e, er);}+}+void qlFreeStubIndexSelection(QlStubIndexSelection* p) {del(p);}+ } /* vim: set ft=cpp ff=unix ts=8 sts=2 sw=2 et: */
cbits/qlMisc.h view
@@ -2,15 +2,17 @@ extern "C" { #endif   int qlSettingsEvaluationDate();+  int qlSettingsRawEvaluationDate();+  const char *qlIndexHistoryNameKey(const char *name, QlError **e);   int qlSettingsEnforceTodaysHistoricFixings();-  void qlSettingsSetEvaluationDate(int x, char **e);+  void qlSettingsSetEvaluationDate(int x, QlError **e);   void qlSettingsSetEnforceTodaysHistoricFixings(int x);   int qlSettingsIncludeTodaysCashFlows();   void qlSettingsSetIncludeTodaysCashFlows(int x);   int qlSettingsIncludeReferenceDateEvents();   void qlSettingsSetIncludeReferenceDateEvents(int x0);   void qlObservableSettingsDisableUpdates(int deferred);-  void qlObservableSettingsEnableUpdates(char **e);+  void qlObservableSettingsEnableUpdates(QlError **e);   int qlObservableSettingsUpdatesEnabled();   int qlObservableSettingsUpdatesDeferred();   void *qlSavedSettings();@@ -30,7 +32,7 @@   double qlNullReal();   double qlEpsilon(); -  Currency *qlCurrency(int ccy, char **e);+  Currency *qlCurrency(int ccy, QlError **e);   const char *qlCurrencyName(Currency *currency);    void qlFreeCurrency(Currency *currency);@@ -39,60 +41,60 @@   char* qlCurrencyFractionSymbol(Currency* o);   int qlCurrencyNumericCode(Currency* o);   char* qlCurrencySymbol(Currency* o);-  Currency* qlCreateCurrency(char* name, char* code, int numericCode, char* symbol, char* fractionSymbol, int fractionsPerUnit, Rounding* rounding, Currency* triangulationCurrency, char **e);+  Currency* qlCreateCurrency(char* name, char* code, int numericCode, char* symbol, char* fractionSymbol, int fractionsPerUnit, Rounding* rounding, Currency* triangulationCurrency, QlError **e); -  ExchangeRate *qlExchangeRate(Currency *source, Currency *target, double rate, char **e);+  ExchangeRate *qlExchangeRate(Currency *source, Currency *target, double rate, QlError **e);   void qlFreeExchangeRate(ExchangeRate *o);   double qlExchangeRateRate(ExchangeRate *o);   int qlExchangeRateType_(ExchangeRate *o);-  double qlExchangeRateExchange(ExchangeRate *o, double amount, Currency *ccy, Currency **outCcy, char **e);-  ExchangeRate *qlExchangeRateChain(ExchangeRate *r1, ExchangeRate *r2, char **e);+  double qlExchangeRateExchange(ExchangeRate *o, double amount, Currency *ccy, Currency **outCcy, QlError **e);+  ExchangeRate *qlExchangeRateChain(ExchangeRate *r1, ExchangeRate *r2, QlError **e); -  void qlExchangeRateManagerAdd(ExchangeRate *rate, int startSerial, int endSerial, char **e);-  ExchangeRate *qlExchangeRateManagerLookup(Currency *source, Currency *target, int dateSerial, int type, char **e);+  void qlExchangeRateManagerAdd(ExchangeRate *rate, int startSerial, int endSerial, QlError **e);+  ExchangeRate *qlExchangeRateManagerLookup(Currency *source, Currency *target, int dateSerial, int type, QlError **e);   void qlExchangeRateManagerClear();    int qlMoneySettingsConversionType();   void qlMoneySettingsSetConversionType(int t);-  Currency *qlMoneySettingsBaseCurrency(char **e);+  Currency *qlMoneySettingsBaseCurrency(QlError **e);   void qlMoneySettingsSetBaseCurrency(Currency *c);-  double qlConvertToBaseCurrency(double amount, Currency *ccy, Currency **outCcy, char **e);+  double qlConvertToBaseCurrency(double amount, Currency *ccy, Currency **outCcy, QlError **e); -  InterestRate *qlInterestRate(double r, DayCounter *dc, int comp, int freq, char **e);-  double qlInterestRateCompoundFactor1(InterestRate* o, int d1, int d2, int refStart, int refEnd, char **e);-  double qlInterestRateCompoundFactor(InterestRate* o, double t, char **e);-  double qlInterestRateDiscountFactor1(InterestRate* o, int d1, int d2, int refStart, int refEnd, char **e);-  double qlInterestRateDiscountFactor(InterestRate* o, double t, char **e);-  InterestRate* qlInterestRateEquivalentRate1(InterestRate* o, DayCounter* resultDC, int comp, int freq, int d1, int d2, int refStart, int refEnd, char **e);-  InterestRate* qlInterestRateEquivalentRate(InterestRate* o, int comp, int freq, double t, char **e);-  InterestRate* qlInterestRateImpliedRate1(InterestRate* o, double compound, DayCounter* resultDC, int comp, int freq, int d1, int d2, int refStart, int refEnd, char **e);-  InterestRate* qlInterestRateImpliedRate(InterestRate* o, double compound, DayCounter* resultDC, int comp, int freq, double t, char **e);+  InterestRate *qlInterestRate(double r, DayCounter *dc, int comp, int freq, QlError **e);+  double qlInterestRateCompoundFactor1(InterestRate* o, int d1, int d2, int refStart, int refEnd, QlError **e);+  double qlInterestRateCompoundFactor(InterestRate* o, double t, QlError **e);+  double qlInterestRateDiscountFactor1(InterestRate* o, int d1, int d2, int refStart, int refEnd, QlError **e);+  double qlInterestRateDiscountFactor(InterestRate* o, double t, QlError **e);+  InterestRate* qlInterestRateEquivalentRate1(InterestRate* o, DayCounter* resultDC, int comp, int freq, int d1, int d2, int refStart, int refEnd, QlError **e);+  InterestRate* qlInterestRateEquivalentRate(InterestRate* o, int comp, int freq, double t, QlError **e);+  InterestRate* qlInterestRateImpliedRate1(InterestRate* o, double compound, DayCounter* resultDC, int comp, int freq, int d1, int d2, int refStart, int refEnd, QlError **e);+  InterestRate* qlInterestRateImpliedRate(InterestRate* o, double compound, DayCounter* resultDC, int comp, int freq, double t, QlError **e);   double qlInterestRateRate(InterestRate* o);   void qlFreeInterestRate(InterestRate *rate);    void qlFreeConstraint(Constraint *o);-  Constraint* qlBoundaryConstraint(double low, double high, char **e);-  Constraint* qlCompositeConstraint(Constraint* c1, Constraint* c2, char **e);-  Constraint* qlNoConstraint(char **e);-  Constraint* qlPositiveConstraint(char **e);+  Constraint* qlBoundaryConstraint(double low, double high, QlError **e);+  Constraint* qlCompositeConstraint(Constraint* c1, Constraint* c2, QlError **e);+  Constraint* qlNoConstraint(QlError **e);+  Constraint* qlPositiveConstraint(QlError **e);    void qlFreeOptimizationMethod(QlOptimizationMethod *o);-  QlOptimizationMethod* qlSimplex(double lambda, char **e);-  QlOptimizationMethod* qlLevenbergMarquardt(double epsfcn, double xtol, double gtol, int useCostFunctionsJacobian, char **e);+  QlOptimizationMethod* qlSimplex(double lambda, QlError **e);+  QlOptimizationMethod* qlLevenbergMarquardt(double epsfcn, double xtol, double gtol, int useCostFunctionsJacobian, QlError **e);   void qlFreeEndCriteria(QlEndCriteria *o);-  QlEndCriteria* qlEndCriteria(unsigned maxIterations, unsigned maxStationaryStateIterations, double rootEpsilon, double functionEpsilon, double gradientNormEpsilon, char **e);+  QlEndCriteria* qlEndCriteria(unsigned maxIterations, unsigned maxStationaryStateIterations, double rootEpsilon, double functionEpsilon, double gradientNormEpsilon, QlError **e);    // Minimizes a Haskell-defined cost function (called once per outer optimizer iteration, over   // the whole parameter vector -- see the HsCostFunction comment in qlMisc.cpp) via QuantLib's   // general-purpose Problem/OptimizationMethod machinery.-  void qlOptimize(double (*costFn)(double*, unsigned), unsigned x0Len, double* x0, Constraint* constraint, QlOptimizationMethod* method, QlEndCriteria* endCriteria, unsigned* outLen, double** outValues, double* outCost, int* outEndCriteriaType, char **e);+  void qlOptimize(QlCallback* costFn, unsigned x0Len, double* x0, Constraint* constraint, QlOptimizationMethod* method, QlEndCriteria* endCriteria, unsigned* outLen, double** outValues, double* outCost, int* outEndCriteriaType, QlError **e);   void qlFreeTimeGrid(TimeGrid *o);-  TimeGrid* qlTimeGrid1(double end, unsigned steps, char **e);-  TimeGrid* qlTimeGrid2(unsigned x0Len, double* x0, char **e);-  TimeGrid* qlTimeGrid3(unsigned x0Len, double* x0, unsigned steps, char **e);+  TimeGrid* qlTimeGrid1(double end, unsigned steps, QlError **e);+  TimeGrid* qlTimeGrid2(unsigned x0Len, double* x0, QlError **e);+  TimeGrid* qlTimeGrid3(unsigned x0Len, double* x0, unsigned steps, QlError **e);   unsigned qlTimeGridSize(TimeGrid* t);-  double qlTimeGridAt(TimeGrid* t, unsigned i, char **e);-  void qlTimeGridPoints(TimeGrid *t, unsigned *len, double **p, char **e);+  double qlTimeGridAt(TimeGrid* t, unsigned i, QlError **e);+  void qlTimeGridPoints(TimeGrid *t, unsigned *len, double **p, QlError **e);    /* RiskStatistics (ql/math/statistics/riskstatistics.hpp) -- a local      GenericRiskStatistics<GaussianStatistics> built fresh from the caller's own sample@@ -100,28 +102,28 @@      and gaussian-assumption (GenericGaussianStatistics) risk measures with no accumulator      object surfaced to Haskell -- mirrors the qlHistoricalIndexAnalysis* accessors above, but      over a caller-supplied sample instead of an index's historical fixings. */-  double qlRiskStatisticsMean(unsigned n, double *xs, char **e);-  double qlRiskStatisticsStandardDeviation(unsigned n, double *xs, char **e);-  double qlRiskStatisticsVariance(unsigned n, double *xs, char **e);-  double qlRiskStatisticsSkewness(unsigned n, double *xs, char **e);-  double qlRiskStatisticsKurtosis(unsigned n, double *xs, char **e);-  double qlRiskStatisticsMin(unsigned n, double *xs, char **e);-  double qlRiskStatisticsMax(unsigned n, double *xs, char **e);-  double qlRiskStatisticsSemiVariance(unsigned n, double *xs, char **e);-  double qlRiskStatisticsSemiDeviation(unsigned n, double *xs, char **e);-  double qlRiskStatisticsDownsideVariance(unsigned n, double *xs, char **e);-  double qlRiskStatisticsDownsideDeviation(unsigned n, double *xs, char **e);-  double qlRiskStatisticsPercentile(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsGaussianPercentile(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsValueAtRisk(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsGaussianValueAtRisk(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsExpectedShortfall(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsGaussianExpectedShortfall(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsPotentialUpside(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsGaussianPotentialUpside(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsRegret(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsShortfall(unsigned n, double *xs, double y, char **e);-  double qlRiskStatisticsAverageShortfall(unsigned n, double *xs, double y, char **e);+  double qlRiskStatisticsMean(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsStandardDeviation(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsVariance(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsSkewness(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsKurtosis(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsMin(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsMax(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsSemiVariance(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsSemiDeviation(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsDownsideVariance(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsDownsideDeviation(unsigned n, double *xs, QlError **e);+  double qlRiskStatisticsPercentile(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsGaussianPercentile(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsValueAtRisk(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsGaussianValueAtRisk(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsExpectedShortfall(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsGaussianExpectedShortfall(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsPotentialUpside(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsGaussianPotentialUpside(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsRegret(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsShortfall(unsigned n, double *xs, double y, QlError **e);+  double qlRiskStatisticsAverageShortfall(unsigned n, double *xs, double y, QlError **e);    /* Matrix decompositions (ql/math/matrixutilities/{symmetricschurdecomposition,pseudosqrt,      choleskydecomposition}.hpp) -- free functions over a caller-supplied matrix, passed flat@@ -130,63 +132,59 @@      lower-triangular factor L, not the original matrix. */   void qlSymmetricSchurDecomposition(unsigned rows, unsigned cols, double *m,       unsigned *valuesLen, double **values,-      unsigned *vectorRows, unsigned *vectorCols, unsigned *vectorsLen, double **vectors, char **e);+      unsigned *vectorRows, unsigned *vectorCols, unsigned *vectorsLen, double **vectors, QlError **e);   void qlPseudoSqrt(unsigned rows, unsigned cols, double *m, int salvaging,-      unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, char **e);+      unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, QlError **e);   void qlRankReducedSqrt(unsigned rows, unsigned cols, double *m, unsigned maxRank,       double componentRetainedPercentage, int salvaging,-      unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, char **e);+      unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, QlError **e);   void qlCholeskyDecomposition(unsigned rows, unsigned cols, double *m, int flexible,-      unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, char **e);+      unsigned *outRows, unsigned *outCols, unsigned *len, double **vs, QlError **e);   void qlCholeskySolveFor(unsigned rows, unsigned cols, double *l, unsigned bLen, double *b,-      unsigned *len, double **vs, char **e);+      unsigned *len, double **vs, QlError **e);    void qlFreeRounding(Rounding *o);-  Rounding* qlRounding(char **e);-  Rounding* qlRounding1(int precision, int type, int digit, char **e);+  Rounding* qlRounding(QlError **e);+  Rounding* qlRounding1(int precision, int type, int digit, QlError **e);   double qlRound(Rounding *r, double val);-  QlSimpleQuote *qlSimpleQuote(double value, char **e);-  double qlQuoteValue(QlQuote *quote, char **e);+  QlSimpleQuote *qlSimpleQuote(double value, QlError **e);+  double qlQuoteValue(QlQuote *quote, QlError **e);    void qlFreeQuote(QlQuote *quote);   void qlFreeSimpleQuote(QlSimpleQuote *o);   QlQuote* qlSimpleQuoteAsQuote(QlSimpleQuote *o);-  double qlSimpleQuoteSetValue(QlSimpleQuote* o, double value, char **e);-  QlDeltaVolQuote *qlDeltaVolQuote1(double delta, QlQuote *vol, double maturity, int deltaType, char **e);-  QlDeltaVolQuote *qlDeltaVolQuote2(QlQuote *vol, int deltaType, double maturity, int atmType, char **e);+  double qlSimpleQuoteSetValue(QlSimpleQuote* o, double value, QlError **e);+  QlDeltaVolQuote *qlDeltaVolQuote1(double delta, QlQuote *vol, double maturity, int deltaType, QlError **e);+  QlDeltaVolQuote *qlDeltaVolQuote2(QlQuote *vol, int deltaType, double maturity, int atmType, QlError **e);   void qlFreeDeltaVolQuote(QlDeltaVolQuote *o);   QlQuote* qlDeltaVolQuoteAsQuote(QlDeltaVolQuote *o);-  QlQuote* qlEurodollarFuturesImpliedStdDevQuote(QlQuote* forward, QlQuote* callPrice, QlQuote* putPrice, double strike, double guess, double accuracy, unsigned maxIter, char **e);-  QlQuote* qlForwardSwapQuote(QlSwapIndex* swapIndex, QlQuote* spread, int, int, char **e);-  QlQuote* qlForwardValueQuote(QlIndex* index, int fixingDate, char **e);-  QlFuturesConvAdjustmentQuote* qlFuturesConvAdjustmentQuote1(QlIborIndex* index, char* immCode, QlQuote* futuresQuote, QlQuote* volatility, QlQuote* meanReversion, char **e);-  QlFuturesConvAdjustmentQuote* qlFuturesConvAdjustmentQuote(QlIborIndex* index, int futuresDate, QlQuote* futuresQuote, QlQuote* volatility, QlQuote* meanReversion, char **e);+  QlQuote* qlEurodollarFuturesImpliedStdDevQuote(QlQuote* forward, QlQuote* callPrice, QlQuote* putPrice, double strike, double guess, double accuracy, unsigned maxIter, QlError **e);+  QlQuote* qlForwardSwapQuote(QlSwapIndex* swapIndex, QlQuote* spread, int, int, QlError **e);+  QlQuote* qlForwardValueQuote(QlIndex* index, int fixingDate, QlError **e);+  QlFuturesConvAdjustmentQuote* qlFuturesConvAdjustmentQuote1(QlIborIndex* index, char* immCode, QlQuote* futuresQuote, QlQuote* volatility, QlQuote* meanReversion, QlError **e);+  QlFuturesConvAdjustmentQuote* qlFuturesConvAdjustmentQuote(QlIborIndex* index, int futuresDate, QlQuote* futuresQuote, QlQuote* volatility, QlQuote* meanReversion, QlError **e);   void qlFreeFuturesConvAdjustmentQuote(QlFuturesConvAdjustmentQuote *o);   QlQuote* qlFuturesConvAdjustmentQuoteAsQuote(QlFuturesConvAdjustmentQuote *o);-  double qlFuturesConvAdjustmentQuoteFuturesValue(QlFuturesConvAdjustmentQuote *o, char **e);-  QlQuote* qlImpliedStdDevQuote(int optionType, QlQuote* forward, QlQuote* price, double strike, double guess, double accuracy, unsigned maxIter, char **e);-  QlQuote* qlLastFixingQuote(QlIndex* index, char **e);-  int qlQuoteIsValid(QlQuote* o, char **e);+  double qlFuturesConvAdjustmentQuoteFuturesValue(QlFuturesConvAdjustmentQuote *o, QlError **e);+  QlQuote* qlImpliedStdDevQuote(int optionType, QlQuote* forward, QlQuote* price, double strike, double guess, double accuracy, unsigned maxIter, QlError **e);+  QlQuote* qlLastFixingQuote(QlIndex* index, QlError **e);+  int qlQuoteIsValid(QlQuote* o, QlError **e);    // Quote composition. The op forms select a functor from the QuoteOp/MultiQuoteOp catalogue in   // qlEnumObjects.h; DerivedQuote's is applied as `x op operand'.-  QlQuote* qlDerivedQuote(int op, QlQuote* element, double operand, char **e);-  QlQuote* qlCompositeQuote(int op, QlQuote* element1, QlQuote* element2, char **e);-  QlQuote* qlMultiCompositeQuote(int op, unsigned elementsLen, QlQuote** elements, char **e);-  // As above, but over an arbitrary Haskell function. Same lifetime rule as-  // qlPayoffFromFunction (cbits/qlInstrument.h): the returned quote keeps calling back through-  // `fn' for its whole lifetime -- Quote::value() is invoked from wherever the quote was stored,-  // including mid-bootstrap -- so the caller must keep the FunPtr alive until the quote is gone.-  // See QuantLib.Quote.withDerivedQuote and friends.-  QlQuote* qlDerivedQuoteFromFunction(QlQuote* element, double (*fn)(double), char **e);-  QlQuote* qlCompositeQuoteFromFunction(QlQuote* element1, QlQuote* element2, double (*fn)(double, double), char **e);+  QlQuote* qlDerivedQuote(int op, QlQuote* element, double operand, QlError **e);+  QlQuote* qlCompositeQuote(int op, QlQuote* element1, QlQuote* element2, QlError **e);+  QlQuote* qlMultiCompositeQuote(int op, unsigned elementsLen, QlQuote** elements, QlError **e);+  // These quote functors retain shared callback ownership, including through native dependents.+  QlQuote* qlDerivedQuoteFromFunction(QlQuote* element, QlCallback* fn, QlError **e);+  QlQuote* qlCompositeQuoteFromFunction(QlQuote* element1, QlQuote* element2, QlCallback* fn, QlError **e);   // accumulate() takes the whole element vector at once, so this crosses the language boundary   // once per evaluation, not once per element.-  QlQuote* qlMultiCompositeQuoteFromFunction(unsigned elementsLen, QlQuote** elements, double (*fn)(const double*, unsigned), char **e);+  QlQuote* qlMultiCompositeQuoteFromFunction(unsigned elementsLen, QlQuote** elements, QlCallback* fn, QlError **e); -  QlRelinkableQuote* qlRelinkableQuote(QlQuote *initial, char **e);+  QlRelinkableQuote* qlRelinkableQuote(QlQuote *initial, QlError **e);   void qlFreeRelinkableQuote(QlRelinkableQuote *o);-  void qlRelinkableQuoteLinkTo(QlRelinkableQuote *o, QlQuote *c, char **e);+  void qlRelinkableQuoteLinkTo(QlRelinkableQuote *o, QlQuote *c, QlError **e);   QlQuote* qlRelinkableQuoteAsQuote(QlRelinkableQuote *o);    int qlMinDateSerialNumber();@@ -199,192 +197,184 @@   int qlDateEndOfMonth(int d);   int qlDateIsEndOfMonth(int d);   int qlDateNextWeekday(int d, int w);-  int qlDateNthWeekday(unsigned n, int w, int m, int y, char **e);+  int qlDateNthWeekday(unsigned n, int w, int m, int y, QlError **e); -  char* qlIMMCode(int immDate, char **e);-  int qlIMMDate(char* immCode, int referenceDate, char **e);+  char* qlIMMCode(int immDate, QlError **e);+  int qlIMMDate(char* immCode, int referenceDate, QlError **e);   int qlIMMIsIMMcode(char* in, int mainCycle);   int qlIMMIsIMMdate(int d, int mainCycle);-  char* qlIMMNextCode1(char* immCode, int mainCycle, int referenceDate, char **e);+  char* qlIMMNextCode1(char* immCode, int mainCycle, int referenceDate, QlError **e);   char* qlIMMNextCode(int d, int mainCycle);-  int qlIMMNextDate1(char* immCode, int mainCycle, int referenceDate, char **e);+  int qlIMMNextDate1(char* immCode, int mainCycle, int referenceDate, QlError **e);   int qlIMMNextDate(int d, int mainCycle); -  int qlAddPeriod(int d, int, int, char **e);+  int qlAddPeriod(int d, int, int, QlError **e); -  void qlECBAddDate(int d, char **e);-  char* qlECBCode(int ecbDate, char **e);-  int qlECBDate1(char* ecbCode, int referenceDate, char **e);-  int qlECBDate(int m, int y, char **e);-  int qlECBIsECBcode(char* in, char **e);-  int qlECBIsECBdate(int d, char **e);-  void qlECBKnownDates(unsigned *count, int **ds, char **e);-  char* qlECBNextCode1(char* ecbCode, char **e);-  char* qlECBNextCode(int d, char **e);-  int qlECBNextDate1(char* ecbCode, int referenceDate, char **e);-  int qlECBNextDate(int d, char **e);-  void qlECBNextDates(int d, unsigned *count, int **ds, char **e);-  void qlECBNextDates1(char* ecbCode, int referenceDate, unsigned *count, int **ds, char **e);-  void qlECBRemoveDate(int d, char **e);+  void qlECBAddDate(int d, QlError **e);+  char* qlECBCode(int ecbDate, QlError **e);+  int qlECBDate1(char* ecbCode, int referenceDate, QlError **e);+  int qlECBDate(int m, int y, QlError **e);+  int qlECBIsECBcode(char* in, QlError **e);+  int qlECBIsECBdate(int d, QlError **e);+  void qlECBKnownDates(unsigned *count, int **ds, QlError **e);+  char* qlECBNextCode1(char* ecbCode, QlError **e);+  char* qlECBNextCode(int d, QlError **e);+  int qlECBNextDate1(char* ecbCode, int referenceDate, QlError **e);+  int qlECBNextDate(int d, QlError **e);+  void qlECBNextDates(int d, unsigned *count, int **ds, QlError **e);+  void qlECBNextDates1(char* ecbCode, int referenceDate, unsigned *count, int **ds, QlError **e);+  void qlECBRemoveDate(int d, QlError **e); -  Calendar *qlCalendar(int country, int market, char **e);+  Calendar *qlCalendar(int country, int market, QlError **e);   const char *qlCalendarName(Calendar *calendar);-  int qlCalendarAdjust(Calendar *c, int date, int conv, char **e);-  int qlCalendarAdvance(Calendar *c, int date, int n, int unit, int conv, int eom, char **e);-  void qlCalendarAddHoliday(Calendar* o, int x0, char **e);-  int qlCalendarBusinessDaysBetween(Calendar* o, int from, int to, int includeFirst, int includeLast, char **e);-  int qlCalendarEndOfMonth(Calendar* o, int d, char **e);-  int qlCalendarIsBusinessDay(Calendar* o, int d, char **e);-  int qlCalendarIsEndOfMonth(Calendar* o, int d, char **e);-  int qlCalendarIsHoliday(Calendar* o, int d, char **e);-  int qlCalendarIsWeekend(Calendar* o, int w, char **e);-  void qlCalendarRemoveHoliday(Calendar* o, int x0, char **e);-  Calendar* qlBespokeCalendar(char* name, unsigned len, int *weekends, char **e);-  Calendar* qlJointCalendar2(Calendar* x_1, Calendar* x0, int x1, char **e);-  Calendar* qlJointCalendar3(Calendar* x_1, Calendar* x0, Calendar* x1, int x2, char **e);-  Calendar* qlJointCalendar4(Calendar* x_1, Calendar* x0, Calendar* x1, Calendar* x2, int x3, char **e);+  int qlCalendarAdjust(Calendar *c, int date, int conv, QlError **e);+  int qlCalendarAdvance(Calendar *c, int date, int n, int unit, int conv, int eom, QlError **e);+  void qlCalendarAddHoliday(Calendar* o, int x0, QlError **e);+  int qlCalendarBusinessDaysBetween(Calendar* o, int from, int to, int includeFirst, int includeLast, QlError **e);+  int qlCalendarEndOfMonth(Calendar* o, int d, QlError **e);+  int qlCalendarIsBusinessDay(Calendar* o, int d, QlError **e);+  int qlCalendarIsEndOfMonth(Calendar* o, int d, QlError **e);+  int qlCalendarIsHoliday(Calendar* o, int d, QlError **e);+  int qlCalendarIsWeekend(Calendar* o, int w, QlError **e);+  void qlCalendarRemoveHoliday(Calendar* o, int x0, QlError **e);+  Calendar* qlBespokeCalendar(char* name, unsigned len, int *weekends, QlError **e);+  Calendar* qlJointCalendar2(Calendar* x_1, Calendar* x0, int x1, QlError **e);+  Calendar* qlJointCalendar3(Calendar* x_1, Calendar* x0, Calendar* x1, int x2, QlError **e);+  Calendar* qlJointCalendar4(Calendar* x_1, Calendar* x0, Calendar* x1, Calendar* x2, int x3, QlError **e); -  void qlCalendarHolidayList(Calendar* calendar, int from, int to, int includeWeekEnds, unsigned *len, int **days, char **e);+  void qlCalendarHolidayList(Calendar* calendar, int from, int to, int includeWeekEnds, unsigned *len, int **days, QlError **e);   void qlFreeCalendar(Calendar *calendar); -  Schedule *qlSchedule(int eff, int term, int, int, Calendar *cal, int conv, int termConv, int rule, int eom, int first, int nextToLast, char **e);-  Schedule *qlSchedule1(unsigned len, int *dates, Calendar *cal, int conv, int termConv, int tenorLen, int tenorUnit, int rule, int eom, char **e);-  Schedule *qlScheduleUntil(Schedule *sched, int date, char **e);-  void qlScheduleDates(Schedule *sched, unsigned *count, int **days, char **e);+  Schedule *qlSchedule(int eff, int term, int, int, Calendar *cal, int conv, int termConv, int rule, int eom, int first, int nextToLast, QlError **e);+  Schedule *qlSchedule1(unsigned len, int *dates, Calendar *cal, int conv, int termConv, int tenorLen, int tenorUnit, int rule, int eom, QlError **e);+  Schedule *qlScheduleUntil(Schedule *sched, int date, QlError **e);+  void qlScheduleDates(Schedule *sched, unsigned *count, int **days, QlError **e);   void qlFreeSchedule(Schedule *s); -  int qlPeriodFromFrequency1(int freq, int *, char **e);-  int qlPeriodToFrequency1(int l, int u, char **e);-  int qlPeriodParserParse1(char* str, int *u, char **e);-  int qlPeriodAdd1(int, int u1, int, int u2, int *u, char **e);-  int qlPeriodDivide1(int, int u1, int n2, int *u, char **e);-  int qlPeriodNormalize1(int, int u, int *, char **e);-  int qlPeriodsLT1(int, int u1, int, int u2, char **e);+  int qlPeriodFromFrequency1(int freq, int *, QlError **e);+  int qlPeriodToFrequency1(int l, int u, QlError **e);+  int qlPeriodParserParse1(char* str, int *u, QlError **e);+  int qlPeriodAdd1(int, int u1, int, int u2, int *u, QlError **e);+  int qlPeriodDivide1(int, int u1, int n2, int *u, QlError **e);+  int qlPeriodNormalize1(int, int u, int *, QlError **e);+  int qlPeriodsLT1(int, int u1, int, int u2, QlError **e); -  DayCounter *qlDayCounter(int type, int convention, char **e);-  DayCounter *qlDayCounterBusiness252(Calendar *cal, char **e);-  DayCounter *qlDayCounterActualActualBond(Schedule *schedule, char **e);-  DayCounter *qlDayCounterActualActualISMA(Schedule *schedule, char **e);+  DayCounter *qlDayCounter(int type, int convention, QlError **e);+  DayCounter *qlDayCounterBusiness252(Calendar *cal, QlError **e);+  DayCounter *qlDayCounterActualActualBond(Schedule *schedule, QlError **e);+  DayCounter *qlDayCounterActualActualISMA(Schedule *schedule, QlError **e);   const char *qlDayCounterName(DayCounter *counter);   int qlDayCounterDayCount(DayCounter* o, int x0, int x1);-  double qlDayCounterYearFraction(DayCounter* o, int x0, int x1, int refPeriodStart, int refPeriodEnd, char **e);+  double qlDayCounterYearFraction(DayCounter* o, int x0, int x1, int refPeriodStart, int refPeriodEnd, QlError **e);    void qlFreeDayCounter(DayCounter *counter);    /* CommodityType */-  CommodityType *qlCommodityType(char *code, char *name, char **e);-  CommodityType *qlNullCommodityType(char **e);+  CommodityType *qlCommodityType(char *code, char *name, QlError **e);+  CommodityType *qlNullCommodityType(QlError **e);   void qlFreeCommodityType(CommodityType *o);   char *qlCommodityTypeCode(CommodityType *o);   char *qlCommodityTypeName(CommodityType *o);   int qlCommodityTypeEmpty(CommodityType *o);    /* UnitOfMeasure */-  UnitOfMeasure *qlUnitOfMeasure(char *name, char *code, int unitType, char **e);+  UnitOfMeasure *qlUnitOfMeasure(char *name, char *code, int unitType, QlError **e);   void qlFreeUnitOfMeasure(UnitOfMeasure *o);   char *qlUnitOfMeasureName(UnitOfMeasure *o);   char *qlUnitOfMeasureCode(UnitOfMeasure *o);   int qlUnitOfMeasureUnitType(UnitOfMeasure *o);   int qlUnitOfMeasureEmpty(UnitOfMeasure *o);-  UnitOfMeasure *qlLotUnitOfMeasure(char **e);-  UnitOfMeasure *qlBarrelUnitOfMeasure(char **e);-  UnitOfMeasure *qlMTUnitOfMeasure(char **e);-  UnitOfMeasure *qlMBUnitOfMeasure(char **e);-  UnitOfMeasure *qlGallonUnitOfMeasure(char **e);-  UnitOfMeasure *qlLitreUnitOfMeasure(char **e);-  UnitOfMeasure *qlKilolitreUnitOfMeasure(char **e);-  UnitOfMeasure *qlTokyoKilolitreUnitOfMeasure(char **e);+  UnitOfMeasure *qlLotUnitOfMeasure(QlError **e);+  UnitOfMeasure *qlBarrelUnitOfMeasure(QlError **e);+  UnitOfMeasure *qlMTUnitOfMeasure(QlError **e);+  UnitOfMeasure *qlMBUnitOfMeasure(QlError **e);+  UnitOfMeasure *qlGallonUnitOfMeasure(QlError **e);+  UnitOfMeasure *qlLitreUnitOfMeasure(QlError **e);+  UnitOfMeasure *qlKilolitreUnitOfMeasure(QlError **e);+  UnitOfMeasure *qlTokyoKilolitreUnitOfMeasure(QlError **e);    /* PaymentTerm */-  PaymentTerm *qlPaymentTerm(char *name, int eventType, int offsetDays, Calendar *calendar, char **e);+  PaymentTerm *qlPaymentTerm(char *name, int eventType, int offsetDays, Calendar *calendar, QlError **e);   void qlFreePaymentTerm(PaymentTerm *o);   char *qlPaymentTermName(PaymentTerm *o);   int qlPaymentTermEventType_(PaymentTerm *o);   int qlPaymentTermOffsetDays(PaymentTerm *o);-  Calendar *qlPaymentTermCalendar(PaymentTerm *o, char **e);+  Calendar *qlPaymentTermCalendar(PaymentTerm *o, QlError **e);   int qlPaymentTermEmpty(PaymentTerm *o);-  int qlPaymentTermGetPaymentDate(PaymentTerm *o, int date, char **e);+  int qlPaymentTermGetPaymentDate(PaymentTerm *o, int date, QlError **e); -  /* Quantity -- marshalled as flat (CommodityType, UnitOfMeasure, double) triples throughout,-     since c2hs's `&` tuple-splitter caps at two C arguments (confirmed against its source: the-     `twoCVal` marshaller consumes exactly [ct1, ct2], with no three-way variant). */+  /* Quantity uses flat triples because c2hs's `&` tuple-splitter supports only pairs. */   double qlQuantityRoundedAmount(UnitOfMeasure *uom, double amount);   int qlQuantityClose(CommodityType *ct1, UnitOfMeasure *uom1, double amount1,-                      CommodityType *ct2, UnitOfMeasure *uom2, double amount2, int n, char **e);+                      CommodityType *ct2, UnitOfMeasure *uom2, double amount2, int n, QlError **e);   int qlQuantityCloseEnough(CommodityType *ct1, UnitOfMeasure *uom1, double amount1,-                            CommodityType *ct2, UnitOfMeasure *uom2, double amount2, int n, char **e);+                            CommodityType *ct2, UnitOfMeasure *uom2, double amount2, int n, QlError **e);    /* UnitOfMeasureConversion */   UnitOfMeasureConversion *qlUnitOfMeasureConversion(CommodityType *commodityType, UnitOfMeasure *source,-                                                     UnitOfMeasure *target, double conversionFactor, char **e);+                                                     UnitOfMeasure *target, double conversionFactor, QlError **e);   void qlFreeUnitOfMeasureConversion(UnitOfMeasureConversion *o);-  UnitOfMeasure *qlUnitOfMeasureConversionSource(UnitOfMeasureConversion *o, char **e);-  UnitOfMeasure *qlUnitOfMeasureConversionTarget(UnitOfMeasureConversion *o, char **e);-  CommodityType *qlUnitOfMeasureConversionCommodityType(UnitOfMeasureConversion *o, char **e);+  UnitOfMeasure *qlUnitOfMeasureConversionSource(UnitOfMeasureConversion *o, QlError **e);+  UnitOfMeasure *qlUnitOfMeasureConversionTarget(UnitOfMeasureConversion *o, QlError **e);+  CommodityType *qlUnitOfMeasureConversionCommodityType(UnitOfMeasureConversion *o, QlError **e);   int qlUnitOfMeasureConversionType_(UnitOfMeasureConversion *o);   double qlUnitOfMeasureConversionFactor(UnitOfMeasureConversion *o);   char *qlUnitOfMeasureConversionCode(UnitOfMeasureConversion *o);   double qlUnitOfMeasureConversionConvert(UnitOfMeasureConversion *o, CommodityType *ct, UnitOfMeasure *uom,-                                          double amount, CommodityType **outCt, UnitOfMeasure **outUom, char **e);-  UnitOfMeasureConversion *qlUnitOfMeasureConversionChain(UnitOfMeasureConversion *r1, UnitOfMeasureConversion *r2, char **e);+                                          double amount, CommodityType **outCt, UnitOfMeasure **outUom, QlError **e);+  UnitOfMeasureConversion *qlUnitOfMeasureConversionChain(UnitOfMeasureConversion *r1, UnitOfMeasureConversion *r2, QlError **e);    /* UnitOfMeasureConversionManager (singleton) */   UnitOfMeasureConversion *qlUnitOfMeasureConversionManagerLookup(-      CommodityType *commodityType, UnitOfMeasure *source, UnitOfMeasure *target, int type, char **e);+      CommodityType *commodityType, UnitOfMeasure *source, UnitOfMeasure *target, int type, QlError **e);   void qlUnitOfMeasureConversionManagerAdd(UnitOfMeasureConversion *c);   void qlUnitOfMeasureConversionManagerClear(void);    /* CommoditySettings (singleton) */-  Currency *qlCommoditySettingsCurrency(char **e);+  Currency *qlCommoditySettingsCurrency(QlError **e);   void qlCommoditySettingsSetCurrency(Currency *c);-  UnitOfMeasure *qlCommoditySettingsUnitOfMeasure(char **e);+  UnitOfMeasure *qlCommoditySettingsUnitOfMeasure(QlError **e);   void qlCommoditySettingsSetUnitOfMeasure(UnitOfMeasure *u); -  /* HistoricalIndexAnalysis -- computes a SequenceStatistics (one dimension per index) over the-     relative fixing-to-fixing returns of the given indexes between startDate and endDate, sampled-     every step, generalizing upstream's InterestRateIndex-only HistoricalRatesAnalysis-     (ql/models/marketmodels/historicalratesanalysis.hpp) to any Index -- see CLAUDE.md's "don't-     mirror the C++ hierarchy 1:1". SequenceStatistics is, per dimension, a full-     GenericRiskStatistics<GaussianStatistics> (ql/math/statistics/riskstatistics.hpp), so both its-     empirical and gaussian-assumption risk measures are exposed here directly as-     HistoricalIndexAnalysis accessors rather than introducing a dedicated Statistics Haskell type. */+  /* HistoricalIndexAnalysis samples relative returns for any Index and exposes+     SequenceStatistics measures per index. */   QlHistoricalIndexAnalysis *qlHistoricalIndexAnalysis(int startDate, int endDate,-      int stepLen, int stepUnit, unsigned indexesLen, QlIndex **indexes, char **e);+      int stepLen, int stepUnit, unsigned indexesLen, QlIndex **indexes, QlError **e);   void qlFreeHistoricalIndexAnalysis(QlHistoricalIndexAnalysis *o);-  void qlHistoricalIndexAnalysisSkippedDates(QlHistoricalIndexAnalysis *o, unsigned *count, int **days, char **e);-  void qlHistoricalIndexAnalysisSkippedDatesErrorMessage(QlHistoricalIndexAnalysis *o, unsigned *count, char ***msgs, char **e);-  void qlHistoricalIndexAnalysisMean(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisStandardDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisSkewness(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisKurtosis(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisMin(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisMax(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisSemiVariance(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisSemiDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisDownsideVariance(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisDownsideDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisPercentile(QlHistoricalIndexAnalysis *o, double y, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisGaussianPercentile(QlHistoricalIndexAnalysis *o, double y, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisValueAtRisk(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisGaussianValueAtRisk(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisExpectedShortfall(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisGaussianExpectedShortfall(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisPotentialUpside(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisGaussianPotentialUpside(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisRegret(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisGaussianShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisAverageShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisGaussianAverageShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisCovariance(QlHistoricalIndexAnalysis *o, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e);-  void qlHistoricalIndexAnalysisCorrelation(QlHistoricalIndexAnalysis *o, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e);+  void qlHistoricalIndexAnalysisSkippedDates(QlHistoricalIndexAnalysis *o, unsigned *count, int **days, QlError **e);+  void qlHistoricalIndexAnalysisSkippedDatesErrorMessage(QlHistoricalIndexAnalysis *o, unsigned *count, char ***msgs, QlError **e);+  void qlHistoricalIndexAnalysisMean(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisStandardDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisSkewness(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisKurtosis(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisMin(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisMax(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisSemiVariance(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisSemiDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisDownsideVariance(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisDownsideDeviation(QlHistoricalIndexAnalysis *o, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisPercentile(QlHistoricalIndexAnalysis *o, double y, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisGaussianPercentile(QlHistoricalIndexAnalysis *o, double y, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisValueAtRisk(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisGaussianValueAtRisk(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisExpectedShortfall(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisGaussianExpectedShortfall(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisPotentialUpside(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisGaussianPotentialUpside(QlHistoricalIndexAnalysis *o, double centile, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisRegret(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisGaussianShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisAverageShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisGaussianAverageShortfall(QlHistoricalIndexAnalysis *o, double target, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisCovariance(QlHistoricalIndexAnalysis *o, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e);+  void qlHistoricalIndexAnalysisCorrelation(QlHistoricalIndexAnalysis *o, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e);    /* Garch11 -- a GARCH(1,1) volatility model, direct-parameter or calibrated from a return      series. calibratedDatesLen/calibratedValuesLen are always equal in practice (the Haskell      side always builds them from one zipped list); kept as two counts, per the codebase's usual      array-marshalling shape, rather than one shared length. */-  Garch11 *qlGarch11(double alpha, double beta, double vl, char **e);-  Garch11 *qlGarch11Calibrated(unsigned datesLen, int *dates, unsigned valuesLen, double *values, int mode, char **e);+  Garch11 *qlGarch11(double alpha, double beta, double vl, QlError **e);+  Garch11 *qlGarch11Calibrated(unsigned datesLen, int *dates, unsigned valuesLen, double *values, int mode, QlError **e);   void qlFreeGarch11(Garch11 *o);   double qlGarch11Alpha(Garch11 *o);   double qlGarch11Beta(Garch11 *o);@@ -393,7 +383,7 @@   double qlGarch11LogLikelihood(Garch11 *o);   double qlGarch11Forecast(Garch11 *o, double r, double sigma2);   void qlGarch11Calculate(Garch11 *o, unsigned datesLen, int *dates, unsigned valuesLen, double *values,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);    /* GarmanKlass family (ql/models/volatility/garmanklass.hpp) and the two other      LocalVolatilityEstimator/VolatilityCompositor implementations in ql/models/volatility --@@ -404,37 +394,41 @@   void qlGarmanKlassSimpleSigma(double yearFraction,       unsigned datesLen, int *dates, unsigned opensLen, double *opens, unsigned closesLen, double *closes,       unsigned highsLen, double *highs, unsigned lowsLen, double *lows,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);   void qlGarmanKlassSigma1(double yearFraction, double marketOpenFraction,       unsigned datesLen, int *dates, unsigned opensLen, double *opens, unsigned closesLen, double *closes,       unsigned highsLen, double *highs, unsigned lowsLen, double *lows,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);   void qlParkinsonSigma(double yearFraction,       unsigned datesLen, int *dates, unsigned opensLen, double *opens, unsigned closesLen, double *closes,       unsigned highsLen, double *highs, unsigned lowsLen, double *lows,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);   void qlGarmanKlassSigma3(double yearFraction, double marketOpenFraction,       unsigned datesLen, int *dates, unsigned opensLen, double *opens, unsigned closesLen, double *closes,       unsigned highsLen, double *highs, unsigned lowsLen, double *lows,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);   void qlGarmanKlassSigma4(double yearFraction,       unsigned datesLen, int *dates, unsigned opensLen, double *opens, unsigned closesLen, double *closes,       unsigned highsLen, double *highs, unsigned lowsLen, double *lows,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);   void qlGarmanKlassSigma5(double yearFraction,       unsigned datesLen, int *dates, unsigned opensLen, double *opens, unsigned closesLen, double *closes,       unsigned highsLen, double *highs, unsigned lowsLen, double *lows,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);   void qlGarmanKlassSigma6(double yearFraction, double marketOpenFraction,       unsigned datesLen, int *dates, unsigned opensLen, double *opens, unsigned closesLen, double *closes,       unsigned highsLen, double *highs, unsigned lowsLen, double *lows,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);   void qlConstantVolatilityEstimator(unsigned windowSize,       unsigned datesLen, int *dates, unsigned valuesLen, double *values,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);   void qlSimpleLocalVolatilityEstimator(double yearFraction,       unsigned datesLen, int *dates, unsigned valuesLen, double *values,-      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, char **e);+      unsigned *outDatesLen, int **outDates, unsigned *outValuesLen, double **outValues, QlError **e);+  double qlInterestRateDiscountFactorFirstDerivative(InterestRate* o, double t, QlError **e);+  double qlInterestRateDiscountFactorSecondDerivative(InterestRate* o, double t, QlError **e);+  QlStubIndexSelection* qlStubIndexSelection(int convention, unsigned count, QlIborIndex** indices, QlError **e);+  void qlFreeStubIndexSelection(QlStubIndexSelection* selection); #ifdef __cplusplus } #endif
cbits/qlPricingEngine.cpp view
@@ -1,1888 +1,2204 @@-#include <ql/experimental/callablebonds/blackcallablebondengine.hpp>-#include <ql/experimental/callablebonds/treecallablebondengine.hpp>-#include <ql/experimental/swaptions/haganirregularswaptionengine.hpp>-#include <ql/experimental/math/zigguratrng.hpp>-#include <ql/experimental/variancegamma/all.hpp>-#include <ql/experimental/barrieroption/vannavolgabarrierengine.hpp>-#include <ql/experimental/varianceoption/integralhestonvarianceoptionengine.hpp>-#include <ql/legacy/libormarketmodels/lfmswaptionengine.hpp>-#include <ql/methods/montecarlo/lsmbasissystem.hpp>-#include <ql/math/generallinearleastsquares.hpp>-#include <ql/pricingengines/asian/analytic_cont_geom_av_price.hpp>-#include <ql/pricingengines/asian/analytic_discr_geom_av_strike.hpp>-#include <ql/pricingengines/asian/mc_discr_arith_av_price.hpp>-#include <ql/experimental/asian/analytic_cont_geom_av_price_heston.hpp>-#include <ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp>-#include <ql/pricingengines/asian/turnbullwakemanasianengine.hpp>-#include <ql/pricingengines/asian/fdblackscholesasianengine.hpp>-#include <ql/pricingengines/forward/forwardengine.hpp>-#include <ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp>-#include <ql/pricingengines/vanilla/analyticeuropeanengine.hpp>-#include <ql/experimental/forward/analytichestonforwardeuropeanengine.hpp>-#include <ql/experimental/barrieroption/vannavolgadoublebarrierengine.hpp>-#include <ql/pricingengines/barrier/analyticbarrierengine.hpp>-#include <ql/pricingengines/barrier/analytictwoassetbarrierengine.hpp>-#include <ql/pricingengines/barrier/analyticsoftbarrierengine.hpp>-#include <ql/pricingengines/quanto/quantoengine.hpp>-#include <ql/instruments/quantovanillaoption.hpp>-#include <ql/instruments/forwardvanillaoption.hpp>-#include <ql/pricingengines/forward/forwardperformanceengine.hpp>-#include <ql/pricingengines/exotic/analyticsimplechooserengine.hpp>-#include <ql/pricingengines/exotic/analytictwoassetcorrelationengine.hpp>-#include <ql/pricingengines/exotic/analyticeuropeanmargrabeengine.hpp>-#include <ql/pricingengines/exotic/analyticamericanmargrabeengine.hpp>-#include <ql/pricingengines/exotic/analyticwriterextensibleoptionengine.hpp>-#include <ql/pricingengines/barrier/analyticpartialtimebarrieroptionengine.hpp>-#include <ql/pricingengines/barrier/analyticbinarybarrierengine.hpp>-#include <ql/pricingengines/barrier/analyticdoublebarrierengine.hpp>-#include <ql/pricingengines/barrier/fdblackscholesbarrierengine.hpp>-#include <ql/pricingengines/barrier/fdhestonbarrierengine.hpp>-#include <ql/pricingengines/barrier/fdhestondoublebarrierengine.hpp>-#include <ql/pricingengines/basket/kirkengine.hpp>-#include <ql/pricingengines/basket/stulzengine.hpp>-#include <ql/pricingengines/basket/bjerksundstenslandspreadengine.hpp>-#include <ql/pricingengines/basket/operatorsplittingspreadengine.hpp>-#include <ql/pricingengines/basket/pearsonspreadengine.hpp>-#include <ql/pricingengines/basket/gaussiancopulaspreadengine.hpp>-#include <ql/pricingengines/basket/fd2dblackscholesvanillaengine.hpp>-#include <ql/pricingengines/basket/choibasketengine.hpp>-#include <ql/pricingengines/basket/denglizhoubasketengine.hpp>-#include <ql/pricingengines/basket/fdndimblackscholesvanillaengine.hpp>-#include <ql/pricingengines/basket/singlefactorbsmbasketengine.hpp>-#include <ql/pricingengines/bacheliercalculator.hpp>-#include <ql/pricingengines/blackdeltacalculator.hpp>-#include <ql/pricingengines/blackformula.hpp>-#include <ql/pricingengines/blackscholescalculator.hpp>-#include <ql/pricingengines/bond/discountingbondengine.hpp>-#include <ql/pricingengines/futures/discountingperpetualfuturesengine.hpp>-#include <ql/pricingengines/bond/riskybondengine.hpp>-#include <ql/pricingengines/capfloor/analyticcapfloorengine.hpp>-#include <ql/pricingengines/capfloor/bacheliercapfloorengine.hpp>-#include <ql/pricingengines/capfloor/blackcapfloorengine.hpp>-#include <ql/pricingengines/capfloor/treecapfloorengine.hpp>-#include <ql/pricingengines/cliquet/analyticcliquetengine.hpp>-#include <ql/pricingengines/cliquet/analyticperformanceengine.hpp>-#include <ql/experimental/credit/integralcdoengine.hpp>-#include <ql/experimental/credit/midpointcdoengine.hpp>-#include <ql/experimental/credit/integralntdengine.hpp>-#include <ql/pricingengines/credit/integralcdsengine.hpp>-#include <ql/pricingengines/credit/isdacdsengine.hpp>-#include <ql/pricingengines/exotic/analyticcompoundoptionengine.hpp>-#include <ql/pricingengines/credit/midpointcdsengine.hpp>-#include <ql/pricingengines/forward/discountingfxforwardengine.hpp>-#include <ql/pricingengines/forward/replicatingvarianceswapengine.hpp>-#include <ql/pricingengines/greeks.hpp>-#include <ql/pricingengines/lookback/analyticcontinuousfixedlookback.hpp>-#include <ql/pricingengines/lookback/analyticcontinuousfloatinglookback.hpp>-#include <ql/pricingengines/lookback/analyticcontinuouspartialfixedlookback.hpp>-#include <ql/pricingengines/lookback/analyticcontinuouspartialfloatinglookback.hpp>-#include <ql/pricingengines/swap/cvaswapengine.hpp>-#include <ql/pricingengines/swap/treeswapengine.hpp>-#include <ql/pricingengines/swap/discountingconstnotionalcrosscurrencyswapengine.hpp>-#include <ql/pricingengines/swaption/blackswaptionengine.hpp>-#include <ql/termstructures/volatility/sabr.hpp>-#include <ql/pricingengines/swaption/fdg2swaptionengine.hpp>-#include <ql/pricingengines/swaption/fdg2swaptionengine.hpp>-#include <ql/pricingengines/swaption/fdhullwhiteswaptionengine.hpp>-#include <ql/pricingengines/swaption/g2swaptionengine.hpp>-#include <ql/pricingengines/capfloor/gaussian1dcapfloorengine.hpp>-#include <ql/pricingengines/swaption/gaussian1dswaptionengine.hpp>-#include <ql/pricingengines/swaption/gaussian1dnonstandardswaptionengine.hpp>-#include <ql/pricingengines/swaption/gaussian1dfloatfloatswaptionengine.hpp>-#include <ql/pricingengines/swaption/gaussian1djamshidianswaptionengine.hpp>-#include <ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp>-#include <ql/models/shortrate/calibrationhelpers/swaptionhelper.hpp>-#include <ql/models/equity/hestonslvmcmodel.hpp>-#include <ql/models/equity/hestonslvfdmmodel.hpp>-#include <ql/processes/hestonslvprocess.hpp>-#include <ql/models/marketmodels/browniangenerators/mtbrowniangenerator.hpp>-#include <ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp>-#include <ql/pricingengines/swaption/jamshidianswaptionengine.hpp>-#include <ql/pricingengines/swaption/treeswaptionengine.hpp>-#include <ql/pricingengines/vanilla/analyticbsmhullwhiteengine.hpp>-#include <ql/pricingengines/vanilla/analyticdigitalamericanengine.hpp>-#include <ql/pricingengines/vanilla/analyticdividendeuropeanengine.hpp>-#include <ql/pricingengines/vanilla/analyticgjrgarchengine.hpp>-#include <ql/pricingengines/vanilla/analytichestonhullwhiteengine.hpp>-#include <ql/pricingengines/vanilla/baroneadesiwhaleyengine.hpp>-#include <ql/pricingengines/vanilla/batesengine.hpp>-#include <ql/pricingengines/vanilla/bjerksundstenslandengine.hpp>-#include <ql/pricingengines/vanilla/integralengine.hpp>-#include <ql/pricingengines/vanilla/jumpdiffusionengine.hpp>-#include <ql/pricingengines/vanilla/juquadraticengine.hpp>-#include <ql/pricingengines/vanilla/qdplusamericanengine.hpp>-#include <ql/pricingengines/vanilla/qdfpamericanengine.hpp>-#include <ql/experimental/exoticoptions/continuousarithmeticasianvecerengine.hpp>-#include <ql/instruments/dividendschedule.hpp>-#include <ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp>-#include <ql/methods/finitedifferences/operators/fdmlinearopcomposite.hpp>-#include <ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp>-#include <ql/methods/finitedifferences/utilities/fdmquantohelper.hpp>-#include <ql/methods/finitedifferences/utilities/fdminnervaluecalculator.hpp>-#include <ql/methods/finitedifferences/utilities/fdmaffinemodelswapinnervalue.hpp>-#include <ql/methods/finitedifferences/meshers/fdmmesher.hpp>-#include <ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp>-#include <ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp>-#include <ql/methods/finitedifferences/meshers/predefined1dmesher.hpp>-#include <ql/methods/finitedifferences/meshers/uniform1dmesher.hpp>-#include <ql/methods/finitedifferences/meshers/concentrating1dmesher.hpp>-#include <ql/methods/finitedifferences/meshers/fdmblackscholesmesher.hpp>-#include <ql/methods/finitedifferences/meshers/fdmcev1dmesher.hpp>-#include <ql/methods/finitedifferences/meshers/exponentialjump1dmesher.hpp>-#include <ql/methods/finitedifferences/meshers/fdmsimpleprocess1dmesher.hpp>-#include <ql/methods/finitedifferences/meshers/fdmhestonvariancemesher.hpp>-#include <ql/experimental/finitedifferences/glued1dmesher.hpp>-#include <ql/pricingengines/vanilla/fdhestonvanillaengine.hpp>-#include <ql/pricingengines/vanilla/fdhestonhullwhitevanillaengine.hpp>-#include <ql/pricingengines/exotic/analyticcomplexchooserengine.hpp>-#include <ql/pricingengines/exotic/analyticholderextensibleoptionengine.hpp>-#include <ql/pricingengines/vanilla/coshestonengine.hpp>-#include <ql/pricingengines/vanilla/analyticpdfhestonengine.hpp>-#include <ql/pricingengines/vanilla/fdbatesvanillaengine.hpp>-#include <ql/pricingengines/vanilla/fdblackscholesshoutengine.hpp>-#include <ql/models/all.hpp>-#include <ql/legacy/libormarketmodels/all.hpp>-#include <ql/experimental/shortrate/generalizedhullwhite.hpp>-#include <ql/experimental/variancegamma/variancegammamodel.hpp>-#include <ql/processes/all.hpp>-#include <ql/experimental/processes/all.hpp>-#include <ql/experimental/variancegamma/all.hpp>-#include <ql/legacy/libormarketmodels/lfmprocess.hpp>--#include "qlaux.h"-#include "qlPricingEngineAux.h"-#include "qlPricingEngine.h"--namespace hasquant {-#include "qlEnumObjects.h"-}--using namespace QuantLib;--#ifdef QLTRACK_ALLOCATIONS-QL_TRACE_NAME(SamplePath)-#endif--namespace {-  shared_ptr<StochasticProcess1D::discretization> createDiscretization1D(int n) {-    switch (n) {-    case hasquant::EulerDiscretization:-      return shared_ptr<StochasticProcess1D::discretization>(new EulerDiscretization());-    case hasquant::EndEulerDiscretization:-      return shared_ptr<StochasticProcess1D::discretization>(new EndEulerDiscretization());-    default:-      QL_FAIL("Invalid discretization: " << n);-    }-  }--  // Wraps 3 Haskell-defined callbacks (produced by QuantLib.Internal.Type's withFdmApply/-  // withFdmApplyDirection/withFdmSolveSplitting, mirroring qlOptimize's HsCostFunction above) as a-  // QuantLib FdmLinearOpComposite driving FdmBackwardSolver::rollback -- see the "coarsen the-  // language-boundary crossing" bullet in CLAUDE.md and qlFdmRollback below. Only the 3 virtuals-  // DouglasScheme::step actually calls (size/setTime are plain state, not callbacks -- see below)-  // are implemented; apply_mixed/preconditioner QL_FAIL, so only schemes that never need them-  // (Douglas, Crank-Nicolson in 1D) work through this hook.-  using FdmApplyFun = void (*)(const double* in, unsigned n, double t1, double t2, double* out);-  using FdmApplyDirectionFun = void (*)(const double* in, unsigned n, unsigned direction, double t1, double t2, double* out);-  using FdmSolveSplittingFun = void (*)(const double* in, unsigned n, unsigned direction, double s, double t1, double t2, double* out);-  using FdmStepConditionFun = void (*)(const double* in, unsigned n, double t, double* out);--  class HsFdmLinearOpComposite : public FdmLinearOpComposite {-  public:-    HsFdmLinearOpComposite(Size size, FdmApplyFun applyFn, FdmApplyDirectionFun applyDirFn, FdmSolveSplittingFun solveSplitFn)-    : size_(size), applyFn_(applyFn), applyDirFn_(applyDirFn), solveSplitFn_(solveSplitFn), t1_(0.0), t2_(0.0) {}--    Size size() const override {return size_;}-    // Not a callback: DouglasScheme (and every scheme) calls setTime once per outer step, then-    // makes several apply*/solve_splitting calls against the *same* (t1,t2) -- so the C++-    // wrapper just stores them as mutable state and passes them as extra scalar args to every-    // apply*/solve_splitting callback below, keeping the Haskell callbacks themselves pure.-    void setTime(Time t1, Time t2) override {t1_ = t1; t2_ = t2;}--    Array apply(const Array& r) const override {-      Array out(r.size());-      applyFn_(r.begin(), (unsigned)r.size(), t1_, t2_, out.begin());-      return out;-    }-    Array apply_direction(Size direction, const Array& r) const override {-      Array out(r.size());-      applyDirFn_(r.begin(), (unsigned)r.size(), (unsigned)direction, t1_, t2_, out.begin());-      return out;-    }-    Array solve_splitting(Size direction, const Array& r, Real s) const override {-      Array out(r.size());-      solveSplitFn_(r.begin(), (unsigned)r.size(), (unsigned)direction, s, t1_, t2_, out.begin());-      return out;-    }-    Array apply_mixed(const Array&) const override {-      QL_FAIL("HsFdmLinearOpComposite::apply_mixed not implemented -- fdmRollback only supports schemes that never need mixed derivatives (Douglas, Crank-Nicolson in 1D)");-    }-    Array preconditioner(const Array&, Real) const override {-      QL_FAIL("HsFdmLinearOpComposite::preconditioner not implemented -- fdmRollback only supports schemes that never need it (Douglas, Crank-Nicolson in 1D)");-    }-  private:-    Size size_;-    FdmApplyFun applyFn_;-    FdmApplyDirectionFun applyDirFn_;-    FdmSolveSplittingFun solveSplitFn_;-    mutable Time t1_, t2_;-  };--  // Wraps one optional Haskell-defined step condition (withMaybeFdmStepCondition) as a-  // StepCondition<Array>. applyTo's caller-supplied `a' buffer is both the read source and the-  // write destination -- safe because the Haskell-side callback fully reads its input (peekArray)-  // before writing any of its output (pokeArray), so an in-place update never reads-  // already-overwritten data.-  class HsFdmStepCondition : public StepCondition<Array> {-  public:-    explicit HsFdmStepCondition(FdmStepConditionFun fn) : fn_(fn) {}-    void applyTo(Array& a, Time t) const override {-      fn_(a.begin(), (unsigned)a.size(), t, a.begin());-    }-  private:-    FdmStepConditionFun fn_;-  };-  // Genuine per-grid-node Haskell callback -- see QuantLib.Method's haddock ("coarsen the-  // language-boundary crossing" exception case) and CLAUDE.md's own note on this hook. Unlike-  // HsFdmLinearOpComposite/HsFdmStepCondition above, this cannot be coarsened to cross once per-  // outer iteration: FdmInnerValueCalculator::innerValue/avgInnerValue is called once per mesher-  // node (see qlFdmSolve below, mirroring Fdm1DimSolver's/FdmNdimSolver's own constructor loop),-  // and QuantLib's own step conditions (e.g. FdmAmericanStepCondition, not bound here) call it-  // again per node at every exercise date -- matching QuantLib-SWIG's own-  // FdmInnerValueCalculatorDelegate (SWIG/fdm.i), which accepts the same real per-call cost.-  using FdmInnerValueFun = double (*)(const double* loc, unsigned n, double t);--  class HsFdmInnerValueCalculator : public FdmInnerValueCalculator {-  public:-    HsFdmInnerValueCalculator(shared_ptr<FdmMesher> mesher, FdmInnerValueFun innerValueFn, FdmInnerValueFun avgInnerValueFn)-    : mesher_(std::move(mesher)), innerValueFn_(innerValueFn), avgInnerValueFn_(avgInnerValueFn) {}--    Real innerValue(const FdmLinearOpIterator& iter, Time t) override {return call(innerValueFn_, iter, t);}-    Real avgInnerValue(const FdmLinearOpIterator& iter, Time t) override {return call(avgInnerValueFn_, iter, t);}-  private:-    // Converts the node's grid-index iterator into its real-valued location per dimension ---    // the reason this whole feature needs a mesher, unlike qlFdmRollback's raw-index callbacks.-    Real call(FdmInnerValueFun fn, const FdmLinearOpIterator& iter, Time t) const {-      const Size n = mesher_->layout()->dim().size();-      std::vector<Real> loc(n);-      for (Size d = 0; d < n; ++d) loc[d] = mesher_->location(iter, d);-      return fn(loc.data(), (unsigned)n, t);-    }-    shared_ptr<FdmMesher> mesher_;-    FdmInnerValueFun innerValueFn_, avgInnerValueFn_;-  };--  // Builds the FdmLinearOpIterator for the node at `coords` (one index per dimension) from-  // mesher's own layout dim(), the reverse of what HsFdmInnerValueCalculator::call does above ---  // lets any bound FdmInnerValueCalculator (native or Haskell-callback-driven) be inspected-  // node-by-node without assembling a whole PDE solve.-  // extern "C++": this whole file sits inside qlPricingEngine.h's extern "C" block, but a free-  // function returning a non-POD C++ class by value (rather than only pointers, as every C-linkage-  // shim function here does) needs real C++ linkage or GHC's C++ frontend warns-  // (-Wreturn-type-c-linkage).-  FdmLinearOpIterator fdmIteratorAt(QlFdmMesher* mesher, unsigned ndims, unsigned* coords) {-    const shared_ptr<FdmLinearOpLayout>& layout = (*arg(mesher))->layout();-    std::vector<Size> dim = layout->dim();-    std::vector<Size> coordinates(coords, coords + ndims);-    Size index = 0, stride = 1;-    for (Size d = 0; d < dim.size(); ++d) {-      index += coordinates[d] * stride;-      stride *= dim[d];-    }-    return FdmLinearOpIterator(dim, coordinates, index);-  }-  // FdmAffineModelSwapInnerValue<ModelType> -- template isn't crossable into a C signature, so one-  // concrete shim per ModelType (G2/HullWhite), matching how those two models are already separate-  // plain pointer types (QlG2/QlHullWhite), not a shared family. exerciseDates (upstream's-  // std::map<Time, Date>) is marshalled as two parallel arrays, zipped back into the map here ---  // same array-pair convention as every other multi-field marshaller in this codebase.-  // extern "C++": templates can't have C linkage (this file sits inside qlPricingEngine.h's-  // extern "C" block) -- same reasoning as fdmIteratorAt above.-  template <class ModelType>-  QlFdmInnerValueCalculator* fdmAffineModelSwapInnerValue(-                                                          shared_ptr<ModelType>* disModel, shared_ptr<ModelType>* fwdModel, QlFixedVsFloatingSwap* swap,-                                                          unsigned exDatesLen, double* exerciseTimes, int* exerciseDates,-                                                          QlFdmMesher* mesher, unsigned direction, char **e) {-    try {-      std::map<Time, Date> t2d;-      for (unsigned i = 0; i < exDatesLen; ++i) t2d[exerciseTimes[i]] = Date(exerciseDates[i]);-      return ret(new QlFdmInnerValueCalculator(alloc(new FdmAffineModelSwapInnerValue<ModelType>(-                                                                                                 *arg(disModel), *arg(fwdModel), *arg(swap), t2d, *arg(mesher), direction))));-    } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}-  }-}--#ifdef QLTRACK_ALLOCATIONS-// These live in the anonymous namespace above, so -- unlike PolymorphicPathGenerator, which is-// forward-declared in qlaux.h precisely so its label can sit beside the rest -- they cannot be-// named there. Specialize here instead; without it ObjClassName's primary template falls back to-// typeid().name() and the trace carries a mangled name. All three are shared_ptr payloads: alloc()-// only, never freed, so alloc-summary.py --census lists them rather than flagging a leak.-QL_TRACE_NAME(HsFdmLinearOpComposite)-QL_TRACE_NAME(HsFdmStepCondition)-QL_TRACE_NAME(HsFdmInnerValueCalculator)-#endif--struct HestonSLVFDMLogEntries {-  struct Entry {-    double time;-    std::vector<double> spotGrid, varianceGrid, density;-  };-  std::vector<Entry> entries;-};--extern "C" {-QlPricingEngine *qlDiscountingBondEngine(QlYieldTermStructure *ts, int f, char **e) {-  try {-    return ret(new QlPricingEngine(alloc(new DiscountingBondEngine(*arg(ts), qlOptBool(f)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine *>(e, er);}}-QlPricingEngine* qlDiscountingPerpetualFuturesEngine(-    QlYieldTermStructure* domesticDiscountCurve, QlYieldTermStructure* foreignDiscountCurve,-    QlQuote* assetSpot, unsigned fundingTimesLen, double* fundingTimes,-    unsigned fundingRatesLen, double* fundingRates, unsigned interestRateDiffsLen,-    double* interestRateDiffs, int fundingInterpType, double maxT, char **e) {-  try {return ret(new QlPricingEngine(alloc(new DiscountingPerpetualFuturesEngine(-      *arg(domesticDiscountCurve), *arg(foreignDiscountCurve), *arg(assetSpot),-      std::vector<Time>(fundingTimes, fundingTimes + fundingTimesLen),-      std::vector<Rate>(fundingRates, fundingRates + fundingRatesLen),-      std::vector<Spread>(interestRateDiffs, interestRateDiffs + interestRateDiffsLen),-      (DiscountingPerpetualFuturesEngine::InterpolationType)fundingInterpType, maxT))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlRiskyBondEngine(QlDefaultProbabilityTermStructure* defaultTS, double recoveryRate, QlYieldTermStructure* yieldTS, char **e) {-  try {return ret(new QlPricingEngine(alloc(new RiskyBondEngine(Handle<DefaultProbabilityTermStructure>(*arg(defaultTS)), recoveryRate, *arg(yieldTS)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlDiscountingSwapEngine(QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e) {-  try {return ret(new QlPricingEngine(alloc(new DiscountingSwapEngine(*arg(discountCurve), qlOptBool(includeSettlementDateFlows), qlNullableDate(settlementDate), qlNullableDate(npvDate)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlDiscountingFxForwardEngine(QlYieldTermStructure* sourceCurrencyDiscountCurve, QlYieldTermStructure* targetCurrencyDiscountCurve, QlQuote* spotFx, char **e) {-  try {return ret(new QlPricingEngine(alloc(new DiscountingFxForwardEngine(*arg(sourceCurrencyDiscountCurve), *arg(targetCurrencyDiscountCurve), *arg(spotFx)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlDiscountingConstNotionalCrossCurrencySwapEngine(Currency* domesticCcy, QlYieldTermStructure* domesticCcyDiscountCurve, Currency* foreignCcy, QlYieldTermStructure* foreignCcyDiscountCurve, QlQuote* spotFX, int includeSettlementDateFlows, int settlementDate, int npvDate, int spotFXSettleDate, char **e) {-  try {return ret(new QlPricingEngine(alloc(new DiscountingConstNotionalCrossCurrencySwapEngine(*arg(domesticCcy), *arg(domesticCcyDiscountCurve), *arg(foreignCcy), *arg(foreignCcyDiscountCurve), *arg(spotFX), qlOptBool(includeSettlementDateFlows), qlNullableDate(settlementDate), qlNullableDate(npvDate), qlNullableDate(spotFXSettleDate)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlCounterpartyAdjSwapEngine(QlYieldTermStructure* discountCurve, QlQuote* blackVol, QlDefaultProbabilityTermStructure* ctptyDTS, double ctptyRecoveryRate, QlDefaultProbabilityTermStructure* invstDTS, double invstRecoveryRate, char **e) {-  try {return ret(new QlPricingEngine(alloc(new CounterpartyAdjSwapEngine(*arg(discountCurve), *arg(blackVol), Handle<DefaultProbabilityTermStructure>(*arg(ctptyDTS)), ctptyRecoveryRate, qlNullableHandle(arg(invstDTS)), invstRecoveryRate))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticBarrierEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticBarrierEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticTwoAssetBarrierEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, QlQuote* rho, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticTwoAssetBarrierEngine(*arg(process1), *arg(process2), *arg(rho)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticSoftBarrierEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticSoftBarrierEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticSimpleChooserEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticSimpleChooserEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticComplexChooserEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticComplexChooserEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticTwoAssetCorrelationEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, QlQuote* correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticTwoAssetCorrelationEngine(*arg(process1), *arg(process2), *arg(correlation)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticEuropeanMargrabeEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticEuropeanMargrabeEngine(*arg(process1), *arg(process2), correlation))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticAmericanMargrabeEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticAmericanMargrabeEngine(*arg(process1), *arg(process2), correlation))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticWriterExtensibleOptionEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticWriterExtensibleOptionEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticHolderExtensibleOptionEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticHolderExtensibleOptionEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticPartialTimeBarrierOptionEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticPartialTimeBarrierOptionEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticBinaryBarrierEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticBinaryBarrierEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBlackScholesBarrierEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesBarrierEngine(*arg(process), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHestonBarrierEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHestonBarrierEngine(*arg(model), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHestonBarrierEngine1(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHestonBarrierEngine(*arg(model), qlVector(dividends, dividendsLen), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHestonDoubleBarrierEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHestonDoubleBarrierEngine(*arg(model), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBinomialBarrierEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned maxTimeSteps, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlBinomialBarrierEngineAux(tree, *arg(process), timeSteps, maxTimeSteps))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlVannaVolgaBarrierEngine(QlDeltaVolQuote* atmVol, QlDeltaVolQuote* vol25Put, QlDeltaVolQuote* vol25Call, QlQuote* spotFX, QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS, int adaptVanDelta, double bsPriceWithSmile, char **e) {-  try {return ret(new QlPricingEngine(alloc(new VannaVolgaBarrierEngine(Handle<DeltaVolQuote>(*arg(atmVol)), Handle<DeltaVolQuote>(*arg(vol25Put)), Handle<DeltaVolQuote>(*arg(vol25Call)), *arg(spotFX), *arg(domesticTS), *arg(foreignTS), adaptVanDelta, bsPriceWithSmile))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticDoubleBarrierEngine(QlGeneralizedBlackScholesProcess* process, int series, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticDoubleBarrierEngine(*arg(process), series))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlVannaVolgaDoubleBarrierEngine(QlDeltaVolQuote* atmVol, QlDeltaVolQuote* vol25Put, QlDeltaVolQuote* vol25Call, QlQuote* spotFX, QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS, int adaptVanDelta, double bsPriceWithSmile, int series, char **e) {-  try {return ret(new QlPricingEngine(alloc(new VannaVolgaDoubleBarrierEngine<AnalyticDoubleBarrierEngine>(Handle<DeltaVolQuote>(*arg(atmVol)), Handle<DeltaVolQuote>(*arg(vol25Put)), Handle<DeltaVolQuote>(*arg(vol25Call)), *arg(spotFX), *arg(domesticTS), *arg(foreignTS), adaptVanDelta, bsPriceWithSmile, series))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBinomialDoubleBarrierEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlBinomialDoubleBarrierEngineAux(tree, *arg(process), timeSteps))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCDoubleBarrierEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCDoubleBarrierEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticCliquetEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticCliquetEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticCompoundOptionEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticCompoundOptionEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticContinuousFixedLookbackEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousFixedLookbackEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticContinuousFloatingLookbackEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousFloatingLookbackEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticContinuousPartialFloatingLookbackEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousPartialFloatingLookbackEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticContinuousPartialFixedLookbackEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousPartialFixedLookbackEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticContinuousGeometricAveragePriceAsianEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousGeometricAveragePriceAsianEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticContinuousGeometricAveragePriceAsianHestonEngine(QlHestonProcess* process, unsigned summationCutoff, double xiRightLimit, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousGeometricAveragePriceAsianHestonEngine(*arg(process), summationCutoff, xiRightLimit))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticDiscreteGeometricAveragePriceAsianHestonEngine(QlHestonProcess* process, double xiRightLimit, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticDiscreteGeometricAveragePriceAsianHestonEngine(*arg(process), xiRightLimit))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCLookbackFixedEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCLookbackFixedEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCLookbackFloatingEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCLookbackFloatingEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCLookbackPartialFixedEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCLookbackPartialFixedEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCLookbackPartialFloatingEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCLookbackPartialFloatingEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticDigitalAmericanEngine(QlGeneralizedBlackScholesProcess* x0, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticDigitalAmericanEngine(*arg(x0)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticDigitalAmericanKOEngine(QlGeneralizedBlackScholesProcess* x0, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticDigitalAmericanKOEngine(*arg(x0)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticDiscreteGeometricAveragePriceAsianEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticDiscreteGeometricAveragePriceAsianEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticDiscreteGeometricAverageStrikeAsianEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticDiscreteGeometricAverageStrikeAsianEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTurnbullWakemanAsianEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TurnbullWakemanAsianEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBlackScholesAsianEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned aGrid, FdmSchemeDesc *fdScheme, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesAsianEngine(*arg(process), tGrid, xGrid, aGrid, *arg(fdScheme)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlForwardEuropeanEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new ForwardVanillaEngine<AnalyticEuropeanEngine>(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlForwardBaroneAdesiWhaleyEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new ForwardVanillaEngine<BaroneAdesiWhaleyApproximationEngine>(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlForwardBjerksundStenslandEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new ForwardVanillaEngine<BjerksundStenslandApproximationEngine>(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlForwardFdBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new ForwardVanillaEngine<FdBlackScholesVanillaEngine>(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlQuantoEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<VanillaOption, AnalyticEuropeanEngine>(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlQuantoForwardEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<ForwardVanillaOption, ForwardVanillaEngine<AnalyticEuropeanEngine> >(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlQuantoForwardPerformanceEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<ForwardVanillaOption, ForwardPerformanceVanillaEngine<AnalyticEuropeanEngine> >(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlQuantoBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<BarrierOption, AnalyticBarrierEngine>(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlQuantoDoubleBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<DoubleBarrierOption, AnalyticDoubleBarrierEngine>(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticHestonForwardEuropeanEngine(QlHestonProcess* process, unsigned integrationOrder, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonForwardEuropeanEngine(*arg(process), integrationOrder))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticDividendEuropeanEngine(QlGeneralizedBlackScholesProcess* x0, unsigned dividendsLen, QlDividend** dividends, char **e) {-  try {DividendSchedule d = qlVector(dividends, dividendsLen);-    return ret(new QlPricingEngine(alloc(new AnalyticDividendEuropeanEngine(*arg(x0), d))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticEuropeanEngine(QlGeneralizedBlackScholesProcess* x0, QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticEuropeanEngine(*arg(x0), qlNullableHandle(arg(discountCurve))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticPerformanceEngine(QlGeneralizedBlackScholesProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticPerformanceEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBlackCapFloorEngine1(QlYieldTermStructure* discountCurve, QlOptionletVolatilityStructure* vol, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BlackCapFloorEngine(*arg(discountCurve), *arg(vol)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBlackCapFloorEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, double displacement, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BlackCapFloorEngine(*arg(discountCurve), *arg(vol), (*arg(dc)), displacement))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBlackSwaptionEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, double displacement, int model, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BlackSwaptionEngine(*arg(discountCurve), *arg(vol), (*arg(dc)), displacement, (BlackSwaptionEngine::CashAnnuityModel)model))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlHaganIrregularSwaptionEngine(QlSwaptionVolatilityStructure* vol, QlYieldTermStructure* curve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new HaganIrregularSwaptionEngine(*arg(vol), qlNullableHandle(curve)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBlackSwaptionEngine1(QlYieldTermStructure* discountCurve, QlSwaptionVolatilityStructure* vol, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BlackSwaptionEngine(*arg(discountCurve), *arg(vol)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBachelierCapFloorEngine1(QlYieldTermStructure* discountCurve, QlOptionletVolatilityStructure* vol, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BachelierCapFloorEngine(*arg(discountCurve), *arg(vol)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBachelierCapFloorEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BachelierCapFloorEngine(*arg(discountCurve), *arg(vol), (*arg(dc))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBachelierSwaptionEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, int model, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BachelierSwaptionEngine(*arg(discountCurve), *arg(vol), (*arg(dc)), (BachelierSwaptionEngine::CashAnnuityModel)model))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBachelierSwaptionEngine1(QlYieldTermStructure* discountCurve, QlSwaptionVolatilityStructure* vol, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BachelierSwaptionEngine(*arg(discountCurve), *arg(vol)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}--void qlFreePricingEngine(QlPricingEngine *engine) {del(engine);}-void qlFreeBlackCalculator(QlBlackCalculator *o) {del(o);}-void qlFreeBlackScholesCalculator(QlBlackScholesCalculator *o) {del(o);}-QlBlackCalculator* qlBlackScholesCalculatorAsBlackCalculator(QlBlackScholesCalculator *o) {return ret(new QlBlackCalculator(*arg(o)));}--double qlBlackCalculatorAlpha(QlBlackCalculator* o, char **e) {try {return (*arg(o))->alpha();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorBeta(QlBlackCalculator* o, char **e) {try {return (*arg(o))->beta();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlBlackCalculator* qlBlackCalculator1(int optionType, double strike, double forward, double stdDev, double discount, char **e) {-  try {return ret(new QlBlackCalculator(alloc(new BlackCalculator((Option::Type)optionType, strike, forward, stdDev, discount))));-  } catch (std::exception& er) {return handleException<QlBlackCalculator*>(e, er);}}-QlBlackCalculator* qlBlackCalculator(QlStrikedTypePayoff* payoff, double forward, double stdDev, double discount, char **e) {-  try {return ret(new QlBlackCalculator(alloc(new BlackCalculator(*arg(payoff), forward, stdDev, discount))));-  } catch (std::exception& er) {return handleException<QlBlackCalculator*>(e, er);}}-double qlBlackCalculatorDelta(QlBlackCalculator* o, double spot, char **e) {try {return (*arg(o))->delta(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorDeltaForward(QlBlackCalculator* o, char **e) {try {return (*arg(o))->deltaForward();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorDividendRho(QlBlackCalculator* o, double maturity, char **e) {try {return (*arg(o))->dividendRho(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorElasticity(QlBlackCalculator* o, double spot, char **e) {try {return (*arg(o))->elasticity(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorElasticityForward(QlBlackCalculator* o, char **e) {try {return (*arg(o))->elasticityForward();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorGamma(QlBlackCalculator* o, double spot, char **e) {try {return (*arg(o))->gamma(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorGammaForward(QlBlackCalculator* o, char **e) {try {return (*arg(o))->gammaForward();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorItmAssetProbability(QlBlackCalculator* o, char **e) {try {return (*arg(o))->itmAssetProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorItmCashProbability(QlBlackCalculator* o, char **e) {try {return (*arg(o))->itmCashProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorRho(QlBlackCalculator* o, double maturity, char **e) {try {return (*arg(o))->rho(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorStrikeSensitivity(QlBlackCalculator* o, char **e) {try {return (*arg(o))->strikeSensitivity();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorStrikeGamma(QlBlackCalculator* o, char **e) {try {return (*arg(o))->strikeGamma();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorTheta(QlBlackCalculator* o, double spot, double maturity, char **e) {try {return (*arg(o))->theta(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorThetaPerDay(QlBlackCalculator* o, double spot, double maturity, char **e) {try {return (*arg(o))->thetaPerDay(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorValue(QlBlackCalculator* o, char **e) {try {return (*arg(o))->value();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorVanna(QlBlackCalculator* o, double spot, double maturity, char **e) {try {return (*arg(o))->vanna(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorVega(QlBlackCalculator* o, double maturity, char **e) {try {return (*arg(o))->vega(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalculatorVolga(QlBlackCalculator* o, double maturity, char **e) {try {return (*arg(o))->volga(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeBachelierCalculator(QlBachelierCalculator *o) {del(o);}-double qlBachelierCalculatorAlpha(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->alpha();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorBeta(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->beta();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlBachelierCalculator* qlBachelierCalculator1(int optionType, double strike, double forward, double stdDev, double discount, char **e) {-  try {return ret(new QlBachelierCalculator(alloc(new BachelierCalculator((Option::Type)optionType, strike, forward, stdDev, discount))));-  } catch (std::exception& er) {return handleException<QlBachelierCalculator*>(e, er);}}-QlBachelierCalculator* qlBachelierCalculator(QlStrikedTypePayoff* payoff, double forward, double stdDev, double discount, char **e) {-  try {return ret(new QlBachelierCalculator(alloc(new BachelierCalculator(*arg(payoff), forward, stdDev, discount))));-  } catch (std::exception& er) {return handleException<QlBachelierCalculator*>(e, er);}}-double qlBachelierCalculatorDelta(QlBachelierCalculator* o, double spot, char **e) {try {return (*arg(o))->delta(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorDeltaForward(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->deltaForward();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorDividendRho(QlBachelierCalculator* o, double maturity, char **e) {try {return (*arg(o))->dividendRho(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorElasticity(QlBachelierCalculator* o, double spot, char **e) {try {return (*arg(o))->elasticity(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorElasticityForward(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->elasticityForward();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorGamma(QlBachelierCalculator* o, double spot, char **e) {try {return (*arg(o))->gamma(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorGammaForward(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->gammaForward();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorItmAssetProbability(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->itmAssetProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorItmCashProbability(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->itmCashProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorRho(QlBachelierCalculator* o, double maturity, char **e) {try {return (*arg(o))->rho(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorStrikeSensitivity(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->strikeSensitivity();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorStrikeGamma(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->strikeGamma();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorTheta(QlBachelierCalculator* o, double spot, double maturity, char **e) {try {return (*arg(o))->theta(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorThetaPerDay(QlBachelierCalculator* o, double spot, double maturity, char **e) {try {return (*arg(o))->thetaPerDay(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorValue(QlBachelierCalculator* o, char **e) {try {return (*arg(o))->value();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorVanna(QlBachelierCalculator* o, double maturity, char **e) {try {return (*arg(o))->vanna(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorVega(QlBachelierCalculator* o, double maturity, char **e) {try {return (*arg(o))->vega(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBachelierCalculatorVolga(QlBachelierCalculator* o, double maturity, char **e) {try {return (*arg(o))->volga(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}--QlBlackScholesCalculator* qlBlackScholesCalculator1(int optionType, double strike, double spot, double growth, double stdDev, double discount, char **e) {-  try {return ret(new QlBlackScholesCalculator(alloc(new BlackScholesCalculator((Option::Type)optionType, strike, spot, growth, stdDev, discount))));-  } catch (std::exception& er) {return handleException<QlBlackScholesCalculator*>(e, er);}}-QlBlackScholesCalculator* qlBlackScholesCalculator(QlStrikedTypePayoff* payoff, double spot, double growth, double stdDev, double discount, char **e) {-  try {return ret(new QlBlackScholesCalculator(alloc(new BlackScholesCalculator(*arg(payoff), spot, growth, stdDev, discount))));-  } catch (std::exception& er) {return handleException<QlBlackScholesCalculator*>(e, er);}}-double qlBlackScholesCalculatorDelta(QlBlackScholesCalculator* o, char **e) {try {return (*arg(o))->delta();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackScholesCalculatorElasticity(QlBlackScholesCalculator* o, char **e) {try {return (*arg(o))->elasticity();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackScholesCalculatorGamma(QlBlackScholesCalculator* o, char **e) {try {return (*arg(o))->gamma();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackScholesCalculatorTheta(QlBlackScholesCalculator* o, double maturity, char **e) {try {return (*arg(o))->theta(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackScholesCalculatorThetaPerDay(QlBlackScholesCalculator* o, double maturity, char **e) {try {return (*arg(o))->thetaPerDay(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeBlackDeltaCalculator(BlackDeltaCalculator *o) {del(o);}-BlackDeltaCalculator* qlBlackDeltaCalculator(int optionType, int deltaType, double spot, double dDiscount, double fDiscount, double stdDev, char **e) {-  try {return alloc(new BlackDeltaCalculator((Option::Type)optionType, (DeltaVolQuote::DeltaType)deltaType, spot, dDiscount, fDiscount, stdDev));-  } catch (std::exception& er) {return handleException<BlackDeltaCalculator*>(e, er);}}-double qlBlackDeltaCalculatorDeltaFromStrike(BlackDeltaCalculator* o, double strike, char **e) {try {return arg(o)->deltaFromStrike(strike);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackDeltaCalculatorStrikeFromDelta(BlackDeltaCalculator* o, double delta, char **e) {try {return arg(o)->strikeFromDelta(delta);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackDeltaCalculatorAtmStrike(BlackDeltaCalculator* o, int atmType, char **e) {try {return arg(o)->atmStrike((DeltaVolQuote::AtmType)atmType);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormula(int optionType, double strike, double forward, double stdDev, double discount, double displacement, char **e) {-  try {return QuantLib::blackFormula((Option::Type)optionType, strike, forward, stdDev, discount, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaCashItmProbability(int optionType, double strike, double forward, double stdDev, double displacement, char **e) {-  try {return QuantLib::blackFormulaCashItmProbability((Option::Type)optionType, strike, forward, stdDev, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaImpliedStdDev(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, double guess, double accuracy, unsigned maxIterations, char **e) {-  try {return QuantLib::blackFormulaImpliedStdDev((Option::Type)optionType, strike, forward, blackPrice, discount, displacement, guess, accuracy, maxIterations);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaImpliedStdDevApproximation(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, char **e) {-  try {return QuantLib::blackFormulaImpliedStdDevApproximation((Option::Type)optionType, strike, forward, blackPrice, discount, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaStdDevDerivative(double strike, double forward, double stdDev, double discount, double displacement, char **e) {-  try {return QuantLib::blackFormulaStdDevDerivative(strike, forward, stdDev, discount, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaVolDerivative(double strike, double forward, double stdDev, double expiry, double discount, double displacement, char **e) {-  try {return QuantLib::blackFormulaVolDerivative(strike, forward, stdDev, expiry, discount, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackScholesTheta(QlGeneralizedBlackScholesProcess* x0, double value, double delta, double gamma, char **e) {-  try {return QuantLib::blackScholesTheta(*arg(x0), value, delta, gamma);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBachelierBlackFormula(int optionType, double strike, double forward, double stdDev, double discount, char **e) {-  try {return QuantLib::bachelierBlackFormula((Option::Type)optionType, strike, forward, stdDev, discount);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaForwardDerivative(int optionType, double strike, double forward, double stdDev, double discount, double displacement, char **e) {-  try {return QuantLib::blackFormulaForwardDerivative((Option::Type)optionType, strike, forward, stdDev, discount, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaImpliedStdDevChambers(int optionType, double strike, double forward, double blackPrice, double blackAtmPrice, double discount, double displacement, char **e) {-  try {return QuantLib::blackFormulaImpliedStdDevChambers((Option::Type)optionType, strike, forward, blackPrice, blackAtmPrice, discount, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaImpliedStdDevApproximationRS(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, char **e) {-  try {return QuantLib::blackFormulaImpliedStdDevApproximationRS((Option::Type)optionType, strike, forward, blackPrice, discount, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaImpliedStdDevLiRS(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, double guess, double omega, double accuracy, unsigned maxIterations, char **e) {-  try {return QuantLib::blackFormulaImpliedStdDevLiRS((Option::Type)optionType, strike, forward, blackPrice, discount, displacement, guess, omega, accuracy, maxIterations);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaAssetItmProbability(int optionType, double strike, double forward, double stdDev, double displacement, char **e) {-  try {return QuantLib::blackFormulaAssetItmProbability((Option::Type)optionType, strike, forward, stdDev, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBlackFormulaStdDevSecondDerivative(double strike, double forward, double stdDev, double discount, double displacement, char **e) {-  try {return QuantLib::blackFormulaStdDevSecondDerivative(strike, forward, stdDev, discount, displacement);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBachelierBlackFormulaForwardDerivative(int optionType, double strike, double forward, double stdDev, double discount, char **e) {-  try {return QuantLib::bachelierBlackFormulaForwardDerivative((Option::Type)optionType, strike, forward, stdDev, discount);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBachelierBlackFormulaImpliedVol(int optionType, double strike, double forward, double tte, double bachelierPrice, double discount, char **e) {-  try {return QuantLib::bachelierBlackFormulaImpliedVol((Option::Type)optionType, strike, forward, tte, bachelierPrice, discount);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBachelierBlackFormulaImpliedVolChoi(int optionType, double strike, double forward, double tte, double bachelierPrice, double discount, char **e) {-  try {return QuantLib::bachelierBlackFormulaImpliedVolChoi((Option::Type)optionType, strike, forward, tte, bachelierPrice, discount);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBachelierBlackFormulaStdDevDerivative(double strike, double forward, double stdDev, double discount, char **e) {-  try {return QuantLib::bachelierBlackFormulaStdDevDerivative(strike, forward, stdDev, discount);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibBachelierBlackFormulaAssetItmProbability(int optionType, double strike, double forward, double stdDev, char **e) {-  try {return QuantLib::bachelierBlackFormulaAssetItmProbability((Option::Type)optionType, strike, forward, stdDev);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlQuantLibDefaultThetaPerDay(double theta, char **e) {try {return QuantLib::defaultThetaPerDay(theta);} catch (std::exception& er) {return handleException<double>(e, er);}}--QlPricingEngine* qlAnalyticBSMHullWhiteEngine(double equityShortRateCorrelation, QlGeneralizedBlackScholesProcess* x1, QlHullWhite* x2, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticBSMHullWhiteEngine(equityShortRateCorrelation, *arg(x1), *arg(x2)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticCapFloorEngine(QlAffineModel* model, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticCapFloorEngine(*arg(model), qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticGJRGARCHEngine(QlGJRGARCHModel* model, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticGJRGARCHEngine(*arg(model)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticHestonEngine(QlHestonModel* model, double relTolerance, unsigned maxEvaluations, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonEngine(*arg(model), relTolerance, maxEvaluations))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticHestonHullWhiteEngine(QlHestonModel* hestonModel, QlHullWhite* hullWhiteModel, unsigned integrationOrder, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonHullWhiteEngine(*arg(hestonModel), *arg(hullWhiteModel), integrationOrder))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBatesEngine(QlBatesModel* model, unsigned integrationOrder, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BatesEngine(*arg(model), integrationOrder))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFFTVanillaEngine(QlGeneralizedBlackScholesProcess* process, double logStrikeSpacing, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FFTVanillaEngine(*arg(process), logStrikeSpacing))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlG2SwaptionEngine(QlG2* model, double range, unsigned intervals, char **e) {-  try {return ret(new QlPricingEngine(alloc(new G2SwaptionEngine(*arg(model), range, intervals))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlJumpDiffusionEngine(QlMerton76Process* x0, double relativeAccuracy_, unsigned maxIterations, char **e) {-  try {return ret(new QlPricingEngine(alloc(new JumpDiffusionEngine(*arg(x0), relativeAccuracy_, maxIterations))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeCapFloorEngine(QlShortRateModel* model, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeCapFloorEngine(*arg(model), timeSteps, qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeSwaptionEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeSwaptionEngine(*arg(x0), timeSteps, qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeVanillaSwapEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeVanillaSwapEngine(*arg(x0), timeSteps, qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlVarianceGammaEngine(QlVarianceGammaProcess* x0, double absoluteError, char **e) {-  try {return ret(new QlPricingEngine(alloc(new VarianceGammaEngine(*arg(x0), absoluteError))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticHestonEngine1(QlHestonModel* model, unsigned integrationOrder, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonEngine(*arg(model), integrationOrder))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-int qlAnalyticHestonEngineOptimalControlVariate(double t, double v0, double kappa, double theta, double sigma, double rho) {-  return AnalyticHestonEngine::optimalControlVariate(t, v0, kappa, theta, sigma, rho);-}-QlPricingEngine* qlAnalyticHestonHullWhiteEngine1(QlHestonModel* model, QlHullWhite* hullWhiteModel, double relTolerance, unsigned maxEvaluations, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonHullWhiteEngine(*arg(model), *arg(hullWhiteModel), relTolerance, maxEvaluations))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBatesEngine1(QlBatesModel* model, double relTolerance, unsigned maxEvaluations, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BatesEngine(*arg(model), relTolerance, maxEvaluations))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBaroneAdesiWhaleyApproximationEngine(QlGeneralizedBlackScholesProcess* x0, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BaroneAdesiWhaleyApproximationEngine(*arg(x0)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBatesDetJumpEngine1(QlBatesDetJumpModel* model, double relTolerance, unsigned maxEvaluations, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BatesDetJumpEngine(*arg(model), relTolerance, maxEvaluations))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBatesDetJumpEngine(QlBatesDetJumpModel* model, unsigned integrationOrder, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BatesDetJumpEngine(*arg(model), integrationOrder))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBatesDoubleExpDetJumpEngine1(QlBatesDoubleExpDetJumpModel* model, double relTolerance, unsigned maxEvaluations, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BatesDoubleExpDetJumpEngine(*arg(model), relTolerance, maxEvaluations))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBatesDoubleExpDetJumpEngine(QlBatesDoubleExpDetJumpModel* model, unsigned integrationOrder, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BatesDoubleExpDetJumpEngine(*arg(model), integrationOrder))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBatesDoubleExpEngine1(QlBatesDoubleExpModel* model, double relTolerance, unsigned maxEvaluations, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BatesDoubleExpEngine(*arg(model), relTolerance, maxEvaluations))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBatesDoubleExpEngine(QlBatesDoubleExpModel* model, unsigned integrationOrder, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BatesDoubleExpEngine(*arg(model), integrationOrder))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBjerksundStenslandApproximationEngine(QlGeneralizedBlackScholesProcess* x0, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BjerksundStenslandApproximationEngine(*arg(x0)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlQdPlusAmericanEngine(QlGeneralizedBlackScholesProcess* process, unsigned interpolationPoints, int solverType, double eps, unsigned maxIter, char **e) {-  try {return ret(new QlPricingEngine(alloc(new QdPlusAmericanEngine(*arg(process), interpolationPoints, (QdPlusAmericanEngine::SolverType)solverType, eps, Size(maxIter)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlQdFpAmericanEngine(QlGeneralizedBlackScholesProcess* process, int scheme, int fpEquation, char **e) {-  try {-    ext::shared_ptr<QdFpIterationScheme> iterationScheme;-    switch (scheme) {-      case hasquant::FastScheme: iterationScheme = QdFpAmericanEngine::fastScheme(); break;-      case hasquant::HighPrecisionScheme: iterationScheme = QdFpAmericanEngine::highPrecisionScheme(); break;-      default: iterationScheme = QdFpAmericanEngine::accurateScheme(); break;-    }-    return ret(new QlPricingEngine(alloc(new QdFpAmericanEngine(*arg(process), iterationScheme, (QdFpAmericanEngine::FixedPointEquation)fpEquation))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlContinuousArithmeticAsianVecerEngine(QlGeneralizedBlackScholesProcess* process, QlQuote* currentAverage, int startDate, unsigned timeSteps, unsigned assetSteps, double zMin, double zMax, char **e) {-  try {return ret(new QlPricingEngine(alloc(new ContinuousArithmeticAsianVecerEngine(*arg(process), qlNullableHandle(arg(currentAverage)), Date(startDate), timeSteps, assetSteps, zMin, zMax))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlIntegralCdsEngine(int l, int u, QlDefaultProbabilityTermStructure* x1, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, char **e) {-  try {return ret(new QlPricingEngine(alloc(new IntegralCdsEngine(Period(l, (TimeUnit)u), Handle<DefaultProbabilityTermStructure>(*arg(x1)), recoveryRate, *arg(discountCurve), qlOptBool(includeSettlementDateFlows)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlIntegralEngine(QlGeneralizedBlackScholesProcess* x0, char **e) {-  try {return ret(new QlPricingEngine(alloc(new IntegralEngine(*arg(x0)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlJamshidianSwaptionEngine(QlOneFactorAffineModel* model, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new JamshidianSwaptionEngine(*arg(model), qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlJuQuadraticApproximationEngine(QlGeneralizedBlackScholesProcess* x0, char **e) {-  try {return ret(new QlPricingEngine(alloc(new JuQuadraticApproximationEngine(*arg(x0)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlKirkEngine(QlBlackProcess* process1, QlBlackProcess* process2, double correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new KirkEngine(*arg(process1), *arg(process2), correlation))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlIsdaCdsEngine(QlDefaultProbabilityTermStructure* x0, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int numericalFix, int accrualBias, int forwardsInCouponPeriod, char **e) {-  try {return ret(new QlPricingEngine(alloc(new IsdaCdsEngine(Handle<DefaultProbabilityTermStructure>(*arg(x0)), recoveryRate, *arg(discountCurve), qlOptBool(includeSettlementDateFlows),-      (IsdaCdsEngine::NumericalFix)numericalFix, (IsdaCdsEngine::AccrualBias)accrualBias, (IsdaCdsEngine::ForwardsInCouponPeriod)forwardsInCouponPeriod))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMidPointCdsEngine(QlDefaultProbabilityTermStructure* x0, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, char **e) {-  try {return ret(new QlPricingEngine(alloc(new MidPointCdsEngine(Handle<DefaultProbabilityTermStructure>(*arg(x0)), recoveryRate, *arg(discountCurve), qlOptBool(includeSettlementDateFlows)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMidPointCDOEngine(QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new MidPointCDOEngine(*arg(discountCurve)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlIntegralCDOEngine(QlYieldTermStructure* discountCurve, int l, int u, char **e) {-  try {return ret(new QlPricingEngine(alloc(new IntegralCDOEngine(*arg(discountCurve), Period(l, (TimeUnit)u)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlIntegralNtdEngine(int l, int u, QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new IntegralNtdEngine(Period(l, (TimeUnit)u), *arg(discountCurve)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlReplicatingVarianceSwapEngine(QlGeneralizedBlackScholesProcess* process, double dk, unsigned callStrikesLen, double* callStrikes, unsigned putStrikesLen, double* putStrikes, char **e) {-  try {return ret(new QlPricingEngine(alloc(new ReplicatingVarianceSwapEngine(*arg(process), dk, std::vector<double>(callStrikes, callStrikes+callStrikesLen), std::vector<double>(putStrikes, putStrikes+putStrikesLen)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlStulzEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new StulzEngine(*arg(process1), *arg(process2), correlation))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBjerksundStenslandSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BjerksundStenslandSpreadEngine(*arg(process1), *arg(process2), correlation))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlOperatorSplittingSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, int order, char **e) {-  try {return ret(new QlPricingEngine(alloc(new OperatorSplittingSpreadEngine(*arg(process1), *arg(process2), correlation, (OperatorSplittingSpreadEngine::Order)order))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlPearsonSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, double integrationTolerance, unsigned maxIntegrationIterations, double nStd, char **e) {-  try {return ret(new QlPricingEngine(alloc(new PearsonSpreadEngine(*arg(process1), *arg(process2), correlation, integrationTolerance, maxIntegrationIterations, nStd))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlGaussianCopulaSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, unsigned nPoints, char **e) {-  try {return ret(new QlPricingEngine(alloc(new GaussianCopulaSpreadEngine(*arg(process1), *arg(process2), correlation, nPoints))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFd2dBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* p1, QlGeneralizedBlackScholesProcess* p2, double correlation, unsigned xGrid, unsigned yGrid, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, int localVol, double illegalLocalVolOverwrite, char **e) {-  try {return ret(new QlPricingEngine(alloc(new Fd2dBlackScholesVanillaEngine(*arg(p1), *arg(p2), correlation, xGrid, yGrid, tGrid, dampingSteps, *arg(schemeDesc), localVol, illegalLocalVolOverwrite))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlChoiBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, double lambda, unsigned maxNrIntegrationSteps, int calcfwdDelta, int controlVariate, char **e) {-  try {return ret(new QlPricingEngine(alloc(new ChoiBasketEngine(qlVector(processes, processesLen), qlMatrix(rho, rhoRows, rhoCols), lambda, maxNrIntegrationSteps, calcfwdDelta, controlVariate))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlDengLiZhouBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, char **e) {-  try {return ret(new QlPricingEngine(alloc(new DengLiZhouBasketEngine(qlVector(processes, processesLen), qlMatrix(rho, rhoRows, rhoCols)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdndimBlackScholesVanillaEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, unsigned xGridsLen, unsigned* xGrids, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdndimBlackScholesVanillaEngine(qlVector(processes, processesLen), qlMatrix(rho, rhoRows, rhoCols), std::vector<Size>(xGrids, xGrids+xGridsLen), tGrid, dampingSteps, *arg(schemeDesc)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdndimBlackScholesVanillaEngine1(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, unsigned xGrid, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdndimBlackScholesVanillaEngine(qlVector(processes, processesLen), qlMatrix(rho, rhoRows, rhoCols), xGrid, tGrid, dampingSteps, *arg(schemeDesc)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlSingleFactorBsmBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, double xTol, char **e) {-  try {return ret(new QlPricingEngine(alloc(new SingleFactorBsmBasketEngine(qlVector(processes, processesLen), xTol))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlLfmSwaptionEngine(QlLiborForwardModel* model, QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new LfmSwaptionEngine(*arg(model), *arg(discountCurve)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeCapFloorEngine1(QlShortRateModel* model, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeCapFloorEngine(*arg(model), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeSwaptionEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeSwaptionEngine(*arg(x0), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeVanillaSwapEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeVanillaSwapEngine(*arg(x0), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdG2SwaptionEngine(QlG2* model, unsigned tGrid, unsigned xGrid, unsigned yGrid, unsigned dampingSteps, double invEps, FdmSchemeDesc *schemeDesc, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdG2SwaptionEngine(*arg(model), tGrid, xGrid, yGrid, dampingSteps, invEps, *arg(schemeDesc)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHullWhiteSwaptionEngine(QlHullWhite* model, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, double invEps, FdmSchemeDesc *schemeDesc, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHullWhiteSwaptionEngine(*arg(model), tGrid, xGrid, dampingSteps, invEps, *arg(schemeDesc)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCVarianceSwapEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCVarianceSwapEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCHestonHullWhiteEngine1(int rngtrait, int stattrait, QlHybridHestonHullWhiteProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCHestonHullWhiteEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, antitheticVariate, controlVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCAmericanEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned polynomOrder, int polynomType, unsigned nCalibrationSamples, int antitheticVariateCalibration, unsigned seedCalibration, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCAmericanEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, antitheticVariate, controlVariate, requiredSamples, requiredTolerance, maxSamples, seed, polynomOrder, (LsmBasisSystem::PolynomialType)polynomType, nCalibrationSamples, qlOptBool(antitheticVariateCalibration), seedCalibration))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCBarrierEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, int isBiased, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCBarrierEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, isBiased, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCDigitalEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCDigitalEngine1Aux(rngtrait, stattrait, *arg(x0), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCForwardEuropeanBSEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCForwardEuropeanBSEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCForwardEuropeanHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, int controlVariate, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCForwardEuropeanHestonEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed, controlVariate))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCDiscreteArithmeticAPEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteArithmeticAPEngine1Aux(rngtrait, stattrait, *arg(process), brownianBridge, antitheticVariate, controlVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCDiscreteArithmeticASEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteArithmeticASEngine1Aux(rngtrait, stattrait, *arg(process), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCDiscreteArithmeticAPHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned timeSteps, unsigned timeStepsPerYear, int controlVariate, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteArithmeticAPHestonEngine1Aux(rngtrait, stattrait, *arg(process), antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed, timeSteps, timeStepsPerYear, controlVariate))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCDiscreteGeometricAPHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned timeSteps, unsigned timeStepsPerYear, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteGeometricAPHestonEngine1Aux(rngtrait, stattrait, *arg(process), antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed, timeSteps, timeStepsPerYear))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCDiscreteGeometricAPEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteGeometricAPEngine1Aux(rngtrait, stattrait, *arg(process), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCEuropeanEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCEuropeanEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCEuropeanGJRGARCHEngine1(int rngtrait, int stattrait, QlGJRGARCHProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCEuropeanGJRGARCHEngine1Aux(rngtrait, stattrait, *arg(x0), timeSteps, timeStepsPerYear, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCEuropeanHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCEuropeanHestonEngine1Aux(rngtrait, stattrait, *arg(x0), timeSteps, timeStepsPerYear, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlIntegralHestonVarianceOptionEngine(QlHestonProcess* process, char **e) {-  try {return ret(new QlPricingEngine(alloc(new IntegralHestonVarianceOptionEngine(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCHullWhiteCapFloorEngine1(int rngtrait, int stattrait, QlHullWhite* model, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCHullWhiteCapFloorEngine1Aux(rngtrait, stattrait, *arg(model), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCHimalayaEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCHimalayaEngine1Aux(rngtrait, stattrait, *arg(processes), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCPagodaEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCPagodaEngine1Aux(rngtrait, stattrait, *arg(processes), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCEverestEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCEverestEngine1Aux(rngtrait, stattrait, *arg(processes), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCEuropeanBasketEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCEuropeanBasketEngine1Aux(rngtrait, stattrait, *arg(processes), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCAmericanBasketEngine1(int rngtrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned nCalibrationSamples, unsigned polynomialOrder, int polynomialType, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCAmericanBasketEngine1Aux(rngtrait, *arg(processes), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed, nCalibrationSamples, polynomialOrder, (LsmBasisSystem::PolynomialType)polynomialType))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlMCPerformanceEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlMCPerformanceEngine1Aux(rngtrait, stattrait, *arg(process), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBinomialVanillaEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlBinomialVanillaEngineAux(tree, *arg(process), timeSteps))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, char **e) {-  try {return ret(new QlPricingEngine(alloc(qlFdBlackScholesVanillaEngineAux(*arg(process), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite, cashDividendModel))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBlackScholesVanillaEngine1(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesVanillaEngine(*arg(process), qlVector(dividends, dividendsLen), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite, (FdBlackScholesVanillaEngine::CashDividendModel)cashDividendModel))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBlackScholesVanillaEngine2(QlGeneralizedBlackScholesProcess* process, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesVanillaEngine(*arg(process), quantoHelper ? *arg(quantoHelper) : shared_ptr<FdmQuantoHelper>(), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite, (FdBlackScholesVanillaEngine::CashDividendModel)cashDividendModel))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBlackScholesVanillaEngine3(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesVanillaEngine(*arg(process), qlVector(dividends, dividendsLen), quantoHelper ? *arg(quantoHelper) : shared_ptr<FdmQuantoHelper>(), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite, (FdBlackScholesVanillaEngine::CashDividendModel)cashDividendModel))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHestonVanillaEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHestonVanillaEngine(*arg(model), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHestonVanillaEngine1(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHestonVanillaEngine(*arg(model), qlVector(dividends, dividendsLen), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlCOSHestonEngine(QlHestonModel* model, double L, unsigned N, char **e) {-  try {return ret(new QlPricingEngine(alloc(new COSHestonEngine(*arg(model), L, N))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlAnalyticPDFHestonEngine(QlHestonModel* model, double eps, unsigned integrationOrder, char **e) {-  try {return ret(new QlPricingEngine(alloc(new AnalyticPDFHestonEngine(*arg(model), eps, integrationOrder))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBatesVanillaEngine(QlBatesModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdBatesVanillaEngine(*arg(model), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBatesVanillaEngine1(QlBatesModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdBatesVanillaEngine(*arg(model), qlVector(dividends, dividendsLen), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBlackScholesShoutEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesShoutEngine(*arg(process), tGrid, xGrid, dampingSteps, *arg(fdScheme)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdBlackScholesShoutEngine1(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesShoutEngine(*arg(process), qlVector(dividends, dividendsLen), tGrid, xGrid, dampingSteps, *arg(fdScheme)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHestonVanillaEngine2(QlHestonModel* model, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHestonVanillaEngine(*arg(model), quantoHelper ? *arg(quantoHelper) : shared_ptr<FdmQuantoHelper>(), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHestonVanillaEngine3(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHestonVanillaEngine(*arg(model), qlVector(dividends, dividendsLen), quantoHelper ? *arg(quantoHelper) : shared_ptr<FdmQuantoHelper>(), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHestonHullWhiteVanillaEngine(QlHestonModel* model, QlHullWhiteProcess* hwProcess, double corrEquityShortRate, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned rGrid, unsigned dampingSteps, int controlVariate, FdmSchemeDesc *fdScheme, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHestonHullWhiteVanillaEngine(*arg(model), *arg(hwProcess), corrEquityShortRate, tGrid, xGrid, vGrid, rGrid, dampingSteps, controlVariate, *arg(fdScheme)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlFdHestonHullWhiteVanillaEngine1(QlHestonModel* model, QlHullWhiteProcess* hwProcess, unsigned dividendsLen, QlDividend** dividends, double corrEquityShortRate, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned rGrid, unsigned dampingSteps, int controlVariate, FdmSchemeDesc *fdScheme, char **e) {-  try {return ret(new QlPricingEngine(alloc(new FdHestonHullWhiteVanillaEngine(*arg(model), *arg(hwProcess), qlVector(dividends, dividendsLen), corrEquityShortRate, tGrid, xGrid, vGrid, rGrid, dampingSteps, controlVariate, *arg(fdScheme)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBinomialConvertibleEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, QlQuote* creditSpread, unsigned dividendsLen, QlDividend** dividends, char **e) {-  try {const Handle<Quote>& cs = *arg(creditSpread); DividendSchedule d = qlVector(dividends, dividendsLen);-    return ret(new QlPricingEngine(alloc(qlBinomialConvertibleEngineAux(tree, *arg(process), timeSteps, cs, d))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBlackCallableFixedRateBondEngine1(QlCallableBondVolatilityStructure* yieldVolStructure, QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BlackCallableFixedRateBondEngine(Handle<CallableBondVolatilityStructure>(*arg(yieldVolStructure)), *arg(discountCurve)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBlackCallableFixedRateBondEngine(QlQuote* fwdYieldVol, QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BlackCallableFixedRateBondEngine(*arg(fwdYieldVol), *arg(discountCurve)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBlackCallableZeroCouponBondEngine1(QlCallableBondVolatilityStructure* yieldVolStructure, QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BlackCallableZeroCouponBondEngine(Handle<CallableBondVolatilityStructure>(*arg(yieldVolStructure)), *arg(discountCurve)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlBlackCallableZeroCouponBondEngine(QlQuote* fwdYieldVol, QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new BlackCallableZeroCouponBondEngine(*arg(fwdYieldVol), *arg(discountCurve)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeCallableFixedRateBondEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeCallableFixedRateBondEngine(*arg(x0), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeCallableFixedRateBondEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeCallableFixedRateBondEngine(*arg(x0), timeSteps, qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeCallableZeroCouponBondEngine1(QlShortRateModel* model, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeCallableZeroCouponBondEngine(*arg(model), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlTreeCallableZeroCouponBondEngine(QlShortRateModel* model, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlPricingEngine(alloc(new TreeCallableZeroCouponBondEngine(*arg(model), timeSteps, qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}--FdmSchemeDesc* qlFdmSchemeDesc(int type, double theta, double mu, char **e) {try {return alloc(new FdmSchemeDesc((FdmSchemeDesc::FdmSchemeType)type, theta, mu));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}-FdmSchemeDesc* qlFdmSchemeDescCraigSneyd(char **e) {try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::CraigSneyd()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}-FdmSchemeDesc* qlFdmSchemeDescDouglas(char **e) {try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::Douglas()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}-FdmSchemeDesc* qlFdmSchemeDescExplicitEuler(char **e) {try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::ExplicitEuler()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}-FdmSchemeDesc* qlFdmSchemeDescHundsdorfer(char **e) {try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::Hundsdorfer()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}-FdmSchemeDesc* qlFdmSchemeDescImplicitEuler(char **e) {try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::ImplicitEuler()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}-FdmSchemeDesc* qlFdmSchemeDescModifiedCraigSneyd(char **e) {try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::ModifiedCraigSneyd()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}-FdmSchemeDesc* qlFdmSchemeDescModifiedHundsdorfer(char **e) {try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::ModifiedHundsdorfer()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}-FdmSchemeDesc* qlFdmSchemeDescMethodOfLines(double eps, double relInitStepSize, char **e) {try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::MethodOfLines(eps, relInitStepSize)));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}-void qlFreeFdmSchemeDesc(FdmSchemeDesc *o) {del(o);}--// Drives FdmBackwardSolver::rollback with a Haskell-defined operator/step condition instead of a-// bound mesher+FdmInnerValueCalculator -- see QuantLib.Method.fdmRollback's haddock and the-// HsFdmLinearOpComposite/HsFdmStepCondition comments above. bcSet is always the empty-// FdmBoundaryConditionSet(); boundary conditions are not bound. A null stepCondFn means no step-// condition at all (matches FdmBackwardSolver's own null-condition default, an empty-// FdmStepConditionComposite({}, {})).-void qlFdmRollback(unsigned opSize, FdmApplyFun applyFn, FdmApplyDirectionFun applyDirFn, FdmSolveSplittingFun solveSplitFn,-                    FdmStepConditionFun stepCondFn, unsigned stoppingTimesLen, double* stoppingTimes,-                    FdmSchemeDesc* schemeDesc,-                    unsigned gridLen, double* grid,-                    double from, double to, unsigned steps, unsigned dampingSteps,-                    unsigned* outLen, double** outValues, char **e) {-  try {fillVectorOut([&] {-    ext::shared_ptr<FdmLinearOpComposite> map(alloc(new HsFdmLinearOpComposite(opSize, applyFn, applyDirFn, solveSplitFn)));-    FdmStepConditionComposite::Conditions conditions;-    std::list<std::vector<Time> > stoppingTimesList;-    if (stepCondFn) {-      conditions.push_back(ext::shared_ptr<StepCondition<Array> >(alloc(new HsFdmStepCondition(stepCondFn))));-      stoppingTimesList.push_back(std::vector<Time>(stoppingTimes, stoppingTimes + stoppingTimesLen));-    }-    ext::shared_ptr<FdmStepConditionComposite> condition(alloc(new FdmStepConditionComposite(stoppingTimesList, conditions)));-    FdmBackwardSolver solver(map, FdmBoundaryConditionSet(), condition, *arg(schemeDesc));-    Array a(grid, grid + gridLen);-    solver.rollback(a, from, to, steps, dampingSteps);-    return a;-  }, outLen, outValues);-  } catch (std::exception& er) {*e = tracedup(er.what());}}--void qlFreeFdm1dMesher(QlFdm1dMesher *o) {del(o);}-void qlFreeFdmMesher(QlFdmMesher *o) {del(o);}--QlFdm1dMesher* qlPredefined1dMesher(unsigned len, double* points, char **e) {-  try {return ret(new QlFdm1dMesher(alloc(new Predefined1dMesher(std::vector<Real>(points, points + len)))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlUniform1dMesher(double start, double end, unsigned size, char **e) {-  try {return ret(new QlFdm1dMesher(alloc(new Uniform1dMesher(start, end, size))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlConcentrating1dMesher(double start, double end, unsigned size, double cPointLoc, double cPointDensity, int requireCPoint, char **e) {-  try {return ret(new QlFdm1dMesher(alloc(new Concentrating1dMesher(start, end, size, std::pair<Real, Real>(cPointLoc, cPointDensity), requireCPoint))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlConcentrating1dMesherMulti(double start, double end, unsigned size, unsigned cPointsLen, double* cPointLoc, double* cPointDensity, int* cPointRequire, double tol, char **e) {-  try {std::vector<std::tuple<Real, Real, bool> > cPoints;-    cPoints.reserve(cPointsLen);-    for (unsigned i = 0; i < cPointsLen; ++i)-      cPoints.push_back(std::make_tuple(cPointLoc[i], cPointDensity[i], cPointRequire[i] != 0));-    return ret(new QlFdm1dMesher(alloc(new Concentrating1dMesher(start, end, size, cPoints, tol))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlGluedMesher(QlFdm1dMesher* left, QlFdm1dMesher* right, char **e) {-  try {return ret(new QlFdm1dMesher(alloc(new Glued1dMesher(**arg(left), **arg(right)))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlFdmBlackScholesMesher(unsigned size, QlGeneralizedBlackScholesProcess* process, double maturity, double strike,-    double xMinConstraint, double xMaxConstraint, double eps, double scaleFactor, double cPointLoc, double cPointDensity,-    unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* fdmQuantoHelper, double spotAdjustment, char **e) {-  try {DividendSchedule d = qlVector(dividends, dividendsLen);-    return ret(new QlFdm1dMesher(alloc(new FdmBlackScholesMesher(size, *arg(process), maturity, strike,-      xMinConstraint, xMaxConstraint, eps, scaleFactor, std::pair<Real, Real>(cPointLoc, cPointDensity), d,-      fdmQuantoHelper ? *arg(fdmQuantoHelper) : shared_ptr<FdmQuantoHelper>(), spotAdjustment))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlFdmCev1dMesher(unsigned size, double f0, double alpha, double beta, double maturity, double eps, double scaleFactor, double cPointLoc, double cPointDensity, char **e) {-  try {return ret(new QlFdm1dMesher(alloc(new FdmCEV1dMesher(size, f0, alpha, beta, maturity, eps, scaleFactor, std::pair<Real, Real>(cPointLoc, cPointDensity)))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlExponentialJump1dMesher(unsigned steps, double beta, double jumpIntensity, double eta, double eps, char **e) {-  try {return ret(new QlFdm1dMesher(alloc(new ExponentialJump1dMesher(steps, beta, jumpIntensity, eta, eps))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlFdmSimpleProcess1dMesher(unsigned size, QlStochasticProcess1D* process, double maturity, unsigned tAvgSteps, double epsilon, double mandatoryPoint, char **e) {-  try {return ret(new QlFdm1dMesher(alloc(new FdmSimpleProcess1dMesher(size, *arg(process), maturity, tAvgSteps, epsilon, mandatoryPoint))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlFdmHestonVarianceMesher(unsigned size, QlHestonProcess* process, double maturity, unsigned tAvgSteps, double epsilon, double mixingFactor, char **e) {-  try {return ret(new QlFdm1dMesher(alloc(new FdmHestonVarianceMesher(size, *arg(process), maturity, tAvgSteps, epsilon, mixingFactor))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdm1dMesher* qlFdmHestonLocalVolatilityVarianceMesher(unsigned size, QlHestonProcess* process, QlLocalVolTermStructure* leverageFct, double maturity, unsigned tAvgSteps, double epsilon, double mixingFactor, char **e) {-  try {return ret(new QlFdm1dMesher(alloc(new FdmHestonLocalVolatilityVarianceMesher(size, *arg(process), *arg(leverageFct), maturity, tAvgSteps, epsilon, mixingFactor))));-  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}-QlFdmMesher* qlFdmMesherComposite(unsigned meshersLen, QlFdm1dMesher** meshers, char **e) {-  try {return ret(new QlFdmMesher(alloc(new FdmMesherComposite(qlVector(meshers, meshersLen)))));-  } catch (std::exception& er) {return handleException<QlFdmMesher*>(e, er);}}-void qlFdmMesherLocations(QlFdmMesher* mesher, unsigned direction, unsigned* outLen, double** outValues, char **e) {-  try {fillVectorOut([&] {return (*arg(mesher))->locations(direction);}, outLen, outValues);-  } catch (std::exception& er) {*e = tracedup(er.what());}}--void qlFreeFdmInnerValueCalculator(QlFdmInnerValueCalculator *o) {del(o);}--// Heap-allocates the same HsFdmInnerValueCalculator qlFdmSolve used to build stack-locally,-// so a Haskell-defined calculator can be surfaced as a real QlFdmInnerValueCalculator and reused-// wherever a native one (FdmZeroInnerValue etc., bound alongside this) can be used -- see-// QuantLib.Method.fdmInnerValueCalculator's haddock.-QlFdmInnerValueCalculator* qlFdmInnerValueCalculatorFromFunctions(QlFdmMesher* mesher, FdmInnerValueFun innerValueFn, FdmInnerValueFun avgInnerValueFn, char **e) {-  try {return ret(new QlFdmInnerValueCalculator(alloc(new HsFdmInnerValueCalculator(*arg(mesher), innerValueFn, avgInnerValueFn))));-  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}--double qlFdmInnerValueCalculatorEval(QlFdmInnerValueCalculator* calc, QlFdmMesher* mesher, unsigned ndims, unsigned* coords, double t, char **e) {-  try {return (*arg(calc))->innerValue(fdmIteratorAt(mesher, ndims, coords), t);-  } catch (std::exception& er) {*e = tracedup(er.what()); return 0.0;}}-double qlFdmInnerValueCalculatorAvgEval(QlFdmInnerValueCalculator* calc, QlFdmMesher* mesher, unsigned ndims, unsigned* coords, double t, char **e) {-  try {return (*arg(calc))->avgInnerValue(fdmIteratorAt(mesher, ndims, coords), t);-  } catch (std::exception& er) {*e = tracedup(er.what()); return 0.0;}}--// Sibling of qlFdmRollback that derives its own initial grid from a mesher + a (native or-// Haskell-callback-driven) FdmInnerValueCalculator (calc->avgInnerValue(iter, maturity) per node)-// instead of taking a precomputed array -- everything else (operator/step-condition/scheme/-// rollback) is identical, reusing HsFdmLinearOpComposite/HsFdmStepCondition verbatim.-// Fdm1DimSolver/FdmNdimSolver themselves (their own LazyObject caching and spline interpolation)-// are not bound; a caller wanting interpolation combines this function's result with-// qlFdmMesherLocations itself.-void qlFdmSolve(QlFdmMesher* mesher, QlFdmInnerValueCalculator* calculator,-                unsigned opSize, FdmApplyFun applyFn, FdmApplyDirectionFun applyDirFn, FdmSolveSplittingFun solveSplitFn,-                FdmStepConditionFun stepCondFn, unsigned stoppingTimesLen, double* stoppingTimes,-                FdmSchemeDesc* schemeDesc,-                double maturity, double to, unsigned steps, unsigned dampingSteps,-                unsigned* outLen, double** outValues, char **e) {-  try {fillVectorOut([&] {-    shared_ptr<FdmMesher> m = *arg(mesher);-    shared_ptr<FdmInnerValueCalculator> calc = *arg(calculator);-    Array a(m->layout()->size());-    for (const auto& iter : *m->layout())-      a[iter.index()] = calc->avgInnerValue(iter, maturity);--    ext::shared_ptr<FdmLinearOpComposite> map(alloc(new HsFdmLinearOpComposite(opSize, applyFn, applyDirFn, solveSplitFn)));-    FdmStepConditionComposite::Conditions conditions;-    std::list<std::vector<Time> > stoppingTimesList;-    if (stepCondFn) {-      conditions.push_back(ext::shared_ptr<StepCondition<Array> >(alloc(new HsFdmStepCondition(stepCondFn))));-      stoppingTimesList.push_back(std::vector<Time>(stoppingTimes, stoppingTimes + stoppingTimesLen));-    }-    ext::shared_ptr<FdmStepConditionComposite> condition(alloc(new FdmStepConditionComposite(stoppingTimesList, conditions)));-    FdmBackwardSolver solver(map, FdmBoundaryConditionSet(), condition, *arg(schemeDesc));-    solver.rollback(a, maturity, to, steps, dampingSteps);-    return a;-  }, outLen, outValues);-  } catch (std::exception& er) {*e = tracedup(er.what());}}--// Native (non-Haskell-callback) FdmInnerValueCalculator subclasses -- QuantLib's own concrete-// implementations, bound as a peer to qlFdmInnerValueCalculatorFromFunctions above so common cases-// (a vanilla/basket payoff on the grid) don't pay any per-node FFI cost. All upcast directly to-// QlFdmInnerValueCalculator at construction, like every other pricing-engine-family constructor-// here -- none of these classes have their own public methods beyond the ctor, so no dedicated-// leaf type is needed (see CLAUDE.md's "don't mirror the hierarchy 1:1").-QlFdmInnerValueCalculator* qlFdmZeroInnerValue(char **e) {-  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmZeroInnerValue())));-  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}--QlFdmInnerValueCalculator* qlFdmCellAveragingInnerValue(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, char **e) {-  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmCellAveragingInnerValue(*arg(payoff), *arg(mesher), direction))));-  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}--// gridMapping is a genuine per-node Haskell callback (invoked from inside avgInnerValueCalc's-// Simpson integration and from every innerValue call), unlike the identity-mapping ctor above ---// see QuantLib.Method.withCustomCellAveragingInnerValue's haddock for why its Haskell wrapper must-// be continuation-style, same reasoning as qlFdmInnerValueCalculatorFromFunctions/-// withCustomFdmInnerValueCalculator.-using FdmGridMappingFun = double (*)(double x);-QlFdmInnerValueCalculator* qlFdmCellAveragingInnerValueMapped(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, FdmGridMappingFun mappingFn, char **e) {-  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmCellAveragingInnerValue(*arg(payoff), *arg(mesher), direction,-    [mappingFn](Real x) -> Real { return mappingFn(x); }))));-  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}--QlFdmInnerValueCalculator* qlFdmLogInnerValue(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, char **e) {-  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmLogInnerValue(*arg(payoff), *arg(mesher), direction))));-  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}--QlFdmInnerValueCalculator* qlFdmLogBasketInnerValue(QlBasketPayoff* payoff, QlFdmMesher* mesher, char **e) {-  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmLogBasketInnerValue(*arg(payoff), *arg(mesher)))));-  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}--QlFdmInnerValueCalculator* qlFdmAffineG2ModelSwapInnerValue(QlG2* disModel, QlG2* fwdModel, QlFixedVsFloatingSwap* swap,-    unsigned exDatesLen, double* exerciseTimes, int* exerciseDates, QlFdmMesher* mesher, unsigned direction, char **e) {-  return fdmAffineModelSwapInnerValue<G2>(disModel, fwdModel, swap, exDatesLen, exerciseTimes, exerciseDates, mesher, direction, e);-}-QlFdmInnerValueCalculator* qlFdmAffineHullWhiteModelSwapInnerValue(QlHullWhite* disModel, QlHullWhite* fwdModel, QlFixedVsFloatingSwap* swap,-    unsigned exDatesLen, double* exerciseTimes, int* exerciseDates, QlFdmMesher* mesher, unsigned direction, char **e) {-  return fdmAffineModelSwapInnerValue<HullWhite>(disModel, fwdModel, swap, exDatesLen, exerciseTimes, exerciseDates, mesher, direction, e);-}--void qlFreeFdmQuantoHelper(QlFdmQuantoHelper *o) {del(o);}-QlFdmQuantoHelper* qlFdmQuantoHelper(QlYieldTermStructure* rTS, QlYieldTermStructure* fTS, QlBlackVolTermStructure* fxVolTS, double equityFxCorrelation, double exchRateATMlevel, char **e) {-  try {shared_ptr<YieldTermStructure> r = (*arg(rTS)).currentLink(), f = (*arg(fTS)).currentLink();-    shared_ptr<BlackVolTermStructure> fxVol = (*arg(fxVolTS)).currentLink();-    return ret(new QlFdmQuantoHelper(alloc(new FdmQuantoHelper(r, f, fxVol, equityFxCorrelation, exchRateATMlevel))));-  } catch (std::exception& er) {return handleException<QlFdmQuantoHelper*>(e, er);}}-double qlFdmQuantoHelperQuantoAdjustment(QlFdmQuantoHelper* helper, double equityVol, double t1, double t2, char **e) {-  try {return (*arg(helper))->quantoAdjustment(equityVol, t1, t2);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeGJRGARCHModel(QlGJRGARCHModel *o) {del(o);}-void qlFreeHestonModel(QlHestonModel *o) {del(o);}-void qlFreeBrownianGeneratorFactory(QlBrownianGeneratorFactory *o) {del(o);}-QlBrownianGeneratorFactory* qlMTBrownianGeneratorFactory(unsigned long seed, char **e) {-  try {return ret(new QlBrownianGeneratorFactory(alloc(new MTBrownianGeneratorFactory(seed))));-  } catch (std::exception& er) {return handleException<QlBrownianGeneratorFactory*>(e, er);}}-QlBrownianGeneratorFactory* qlSobolBrownianGeneratorFactory(int ordering, unsigned long seed, int directionIntegers, char **e) {-  try {return ret(new QlBrownianGeneratorFactory(alloc(new SobolBrownianGeneratorFactory(-    (SobolBrownianGenerator::Ordering)ordering, seed, (SobolRsg::DirectionIntegers)directionIntegers))));-  } catch (std::exception& er) {return handleException<QlBrownianGeneratorFactory*>(e, er);}}-void qlFreeHestonSLVMCModel(QlHestonSLVMCModel *o) {del(o);}-QlHestonSLVMCModel* qlHestonSLVMCModel(QlLocalVolTermStructure* localVol, QlHestonModel* hestonModel, QlBrownianGeneratorFactory* factory, int endDate, unsigned timeStepsPerYear, unsigned nBins, unsigned calibrationPaths, unsigned mandatoryDatesLen, int* mandatoryDates, double mixingFactor, char **e) {-  try {return ret(new QlHestonSLVMCModel(alloc(new HestonSLVMCModel(-    Handle<LocalVolTermStructure>(*arg(localVol)), Handle<HestonModel>(*arg(hestonModel)), *arg(factory),-    Date(endDate), timeStepsPerYear, nBins, calibrationPaths, qlDateVector(mandatoryDates, mandatoryDatesLen), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlHestonSLVMCModel*>(e, er);}}-QlLocalVolTermStructure* qlHestonSLVMCModelLeverageFunction(QlHestonSLVMCModel* o, char **e) {-  try {return ret(new QlLocalVolTermStructure((*arg(o))->leverageFunction()));-  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}-void qlFreeHestonSLVFDMModel(QlHestonSLVFDMModel *o) {del(o);}-QlHestonSLVFDMModel* qlHestonSLVFDMModel(QlLocalVolTermStructure* localVol, QlHestonModel* hestonModel, int endDate,-    unsigned xGrid, unsigned vGrid, unsigned tMaxStepsPerYear, unsigned tMinStepsPerYear, double tStepNumberDecay,-    unsigned nRannacherTimeSteps, unsigned predictionCorretionSteps, double x0Density, double localVolEpsProb,-    unsigned maxIntegrationIterations, double vLowerEps, double vUpperEps, double vMin, double v0Density,-    double vLowerBoundDensity, double vUpperBoundDensity, double leverageFctPropEps, int greensAlgorithm,-    int trafoType, FdmSchemeDesc* schemeDesc, int logging, unsigned mandatoryDatesLen, int* mandatoryDates,-    double mixingFactor, char **e) {-  try {-    HestonSLVFokkerPlanckFdmParams p = {xGrid, vGrid, tMaxStepsPerYear, tMinStepsPerYear, tStepNumberDecay,-      nRannacherTimeSteps, predictionCorretionSteps, x0Density, localVolEpsProb, maxIntegrationIterations,-      vLowerEps, vUpperEps, vMin, v0Density, vLowerBoundDensity, vUpperBoundDensity, leverageFctPropEps,-      (FdmHestonGreensFct::Algorithm)greensAlgorithm, (FdmSquareRootFwdOp::TransformationType)trafoType,-      *arg(schemeDesc)};-    return ret(new QlHestonSLVFDMModel(alloc(new HestonSLVFDMModel(-      Handle<LocalVolTermStructure>(*arg(localVol)), Handle<HestonModel>(*arg(hestonModel)), Date(endDate), p,-      logging, qlDateVector(mandatoryDates, mandatoryDatesLen), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlHestonSLVFDMModel*>(e, er);}}-QlLocalVolTermStructure* qlHestonSLVFDMModelLeverageFunction(QlHestonSLVFDMModel* o, char **e) {-  try {return ret(new QlLocalVolTermStructure((*arg(o))->leverageFunction()));-  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}-HestonSLVFDMLogEntries* qlHestonSLVFDMModelLogEntries(QlHestonSLVFDMModel* o, char **e) {-  try {-    std::unique_ptr<HestonSLVFDMLogEntries> out(new HestonSLVFDMLogEntries);-    const std::list<HestonSLVFDMModel::LogEntry>& entries = (*arg(o))->logEntries();-    out->entries.reserve(entries.size());-    for (const auto& entry : entries) {-      HestonSLVFDMLogEntries::Entry copy;-      copy.time = entry.t;-      const auto& meshers = entry.mesher->getFdm1dMeshers();-      copy.spotGrid.assign(meshers.at(0)->locations().begin(), meshers.at(0)->locations().end());-      copy.varianceGrid.assign(meshers.at(1)->locations().begin(), meshers.at(1)->locations().end());-      copy.density.assign(entry.prob->begin(), entry.prob->end());-      out->entries.push_back(std::move(copy));-    }-    return ret(out.release());-  } catch (std::exception& er) {return handleException<HestonSLVFDMLogEntries*>(e, er);}}-void qlFreeHestonSLVFDMLogEntries(HestonSLVFDMLogEntries* o) {del(o);}-unsigned qlHestonSLVFDMLogEntriesSize(HestonSLVFDMLogEntries* o) {return (unsigned)o->entries.size();}-double qlHestonSLVFDMLogEntriesTime(HestonSLVFDMLogEntries* o, unsigned i, char **e) {-  try {return o->entries.at(i).time;-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlHestonSLVFDMLogEntriesSpotGrid(HestonSLVFDMLogEntries* o, unsigned i, unsigned* len, double** values, char **e) {-  try {fillVectorOut([&] {return o->entries.at(i).spotGrid;}, len, values);-  } catch (std::exception& er) {*e = tracedup(er.what());}}-void qlHestonSLVFDMLogEntriesVarianceGrid(HestonSLVFDMLogEntries* o, unsigned i, unsigned* len, double** values, char **e) {-  try {fillVectorOut([&] {return o->entries.at(i).varianceGrid;}, len, values);-  } catch (std::exception& er) {*e = tracedup(er.what());}}-void qlHestonSLVFDMLogEntriesDensity(HestonSLVFDMLogEntries* o, unsigned i, unsigned* rows, unsigned* cols, unsigned* len, double** values, char **e) {-  OutValue<unsigned> rowResult(rows), colResult(cols);-  OutArrayResult<double> result(len, values);-  try {-    const auto& entry = o->entries.at(i);-    double *out = result.allocate((unsigned)entry.density.size());-    std::copy(entry.density.begin(), entry.density.end(), out);-    rowResult.set((unsigned)entry.varianceGrid.size());-    colResult.set((unsigned)entry.spotGrid.size());-    result.commit(); rowResult.commit(); colResult.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}}-void qlFreeBatesModel(QlBatesModel *o) {del(o);}-void qlFreePiecewiseTimeDependentHestonModel(QlPiecewiseTimeDependentHestonModel *o) {del(o);}-void qlFreeShortRateModel(QlShortRateModel *o) {del(o);}-void qlFreeAffineModel(QlAffineModel *o) {del(o);}-double qlAffineModelDiscount(QlAffineModel* o, double t, char **e) {-  try {return (*arg(o))->discount(t);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAffineModelDiscountBond(QlAffineModel* o, double now, double maturity, unsigned factorsLen, double* factors, char **e) {-  try {return (*arg(o))->discountBond(now, maturity, Array(factors, factors+factorsLen));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAffineModelDiscountBondOption(QlAffineModel* o, int type, double strike, double maturity, int haveBondStart, double bondStart, double bondMaturity, char **e) {-  try {return haveBondStart-    ? (*arg(o))->discountBondOption((Option::Type)type, strike, maturity, bondStart, bondMaturity)-    : (*arg(o))->discountBondOption((Option::Type)type, strike, maturity, bondMaturity);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeOneFactorAffineModel(QlOneFactorAffineModel *o) {del(o);}-double qlHullWhiteConvexityBias(double futurePrice, double t, double T, double sigma, double a, char **e) {-  try {return HullWhite::convexityBias(futurePrice, t, T, sigma, a);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlAffineModel* qlOneFactorAffineModelAsAffineModel(QlOneFactorAffineModel *o) {return ret(new QlAffineModel(*arg(o)));}-void qlFreeLiborForwardModel(QlLiborForwardModel *o) {del(o);}-QlAffineModel* qlLiborForwardModelAsAffineModel(QlLiborForwardModel *o) {return ret(new QlAffineModel(*arg(o)));}-void qlFreeHullWhite(QlHullWhite *o) {del(o);}-QlOneFactorAffineModel* qlHullWhiteAsOneFactorAffineModel(QlHullWhite *o) {return ret(new QlOneFactorAffineModel(*arg(o)));}-void qlFreeCalibratedModel(QlCalibratedModel *o) {del(o);}--QlBatesModel* qlBatesModel(QlBatesProcess* process, char **e) {try {return ret(new QlBatesModel(alloc(new BatesModel(*arg(process)))));} catch (std::exception& er) {return handleException<QlBatesModel*>(e, er);}}-QlShortRateModel* qlBlackKarasinski(QlYieldTermStructure* termStructure, double a, double sigma, char **e) {-  try {return ret(new QlShortRateModel(alloc(new BlackKarasinski(*arg(termStructure), a, sigma))));-  } catch (std::exception& er) {return handleException<QlShortRateModel*>(e, er);}}-QlOneFactorAffineModel* qlCoxIngersollRoss(double r0, double theta, double k, double sigma, int withFellerConstraint, char **e) {-  try {return ret(new QlOneFactorAffineModel(alloc(new CoxIngersollRoss(r0, theta, k, sigma, withFellerConstraint))));-  } catch (std::exception& er) {return handleException<QlOneFactorAffineModel*>(e, er);}}-QlOneFactorAffineModel* qlExtendedCoxIngersollRoss(QlYieldTermStructure* termStructure, double theta, double k, double sigma, double x0, int withFellerConstraint, char **e) {-  try {return ret(new QlOneFactorAffineModel(alloc(new ExtendedCoxIngersollRoss(*arg(termStructure), theta, k, sigma, x0, withFellerConstraint))));-  } catch (std::exception& er) {return handleException<QlOneFactorAffineModel*>(e, er);}}-QlG2* qlG2(QlYieldTermStructure* termStructure, double a, double sigma, double b, double eta, double rho, char **e) {-  try {return ret(new QlG2(alloc(new G2(*arg(termStructure), a, sigma, b, eta, rho))));-  } catch (std::exception& er) {return handleException<QlG2*>(e, er);}}-QlShortRateModel* qlGeneralizedHullWhite(QlYieldTermStructure* yieldtermStructure, unsigned speedstructureLen, int* speedstructure, unsigned volstructureLen, int* volstructure, unsigned speedLen, double* speed, unsigned volLen, double* vol, char **e) {-  try {return ret(new QlShortRateModel(alloc(new GeneralizedHullWhite(*arg(yieldtermStructure), qlDateVector(speedstructure, speedstructureLen), qlDateVector(volstructure, volstructureLen), std::vector<double>(speed, speed+speedLen), std::vector<double>(vol, vol+volLen)))));-  } catch (std::exception& er) {return handleException<QlShortRateModel*>(e, er);}}-QlGJRGARCHModel* qlGJRGARCHModel(QlGJRGARCHProcess* process, char **e) {try {return ret(new QlGJRGARCHModel(alloc(new GJRGARCHModel(*arg(process)))));} catch (std::exception& er) {return handleException<QlGJRGARCHModel*>(e, er);}}-QlHestonModel* qlHestonModel(QlHestonProcess* process, char **e) {try {return ret(new QlHestonModel(alloc(new HestonModel(*arg(process)))));} catch (std::exception& er) {return handleException<QlHestonModel*>(e, er);}}-QlHullWhite* qlHullWhite(QlYieldTermStructure* termStructure, double a, double sigma, char **e) {-  try {return ret(new QlHullWhite(alloc(new HullWhite(*arg(termStructure), a, sigma))));-  } catch (std::exception& er) {return handleException<QlHullWhite*>(e, er);}}-QlCalibratedModel* qlVarianceGammaModel(QlVarianceGammaProcess* process, char **e) {-  try {return ret(new QlCalibratedModel(alloc(new VarianceGammaModel(*arg(process)))));-  } catch (std::exception& er) {return handleException<QlCalibratedModel*>(e, er);}}-QlOneFactorAffineModel* qlVasicek(double r0, double a, double b, double sigma, double lambda, char **e) {-  try {return ret(new QlOneFactorAffineModel(alloc(new Vasicek(r0, a, b, sigma, lambda))));-  } catch (std::exception& er) {return handleException<QlOneFactorAffineModel*>(e, er);}}--void qlFreeG2(QlG2 *o) {del(o);}-QlAffineModel* qlG2AsAffineModel(QlG2 *o) {return ret(new QlAffineModel(*arg(o)));}-QlShortRateModel* qlG2AsShortRateModel(QlG2 *o) {return ret(new QlShortRateModel(*arg(o)));}-void qlFreeShortRateDynamics(QlShortRateDynamics *o) {del(o);}-QlShortRateDynamics* qlG2Dynamics(QlG2 *o, char **e) {-  try {return ret(new QlShortRateDynamics((*arg(o))->dynamics()));-  } catch (std::exception& er) {return handleException<QlShortRateDynamics*>(e, er);}}-double qlShortRateDynamicsShortRate(QlShortRateDynamics *o, double t, double x, double y, char **e) {-  try {return (*arg(o))->shortRate(t, x, y);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeBatesDetJumpModel(QlBatesDetJumpModel *o) {del(o);}-QlBatesModel* qlBatesDetJumpModelAsBatesModel(QlBatesDetJumpModel *o) {return ret(new QlBatesModel(*arg(o)));}-void qlFreeBatesDoubleExpDetJumpModel(QlBatesDoubleExpDetJumpModel *o) {del(o);}-QlBatesDoubleExpModel* qlBatesDoubleExpDetJumpModelAsBatesDoubleExpModel(QlBatesDoubleExpDetJumpModel *o) {return ret(new QlBatesDoubleExpModel(*arg(o)));}-void qlFreeBatesDoubleExpModel(QlBatesDoubleExpModel *o) {del(o);}-QlHestonModel* qlBatesDoubleExpModelAsHestonModel(QlBatesDoubleExpModel *o) {return ret(new QlHestonModel(*arg(o)));}-void qlFreeLmCorrelationModel(QlLmCorrelationModel *o) {del(o);}-void qlFreeLmVolatilityModel(QlLmVolatilityModel *o) {del(o);}--QlLmCorrelationModel* qlLmConstWrapperCorrelationModel(QlLmCorrelationModel* corrModel, char **e) {-  try {return ret(new QlLmCorrelationModel(alloc(new LmConstWrapperCorrelationModel(*arg(corrModel)))));-  } catch (std::exception& er) {return handleException<QlLmCorrelationModel*>(e, er);}}-QlLmVolatilityModel* qlLmConstWrapperVolatilityModel(QlLmVolatilityModel* volaModel, char **e) {-  try {return ret(new QlLmVolatilityModel(alloc(new LmConstWrapperVolatilityModel(*arg(volaModel)))));-  } catch (std::exception& er) {return handleException<QlLmVolatilityModel*>(e, er);}}-QlLmCorrelationModel* qlLmExponentialCorrelationModel(unsigned size, double rho, char **e) {-  try {return ret(new QlLmCorrelationModel(alloc(new LmExponentialCorrelationModel(size, rho))));-  } catch (std::exception& er) {return handleException<QlLmCorrelationModel*>(e, er);}}-QlLmVolatilityModel* qlLmFixedVolatilityModel(unsigned volatilitiesLen, double* volatilities, unsigned startTimesLen, double * startTimes, char **e) {-  try {return ret(new QlLmVolatilityModel(alloc(new LmFixedVolatilityModel(Array(volatilities, volatilities+volatilitiesLen), std::vector<double>(startTimes, startTimes+startTimesLen)))));-  } catch (std::exception& er) {return handleException<QlLmVolatilityModel*>(e, er);}}-QlLmCorrelationModel* qlLmLinearExponentialCorrelationModel(unsigned size, double rho, double beta, unsigned factors, char **e) {-  try {return ret(new QlLmCorrelationModel(alloc(new LmLinearExponentialCorrelationModel(size, rho, beta, factors))));-  } catch (std::exception& er) {return handleException<QlLmCorrelationModel*>(e, er);}}-QlLmVolatilityModel* qlLmLinearExponentialVolatilityModel(unsigned fixingTimesLen, double * fixingTimes, double a, double b, double c, double d, char **e) {-  try {return ret(new QlLmVolatilityModel(alloc(new LmLinearExponentialVolatilityModel(std::vector<double>(fixingTimes, fixingTimes+fixingTimesLen), a, b, c, d))));-  } catch (std::exception& er) {return handleException<QlLmVolatilityModel*>(e, er);}}-QlLiborForwardModel* qlLiborForwardModel(QlLiborForwardModelProcess* process, QlLmVolatilityModel* volaModel, QlLmCorrelationModel* corrModel, char **e) {-  try {return ret(new QlLiborForwardModel(alloc(new LiborForwardModel(*arg(process), *arg(volaModel), *arg(corrModel)))));-  } catch (std::exception& er) {return handleException<QlLiborForwardModel*>(e, er);}}-double qlLiborForwardModelS0(QlLiborForwardModel* o, unsigned alpha, unsigned beta, char **e) {-  try {return (*arg(o))->S_0(alpha, beta);} catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeLfmHullWhiteParameterization(QlLfmHullWhiteParameterization *o) {del(o);}-QlLfmHullWhiteParameterization* qlLfmHullWhiteParameterization(QlLiborForwardModelProcess* process, QlOptionletVolatilityStructure* capletVol, unsigned correlationRows, unsigned correlationCols, double* correlation, unsigned factors, char **e) {-  try {return ret(new QlLfmHullWhiteParameterization(alloc(new LfmHullWhiteParameterization(*arg(process), handlePtr(arg(capletVol)), qlMatrix(correlation, correlationRows, correlationCols), factors))));-  } catch (std::exception& er) {return handleException<QlLfmHullWhiteParameterization*>(e, er);}}-void qlLfmHullWhiteCovariance(QlLfmHullWhiteParameterization* o, double t, unsigned xLen, double* x, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e) {-  try {fillMatrixOut([&] {return (*arg(o))->covariance(t, Array(x, x+xLen));}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}--void qlFreeGsr(QlGsr *o) {del(o);}-void qlFreeMarkovFunctional(QlMarkovFunctional *o) {del(o);}-void qlFreeGaussian1dModel(QlGaussian1dModel *o) {del(o);}-QlCalibratedModel* qlGsrAsCalibratedModel(QlGsr *o) {return ret(new QlCalibratedModel(*arg(o)));}-QlCalibratedModel* qlMarkovFunctionalAsCalibratedModel(QlMarkovFunctional *o) {return ret(new QlCalibratedModel(*arg(o)));}-QlGaussian1dModel* qlGsrAsGaussian1dModel(QlGsr *o) {return ret(new QlGaussian1dModel(*arg(o)));}-QlGaussian1dModel* qlMarkovFunctionalAsGaussian1dModel(QlMarkovFunctional *o) {return ret(new QlGaussian1dModel(*arg(o)));}-QlGsr* qlGsr(QlYieldTermStructure* termStructure, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, QlQuote** volatilities, QlQuote* reversion, double T, char **e) {-  try {return ret(new QlGsr(alloc(new Gsr(*arg(termStructure), qlDateVector(volstepdates, volstepdatesLen), qlHandleVector(volatilities, volatilitiesLen), *arg(reversion), T))));-  } catch (std::exception& er) {return handleException<QlGsr*>(e, er);}}-void qlGsrVolatility(QlGsr* o, unsigned *len, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->volatility();}, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlGsrMoveVolatility(QlGsr* o, unsigned i, unsigned *len, int **fp, char **e) {-  OutArrayResult<int> result(len, fp);-  try {std::vector<bool> res = (*arg(o))->MoveVolatility(i);-    int *out = result.allocate((unsigned)res.size());-    for (unsigned j = 0; j < res.size(); ++j) out[j] = res[j];-    result.commit();-  } catch (std::exception& er) {handleException<int*>(e, er);}}-void qlGsrMoveReversion(QlGsr* o, unsigned i, unsigned *len, int **fp, char **e) {-  OutArrayResult<int> result(len, fp);-  try {std::vector<bool> res = (*arg(o))->MoveReversion(i);-    int *out = result.allocate((unsigned)res.size());-    for (unsigned j = 0; j < res.size(); ++j) out[j] = res[j];-    result.commit();-  } catch (std::exception& er) {handleException<int*>(e, er);}}-void qlGsrCalibrateVolatilitiesIterative(QlGsr* o, unsigned helpersLen, QlBlackCalibrationHelper** helpers, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned weightsLen, double* weights, char **e) {-  try {(*arg(o))->calibrateVolatilitiesIterative(qlVector(helpers, helpersLen), **arg(method), **arg(endCriteria), Constraint(constraint ? *arg(constraint) : Constraint()), std::vector<double>(weights, weights+weightsLen));-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-QlMarkovFunctional* qlMarkovFunctional(QlYieldTermStructure* termStructure, double reversion, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, double* volatilities, QlSwaptionVolatilityStructure* swaptionVol, unsigned expiriesLen, int* swaptionExpiries, unsigned tenorsLen, int* tenorQuantity, unsigned, int* tenorUnit, QlSwapIndex* swapIndexBase, unsigned yGridPoints, char **e) {-  try {return ret(new QlMarkovFunctional(alloc(new MarkovFunctional(*arg(termStructure), reversion, qlDateVector(volstepdates, volstepdatesLen), std::vector<double>(volatilities, volatilities+volatilitiesLen), *arg(swaptionVol), qlDateVector(swaptionExpiries, expiriesLen), qlPeriodVector(tenorQuantity, tenorUnit, tenorsLen), *arg(swapIndexBase), MarkovFunctional::ModelSettings().withYGridPoints(yGridPoints)))));-  } catch (std::exception& er) {return handleException<QlMarkovFunctional*>(e, er);}}-QlMarkovFunctional* qlMarkovFunctionalCaplet(QlYieldTermStructure* termStructure, double reversion, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, double* volatilities, QlOptionletVolatilityStructure* capletVol, unsigned expiriesLen, int* capletExpiries, QlIborIndex* iborIndex, unsigned yGridPoints, char **e) {-  try {return ret(new QlMarkovFunctional(alloc(new MarkovFunctional(*arg(termStructure), reversion, qlDateVector(volstepdates, volstepdatesLen), std::vector<double>(volatilities, volatilities+volatilitiesLen), *arg(capletVol), qlDateVector(capletExpiries, expiriesLen), *arg(iborIndex), MarkovFunctional::ModelSettings().withYGridPoints(yGridPoints)))));-  } catch (std::exception& er) {return handleException<QlMarkovFunctional*>(e, er);}}-void qlMarkovFunctionalVolatility(QlMarkovFunctional* o, unsigned *len, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->volatility();}, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-double qlGaussian1dModelNumeraire(QlGaussian1dModel* o, int referenceDate, double y, QlYieldTermStructure* yts, char **e) {-  try {return (*arg(o))->numeraire(Date(referenceDate), y, qlNullableHandle(yts));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlGaussian1dModelZerobond(QlGaussian1dModel* o, int maturity, int referenceDate, double y, QlYieldTermStructure* yts, char **e) {-  try {return (*arg(o))->zerobond(Date(maturity), qlNullableDate(referenceDate), y, qlNullableHandle(yts));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlGaussian1dModelZerobondOption(QlGaussian1dModel* o, int type, int expiry, int valueDate, int maturity, double strike, int referenceDate, double y, QlYieldTermStructure* yts, double yStdDevs, unsigned yGridPoints, int extrapolatePayoff, int flatPayoffExtrapolation, char **e) {-  try {return (*arg(o))->zerobondOption((Option::Type)type, Date(expiry), Date(valueDate), Date(maturity), strike, qlNullableDate(referenceDate), y, qlNullableHandle(yts), yStdDevs, yGridPoints, extrapolatePayoff, flatPayoffExtrapolation);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlGaussian1dModelForwardRate(QlGaussian1dModel* o, int fixing, int referenceDate, double y, QlIborIndex* iborIdx, char **e) {-  try {return (*arg(o))->forwardRate(Date(fixing), qlNullableDate(referenceDate), y, iborIdx ? *arg(iborIdx) : shared_ptr<IborIndex>());-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlGaussian1dModelSwapRate(QlGaussian1dModel* o, int fixing, int tenorLen, int tenorUnit, int referenceDate, double y, QlSwapIndex* swapIdx, char **e) {-  try {return (*arg(o))->swapRate(Date(fixing), Period(tenorLen, (TimeUnit)tenorUnit), qlNullableDate(referenceDate), y, swapIdx ? *arg(swapIdx) : shared_ptr<SwapIndex>());-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlGaussian1dModelSwapAnnuity(QlGaussian1dModel* o, int fixing, int tenorLen, int tenorUnit, int referenceDate, double y, QlSwapIndex* swapIdx, char **e) {-  try {return (*arg(o))->swapAnnuity(Date(fixing), Period(tenorLen, (TimeUnit)tenorUnit), qlNullableDate(referenceDate), y, swapIdx ? *arg(swapIdx) : shared_ptr<SwapIndex>());-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlGaussian1dModelYGrid(QlGaussian1dModel* o, double yStdDevs, int gridPoints, double bigT, double t, double y, unsigned *len, double **out, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->yGrid(yStdDevs, gridPoints, bigT, t, y);}, len, out);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-QlStochasticProcess1D* qlGaussian1dModelStateProcess(QlGaussian1dModel* o, char **e) {-  try {return ret(new QlStochasticProcess1D((*arg(o))->stateProcess()));-  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}-QlPricingEngine* qlGaussian1dSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlYieldTermStructure* discountCurve, int probabilities, char **e) {-  try {return ret(new QlPricingEngine(alloc(new Gaussian1dSwaptionEngine(*arg(model), integrationPoints, stddevs, extrapolatePayoff, flatPayoffExtrapolation, qlNullableHandle(discountCurve), (Gaussian1dSwaptionEngine::Probabilities)probabilities))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlGaussian1dNonstandardSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlQuote* oas, QlYieldTermStructure* discountCurve, int probabilities, char **e) {-  try {return ret(new QlPricingEngine(alloc(new Gaussian1dNonstandardSwaptionEngine(*arg(model), integrationPoints, stddevs, extrapolatePayoff, flatPayoffExtrapolation, qlNullableHandle(oas), qlNullableHandle(discountCurve), (Gaussian1dNonstandardSwaptionEngine::Probabilities)probabilities))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-// As qlGaussian1dNonstandardSwaptionEngine, plus a trailing includeTodaysExercise bool before-// probabilities (gaussian1dfloatfloatswaptionengine.hpp).-QlPricingEngine* qlGaussian1dFloatFloatSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlQuote* oas, QlYieldTermStructure* discountCurve, int includeTodaysExercise, int probabilities, char **e) {-  try {return ret(new QlPricingEngine(alloc(new Gaussian1dFloatFloatSwaptionEngine(*arg(model), integrationPoints, stddevs, extrapolatePayoff, flatPayoffExtrapolation, qlNullableHandle(oas), qlNullableHandle(discountCurve), includeTodaysExercise, (Gaussian1dFloatFloatSwaptionEngine::Probabilities)probabilities))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlGaussian1dJamshidianSwaptionEngine(QlGaussian1dModel* model, char **e) {-  try {return ret(new QlPricingEngine(alloc(new Gaussian1dJamshidianSwaptionEngine(*arg(model)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}-QlPricingEngine* qlGaussian1dCapFloorEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlYieldTermStructure* discountCurve, char **e) {-  try {return ret(new QlPricingEngine(alloc(new Gaussian1dCapFloorEngine(*arg(model), integrationPoints, stddevs, extrapolatePayoff, flatPayoffExtrapolation, qlNullableHandle(discountCurve)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}--QlCalibratedModel* qlGJRGARCHModelAsCalibratedModel(QlGJRGARCHModel *o) {return ret(new QlCalibratedModel(*arg(o)));}-QlCalibratedModel* qlHestonModelAsCalibratedModel(QlHestonModel *o) {return ret(new QlCalibratedModel(*arg(o)));}-QlHestonModel* qlBatesModelAsHestonModel(QlBatesModel *o) {return ret(new QlHestonModel(*arg(o)));}-QlCalibratedModel* qlLiborForwardModelAsCalibratedModel(QlLiborForwardModel *o) {return ret(new QlCalibratedModel(*arg(o)));}-QlCalibratedModel* qlPiecewiseTimeDependentHestonModelAsCalibratedModel(QlPiecewiseTimeDependentHestonModel *o) {return ret(new QlCalibratedModel(*arg(o)));}-QlCalibratedModel* qlShortRateModelAsCalibratedModel(QlShortRateModel *o) {return ret(new QlCalibratedModel(*arg(o)));}-QlShortRateModel* qlOneFactorAffineModelAsShortRateModel(QlOneFactorAffineModel *o) {return ret(new QlShortRateModel(*arg(o)));}-void qlFreeCalibrationHelper(QlCalibrationHelper *o) {del(o);}-void qlFreeBlackCalibrationHelper(QlBlackCalibrationHelper *o) {del(o);}-QlCalibrationHelper* qlBlackCalibrationHelperAsCalibrationHelper(QlBlackCalibrationHelper *o) {return ret(new QlCalibrationHelper(*arg(o)));}--void qlCalibratedModelCalibrate(QlCalibratedModel* o, unsigned x1Len, QlCalibrationHelper** x1, unsigned wLen, double *weights, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned fpLen, int* fixParameters, char **e) {-  try {(*arg(o))->calibrate(qlVector(x1, x1Len), **arg(method), **arg(endCriteria), Constraint(constraint ? *arg(constraint) : Constraint()), std::vector<double>(weights, weights+wLen), std::vector<bool>(fixParameters, fixParameters+fpLen));-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-double qlCalibratedModelValue(QlCalibratedModel* o, unsigned pLen, double* p, unsigned hLen, QlCalibrationHelper** h, char **e) {-  try {return (*arg(o))->value(Array(p, p+pLen), qlVector(h, hLen));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlBlackCalibrationHelperSetPricingEngine(QlBlackCalibrationHelper* o, QlPricingEngine* engine, char **e) {-  try {(*arg(o))->setPricingEngine(*arg(engine));-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-QlBlackCalibrationHelper* qlCapHelper(int l, int u, QlQuote* volatility, QlIborIndex* index, int fixedLegFrequency, DayCounter* fixedLegDayCounter, int includeFirstSwaplet, QlYieldTermStructure* termStructure, int errorType, int type, double shift, char **e) {-  try {return ret(new QlBlackCalibrationHelper(alloc(new CapHelper(Period(l, (TimeUnit)u), *arg(volatility), *arg(index), (Frequency)fixedLegFrequency, *arg(fixedLegDayCounter), includeFirstSwaplet, *arg(termStructure), (BlackCalibrationHelper::CalibrationErrorType)errorType, (VolatilityType)type, shift))));-  } catch (std::exception& er) {return handleException<QlBlackCalibrationHelper*>(e, er);}}-QlBlackCalibrationHelper* qlHestonModelHelper(int l, int u, Calendar* calendar, QlQuote* s0, double strikePrice, QlQuote* volatility, QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, int errorType, char **e) {-  try {return ret(new QlBlackCalibrationHelper(alloc(new HestonModelHelper(Period(l, (TimeUnit)u), *arg(calendar), *arg(s0), strikePrice, *arg(volatility), *arg(riskFreeRate), *arg(dividendYield), (BlackCalibrationHelper::CalibrationErrorType)errorType))));-  } catch (std::exception& er) {return handleException<QlBlackCalibrationHelper*>(e, er);}}-void qlFreeSwaptionHelper(QlSwaptionHelper *o) {del(o);}-QlBlackCalibrationHelper* qlSwaptionHelperAsBlackCalibrationHelper(QlSwaptionHelper *o) {return ret(new QlBlackCalibrationHelper(*arg(o)));}-QlSwaptionHelper* qlSwaptionHelper(int l, int u, int ll, int lu, QlQuote* volatility, QlIborIndex* index, int fl, int fu, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, char **e) {-  try {return ret(new QlSwaptionHelper(alloc(new SwaptionHelper(Period(l, (TimeUnit)u), Period(ll, (TimeUnit)lu), *arg(volatility), *arg(index), Period(fl, (TimeUnit)fu), *arg(fixedLegDayCounter), *arg(floatingLegDayCounter), *arg(termStructure), (BlackCalibrationHelper::CalibrationErrorType)errorType, strike, nominal, (VolatilityType)volatilityType, shift, settlementDays, (RateAveraging::Type)averagingMethod))));-  } catch (std::exception& er) {return handleException<QlSwaptionHelper*>(e, er);}}-QlSwaptionHelper* qlSwaptionHelperFromDate(int exerciseDate, int ll, int lu, QlQuote* volatility, QlIborIndex* index, int fl, int fu, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, char **e) {-  try {return ret(new QlSwaptionHelper(alloc(new SwaptionHelper(Date(exerciseDate), Period(ll, (TimeUnit)lu), *arg(volatility), *arg(index), Period(fl, (TimeUnit)fu), *arg(fixedLegDayCounter), *arg(floatingLegDayCounter), *arg(termStructure), (BlackCalibrationHelper::CalibrationErrorType)errorType, strike, nominal, (VolatilityType)volatilityType, shift, settlementDays, (RateAveraging::Type)averagingMethod))));-  } catch (std::exception& er) {return handleException<QlSwaptionHelper*>(e, er);}}-QlSwaptionHelper* qlSwaptionHelperFromDates(int exerciseDate, int endDate, QlQuote* volatility, QlIborIndex* index, int fl, int fu, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, char **e) {-  try {return ret(new QlSwaptionHelper(alloc(new SwaptionHelper(Date(exerciseDate), Date(endDate), *arg(volatility), *arg(index), Period(fl, (TimeUnit)fu), *arg(fixedLegDayCounter), *arg(floatingLegDayCounter), *arg(termStructure), (BlackCalibrationHelper::CalibrationErrorType)errorType, strike, nominal, (VolatilityType)volatilityType, shift, settlementDays, (RateAveraging::Type)averagingMethod))));-  } catch (std::exception& er) {return handleException<QlSwaptionHelper*>(e, er);}}-// Both accessors are cast-free: o is already a genuine SwaptionHelper (constructed as one above),-// so underlying()/swaption() are plain method calls, not a downcast from a type-erased base.-QlFixedVsFloatingSwap* qlSwaptionHelperUnderlying(QlSwaptionHelper* o, char **e) {-  try {return ret(new QlFixedVsFloatingSwap((*arg(o))->underlying()));-  } catch (std::exception& er) {return handleException<QlFixedVsFloatingSwap*>(e, er);}}-QlSwaption* qlSwaptionHelperSwaption(QlSwaptionHelper* o, char **e) {-  try {return ret(new QlSwaption((*arg(o))->swaption()));-  } catch (std::exception& er) {return handleException<QlSwaption*>(e, er);}}-void qlBlackCalibrationHelperTimes(QlBlackCalibrationHelper* o, unsigned *len, double **ts, char **e) {-  try {fillVectorOut([&] {std::list<double> times; (*arg(o))->addTimesTo(times); return times;}, len, ts);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlCalibratedModelParams(QlCalibratedModel* o, unsigned *len, double** ps, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->params();}, len, ps);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-double qlBlackCalibrationHelperBlackPrice(QlBlackCalibrationHelper* o, double volatility, char **e) {try {return (*arg(o))->blackPrice(volatility);} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalibrationHelperCalibrationError(QlBlackCalibrationHelper* o, char **e) {try {return (*arg(o))->calibrationError();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalibrationHelperImpliedVolatility(QlBlackCalibrationHelper* o, double targetValue, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e) {-  try {return (*arg(o))->impliedVolatility(targetValue, accuracy, maxEvaluations, minVol, maxVol);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalibrationHelperMarketValue(QlBlackCalibrationHelper* o, char **e) {try {return (*arg(o))->marketValue();} catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackCalibrationHelperModelValue(QlBlackCalibrationHelper* o, char **e) {try {return (*arg(o))->modelValue();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlQuote* qlBlackCalibrationHelperVolatility(QlBlackCalibrationHelper* o, char **e) {-  try {return ret(new QlQuote((*arg(o))->volatility().currentLink()));-  } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}--void qlFreeStochasticProcess1D(QlStochasticProcess1D *o) {del(o);}-QlStochasticProcess* qlStochasticProcess1DAsStochasticProcess(QlStochasticProcess1D *o) {return ret(new QlStochasticProcess(*arg(o)));}-void qlFreeBlackProcess(QlBlackProcess *o) {del(o);}-QlGeneralizedBlackScholesProcess* qlBlackProcessAsGeneralizedBlackScholesProcess(QlBlackProcess *o) {return ret(new QlGeneralizedBlackScholesProcess(*arg(o)));}-void qlFreeGeneralizedBlackScholesProcess(QlGeneralizedBlackScholesProcess *o) {del(o);}-QlStochasticProcess1D* qlGeneralizedBlackScholesProcessAsStochasticProcess1D(QlGeneralizedBlackScholesProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}-void qlFreeStochasticProcess(QlStochasticProcess *o) {del(o);}-unsigned qlStochasticProcessFactors(QlStochasticProcess* o, char **e) {-  try {return (*arg(o))->factors();-  } catch (std::exception& er) {return handleException<unsigned>(e, er);}}-void qlStochasticProcessInitialValues(QlStochasticProcess* o, unsigned *len, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->initialValues();}, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlStochasticProcessDrift(QlStochasticProcess* o, double t, unsigned xLen, double *x, unsigned *len, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->drift(t, Array(x, x+xLen));}, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlStochasticProcessDiffusion(QlStochasticProcess* o, double t, unsigned xLen, double *x, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e) {-  try {fillMatrixOut([&] {return (*arg(o))->diffusion(t, Array(x, x+xLen));}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlStochasticProcessExpectation(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *len, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->expectation(t0, Array(x0, x0+x0Len), dt);}, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlStochasticProcessStdDeviation(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e) {-  try {fillMatrixOut([&] {return (*arg(o))->stdDeviation(t0, Array(x0, x0+x0Len), dt);}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlStochasticProcessCovariance(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e) {-  try {fillMatrixOut([&] {return (*arg(o))->covariance(t0, Array(x0, x0+x0Len), dt);}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlStochasticProcessApply(QlStochasticProcess* o, unsigned x0Len, double *x0, unsigned dxLen, double *dx, unsigned *len, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->apply(Array(x0, x0+x0Len), Array(dx, dx+dxLen));}, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlStochasticProcessEvolve(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned dwLen, double *dw, unsigned *len, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->evolve(t0, Array(x0, x0+x0Len), dt, Array(dw, dw+dwLen));}, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}--QlBlackProcess* qlBlackProcess(QlQuote* x0, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e) {-  try {return ret(new QlBlackProcess(alloc(new BlackProcess(*arg(x0), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));-  } catch (std::exception& er) {return handleException<QlBlackProcess*>(e, er);}}-QlGeneralizedBlackScholesProcess* qlBlackScholesMertonProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e) {-  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new BlackScholesMertonProcess(*arg(x0), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));-  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}-QlGeneralizedBlackScholesProcess* qlBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e) {-  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new BlackScholesProcess(*arg(x0), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));-  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}-QlGeneralizedBlackScholesProcess* qlExtendedBlackScholesMertonProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int evolDisc, char **e) {-  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new ExtendedBlackScholesMertonProcess(*arg(x0), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), (ExtendedBlackScholesMertonProcess::Discretization)evolDisc))));-  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}-QlGeneralizedBlackScholesProcess* qlGarmanKohlhagenProcess(QlQuote* x0, QlYieldTermStructure* foreignRiskFreeTS, QlYieldTermStructure* domesticRiskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e) {-  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new GarmanKohlagenProcess(*arg(x0), *arg(foreignRiskFreeTS), *arg(domesticRiskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));-  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}-QlGeneralizedBlackScholesProcess* qlGeneralizedBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e) {-  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new GeneralizedBlackScholesProcess(*arg(x0), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));-  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}-QlStochasticProcess1D* qlSquareRootProcess(double b, double a, double sigma, double x0, int d, char **e) {-  try {return ret(new QlStochasticProcess1D(alloc(new SquareRootProcess(b, a, sigma, x0, createDiscretization1D(d)))));-  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}-QlGeneralizedBlackScholesProcess* qlVegaStressedBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, double lowerTimeBorderForStressTest, double upperTimeBorderForStressTest, double lowerAssetBorderForStressTest, double upperAssetBorderForStressTest, double stressLevel, int d, char **e) {-  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new VegaStressedBlackScholesProcess(*arg(x0), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), lowerTimeBorderForStressTest, upperTimeBorderForStressTest, lowerAssetBorderForStressTest, upperAssetBorderForStressTest, stressLevel, createDiscretization1D(d)))));-  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}--void qlFreeExtOUWithJumpsProcess(QlExtOUWithJumpsProcess *o) {del(o);}-QlStochasticProcess* qlExtOUWithJumpsProcessAsStochasticProcess(QlExtOUWithJumpsProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}-void qlFreeExtendedOrnsteinUhlenbeckProcess(QlExtendedOrnsteinUhlenbeckProcess *o) {del(o);}-QlStochasticProcess1D* qlExtendedOrnsteinUhlenbeckProcessAsStochasticProcess1D(QlExtendedOrnsteinUhlenbeckProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}-void qlFreeGJRGARCHProcess(QlGJRGARCHProcess *o) {del(o);}-QlStochasticProcess* qlGJRGARCHProcessAsStochasticProcess(QlGJRGARCHProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}-void qlFreeHestonProcess(QlHestonProcess *o) {del(o);}-QlStochasticProcess* qlHestonProcessAsStochasticProcess(QlHestonProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}-void qlFreeHestonSLVProcess(QlHestonSLVProcess *o) {del(o);}-QlStochasticProcess* qlHestonSLVProcessAsStochasticProcess(QlHestonSLVProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}-QlHestonSLVProcess* qlHestonSLVProcess(QlHestonProcess* hestonProcess, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e) {-  try {return ret(new QlHestonSLVProcess(alloc(new HestonSLVProcess(*arg(hestonProcess), *arg(leverageFct), mixingFactor))));-  } catch (std::exception& er) {return handleException<QlHestonSLVProcess*>(e, er);}}-void qlFreeBatesProcess(QlBatesProcess *o) {del(o);}-QlHestonProcess* qlBatesProcessAsHestonProcess(QlBatesProcess *o) {return ret(new QlHestonProcess(*arg(o)));}-void qlFreeHybridHestonHullWhiteProcess(QlHybridHestonHullWhiteProcess *o) {del(o);}-QlStochasticProcess* qlHybridHestonHullWhiteProcessAsStochasticProcess(QlHybridHestonHullWhiteProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}-void qlFreeKlugeExtOUProcess(QlKlugeExtOUProcess *o) {del(o);}-QlStochasticProcess* qlKlugeExtOUProcessAsStochasticProcess(QlKlugeExtOUProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}-void qlFreeLiborForwardModelProcess(QlLiborForwardModelProcess *o) {del(o);}-QlStochasticProcess* qlLiborForwardModelProcessAsStochasticProcess(QlLiborForwardModelProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}-void qlFreeStochasticProcessArray(QlStochasticProcessArray *o) {del(o);}-QlStochasticProcess* qlStochasticProcessArrayAsStochasticProcess(QlStochasticProcessArray *o) {return ret(new QlStochasticProcess(*arg(o)));}-void qlFreeVarianceGammaProcess(QlVarianceGammaProcess *o) {del(o);}-QlStochasticProcess1D* qlVarianceGammaProcessAsStochasticProcess1D(QlVarianceGammaProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}-void qlFreeMerton76Process(QlMerton76Process *o) {del(o);}-QlStochasticProcess1D* qlMerton76ProcessAsStochasticProcess1D(QlMerton76Process *o) {return ret(new QlStochasticProcess1D(*arg(o)));}-void qlFreeHullWhiteProcess(QlHullWhiteProcess *o) {del(o);}-QlStochasticProcess1D* qlHullWhiteProcessAsStochasticProcess1D(QlHullWhiteProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}-void qlFreeHullWhiteForwardProcess(QlHullWhiteForwardProcess *o) {del(o);}-QlStochasticProcess1D* qlHullWhiteForwardProcessAsStochasticProcess1D(QlHullWhiteForwardProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}-void qlHullWhiteForwardProcessSetForwardMeasureTime(QlHullWhiteForwardProcess* o, double t, char **e) {-  try {(*arg(o))->setForwardMeasureTime(t);-  } catch (std::exception& er) {(void)handleException<double>(e, er);}}-double qlHullWhiteProcessAlpha(QlHullWhiteProcess* o, double t, char **e) {-  try {return (*arg(o))->alpha(t);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlHullWhiteForwardProcessAlpha(QlHullWhiteForwardProcess* o, double t, char **e) {-  try {return (*arg(o))->alpha(t);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlHullWhiteForwardProcessB(QlHullWhiteForwardProcess* o, double t, double T, char **e) {-  try {return (*arg(o))->B(t, T);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlHullWhiteForwardProcessMT(QlHullWhiteForwardProcess* o, double s, double t, double T, char **e) {-  try {return (*arg(o))->M_T(s, t, T);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlHybridHestonHullWhiteProcessNumeraire(QlHybridHestonHullWhiteProcess* o, double t, unsigned xLen, double *x, char **e) {-  try {return (*arg(o))->numeraire(t, Array(x, x+xLen));-  } catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeG2Process(QlG2Process *o) {del(o);}-QlStochasticProcess* qlG2ProcessAsStochasticProcess(QlG2Process *o) {return ret(new QlStochasticProcess(*arg(o)));}-double qlG2ProcessPhi(QlG2Process* o, double t, char **e) {-  try {return (*arg(o))->phi(t);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlG2ProcessShortRate(QlG2Process* o, double t, double x, double y) {return (*arg(o))->shortRate(t, x, y);}--void qlFreeG2ForwardProcess(QlG2ForwardProcess *o) {del(o);}-QlStochasticProcess* qlG2ForwardProcessAsStochasticProcess(QlG2ForwardProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}-double qlG2ForwardProcessPhi(QlG2ForwardProcess* o, double t, char **e) {-  try {return (*arg(o))->phi(t);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlG2ForwardProcessShortRate(QlG2ForwardProcess* o, double t, double x, double y) {return (*arg(o))->shortRate(t, x, y);}-void qlG2ForwardProcessSetForwardMeasureTime(QlG2ForwardProcess* o, double t, char **e) {-  try {(*arg(o))->setForwardMeasureTime(t);-  } catch (std::exception& er) {(void)handleException<double>(e, er);}}--QlBatesProcess* qlBatesProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double kappa, double theta, double sigma, double rho, double lambda, double nu, double delta, int d, char **e) {-  try {return ret(new QlBatesProcess(alloc(new BatesProcess(*arg(riskFreeRate), *arg(dividendYield), *arg(s0), v0, kappa, theta, sigma, rho, lambda, nu, delta, (HestonProcess::Discretization)d))));-  } catch (std::exception& er) {return handleException<QlBatesProcess*>(e, er);}}-QlExtendedOrnsteinUhlenbeckProcess* qlExtendedOrnsteinUhlenbeckProcess(double speed, double sigma, double x0, double (*b)(double), int discretization, double intEps, char **e) {-  try {return ret(new QlExtendedOrnsteinUhlenbeckProcess(alloc(new ExtendedOrnsteinUhlenbeckProcess(speed, sigma, x0, b, (ExtendedOrnsteinUhlenbeckProcess::Discretization)discretization, intEps))));-  } catch (std::exception& er) {return handleException<QlExtendedOrnsteinUhlenbeckProcess*>(e, er);}}-QlExtendedOrnsteinUhlenbeckProcess* qlLinearSeasonalOrnsteinUhlenbeckProcess(double speed, double sigma, double x0, double a, double k, double c, double phase, int discretization, double intEps, char **e) {-  try {-    std::function<Real(Real)> b = [a, k, c, phase](Real t) { return a + k*t + c*std::sin(2*M_PI*t + phase); };-    return ret(new QlExtendedOrnsteinUhlenbeckProcess(alloc(new ExtendedOrnsteinUhlenbeckProcess(speed, sigma, x0, b, (ExtendedOrnsteinUhlenbeckProcess::Discretization)discretization, intEps))));-  } catch (std::exception& er) {return handleException<QlExtendedOrnsteinUhlenbeckProcess*>(e, er);}}-QlExtOUWithJumpsProcess* qlExtOUWithJumpsProcess(QlExtendedOrnsteinUhlenbeckProcess* process, double Y0, double beta, double jumpIntensity, double eta, char **e) {-  try {return ret(new QlExtOUWithJumpsProcess(alloc(new ExtOUWithJumpsProcess(*arg(process), Y0, beta, jumpIntensity, eta))));-  } catch (std::exception& er) {return handleException<QlExtOUWithJumpsProcess*>(e, er);}}-QlG2ForwardProcess* qlG2ForwardProcess(double a, double sigma, double b, double eta, double rho, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlG2ForwardProcess(alloc(new G2ForwardProcess(a, sigma, b, eta, rho, qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlG2ForwardProcess*>(e, er);}}-QlG2Process* qlG2Process(double a, double sigma, double b, double eta, double rho, QlYieldTermStructure* termStructure, char **e) {-  try {return ret(new QlG2Process(alloc(new G2Process(a, sigma, b, eta, rho, qlNullableHandle(arg(termStructure))))));-  } catch (std::exception& er) {return handleException<QlG2Process*>(e, er);}}-QlStochasticProcess1D* qlGemanRoncoroniProcess(double x0, double alpha, double beta, double gamma, double delta, double eps, double zeta, double d, double k, double tau, double sig2, double a, double b, double theta1, double theta2, double theta3, double psi, char **e) {-  try {return ret(new QlStochasticProcess1D(alloc(new GemanRoncoroniProcess(x0, alpha, beta, gamma, delta, eps, zeta, d, k, tau, sig2, a, b, theta1, theta2, theta3, psi))));-  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}-QlStochasticProcess1D* qlGeometricBrownianMotionProcess(double initialValue, double mue, double sigma, char **e) {-  try {return ret(new QlStochasticProcess1D(alloc(new GeometricBrownianMotionProcess(initialValue, mue, sigma))));-  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}-QlGJRGARCHProcess* qlGJRGARCHProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double omega, double alpha, double beta, double gamma, double lambda, double daysPerYear, int d, char **e) {-  try {return ret(new QlGJRGARCHProcess(alloc(new GJRGARCHProcess(*arg(riskFreeRate), *arg(dividendYield), *arg(s0), v0, omega, alpha, beta, gamma, lambda, daysPerYear, (GJRGARCHProcess::Discretization)d))));-  } catch (std::exception& er) {return handleException<QlGJRGARCHProcess*>(e, er);}}-QlHestonProcess* qlHestonProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double kappa, double theta, double sigma, double rho, int d, char **e) {-  try {return ret(new QlHestonProcess(alloc(new HestonProcess(*arg(riskFreeRate), qlNullableHandle(arg(dividendYield)), *arg(s0), v0, kappa, theta, sigma, rho, (HestonProcess::Discretization)d))));-  } catch (std::exception& er) {return handleException<QlHestonProcess*>(e, er);}}-double qlHestonProcessPdf(QlHestonProcess* o, double x, double v, double t, double eps, char **e) {-  try {return (*arg(o))->pdf(x, v, t, eps);} catch (std::exception& er) {return handleException<double>(e, er);}}-QlHullWhiteForwardProcess* qlHullWhiteForwardProcess(QlYieldTermStructure* h, double a, double sigma, char **e) {-  try {return ret(new QlHullWhiteForwardProcess(alloc(new HullWhiteForwardProcess(*arg(h), a, sigma))));-  } catch (std::exception& er) {return handleException<QlHullWhiteForwardProcess*>(e, er);}}-QlHullWhiteProcess* qlHullWhiteProcess(QlYieldTermStructure* h, double a, double sigma, char **e) {-  try {return ret(new QlHullWhiteProcess(alloc(new HullWhiteProcess(*arg(h), a, sigma))));-  } catch (std::exception& er) {return handleException<QlHullWhiteProcess*>(e, er);}}-QlHybridHestonHullWhiteProcess* qlHybridHestonHullWhiteProcess(QlHestonProcess* hestonProcess, QlHullWhiteForwardProcess* hullWhiteProcess, double corrEquityShortRate, int discretization, char **e) {-  try {return ret(new QlHybridHestonHullWhiteProcess(alloc(new HybridHestonHullWhiteProcess(*arg(hestonProcess), *arg(hullWhiteProcess), corrEquityShortRate, (HybridHestonHullWhiteProcess::Discretization)discretization))));-  } catch (std::exception& er) {return handleException<QlHybridHestonHullWhiteProcess*>(e, er);}}-QlKlugeExtOUProcess* qlKlugeExtOUProcess(double rho, QlExtOUWithJumpsProcess* kluge, QlExtendedOrnsteinUhlenbeckProcess* extOU, char **e) {-  try {return ret(new QlKlugeExtOUProcess(alloc(new KlugeExtOUProcess(rho, *arg(kluge), (*arg(extOU))))));-  } catch (std::exception& er) {return handleException<QlKlugeExtOUProcess*>(e, er);}}-QlLiborForwardModelProcess* qlLiborForwardModelProcess(unsigned size, QlIborIndex* index, char **e) {-  try {return ret(new QlLiborForwardModelProcess(alloc(new LiborForwardModelProcess(size, *arg(index)))));-  } catch (std::exception& er) {return handleException<QlLiborForwardModelProcess*>(e, er);}}-void qlLiborForwardModelProcessFixingDates(QlLiborForwardModelProcess* o, unsigned *len, int **dates, char **e) {-  OutArrayResult<int> result(len, dates);-  try {const std::vector<Date>& fixingDates = (*arg(o))->fixingDates();-    int *out = result.allocate((unsigned)fixingDates.size());-    for (unsigned i = 0; i < fixingDates.size(); ++i) out[i] = fixingDates[i].serialNumber();-    result.commit();-  } catch (std::exception& er) {(void)handleException<int*>(e, er);}}-void qlLiborForwardModelProcessFixingTimes(QlLiborForwardModelProcess* o, unsigned *len, double **times, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->fixingTimes();}, len, times);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-Leg* qlLiborForwardModelProcessCashFlows(QlLiborForwardModelProcess* o, double amount, char **e) {-  try {return ret(new Leg((*arg(o))->cashFlows(amount)));-  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}-QlIborIndex* qlLiborForwardModelProcessIndex(QlLiborForwardModelProcess* o, char **e) {-  try {return ret(new QlIborIndex((*arg(o))->index()));-  } catch (std::exception& er) {return handleException<QlIborIndex*>(e, er);}}-void qlLiborForwardModelProcessSetCovarParam(QlLiborForwardModelProcess* o, QlLfmHullWhiteParameterization* param, char **e) {-  try {(*arg(o))->setCovarParam(*arg(param));-  } catch (std::exception& er) {(void)handleException<double>(e, er);}}-void qlLiborForwardModelProcessDiscountBond(QlLiborForwardModelProcess* o, unsigned ratesLen, double *rates, unsigned *len, double **dfs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->discountBond(std::vector<Rate>(rates, rates+ratesLen));}, len, dfs);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-void qlLiborForwardModelProcessAccrualTimes(QlLiborForwardModelProcess* o, unsigned *startLen, double **start, unsigned *endLen, double **end, char **e) {-  OutArrayResult<double> startResult(startLen, start);-  OutArrayResult<double> endResult(endLen, end);-  try {const std::vector<Time>& s = (*arg(o))->accrualStartTimes();-    const std::vector<Time>& t = (*arg(o))->accrualEndTimes();-    double *starts = startResult.allocate((unsigned)s.size());-    std::copy(s.begin(), s.end(), starts);-    double *ends = endResult.allocate((unsigned)t.size());-    std::copy(t.begin(), t.end(), ends);-    startResult.commit(); endResult.commit();-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}-QlMerton76Process* qlMerton76Process(QlQuote* stateVariable, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, QlQuote* jumpInt, QlQuote* logJMean, QlQuote* logJVol, int d, char **e) {-  try {return ret(new QlMerton76Process(alloc(new Merton76Process(*arg(stateVariable), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), *arg(jumpInt), *arg(logJMean), *arg(logJVol), createDiscretization1D(d)))));-  } catch (std::exception& er) {return handleException<QlMerton76Process*>(e, er);}}-QlStochasticProcess1D* qlOrnsteinUhlenbeckProcess(double speed, double vol, double x0, double level, char **e) {-  try {return ret(new QlStochasticProcess1D(alloc(new OrnsteinUhlenbeckProcess(speed, vol, x0, level))));-  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}-QlVarianceGammaProcess* qlVarianceGammaProcess(QlQuote* s0, QlYieldTermStructure* dividendYield, QlYieldTermStructure* riskFreeRate, double sigma, double nu, double theta, char **e) {-  try {return ret(new QlVarianceGammaProcess(alloc(new VarianceGammaProcess(*arg(s0), *arg(dividendYield), *arg(riskFreeRate), sigma, nu, theta))));-  } catch (std::exception& er) {return handleException<QlVarianceGammaProcess*>(e, er);}}-QlStochasticProcessArray* qlStochasticProcessArray(unsigned x0Len, QlStochasticProcess1D** x0, unsigned correlationRows, unsigned correlationCols, double* correlation, char **e) {-  try {return ret(new QlStochasticProcessArray(alloc(new StochasticProcessArray(qlVector(x0, x0Len), qlMatrix(correlation, correlationRows, correlationCols)))));-  } catch (std::exception& er) {return handleException<QlStochasticProcessArray*>(e, er);}}--// delWith rather than del(): qlFreePolymorphicPathGeneratorAux does the actual `delete`, since-// PolymorphicPathGenerator is only forward-declared in this translation unit.-void qlFreePathGenerator(PolymorphicPathGenerator *gen) {delWith(gen, qlFreePolymorphicPathGeneratorAux);}-PolymorphicPathGenerator *qlPathGenerator(int rngtrait, QlStochasticProcess *p, TimeGrid *t, unsigned seed, unsigned dim, int brownianBridge, char **e) {-  try {return ret(qlPathGeneratorAux(rngtrait, *arg(p), *arg(t), seed, dim, brownianBridge));-  } catch (std::exception& er) {return handleException<PolymorphicPathGenerator*>(e, er);}}-PolymorphicPathGenerator *qlSobolPathGenerator(int dir, QlStochasticProcess *p, TimeGrid *t, unsigned seed, unsigned dim, int brownianBridge, char **e) {-  try {return ret(qlSobolPathGeneratorAux((SobolRsg::DirectionIntegers)dir, *arg(p), *arg(t), seed, dim, brownianBridge));-  } catch (std::exception& er) {return handleException<PolymorphicPathGenerator*>(e, er);}}-SamplePath *qlPathGeneratorNext(PolymorphicPathGenerator *pgen, char **e) {-  try {return alloc(new SamplePath(qlPathGeneratorNextAux(pgen)));-  } catch (std::exception& er) {return handleException<SamplePath*>(e, er);}}-SamplePath *qlPathGeneratorAntithetic(PolymorphicPathGenerator *pgen, char **e) {-  try {return alloc(new SamplePath(qlPathGeneratorAntitheticAux(pgen)));-  } catch (std::exception& er) {return handleException<SamplePath*>(e, er);}}--double qlSamplePathWeight(SamplePath *p) {return arg(p)->weight;}-unsigned qlSamplePathAssetNumber(SamplePath *p) {return arg(p)->value.assetNumber();}-unsigned qlSamplePathSize(SamplePath *p) {return arg(p)->value.pathSize();}-void qlFreeSamplePath(SamplePath *p) {del(p);}-double qlSamplePathAt(SamplePath *p, unsigned asset, unsigned point, char **e) {try {return arg(p)->value.at(asset).at(point);} catch (std::exception& er) {return handleException<double>(e, er);}}--// delWith, for the same reason as qlFreePathGenerator above.-void qlFreeGaussianRsg(PolymorphicGaussianRsg *g) {delWith(g, qlFreePolymorphicGaussianRsgAux);}-// ret() only, no alloc(): the generator is a standalone heap object handed straight to Haskell and-// freed by qlFreeGaussianRsg -- not a shared_ptr payload. Wrapping it in both verbs would trace one-// pointer as two acquisitions against a single release, which alloc-summary.py reports as a leak.-// Same shape as qlPathGenerator below.-PolymorphicGaussianRsg *qlGaussianRsg(int rngtrait, unsigned dimension, unsigned seed, char **e) {-  try {return ret(qlGaussianRsgAux(rngtrait, dimension, seed));-  } catch (std::exception& er) {return handleException<PolymorphicGaussianRsg*>(e, er);}}-PolymorphicGaussianRsg *qlSobolGaussianRsg(int dir, unsigned dimension, unsigned seed, char **e) {-  try {return ret(qlSobolGaussianRsgAux((SobolRsg::DirectionIntegers)dir, dimension, seed));-  } catch (std::exception& er) {return handleException<PolymorphicGaussianRsg*>(e, er);}}-unsigned qlGaussianRsgDimension(PolymorphicGaussianRsg *g) {return qlGaussianRsgDimensionAux(arg(g));}--void qlGaussianRsgNextSequence(PolymorphicGaussianRsg *g, unsigned *len, double **values, double *weight, char **e) {-  OutArrayResult<double> valuesResult(len, values);-  OutValue<double> weightResult(weight);-  try {const auto& s = qlGaussianRsgNextSequenceAux(arg(g));-    double *out = valuesResult.allocate((unsigned)s.value.size());-    std::copy(s.value.begin(), s.value.end(), out);-    weightResult.set(s.weight);-    valuesResult.commit(); weightResult.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}}-void qlGaussianRsgLastSequence(PolymorphicGaussianRsg *g, unsigned *len, double **values, double *weight, char **e) {-  OutArrayResult<double> valuesResult(len, values);-  OutValue<double> weightResult(weight);-  try {const auto& s = qlGaussianRsgLastSequenceAux(arg(g));-    double *out = valuesResult.allocate((unsigned)s.value.size());-    std::copy(s.value.begin(), s.value.end(), out);-    weightResult.set(s.weight);-    valuesResult.commit(); weightResult.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}}--void qlSamplePathAssetPath(SamplePath *s, unsigned asset, unsigned *len, double **p, char **e) {-  try {fillVectorOut([&] {return std::vector<double>(arg(s)->value.at(asset).begin(), s->value.at(asset).end());}, len, p);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}--// Runs one Longstaff-Schwartz basis-function regression (fitStates -> fitTargets) and evaluates the-// fitted continuation value at each evalState -- the cross-path regression step LongstaffSchwartzPathPricer-// performs once per exercise date, with the payoff/exercise values supplied from Haskell instead of a-// bound Payoff.-void qlLsmRegress(int polynomType, unsigned order, unsigned fitStatesLen, double *fitStates, unsigned fitTargetsLen, double *fitTargets, unsigned evalLen, double *evalStates, unsigned *outLen, double **outValues, char **e) {-  OutArrayResult<double> result(outLen, outValues);-  try {-    QL_REQUIRE(fitStatesLen == fitTargetsLen, "fit states and fit targets must have the same length");-    std::vector<std::function<Real(Real)> > v = LsmBasisSystem::pathBasisSystem(order, (LsmBasisSystem::PolynomialType)polynomType);-    std::vector<Real> x(fitStates, fitStates + fitStatesLen), y(fitTargets, fitTargets + fitTargetsLen);-    Array coeff = GeneralLinearLeastSquares(x, y, v).coefficients();-    double *values = result.allocate(evalLen);-    for (unsigned i = 0; i < evalLen; ++i) {-      Real cont = 0.0;-      for (Size l = 0; l < v.size(); ++l) cont += coeff[l] * v[l](evalStates[i]);-      values[i] = cont;-    }-    result.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}}--// Multi-asset counterpart of qlLsmRegress, via LsmBasisSystem::multiPathBasisSystem: fitStates/evalStates-// are row-major (one row per path, fitCols/evalCols columns = underlyings, which must agree).-void qlLsmRegressMulti(int polynomType, unsigned order, unsigned fitRows, unsigned fitCols, double *fitStates, unsigned fitTargetsLen, double *fitTargets, unsigned evalRows, unsigned evalCols, double *evalStates, unsigned *outLen, double **outValues, char **e) {-  OutArrayResult<double> result(outLen, outValues);-  try {-    QL_REQUIRE(fitCols == evalCols, "fit states and eval states must have the same number of columns (underlyings)");-    QL_REQUIRE(fitRows == fitTargetsLen, "fit states and fit targets must have the same number of rows");-    std::vector<std::function<Real(Array)> > v = LsmBasisSystem::multiPathBasisSystem(fitCols, order, (LsmBasisSystem::PolynomialType)polynomType);-    std::vector<Array> x; x.reserve(fitRows);-    for (unsigned i = 0; i < fitRows; ++i) x.emplace_back(fitStates + i*fitCols, fitStates + (i+1)*fitCols);-    std::vector<Real> y(fitTargets, fitTargets + fitTargetsLen);-    Array coeff = GeneralLinearLeastSquares(x, y, v).coefficients();-    double *values = result.allocate(evalRows);-    for (unsigned i = 0; i < evalRows; ++i) {-      Array row(evalStates + i*evalCols, evalStates + (i+1)*evalCols);-      Real cont = 0.0;-      for (Size l = 0; l < v.size(); ++l) cont += coeff[l] * v[l](row);-      values[i] = cont;-    }-    result.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}}--double qlUnsafeSabrLogNormalVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, char **e) {-  try {return unsafeSabrLogNormalVolatility(strike, forward, expiryTime, alpha, beta, nu, rho);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlUnsafeShiftedSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, double shift, int volatilityType, char **e) {-  try {return unsafeShiftedSabrVolatility(strike, forward, expiryTime, alpha, beta, nu, rho, shift, (VolatilityType)volatilityType);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlUnsafeSabrNormalVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, char **e) {-  try {return unsafeSabrNormalVolatility(strike, forward, expiryTime, alpha, beta, nu, rho);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlUnsafeSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, int volatilityType, char **e) {-  try {return unsafeSabrVolatility(strike, forward, expiryTime, alpha, beta, nu, rho, (VolatilityType)volatilityType);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, int volatilityType, char **e) {-  try {return sabrVolatility(strike, forward, expiryTime, alpha, beta, nu, rho, (VolatilityType)volatilityType);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlShiftedSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, double shift, int volatilityType, char **e) {-  try {return shiftedSabrVolatility(strike, forward, expiryTime, alpha, beta, nu, rho, shift, (VolatilityType)volatilityType);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSabrFlochKennedyVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, char **e) {-  try {return sabrFlochKennedyVolatility(strike, forward, expiryTime, alpha, beta, nu, rho);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlValidateSabrParameters(double alpha, double beta, double nu, double rho, char **e) {-  try {validateSabrParameters(alpha, beta, nu, rho);-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-void qlSabrGuess(double k_m, double vol_m, double k_0, double vol_0, double k_p, double vol_p, double forward, double expiryTime, double beta, double shift, int volatilityType, unsigned *len, double **out, char **e) {-  try {fillVectorOut([&] {return sabrGuess(k_m, vol_m, k_0, vol_0, k_p, vol_p, forward, expiryTime, beta, shift, (VolatilityType)volatilityType);}, len, out);-  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+#include "qlCheckedFdEngine.h"+#include "qlExactMeanH1HwEngine.h"+#include <ql/experimental/callablebonds/blackcallablebondengine.hpp>+#include <ql/experimental/callablebonds/treecallablebondengine.hpp>+#include <ql/experimental/swaptions/haganirregularswaptionengine.hpp>+#include <ql/experimental/math/zigguratrng.hpp>+#include <ql/experimental/variancegamma/all.hpp>+#include <ql/experimental/barrieroption/vannavolgabarrierengine.hpp>+#include <ql/experimental/varianceoption/integralhestonvarianceoptionengine.hpp>+#include <ql/legacy/libormarketmodels/lfmswaptionengine.hpp>+#include <ql/methods/montecarlo/lsmbasissystem.hpp>+#include <ql/math/generallinearleastsquares.hpp>+#include <ql/version.hpp>+#include <ql/pricingengines/asian/analytic_cont_geom_av_price.hpp>+#include <ql/pricingengines/asian/analytic_discr_geom_av_strike.hpp>+#include <ql/pricingengines/asian/mc_discr_arith_av_price.hpp>+#include <ql/experimental/asian/analytic_cont_geom_av_price_heston.hpp>+#include <ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp>+#include <ql/pricingengines/asian/turnbullwakemanasianengine.hpp>+#include <ql/pricingengines/asian/fdblackscholesasianengine.hpp>+#include <ql/pricingengines/forward/forwardengine.hpp>+#include <ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp>+#include <ql/pricingengines/vanilla/analyticeuropeanengine.hpp>+#include <ql/experimental/forward/analytichestonforwardeuropeanengine.hpp>+#include <ql/experimental/barrieroption/vannavolgadoublebarrierengine.hpp>+#include <ql/pricingengines/barrier/analyticbarrierengine.hpp>+#include <ql/pricingengines/barrier/analytictwoassetbarrierengine.hpp>+#include <ql/pricingengines/barrier/analyticsoftbarrierengine.hpp>+#include <ql/pricingengines/quanto/quantoengine.hpp>+#include <ql/instruments/quantovanillaoption.hpp>+#include <ql/instruments/forwardvanillaoption.hpp>+#include <ql/pricingengines/forward/forwardperformanceengine.hpp>+#include <ql/pricingengines/exotic/analyticsimplechooserengine.hpp>+#include <ql/pricingengines/exotic/analytictwoassetcorrelationengine.hpp>+#include <ql/pricingengines/exotic/analyticeuropeanmargrabeengine.hpp>+#include <ql/pricingengines/exotic/analyticamericanmargrabeengine.hpp>+#include <ql/pricingengines/exotic/analyticwriterextensibleoptionengine.hpp>+#include <ql/pricingengines/barrier/analyticpartialtimebarrieroptionengine.hpp>+#include <ql/pricingengines/barrier/analyticbinarybarrierengine.hpp>+#include <ql/pricingengines/barrier/analyticdoublebarrierengine.hpp>+#include <ql/pricingengines/barrier/fdblackscholesbarrierengine.hpp>+#include <ql/pricingengines/barrier/fdhestonbarrierengine.hpp>+#include <ql/pricingengines/barrier/fdhestondoublebarrierengine.hpp>+#include <ql/pricingengines/basket/kirkengine.hpp>+#include <ql/pricingengines/basket/stulzengine.hpp>+#include <ql/pricingengines/basket/bjerksundstenslandspreadengine.hpp>+#include <ql/pricingengines/basket/operatorsplittingspreadengine.hpp>+#include <ql/pricingengines/basket/pearsonspreadengine.hpp>+#include <ql/pricingengines/basket/gaussiancopulaspreadengine.hpp>+#include <ql/pricingengines/basket/fd2dblackscholesvanillaengine.hpp>+#include <ql/pricingengines/basket/choibasketengine.hpp>+#include <ql/pricingengines/basket/denglizhoubasketengine.hpp>+#include <ql/pricingengines/basket/fdndimblackscholesvanillaengine.hpp>+#include <ql/pricingengines/basket/singlefactorbsmbasketengine.hpp>+#include <ql/pricingengines/bacheliercalculator.hpp>+#include <ql/pricingengines/blackdeltacalculator.hpp>+#include <ql/pricingengines/blackformula.hpp>+#include <ql/pricingengines/blackscholescalculator.hpp>+#include <ql/pricingengines/bond/discountingbondengine.hpp>+#include <ql/pricingengines/futures/discountingperpetualfuturesengine.hpp>+#include <ql/pricingengines/bond/riskybondengine.hpp>+#include <ql/pricingengines/capfloor/analyticcapfloorengine.hpp>+#include <ql/pricingengines/capfloor/bacheliercapfloorengine.hpp>+#include <ql/pricingengines/capfloor/blackcapfloorengine.hpp>+#include <ql/pricingengines/capfloor/treecapfloorengine.hpp>+#include <ql/pricingengines/cliquet/analyticcliquetengine.hpp>+#include <ql/pricingengines/cliquet/analyticperformanceengine.hpp>+#include <ql/experimental/credit/blackcdsoptionengine.hpp>+#include <ql/experimental/credit/integralcdoengine.hpp>+#include <ql/experimental/credit/midpointcdoengine.hpp>+#include <ql/experimental/credit/integralntdengine.hpp>+#include <ql/pricingengines/credit/integralcdsengine.hpp>+#include <ql/pricingengines/credit/isdacdsengine.hpp>+#include <ql/pricingengines/exotic/analyticcompoundoptionengine.hpp>+#include <ql/pricingengines/credit/midpointcdsengine.hpp>+#include <ql/pricingengines/forward/discountingfxforwardengine.hpp>+#include <ql/pricingengines/forward/replicatingvarianceswapengine.hpp>+#include <ql/pricingengines/greeks.hpp>+#include <ql/pricingengines/lookback/analyticcontinuousfixedlookback.hpp>+#include <ql/pricingengines/lookback/analyticcontinuousfloatinglookback.hpp>+#include <ql/pricingengines/lookback/analyticcontinuouspartialfixedlookback.hpp>+#include <ql/pricingengines/lookback/analyticcontinuouspartialfloatinglookback.hpp>+#include <ql/pricingengines/swap/cvaswapengine.hpp>+#include <ql/pricingengines/swap/treeswapengine.hpp>+#include <ql/pricingengines/swap/discountingconstnotionalcrosscurrencyswapengine.hpp>+#include <ql/pricingengines/swaption/blackswaptionengine.hpp>+#include <ql/termstructures/volatility/sabr.hpp>+#include <ql/pricingengines/swaption/fdg2swaptionengine.hpp>+#include <ql/pricingengines/swaption/fdg2swaptionengine.hpp>+#include <ql/pricingengines/swaption/fdhullwhiteswaptionengine.hpp>+#include <ql/pricingengines/swaption/g2swaptionengine.hpp>+#include <ql/pricingengines/capfloor/gaussian1dcapfloorengine.hpp>+#include <ql/pricingengines/swaption/gaussian1dswaptionengine.hpp>+#include <ql/pricingengines/swaption/gaussian1dnonstandardswaptionengine.hpp>+#include <ql/pricingengines/swaption/gaussian1dfloatfloatswaptionengine.hpp>+#include <ql/pricingengines/swaption/gaussian1djamshidianswaptionengine.hpp>+#include <ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp>+#include <ql/models/shortrate/calibrationhelpers/swaptionhelper.hpp>+#include <ql/models/equity/hestonslvmcmodel.hpp>+#include <ql/models/equity/hestonslvfdmmodel.hpp>+#include <ql/processes/hestonslvprocess.hpp>+#include <ql/models/marketmodels/browniangenerators/mtbrowniangenerator.hpp>+#include <ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp>+#include <ql/pricingengines/swaption/jamshidianswaptionengine.hpp>+#include <ql/pricingengines/swaption/treeswaptionengine.hpp>+#include <ql/pricingengines/vanilla/analyticbsmhullwhiteengine.hpp>+#include <ql/pricingengines/vanilla/analyticdigitalamericanengine.hpp>+#include <ql/pricingengines/vanilla/analyticdividendeuropeanengine.hpp>+#include <ql/pricingengines/vanilla/analyticgjrgarchengine.hpp>+#include <ql/pricingengines/vanilla/analytich1hwengine.hpp>+#include <ql/pricingengines/vanilla/analytichestonhullwhiteengine.hpp>+#include <ql/pricingengines/vanilla/baroneadesiwhaleyengine.hpp>+#include <ql/pricingengines/vanilla/batesengine.hpp>+#include <ql/pricingengines/vanilla/bjerksundstenslandengine.hpp>+#include <ql/pricingengines/vanilla/integralengine.hpp>+#include <ql/pricingengines/vanilla/jumpdiffusionengine.hpp>+#include <ql/pricingengines/vanilla/juquadraticengine.hpp>+#include <ql/pricingengines/vanilla/qdplusamericanengine.hpp>+#include <ql/pricingengines/vanilla/qdfpamericanengine.hpp>+#include <ql/experimental/exoticoptions/continuousarithmeticasianvecerengine.hpp>+#include <ql/instruments/dividendschedule.hpp>+#include <ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp>+#include <ql/methods/finitedifferences/operators/fdmlinearopcomposite.hpp>+#include <ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp>+#include <ql/methods/finitedifferences/utilities/fdmquantohelper.hpp>+#include <ql/methods/finitedifferences/utilities/fdminnervaluecalculator.hpp>+#include <ql/methods/finitedifferences/utilities/fdmaffinemodelswapinnervalue.hpp>+#include <ql/methods/finitedifferences/meshers/fdmmesher.hpp>+#include <ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp>+#include <ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp>+#include <ql/methods/finitedifferences/meshers/predefined1dmesher.hpp>+#include <ql/methods/finitedifferences/meshers/uniform1dmesher.hpp>+#include <ql/methods/finitedifferences/meshers/concentrating1dmesher.hpp>+#include <ql/methods/finitedifferences/meshers/fdmblackscholesmesher.hpp>+#include <ql/methods/finitedifferences/meshers/fdmcev1dmesher.hpp>+#include <ql/methods/finitedifferences/meshers/exponentialjump1dmesher.hpp>+#include <ql/methods/finitedifferences/meshers/fdmsimpleprocess1dmesher.hpp>+#include <ql/methods/finitedifferences/meshers/fdmhestonvariancemesher.hpp>+#include <ql/experimental/finitedifferences/glued1dmesher.hpp>+#include <ql/pricingengines/vanilla/fdhestonvanillaengine.hpp>+#include <ql/pricingengines/vanilla/fdhestonhullwhitevanillaengine.hpp>+#include <ql/pricingengines/exotic/analyticcomplexchooserengine.hpp>+#include <ql/pricingengines/exotic/analyticholderextensibleoptionengine.hpp>+#include <ql/pricingengines/vanilla/coshestonengine.hpp>+#include <ql/pricingengines/vanilla/analyticpdfhestonengine.hpp>+#include <ql/pricingengines/vanilla/fdbatesvanillaengine.hpp>+#include <ql/pricingengines/vanilla/fdblackscholesshoutengine.hpp>+#include <ql/models/all.hpp>+#include <ql/legacy/libormarketmodels/all.hpp>+#include <ql/experimental/shortrate/generalizedhullwhite.hpp>+#include <ql/experimental/variancegamma/variancegammamodel.hpp>+#include <ql/processes/all.hpp>+#include <ql/experimental/processes/all.hpp>+#include <ql/experimental/variancegamma/all.hpp>+#include <ql/legacy/libormarketmodels/lfmprocess.hpp>+#include <type_traits>++#include "qlaux.h"+#if QL_HEX_VERSION >= 0x01440000+#include <ql/models/equity/roughhestonmodel.hpp>+#include <ql/pricingengines/vanilla/analyticroughhestonengine.hpp>+#include <ql/experimental/fx/discountingmtmcrosscurrencybasisswapengine.hpp>+#endif+#include "qlPricingEngineAux.h"+#include "qlPricingEngine.h"++namespace hasquant {+#include "qlEnumObjects.h"+}++using namespace QuantLib;++#ifdef QLTRACK_ALLOCATIONS+QL_TRACE_NAME(SamplePath)+QL_TRACE_NAME(hasquant::ExactMeanH1HWEngine)+#endif++namespace {+  template <class Engine, class = void>+  struct HasExactVarianceRootMean : std::false_type {};++  template <class Engine>+  struct HasExactVarianceRootMean<Engine, std::void_t<decltype(Engine::VarianceRootMean::Exact)>>+      : std::true_type {};++  template <class Engine = AnalyticH1HWEngine, class... Integration>+  QlPricingEngine* h1HwEngine(const shared_ptr<HestonModel>& model,+                            const shared_ptr<HullWhite>& hullWhiteModel, Real rhoSr,+                            bool exactMean, Size meanOrder, Integration... integration) {+    if (!exactMean)+      return ret(new QlPricingEngine(alloc(new Engine(model, hullWhiteModel, rhoSr, integration...))));+    if constexpr (HasExactVarianceRootMean<Engine>::value)+      return ret(new QlPricingEngine(alloc(new Engine(model, hullWhiteModel, rhoSr, integration...,+                                                    Engine::VarianceRootMean::Exact, meanOrder))));+    else+      return ret(new QlPricingEngine(alloc(new hasquant::ExactMeanH1HWEngine(+          model, hullWhiteModel, rhoSr, integration..., meanOrder))));+  }++  shared_ptr<StochasticProcess1D::discretization> createDiscretization1D(int n) {+    switch (n) {+    case hasquant::EulerDiscretization:+      return shared_ptr<StochasticProcess1D::discretization>(new EulerDiscretization());+    case hasquant::EndEulerDiscretization:+      return shared_ptr<StochasticProcess1D::discretization>(new EndEulerDiscretization());+    default:+      QL_FAIL("Invalid discretization: " << n);+    }+  }++  // Wraps 3 Haskell-defined callbacks (produced by QuantLib.Internal.Type's withFdmApply/+  // withFdmApplyDirection/withFdmSolveSplitting, mirroring qlOptimize's HsCostFunction above) as a+  // QuantLib FdmLinearOpComposite driving FdmBackwardSolver::rollback -- see the "coarsen the+  // language-boundary crossing" bullet in CLAUDE.md and qlFdmRollback below. Only the 3 virtuals+  // DouglasScheme::step actually calls (size/setTime are plain state, not callbacks -- see below)+  // are implemented; apply_mixed/preconditioner QL_FAIL, so only schemes that never need them+  // (Douglas, Crank-Nicolson in 1D) work through this hook.+  using FdmCallbackFun = QlCallback;++  class HsFdmLinearOpComposite : public FdmLinearOpComposite {+  public:+    HsFdmLinearOpComposite(Size size, FdmCallbackFun applyFn, FdmCallbackFun applyDirFn, FdmCallbackFun solveSplitFn)+    : size_(size), applyFn_(applyFn), applyDirFn_(applyDirFn), solveSplitFn_(solveSplitFn), t1_(0.0), t2_(0.0) {}++    Size size() const override {return size_;}+    // Not a callback: DouglasScheme (and every scheme) calls setTime once per outer step, then+    // makes several apply*/solve_splitting calls against the *same* (t1,t2) -- so the C+++    // wrapper just stores them as mutable state and passes them as extra scalar args to every+    // apply*/solve_splitting callback below, keeping the Haskell callbacks themselves pure.+    void setTime(Time t1, Time t2) override {t1_ = t1; t2_ = t2;}++    Array apply(const Array& r) const override {+      Array out(r.size());+      FdmCallbackArgs args{0.0, t1_, t2_, r.begin(), out.begin(), (unsigned)r.size(), 0};+      applyFn_->invoke(args);+      return out;+    }+    Array apply_direction(Size direction, const Array& r) const override {+      Array out(r.size());+      FdmCallbackArgs args{0.0, t1_, t2_, r.begin(), out.begin(), (unsigned)r.size(), (unsigned)direction};+      applyDirFn_->invoke(args);+      return out;+    }+    Array solve_splitting(Size direction, const Array& r, Real s) const override {+      Array out(r.size());+      FdmCallbackArgs args{s, t1_, t2_, r.begin(), out.begin(), (unsigned)r.size(), (unsigned)direction};+      solveSplitFn_->invoke(args);+      return out;+    }+    Array apply_mixed(const Array&) const override {+      QL_FAIL("HsFdmLinearOpComposite::apply_mixed not implemented -- fdmRollback only supports schemes that never need mixed derivatives (Douglas, Crank-Nicolson in 1D)");+    }+    Array preconditioner(const Array&, Real) const override {+      QL_FAIL("HsFdmLinearOpComposite::preconditioner not implemented -- fdmRollback only supports schemes that never need it (Douglas, Crank-Nicolson in 1D)");+    }+  private:+    Size size_;+    FdmCallbackFun applyFn_;+    FdmCallbackFun applyDirFn_;+    FdmCallbackFun solveSplitFn_;+    mutable Time t1_, t2_;+  };++  // Step conditions share their input/output buffer. Haskell uses an overlap-safe copy+  // because a callback can return the borrowed vector itself or a slice of it.+  class HsFdmStepCondition : public StepCondition<Array> {+  public:+    explicit HsFdmStepCondition(FdmCallbackFun fn) : fn_(fn) {}+    void applyTo(Array& a, Time t) const override {+      FdmCallbackArgs args{0.0, t, 0.0, a.begin(), a.begin(), (unsigned)a.size(), 0};+      fn_->invoke(args);+    }+  private:+    FdmCallbackFun fn_;+  };+  // Genuine per-grid-node Haskell callback -- see QuantLib.Method's haddock ("coarsen the+  // language-boundary crossing" exception case) and CLAUDE.md's own note on this hook. Unlike+  // HsFdmLinearOpComposite/HsFdmStepCondition above, this cannot be coarsened to cross once per+  // outer iteration: FdmInnerValueCalculator::innerValue/avgInnerValue is called once per mesher+  // node (see qlFdmSolve below, mirroring Fdm1DimSolver's/FdmNdimSolver's own constructor loop),+  // and QuantLib's own step conditions (e.g. FdmAmericanStepCondition, not bound here) call it+  // again per node at every exercise date -- matching QuantLib-SWIG's own+  // FdmInnerValueCalculatorDelegate (SWIG/fdm.i), which accepts the same real per-call cost.+  using FdmInnerValueFun = QlCallback;++  class HsFdmInnerValueCalculator : public FdmInnerValueCalculator {+  public:+    HsFdmInnerValueCalculator(shared_ptr<FdmMesher> mesher, FdmInnerValueFun innerValueFn, FdmInnerValueFun avgInnerValueFn)+    : mesher_(std::move(mesher)), innerValueFn_(innerValueFn), avgInnerValueFn_(avgInnerValueFn) {}++    Real innerValue(const FdmLinearOpIterator& iter, Time t) override {return call(innerValueFn_, iter, t);}+    Real avgInnerValue(const FdmLinearOpIterator& iter, Time t) override {return call(avgInnerValueFn_, iter, t);}+  private:+    // Converts the node's grid-index iterator into its real-valued location per dimension --+    // the reason this whole feature needs a mesher, unlike qlFdmRollback's raw-index callbacks.+    Real call(FdmInnerValueFun fn, const FdmLinearOpIterator& iter, Time t) const {+      const Size n = mesher_->layout()->dim().size();+      std::vector<Real> loc(n);+      for (Size d = 0; d < n; ++d) loc[d] = mesher_->location(iter, d);+      return fn->array(loc.data(), (unsigned)n, t);+    }+    shared_ptr<FdmMesher> mesher_;+    FdmInnerValueFun innerValueFn_, avgInnerValueFn_;+  };++  // Builds the FdmLinearOpIterator for the node at `coords` (one index per dimension) from+  // mesher's own layout dim(), the reverse of what HsFdmInnerValueCalculator::call does above --+  // lets any bound FdmInnerValueCalculator (native or Haskell-callback-driven) be inspected+  // node-by-node without assembling a whole PDE solve.+  // extern "C++": this whole file sits inside qlPricingEngine.h's extern "C" block, but a free+  // function returning a non-POD C++ class by value (rather than only pointers, as every C-linkage+  // shim function here does) needs real C++ linkage or GHC's C++ frontend warns+  // (-Wreturn-type-c-linkage).+  FdmLinearOpIterator fdmIteratorAt(QlFdmMesher* mesher, unsigned ndims, unsigned* coords) {+    const shared_ptr<FdmLinearOpLayout>& layout = (*arg(mesher))->layout();+    std::vector<Size> dim = layout->dim();+    std::vector<Size> coordinates(coords, coords + ndims);+    Size index = 0, stride = 1;+    for (Size d = 0; d < dim.size(); ++d) {+      index += coordinates[d] * stride;+      stride *= dim[d];+    }+    return FdmLinearOpIterator(dim, coordinates, index);+  }+  // FdmAffineModelSwapInnerValue<ModelType> -- template isn't crossable into a C signature, so one+  // concrete shim per ModelType (G2/HullWhite), matching how those two models are already separate+  // plain pointer types (QlG2/QlHullWhite), not a shared family. exerciseDates (upstream's+  // std::map<Time, Date>) is marshalled as two parallel arrays, zipped back into the map here --+  // same array-pair convention as every other multi-field marshaller in this codebase.+  // extern "C++": templates can't have C linkage (this file sits inside qlPricingEngine.h's+  // extern "C" block) -- same reasoning as fdmIteratorAt above.+  template <class ModelType>+  QlFdmInnerValueCalculator* fdmAffineModelSwapInnerValue(+                                                          shared_ptr<ModelType>* disModel, shared_ptr<ModelType>* fwdModel, QlFixedVsFloatingSwap* swap,+                                                          unsigned exDatesLen, double* exerciseTimes, int* exerciseDates,+                                                          QlFdmMesher* mesher, unsigned direction, QlError **e) { QlCallScope callbackScope(e);+    try {+      std::map<Time, Date> t2d;+      for (unsigned i = 0; i < exDatesLen; ++i) t2d[exerciseTimes[i]] = Date(exerciseDates[i]);+      return ret(new QlFdmInnerValueCalculator(alloc(new FdmAffineModelSwapInnerValue<ModelType>(+                                                                                                 *arg(disModel), *arg(fwdModel), *arg(swap), t2d, *arg(mesher), direction))));+    } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}+  }+}++#ifdef QLTRACK_ALLOCATIONS+// These live in the anonymous namespace above, so -- unlike PolymorphicPathGenerator, which is+// forward-declared in qlaux.h precisely so its label can sit beside the rest -- they cannot be+// named there. Specialize here instead; without it ObjClassName's primary template falls back to+// typeid().name() and the trace carries a mangled name. All three are shared_ptr payloads: alloc()+// only, never freed, so alloc-summary.py --census lists them rather than flagging a leak.+QL_TRACE_NAME(HsFdmLinearOpComposite)+QL_TRACE_NAME(HsFdmStepCondition)+QL_TRACE_NAME(HsFdmInnerValueCalculator)+#endif++struct HestonSLVFDMLogEntries {+  struct Entry {+    double time;+    std::vector<double> spotGrid, varianceGrid, density;+  };+  std::vector<Entry> entries;+};++#if QL_HEX_VERSION >= 0x01440000+namespace {+FourierIntegration roughFourierIntegration(int algorithm, unsigned count, double relative, double absolute, bool convergence) {+  switch (algorithm) {+    case 0: return FourierIntegration::gaussLaguerre(count);+    case 1: return FourierIntegration::gaussLegendre(count);+    case 2: return FourierIntegration::gaussChebyshev(count);+    case 3: return FourierIntegration::gaussChebyshev2nd(count);+    case 4: return FourierIntegration::gaussLobatto(relative, absolute, count, convergence);+    case 5: return FourierIntegration::gaussKronrod(absolute, count);+    case 6: return FourierIntegration::simpson(absolute, count);+    case 7: return FourierIntegration::trapezoid(absolute, count);+    case 8: return FourierIntegration::discreteSimpson(count);+    case 9: return FourierIntegration::discreteTrapezoid(count);+    case 10: return FourierIntegration::expSinh(relative);+    case 11: return FourierIntegration::tanhSinh(relative);+    default: QL_FAIL("unknown Fourier integration algorithm");+  }+}+}+#endif++extern "C" {+QlPricingEngine *qlDiscountingBondEngine(QlYieldTermStructure *ts, int f, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlPricingEngine(alloc(new DiscountingBondEngine(*arg(ts), qlOptBool(f)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine *>(e, er);}}+QlPricingEngine* qlDiscountingPerpetualFuturesEngine(+    QlYieldTermStructure* domesticDiscountCurve, QlYieldTermStructure* foreignDiscountCurve,+    QlQuote* assetSpot, unsigned fundingTimesLen, double* fundingTimes,+    unsigned fundingRatesLen, double* fundingRates, unsigned interestRateDiffsLen,+    double* interestRateDiffs, int fundingInterpType, double maxT, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new DiscountingPerpetualFuturesEngine(+      *arg(domesticDiscountCurve), *arg(foreignDiscountCurve), *arg(assetSpot),+      std::vector<Time>(fundingTimes, fundingTimes + fundingTimesLen),+      std::vector<Rate>(fundingRates, fundingRates + fundingRatesLen),+      std::vector<Spread>(interestRateDiffs, interestRateDiffs + interestRateDiffsLen),+      (DiscountingPerpetualFuturesEngine::InterpolationType)fundingInterpType, maxT))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlRiskyBondEngine(QlDefaultProbabilityTermStructure* defaultTS, double recoveryRate, QlYieldTermStructure* yieldTS, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new RiskyBondEngine(Handle<DefaultProbabilityTermStructure>(*arg(defaultTS)), recoveryRate, *arg(yieldTS)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlDiscountingSwapEngine(QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new DiscountingSwapEngine(*arg(discountCurve), qlOptBool(includeSettlementDateFlows), qlNullableDate(settlementDate), qlNullableDate(npvDate)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlDiscountingFxForwardEngine(QlYieldTermStructure* sourceCurrencyDiscountCurve, QlYieldTermStructure* targetCurrencyDiscountCurve, QlQuote* spotFx, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new DiscountingFxForwardEngine(*arg(sourceCurrencyDiscountCurve), *arg(targetCurrencyDiscountCurve), *arg(spotFx)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlDiscountingConstNotionalCrossCurrencySwapEngine(Currency* domesticCcy, QlYieldTermStructure* domesticCcyDiscountCurve, Currency* foreignCcy, QlYieldTermStructure* foreignCcyDiscountCurve, QlQuote* spotFX, int includeSettlementDateFlows, int settlementDate, int npvDate, int spotFXSettleDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new DiscountingConstNotionalCrossCurrencySwapEngine(*arg(domesticCcy), *arg(domesticCcyDiscountCurve), *arg(foreignCcy), *arg(foreignCcyDiscountCurve), *arg(spotFX), qlOptBool(includeSettlementDateFlows), qlNullableDate(settlementDate), qlNullableDate(npvDate), qlNullableDate(spotFXSettleDate)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlCounterpartyAdjSwapEngine(QlYieldTermStructure* discountCurve, QlQuote* blackVol, QlDefaultProbabilityTermStructure* ctptyDTS, double ctptyRecoveryRate, QlDefaultProbabilityTermStructure* invstDTS, double invstRecoveryRate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new CounterpartyAdjSwapEngine(*arg(discountCurve), *arg(blackVol), Handle<DefaultProbabilityTermStructure>(*arg(ctptyDTS)), ctptyRecoveryRate, qlNullableHandle(arg(invstDTS)), invstRecoveryRate))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticBarrierEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticTwoAssetBarrierEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, QlQuote* rho, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticTwoAssetBarrierEngine(*arg(process1), *arg(process2), *arg(rho)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticSoftBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticSoftBarrierEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticSimpleChooserEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticSimpleChooserEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticComplexChooserEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticComplexChooserEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticTwoAssetCorrelationEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, QlQuote* correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticTwoAssetCorrelationEngine(*arg(process1), *arg(process2), *arg(correlation)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticEuropeanMargrabeEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticEuropeanMargrabeEngine(*arg(process1), *arg(process2), correlation))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticAmericanMargrabeEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticAmericanMargrabeEngine(*arg(process1), *arg(process2), correlation))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticWriterExtensibleOptionEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticWriterExtensibleOptionEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticHolderExtensibleOptionEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticHolderExtensibleOptionEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticPartialTimeBarrierOptionEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticPartialTimeBarrierOptionEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticBinaryBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticBinaryBarrierEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBlackScholesBarrierEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesBarrierEngine(*arg(process), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHestonBarrierEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdHestonBarrierEngine(*arg(model), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHestonBarrierEngine1(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdHestonBarrierEngine(*arg(model), qlVector(dividends, dividendsLen), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHestonDoubleBarrierEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdHestonDoubleBarrierEngine(*arg(model), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBinomialBarrierEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned maxTimeSteps, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlBinomialBarrierEngineAux(tree, *arg(process), timeSteps, maxTimeSteps))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlVannaVolgaBarrierEngine(QlDeltaVolQuote* atmVol, QlDeltaVolQuote* vol25Put, QlDeltaVolQuote* vol25Call, QlQuote* spotFX, QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS, int adaptVanDelta, double bsPriceWithSmile, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new VannaVolgaBarrierEngine(Handle<DeltaVolQuote>(*arg(atmVol)), Handle<DeltaVolQuote>(*arg(vol25Put)), Handle<DeltaVolQuote>(*arg(vol25Call)), *arg(spotFX), *arg(domesticTS), *arg(foreignTS), adaptVanDelta, bsPriceWithSmile))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticDoubleBarrierEngine(QlGeneralizedBlackScholesProcess* process, int series, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticDoubleBarrierEngine(*arg(process), series))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlVannaVolgaDoubleBarrierEngine(QlDeltaVolQuote* atmVol, QlDeltaVolQuote* vol25Put, QlDeltaVolQuote* vol25Call, QlQuote* spotFX, QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS, int adaptVanDelta, double bsPriceWithSmile, int series, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new VannaVolgaDoubleBarrierEngine<AnalyticDoubleBarrierEngine>(Handle<DeltaVolQuote>(*arg(atmVol)), Handle<DeltaVolQuote>(*arg(vol25Put)), Handle<DeltaVolQuote>(*arg(vol25Call)), *arg(spotFX), *arg(domesticTS), *arg(foreignTS), adaptVanDelta, bsPriceWithSmile, series))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBinomialDoubleBarrierEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlBinomialDoubleBarrierEngineAux(tree, *arg(process), timeSteps))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCDoubleBarrierEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCDoubleBarrierEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticCliquetEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticCliquetEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticCompoundOptionEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticCompoundOptionEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticContinuousFixedLookbackEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousFixedLookbackEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticContinuousFloatingLookbackEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousFloatingLookbackEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticContinuousPartialFloatingLookbackEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousPartialFloatingLookbackEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticContinuousPartialFixedLookbackEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousPartialFixedLookbackEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticContinuousGeometricAveragePriceAsianEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousGeometricAveragePriceAsianEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticContinuousGeometricAveragePriceAsianHestonEngine(QlHestonProcess* process, unsigned summationCutoff, double xiRightLimit, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticContinuousGeometricAveragePriceAsianHestonEngine(*arg(process), summationCutoff, xiRightLimit))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticDiscreteGeometricAveragePriceAsianHestonEngine(QlHestonProcess* process, double xiRightLimit, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticDiscreteGeometricAveragePriceAsianHestonEngine(*arg(process), xiRightLimit))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCLookbackFixedEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCLookbackFixedEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCLookbackFloatingEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCLookbackFloatingEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCLookbackPartialFixedEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCLookbackPartialFixedEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCLookbackPartialFloatingEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCLookbackPartialFloatingEngineAux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticDigitalAmericanEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticDigitalAmericanEngine(*arg(x0)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticDigitalAmericanKOEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticDigitalAmericanKOEngine(*arg(x0)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticDiscreteGeometricAveragePriceAsianEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticDiscreteGeometricAveragePriceAsianEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticDiscreteGeometricAverageStrikeAsianEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticDiscreteGeometricAverageStrikeAsianEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTurnbullWakemanAsianEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TurnbullWakemanAsianEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBlackScholesAsianEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned aGrid, FdmSchemeDesc *fdScheme, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesAsianEngine(*arg(process), tGrid, xGrid, aGrid, *arg(fdScheme)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlForwardEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new ForwardVanillaEngine<AnalyticEuropeanEngine>(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlForwardBaroneAdesiWhaleyEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new ForwardVanillaEngine<BaroneAdesiWhaleyApproximationEngine>(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlForwardBjerksundStenslandEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new ForwardVanillaEngine<BjerksundStenslandApproximationEngine>(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlForwardFdBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(allocAs<PricingEngine>(new ForwardVanillaEngine<hasquant::CheckedFdEngine<FdBlackScholesVanillaEngine>>(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlQuantoEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<VanillaOption, AnalyticEuropeanEngine>(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlQuantoForwardEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<ForwardVanillaOption, ForwardVanillaEngine<AnalyticEuropeanEngine> >(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlQuantoForwardPerformanceEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<ForwardVanillaOption, ForwardPerformanceVanillaEngine<AnalyticEuropeanEngine> >(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlQuantoBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<BarrierOption, AnalyticBarrierEngine>(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlQuantoDoubleBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new QuantoEngine<DoubleBarrierOption, AnalyticDoubleBarrierEngine>(*arg(process), *arg(foreignRiskFreeRate), *arg(exchangeRateVolatility), *arg(correlation)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticHestonForwardEuropeanEngine(QlHestonProcess* process, unsigned integrationOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonForwardEuropeanEngine(*arg(process), integrationOrder))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticDividendEuropeanEngine(QlGeneralizedBlackScholesProcess* x0, unsigned dividendsLen, QlDividend** dividends, QlError **e) { QlCallScope callbackScope(e);+  try {DividendSchedule d = qlVector(dividends, dividendsLen);+    return ret(new QlPricingEngine(alloc(new AnalyticDividendEuropeanEngine(*arg(x0), d))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticEuropeanEngine(QlGeneralizedBlackScholesProcess* x0, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticEuropeanEngine(*arg(x0), qlNullableHandle(arg(discountCurve))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticPerformanceEngine(QlGeneralizedBlackScholesProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticPerformanceEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBlackCapFloorEngine1(QlYieldTermStructure* discountCurve, QlOptionletVolatilityStructure* vol, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BlackCapFloorEngine(*arg(discountCurve), *arg(vol)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBlackCapFloorEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BlackCapFloorEngine(*arg(discountCurve), *arg(vol), (*arg(dc)), displacement))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBlackSwaptionEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, double displacement, int model, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BlackSwaptionEngine(*arg(discountCurve), *arg(vol), (*arg(dc)), displacement, (BlackSwaptionEngine::CashAnnuityModel)model))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlHaganIrregularSwaptionEngine(QlSwaptionVolatilityStructure* vol, QlYieldTermStructure* curve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new HaganIrregularSwaptionEngine(*arg(vol), qlNullableHandle(curve)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBlackSwaptionEngine1(QlYieldTermStructure* discountCurve, QlSwaptionVolatilityStructure* vol, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BlackSwaptionEngine(*arg(discountCurve), *arg(vol)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBachelierCapFloorEngine1(QlYieldTermStructure* discountCurve, QlOptionletVolatilityStructure* vol, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BachelierCapFloorEngine(*arg(discountCurve), *arg(vol)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBachelierCapFloorEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BachelierCapFloorEngine(*arg(discountCurve), *arg(vol), (*arg(dc))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBachelierSwaptionEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, int model, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BachelierSwaptionEngine(*arg(discountCurve), *arg(vol), (*arg(dc)), (BachelierSwaptionEngine::CashAnnuityModel)model))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBachelierSwaptionEngine1(QlYieldTermStructure* discountCurve, QlSwaptionVolatilityStructure* vol, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BachelierSwaptionEngine(*arg(discountCurve), *arg(vol)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}++void qlFreePricingEngine(QlPricingEngine *engine) {del(engine);}+void qlFreeBlackCalculator(QlBlackCalculator *o) {del(o);}+void qlFreeBlackScholesCalculator(QlBlackScholesCalculator *o) {del(o);}+QlBlackCalculator* qlBlackScholesCalculatorAsBlackCalculator(QlBlackScholesCalculator *o) {return ret(new QlBlackCalculator(*arg(o)));}++double qlBlackCalculatorAlpha(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->alpha();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorBeta(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->beta();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlBlackCalculator* qlBlackCalculator1(int optionType, double strike, double forward, double stdDev, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackCalculator(alloc(new BlackCalculator((Option::Type)optionType, strike, forward, stdDev, discount))));+  } catch (std::exception& er) {return handleException<QlBlackCalculator*>(e, er);}}+QlBlackCalculator* qlBlackCalculator(QlStrikedTypePayoff* payoff, double forward, double stdDev, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackCalculator(alloc(new BlackCalculator(*arg(payoff), forward, stdDev, discount))));+  } catch (std::exception& er) {return handleException<QlBlackCalculator*>(e, er);}}+double qlBlackCalculatorDelta(QlBlackCalculator* o, double spot, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->delta(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorDeltaForward(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->deltaForward();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorDividendRho(QlBlackCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->dividendRho(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorElasticity(QlBlackCalculator* o, double spot, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->elasticity(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorElasticityForward(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->elasticityForward();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorGamma(QlBlackCalculator* o, double spot, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->gamma(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorGammaForward(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->gammaForward();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorItmAssetProbability(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->itmAssetProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorItmCashProbability(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->itmCashProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorRho(QlBlackCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->rho(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorStrikeSensitivity(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->strikeSensitivity();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorStrikeGamma(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->strikeGamma();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorTheta(QlBlackCalculator* o, double spot, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->theta(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorThetaPerDay(QlBlackCalculator* o, double spot, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->thetaPerDay(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorValue(QlBlackCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->value();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorVanna(QlBlackCalculator* o, double spot, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->vanna(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorVega(QlBlackCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->vega(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalculatorVolga(QlBlackCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->volga(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeBachelierCalculator(QlBachelierCalculator *o) {del(o);}+double qlBachelierCalculatorAlpha(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->alpha();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorBeta(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->beta();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlBachelierCalculator* qlBachelierCalculator1(int optionType, double strike, double forward, double stdDev, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBachelierCalculator(alloc(new BachelierCalculator((Option::Type)optionType, strike, forward, stdDev, discount))));+  } catch (std::exception& er) {return handleException<QlBachelierCalculator*>(e, er);}}+QlBachelierCalculator* qlBachelierCalculator(QlStrikedTypePayoff* payoff, double forward, double stdDev, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBachelierCalculator(alloc(new BachelierCalculator(*arg(payoff), forward, stdDev, discount))));+  } catch (std::exception& er) {return handleException<QlBachelierCalculator*>(e, er);}}+double qlBachelierCalculatorDelta(QlBachelierCalculator* o, double spot, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->delta(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorDeltaForward(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->deltaForward();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorDividendRho(QlBachelierCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->dividendRho(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorElasticity(QlBachelierCalculator* o, double spot, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->elasticity(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorElasticityForward(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->elasticityForward();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorGamma(QlBachelierCalculator* o, double spot, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->gamma(spot);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorGammaForward(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->gammaForward();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorItmAssetProbability(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->itmAssetProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorItmCashProbability(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->itmCashProbability();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorRho(QlBachelierCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->rho(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorStrikeSensitivity(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->strikeSensitivity();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorStrikeGamma(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->strikeGamma();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorTheta(QlBachelierCalculator* o, double spot, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->theta(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorThetaPerDay(QlBachelierCalculator* o, double spot, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->thetaPerDay(spot, maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorValue(QlBachelierCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->value();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorVanna(QlBachelierCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->vanna(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorVega(QlBachelierCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->vega(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBachelierCalculatorVolga(QlBachelierCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->volga(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}++QlBlackScholesCalculator* qlBlackScholesCalculator1(int optionType, double strike, double spot, double growth, double stdDev, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackScholesCalculator(alloc(new BlackScholesCalculator((Option::Type)optionType, strike, spot, growth, stdDev, discount))));+  } catch (std::exception& er) {return handleException<QlBlackScholesCalculator*>(e, er);}}+QlBlackScholesCalculator* qlBlackScholesCalculator(QlStrikedTypePayoff* payoff, double spot, double growth, double stdDev, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackScholesCalculator(alloc(new BlackScholesCalculator(*arg(payoff), spot, growth, stdDev, discount))));+  } catch (std::exception& er) {return handleException<QlBlackScholesCalculator*>(e, er);}}+double qlBlackScholesCalculatorDelta(QlBlackScholesCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->delta();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackScholesCalculatorElasticity(QlBlackScholesCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->elasticity();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackScholesCalculatorGamma(QlBlackScholesCalculator* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->gamma();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackScholesCalculatorTheta(QlBlackScholesCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->theta(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackScholesCalculatorThetaPerDay(QlBlackScholesCalculator* o, double maturity, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->thetaPerDay(maturity);} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeBlackDeltaCalculator(BlackDeltaCalculator *o) {del(o);}+BlackDeltaCalculator* qlBlackDeltaCalculator(int optionType, int deltaType, double spot, double dDiscount, double fDiscount, double stdDev, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new BlackDeltaCalculator((Option::Type)optionType, (DeltaVolQuote::DeltaType)deltaType, spot, dDiscount, fDiscount, stdDev));+  } catch (std::exception& er) {return handleException<BlackDeltaCalculator*>(e, er);}}+double qlBlackDeltaCalculatorDeltaFromStrike(BlackDeltaCalculator* o, double strike, QlError **e) { QlCallScope callbackScope(e);try {return arg(o)->deltaFromStrike(strike);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackDeltaCalculatorStrikeFromDelta(BlackDeltaCalculator* o, double delta, QlError **e) { QlCallScope callbackScope(e);try {return arg(o)->strikeFromDelta(delta);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackDeltaCalculatorAtmStrike(BlackDeltaCalculator* o, int atmType, QlError **e) { QlCallScope callbackScope(e);try {return arg(o)->atmStrike((DeltaVolQuote::AtmType)atmType);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormula(int optionType, double strike, double forward, double stdDev, double discount, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormula((Option::Type)optionType, strike, forward, stdDev, discount, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaCashItmProbability(int optionType, double strike, double forward, double stdDev, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaCashItmProbability((Option::Type)optionType, strike, forward, stdDev, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaImpliedStdDev(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, double guess, double accuracy, unsigned maxIterations, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaImpliedStdDev((Option::Type)optionType, strike, forward, blackPrice, discount, displacement, guess, accuracy, maxIterations);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaImpliedStdDevApproximation(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaImpliedStdDevApproximation((Option::Type)optionType, strike, forward, blackPrice, discount, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaStdDevDerivative(double strike, double forward, double stdDev, double discount, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaStdDevDerivative(strike, forward, stdDev, discount, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaVolDerivative(double strike, double forward, double stdDev, double expiry, double discount, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaVolDerivative(strike, forward, stdDev, expiry, discount, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackScholesTheta(QlGeneralizedBlackScholesProcess* x0, double value, double delta, double gamma, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackScholesTheta(*arg(x0), value, delta, gamma);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBachelierBlackFormula(int optionType, double strike, double forward, double stdDev, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::bachelierBlackFormula((Option::Type)optionType, strike, forward, stdDev, discount);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaForwardDerivative(int optionType, double strike, double forward, double stdDev, double discount, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaForwardDerivative((Option::Type)optionType, strike, forward, stdDev, discount, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaImpliedStdDevChambers(int optionType, double strike, double forward, double blackPrice, double blackAtmPrice, double discount, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaImpliedStdDevChambers((Option::Type)optionType, strike, forward, blackPrice, blackAtmPrice, discount, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaImpliedStdDevApproximationRS(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaImpliedStdDevApproximationRS((Option::Type)optionType, strike, forward, blackPrice, discount, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaImpliedStdDevLiRS(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, double guess, double omega, double accuracy, unsigned maxIterations, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaImpliedStdDevLiRS((Option::Type)optionType, strike, forward, blackPrice, discount, displacement, guess, omega, accuracy, maxIterations);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaAssetItmProbability(int optionType, double strike, double forward, double stdDev, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaAssetItmProbability((Option::Type)optionType, strike, forward, stdDev, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBlackFormulaStdDevSecondDerivative(double strike, double forward, double stdDev, double discount, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::blackFormulaStdDevSecondDerivative(strike, forward, stdDev, discount, displacement);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBachelierBlackFormulaForwardDerivative(int optionType, double strike, double forward, double stdDev, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::bachelierBlackFormulaForwardDerivative((Option::Type)optionType, strike, forward, stdDev, discount);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBachelierBlackFormulaImpliedVol(int optionType, double strike, double forward, double tte, double bachelierPrice, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::bachelierBlackFormulaImpliedVol((Option::Type)optionType, strike, forward, tte, bachelierPrice, discount);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBachelierBlackFormulaImpliedVolChoi(int optionType, double strike, double forward, double tte, double bachelierPrice, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::bachelierBlackFormulaImpliedVolChoi((Option::Type)optionType, strike, forward, tte, bachelierPrice, discount);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBachelierBlackFormulaStdDevDerivative(double strike, double forward, double stdDev, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::bachelierBlackFormulaStdDevDerivative(strike, forward, stdDev, discount);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibBachelierBlackFormulaAssetItmProbability(int optionType, double strike, double forward, double stdDev, QlError **e) { QlCallScope callbackScope(e);+  try {return QuantLib::bachelierBlackFormulaAssetItmProbability((Option::Type)optionType, strike, forward, stdDev);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlQuantLibDefaultThetaPerDay(double theta, QlError **e) { QlCallScope callbackScope(e);try {return QuantLib::defaultThetaPerDay(theta);} catch (std::exception& er) {return handleException<double>(e, er);}}++QlPricingEngine* qlAnalyticBSMHullWhiteEngine(double equityShortRateCorrelation, QlGeneralizedBlackScholesProcess* x1, QlHullWhite* x2, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticBSMHullWhiteEngine(equityShortRateCorrelation, *arg(x1), *arg(x2)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticCapFloorEngine(QlAffineModel* model, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticCapFloorEngine(*arg(model), qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticGJRGARCHEngine(QlGJRGARCHModel* model, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticGJRGARCHEngine(*arg(model)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticHestonEngine(QlHestonModel* model, double relTolerance, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonEngine(*arg(model), relTolerance, maxEvaluations))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticH1HWEngine(QlHestonModel* model, QlHullWhite* hullWhiteModel, double rhoSr, unsigned integrationOrder, int exactMean, unsigned meanOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return h1HwEngine(*arg(model), *arg(hullWhiteModel), rhoSr, exactMean, meanOrder, integrationOrder);+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticHestonHullWhiteEngine(QlHestonModel* hestonModel, QlHullWhite* hullWhiteModel, unsigned integrationOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonHullWhiteEngine(*arg(hestonModel), *arg(hullWhiteModel), integrationOrder))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBatesEngine(QlBatesModel* model, unsigned integrationOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BatesEngine(*arg(model), integrationOrder))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFFTVanillaEngine(QlGeneralizedBlackScholesProcess* process, double logStrikeSpacing, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FFTVanillaEngine(*arg(process), logStrikeSpacing))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlG2SwaptionEngine(QlG2* model, double range, unsigned intervals, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new G2SwaptionEngine(*arg(model), range, intervals))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlJumpDiffusionEngine(QlMerton76Process* x0, double relativeAccuracy_, unsigned maxIterations, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new JumpDiffusionEngine(*arg(x0), relativeAccuracy_, maxIterations))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeCapFloorEngine(QlShortRateModel* model, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeCapFloorEngine(*arg(model), timeSteps, qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeSwaptionEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeSwaptionEngine(*arg(x0), timeSteps, qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeVanillaSwapEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeVanillaSwapEngine(*arg(x0), timeSteps, qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlVarianceGammaEngine(QlVarianceGammaProcess* x0, double absoluteError, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new VarianceGammaEngine(*arg(x0), absoluteError))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticHestonEngine1(QlHestonModel* model, unsigned integrationOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonEngine(*arg(model), integrationOrder))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+int qlAnalyticHestonEngineOptimalControlVariate(double t, double v0, double kappa, double theta, double sigma, double rho) {+  return AnalyticHestonEngine::optimalControlVariate(t, v0, kappa, theta, sigma, rho);+}+QlPricingEngine* qlAnalyticHestonHullWhiteEngine1(QlHestonModel* model, QlHullWhite* hullWhiteModel, double relTolerance, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticHestonHullWhiteEngine(*arg(model), *arg(hullWhiteModel), relTolerance, maxEvaluations))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticH1HWEngine1(QlHestonModel* model, QlHullWhite* hullWhiteModel, double rhoSr, double relTolerance, unsigned maxEvaluations, int exactMean, unsigned meanOrder, QlError **e) { QlCallScope callbackScope(e);+  try {+    // Enforce the correlation restriction on older QuantLib tolerance constructors too.+    QL_REQUIRE(rhoSr >= 0.0, "Fourier integration is not stable if the equity interest rate correlation is negative");+    return h1HwEngine(*arg(model), *arg(hullWhiteModel), rhoSr, exactMean, meanOrder, relTolerance, maxEvaluations);+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBatesEngine1(QlBatesModel* model, double relTolerance, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BatesEngine(*arg(model), relTolerance, maxEvaluations))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBaroneAdesiWhaleyApproximationEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BaroneAdesiWhaleyApproximationEngine(*arg(x0)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBatesDetJumpEngine1(QlBatesDetJumpModel* model, double relTolerance, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BatesDetJumpEngine(*arg(model), relTolerance, maxEvaluations))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBatesDetJumpEngine(QlBatesDetJumpModel* model, unsigned integrationOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BatesDetJumpEngine(*arg(model), integrationOrder))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBatesDoubleExpDetJumpEngine1(QlBatesDoubleExpDetJumpModel* model, double relTolerance, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BatesDoubleExpDetJumpEngine(*arg(model), relTolerance, maxEvaluations))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBatesDoubleExpDetJumpEngine(QlBatesDoubleExpDetJumpModel* model, unsigned integrationOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BatesDoubleExpDetJumpEngine(*arg(model), integrationOrder))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBatesDoubleExpEngine1(QlBatesDoubleExpModel* model, double relTolerance, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BatesDoubleExpEngine(*arg(model), relTolerance, maxEvaluations))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBatesDoubleExpEngine(QlBatesDoubleExpModel* model, unsigned integrationOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BatesDoubleExpEngine(*arg(model), integrationOrder))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBjerksundStenslandApproximationEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BjerksundStenslandApproximationEngine(*arg(x0)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlQdPlusAmericanEngine(QlGeneralizedBlackScholesProcess* process, unsigned interpolationPoints, int solverType, double eps, unsigned maxIter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new QdPlusAmericanEngine(*arg(process), interpolationPoints, (QdPlusAmericanEngine::SolverType)solverType, eps, Size(maxIter)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlQdFpAmericanEngine(QlGeneralizedBlackScholesProcess* process, int scheme, int fpEquation, QlError **e) { QlCallScope callbackScope(e);+  try {+    ext::shared_ptr<QdFpIterationScheme> iterationScheme;+    switch (scheme) {+      case hasquant::FastScheme: iterationScheme = QdFpAmericanEngine::fastScheme(); break;+      case hasquant::HighPrecisionScheme: iterationScheme = QdFpAmericanEngine::highPrecisionScheme(); break;+      default: iterationScheme = QdFpAmericanEngine::accurateScheme(); break;+    }+    return ret(new QlPricingEngine(alloc(new QdFpAmericanEngine(*arg(process), iterationScheme, (QdFpAmericanEngine::FixedPointEquation)fpEquation))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlContinuousArithmeticAsianVecerEngine(QlGeneralizedBlackScholesProcess* process, QlQuote* currentAverage, int startDate, unsigned timeSteps, unsigned assetSteps, double zMin, double zMax, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new ContinuousArithmeticAsianVecerEngine(*arg(process), qlNullableHandle(arg(currentAverage)), Date(startDate), timeSteps, assetSteps, zMin, zMax))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBlackCdsOptionEngine(QlDefaultProbabilityTermStructure* probability, double recoveryRate, QlYieldTermStructure* termStructure, QlQuote* vol, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BlackCdsOptionEngine(Handle<DefaultProbabilityTermStructure>(*arg(probability)), recoveryRate, *arg(termStructure), *arg(vol)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlIntegralCdsEngine(int l, int u, QlDefaultProbabilityTermStructure* x1, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new IntegralCdsEngine(Period(l, (TimeUnit)u), Handle<DefaultProbabilityTermStructure>(*arg(x1)), recoveryRate, *arg(discountCurve), qlOptBool(includeSettlementDateFlows)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlIntegralEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new IntegralEngine(*arg(x0)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlJamshidianSwaptionEngine(QlOneFactorAffineModel* model, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new JamshidianSwaptionEngine(*arg(model), qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlJuQuadraticApproximationEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new JuQuadraticApproximationEngine(*arg(x0)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlKirkEngine(QlBlackProcess* process1, QlBlackProcess* process2, double correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new KirkEngine(*arg(process1), *arg(process2), correlation))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlIsdaCdsEngine(QlDefaultProbabilityTermStructure* x0, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int numericalFix, int accrualBias, int forwardsInCouponPeriod, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new IsdaCdsEngine(Handle<DefaultProbabilityTermStructure>(*arg(x0)), recoveryRate, *arg(discountCurve), qlOptBool(includeSettlementDateFlows),+      (IsdaCdsEngine::NumericalFix)numericalFix, (IsdaCdsEngine::AccrualBias)accrualBias, (IsdaCdsEngine::ForwardsInCouponPeriod)forwardsInCouponPeriod))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMidPointCdsEngine(QlDefaultProbabilityTermStructure* x0, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new MidPointCdsEngine(Handle<DefaultProbabilityTermStructure>(*arg(x0)), recoveryRate, *arg(discountCurve), qlOptBool(includeSettlementDateFlows)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMidPointCDOEngine(QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new MidPointCDOEngine(*arg(discountCurve)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlIntegralCDOEngine(QlYieldTermStructure* discountCurve, int l, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new IntegralCDOEngine(*arg(discountCurve), Period(l, (TimeUnit)u)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlIntegralNtdEngine(int l, int u, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new IntegralNtdEngine(Period(l, (TimeUnit)u), *arg(discountCurve)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlReplicatingVarianceSwapEngine(QlGeneralizedBlackScholesProcess* process, double dk, unsigned callStrikesLen, double* callStrikes, unsigned putStrikesLen, double* putStrikes, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new ReplicatingVarianceSwapEngine(*arg(process), dk, std::vector<double>(callStrikes, callStrikes+callStrikesLen), std::vector<double>(putStrikes, putStrikes+putStrikesLen)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlStulzEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new StulzEngine(*arg(process1), *arg(process2), correlation))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBjerksundStenslandSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BjerksundStenslandSpreadEngine(*arg(process1), *arg(process2), correlation))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlOperatorSplittingSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, int order, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new OperatorSplittingSpreadEngine(*arg(process1), *arg(process2), correlation, (OperatorSplittingSpreadEngine::Order)order))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlPearsonSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, double integrationTolerance, unsigned maxIntegrationIterations, double nStd, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new PearsonSpreadEngine(*arg(process1), *arg(process2), correlation, integrationTolerance, maxIntegrationIterations, nStd))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlGaussianCopulaSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, unsigned nPoints, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new GaussianCopulaSpreadEngine(*arg(process1), *arg(process2), correlation, nPoints))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFd2dBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* p1, QlGeneralizedBlackScholesProcess* p2, double correlation, unsigned xGrid, unsigned yGrid, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, int localVol, double illegalLocalVolOverwrite, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new Fd2dBlackScholesVanillaEngine(*arg(p1), *arg(p2), correlation, xGrid, yGrid, tGrid, dampingSteps, *arg(schemeDesc), localVol, illegalLocalVolOverwrite))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlChoiBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, double lambda, unsigned maxNrIntegrationSteps, int calcfwdDelta, int controlVariate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new ChoiBasketEngine(qlVector(processes, processesLen), qlMatrix(rho, rhoRows, rhoCols), lambda, maxNrIntegrationSteps, calcfwdDelta, controlVariate))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlDengLiZhouBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new DengLiZhouBasketEngine(qlVector(processes, processesLen), qlMatrix(rho, rhoRows, rhoCols)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdndimBlackScholesVanillaEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, unsigned xGridsLen, unsigned* xGrids, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdndimBlackScholesVanillaEngine(qlVector(processes, processesLen), qlMatrix(rho, rhoRows, rhoCols), std::vector<Size>(xGrids, xGrids+xGridsLen), tGrid, dampingSteps, *arg(schemeDesc)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdndimBlackScholesVanillaEngine1(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, unsigned xGrid, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdndimBlackScholesVanillaEngine(qlVector(processes, processesLen), qlMatrix(rho, rhoRows, rhoCols), xGrid, tGrid, dampingSteps, *arg(schemeDesc)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlSingleFactorBsmBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, double xTol, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new SingleFactorBsmBasketEngine(qlVector(processes, processesLen), xTol))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlLfmSwaptionEngine(QlLiborForwardModel* model, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new LfmSwaptionEngine(*arg(model), *arg(discountCurve)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeCapFloorEngine1(QlShortRateModel* model, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeCapFloorEngine(*arg(model), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeSwaptionEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeSwaptionEngine(*arg(x0), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeVanillaSwapEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeVanillaSwapEngine(*arg(x0), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdG2SwaptionEngine(QlG2* model, unsigned tGrid, unsigned xGrid, unsigned yGrid, unsigned dampingSteps, double invEps, FdmSchemeDesc *schemeDesc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdG2SwaptionEngine(*arg(model), tGrid, xGrid, yGrid, dampingSteps, invEps, *arg(schemeDesc)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHullWhiteSwaptionEngine(QlHullWhite* model, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, double invEps, FdmSchemeDesc *schemeDesc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdHullWhiteSwaptionEngine(*arg(model), tGrid, xGrid, dampingSteps, invEps, *arg(schemeDesc)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCVarianceSwapEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCVarianceSwapEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCHestonHullWhiteEngine1(int rngtrait, int stattrait, QlHybridHestonHullWhiteProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCHestonHullWhiteEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, antitheticVariate, controlVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCAmericanEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned polynomOrder, int polynomType, unsigned nCalibrationSamples, int antitheticVariateCalibration, unsigned seedCalibration, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCAmericanEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, antitheticVariate, controlVariate, requiredSamples, requiredTolerance, maxSamples, seed, polynomOrder, (LsmBasisSystem::PolynomialType)polynomType, nCalibrationSamples, qlOptBool(antitheticVariateCalibration), seedCalibration))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCBarrierEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, int isBiased, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCBarrierEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, isBiased, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCDigitalEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCDigitalEngine1Aux(rngtrait, stattrait, *arg(x0), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCForwardEuropeanBSEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCForwardEuropeanBSEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCForwardEuropeanHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, int controlVariate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCForwardEuropeanHestonEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed, controlVariate))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCDiscreteArithmeticAPEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteArithmeticAPEngine1Aux(rngtrait, stattrait, *arg(process), brownianBridge, antitheticVariate, controlVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCDiscreteArithmeticASEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteArithmeticASEngine1Aux(rngtrait, stattrait, *arg(process), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCDiscreteArithmeticAPHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned timeSteps, unsigned timeStepsPerYear, int controlVariate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteArithmeticAPHestonEngine1Aux(rngtrait, stattrait, *arg(process), antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed, timeSteps, timeStepsPerYear, controlVariate))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCDiscreteGeometricAPHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned timeSteps, unsigned timeStepsPerYear, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteGeometricAPHestonEngine1Aux(rngtrait, stattrait, *arg(process), antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed, timeSteps, timeStepsPerYear))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCDiscreteGeometricAPEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCDiscreteGeometricAPEngine1Aux(rngtrait, stattrait, *arg(process), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCEuropeanEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCEuropeanEngine1Aux(rngtrait, stattrait, *arg(process), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCEuropeanGJRGARCHEngine1(int rngtrait, int stattrait, QlGJRGARCHProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCEuropeanGJRGARCHEngine1Aux(rngtrait, stattrait, *arg(x0), timeSteps, timeStepsPerYear, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCEuropeanHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCEuropeanHestonEngine1Aux(rngtrait, stattrait, *arg(x0), timeSteps, timeStepsPerYear, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlIntegralHestonVarianceOptionEngine(QlHestonProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new IntegralHestonVarianceOptionEngine(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCHullWhiteCapFloorEngine1(int rngtrait, int stattrait, QlHullWhite* model, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCHullWhiteCapFloorEngine1Aux(rngtrait, stattrait, *arg(model), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCHimalayaEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCHimalayaEngine1Aux(rngtrait, stattrait, *arg(processes), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCPagodaEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCPagodaEngine1Aux(rngtrait, stattrait, *arg(processes), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCEverestEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCEverestEngine1Aux(rngtrait, stattrait, *arg(processes), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCEuropeanBasketEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCEuropeanBasketEngine1Aux(rngtrait, stattrait, *arg(processes), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCAmericanBasketEngine1(int rngtrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned nCalibrationSamples, unsigned polynomialOrder, int polynomialType, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCAmericanBasketEngine1Aux(rngtrait, *arg(processes), timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed, nCalibrationSamples, polynomialOrder, (LsmBasisSystem::PolynomialType)polynomialType))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlMCPerformanceEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlMCPerformanceEngine1Aux(rngtrait, stattrait, *arg(process), brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBinomialVanillaEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlBinomialVanillaEngineAux(tree, *arg(process), timeSteps))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(qlFdBlackScholesVanillaEngineAux(*arg(process), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite, cashDividendModel))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBlackScholesVanillaEngine1(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(allocAs<PricingEngine>(new hasquant::CheckedFdEngine<FdBlackScholesVanillaEngine>(*arg(process), qlVector(dividends, dividendsLen), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite, (FdBlackScholesVanillaEngine::CashDividendModel)cashDividendModel))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBlackScholesVanillaEngine2(QlGeneralizedBlackScholesProcess* process, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(allocAs<PricingEngine>(new hasquant::CheckedFdEngine<FdBlackScholesVanillaEngine>(*arg(process), quantoHelper ? *arg(quantoHelper) : shared_ptr<FdmQuantoHelper>(), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite, (FdBlackScholesVanillaEngine::CashDividendModel)cashDividendModel))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBlackScholesVanillaEngine3(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(allocAs<PricingEngine>(new hasquant::CheckedFdEngine<FdBlackScholesVanillaEngine>(*arg(process), qlVector(dividends, dividendsLen), quantoHelper ? *arg(quantoHelper) : shared_ptr<FdmQuantoHelper>(), tGrid, xGrid, dampingSteps, *arg(fdScheme), localVol, illegalLocalVolOverwrite, (FdBlackScholesVanillaEngine::CashDividendModel)cashDividendModel))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHestonVanillaEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(allocAs<PricingEngine>(new hasquant::CheckedFdEngine<FdHestonVanillaEngine>(*arg(model), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHestonVanillaEngine1(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(allocAs<PricingEngine>(new hasquant::CheckedFdEngine<FdHestonVanillaEngine>(*arg(model), qlVector(dividends, dividendsLen), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlCOSHestonEngine(QlHestonModel* model, double L, unsigned N, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new COSHestonEngine(*arg(model), L, N))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlAnalyticPDFHestonEngine(QlHestonModel* model, double eps, unsigned integrationOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new AnalyticPDFHestonEngine(*arg(model), eps, integrationOrder))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBatesVanillaEngine(QlBatesModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdBatesVanillaEngine(*arg(model), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBatesVanillaEngine1(QlBatesModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdBatesVanillaEngine(*arg(model), qlVector(dividends, dividendsLen), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBlackScholesShoutEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesShoutEngine(*arg(process), tGrid, xGrid, dampingSteps, *arg(fdScheme)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdBlackScholesShoutEngine1(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdBlackScholesShoutEngine(*arg(process), qlVector(dividends, dividendsLen), tGrid, xGrid, dampingSteps, *arg(fdScheme)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHestonVanillaEngine2(QlHestonModel* model, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(allocAs<PricingEngine>(new hasquant::CheckedFdEngine<FdHestonVanillaEngine>(*arg(model), quantoHelper ? *arg(quantoHelper) : shared_ptr<FdmQuantoHelper>(), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHestonVanillaEngine3(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(allocAs<PricingEngine>(new hasquant::CheckedFdEngine<FdHestonVanillaEngine>(*arg(model), qlVector(dividends, dividendsLen), quantoHelper ? *arg(quantoHelper) : shared_ptr<FdmQuantoHelper>(), tGrid, xGrid, vGrid, dampingSteps, *arg(fdScheme), leverageFct ? *arg(leverageFct) : shared_ptr<LocalVolTermStructure>(), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHestonHullWhiteVanillaEngine(QlHestonModel* model, QlHullWhiteProcess* hwProcess, double corrEquityShortRate, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned rGrid, unsigned dampingSteps, int controlVariate, FdmSchemeDesc *fdScheme, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdHestonHullWhiteVanillaEngine(*arg(model), *arg(hwProcess), corrEquityShortRate, tGrid, xGrid, vGrid, rGrid, dampingSteps, controlVariate, *arg(fdScheme)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlFdHestonHullWhiteVanillaEngine1(QlHestonModel* model, QlHullWhiteProcess* hwProcess, unsigned dividendsLen, QlDividend** dividends, double corrEquityShortRate, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned rGrid, unsigned dampingSteps, int controlVariate, FdmSchemeDesc *fdScheme, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new FdHestonHullWhiteVanillaEngine(*arg(model), *arg(hwProcess), qlVector(dividends, dividendsLen), corrEquityShortRate, tGrid, xGrid, vGrid, rGrid, dampingSteps, controlVariate, *arg(fdScheme)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBinomialConvertibleEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, QlQuote* creditSpread, unsigned dividendsLen, QlDividend** dividends, QlError **e) { QlCallScope callbackScope(e);+  try {const Handle<Quote>& cs = *arg(creditSpread); DividendSchedule d = qlVector(dividends, dividendsLen);+    return ret(new QlPricingEngine(alloc(qlBinomialConvertibleEngineAux(tree, *arg(process), timeSteps, cs, d))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBlackCallableFixedRateBondEngine1(QlCallableBondVolatilityStructure* yieldVolStructure, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BlackCallableFixedRateBondEngine(Handle<CallableBondVolatilityStructure>(*arg(yieldVolStructure)), *arg(discountCurve)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBlackCallableFixedRateBondEngine(QlQuote* fwdYieldVol, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BlackCallableFixedRateBondEngine(*arg(fwdYieldVol), *arg(discountCurve)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBlackCallableZeroCouponBondEngine1(QlCallableBondVolatilityStructure* yieldVolStructure, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BlackCallableZeroCouponBondEngine(Handle<CallableBondVolatilityStructure>(*arg(yieldVolStructure)), *arg(discountCurve)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlBlackCallableZeroCouponBondEngine(QlQuote* fwdYieldVol, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new BlackCallableZeroCouponBondEngine(*arg(fwdYieldVol), *arg(discountCurve)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeCallableFixedRateBondEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeCallableFixedRateBondEngine(*arg(x0), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeCallableFixedRateBondEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeCallableFixedRateBondEngine(*arg(x0), timeSteps, qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeCallableZeroCouponBondEngine1(QlShortRateModel* model, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeCallableZeroCouponBondEngine(*arg(model), *arg(timeGrid), qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlTreeCallableZeroCouponBondEngine(QlShortRateModel* model, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new TreeCallableZeroCouponBondEngine(*arg(model), timeSteps, qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}++FdmSchemeDesc* qlFdmSchemeDesc(int type, double theta, double mu, QlError **e) { QlCallScope callbackScope(e);try {return alloc(new FdmSchemeDesc((FdmSchemeDesc::FdmSchemeType)type, theta, mu));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}+FdmSchemeDesc* qlFdmSchemeDescCraigSneyd(QlError **e) { QlCallScope callbackScope(e);try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::CraigSneyd()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}+FdmSchemeDesc* qlFdmSchemeDescDouglas(QlError **e) { QlCallScope callbackScope(e);try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::Douglas()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}+FdmSchemeDesc* qlFdmSchemeDescExplicitEuler(QlError **e) { QlCallScope callbackScope(e);try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::ExplicitEuler()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}+FdmSchemeDesc* qlFdmSchemeDescHundsdorfer(QlError **e) { QlCallScope callbackScope(e);try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::Hundsdorfer()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}+FdmSchemeDesc* qlFdmSchemeDescImplicitEuler(QlError **e) { QlCallScope callbackScope(e);try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::ImplicitEuler()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}+FdmSchemeDesc* qlFdmSchemeDescModifiedCraigSneyd(QlError **e) { QlCallScope callbackScope(e);try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::ModifiedCraigSneyd()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}+FdmSchemeDesc* qlFdmSchemeDescModifiedHundsdorfer(QlError **e) { QlCallScope callbackScope(e);try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::ModifiedHundsdorfer()));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}+FdmSchemeDesc* qlFdmSchemeDescMethodOfLines(double eps, double relInitStepSize, QlError **e) { QlCallScope callbackScope(e);try {return alloc(new FdmSchemeDesc(FdmSchemeDesc::MethodOfLines(eps, relInitStepSize)));} catch (std::exception& er) {return handleException<FdmSchemeDesc*>(e, er);}}+void qlFreeFdmSchemeDesc(FdmSchemeDesc *o) {del(o);}++// Drives FdmBackwardSolver::rollback with a Haskell-defined operator/step condition instead of a+// bound mesher+FdmInnerValueCalculator -- see QuantLib.Method.fdmRollback's haddock and the+// HsFdmLinearOpComposite/HsFdmStepCondition comments above. bcSet is always the empty+// FdmBoundaryConditionSet(); boundary conditions are not bound. A null stepCondFn means no step+// condition at all (matches FdmBackwardSolver's own null-condition default, an empty+// FdmStepConditionComposite({}, {})).+void qlFdmRollback(unsigned opSize, QlCallback* applyFn, QlCallback* applyDirFn, QlCallback* solveSplitFn,+                    QlCallback* stepCondFn, unsigned stoppingTimesLen, double* stoppingTimes,+                    FdmSchemeDesc* schemeDesc,+                    unsigned gridLen, double* grid,+                    double from, double to, unsigned steps, unsigned dampingSteps,+                    unsigned* outLen, double** outValues, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {+    ext::shared_ptr<FdmLinearOpComposite> map(alloc(new HsFdmLinearOpComposite(opSize, *arg(applyFn), *arg(applyDirFn), *arg(solveSplitFn))));+    FdmStepConditionComposite::Conditions conditions;+    std::list<std::vector<Time> > stoppingTimesList;+    if (stepCondFn) {+      conditions.push_back(ext::shared_ptr<StepCondition<Array> >(alloc(new HsFdmStepCondition(*arg(stepCondFn)))));+      stoppingTimesList.push_back(std::vector<Time>(stoppingTimes, stoppingTimes + stoppingTimesLen));+    }+    ext::shared_ptr<FdmStepConditionComposite> condition(alloc(new FdmStepConditionComposite(stoppingTimesList, conditions)));+    FdmBackwardSolver solver(map, FdmBoundaryConditionSet(), condition, *arg(schemeDesc));+    Array a(grid, grid + gridLen);+    solver.rollback(a, from, to, steps, dampingSteps);+    return a;+  }, outLen, outValues);+  } catch (std::exception& er) {qlSetError(e, er.what());}}++void qlFreeFdm1dMesher(QlFdm1dMesher *o) {del(o);}+void qlFreeFdmMesher(QlFdmMesher *o) {del(o);}++QlFdm1dMesher* qlPredefined1dMesher(unsigned len, double* points, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdm1dMesher(alloc(new Predefined1dMesher(std::vector<Real>(points, points + len)))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlUniform1dMesher(double start, double end, unsigned size, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdm1dMesher(alloc(new Uniform1dMesher(start, end, size))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlConcentrating1dMesher(double start, double end, unsigned size, double cPointLoc, double cPointDensity, int requireCPoint, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdm1dMesher(alloc(new Concentrating1dMesher(start, end, size, std::pair<Real, Real>(cPointLoc, cPointDensity), requireCPoint))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlConcentrating1dMesherMulti(double start, double end, unsigned size, unsigned cPointsLen, double* cPointLoc, double* cPointDensity, int* cPointRequire, double tol, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<std::tuple<Real, Real, bool> > cPoints;+    cPoints.reserve(cPointsLen);+    for (unsigned i = 0; i < cPointsLen; ++i)+      cPoints.push_back(std::make_tuple(cPointLoc[i], cPointDensity[i], cPointRequire[i] != 0));+    return ret(new QlFdm1dMesher(alloc(new Concentrating1dMesher(start, end, size, cPoints, tol))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlGluedMesher(QlFdm1dMesher* left, QlFdm1dMesher* right, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdm1dMesher(alloc(new Glued1dMesher(**arg(left), **arg(right)))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlFdmBlackScholesMesher(unsigned size, QlGeneralizedBlackScholesProcess* process, double maturity, double strike,+    double xMinConstraint, double xMaxConstraint, double eps, double scaleFactor, double cPointLoc, double cPointDensity,+    unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* fdmQuantoHelper, double spotAdjustment, QlError **e) { QlCallScope callbackScope(e);+  try {DividendSchedule d = qlVector(dividends, dividendsLen);+    return ret(new QlFdm1dMesher(alloc(new FdmBlackScholesMesher(size, *arg(process), maturity, strike,+      xMinConstraint, xMaxConstraint, eps, scaleFactor, std::pair<Real, Real>(cPointLoc, cPointDensity), d,+      fdmQuantoHelper ? *arg(fdmQuantoHelper) : shared_ptr<FdmQuantoHelper>(), spotAdjustment))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlFdmCev1dMesher(unsigned size, double f0, double alpha, double beta, double maturity, double eps, double scaleFactor, double cPointLoc, double cPointDensity, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdm1dMesher(alloc(new FdmCEV1dMesher(size, f0, alpha, beta, maturity, eps, scaleFactor, std::pair<Real, Real>(cPointLoc, cPointDensity)))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlExponentialJump1dMesher(unsigned steps, double beta, double jumpIntensity, double eta, double eps, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdm1dMesher(alloc(new ExponentialJump1dMesher(steps, beta, jumpIntensity, eta, eps))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlFdmSimpleProcess1dMesher(unsigned size, QlStochasticProcess1D* process, double maturity, unsigned tAvgSteps, double epsilon, double mandatoryPoint, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdm1dMesher(alloc(new FdmSimpleProcess1dMesher(size, *arg(process), maturity, tAvgSteps, epsilon, mandatoryPoint))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlFdmHestonVarianceMesher(unsigned size, QlHestonProcess* process, double maturity, unsigned tAvgSteps, double epsilon, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdm1dMesher(alloc(new FdmHestonVarianceMesher(size, *arg(process), maturity, tAvgSteps, epsilon, mixingFactor))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdm1dMesher* qlFdmHestonLocalVolatilityVarianceMesher(unsigned size, QlHestonProcess* process, QlLocalVolTermStructure* leverageFct, double maturity, unsigned tAvgSteps, double epsilon, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdm1dMesher(alloc(new FdmHestonLocalVolatilityVarianceMesher(size, *arg(process), *arg(leverageFct), maturity, tAvgSteps, epsilon, mixingFactor))));+  } catch (std::exception& er) {return handleException<QlFdm1dMesher*>(e, er);}}+QlFdmMesher* qlFdmMesherComposite(unsigned meshersLen, QlFdm1dMesher** meshers, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdmMesher(alloc(new FdmMesherComposite(qlVector(meshers, meshersLen)))));+  } catch (std::exception& er) {return handleException<QlFdmMesher*>(e, er);}}+void qlFdmMesherLocations(QlFdmMesher* mesher, unsigned direction, unsigned* outLen, double** outValues, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(mesher))->locations(direction);}, outLen, outValues);+  } catch (std::exception& er) {qlSetError(e, er.what());}}++void qlFreeFdmInnerValueCalculator(QlFdmInnerValueCalculator *o) {del(o);}++// Give Haskell-defined inner-value callbacks a reusable QlFdmInnerValueCalculator lifetime.+QlFdmInnerValueCalculator* qlFdmInnerValueCalculatorFromFunctions(QlFdmMesher* mesher, QlCallback* innerValueFn, QlCallback* avgInnerValueFn, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdmInnerValueCalculator(alloc(new HsFdmInnerValueCalculator(*arg(mesher), *arg(innerValueFn), *arg(avgInnerValueFn)))));+  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}++double qlFdmInnerValueCalculatorEval(QlFdmInnerValueCalculator* calc, QlFdmMesher* mesher, unsigned ndims, unsigned* coords, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(calc))->innerValue(fdmIteratorAt(mesher, ndims, coords), t);+  } catch (std::exception& er) {qlSetError(e, er.what()); return 0.0;}}+double qlFdmInnerValueCalculatorAvgEval(QlFdmInnerValueCalculator* calc, QlFdmMesher* mesher, unsigned ndims, unsigned* coords, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(calc))->avgInnerValue(fdmIteratorAt(mesher, ndims, coords), t);+  } catch (std::exception& er) {qlSetError(e, er.what()); return 0.0;}}++// Sibling of qlFdmRollback that derives its own initial grid from a mesher + a (native or+// Haskell-callback-driven) FdmInnerValueCalculator (calc->avgInnerValue(iter, maturity) per node)+// instead of taking a precomputed array -- everything else (operator/step-condition/scheme/+// rollback) is identical, reusing HsFdmLinearOpComposite/HsFdmStepCondition verbatim.+// Fdm1DimSolver/FdmNdimSolver themselves (their own LazyObject caching and spline interpolation)+// are not bound; a caller wanting interpolation combines this function's result with+// qlFdmMesherLocations itself.+void qlFdmSolve(QlFdmMesher* mesher, QlFdmInnerValueCalculator* calculator,+                unsigned opSize, QlCallback* applyFn, QlCallback* applyDirFn, QlCallback* solveSplitFn,+                QlCallback* stepCondFn, unsigned stoppingTimesLen, double* stoppingTimes,+                FdmSchemeDesc* schemeDesc,+                double maturity, double to, unsigned steps, unsigned dampingSteps,+                unsigned* outLen, double** outValues, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {+    shared_ptr<FdmMesher> m = *arg(mesher);+    shared_ptr<FdmInnerValueCalculator> calc = *arg(calculator);+    Array a(m->layout()->size());+    for (const auto& iter : *m->layout())+      a[iter.index()] = calc->avgInnerValue(iter, maturity);++    ext::shared_ptr<FdmLinearOpComposite> map(alloc(new HsFdmLinearOpComposite(opSize, *arg(applyFn), *arg(applyDirFn), *arg(solveSplitFn))));+    FdmStepConditionComposite::Conditions conditions;+    std::list<std::vector<Time> > stoppingTimesList;+    if (stepCondFn) {+      conditions.push_back(ext::shared_ptr<StepCondition<Array> >(alloc(new HsFdmStepCondition(*arg(stepCondFn)))));+      stoppingTimesList.push_back(std::vector<Time>(stoppingTimes, stoppingTimes + stoppingTimesLen));+    }+    ext::shared_ptr<FdmStepConditionComposite> condition(alloc(new FdmStepConditionComposite(stoppingTimesList, conditions)));+    FdmBackwardSolver solver(map, FdmBoundaryConditionSet(), condition, *arg(schemeDesc));+    solver.rollback(a, maturity, to, steps, dampingSteps);+    return a;+  }, outLen, outValues);+  } catch (std::exception& er) {qlSetError(e, er.what());}}++// Native inner-value calculators avoid per-node Haskell callbacks and return the shared base type.+QlFdmInnerValueCalculator* qlFdmZeroInnerValue(QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmZeroInnerValue())));+  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}++QlFdmInnerValueCalculator* qlFdmCellAveragingInnerValue(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmCellAveragingInnerValue(*arg(payoff), *arg(mesher), direction))));+  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}++// gridMapping is a genuine per-node Haskell callback (invoked from inside avgInnerValueCalc's+// Simpson integration and from every innerValue call), unlike the identity-mapping ctor above --+// see QuantLib.Method.withCustomCellAveragingInnerValue's haddock for why its Haskell wrapper must+// be continuation-style, same reasoning as qlFdmInnerValueCalculatorFromFunctions/+// withCustomFdmInnerValueCalculator.+QlFdmInnerValueCalculator* qlFdmCellAveragingInnerValueMapped(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, QlCallback* mappingFn, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmCellAveragingInnerValue(*arg(payoff), *arg(mesher), direction,+    hasquant::UnaryCallback{*arg(mappingFn)}))));+  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}++QlFdmInnerValueCalculator* qlFdmLogInnerValue(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmLogInnerValue(*arg(payoff), *arg(mesher), direction))));+  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}++QlFdmInnerValueCalculator* qlFdmLogBasketInnerValue(QlBasketPayoff* payoff, QlFdmMesher* mesher, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFdmInnerValueCalculator(alloc(new FdmLogBasketInnerValue(*arg(payoff), *arg(mesher)))));+  } catch (std::exception& er) {return handleException<QlFdmInnerValueCalculator*>(e, er);}}++QlFdmInnerValueCalculator* qlFdmAffineG2ModelSwapInnerValue(QlG2* disModel, QlG2* fwdModel, QlFixedVsFloatingSwap* swap,+    unsigned exDatesLen, double* exerciseTimes, int* exerciseDates, QlFdmMesher* mesher, unsigned direction, QlError **e) { QlCallScope callbackScope(e);+  return fdmAffineModelSwapInnerValue<G2>(disModel, fwdModel, swap, exDatesLen, exerciseTimes, exerciseDates, mesher, direction, e);+}+QlFdmInnerValueCalculator* qlFdmAffineHullWhiteModelSwapInnerValue(QlHullWhite* disModel, QlHullWhite* fwdModel, QlFixedVsFloatingSwap* swap,+    unsigned exDatesLen, double* exerciseTimes, int* exerciseDates, QlFdmMesher* mesher, unsigned direction, QlError **e) { QlCallScope callbackScope(e);+  return fdmAffineModelSwapInnerValue<HullWhite>(disModel, fwdModel, swap, exDatesLen, exerciseTimes, exerciseDates, mesher, direction, e);+}++void qlFreeFdmQuantoHelper(QlFdmQuantoHelper *o) {del(o);}+QlFdmQuantoHelper* qlFdmQuantoHelper(QlYieldTermStructure* rTS, QlYieldTermStructure* fTS, QlBlackVolTermStructure* fxVolTS, double equityFxCorrelation, double exchRateATMlevel, QlError **e) { QlCallScope callbackScope(e);+  try {shared_ptr<YieldTermStructure> r = (*arg(rTS)).currentLink(), f = (*arg(fTS)).currentLink();+    shared_ptr<BlackVolTermStructure> fxVol = (*arg(fxVolTS)).currentLink();+    return ret(new QlFdmQuantoHelper(alloc(new FdmQuantoHelper(r, f, fxVol, equityFxCorrelation, exchRateATMlevel))));+  } catch (std::exception& er) {return handleException<QlFdmQuantoHelper*>(e, er);}}+double qlFdmQuantoHelperQuantoAdjustment(QlFdmQuantoHelper* helper, double equityVol, double t1, double t2, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(helper))->quantoAdjustment(equityVol, t1, t2);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeGJRGARCHModel(QlGJRGARCHModel *o) {del(o);}+void qlFreeHestonModel(QlHestonModel *o) {del(o);}+void qlFreeBrownianGeneratorFactory(QlBrownianGeneratorFactory *o) {del(o);}+QlBrownianGeneratorFactory* qlMTBrownianGeneratorFactory(unsigned long seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBrownianGeneratorFactory(alloc(new MTBrownianGeneratorFactory(seed))));+  } catch (std::exception& er) {return handleException<QlBrownianGeneratorFactory*>(e, er);}}+QlBrownianGeneratorFactory* qlSobolBrownianGeneratorFactory(int ordering, unsigned long seed, int directionIntegers, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBrownianGeneratorFactory(alloc(new SobolBrownianGeneratorFactory(+    (SobolBrownianGenerator::Ordering)ordering, seed, (SobolRsg::DirectionIntegers)directionIntegers))));+  } catch (std::exception& er) {return handleException<QlBrownianGeneratorFactory*>(e, er);}}+void qlFreeHestonSLVMCModel(QlHestonSLVMCModel *o) {del(o);}+QlHestonSLVMCModel* qlHestonSLVMCModel(QlLocalVolTermStructure* localVol, QlHestonModel* hestonModel, QlBrownianGeneratorFactory* factory, int endDate, unsigned timeStepsPerYear, unsigned nBins, unsigned calibrationPaths, unsigned mandatoryDatesLen, int* mandatoryDates, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlHestonSLVMCModel(alloc(new HestonSLVMCModel(+    Handle<LocalVolTermStructure>(*arg(localVol)), Handle<HestonModel>(*arg(hestonModel)), *arg(factory),+    Date(endDate), timeStepsPerYear, nBins, calibrationPaths, qlDateVector(mandatoryDates, mandatoryDatesLen), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlHestonSLVMCModel*>(e, er);}}+QlLocalVolTermStructure* qlHestonSLVMCModelLeverageFunction(QlHestonSLVMCModel* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLocalVolTermStructure((*arg(o))->leverageFunction()));+  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}+void qlFreeHestonSLVFDMModel(QlHestonSLVFDMModel *o) {del(o);}+QlHestonSLVFDMModel* qlHestonSLVFDMModel(QlLocalVolTermStructure* localVol, QlHestonModel* hestonModel, int endDate,+    unsigned xGrid, unsigned vGrid, unsigned tMaxStepsPerYear, unsigned tMinStepsPerYear, double tStepNumberDecay,+    unsigned nRannacherTimeSteps, unsigned predictionCorretionSteps, double x0Density, double localVolEpsProb,+    unsigned maxIntegrationIterations, double vLowerEps, double vUpperEps, double vMin, double v0Density,+    double vLowerBoundDensity, double vUpperBoundDensity, double leverageFctPropEps, int greensAlgorithm,+    int trafoType, FdmSchemeDesc* schemeDesc, int logging, unsigned mandatoryDatesLen, int* mandatoryDates,+    double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {+    HestonSLVFokkerPlanckFdmParams p = {xGrid, vGrid, tMaxStepsPerYear, tMinStepsPerYear, tStepNumberDecay,+      nRannacherTimeSteps, predictionCorretionSteps, x0Density, localVolEpsProb, maxIntegrationIterations,+      vLowerEps, vUpperEps, vMin, v0Density, vLowerBoundDensity, vUpperBoundDensity, leverageFctPropEps,+      (FdmHestonGreensFct::Algorithm)greensAlgorithm, (FdmSquareRootFwdOp::TransformationType)trafoType,+      *arg(schemeDesc)};+    return ret(new QlHestonSLVFDMModel(alloc(new HestonSLVFDMModel(+      Handle<LocalVolTermStructure>(*arg(localVol)), Handle<HestonModel>(*arg(hestonModel)), Date(endDate), p,+      logging, qlDateVector(mandatoryDates, mandatoryDatesLen), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlHestonSLVFDMModel*>(e, er);}}+QlLocalVolTermStructure* qlHestonSLVFDMModelLeverageFunction(QlHestonSLVFDMModel* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLocalVolTermStructure((*arg(o))->leverageFunction()));+  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}+HestonSLVFDMLogEntries* qlHestonSLVFDMModelLogEntries(QlHestonSLVFDMModel* o, QlError **e) { QlCallScope callbackScope(e);+  try {+    std::unique_ptr<HestonSLVFDMLogEntries> out(new HestonSLVFDMLogEntries);+    const std::list<HestonSLVFDMModel::LogEntry>& entries = (*arg(o))->logEntries();+    out->entries.reserve(entries.size());+    for (const auto& entry : entries) {+      HestonSLVFDMLogEntries::Entry copy;+      copy.time = entry.t;+      const auto& meshers = entry.mesher->getFdm1dMeshers();+      copy.spotGrid.assign(meshers.at(0)->locations().begin(), meshers.at(0)->locations().end());+      copy.varianceGrid.assign(meshers.at(1)->locations().begin(), meshers.at(1)->locations().end());+      copy.density.assign(entry.prob->begin(), entry.prob->end());+      out->entries.push_back(std::move(copy));+    }+    return ret(out.release());+  } catch (std::exception& er) {return handleException<HestonSLVFDMLogEntries*>(e, er);}}+void qlFreeHestonSLVFDMLogEntries(HestonSLVFDMLogEntries* o) {del(o);}+unsigned qlHestonSLVFDMLogEntriesSize(HestonSLVFDMLogEntries* o) {return (unsigned)o->entries.size();}+double qlHestonSLVFDMLogEntriesTime(HestonSLVFDMLogEntries* o, unsigned i, QlError **e) { QlCallScope callbackScope(e);+  try {return o->entries.at(i).time;+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlHestonSLVFDMLogEntriesSpotGrid(HestonSLVFDMLogEntries* o, unsigned i, unsigned* len, double** values, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return o->entries.at(i).spotGrid;}, len, values);+  } catch (std::exception& er) {qlSetError(e, er.what());}}+void qlHestonSLVFDMLogEntriesVarianceGrid(HestonSLVFDMLogEntries* o, unsigned i, unsigned* len, double** values, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return o->entries.at(i).varianceGrid;}, len, values);+  } catch (std::exception& er) {qlSetError(e, er.what());}}+void qlHestonSLVFDMLogEntriesDensity(HestonSLVFDMLogEntries* o, unsigned i, unsigned* rows, unsigned* cols, unsigned* len, double** values, QlError **e) { QlCallScope callbackScope(e);+  OutValue<unsigned> rowResult(rows), colResult(cols);+  OutArrayResult<double> result(len, values);+  try {+    const auto& entry = o->entries.at(i);+    double *out = result.allocate((unsigned)entry.density.size());+    std::copy(entry.density.begin(), entry.density.end(), out);+    rowResult.set((unsigned)entry.varianceGrid.size());+    colResult.set((unsigned)entry.spotGrid.size());+    result.commit(); rowResult.commit(); colResult.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}+void qlFreeBatesModel(QlBatesModel *o) {del(o);}+void qlFreePiecewiseTimeDependentHestonModel(QlPiecewiseTimeDependentHestonModel *o) {del(o);}+void qlFreeShortRateModel(QlShortRateModel *o) {del(o);}+void qlFreeAffineModel(QlAffineModel *o) {del(o);}+double qlAffineModelDiscount(QlAffineModel* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->discount(t);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAffineModelDiscountBond(QlAffineModel* o, double now, double maturity, unsigned factorsLen, double* factors, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->discountBond(now, maturity, Array(factors, factors+factorsLen));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAffineModelDiscountBondOption(QlAffineModel* o, int type, double strike, double maturity, int haveBondStart, double bondStart, double bondMaturity, QlError **e) { QlCallScope callbackScope(e);+  try {return haveBondStart+    ? (*arg(o))->discountBondOption((Option::Type)type, strike, maturity, bondStart, bondMaturity)+    : (*arg(o))->discountBondOption((Option::Type)type, strike, maturity, bondMaturity);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeOneFactorAffineModel(QlOneFactorAffineModel *o) {del(o);}+double qlHullWhiteConvexityBias(double futurePrice, double t, double T, double sigma, double a, QlError **e) { QlCallScope callbackScope(e);+  try {return HullWhite::convexityBias(futurePrice, t, T, sigma, a);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlAffineModel* qlOneFactorAffineModelAsAffineModel(QlOneFactorAffineModel *o) {return ret(new QlAffineModel(*arg(o)));}+void qlFreeLiborForwardModel(QlLiborForwardModel *o) {del(o);}+QlAffineModel* qlLiborForwardModelAsAffineModel(QlLiborForwardModel *o) {return ret(new QlAffineModel(*arg(o)));}+void qlFreeHullWhite(QlHullWhite *o) {del(o);}+QlOneFactorAffineModel* qlHullWhiteAsOneFactorAffineModel(QlHullWhite *o) {return ret(new QlOneFactorAffineModel(*arg(o)));}+void qlFreeCalibratedModel(QlCalibratedModel *o) {del(o);}++QlBatesModel* qlBatesModel(QlBatesProcess* process, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlBatesModel(alloc(new BatesModel(*arg(process)))));} catch (std::exception& er) {return handleException<QlBatesModel*>(e, er);}}+QlShortRateModel* qlBlackKarasinski(QlYieldTermStructure* termStructure, double a, double sigma, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlShortRateModel(alloc(new BlackKarasinski(*arg(termStructure), a, sigma))));+  } catch (std::exception& er) {return handleException<QlShortRateModel*>(e, er);}}+QlOneFactorAffineModel* qlCoxIngersollRoss(double r0, double theta, double k, double sigma, int withFellerConstraint, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneFactorAffineModel(alloc(new CoxIngersollRoss(r0, theta, k, sigma, withFellerConstraint))));+  } catch (std::exception& er) {return handleException<QlOneFactorAffineModel*>(e, er);}}+QlOneFactorAffineModel* qlExtendedCoxIngersollRoss(QlYieldTermStructure* termStructure, double theta, double k, double sigma, double x0, int withFellerConstraint, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneFactorAffineModel(alloc(new ExtendedCoxIngersollRoss(*arg(termStructure), theta, k, sigma, x0, withFellerConstraint))));+  } catch (std::exception& er) {return handleException<QlOneFactorAffineModel*>(e, er);}}+QlG2* qlG2(QlYieldTermStructure* termStructure, double a, double sigma, double b, double eta, double rho, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlG2(alloc(new G2(*arg(termStructure), a, sigma, b, eta, rho))));+  } catch (std::exception& er) {return handleException<QlG2*>(e, er);}}+QlShortRateModel* qlGeneralizedHullWhite(QlYieldTermStructure* yieldtermStructure, unsigned speedstructureLen, int* speedstructure, unsigned volstructureLen, int* volstructure, unsigned speedLen, double* speed, unsigned volLen, double* vol, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlShortRateModel(alloc(new GeneralizedHullWhite(*arg(yieldtermStructure), qlDateVector(speedstructure, speedstructureLen), qlDateVector(volstructure, volstructureLen), std::vector<double>(speed, speed+speedLen), std::vector<double>(vol, vol+volLen)))));+  } catch (std::exception& er) {return handleException<QlShortRateModel*>(e, er);}}+QlGJRGARCHModel* qlGJRGARCHModel(QlGJRGARCHProcess* process, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlGJRGARCHModel(alloc(new GJRGARCHModel(*arg(process)))));} catch (std::exception& er) {return handleException<QlGJRGARCHModel*>(e, er);}}+QlHestonModel* qlHestonModel(QlHestonProcess* process, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlHestonModel(alloc(new HestonModel(*arg(process)))));} catch (std::exception& er) {return handleException<QlHestonModel*>(e, er);}}+QlHullWhite* qlHullWhite(QlYieldTermStructure* termStructure, double a, double sigma, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlHullWhite(alloc(new HullWhite(*arg(termStructure), a, sigma))));+  } catch (std::exception& er) {return handleException<QlHullWhite*>(e, er);}}+QlCalibratedModel* qlVarianceGammaModel(QlVarianceGammaProcess* process, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCalibratedModel(alloc(new VarianceGammaModel(*arg(process)))));+  } catch (std::exception& er) {return handleException<QlCalibratedModel*>(e, er);}}+QlOneFactorAffineModel* qlVasicek(double r0, double a, double b, double sigma, double lambda, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOneFactorAffineModel(alloc(new Vasicek(r0, a, b, sigma, lambda))));+  } catch (std::exception& er) {return handleException<QlOneFactorAffineModel*>(e, er);}}++void qlFreeG2(QlG2 *o) {del(o);}+QlAffineModel* qlG2AsAffineModel(QlG2 *o) {return ret(new QlAffineModel(*arg(o)));}+QlShortRateModel* qlG2AsShortRateModel(QlG2 *o) {return ret(new QlShortRateModel(*arg(o)));}+void qlFreeShortRateDynamics(QlShortRateDynamics *o) {del(o);}+QlShortRateDynamics* qlG2Dynamics(QlG2 *o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlShortRateDynamics((*arg(o))->dynamics()));+  } catch (std::exception& er) {return handleException<QlShortRateDynamics*>(e, er);}}+double qlShortRateDynamicsShortRate(QlShortRateDynamics *o, double t, double x, double y, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->shortRate(t, x, y);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeBatesDetJumpModel(QlBatesDetJumpModel *o) {del(o);}+QlBatesModel* qlBatesDetJumpModelAsBatesModel(QlBatesDetJumpModel *o) {return ret(new QlBatesModel(*arg(o)));}+void qlFreeBatesDoubleExpDetJumpModel(QlBatesDoubleExpDetJumpModel *o) {del(o);}+QlBatesDoubleExpModel* qlBatesDoubleExpDetJumpModelAsBatesDoubleExpModel(QlBatesDoubleExpDetJumpModel *o) {return ret(new QlBatesDoubleExpModel(*arg(o)));}+void qlFreeBatesDoubleExpModel(QlBatesDoubleExpModel *o) {del(o);}+QlHestonModel* qlBatesDoubleExpModelAsHestonModel(QlBatesDoubleExpModel *o) {return ret(new QlHestonModel(*arg(o)));}+void qlFreeLmCorrelationModel(QlLmCorrelationModel *o) {del(o);}+void qlFreeLmVolatilityModel(QlLmVolatilityModel *o) {del(o);}++QlLmCorrelationModel* qlLmConstWrapperCorrelationModel(QlLmCorrelationModel* corrModel, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLmCorrelationModel(alloc(new LmConstWrapperCorrelationModel(*arg(corrModel)))));+  } catch (std::exception& er) {return handleException<QlLmCorrelationModel*>(e, er);}}+QlLmVolatilityModel* qlLmConstWrapperVolatilityModel(QlLmVolatilityModel* volaModel, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLmVolatilityModel(alloc(new LmConstWrapperVolatilityModel(*arg(volaModel)))));+  } catch (std::exception& er) {return handleException<QlLmVolatilityModel*>(e, er);}}+QlLmCorrelationModel* qlLmExponentialCorrelationModel(unsigned size, double rho, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLmCorrelationModel(alloc(new LmExponentialCorrelationModel(size, rho))));+  } catch (std::exception& er) {return handleException<QlLmCorrelationModel*>(e, er);}}+QlLmVolatilityModel* qlLmFixedVolatilityModel(unsigned volatilitiesLen, double* volatilities, unsigned startTimesLen, double * startTimes, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLmVolatilityModel(alloc(new LmFixedVolatilityModel(Array(volatilities, volatilities+volatilitiesLen), std::vector<double>(startTimes, startTimes+startTimesLen)))));+  } catch (std::exception& er) {return handleException<QlLmVolatilityModel*>(e, er);}}+QlLmCorrelationModel* qlLmLinearExponentialCorrelationModel(unsigned size, double rho, double beta, unsigned factors, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLmCorrelationModel(alloc(new LmLinearExponentialCorrelationModel(size, rho, beta, factors))));+  } catch (std::exception& er) {return handleException<QlLmCorrelationModel*>(e, er);}}+QlLmVolatilityModel* qlLmLinearExponentialVolatilityModel(unsigned fixingTimesLen, double * fixingTimes, double a, double b, double c, double d, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLmVolatilityModel(alloc(new LmLinearExponentialVolatilityModel(std::vector<double>(fixingTimes, fixingTimes+fixingTimesLen), a, b, c, d))));+  } catch (std::exception& er) {return handleException<QlLmVolatilityModel*>(e, er);}}+QlLiborForwardModel* qlLiborForwardModel(QlLiborForwardModelProcess* process, QlLmVolatilityModel* volaModel, QlLmCorrelationModel* corrModel, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLiborForwardModel(alloc(new LiborForwardModel(*arg(process), *arg(volaModel), *arg(corrModel)))));+  } catch (std::exception& er) {return handleException<QlLiborForwardModel*>(e, er);}}+double qlLiborForwardModelS0(QlLiborForwardModel* o, unsigned alpha, unsigned beta, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->S_0(alpha, beta);} catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeLfmHullWhiteParameterization(QlLfmHullWhiteParameterization *o) {del(o);}+QlLfmHullWhiteParameterization* qlLfmHullWhiteParameterization(QlLiborForwardModelProcess* process, QlOptionletVolatilityStructure* capletVol, unsigned correlationRows, unsigned correlationCols, double* correlation, unsigned factors, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLfmHullWhiteParameterization(alloc(new LfmHullWhiteParameterization(*arg(process), handlePtr(arg(capletVol)), qlMatrix(correlation, correlationRows, correlationCols), factors))));+  } catch (std::exception& er) {return handleException<QlLfmHullWhiteParameterization*>(e, er);}}+void qlLfmHullWhiteCovariance(QlLfmHullWhiteParameterization* o, double t, unsigned xLen, double* x, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->covariance(t, Array(x, x+xLen));}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}++void qlFreeGsr(QlGsr *o) {del(o);}+void qlFreeMarkovFunctional(QlMarkovFunctional *o) {del(o);}+void qlFreeGaussian1dModel(QlGaussian1dModel *o) {del(o);}+QlCalibratedModel* qlGsrAsCalibratedModel(QlGsr *o) {return ret(new QlCalibratedModel(*arg(o)));}+QlCalibratedModel* qlMarkovFunctionalAsCalibratedModel(QlMarkovFunctional *o) {return ret(new QlCalibratedModel(*arg(o)));}+QlGaussian1dModel* qlGsrAsGaussian1dModel(QlGsr *o) {return ret(new QlGaussian1dModel(*arg(o)));}+QlGaussian1dModel* qlMarkovFunctionalAsGaussian1dModel(QlMarkovFunctional *o) {return ret(new QlGaussian1dModel(*arg(o)));}+QlGsr* qlGsr(QlYieldTermStructure* termStructure, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, QlQuote** volatilities, unsigned reversionsLen, QlQuote** reversions, double T, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlGsr(alloc(new Gsr(*arg(termStructure), qlDateVector(volstepdates, volstepdatesLen), qlHandleVector(volatilities, volatilitiesLen), qlHandleVector(reversions, reversionsLen), T))));+  } catch (std::exception& er) {return handleException<QlGsr*>(e, er);}}+void qlGsrVolatility(QlGsr* o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->volatility();}, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlGsrReversion(QlGsr* o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->reversion();}, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlGsrMoveVolatility(QlGsr* o, unsigned i, unsigned *len, int **fp, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(len, fp);+  try {std::vector<bool> res = (*arg(o))->MoveVolatility(i);+    int *out = result.allocate((unsigned)res.size());+    for (unsigned j = 0; j < res.size(); ++j) out[j] = res[j];+    result.commit();+  } catch (std::exception& er) {handleException<int*>(e, er);}}+void qlGsrMoveReversion(QlGsr* o, unsigned i, unsigned *len, int **fp, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(len, fp);+  try {std::vector<bool> res = (*arg(o))->MoveReversion(i);+    int *out = result.allocate((unsigned)res.size());+    for (unsigned j = 0; j < res.size(); ++j) out[j] = res[j];+    result.commit();+  } catch (std::exception& er) {handleException<int*>(e, er);}}+void qlGsrCalibrateVolatilitiesIterative(QlGsr* o, unsigned helpersLen, QlBlackCalibrationHelper** helpers, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned weightsLen, double* weights, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->calibrateVolatilitiesIterative(qlVector(helpers, helpersLen), **arg(method), **arg(endCriteria), Constraint(constraint ? *arg(constraint) : Constraint()), std::vector<double>(weights, weights+weightsLen));+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlGsrCalibrateReversionsIterative(QlGsr* o, unsigned helpersLen, QlBlackCalibrationHelper** helpers, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned weightsLen, double* weights, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->calibrateReversionsIterative(qlVector(helpers, helpersLen), **arg(method), **arg(endCriteria), Constraint(constraint ? *arg(constraint) : Constraint()), std::vector<double>(weights, weights+weightsLen));+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+QlMarkovFunctional* qlMarkovFunctional(QlYieldTermStructure* termStructure, double reversion, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, double* volatilities, QlSwaptionVolatilityStructure* swaptionVol, unsigned expiriesLen, int* swaptionExpiries, unsigned tenorsLen, int* tenorQuantity, unsigned, int* tenorUnit, QlSwapIndex* swapIndexBase, unsigned yGridPoints, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlMarkovFunctional(alloc(new MarkovFunctional(*arg(termStructure), reversion, qlDateVector(volstepdates, volstepdatesLen), std::vector<double>(volatilities, volatilities+volatilitiesLen), *arg(swaptionVol), qlDateVector(swaptionExpiries, expiriesLen), qlPeriodVector(tenorQuantity, tenorUnit, tenorsLen), *arg(swapIndexBase), MarkovFunctional::ModelSettings().withYGridPoints(yGridPoints)))));+  } catch (std::exception& er) {return handleException<QlMarkovFunctional*>(e, er);}}+QlMarkovFunctional* qlMarkovFunctionalCaplet(QlYieldTermStructure* termStructure, double reversion, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, double* volatilities, QlOptionletVolatilityStructure* capletVol, unsigned expiriesLen, int* capletExpiries, QlIborIndex* iborIndex, unsigned yGridPoints, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlMarkovFunctional(alloc(new MarkovFunctional(*arg(termStructure), reversion, qlDateVector(volstepdates, volstepdatesLen), std::vector<double>(volatilities, volatilities+volatilitiesLen), *arg(capletVol), qlDateVector(capletExpiries, expiriesLen), *arg(iborIndex), MarkovFunctional::ModelSettings().withYGridPoints(yGridPoints)))));+  } catch (std::exception& er) {return handleException<QlMarkovFunctional*>(e, er);}}+void qlMarkovFunctionalVolatility(QlMarkovFunctional* o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->volatility();}, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+double qlGaussian1dModelNumeraire(QlGaussian1dModel* o, int referenceDate, double y, QlYieldTermStructure* yts, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->numeraire(Date(referenceDate), y, qlNullableHandle(yts));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlGaussian1dModelZerobond(QlGaussian1dModel* o, int maturity, int referenceDate, double y, QlYieldTermStructure* yts, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->zerobond(Date(maturity), qlNullableDate(referenceDate), y, qlNullableHandle(yts));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlGaussian1dModelZerobondOption(QlGaussian1dModel* o, int type, int expiry, int valueDate, int maturity, double strike, int referenceDate, double y, QlYieldTermStructure* yts, double yStdDevs, unsigned yGridPoints, int extrapolatePayoff, int flatPayoffExtrapolation, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->zerobondOption((Option::Type)type, Date(expiry), Date(valueDate), Date(maturity), strike, qlNullableDate(referenceDate), y, qlNullableHandle(yts), yStdDevs, yGridPoints, extrapolatePayoff, flatPayoffExtrapolation);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlGaussian1dModelForwardRate(QlGaussian1dModel* o, int fixing, int referenceDate, double y, QlIborIndex* iborIdx, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->forwardRate(Date(fixing), qlNullableDate(referenceDate), y, iborIdx ? *arg(iborIdx) : shared_ptr<IborIndex>());+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlGaussian1dModelSwapRate(QlGaussian1dModel* o, int fixing, int tenorLen, int tenorUnit, int referenceDate, double y, QlSwapIndex* swapIdx, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->swapRate(Date(fixing), Period(tenorLen, (TimeUnit)tenorUnit), qlNullableDate(referenceDate), y, swapIdx ? *arg(swapIdx) : shared_ptr<SwapIndex>());+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlGaussian1dModelSwapAnnuity(QlGaussian1dModel* o, int fixing, int tenorLen, int tenorUnit, int referenceDate, double y, QlSwapIndex* swapIdx, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->swapAnnuity(Date(fixing), Period(tenorLen, (TimeUnit)tenorUnit), qlNullableDate(referenceDate), y, swapIdx ? *arg(swapIdx) : shared_ptr<SwapIndex>());+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlGaussian1dModelYGrid(QlGaussian1dModel* o, double yStdDevs, int gridPoints, double bigT, double t, double y, unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->yGrid(yStdDevs, gridPoints, bigT, t, y);}, len, out);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+QlStochasticProcess1D* qlGaussian1dModelStateProcess(QlGaussian1dModel* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStochasticProcess1D((*arg(o))->stateProcess()));+  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}+QlPricingEngine* qlGaussian1dSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlYieldTermStructure* discountCurve, int probabilities, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new Gaussian1dSwaptionEngine(*arg(model), integrationPoints, stddevs, extrapolatePayoff, flatPayoffExtrapolation, qlNullableHandle(discountCurve), (Gaussian1dSwaptionEngine::Probabilities)probabilities))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlGaussian1dNonstandardSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlQuote* oas, QlYieldTermStructure* discountCurve, int probabilities, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new Gaussian1dNonstandardSwaptionEngine(*arg(model), integrationPoints, stddevs, extrapolatePayoff, flatPayoffExtrapolation, qlNullableHandle(oas), qlNullableHandle(discountCurve), (Gaussian1dNonstandardSwaptionEngine::Probabilities)probabilities))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+// As qlGaussian1dNonstandardSwaptionEngine, plus a trailing includeTodaysExercise bool before+// probabilities (gaussian1dfloatfloatswaptionengine.hpp).+QlPricingEngine* qlGaussian1dFloatFloatSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlQuote* oas, QlYieldTermStructure* discountCurve, int includeTodaysExercise, int probabilities, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new Gaussian1dFloatFloatSwaptionEngine(*arg(model), integrationPoints, stddevs, extrapolatePayoff, flatPayoffExtrapolation, qlNullableHandle(oas), qlNullableHandle(discountCurve), includeTodaysExercise, (Gaussian1dFloatFloatSwaptionEngine::Probabilities)probabilities))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlGaussian1dJamshidianSwaptionEngine(QlGaussian1dModel* model, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new Gaussian1dJamshidianSwaptionEngine(*arg(model)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}+QlPricingEngine* qlGaussian1dCapFloorEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlYieldTermStructure* discountCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new Gaussian1dCapFloorEngine(*arg(model), integrationPoints, stddevs, extrapolatePayoff, flatPayoffExtrapolation, qlNullableHandle(discountCurve)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}++QlCalibratedModel* qlGJRGARCHModelAsCalibratedModel(QlGJRGARCHModel *o) {return ret(new QlCalibratedModel(*arg(o)));}+QlCalibratedModel* qlHestonModelAsCalibratedModel(QlHestonModel *o) {return ret(new QlCalibratedModel(*arg(o)));}+QlHestonModel* qlBatesModelAsHestonModel(QlBatesModel *o) {return ret(new QlHestonModel(*arg(o)));}+QlCalibratedModel* qlLiborForwardModelAsCalibratedModel(QlLiborForwardModel *o) {return ret(new QlCalibratedModel(*arg(o)));}+QlCalibratedModel* qlPiecewiseTimeDependentHestonModelAsCalibratedModel(QlPiecewiseTimeDependentHestonModel *o) {return ret(new QlCalibratedModel(*arg(o)));}+QlCalibratedModel* qlShortRateModelAsCalibratedModel(QlShortRateModel *o) {return ret(new QlCalibratedModel(*arg(o)));}+QlShortRateModel* qlOneFactorAffineModelAsShortRateModel(QlOneFactorAffineModel *o) {return ret(new QlShortRateModel(*arg(o)));}+void qlFreeCalibrationHelper(QlCalibrationHelper *o) {del(o);}+void qlFreeBlackCalibrationHelper(QlBlackCalibrationHelper *o) {del(o);}+QlCalibrationHelper* qlBlackCalibrationHelperAsCalibrationHelper(QlBlackCalibrationHelper *o) {return ret(new QlCalibrationHelper(*arg(o)));}++void qlCalibratedModelCalibrate(QlCalibratedModel* o, unsigned x1Len, QlCalibrationHelper** x1, unsigned wLen, double *weights, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned fpLen, int* fixParameters, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->calibrate(qlVector(x1, x1Len), **arg(method), **arg(endCriteria), Constraint(constraint ? *arg(constraint) : Constraint()), std::vector<double>(weights, weights+wLen), std::vector<bool>(fixParameters, fixParameters+fpLen));+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+double qlCalibratedModelValue(QlCalibratedModel* o, unsigned pLen, double* p, unsigned hLen, QlCalibrationHelper** h, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->value(Array(p, p+pLen), qlVector(h, hLen));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlBlackCalibrationHelperSetPricingEngine(QlBlackCalibrationHelper* o, QlPricingEngine* engine, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->setPricingEngine(*arg(engine));+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+QlBlackCalibrationHelper* qlCapHelper(int l, int u, QlQuote* volatility, QlIborIndex* index, int fixedLegFrequency, DayCounter* fixedLegDayCounter, int includeFirstSwaplet, QlYieldTermStructure* termStructure, int errorType, int type, double shift, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackCalibrationHelper(alloc(new CapHelper(Period(l, (TimeUnit)u), *arg(volatility), *arg(index), (Frequency)fixedLegFrequency, *arg(fixedLegDayCounter), includeFirstSwaplet, *arg(termStructure), (BlackCalibrationHelper::CalibrationErrorType)errorType, (VolatilityType)type, shift))));+  } catch (std::exception& er) {return handleException<QlBlackCalibrationHelper*>(e, er);}}+QlBlackCalibrationHelper* qlHestonModelHelper(int l, int u, Calendar* calendar, QlQuote* s0, double strikePrice, QlQuote* volatility, QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, int errorType, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackCalibrationHelper(alloc(new HestonModelHelper(Period(l, (TimeUnit)u), *arg(calendar), *arg(s0), strikePrice, *arg(volatility), *arg(riskFreeRate), *arg(dividendYield), (BlackCalibrationHelper::CalibrationErrorType)errorType))));+  } catch (std::exception& er) {return handleException<QlBlackCalibrationHelper*>(e, er);}}+void qlFreeSwaptionHelper(QlSwaptionHelper *o) {del(o);}+QlBlackCalibrationHelper* qlSwaptionHelperAsBlackCalibrationHelper(QlSwaptionHelper *o) {return ret(new QlBlackCalibrationHelper(*arg(o)));}+QlSwaptionHelper* qlSwaptionHelper(int l, int u, int ll, int lu, QlQuote* volatility, QlIborIndex* index, int fl, int fu, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwaptionHelper(alloc(new SwaptionHelper(Period(l, (TimeUnit)u), Period(ll, (TimeUnit)lu), *arg(volatility), *arg(index), Period(fl, (TimeUnit)fu), *arg(fixedLegDayCounter), *arg(floatingLegDayCounter), *arg(termStructure), (BlackCalibrationHelper::CalibrationErrorType)errorType, strike, nominal, (VolatilityType)volatilityType, shift, settlementDays, (RateAveraging::Type)averagingMethod))));+  } catch (std::exception& er) {return handleException<QlSwaptionHelper*>(e, er);}}+QlSwaptionHelper* qlSwaptionHelperFromDate(int exerciseDate, int ll, int lu, QlQuote* volatility, QlIborIndex* index, int fl, int fu, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwaptionHelper(alloc(new SwaptionHelper(Date(exerciseDate), Period(ll, (TimeUnit)lu), *arg(volatility), *arg(index), Period(fl, (TimeUnit)fu), *arg(fixedLegDayCounter), *arg(floatingLegDayCounter), *arg(termStructure), (BlackCalibrationHelper::CalibrationErrorType)errorType, strike, nominal, (VolatilityType)volatilityType, shift, settlementDays, (RateAveraging::Type)averagingMethod))));+  } catch (std::exception& er) {return handleException<QlSwaptionHelper*>(e, er);}}+QlSwaptionHelper* qlSwaptionHelperFromDates(int exerciseDate, int endDate, QlQuote* volatility, QlIborIndex* index, int fl, int fu, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwaptionHelper(alloc(new SwaptionHelper(Date(exerciseDate), Date(endDate), *arg(volatility), *arg(index), Period(fl, (TimeUnit)fu), *arg(fixedLegDayCounter), *arg(floatingLegDayCounter), *arg(termStructure), (BlackCalibrationHelper::CalibrationErrorType)errorType, strike, nominal, (VolatilityType)volatilityType, shift, settlementDays, (RateAveraging::Type)averagingMethod))));+  } catch (std::exception& er) {return handleException<QlSwaptionHelper*>(e, er);}}+// Both accessors are cast-free: o is already a genuine SwaptionHelper (constructed as one above),+// so underlying()/swaption() are plain method calls, not a downcast from a type-erased base.+QlFixedVsFloatingSwap* qlSwaptionHelperUnderlying(QlSwaptionHelper* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFixedVsFloatingSwap((*arg(o))->underlying()));+  } catch (std::exception& er) {return handleException<QlFixedVsFloatingSwap*>(e, er);}}+QlSwaption* qlSwaptionHelperSwaption(QlSwaptionHelper* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwaption((*arg(o))->swaption()));+  } catch (std::exception& er) {return handleException<QlSwaption*>(e, er);}}+void qlBlackCalibrationHelperTimes(QlBlackCalibrationHelper* o, unsigned *len, double **ts, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {std::list<double> times; (*arg(o))->addTimesTo(times); return times;}, len, ts);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlCalibratedModelParams(QlCalibratedModel* o, unsigned *len, double** ps, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->params();}, len, ps);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlCalibratedModelSetParams(QlCalibratedModel* o, unsigned pLen, double* p, QlError **e) { QlCallScope callbackScope(e);+  try {+    // Upstream writes parameters before its size checks, so validate first to keep the model whole.+    const Size expected = (*arg(o))->params().size();+    QL_REQUIRE(pLen == expected, "setParams: expected " << expected << " parameters, got " << pLen);+    (*arg(o))->setParams(Array(p, p+pLen));+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+double qlBlackCalibrationHelperBlackPrice(QlBlackCalibrationHelper* o, double volatility, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->blackPrice(volatility);} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalibrationHelperCalibrationError(QlBlackCalibrationHelper* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->calibrationError();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalibrationHelperImpliedVolatility(QlBlackCalibrationHelper* o, double targetValue, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->impliedVolatility(targetValue, accuracy, maxEvaluations, minVol, maxVol);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalibrationHelperMarketValue(QlBlackCalibrationHelper* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->marketValue();} catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackCalibrationHelperModelValue(QlBlackCalibrationHelper* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->modelValue();} catch (std::exception& er) {return handleException<double>(e, er);}}+QlQuote* qlBlackCalibrationHelperVolatility(QlBlackCalibrationHelper* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlQuote((*arg(o))->volatility().currentLink()));+  } catch (std::exception& er) {return handleException<QlQuote*>(e, er);}}++void qlFreeStochasticProcess1D(QlStochasticProcess1D *o) {del(o);}+QlStochasticProcess* qlStochasticProcess1DAsStochasticProcess(QlStochasticProcess1D *o) {return ret(new QlStochasticProcess(*arg(o)));}+void qlFreeBlackProcess(QlBlackProcess *o) {del(o);}+QlGeneralizedBlackScholesProcess* qlBlackProcessAsGeneralizedBlackScholesProcess(QlBlackProcess *o) {return ret(new QlGeneralizedBlackScholesProcess(*arg(o)));}+void qlFreeGeneralizedBlackScholesProcess(QlGeneralizedBlackScholesProcess *o) {del(o);}+QlStochasticProcess1D* qlGeneralizedBlackScholesProcessAsStochasticProcess1D(QlGeneralizedBlackScholesProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}+void qlFreeStochasticProcess(QlStochasticProcess *o) {del(o);}+unsigned qlStochasticProcessFactors(QlStochasticProcess* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->factors();+  } catch (std::exception& er) {return handleException<unsigned>(e, er);}}+void qlStochasticProcessInitialValues(QlStochasticProcess* o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->initialValues();}, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlStochasticProcessDrift(QlStochasticProcess* o, double t, unsigned xLen, double *x, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->drift(t, Array(x, x+xLen));}, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlStochasticProcessDiffusion(QlStochasticProcess* o, double t, unsigned xLen, double *x, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->diffusion(t, Array(x, x+xLen));}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlStochasticProcessExpectation(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->expectation(t0, Array(x0, x0+x0Len), dt);}, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlStochasticProcessStdDeviation(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->stdDeviation(t0, Array(x0, x0+x0Len), dt);}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlStochasticProcessCovariance(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->covariance(t0, Array(x0, x0+x0Len), dt);}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlStochasticProcessApply(QlStochasticProcess* o, unsigned x0Len, double *x0, unsigned dxLen, double *dx, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->apply(Array(x0, x0+x0Len), Array(dx, dx+dxLen));}, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlStochasticProcessEvolve(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned dwLen, double *dw, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->evolve(t0, Array(x0, x0+x0Len), dt, Array(dw, dw+dwLen));}, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}++QlBlackProcess* qlBlackProcess(QlQuote* x0, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackProcess(alloc(new BlackProcess(*arg(x0), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));+  } catch (std::exception& er) {return handleException<QlBlackProcess*>(e, er);}}+QlGeneralizedBlackScholesProcess* qlBlackScholesMertonProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new BlackScholesMertonProcess(*arg(x0), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));+  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}+QlGeneralizedBlackScholesProcess* qlBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new BlackScholesProcess(*arg(x0), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));+  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}+QlGeneralizedBlackScholesProcess* qlExtendedBlackScholesMertonProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int evolDisc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new ExtendedBlackScholesMertonProcess(*arg(x0), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), (ExtendedBlackScholesMertonProcess::Discretization)evolDisc))));+  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}+QlGeneralizedBlackScholesProcess* qlGarmanKohlhagenProcess(QlQuote* x0, QlYieldTermStructure* foreignRiskFreeTS, QlYieldTermStructure* domesticRiskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new GarmanKohlagenProcess(*arg(x0), *arg(foreignRiskFreeTS), *arg(domesticRiskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));+  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}+QlGeneralizedBlackScholesProcess* qlGeneralizedBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new GeneralizedBlackScholesProcess(*arg(x0), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), createDiscretization1D(d), forceDiscretization))));+  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}+QlStochasticProcess1D* qlSquareRootProcess(double b, double a, double sigma, double x0, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStochasticProcess1D(alloc(new SquareRootProcess(b, a, sigma, x0, createDiscretization1D(d)))));+  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}+QlGeneralizedBlackScholesProcess* qlVegaStressedBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, double lowerTimeBorderForStressTest, double upperTimeBorderForStressTest, double lowerAssetBorderForStressTest, double upperAssetBorderForStressTest, double stressLevel, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlGeneralizedBlackScholesProcess(alloc(new VegaStressedBlackScholesProcess(*arg(x0), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), lowerTimeBorderForStressTest, upperTimeBorderForStressTest, lowerAssetBorderForStressTest, upperAssetBorderForStressTest, stressLevel, createDiscretization1D(d)))));+  } catch (std::exception& er) {return handleException<QlGeneralizedBlackScholesProcess*>(e, er);}}++void qlFreeExtOUWithJumpsProcess(QlExtOUWithJumpsProcess *o) {del(o);}+QlStochasticProcess* qlExtOUWithJumpsProcessAsStochasticProcess(QlExtOUWithJumpsProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}+void qlFreeExtendedOrnsteinUhlenbeckProcess(QlExtendedOrnsteinUhlenbeckProcess *o) {del(o);}+QlStochasticProcess1D* qlExtendedOrnsteinUhlenbeckProcessAsStochasticProcess1D(QlExtendedOrnsteinUhlenbeckProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}+void qlFreeGJRGARCHProcess(QlGJRGARCHProcess *o) {del(o);}+QlStochasticProcess* qlGJRGARCHProcessAsStochasticProcess(QlGJRGARCHProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}+void qlFreeHestonProcess(QlHestonProcess *o) {del(o);}+QlStochasticProcess* qlHestonProcessAsStochasticProcess(QlHestonProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}+void qlFreeHestonSLVProcess(QlHestonSLVProcess *o) {del(o);}+QlStochasticProcess* qlHestonSLVProcessAsStochasticProcess(QlHestonSLVProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}+QlHestonSLVProcess* qlHestonSLVProcess(QlHestonProcess* hestonProcess, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlHestonSLVProcess(alloc(new HestonSLVProcess(*arg(hestonProcess), *arg(leverageFct), mixingFactor))));+  } catch (std::exception& er) {return handleException<QlHestonSLVProcess*>(e, er);}}+void qlFreeBatesProcess(QlBatesProcess *o) {del(o);}+QlHestonProcess* qlBatesProcessAsHestonProcess(QlBatesProcess *o) {return ret(new QlHestonProcess(*arg(o)));}+void qlFreeHybridHestonHullWhiteProcess(QlHybridHestonHullWhiteProcess *o) {del(o);}+QlStochasticProcess* qlHybridHestonHullWhiteProcessAsStochasticProcess(QlHybridHestonHullWhiteProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}+void qlFreeKlugeExtOUProcess(QlKlugeExtOUProcess *o) {del(o);}+QlStochasticProcess* qlKlugeExtOUProcessAsStochasticProcess(QlKlugeExtOUProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}+void qlFreeLiborForwardModelProcess(QlLiborForwardModelProcess *o) {del(o);}+QlStochasticProcess* qlLiborForwardModelProcessAsStochasticProcess(QlLiborForwardModelProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}+void qlFreeStochasticProcessArray(QlStochasticProcessArray *o) {del(o);}+QlStochasticProcess* qlStochasticProcessArrayAsStochasticProcess(QlStochasticProcessArray *o) {return ret(new QlStochasticProcess(*arg(o)));}+void qlFreeVarianceGammaProcess(QlVarianceGammaProcess *o) {del(o);}+QlStochasticProcess1D* qlVarianceGammaProcessAsStochasticProcess1D(QlVarianceGammaProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}+void qlFreeMerton76Process(QlMerton76Process *o) {del(o);}+QlStochasticProcess1D* qlMerton76ProcessAsStochasticProcess1D(QlMerton76Process *o) {return ret(new QlStochasticProcess1D(*arg(o)));}+void qlFreeHullWhiteProcess(QlHullWhiteProcess *o) {del(o);}+QlStochasticProcess1D* qlHullWhiteProcessAsStochasticProcess1D(QlHullWhiteProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}+void qlFreeHullWhiteForwardProcess(QlHullWhiteForwardProcess *o) {del(o);}+QlStochasticProcess1D* qlHullWhiteForwardProcessAsStochasticProcess1D(QlHullWhiteForwardProcess *o) {return ret(new QlStochasticProcess1D(*arg(o)));}+void qlHullWhiteForwardProcessSetForwardMeasureTime(QlHullWhiteForwardProcess* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->setForwardMeasureTime(t);+  } catch (std::exception& er) {(void)handleException<double>(e, er);}}+double qlHullWhiteProcessAlpha(QlHullWhiteProcess* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->alpha(t);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlHullWhiteForwardProcessAlpha(QlHullWhiteForwardProcess* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->alpha(t);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlHullWhiteForwardProcessB(QlHullWhiteForwardProcess* o, double t, double T, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->B(t, T);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlHullWhiteForwardProcessMT(QlHullWhiteForwardProcess* o, double s, double t, double T, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->M_T(s, t, T);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlHybridHestonHullWhiteProcessNumeraire(QlHybridHestonHullWhiteProcess* o, double t, unsigned xLen, double *x, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->numeraire(t, Array(x, x+xLen));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeG2Process(QlG2Process *o) {del(o);}+QlStochasticProcess* qlG2ProcessAsStochasticProcess(QlG2Process *o) {return ret(new QlStochasticProcess(*arg(o)));}+double qlG2ProcessPhi(QlG2Process* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->phi(t);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlG2ProcessShortRate(QlG2Process* o, double t, double x, double y) {return (*arg(o))->shortRate(t, x, y);}++void qlFreeG2ForwardProcess(QlG2ForwardProcess *o) {del(o);}+QlStochasticProcess* qlG2ForwardProcessAsStochasticProcess(QlG2ForwardProcess *o) {return ret(new QlStochasticProcess(*arg(o)));}+double qlG2ForwardProcessPhi(QlG2ForwardProcess* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->phi(t);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlG2ForwardProcessShortRate(QlG2ForwardProcess* o, double t, double x, double y) {return (*arg(o))->shortRate(t, x, y);}+void qlG2ForwardProcessSetForwardMeasureTime(QlG2ForwardProcess* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->setForwardMeasureTime(t);+  } catch (std::exception& er) {(void)handleException<double>(e, er);}}++QlBatesProcess* qlBatesProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double kappa, double theta, double sigma, double rho, double lambda, double nu, double delta, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBatesProcess(alloc(new BatesProcess(*arg(riskFreeRate), *arg(dividendYield), *arg(s0), v0, kappa, theta, sigma, rho, lambda, nu, delta, (HestonProcess::Discretization)d))));+  } catch (std::exception& er) {return handleException<QlBatesProcess*>(e, er);}}+QlExtendedOrnsteinUhlenbeckProcess* qlExtendedOrnsteinUhlenbeckProcess(double speed, double sigma, double x0, QlCallback* b, int discretization, double intEps, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlExtendedOrnsteinUhlenbeckProcess(alloc(new ExtendedOrnsteinUhlenbeckProcess(speed, sigma, x0, hasquant::UnaryCallback{*arg(b)}, (ExtendedOrnsteinUhlenbeckProcess::Discretization)discretization, intEps))));+  } catch (std::exception& er) {return handleException<QlExtendedOrnsteinUhlenbeckProcess*>(e, er);}}+QlExtendedOrnsteinUhlenbeckProcess* qlLinearSeasonalOrnsteinUhlenbeckProcess(double speed, double sigma, double x0, double a, double k, double c, double phase, int discretization, double intEps, QlError **e) { QlCallScope callbackScope(e);+  try {+    std::function<Real(Real)> b = [a, k, c, phase](Real t) { return a + k*t + c*std::sin(2*M_PI*t + phase); };+    return ret(new QlExtendedOrnsteinUhlenbeckProcess(alloc(new ExtendedOrnsteinUhlenbeckProcess(speed, sigma, x0, b, (ExtendedOrnsteinUhlenbeckProcess::Discretization)discretization, intEps))));+  } catch (std::exception& er) {return handleException<QlExtendedOrnsteinUhlenbeckProcess*>(e, er);}}+QlExtOUWithJumpsProcess* qlExtOUWithJumpsProcess(QlExtendedOrnsteinUhlenbeckProcess* process, double Y0, double beta, double jumpIntensity, double eta, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlExtOUWithJumpsProcess(alloc(new ExtOUWithJumpsProcess(*arg(process), Y0, beta, jumpIntensity, eta))));+  } catch (std::exception& er) {return handleException<QlExtOUWithJumpsProcess*>(e, er);}}+QlG2ForwardProcess* qlG2ForwardProcess(double a, double sigma, double b, double eta, double rho, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlG2ForwardProcess(alloc(new G2ForwardProcess(a, sigma, b, eta, rho, qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlG2ForwardProcess*>(e, er);}}+QlG2Process* qlG2Process(double a, double sigma, double b, double eta, double rho, QlYieldTermStructure* termStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlG2Process(alloc(new G2Process(a, sigma, b, eta, rho, qlNullableHandle(arg(termStructure))))));+  } catch (std::exception& er) {return handleException<QlG2Process*>(e, er);}}+QlStochasticProcess1D* qlGemanRoncoroniProcess(double x0, double alpha, double beta, double gamma, double delta, double eps, double zeta, double d, double k, double tau, double sig2, double a, double b, double theta1, double theta2, double theta3, double psi, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStochasticProcess1D(alloc(new GemanRoncoroniProcess(x0, alpha, beta, gamma, delta, eps, zeta, d, k, tau, sig2, a, b, theta1, theta2, theta3, psi))));+  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}+QlStochasticProcess1D* qlGeometricBrownianMotionProcess(double initialValue, double mue, double sigma, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStochasticProcess1D(alloc(new GeometricBrownianMotionProcess(initialValue, mue, sigma))));+  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}+QlGJRGARCHProcess* qlGJRGARCHProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double omega, double alpha, double beta, double gamma, double lambda, double daysPerYear, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlGJRGARCHProcess(alloc(new GJRGARCHProcess(*arg(riskFreeRate), *arg(dividendYield), *arg(s0), v0, omega, alpha, beta, gamma, lambda, daysPerYear, (GJRGARCHProcess::Discretization)d))));+  } catch (std::exception& er) {return handleException<QlGJRGARCHProcess*>(e, er);}}+QlHestonProcess* qlHestonProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double kappa, double theta, double sigma, double rho, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlHestonProcess(alloc(new HestonProcess(*arg(riskFreeRate), qlNullableHandle(arg(dividendYield)), *arg(s0), v0, kappa, theta, sigma, rho, (HestonProcess::Discretization)d))));+  } catch (std::exception& er) {return handleException<QlHestonProcess*>(e, er);}}+double qlHestonProcessPdf(QlHestonProcess* o, double x, double v, double t, double eps, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->pdf(x, v, t, eps);} catch (std::exception& er) {return handleException<double>(e, er);}}+QlHullWhiteForwardProcess* qlHullWhiteForwardProcess(QlYieldTermStructure* h, double a, double sigma, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlHullWhiteForwardProcess(alloc(new HullWhiteForwardProcess(*arg(h), a, sigma))));+  } catch (std::exception& er) {return handleException<QlHullWhiteForwardProcess*>(e, er);}}+QlHullWhiteProcess* qlHullWhiteProcess(QlYieldTermStructure* h, double a, double sigma, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlHullWhiteProcess(alloc(new HullWhiteProcess(*arg(h), a, sigma))));+  } catch (std::exception& er) {return handleException<QlHullWhiteProcess*>(e, er);}}+QlHybridHestonHullWhiteProcess* qlHybridHestonHullWhiteProcess(QlHestonProcess* hestonProcess, QlHullWhiteForwardProcess* hullWhiteProcess, double corrEquityShortRate, int discretization, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlHybridHestonHullWhiteProcess(alloc(new HybridHestonHullWhiteProcess(*arg(hestonProcess), *arg(hullWhiteProcess), corrEquityShortRate, (HybridHestonHullWhiteProcess::Discretization)discretization))));+  } catch (std::exception& er) {return handleException<QlHybridHestonHullWhiteProcess*>(e, er);}}+QlKlugeExtOUProcess* qlKlugeExtOUProcess(double rho, QlExtOUWithJumpsProcess* kluge, QlExtendedOrnsteinUhlenbeckProcess* extOU, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlKlugeExtOUProcess(alloc(new KlugeExtOUProcess(rho, *arg(kluge), (*arg(extOU))))));+  } catch (std::exception& er) {return handleException<QlKlugeExtOUProcess*>(e, er);}}+QlLiborForwardModelProcess* qlLiborForwardModelProcess(unsigned size, QlIborIndex* index, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLiborForwardModelProcess(alloc(new LiborForwardModelProcess(size, *arg(index)))));+  } catch (std::exception& er) {return handleException<QlLiborForwardModelProcess*>(e, er);}}+void qlLiborForwardModelProcessFixingDates(QlLiborForwardModelProcess* o, unsigned *len, int **dates, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(len, dates);+  try {const std::vector<Date>& fixingDates = (*arg(o))->fixingDates();+    int *out = result.allocate((unsigned)fixingDates.size());+    for (unsigned i = 0; i < fixingDates.size(); ++i) out[i] = fixingDates[i].serialNumber();+    result.commit();+  } catch (std::exception& er) {(void)handleException<int*>(e, er);}}+void qlLiborForwardModelProcessFixingTimes(QlLiborForwardModelProcess* o, unsigned *len, double **times, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->fixingTimes();}, len, times);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+Leg* qlLiborForwardModelProcessCashFlows(QlLiborForwardModelProcess* o, double amount, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new Leg((*arg(o))->cashFlows(amount)));+  } catch (std::exception& er) {return handleException<Leg*>(e, er);}}+QlIborIndex* qlLiborForwardModelProcessIndex(QlLiborForwardModelProcess* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlIborIndex((*arg(o))->index()));+  } catch (std::exception& er) {return handleException<QlIborIndex*>(e, er);}}+void qlLiborForwardModelProcessSetCovarParam(QlLiborForwardModelProcess* o, QlLfmHullWhiteParameterization* param, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->setCovarParam(*arg(param));+  } catch (std::exception& er) {(void)handleException<double>(e, er);}}+void qlLiborForwardModelProcessDiscountBond(QlLiborForwardModelProcess* o, unsigned ratesLen, double *rates, unsigned *len, double **dfs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->discountBond(std::vector<Rate>(rates, rates+ratesLen));}, len, dfs);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+void qlLiborForwardModelProcessAccrualTimes(QlLiborForwardModelProcess* o, unsigned *startLen, double **start, unsigned *endLen, double **end, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> startResult(startLen, start);+  OutArrayResult<double> endResult(endLen, end);+  try {const std::vector<Time>& s = (*arg(o))->accrualStartTimes();+    const std::vector<Time>& t = (*arg(o))->accrualEndTimes();+    double *starts = startResult.allocate((unsigned)s.size());+    std::copy(s.begin(), s.end(), starts);+    double *ends = endResult.allocate((unsigned)t.size());+    std::copy(t.begin(), t.end(), ends);+    startResult.commit(); endResult.commit();+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+QlMerton76Process* qlMerton76Process(QlQuote* stateVariable, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, QlQuote* jumpInt, QlQuote* logJMean, QlQuote* logJVol, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlMerton76Process(alloc(new Merton76Process(*arg(stateVariable), *arg(dividendTS), *arg(riskFreeTS), *arg(blackVolTS), *arg(jumpInt), *arg(logJMean), *arg(logJVol), createDiscretization1D(d)))));+  } catch (std::exception& er) {return handleException<QlMerton76Process*>(e, er);}}+QlStochasticProcess1D* qlOrnsteinUhlenbeckProcess(double speed, double vol, double x0, double level, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStochasticProcess1D(alloc(new OrnsteinUhlenbeckProcess(speed, vol, x0, level))));+  } catch (std::exception& er) {return handleException<QlStochasticProcess1D*>(e, er);}}+QlVarianceGammaProcess* qlVarianceGammaProcess(QlQuote* s0, QlYieldTermStructure* dividendYield, QlYieldTermStructure* riskFreeRate, double sigma, double nu, double theta, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlVarianceGammaProcess(alloc(new VarianceGammaProcess(*arg(s0), *arg(dividendYield), *arg(riskFreeRate), sigma, nu, theta))));+  } catch (std::exception& er) {return handleException<QlVarianceGammaProcess*>(e, er);}}+QlStochasticProcessArray* qlStochasticProcessArray(unsigned x0Len, QlStochasticProcess1D** x0, unsigned correlationRows, unsigned correlationCols, double* correlation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlStochasticProcessArray(alloc(new StochasticProcessArray(qlVector(x0, x0Len), qlMatrix(correlation, correlationRows, correlationCols)))));+  } catch (std::exception& er) {return handleException<QlStochasticProcessArray*>(e, er);}}++// delWith rather than del(): qlFreePolymorphicPathGeneratorAux does the actual `delete`, since+// PolymorphicPathGenerator is only forward-declared in this translation unit.+void qlFreePathGenerator(PolymorphicPathGenerator *gen) {delWith(gen, qlFreePolymorphicPathGeneratorAux);}+PolymorphicPathGenerator *qlPathGenerator(int rngtrait, QlStochasticProcess *p, TimeGrid *t, unsigned seed, unsigned dim, int brownianBridge, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(qlPathGeneratorAux(rngtrait, *arg(p), *arg(t), seed, dim, brownianBridge));+  } catch (std::exception& er) {return handleException<PolymorphicPathGenerator*>(e, er);}}+PolymorphicPathGenerator *qlSobolPathGenerator(int dir, QlStochasticProcess *p, TimeGrid *t, unsigned seed, unsigned dim, int brownianBridge, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(qlSobolPathGeneratorAux((SobolRsg::DirectionIntegers)dir, *arg(p), *arg(t), seed, dim, brownianBridge));+  } catch (std::exception& er) {return handleException<PolymorphicPathGenerator*>(e, er);}}+SamplePath *qlPathGeneratorNext(PolymorphicPathGenerator *pgen, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new SamplePath(qlPathGeneratorNextAux(pgen)));+  } catch (std::exception& er) {return handleException<SamplePath*>(e, er);}}+SamplePath *qlPathGeneratorAntithetic(PolymorphicPathGenerator *pgen, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new SamplePath(qlPathGeneratorAntitheticAux(pgen)));+  } catch (std::exception& er) {return handleException<SamplePath*>(e, er);}}++double qlSamplePathWeight(SamplePath *p) {return arg(p)->weight;}+unsigned qlSamplePathAssetNumber(SamplePath *p) {return arg(p)->value.assetNumber();}+unsigned qlSamplePathSize(SamplePath *p) {return arg(p)->value.pathSize();}+void qlFreeSamplePath(SamplePath *p) {del(p);}+double qlSamplePathAt(SamplePath *p, unsigned asset, unsigned point, QlError **e) { QlCallScope callbackScope(e);try {return arg(p)->value.at(asset).at(point);} catch (std::exception& er) {return handleException<double>(e, er);}}++// delWith, for the same reason as qlFreePathGenerator above.+void qlFreeGaussianRsg(PolymorphicGaussianRsg *g) {delWith(g, qlFreePolymorphicGaussianRsgAux);}+// ret() only, no alloc(): the generator is a standalone heap object handed straight to Haskell and+// freed by qlFreeGaussianRsg -- not a shared_ptr payload. Wrapping it in both verbs would trace one+// pointer as two acquisitions against a single release, which alloc-summary.py reports as a leak.+// Same shape as qlPathGenerator below.+PolymorphicGaussianRsg *qlGaussianRsg(int rngtrait, unsigned dimension, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(qlGaussianRsgAux(rngtrait, dimension, seed));+  } catch (std::exception& er) {return handleException<PolymorphicGaussianRsg*>(e, er);}}+PolymorphicGaussianRsg *qlSobolGaussianRsg(int dir, unsigned dimension, unsigned seed, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(qlSobolGaussianRsgAux((SobolRsg::DirectionIntegers)dir, dimension, seed));+  } catch (std::exception& er) {return handleException<PolymorphicGaussianRsg*>(e, er);}}+unsigned qlGaussianRsgDimension(PolymorphicGaussianRsg *g) {return qlGaussianRsgDimensionAux(arg(g));}++void qlGaussianRsgNextSequence(PolymorphicGaussianRsg *g, unsigned *len, double **values, double *weight, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> valuesResult(len, values);+  OutValue<double> weightResult(weight);+  try {const auto& s = qlGaussianRsgNextSequenceAux(arg(g));+    double *out = valuesResult.allocate((unsigned)s.value.size());+    std::copy(s.value.begin(), s.value.end(), out);+    weightResult.set(s.weight);+    valuesResult.commit(); weightResult.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}+void qlGaussianRsgLastSequence(PolymorphicGaussianRsg *g, unsigned *len, double **values, double *weight, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> valuesResult(len, values);+  OutValue<double> weightResult(weight);+  try {const auto& s = qlGaussianRsgLastSequenceAux(arg(g));+    double *out = valuesResult.allocate((unsigned)s.value.size());+    std::copy(s.value.begin(), s.value.end(), out);+    weightResult.set(s.weight);+    valuesResult.commit(); weightResult.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}++void qlSamplePathAssetPath(SamplePath *s, unsigned asset, unsigned *len, double **p, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return std::vector<double>(arg(s)->value.at(asset).begin(), s->value.at(asset).end());}, len, p);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}++// One Longstaff-Schwartz basis: scalar at one column when `scalarAtOne`, else multi-dimensional. Every+// entry point below fits and evaluates through it, so stored coefficients repeat a combined call's bits.+namespace {+class LsmBasis {+ public:+  LsmBasis(int polynomType, unsigned order, unsigned cols, bool scalarAtOne) : cols_(cols), scalar_(scalarAtOne && cols == 1) {+    QL_REQUIRE(cols > 0, "a regression needs at least one state column");+    if (scalar_) scalarBasis_ = LsmBasisSystem::pathBasisSystem(order, (LsmBasisSystem::PolynomialType)polynomType);+    else multiBasis_ = LsmBasisSystem::multiPathBasisSystem(cols, order, (LsmBasisSystem::PolynomialType)polynomType);+  }+  Size size() const {return scalar_ ? scalarBasis_.size() : multiBasis_.size();}+  // Row-major states, one row per path.+  Array fit(unsigned rows, const double *states, const double *targets) const {+    std::vector<Real> y(targets, targets + rows);+    if (scalar_) return GeneralLinearLeastSquares(std::vector<Real>(states, states + rows), y, scalarBasis_).coefficients();+    std::vector<Array> x; x.reserve(rows);+    for (unsigned i = 0; i < rows; ++i) x.emplace_back(states + i*cols_, states + (i+1)*cols_);+    return GeneralLinearLeastSquares(x, y, multiBasis_).coefficients();+  }+  void evaluate(const Array& coeff, unsigned rows, const double *states, double *values) const {+    QL_REQUIRE(coeff.size() == size(), "expected " << size() << " regression coefficients, got " << coeff.size());+    for (unsigned i = 0; i < rows; ++i) {+      Real cont = 0.0;+      if (scalar_) {+        for (Size l = 0; l < scalarBasis_.size(); ++l) cont += coeff[l] * scalarBasis_[l](states[i]);+      } else {+        Array row(states + i*cols_, states + (i+1)*cols_);+        for (Size l = 0; l < multiBasis_.size(); ++l) cont += coeff[l] * multiBasis_[l](row);+      }+      values[i] = cont;+    }+  }+ private:+  unsigned cols_;+  bool scalar_;+  std::vector<std::function<Real(Real)> > scalarBasis_;+  std::vector<std::function<Real(Array)> > multiBasis_;+};+}++// Runs one Longstaff-Schwartz basis-function regression (fitStates -> fitTargets) and evaluates the+// fitted continuation value at each evalState -- the cross-path regression step LongstaffSchwartzPathPricer+// performs once per exercise date, with the payoff/exercise values supplied from Haskell instead of a+// bound Payoff.+void qlLsmRegress(int polynomType, unsigned order, unsigned fitStatesLen, double *fitStates, unsigned fitTargetsLen, double *fitTargets, unsigned evalLen, double *evalStates, unsigned *outLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> result(outLen, outValues);+  try {+    QL_REQUIRE(fitStatesLen == fitTargetsLen, "fit states and fit targets must have the same length");+    LsmBasis basis(polynomType, order, 1, true);+    Array coeff = basis.fit(fitStatesLen, fitStates, fitTargets);+    basis.evaluate(coeff, evalLen, evalStates, result.allocate(evalLen));+    result.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}++// Multi-asset counterpart of qlLsmRegress, via LsmBasisSystem::multiPathBasisSystem: fitStates/evalStates+// are row-major (one row per path, fitCols/evalCols columns = underlyings, which must agree).+void qlLsmRegressMulti(int polynomType, unsigned order, unsigned fitRows, unsigned fitCols, double *fitStates, unsigned fitTargetsLen, double *fitTargets, unsigned evalRows, unsigned evalCols, double *evalStates, unsigned *outLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> result(outLen, outValues);+  try {+    QL_REQUIRE(fitCols == evalCols, "fit states and eval states must have the same number of columns (underlyings)");+    QL_REQUIRE(fitRows == fitTargetsLen, "fit states and fit targets must have the same number of rows");+    LsmBasis basis(polynomType, order, fitCols, false);+    Array coeff = basis.fit(fitRows, fitStates, fitTargets);+    basis.evaluate(coeff, evalRows, evalStates, result.allocate(evalRows));+    result.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}++// The fitting half of the combined calls: the basis coefficients, scalar basis at one column.+void qlLsmFit(int polynomType, unsigned order, unsigned rows, unsigned cols, double *states, unsigned targetsLen, double *targets, unsigned *outLen, double **outCoefficients, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> result(outLen, outCoefficients);+  try {+    QL_REQUIRE(rows == targetsLen, "fit states and fit targets must have the same number of rows");+    Array coeff = LsmBasis(polynomType, order, cols, true).fit(rows, states, targets);+    std::copy(coeff.begin(), coeff.end(), result.allocate((unsigned)coeff.size()));+    result.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}++// The evaluating half: the continuation value of stored coefficients at each row.+void qlLsmEvaluate(int polynomType, unsigned order, unsigned coeffLen, double *coefficients, unsigned rows, unsigned cols, double *states, unsigned *outLen, double **outValues, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> result(outLen, outValues);+  try {+    LsmBasis basis(polynomType, order, cols, true);+    basis.evaluate(Array(coefficients, coefficients + coeffLen), rows, states, result.allocate(rows));+    result.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}++// Bump the revision whenever LsmBasis's basis choice or evaluation order changes.+#if defined(__aarch64__) || defined(_M_ARM64)+#define HQ_LSM_ARCH "arm64"+#elif defined(__x86_64__) || defined(_M_X64)+#define HQ_LSM_ARCH "x86_64"+#else+#define HQ_LSM_ARCH "unknown architecture"+#endif+#ifdef __VERSION__+#define HQ_LSM_COMPILER __VERSION__+#else+#define HQ_LSM_COMPILER "unknown compiler"+#endif+const char *qlLsmEvaluatorIdentity() {return "hasquant LSM basis 1; QuantLib " QL_VERSION "; " HQ_LSM_COMPILER "; " HQ_LSM_ARCH;}++void qlPathGeneratorSequence(PolymorphicPathGenerator *g, unsigned *len, double **values, double *weight, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> valuesResult(len, values);+  OutValue<double> weightResult(weight);+  try {const auto& s = qlPathGeneratorSequenceAux(arg(g));+    double *out = valuesResult.allocate((unsigned)s.value.size());+    std::copy(s.value.begin(), s.value.end(), out);+    weightResult.set(s.weight);+    valuesResult.commit(); weightResult.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}++double qlUnsafeSabrLogNormalVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, QlError **e) { QlCallScope callbackScope(e);+  try {return unsafeSabrLogNormalVolatility(strike, forward, expiryTime, alpha, beta, nu, rho);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlUnsafeShiftedSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, double shift, int volatilityType, QlError **e) { QlCallScope callbackScope(e);+  try {return unsafeShiftedSabrVolatility(strike, forward, expiryTime, alpha, beta, nu, rho, shift, (VolatilityType)volatilityType);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlUnsafeSabrNormalVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, QlError **e) { QlCallScope callbackScope(e);+  try {return unsafeSabrNormalVolatility(strike, forward, expiryTime, alpha, beta, nu, rho);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlUnsafeSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, int volatilityType, QlError **e) { QlCallScope callbackScope(e);+  try {return unsafeSabrVolatility(strike, forward, expiryTime, alpha, beta, nu, rho, (VolatilityType)volatilityType);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, int volatilityType, QlError **e) { QlCallScope callbackScope(e);+  try {return sabrVolatility(strike, forward, expiryTime, alpha, beta, nu, rho, (VolatilityType)volatilityType);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlShiftedSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, double shift, int volatilityType, QlError **e) { QlCallScope callbackScope(e);+  try {return shiftedSabrVolatility(strike, forward, expiryTime, alpha, beta, nu, rho, shift, (VolatilityType)volatilityType);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSabrFlochKennedyVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, QlError **e) { QlCallScope callbackScope(e);+  try {return sabrFlochKennedyVolatility(strike, forward, expiryTime, alpha, beta, nu, rho);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlValidateSabrParameters(double alpha, double beta, double nu, double rho, QlError **e) { QlCallScope callbackScope(e);+  try {validateSabrParameters(alpha, beta, nu, rho);+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlSabrGuess(double k_m, double vol_m, double k_0, double vol_0, double k_p, double vol_p, double forward, double expiryTime, double beta, double shift, int volatilityType, unsigned *len, double **out, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return sabrGuess(k_m, vol_m, k_0, vol_0, k_p, vol_p, forward, expiryTime, beta, shift, (VolatilityType)volatilityType);}, len, out);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+double qlGaussian1dModelCompoundedRate(QlGaussian1dModel* model, QlOvernightIndexedCoupon* coupon, int date, double y, QlYieldTermStructure* curve, QlError **e) { QlCallScope scope(e);+#if QL_HEX_VERSION >= 0x01440000+  try {return (*model)->compoundedRate(**coupon, qlNullableDate(date), y, qlNullableHandle(curve));}+  catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)model; (void)coupon; (void)date; (void)y; (void)curve;+  qlUnsupportedVersion(e, "gaussian1dCompoundedRate", "1.44"); return 0;+#endif+}+void qlFreeRoughHestonModel(QlRoughHestonModel* o) {del(o);}+QlCalibratedModel* qlRoughHestonModelAsCalibratedModel(QlRoughHestonModel* o) {+#if QL_HEX_VERSION >= 0x01440000+  return ret(new QlCalibratedModel(*arg(o)));+#else+  (void)o; return nullptr;+#endif+}+QlRoughHestonModel* qlRoughHestonModel(QlHestonProcess* process, double hurst, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlRoughHestonModel(alloc(new RoughHestonModel(*arg(process), hurst))));} catch (std::exception& er) {return handleException<QlRoughHestonModel*>(e, er);}+#else+  (void)process; (void)hurst;+  qlUnsupportedVersion(e, "roughHestonModel", "1.44"); return nullptr;+#endif+}+double qlRoughHestonModelTheta(QlRoughHestonModel* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->theta();} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "roughHestonTheta", "1.44"); return 0;+#endif+}+double qlRoughHestonModelKappa(QlRoughHestonModel* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->kappa();} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "roughHestonKappa", "1.44"); return 0;+#endif+}+double qlRoughHestonModelSigma(QlRoughHestonModel* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->sigma();} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "roughHestonSigma", "1.44"); return 0;+#endif+}+double qlRoughHestonModelRho(QlRoughHestonModel* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->rho();} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "roughHestonRho", "1.44"); return 0;+#endif+}+double qlRoughHestonModelV0(QlRoughHestonModel* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->v0();} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "roughHestonV0", "1.44"); return 0;+#endif+}+double qlRoughHestonModelHurst(QlRoughHestonModel* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->hurst();} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "roughHestonHurst", "1.44"); return 0;+#endif+}+QlHestonProcess* qlRoughHestonModelProcess(QlRoughHestonModel* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlHestonProcess((*arg(o))->process()));} catch (std::exception& er) {return handleException<QlHestonProcess*>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "roughHestonProcess", "1.44"); return nullptr;+#endif+}+void qlFreeAnalyticRoughHestonEngine(QlAnalyticRoughHestonEngine* o) {del(o);}+QlPricingEngine* qlAnalyticRoughHestonEngineAsPricingEngine(QlAnalyticRoughHestonEngine* o) {+#if QL_HEX_VERSION >= 0x01440000+  return ret(new QlPricingEngine(*arg(o)));+#else+  (void)o; return nullptr;+#endif+}+QlAnalyticRoughHestonEngine* qlAnalyticRoughHestonEngine(QlRoughHestonModel* model, unsigned integrationOrder, unsigned timeSteps, int approximation, unsigned nFactors, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlAnalyticRoughHestonEngine(alloc(new AnalyticRoughHestonEngine(*arg(model), integrationOrder, timeSteps, (AnalyticRoughHestonEngine::Approximation)approximation, nFactors))));} catch (std::exception& er) {return handleException<QlAnalyticRoughHestonEngine*>(e, er);}+#else+  (void)model; (void)integrationOrder; (void)timeSteps; (void)approximation; (void)nFactors;+  qlUnsupportedVersion(e, "analyticRoughHestonEngine", "1.44"); return nullptr;+#endif+}+QlAnalyticRoughHestonEngine* qlAnalyticRoughHestonEngineWithIntegration(QlRoughHestonModel* model, int algorithm, unsigned count, double relative, double absolute, int convergence, unsigned timeSteps, double epsilon, double alpha, int approximation, unsigned nFactors, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlAnalyticRoughHestonEngine(alloc(new AnalyticRoughHestonEngine(*arg(model), roughFourierIntegration(algorithm, count, relative, absolute, convergence), timeSteps, epsilon, alpha, (AnalyticRoughHestonEngine::Approximation)approximation, nFactors))));} catch (std::exception& er) {return handleException<QlAnalyticRoughHestonEngine*>(e, er);}+#else+  (void)model; (void)algorithm; (void)count; (void)relative; (void)absolute; (void)convergence; (void)timeSteps; (void)epsilon; (void)alpha; (void)approximation; (void)nFactors;+  qlUnsupportedVersion(e, "analyticRoughHestonEngineWithIntegration", "1.44"); return nullptr;+#endif+}+void qlRoughHestonchF(QlAnalyticRoughHestonEngine* o, double real, double imag, double time, double* outReal, double* outImag, QlError **e) { QlCallScope callbackScope(e);+  *outReal = 0; *outImag = 0;+#if QL_HEX_VERSION >= 0x01440000+  try {auto value = (*arg(o))->chF(std::complex<double>(real, imag), time); *outReal = value.real(); *outImag = value.imag();} catch (std::exception& er) {qlSetError(e, er.what());}+#else+  (void)o; (void)real; (void)imag; (void)time; (void)outReal; (void)outImag;+  qlUnsupportedVersion(e, "roughHestonCharacteristicFunction", "1.44");+#endif+}+void qlRoughHestonlnChF(QlAnalyticRoughHestonEngine* o, double real, double imag, double time, double* outReal, double* outImag, QlError **e) { QlCallScope callbackScope(e);+  *outReal = 0; *outImag = 0;+#if QL_HEX_VERSION >= 0x01440000+  try {auto value = (*arg(o))->lnChF(std::complex<double>(real, imag), time); *outReal = value.real(); *outImag = value.imag();} catch (std::exception& er) {qlSetError(e, er.what());}+#else+  (void)o; (void)real; (void)imag; (void)time; (void)outReal; (void)outImag;+  qlUnsupportedVersion(e, "roughHestonLogCharacteristicFunction", "1.44");+#endif+}+void qlRoughHestonriccatiSolution(QlAnalyticRoughHestonEngine* o, double real, double imag, double time, double* outReal, double* outImag, QlError **e) { QlCallScope callbackScope(e);+  *outReal = 0; *outImag = 0;+#if QL_HEX_VERSION >= 0x01440000+  try {auto value = (*arg(o))->riccatiSolution(std::complex<double>(real, imag), time); *outReal = value.real(); *outImag = value.imag();} catch (std::exception& er) {qlSetError(e, er.what());}+#else+  (void)o; (void)real; (void)imag; (void)time; (void)outReal; (void)outImag;+  qlUnsupportedVersion(e, "roughHestonRiccatiSolution", "1.44");+#endif+}+unsigned qlRoughHestonNumberOfEvaluations(QlAnalyticRoughHestonEngine* o, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->numberOfEvaluations();} catch (std::exception& er) {return handleException<unsigned>(e, er);}+#else+  (void)o;+  qlUnsupportedVersion(e, "roughHestonNumberOfEvaluations", "1.44"); return 0;+#endif+}+double qlRoughHestonPriceDate(QlAnalyticRoughHestonEngine* o, QlPlainVanillaPayoff* payoff, int maturity, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->priceVanillaPayoff(*arg(payoff), Date(maturity));} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o; (void)payoff; (void)maturity;+  qlUnsupportedVersion(e, "roughHestonPriceVanillaPayoff", "1.44"); return 0;+#endif+}+double qlRoughHestonPriceTime(QlAnalyticRoughHestonEngine* o, QlPlainVanillaPayoff* payoff, double maturity, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return (*arg(o))->priceVanillaPayoff(*arg(payoff), maturity);} catch (std::exception& er) {return handleException<double>(e, er);}+#else+  (void)o; (void)payoff; (void)maturity;+  qlUnsupportedVersion(e, "roughHestonPriceVanillaPayoff", "1.44"); return 0;+#endif+}+QlPricingEngine* qlDiscountingMtMCrossCurrencyBasisSwapEngine(Currency* domesticCcy, QlYieldTermStructure* domesticCurve, Currency* foreignCcy, QlYieldTermStructure* foreignCurve, QlQuote* spotFx, int includeSettlement, int settlementDate, int npvDate, int spotFxSettleDate, QlError **e) { QlCallScope callbackScope(e);++#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlPricingEngine(alloc(new DiscountingMtMCrossCurrencyBasisSwapEngine(*arg(domesticCcy), *arg(domesticCurve), *arg(foreignCcy), *arg(foreignCurve), *arg(spotFx), qlOptBool(includeSettlement), qlNullableDate(settlementDate), qlNullableDate(npvDate), qlNullableDate(spotFxSettleDate)))));} catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}+#else+  (void)domesticCcy; (void)domesticCurve; (void)foreignCcy; (void)foreignCurve; (void)spotFx; (void)includeSettlement; (void)settlementDate; (void)npvDate; (void)spotFxSettleDate;+  qlUnsupportedVersion(e, "discountingMtmCrossCurrencyBasisSwapEngine", "1.44"); return nullptr;+#endif+} } /* vim: set ft=cpp ff=unix ts=8 sts=2 sw=2 et: */
cbits/qlPricingEngine.h view
@@ -1,316 +1,321 @@+#include "qlCallback.h" #ifdef __cplusplus extern "C" { #endif-  QlPricingEngine *qlDiscountingBondEngine(QlYieldTermStructure *ts, int f, char **e);+  typedef QlCallbackArgs FdmCallbackArgs;+  QlPricingEngine *qlDiscountingBondEngine(QlYieldTermStructure *ts, int f, QlError **e);   QlPricingEngine* qlDiscountingPerpetualFuturesEngine(     QlYieldTermStructure* domesticDiscountCurve, QlYieldTermStructure* foreignDiscountCurve,     QlQuote* assetSpot, unsigned fundingTimesLen, double* fundingTimes,     unsigned fundingRatesLen, double* fundingRates, unsigned interestRateDiffsLen,-    double* interestRateDiffs, int fundingInterpType, double maxT, char **e);-  QlPricingEngine* qlRiskyBondEngine(QlDefaultProbabilityTermStructure* defaultTS, double recoveryRate, QlYieldTermStructure* yieldTS, char **e);-  QlPricingEngine* qlDiscountingSwapEngine(QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, char **e);-  QlPricingEngine* qlDiscountingFxForwardEngine(QlYieldTermStructure* sourceCurrencyDiscountCurve, QlYieldTermStructure* targetCurrencyDiscountCurve, QlQuote* spotFx, char **e);-  QlPricingEngine* qlDiscountingConstNotionalCrossCurrencySwapEngine(Currency* domesticCcy, QlYieldTermStructure* domesticCcyDiscountCurve, Currency* foreignCcy, QlYieldTermStructure* foreignCcyDiscountCurve, QlQuote* spotFX, int includeSettlementDateFlows, int settlementDate, int npvDate, int spotFXSettleDate, char **e);-  QlPricingEngine* qlCounterpartyAdjSwapEngine(QlYieldTermStructure* discountCurve, QlQuote* blackVol, QlDefaultProbabilityTermStructure* ctptyDTS, double ctptyRecoveryRate, QlDefaultProbabilityTermStructure* invstDTS, double invstRecoveryRate, char **e);-  QlPricingEngine* qlAnalyticBarrierEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticTwoAssetBarrierEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, QlQuote* rho, char **e);-  QlPricingEngine* qlAnalyticSoftBarrierEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticSimpleChooserEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticComplexChooserEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticTwoAssetCorrelationEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, QlQuote* correlation, char **e);-  QlPricingEngine* qlAnalyticEuropeanMargrabeEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, char **e);-  QlPricingEngine* qlAnalyticAmericanMargrabeEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, char **e);-  QlPricingEngine* qlAnalyticWriterExtensibleOptionEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticHolderExtensibleOptionEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticPartialTimeBarrierOptionEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticBinaryBarrierEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlFdBlackScholesBarrierEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, char **e);-  QlPricingEngine* qlFdHestonBarrierEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e);-  QlPricingEngine* qlFdHestonBarrierEngine1(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e);-  QlPricingEngine* qlFdHestonDoubleBarrierEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e);-  QlPricingEngine* qlBinomialBarrierEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned maxTimeSteps, char **e);-  QlPricingEngine* qlVannaVolgaBarrierEngine(QlDeltaVolQuote* atmVol, QlDeltaVolQuote* vol25Put, QlDeltaVolQuote* vol25Call, QlQuote* spotFX, QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS, int adaptVanDelta, double bsPriceWithSmile, char **e);-  QlPricingEngine* qlAnalyticDoubleBarrierEngine(QlGeneralizedBlackScholesProcess* process, int series, char **e);-  QlPricingEngine* qlVannaVolgaDoubleBarrierEngine(QlDeltaVolQuote* atmVol, QlDeltaVolQuote* vol25Put, QlDeltaVolQuote* vol25Call, QlQuote* spotFX, QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS, int adaptVanDelta, double bsPriceWithSmile, int series, char **e);-  QlPricingEngine* qlBinomialDoubleBarrierEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, char **e);-  QlPricingEngine* qlMCDoubleBarrierEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlAnalyticCliquetEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticCompoundOptionEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticContinuousFixedLookbackEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticContinuousFloatingLookbackEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticContinuousPartialFloatingLookbackEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticContinuousPartialFixedLookbackEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticContinuousGeometricAveragePriceAsianEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticContinuousGeometricAveragePriceAsianHestonEngine(QlHestonProcess* process, unsigned summationCutoff, double xiRightLimit, char **e);-  QlPricingEngine* qlAnalyticDiscreteGeometricAveragePriceAsianHestonEngine(QlHestonProcess* process, double xiRightLimit, char **e);-  QlPricingEngine* qlMCLookbackFixedEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCLookbackFloatingEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCLookbackPartialFixedEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCLookbackPartialFloatingEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlAnalyticDigitalAmericanEngine(QlGeneralizedBlackScholesProcess* x0, char **e);-  QlPricingEngine* qlAnalyticDigitalAmericanKOEngine(QlGeneralizedBlackScholesProcess* x0, char **e);-  QlPricingEngine* qlAnalyticDiscreteGeometricAveragePriceAsianEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlAnalyticDiscreteGeometricAverageStrikeAsianEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlTurnbullWakemanAsianEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlFdBlackScholesAsianEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned aGrid, FdmSchemeDesc *fdScheme, char **e);-  QlPricingEngine* qlAnalyticDividendEuropeanEngine(QlGeneralizedBlackScholesProcess* x0, unsigned dividendsLen, QlDividend** dividends, char **e);-  QlPricingEngine* qlAnalyticEuropeanEngine(QlGeneralizedBlackScholesProcess* x0, QlYieldTermStructure* discountCurve, char **e);-  QlPricingEngine* qlAnalyticPerformanceEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlForwardEuropeanEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlForwardBaroneAdesiWhaleyEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlForwardBjerksundStenslandEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlForwardFdBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* process, char **e);-  QlPricingEngine* qlQuantoEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e);-  QlPricingEngine* qlQuantoForwardEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e);-  QlPricingEngine* qlQuantoForwardPerformanceEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e);-  QlPricingEngine* qlQuantoBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e);-  QlPricingEngine* qlQuantoDoubleBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, char **e);-  QlPricingEngine* qlMCForwardEuropeanBSEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCForwardEuropeanHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, int controlVariate, char **e);-  QlPricingEngine* qlAnalyticHestonForwardEuropeanEngine(QlHestonProcess* process, unsigned integrationOrder, char **e);-  QlPricingEngine* qlBlackCapFloorEngine1(QlYieldTermStructure* discountCurve, QlOptionletVolatilityStructure* vol, char **e);-  QlPricingEngine* qlBlackCapFloorEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, double displacement, char **e);-  QlPricingEngine* qlBlackSwaptionEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, double displacement, int model, char **e);-  QlPricingEngine* qlHaganIrregularSwaptionEngine(QlSwaptionVolatilityStructure*, QlYieldTermStructure*, char **e);-  QlPricingEngine* qlBlackSwaptionEngine1(QlYieldTermStructure* discountCurve, QlSwaptionVolatilityStructure* vol, char **e);-  QlPricingEngine* qlBachelierCapFloorEngine1(QlYieldTermStructure* discountCurve, QlOptionletVolatilityStructure* vol, char **e);-  QlPricingEngine* qlBachelierCapFloorEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, char **e);-  QlPricingEngine* qlBachelierSwaptionEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, int model, char **e);-  QlPricingEngine* qlBachelierSwaptionEngine1(QlYieldTermStructure* discountCurve, QlSwaptionVolatilityStructure* vol, char **e);+    double* interestRateDiffs, int fundingInterpType, double maxT, QlError **e);+  QlPricingEngine* qlRiskyBondEngine(QlDefaultProbabilityTermStructure* defaultTS, double recoveryRate, QlYieldTermStructure* yieldTS, QlError **e);+  QlPricingEngine* qlDiscountingSwapEngine(QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int settlementDate, int npvDate, QlError **e);+  QlPricingEngine* qlDiscountingFxForwardEngine(QlYieldTermStructure* sourceCurrencyDiscountCurve, QlYieldTermStructure* targetCurrencyDiscountCurve, QlQuote* spotFx, QlError **e);+  QlPricingEngine* qlDiscountingConstNotionalCrossCurrencySwapEngine(Currency* domesticCcy, QlYieldTermStructure* domesticCcyDiscountCurve, Currency* foreignCcy, QlYieldTermStructure* foreignCcyDiscountCurve, QlQuote* spotFX, int includeSettlementDateFlows, int settlementDate, int npvDate, int spotFXSettleDate, QlError **e);+  QlPricingEngine* qlCounterpartyAdjSwapEngine(QlYieldTermStructure* discountCurve, QlQuote* blackVol, QlDefaultProbabilityTermStructure* ctptyDTS, double ctptyRecoveryRate, QlDefaultProbabilityTermStructure* invstDTS, double invstRecoveryRate, QlError **e);+  QlPricingEngine* qlAnalyticBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticTwoAssetBarrierEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, QlQuote* rho, QlError **e);+  QlPricingEngine* qlAnalyticSoftBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticSimpleChooserEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticComplexChooserEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticTwoAssetCorrelationEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, QlQuote* correlation, QlError **e);+  QlPricingEngine* qlAnalyticEuropeanMargrabeEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, QlError **e);+  QlPricingEngine* qlAnalyticAmericanMargrabeEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, QlError **e);+  QlPricingEngine* qlAnalyticWriterExtensibleOptionEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticHolderExtensibleOptionEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticPartialTimeBarrierOptionEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticBinaryBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlFdBlackScholesBarrierEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, QlError **e);+  QlPricingEngine* qlFdHestonBarrierEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e);+  QlPricingEngine* qlFdHestonBarrierEngine1(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e);+  QlPricingEngine* qlFdHestonDoubleBarrierEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e);+  QlPricingEngine* qlBinomialBarrierEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned maxTimeSteps, QlError **e);+  QlPricingEngine* qlVannaVolgaBarrierEngine(QlDeltaVolQuote* atmVol, QlDeltaVolQuote* vol25Put, QlDeltaVolQuote* vol25Call, QlQuote* spotFX, QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS, int adaptVanDelta, double bsPriceWithSmile, QlError **e);+  QlPricingEngine* qlAnalyticDoubleBarrierEngine(QlGeneralizedBlackScholesProcess* process, int series, QlError **e);+  QlPricingEngine* qlVannaVolgaDoubleBarrierEngine(QlDeltaVolQuote* atmVol, QlDeltaVolQuote* vol25Put, QlDeltaVolQuote* vol25Call, QlQuote* spotFX, QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS, int adaptVanDelta, double bsPriceWithSmile, int series, QlError **e);+  QlPricingEngine* qlBinomialDoubleBarrierEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, QlError **e);+  QlPricingEngine* qlMCDoubleBarrierEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlAnalyticCliquetEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticCompoundOptionEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticContinuousFixedLookbackEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticContinuousFloatingLookbackEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticContinuousPartialFloatingLookbackEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticContinuousPartialFixedLookbackEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticContinuousGeometricAveragePriceAsianEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticContinuousGeometricAveragePriceAsianHestonEngine(QlHestonProcess* process, unsigned summationCutoff, double xiRightLimit, QlError **e);+  QlPricingEngine* qlAnalyticDiscreteGeometricAveragePriceAsianHestonEngine(QlHestonProcess* process, double xiRightLimit, QlError **e);+  QlPricingEngine* qlMCLookbackFixedEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCLookbackFloatingEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCLookbackPartialFixedEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCLookbackPartialFloatingEngine(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlAnalyticDigitalAmericanEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e);+  QlPricingEngine* qlAnalyticDigitalAmericanKOEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e);+  QlPricingEngine* qlAnalyticDiscreteGeometricAveragePriceAsianEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlAnalyticDiscreteGeometricAverageStrikeAsianEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlTurnbullWakemanAsianEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlFdBlackScholesAsianEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned aGrid, FdmSchemeDesc *fdScheme, QlError **e);+  QlPricingEngine* qlAnalyticDividendEuropeanEngine(QlGeneralizedBlackScholesProcess* x0, unsigned dividendsLen, QlDividend** dividends, QlError **e);+  QlPricingEngine* qlAnalyticEuropeanEngine(QlGeneralizedBlackScholesProcess* x0, QlYieldTermStructure* discountCurve, QlError **e);+  QlPricingEngine* qlAnalyticPerformanceEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlForwardEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlForwardBaroneAdesiWhaleyEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlForwardBjerksundStenslandEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlForwardFdBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* process, QlError **e);+  QlPricingEngine* qlQuantoEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e);+  QlPricingEngine* qlQuantoForwardEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e);+  QlPricingEngine* qlQuantoForwardPerformanceEuropeanEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e);+  QlPricingEngine* qlQuantoBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e);+  QlPricingEngine* qlQuantoDoubleBarrierEngine(QlGeneralizedBlackScholesProcess* process, QlYieldTermStructure* foreignRiskFreeRate, QlBlackVolTermStructure* exchangeRateVolatility, QlQuote* correlation, QlError **e);+  QlPricingEngine* qlMCForwardEuropeanBSEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCForwardEuropeanHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, int controlVariate, QlError **e);+  QlPricingEngine* qlAnalyticHestonForwardEuropeanEngine(QlHestonProcess* process, unsigned integrationOrder, QlError **e);+  QlPricingEngine* qlBlackCapFloorEngine1(QlYieldTermStructure* discountCurve, QlOptionletVolatilityStructure* vol, QlError **e);+  QlPricingEngine* qlBlackCapFloorEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, double displacement, QlError **e);+  QlPricingEngine* qlBlackSwaptionEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, double displacement, int model, QlError **e);+  QlPricingEngine* qlHaganIrregularSwaptionEngine(QlSwaptionVolatilityStructure*, QlYieldTermStructure*, QlError **e);+  QlPricingEngine* qlBlackSwaptionEngine1(QlYieldTermStructure* discountCurve, QlSwaptionVolatilityStructure* vol, QlError **e);+  QlPricingEngine* qlBachelierCapFloorEngine1(QlYieldTermStructure* discountCurve, QlOptionletVolatilityStructure* vol, QlError **e);+  QlPricingEngine* qlBachelierCapFloorEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, QlError **e);+  QlPricingEngine* qlBachelierSwaptionEngine(QlYieldTermStructure* discountCurve, QlQuote* vol, DayCounter* dc, int model, QlError **e);+  QlPricingEngine* qlBachelierSwaptionEngine1(QlYieldTermStructure* discountCurve, QlSwaptionVolatilityStructure* vol, QlError **e);    void qlFreePricingEngine(QlPricingEngine *engine);   void qlFreeBlackCalculator(QlBlackCalculator *o);   void qlFreeBlackScholesCalculator(QlBlackScholesCalculator *o);   QlBlackCalculator* qlBlackScholesCalculatorAsBlackCalculator(QlBlackScholesCalculator *o); -  double qlBlackCalculatorAlpha(QlBlackCalculator* o, char **e);-  double qlBlackCalculatorBeta(QlBlackCalculator* o, char **e);-  QlBlackCalculator* qlBlackCalculator1(int optionType, double strike, double forward, double stdDev, double discount, char **e);-  QlBlackCalculator* qlBlackCalculator(QlStrikedTypePayoff* payoff, double forward, double stdDev, double discount, char **e);-  double qlBlackCalculatorDelta(QlBlackCalculator* o, double spot, char **e);-  double qlBlackCalculatorDeltaForward(QlBlackCalculator* o, char **e);-  double qlBlackCalculatorDividendRho(QlBlackCalculator* o, double maturity, char **e);-  double qlBlackCalculatorElasticity(QlBlackCalculator* o, double spot, char **e);-  double qlBlackCalculatorElasticityForward(QlBlackCalculator* o, char **e);-  double qlBlackCalculatorGamma(QlBlackCalculator* o, double spot, char **e);-  double qlBlackCalculatorGammaForward(QlBlackCalculator* o, char **e);-  double qlBlackCalculatorItmAssetProbability(QlBlackCalculator* o, char **e);-  double qlBlackCalculatorItmCashProbability(QlBlackCalculator* o, char **e);-  double qlBlackCalculatorRho(QlBlackCalculator* o, double maturity, char **e);-  double qlBlackCalculatorStrikeSensitivity(QlBlackCalculator* o, char **e);-  double qlBlackCalculatorStrikeGamma(QlBlackCalculator* o, char **e);-  double qlBlackCalculatorTheta(QlBlackCalculator* o, double spot, double maturity, char **e);-  double qlBlackCalculatorThetaPerDay(QlBlackCalculator* o, double spot, double maturity, char **e);-  double qlBlackCalculatorValue(QlBlackCalculator* o, char **e);-  double qlBlackCalculatorVanna(QlBlackCalculator* o, double spot, double maturity, char **e);-  double qlBlackCalculatorVega(QlBlackCalculator* o, double maturity, char **e);-  double qlBlackCalculatorVolga(QlBlackCalculator* o, double maturity, char **e);+  double qlBlackCalculatorAlpha(QlBlackCalculator* o, QlError **e);+  double qlBlackCalculatorBeta(QlBlackCalculator* o, QlError **e);+  QlBlackCalculator* qlBlackCalculator1(int optionType, double strike, double forward, double stdDev, double discount, QlError **e);+  QlBlackCalculator* qlBlackCalculator(QlStrikedTypePayoff* payoff, double forward, double stdDev, double discount, QlError **e);+  double qlBlackCalculatorDelta(QlBlackCalculator* o, double spot, QlError **e);+  double qlBlackCalculatorDeltaForward(QlBlackCalculator* o, QlError **e);+  double qlBlackCalculatorDividendRho(QlBlackCalculator* o, double maturity, QlError **e);+  double qlBlackCalculatorElasticity(QlBlackCalculator* o, double spot, QlError **e);+  double qlBlackCalculatorElasticityForward(QlBlackCalculator* o, QlError **e);+  double qlBlackCalculatorGamma(QlBlackCalculator* o, double spot, QlError **e);+  double qlBlackCalculatorGammaForward(QlBlackCalculator* o, QlError **e);+  double qlBlackCalculatorItmAssetProbability(QlBlackCalculator* o, QlError **e);+  double qlBlackCalculatorItmCashProbability(QlBlackCalculator* o, QlError **e);+  double qlBlackCalculatorRho(QlBlackCalculator* o, double maturity, QlError **e);+  double qlBlackCalculatorStrikeSensitivity(QlBlackCalculator* o, QlError **e);+  double qlBlackCalculatorStrikeGamma(QlBlackCalculator* o, QlError **e);+  double qlBlackCalculatorTheta(QlBlackCalculator* o, double spot, double maturity, QlError **e);+  double qlBlackCalculatorThetaPerDay(QlBlackCalculator* o, double spot, double maturity, QlError **e);+  double qlBlackCalculatorValue(QlBlackCalculator* o, QlError **e);+  double qlBlackCalculatorVanna(QlBlackCalculator* o, double spot, double maturity, QlError **e);+  double qlBlackCalculatorVega(QlBlackCalculator* o, double maturity, QlError **e);+  double qlBlackCalculatorVolga(QlBlackCalculator* o, double maturity, QlError **e);    void qlFreeBachelierCalculator(QlBachelierCalculator *o);-  double qlBachelierCalculatorAlpha(QlBachelierCalculator* o, char **e);-  double qlBachelierCalculatorBeta(QlBachelierCalculator* o, char **e);-  QlBachelierCalculator* qlBachelierCalculator1(int optionType, double strike, double forward, double stdDev, double discount, char **e);-  QlBachelierCalculator* qlBachelierCalculator(QlStrikedTypePayoff* payoff, double forward, double stdDev, double discount, char **e);-  double qlBachelierCalculatorDelta(QlBachelierCalculator* o, double spot, char **e);-  double qlBachelierCalculatorDeltaForward(QlBachelierCalculator* o, char **e);-  double qlBachelierCalculatorDividendRho(QlBachelierCalculator* o, double maturity, char **e);-  double qlBachelierCalculatorElasticity(QlBachelierCalculator* o, double spot, char **e);-  double qlBachelierCalculatorElasticityForward(QlBachelierCalculator* o, char **e);-  double qlBachelierCalculatorGamma(QlBachelierCalculator* o, double spot, char **e);-  double qlBachelierCalculatorGammaForward(QlBachelierCalculator* o, char **e);-  double qlBachelierCalculatorItmAssetProbability(QlBachelierCalculator* o, char **e);-  double qlBachelierCalculatorItmCashProbability(QlBachelierCalculator* o, char **e);-  double qlBachelierCalculatorRho(QlBachelierCalculator* o, double maturity, char **e);-  double qlBachelierCalculatorStrikeSensitivity(QlBachelierCalculator* o, char **e);-  double qlBachelierCalculatorStrikeGamma(QlBachelierCalculator* o, char **e);-  double qlBachelierCalculatorTheta(QlBachelierCalculator* o, double spot, double maturity, char **e);-  double qlBachelierCalculatorThetaPerDay(QlBachelierCalculator* o, double spot, double maturity, char **e);-  double qlBachelierCalculatorValue(QlBachelierCalculator* o, char **e);-  double qlBachelierCalculatorVanna(QlBachelierCalculator* o, double maturity, char **e);-  double qlBachelierCalculatorVega(QlBachelierCalculator* o, double maturity, char **e);-  double qlBachelierCalculatorVolga(QlBachelierCalculator* o, double maturity, char **e);+  double qlBachelierCalculatorAlpha(QlBachelierCalculator* o, QlError **e);+  double qlBachelierCalculatorBeta(QlBachelierCalculator* o, QlError **e);+  QlBachelierCalculator* qlBachelierCalculator1(int optionType, double strike, double forward, double stdDev, double discount, QlError **e);+  QlBachelierCalculator* qlBachelierCalculator(QlStrikedTypePayoff* payoff, double forward, double stdDev, double discount, QlError **e);+  double qlBachelierCalculatorDelta(QlBachelierCalculator* o, double spot, QlError **e);+  double qlBachelierCalculatorDeltaForward(QlBachelierCalculator* o, QlError **e);+  double qlBachelierCalculatorDividendRho(QlBachelierCalculator* o, double maturity, QlError **e);+  double qlBachelierCalculatorElasticity(QlBachelierCalculator* o, double spot, QlError **e);+  double qlBachelierCalculatorElasticityForward(QlBachelierCalculator* o, QlError **e);+  double qlBachelierCalculatorGamma(QlBachelierCalculator* o, double spot, QlError **e);+  double qlBachelierCalculatorGammaForward(QlBachelierCalculator* o, QlError **e);+  double qlBachelierCalculatorItmAssetProbability(QlBachelierCalculator* o, QlError **e);+  double qlBachelierCalculatorItmCashProbability(QlBachelierCalculator* o, QlError **e);+  double qlBachelierCalculatorRho(QlBachelierCalculator* o, double maturity, QlError **e);+  double qlBachelierCalculatorStrikeSensitivity(QlBachelierCalculator* o, QlError **e);+  double qlBachelierCalculatorStrikeGamma(QlBachelierCalculator* o, QlError **e);+  double qlBachelierCalculatorTheta(QlBachelierCalculator* o, double spot, double maturity, QlError **e);+  double qlBachelierCalculatorThetaPerDay(QlBachelierCalculator* o, double spot, double maturity, QlError **e);+  double qlBachelierCalculatorValue(QlBachelierCalculator* o, QlError **e);+  double qlBachelierCalculatorVanna(QlBachelierCalculator* o, double maturity, QlError **e);+  double qlBachelierCalculatorVega(QlBachelierCalculator* o, double maturity, QlError **e);+  double qlBachelierCalculatorVolga(QlBachelierCalculator* o, double maturity, QlError **e); -  QlBlackScholesCalculator* qlBlackScholesCalculator1(int optionType, double strike, double spot, double growth, double stdDev, double discount, char **e);-  QlBlackScholesCalculator* qlBlackScholesCalculator(QlStrikedTypePayoff* payoff, double spot, double growth, double stdDev, double discount, char **e);-  double qlBlackScholesCalculatorDelta(QlBlackScholesCalculator* o, char **e);-  double qlBlackScholesCalculatorElasticity(QlBlackScholesCalculator* o, char **e);-  double qlBlackScholesCalculatorGamma(QlBlackScholesCalculator* o, char **e);-  double qlBlackScholesCalculatorTheta(QlBlackScholesCalculator* o, double maturity, char **e);-  double qlBlackScholesCalculatorThetaPerDay(QlBlackScholesCalculator* o, double maturity, char **e);+  QlBlackScholesCalculator* qlBlackScholesCalculator1(int optionType, double strike, double spot, double growth, double stdDev, double discount, QlError **e);+  QlBlackScholesCalculator* qlBlackScholesCalculator(QlStrikedTypePayoff* payoff, double spot, double growth, double stdDev, double discount, QlError **e);+  double qlBlackScholesCalculatorDelta(QlBlackScholesCalculator* o, QlError **e);+  double qlBlackScholesCalculatorElasticity(QlBlackScholesCalculator* o, QlError **e);+  double qlBlackScholesCalculatorGamma(QlBlackScholesCalculator* o, QlError **e);+  double qlBlackScholesCalculatorTheta(QlBlackScholesCalculator* o, double maturity, QlError **e);+  double qlBlackScholesCalculatorThetaPerDay(QlBlackScholesCalculator* o, double maturity, QlError **e);   void qlFreeBlackDeltaCalculator(BlackDeltaCalculator *o);-  BlackDeltaCalculator* qlBlackDeltaCalculator(int optionType, int deltaType, double spot, double dDiscount, double fDiscount, double stdDev, char **e);-  double qlBlackDeltaCalculatorDeltaFromStrike(BlackDeltaCalculator* o, double strike, char **e);-  double qlBlackDeltaCalculatorStrikeFromDelta(BlackDeltaCalculator* o, double delta, char **e);-  double qlBlackDeltaCalculatorAtmStrike(BlackDeltaCalculator* o, int atmType, char **e);-  double qlQuantLibBlackFormula(int optionType, double strike, double forward, double stdDev, double discount, double displacement, char **e);-  double qlQuantLibBlackFormulaCashItmProbability(int optionType, double strike, double forward, double stdDev, double displacement, char **e);-  double qlQuantLibBlackFormulaImpliedStdDev(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, double guess, double accuracy, unsigned maxIterations, char **e);-  double qlQuantLibBlackFormulaImpliedStdDevApproximation(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, char **e);-  double qlQuantLibBlackFormulaStdDevDerivative(double strike, double forward, double stdDev, double discount, double displacement, char **e);-  double qlQuantLibBlackFormulaVolDerivative(double strike, double forward, double stdDev, double expiry, double discount, double displacement, char **e);-  double qlQuantLibBlackScholesTheta(QlGeneralizedBlackScholesProcess* x0, double value, double delta, double gamma, char **e);-  double qlQuantLibBachelierBlackFormula(int optionType, double strike, double forward, double stdDev, double discount, char **e);-  double qlQuantLibBlackFormulaForwardDerivative(int optionType, double strike, double forward, double stdDev, double discount, double displacement, char **e);-  double qlQuantLibBlackFormulaImpliedStdDevChambers(int optionType, double strike, double forward, double blackPrice, double blackAtmPrice, double discount, double displacement, char **e);-  double qlQuantLibBlackFormulaImpliedStdDevApproximationRS(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, char **e);-  double qlQuantLibBlackFormulaImpliedStdDevLiRS(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, double guess, double omega, double accuracy, unsigned maxIterations, char **e);-  double qlQuantLibBlackFormulaAssetItmProbability(int optionType, double strike, double forward, double stdDev, double displacement, char **e);-  double qlQuantLibBlackFormulaStdDevSecondDerivative(double strike, double forward, double stdDev, double discount, double displacement, char **e);-  double qlQuantLibBachelierBlackFormulaForwardDerivative(int optionType, double strike, double forward, double stdDev, double discount, char **e);-  double qlQuantLibBachelierBlackFormulaImpliedVol(int optionType, double strike, double forward, double tte, double bachelierPrice, double discount, char **e);-  double qlQuantLibBachelierBlackFormulaImpliedVolChoi(int optionType, double strike, double forward, double tte, double bachelierPrice, double discount, char **e);-  double qlQuantLibBachelierBlackFormulaStdDevDerivative(double strike, double forward, double stdDev, double discount, char **e);-  double qlQuantLibBachelierBlackFormulaAssetItmProbability(int optionType, double strike, double forward, double stdDev, char **e);-  double qlQuantLibDefaultThetaPerDay(double theta, char **e);+  BlackDeltaCalculator* qlBlackDeltaCalculator(int optionType, int deltaType, double spot, double dDiscount, double fDiscount, double stdDev, QlError **e);+  double qlBlackDeltaCalculatorDeltaFromStrike(BlackDeltaCalculator* o, double strike, QlError **e);+  double qlBlackDeltaCalculatorStrikeFromDelta(BlackDeltaCalculator* o, double delta, QlError **e);+  double qlBlackDeltaCalculatorAtmStrike(BlackDeltaCalculator* o, int atmType, QlError **e);+  double qlQuantLibBlackFormula(int optionType, double strike, double forward, double stdDev, double discount, double displacement, QlError **e);+  double qlQuantLibBlackFormulaCashItmProbability(int optionType, double strike, double forward, double stdDev, double displacement, QlError **e);+  double qlQuantLibBlackFormulaImpliedStdDev(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, double guess, double accuracy, unsigned maxIterations, QlError **e);+  double qlQuantLibBlackFormulaImpliedStdDevApproximation(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, QlError **e);+  double qlQuantLibBlackFormulaStdDevDerivative(double strike, double forward, double stdDev, double discount, double displacement, QlError **e);+  double qlQuantLibBlackFormulaVolDerivative(double strike, double forward, double stdDev, double expiry, double discount, double displacement, QlError **e);+  double qlQuantLibBlackScholesTheta(QlGeneralizedBlackScholesProcess* x0, double value, double delta, double gamma, QlError **e);+  double qlQuantLibBachelierBlackFormula(int optionType, double strike, double forward, double stdDev, double discount, QlError **e);+  double qlQuantLibBlackFormulaForwardDerivative(int optionType, double strike, double forward, double stdDev, double discount, double displacement, QlError **e);+  double qlQuantLibBlackFormulaImpliedStdDevChambers(int optionType, double strike, double forward, double blackPrice, double blackAtmPrice, double discount, double displacement, QlError **e);+  double qlQuantLibBlackFormulaImpliedStdDevApproximationRS(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, QlError **e);+  double qlQuantLibBlackFormulaImpliedStdDevLiRS(int optionType, double strike, double forward, double blackPrice, double discount, double displacement, double guess, double omega, double accuracy, unsigned maxIterations, QlError **e);+  double qlQuantLibBlackFormulaAssetItmProbability(int optionType, double strike, double forward, double stdDev, double displacement, QlError **e);+  double qlQuantLibBlackFormulaStdDevSecondDerivative(double strike, double forward, double stdDev, double discount, double displacement, QlError **e);+  double qlQuantLibBachelierBlackFormulaForwardDerivative(int optionType, double strike, double forward, double stdDev, double discount, QlError **e);+  double qlQuantLibBachelierBlackFormulaImpliedVol(int optionType, double strike, double forward, double tte, double bachelierPrice, double discount, QlError **e);+  double qlQuantLibBachelierBlackFormulaImpliedVolChoi(int optionType, double strike, double forward, double tte, double bachelierPrice, double discount, QlError **e);+  double qlQuantLibBachelierBlackFormulaStdDevDerivative(double strike, double forward, double stdDev, double discount, QlError **e);+  double qlQuantLibBachelierBlackFormulaAssetItmProbability(int optionType, double strike, double forward, double stdDev, QlError **e);+  double qlQuantLibDefaultThetaPerDay(double theta, QlError **e); -  QlPricingEngine* qlAnalyticBSMHullWhiteEngine(double equityShortRateCorrelation, QlGeneralizedBlackScholesProcess* x1, QlHullWhite* x2, char **e);-  QlPricingEngine* qlAnalyticCapFloorEngine(QlAffineModel* model, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlAnalyticGJRGARCHEngine(QlGJRGARCHModel* model, char **e);-  QlPricingEngine* qlAnalyticHestonEngine(QlHestonModel* model, double relTolerance, unsigned maxEvaluations, char **e);-  QlPricingEngine* qlAnalyticHestonHullWhiteEngine(QlHestonModel* hestonModel, QlHullWhite* hullWhiteModel, unsigned integrationOrder, char **e);-  QlPricingEngine* qlBatesEngine(QlBatesModel* model, unsigned integrationOrder, char **e);-  QlPricingEngine* qlFFTVanillaEngine(QlGeneralizedBlackScholesProcess* process, double logStrikeSpacing, char **e);-  QlPricingEngine* qlG2SwaptionEngine(QlG2* model, double range, unsigned intervals, char **e);-  QlPricingEngine* qlJumpDiffusionEngine(QlMerton76Process* x0, double relativeAccuracy_, unsigned maxIterations, char **e);-  QlPricingEngine* qlTreeCapFloorEngine(QlShortRateModel* model, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlTreeSwaptionEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlTreeVanillaSwapEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlVarianceGammaEngine(QlVarianceGammaProcess* x0, double absoluteError, char **e);-  QlPricingEngine* qlAnalyticHestonEngine1(QlHestonModel* model, unsigned integrationOrder, char **e);+  QlPricingEngine* qlAnalyticBSMHullWhiteEngine(double equityShortRateCorrelation, QlGeneralizedBlackScholesProcess* x1, QlHullWhite* x2, QlError **e);+  QlPricingEngine* qlAnalyticCapFloorEngine(QlAffineModel* model, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlAnalyticGJRGARCHEngine(QlGJRGARCHModel* model, QlError **e);+  QlPricingEngine* qlAnalyticHestonEngine(QlHestonModel* model, double relTolerance, unsigned maxEvaluations, QlError **e);+  QlPricingEngine* qlAnalyticH1HWEngine(QlHestonModel* model, QlHullWhite* hullWhiteModel, double rhoSr, unsigned integrationOrder, int exactMean, unsigned meanOrder, QlError **e);+  QlPricingEngine* qlAnalyticHestonHullWhiteEngine(QlHestonModel* hestonModel, QlHullWhite* hullWhiteModel, unsigned integrationOrder, QlError **e);+  QlPricingEngine* qlBatesEngine(QlBatesModel* model, unsigned integrationOrder, QlError **e);+  QlPricingEngine* qlFFTVanillaEngine(QlGeneralizedBlackScholesProcess* process, double logStrikeSpacing, QlError **e);+  QlPricingEngine* qlG2SwaptionEngine(QlG2* model, double range, unsigned intervals, QlError **e);+  QlPricingEngine* qlJumpDiffusionEngine(QlMerton76Process* x0, double relativeAccuracy_, unsigned maxIterations, QlError **e);+  QlPricingEngine* qlTreeCapFloorEngine(QlShortRateModel* model, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlTreeSwaptionEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlTreeVanillaSwapEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlVarianceGammaEngine(QlVarianceGammaProcess* x0, double absoluteError, QlError **e);+  QlPricingEngine* qlAnalyticHestonEngine1(QlHestonModel* model, unsigned integrationOrder, QlError **e);   int qlAnalyticHestonEngineOptimalControlVariate(double t, double v0, double kappa, double theta, double sigma, double rho);-  QlPricingEngine* qlAnalyticHestonHullWhiteEngine1(QlHestonModel* model, QlHullWhite* hullWhiteModel, double relTolerance, unsigned maxEvaluations, char **e);-  QlPricingEngine* qlBatesEngine1(QlBatesModel* model, double relTolerance, unsigned maxEvaluations, char **e);+  QlPricingEngine* qlAnalyticHestonHullWhiteEngine1(QlHestonModel* model, QlHullWhite* hullWhiteModel, double relTolerance, unsigned maxEvaluations, QlError **e);+  QlPricingEngine* qlAnalyticH1HWEngine1(QlHestonModel* model, QlHullWhite* hullWhiteModel, double rhoSr, double relTolerance, unsigned maxEvaluations, int exactMean, unsigned meanOrder, QlError **e);+  QlPricingEngine* qlBatesEngine1(QlBatesModel* model, double relTolerance, unsigned maxEvaluations, QlError **e); -  QlPricingEngine* qlBaroneAdesiWhaleyApproximationEngine(QlGeneralizedBlackScholesProcess* x0, char **e);-  QlPricingEngine* qlBatesDetJumpEngine1(QlBatesDetJumpModel* model, double relTolerance, unsigned maxEvaluations, char **e);-  QlPricingEngine* qlBatesDetJumpEngine(QlBatesDetJumpModel* model, unsigned integrationOrder, char **e);-  QlPricingEngine* qlBatesDoubleExpDetJumpEngine1(QlBatesDoubleExpDetJumpModel* model, double relTolerance, unsigned maxEvaluations, char **e);-  QlPricingEngine* qlBatesDoubleExpDetJumpEngine(QlBatesDoubleExpDetJumpModel* model, unsigned integrationOrder, char **e);-  QlPricingEngine* qlBatesDoubleExpEngine1(QlBatesDoubleExpModel* model, double relTolerance, unsigned maxEvaluations, char **e);-  QlPricingEngine* qlBatesDoubleExpEngine(QlBatesDoubleExpModel* model, unsigned integrationOrder, char **e);-  QlPricingEngine* qlBjerksundStenslandApproximationEngine(QlGeneralizedBlackScholesProcess* x0, char **e);-  QlPricingEngine* qlQdPlusAmericanEngine(QlGeneralizedBlackScholesProcess* process, unsigned interpolationPoints, int solverType, double eps, unsigned maxIter, char **e);-  QlPricingEngine* qlQdFpAmericanEngine(QlGeneralizedBlackScholesProcess* process, int scheme, int fpEquation, char **e);-  QlPricingEngine* qlContinuousArithmeticAsianVecerEngine(QlGeneralizedBlackScholesProcess* process, QlQuote* currentAverage, int startDate, unsigned timeSteps, unsigned assetSteps, double zMin, double zMax, char **e);-  QlPricingEngine* qlIntegralCdsEngine(int, int, QlDefaultProbabilityTermStructure* x1, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, char **e);-  QlPricingEngine* qlIntegralEngine(QlGeneralizedBlackScholesProcess* x0, char **e);-  QlPricingEngine* qlJamshidianSwaptionEngine(QlOneFactorAffineModel* model, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlJuQuadraticApproximationEngine(QlGeneralizedBlackScholesProcess* x0, char **e);-  QlPricingEngine* qlKirkEngine(QlBlackProcess* process1, QlBlackProcess* process2, double correlation, char **e);-  QlPricingEngine* qlIsdaCdsEngine(QlDefaultProbabilityTermStructure* x0, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int numericalFix, int accrualBias, int forwardsInCouponPeriod, char **e);-  QlPricingEngine* qlMidPointCdsEngine(QlDefaultProbabilityTermStructure* x0, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, char **e);+  QlPricingEngine* qlBaroneAdesiWhaleyApproximationEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e);+  QlPricingEngine* qlBatesDetJumpEngine1(QlBatesDetJumpModel* model, double relTolerance, unsigned maxEvaluations, QlError **e);+  QlPricingEngine* qlBatesDetJumpEngine(QlBatesDetJumpModel* model, unsigned integrationOrder, QlError **e);+  QlPricingEngine* qlBatesDoubleExpDetJumpEngine1(QlBatesDoubleExpDetJumpModel* model, double relTolerance, unsigned maxEvaluations, QlError **e);+  QlPricingEngine* qlBatesDoubleExpDetJumpEngine(QlBatesDoubleExpDetJumpModel* model, unsigned integrationOrder, QlError **e);+  QlPricingEngine* qlBatesDoubleExpEngine1(QlBatesDoubleExpModel* model, double relTolerance, unsigned maxEvaluations, QlError **e);+  QlPricingEngine* qlBatesDoubleExpEngine(QlBatesDoubleExpModel* model, unsigned integrationOrder, QlError **e);+  QlPricingEngine* qlBjerksundStenslandApproximationEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e);+  QlPricingEngine* qlQdPlusAmericanEngine(QlGeneralizedBlackScholesProcess* process, unsigned interpolationPoints, int solverType, double eps, unsigned maxIter, QlError **e);+  QlPricingEngine* qlQdFpAmericanEngine(QlGeneralizedBlackScholesProcess* process, int scheme, int fpEquation, QlError **e);+  QlPricingEngine* qlContinuousArithmeticAsianVecerEngine(QlGeneralizedBlackScholesProcess* process, QlQuote* currentAverage, int startDate, unsigned timeSteps, unsigned assetSteps, double zMin, double zMax, QlError **e);+  QlPricingEngine* qlBlackCdsOptionEngine(QlDefaultProbabilityTermStructure* probability, double recoveryRate, QlYieldTermStructure* termStructure, QlQuote* vol, QlError **e);+  QlPricingEngine* qlIntegralCdsEngine(int, int, QlDefaultProbabilityTermStructure* x1, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, QlError **e);+  QlPricingEngine* qlIntegralEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e);+  QlPricingEngine* qlJamshidianSwaptionEngine(QlOneFactorAffineModel* model, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlJuQuadraticApproximationEngine(QlGeneralizedBlackScholesProcess* x0, QlError **e);+  QlPricingEngine* qlKirkEngine(QlBlackProcess* process1, QlBlackProcess* process2, double correlation, QlError **e);+  QlPricingEngine* qlIsdaCdsEngine(QlDefaultProbabilityTermStructure* x0, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, int numericalFix, int accrualBias, int forwardsInCouponPeriod, QlError **e);+  QlPricingEngine* qlMidPointCdsEngine(QlDefaultProbabilityTermStructure* x0, double recoveryRate, QlYieldTermStructure* discountCurve, int includeSettlementDateFlows, QlError **e);   // ql/experimental/credit/midpointcdoengine.hpp, integralcdoengine.hpp-  QlPricingEngine* qlMidPointCDOEngine(QlYieldTermStructure* discountCurve, char **e);-  QlPricingEngine* qlIntegralCDOEngine(QlYieldTermStructure* discountCurve, int stepLen, int stepUnit, char **e);+  QlPricingEngine* qlMidPointCDOEngine(QlYieldTermStructure* discountCurve, QlError **e);+  QlPricingEngine* qlIntegralCDOEngine(QlYieldTermStructure* discountCurve, int stepLen, int stepUnit, QlError **e);   // ql/experimental/credit/integralntdengine.hpp -- note integrationStep comes first upstream   // (opposite order from IntegralCDOEngine's discountCurve-first constructor).-  QlPricingEngine* qlIntegralNtdEngine(int stepLen, int stepUnit, QlYieldTermStructure* discountCurve, char **e);-  QlPricingEngine* qlReplicatingVarianceSwapEngine(QlGeneralizedBlackScholesProcess* process, double dk, unsigned callStrikesLen, double* callStrikes, unsigned putStrikesLen, double* putStrikes, char **e);-  QlPricingEngine* qlStulzEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, char **e);-  QlPricingEngine* qlBjerksundStenslandSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, char **e);-  QlPricingEngine* qlOperatorSplittingSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, int order, char **e);-  QlPricingEngine* qlPearsonSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, double integrationTolerance, unsigned maxIntegrationIterations, double nStd, char **e);-  QlPricingEngine* qlGaussianCopulaSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, unsigned nPoints, char **e);-  QlPricingEngine* qlFd2dBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* p1, QlGeneralizedBlackScholesProcess* p2, double correlation, unsigned xGrid, unsigned yGrid, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, int localVol, double illegalLocalVolOverwrite, char **e);-  QlPricingEngine* qlChoiBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, double lambda, unsigned maxNrIntegrationSteps, int calcfwdDelta, int controlVariate, char **e);-  QlPricingEngine* qlDengLiZhouBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, char **e);-  QlPricingEngine* qlFdndimBlackScholesVanillaEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, unsigned xGridsLen, unsigned* xGrids, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, char **e);-  QlPricingEngine* qlFdndimBlackScholesVanillaEngine1(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, unsigned xGrid, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, char **e);-  QlPricingEngine* qlSingleFactorBsmBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, double xTol, char **e);-  QlPricingEngine* qlLfmSwaptionEngine(QlLiborForwardModel* model, QlYieldTermStructure* discountCurve, char **e);-  QlPricingEngine* qlTreeCapFloorEngine1(QlShortRateModel* model, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlTreeSwaptionEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlTreeVanillaSwapEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlFdG2SwaptionEngine(QlG2* model, unsigned tGrid, unsigned xGrid, unsigned yGrid, unsigned dampingSteps, double invEps, FdmSchemeDesc *schemeDesc, char **e);-  QlPricingEngine* qlFdHullWhiteSwaptionEngine(QlHullWhite* model, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, double invEps, FdmSchemeDesc *schemeDesc, char **e);+  QlPricingEngine* qlIntegralNtdEngine(int stepLen, int stepUnit, QlYieldTermStructure* discountCurve, QlError **e);+  QlPricingEngine* qlReplicatingVarianceSwapEngine(QlGeneralizedBlackScholesProcess* process, double dk, unsigned callStrikesLen, double* callStrikes, unsigned putStrikesLen, double* putStrikes, QlError **e);+  QlPricingEngine* qlStulzEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, QlError **e);+  QlPricingEngine* qlBjerksundStenslandSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, QlError **e);+  QlPricingEngine* qlOperatorSplittingSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, int order, QlError **e);+  QlPricingEngine* qlPearsonSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, double integrationTolerance, unsigned maxIntegrationIterations, double nStd, QlError **e);+  QlPricingEngine* qlGaussianCopulaSpreadEngine(QlGeneralizedBlackScholesProcess* process1, QlGeneralizedBlackScholesProcess* process2, double correlation, unsigned nPoints, QlError **e);+  QlPricingEngine* qlFd2dBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* p1, QlGeneralizedBlackScholesProcess* p2, double correlation, unsigned xGrid, unsigned yGrid, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, int localVol, double illegalLocalVolOverwrite, QlError **e);+  QlPricingEngine* qlChoiBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, double lambda, unsigned maxNrIntegrationSteps, int calcfwdDelta, int controlVariate, QlError **e);+  QlPricingEngine* qlDengLiZhouBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, QlError **e);+  QlPricingEngine* qlFdndimBlackScholesVanillaEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, unsigned xGridsLen, unsigned* xGrids, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, QlError **e);+  QlPricingEngine* qlFdndimBlackScholesVanillaEngine1(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, unsigned rhoRows, unsigned rhoCols, double* rho, unsigned xGrid, unsigned tGrid, unsigned dampingSteps, FdmSchemeDesc *schemeDesc, QlError **e);+  QlPricingEngine* qlSingleFactorBsmBasketEngine(unsigned processesLen, QlGeneralizedBlackScholesProcess** processes, double xTol, QlError **e);+  QlPricingEngine* qlLfmSwaptionEngine(QlLiborForwardModel* model, QlYieldTermStructure* discountCurve, QlError **e);+  QlPricingEngine* qlTreeCapFloorEngine1(QlShortRateModel* model, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlTreeSwaptionEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlTreeVanillaSwapEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlFdG2SwaptionEngine(QlG2* model, unsigned tGrid, unsigned xGrid, unsigned yGrid, unsigned dampingSteps, double invEps, FdmSchemeDesc *schemeDesc, QlError **e);+  QlPricingEngine* qlFdHullWhiteSwaptionEngine(QlHullWhite* model, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, double invEps, FdmSchemeDesc *schemeDesc, QlError **e); -  QlPricingEngine* qlMCVarianceSwapEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCHestonHullWhiteEngine1(int rngtrait, int stattrait, QlHybridHestonHullWhiteProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCAmericanEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned polynomOrder, int polynomType, unsigned nCalibrationSamples, int antitheticVariateCalibration, unsigned seedCalibration, char **e);-  QlPricingEngine* qlMCBarrierEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, int isBiased, unsigned seed, char **e);-  QlPricingEngine* qlMCDigitalEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCDiscreteArithmeticAPEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCDiscreteArithmeticASEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCDiscreteGeometricAPEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCDiscreteArithmeticAPHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned timeSteps, unsigned timeStepsPerYear, int controlVariate, char **e);-  QlPricingEngine* qlMCDiscreteGeometricAPHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned timeSteps, unsigned timeStepsPerYear, char **e);-  QlPricingEngine* qlMCEuropeanEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCEuropeanGJRGARCHEngine1(int rngtrait, int stattrait, QlGJRGARCHProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCEuropeanHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlIntegralHestonVarianceOptionEngine(QlHestonProcess* process, char **e);-  QlPricingEngine* qlMCHullWhiteCapFloorEngine1(int rngtrait, int stattrait, QlHullWhite* model, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCHimalayaEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCPagodaEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCEverestEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCEuropeanBasketEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);-  QlPricingEngine* qlMCAmericanBasketEngine1(int rngtrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned nCalibrationSamples, unsigned polynomialOrder, int polynomialType, char **e);-  QlPricingEngine* qlMCPerformanceEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, char **e);+  QlPricingEngine* qlMCVarianceSwapEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCHestonHullWhiteEngine1(int rngtrait, int stattrait, QlHybridHestonHullWhiteProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCAmericanEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned polynomOrder, int polynomType, unsigned nCalibrationSamples, int antitheticVariateCalibration, unsigned seedCalibration, QlError **e);+  QlPricingEngine* qlMCBarrierEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, int isBiased, unsigned seed, QlError **e);+  QlPricingEngine* qlMCDigitalEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCDiscreteArithmeticAPEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCDiscreteArithmeticASEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCDiscreteGeometricAPEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCDiscreteArithmeticAPHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned timeSteps, unsigned timeStepsPerYear, int controlVariate, QlError **e);+  QlPricingEngine* qlMCDiscreteGeometricAPHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* process, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned timeSteps, unsigned timeStepsPerYear, QlError **e);+  QlPricingEngine* qlMCEuropeanEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCEuropeanGJRGARCHEngine1(int rngtrait, int stattrait, QlGJRGARCHProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCEuropeanHestonEngine1(int rngtrait, int stattrait, QlHestonProcess* x0, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlIntegralHestonVarianceOptionEngine(QlHestonProcess* process, QlError **e);+  QlPricingEngine* qlMCHullWhiteCapFloorEngine1(int rngtrait, int stattrait, QlHullWhite* model, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCHimalayaEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCPagodaEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCEverestEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCEuropeanBasketEngine1(int rngtrait, int stattrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e);+  QlPricingEngine* qlMCAmericanBasketEngine1(int rngtrait, QlStochasticProcessArray* processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned nCalibrationSamples, unsigned polynomialOrder, int polynomialType, QlError **e);+  QlPricingEngine* qlMCPerformanceEngine1(int rngtrait, int stattrait, QlGeneralizedBlackScholesProcess* process, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, QlError **e); -  QlPricingEngine* qlFdBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, char **e);-  QlPricingEngine* qlFdBlackScholesVanillaEngine1(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, char **e);-  QlPricingEngine* qlFdBlackScholesVanillaEngine2(QlGeneralizedBlackScholesProcess* process, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, char **e);-  QlPricingEngine* qlFdBlackScholesVanillaEngine3(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, char **e);-  QlPricingEngine* qlFdHestonVanillaEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e);-  QlPricingEngine* qlFdHestonVanillaEngine1(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e);-  QlPricingEngine* qlCOSHestonEngine(QlHestonModel* model, double L, unsigned N, char **e);-  QlPricingEngine* qlAnalyticPDFHestonEngine(QlHestonModel* model, double eps, unsigned integrationOrder, char **e);-  QlPricingEngine* qlFdBatesVanillaEngine(QlBatesModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, char **e);-  QlPricingEngine* qlFdBatesVanillaEngine1(QlBatesModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, char **e);-  QlPricingEngine* qlFdBlackScholesShoutEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, char **e);-  QlPricingEngine* qlFdBlackScholesShoutEngine1(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, char **e);-  QlPricingEngine* qlFdHestonVanillaEngine2(QlHestonModel* model, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e);-  QlPricingEngine* qlFdHestonVanillaEngine3(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e);-  QlPricingEngine* qlFdHestonHullWhiteVanillaEngine(QlHestonModel* model, QlHullWhiteProcess* hwProcess, double corrEquityShortRate, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned rGrid, unsigned dampingSteps, int controlVariate, FdmSchemeDesc *fdScheme, char **e);-  QlPricingEngine* qlFdHestonHullWhiteVanillaEngine1(QlHestonModel* model, QlHullWhiteProcess* hwProcess, unsigned dividendsLen, QlDividend** dividends, double corrEquityShortRate, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned rGrid, unsigned dampingSteps, int controlVariate, FdmSchemeDesc *fdScheme, char **e);-  QlPricingEngine* qlBinomialVanillaEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, char **e);-  QlPricingEngine* qlBinomialConvertibleEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, QlQuote* creditSpread, unsigned dividendsLen, QlDividend** dividends, char **e);-  QlPricingEngine* qlBlackCallableFixedRateBondEngine1(QlCallableBondVolatilityStructure* yieldVolStructure, QlYieldTermStructure* discountCurve, char **e);-  QlPricingEngine* qlBlackCallableFixedRateBondEngine(QlQuote* fwdYieldVol, QlYieldTermStructure* discountCurve, char **e);-  QlPricingEngine* qlBlackCallableZeroCouponBondEngine1(QlCallableBondVolatilityStructure* yieldVolStructure, QlYieldTermStructure* discountCurve, char **e);-  QlPricingEngine* qlBlackCallableZeroCouponBondEngine(QlQuote* fwdYieldVol, QlYieldTermStructure* discountCurve, char **e);-  QlPricingEngine* qlTreeCallableFixedRateBondEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlTreeCallableFixedRateBondEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlTreeCallableZeroCouponBondEngine1(QlShortRateModel* model, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, char **e);-  QlPricingEngine* qlTreeCallableZeroCouponBondEngine(QlShortRateModel* model, unsigned timeSteps, QlYieldTermStructure* termStructure, char **e);+  QlPricingEngine* qlFdBlackScholesVanillaEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, QlError **e);+  QlPricingEngine* qlFdBlackScholesVanillaEngine1(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, QlError **e);+  QlPricingEngine* qlFdBlackScholesVanillaEngine2(QlGeneralizedBlackScholesProcess* process, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, QlError **e);+  QlPricingEngine* qlFdBlackScholesVanillaEngine3(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, int localVol, double illegalLocalVolOverwrite, int cashDividendModel, QlError **e);+  QlPricingEngine* qlFdHestonVanillaEngine(QlHestonModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e);+  QlPricingEngine* qlFdHestonVanillaEngine1(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e);+  QlPricingEngine* qlCOSHestonEngine(QlHestonModel* model, double L, unsigned N, QlError **e);+  QlPricingEngine* qlAnalyticPDFHestonEngine(QlHestonModel* model, double eps, unsigned integrationOrder, QlError **e);+  QlPricingEngine* qlFdBatesVanillaEngine(QlBatesModel* model, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlError **e);+  QlPricingEngine* qlFdBatesVanillaEngine1(QlBatesModel* model, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlError **e);+  QlPricingEngine* qlFdBlackScholesShoutEngine(QlGeneralizedBlackScholesProcess* process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlError **e);+  QlPricingEngine* qlFdBlackScholesShoutEngine1(QlGeneralizedBlackScholesProcess* process, unsigned dividendsLen, QlDividend** dividends, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlError **e);+  QlPricingEngine* qlFdHestonVanillaEngine2(QlHestonModel* model, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e);+  QlPricingEngine* qlFdHestonVanillaEngine3(QlHestonModel* model, unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* quantoHelper, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned dampingSteps, FdmSchemeDesc *fdScheme, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e);+  QlPricingEngine* qlFdHestonHullWhiteVanillaEngine(QlHestonModel* model, QlHullWhiteProcess* hwProcess, double corrEquityShortRate, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned rGrid, unsigned dampingSteps, int controlVariate, FdmSchemeDesc *fdScheme, QlError **e);+  QlPricingEngine* qlFdHestonHullWhiteVanillaEngine1(QlHestonModel* model, QlHullWhiteProcess* hwProcess, unsigned dividendsLen, QlDividend** dividends, double corrEquityShortRate, unsigned tGrid, unsigned xGrid, unsigned vGrid, unsigned rGrid, unsigned dampingSteps, int controlVariate, FdmSchemeDesc *fdScheme, QlError **e);+  QlPricingEngine* qlBinomialVanillaEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, QlError **e);+  QlPricingEngine* qlBinomialConvertibleEngine(int tree, QlGeneralizedBlackScholesProcess* process, unsigned timeSteps, QlQuote* creditSpread, unsigned dividendsLen, QlDividend** dividends, QlError **e);+  QlPricingEngine* qlBlackCallableFixedRateBondEngine1(QlCallableBondVolatilityStructure* yieldVolStructure, QlYieldTermStructure* discountCurve, QlError **e);+  QlPricingEngine* qlBlackCallableFixedRateBondEngine(QlQuote* fwdYieldVol, QlYieldTermStructure* discountCurve, QlError **e);+  QlPricingEngine* qlBlackCallableZeroCouponBondEngine1(QlCallableBondVolatilityStructure* yieldVolStructure, QlYieldTermStructure* discountCurve, QlError **e);+  QlPricingEngine* qlBlackCallableZeroCouponBondEngine(QlQuote* fwdYieldVol, QlYieldTermStructure* discountCurve, QlError **e);+  QlPricingEngine* qlTreeCallableFixedRateBondEngine1(QlShortRateModel* x0, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlTreeCallableFixedRateBondEngine(QlShortRateModel* x0, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlTreeCallableZeroCouponBondEngine1(QlShortRateModel* model, TimeGrid* timeGrid, QlYieldTermStructure* termStructure, QlError **e);+  QlPricingEngine* qlTreeCallableZeroCouponBondEngine(QlShortRateModel* model, unsigned timeSteps, QlYieldTermStructure* termStructure, QlError **e);    void qlFreeFdmSchemeDesc(FdmSchemeDesc *o);   void qlFdmRollback(unsigned opSize,-    void (*applyFn)(const double* in, unsigned n, double t1, double t2, double* out),-    void (*applyDirFn)(const double* in, unsigned n, unsigned direction, double t1, double t2, double* out),-    void (*solveSplitFn)(const double* in, unsigned n, unsigned direction, double s, double t1, double t2, double* out),-    void (*stepCondFn)(const double* in, unsigned n, double t, double* out),+    QlCallback* applyFn,+    QlCallback* applyDirFn,+    QlCallback* solveSplitFn,+    QlCallback* stepCondFn,     unsigned stoppingTimesLen, double* stoppingTimes,     FdmSchemeDesc* schemeDesc,     unsigned gridLen, double* grid,     double from, double to, unsigned steps, unsigned dampingSteps,-    unsigned* outLen, double** outValues, char **e);-  FdmSchemeDesc* qlFdmSchemeDesc(int type, double theta, double mu, char **e);-  FdmSchemeDesc* qlFdmSchemeDescCraigSneyd(char **e);-  FdmSchemeDesc* qlFdmSchemeDescDouglas(char **e);-  FdmSchemeDesc* qlFdmSchemeDescExplicitEuler(char **e);-  FdmSchemeDesc* qlFdmSchemeDescHundsdorfer(char **e);-  FdmSchemeDesc* qlFdmSchemeDescImplicitEuler(char **e);-  FdmSchemeDesc* qlFdmSchemeDescModifiedCraigSneyd(char **e);-  FdmSchemeDesc* qlFdmSchemeDescModifiedHundsdorfer(char **e);-  FdmSchemeDesc* qlFdmSchemeDescMethodOfLines(double eps, double relInitStepSize, char **e);+    unsigned* outLen, double** outValues, QlError **e);+  FdmSchemeDesc* qlFdmSchemeDesc(int type, double theta, double mu, QlError **e);+  FdmSchemeDesc* qlFdmSchemeDescCraigSneyd(QlError **e);+  FdmSchemeDesc* qlFdmSchemeDescDouglas(QlError **e);+  FdmSchemeDesc* qlFdmSchemeDescExplicitEuler(QlError **e);+  FdmSchemeDesc* qlFdmSchemeDescHundsdorfer(QlError **e);+  FdmSchemeDesc* qlFdmSchemeDescImplicitEuler(QlError **e);+  FdmSchemeDesc* qlFdmSchemeDescModifiedCraigSneyd(QlError **e);+  FdmSchemeDesc* qlFdmSchemeDescModifiedHundsdorfer(QlError **e);+  FdmSchemeDesc* qlFdmSchemeDescMethodOfLines(double eps, double relInitStepSize, QlError **e);    void qlFreeFdm1dMesher(QlFdm1dMesher *o);   void qlFreeFdmMesher(QlFdmMesher *o);-  QlFdm1dMesher* qlPredefined1dMesher(unsigned len, double* points, char **e);-  QlFdm1dMesher* qlUniform1dMesher(double start, double end, unsigned size, char **e);-  QlFdm1dMesher* qlConcentrating1dMesher(double start, double end, unsigned size, double cPointLoc, double cPointDensity, int requireCPoint, char **e);-  QlFdm1dMesher* qlConcentrating1dMesherMulti(double start, double end, unsigned size, unsigned cPointsLen, double* cPointLoc, double* cPointDensity, int* cPointRequire, double tol, char **e);-  QlFdm1dMesher* qlGluedMesher(QlFdm1dMesher* left, QlFdm1dMesher* right, char **e);+  QlFdm1dMesher* qlPredefined1dMesher(unsigned len, double* points, QlError **e);+  QlFdm1dMesher* qlUniform1dMesher(double start, double end, unsigned size, QlError **e);+  QlFdm1dMesher* qlConcentrating1dMesher(double start, double end, unsigned size, double cPointLoc, double cPointDensity, int requireCPoint, QlError **e);+  QlFdm1dMesher* qlConcentrating1dMesherMulti(double start, double end, unsigned size, unsigned cPointsLen, double* cPointLoc, double* cPointDensity, int* cPointRequire, double tol, QlError **e);+  QlFdm1dMesher* qlGluedMesher(QlFdm1dMesher* left, QlFdm1dMesher* right, QlError **e);   QlFdm1dMesher* qlFdmBlackScholesMesher(unsigned size, QlGeneralizedBlackScholesProcess* process, double maturity, double strike,     double xMinConstraint, double xMaxConstraint, double eps, double scaleFactor, double cPointLoc, double cPointDensity,-    unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* fdmQuantoHelper, double spotAdjustment, char **e);-  QlFdm1dMesher* qlFdmCev1dMesher(unsigned size, double f0, double alpha, double beta, double maturity, double eps, double scaleFactor, double cPointLoc, double cPointDensity, char **e);-  QlFdm1dMesher* qlExponentialJump1dMesher(unsigned steps, double beta, double jumpIntensity, double eta, double eps, char **e);-  QlFdm1dMesher* qlFdmSimpleProcess1dMesher(unsigned size, QlStochasticProcess1D* process, double maturity, unsigned tAvgSteps, double epsilon, double mandatoryPoint, char **e);-  QlFdm1dMesher* qlFdmHestonVarianceMesher(unsigned size, QlHestonProcess* process, double maturity, unsigned tAvgSteps, double epsilon, double mixingFactor, char **e);-  QlFdm1dMesher* qlFdmHestonLocalVolatilityVarianceMesher(unsigned size, QlHestonProcess* process, QlLocalVolTermStructure* leverageFct, double maturity, unsigned tAvgSteps, double epsilon, double mixingFactor, char **e);-  QlFdmMesher* qlFdmMesherComposite(unsigned meshersLen, QlFdm1dMesher** meshers, char **e);-  void qlFdmMesherLocations(QlFdmMesher* mesher, unsigned direction, unsigned* outLen, double** outValues, char **e);+    unsigned dividendsLen, QlDividend** dividends, QlFdmQuantoHelper* fdmQuantoHelper, double spotAdjustment, QlError **e);+  QlFdm1dMesher* qlFdmCev1dMesher(unsigned size, double f0, double alpha, double beta, double maturity, double eps, double scaleFactor, double cPointLoc, double cPointDensity, QlError **e);+  QlFdm1dMesher* qlExponentialJump1dMesher(unsigned steps, double beta, double jumpIntensity, double eta, double eps, QlError **e);+  QlFdm1dMesher* qlFdmSimpleProcess1dMesher(unsigned size, QlStochasticProcess1D* process, double maturity, unsigned tAvgSteps, double epsilon, double mandatoryPoint, QlError **e);+  QlFdm1dMesher* qlFdmHestonVarianceMesher(unsigned size, QlHestonProcess* process, double maturity, unsigned tAvgSteps, double epsilon, double mixingFactor, QlError **e);+  QlFdm1dMesher* qlFdmHestonLocalVolatilityVarianceMesher(unsigned size, QlHestonProcess* process, QlLocalVolTermStructure* leverageFct, double maturity, unsigned tAvgSteps, double epsilon, double mixingFactor, QlError **e);+  QlFdmMesher* qlFdmMesherComposite(unsigned meshersLen, QlFdm1dMesher** meshers, QlError **e);+  void qlFdmMesherLocations(QlFdmMesher* mesher, unsigned direction, unsigned* outLen, double** outValues, QlError **e);    // Genuine per-grid-node Haskell callback -- see QuantLib.Method's haddock ("coarsen the   // language-boundary crossing" exception case) and HsFdmInnerValueCalculator in@@ -319,43 +324,43 @@   // FdmInnerValueCalculatorDelegate).   void qlFreeFdmInnerValueCalculator(QlFdmInnerValueCalculator *o);   QlFdmInnerValueCalculator* qlFdmInnerValueCalculatorFromFunctions(QlFdmMesher* mesher,-    double (*innerValueFn)(const double* loc, unsigned n, double t),-    double (*avgInnerValueFn)(const double* loc, unsigned n, double t),-    char **e);+    QlCallback* innerValueFn,+    QlCallback* avgInnerValueFn,+    QlError **e);   // Evaluates calc->innerValue/avgInnerValue at the node given by coords (one index per   // dimension), building the FdmLinearOpIterator from mesher's own layout.-  double qlFdmInnerValueCalculatorEval(QlFdmInnerValueCalculator* calc, QlFdmMesher* mesher, unsigned ndims, unsigned* coords, double t, char **e);-  double qlFdmInnerValueCalculatorAvgEval(QlFdmInnerValueCalculator* calc, QlFdmMesher* mesher, unsigned ndims, unsigned* coords, double t, char **e);+  double qlFdmInnerValueCalculatorEval(QlFdmInnerValueCalculator* calc, QlFdmMesher* mesher, unsigned ndims, unsigned* coords, double t, QlError **e);+  double qlFdmInnerValueCalculatorAvgEval(QlFdmInnerValueCalculator* calc, QlFdmMesher* mesher, unsigned ndims, unsigned* coords, double t, QlError **e);    // Native FdmInnerValueCalculator subclasses -- see qlPricingEngine.cpp for why none need a   // dedicated leaf type.-  QlFdmInnerValueCalculator* qlFdmZeroInnerValue(char **e);-  QlFdmInnerValueCalculator* qlFdmCellAveragingInnerValue(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, char **e);-  QlFdmInnerValueCalculator* qlFdmCellAveragingInnerValueMapped(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, double (*mappingFn)(double x), char **e);-  QlFdmInnerValueCalculator* qlFdmLogInnerValue(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, char **e);-  QlFdmInnerValueCalculator* qlFdmLogBasketInnerValue(QlBasketPayoff* payoff, QlFdmMesher* mesher, char **e);+  QlFdmInnerValueCalculator* qlFdmZeroInnerValue(QlError **e);+  QlFdmInnerValueCalculator* qlFdmCellAveragingInnerValue(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, QlError **e);+  QlFdmInnerValueCalculator* qlFdmCellAveragingInnerValueMapped(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, QlCallback* mappingFn, QlError **e);+  QlFdmInnerValueCalculator* qlFdmLogInnerValue(QlPayoff* payoff, QlFdmMesher* mesher, unsigned direction, QlError **e);+  QlFdmInnerValueCalculator* qlFdmLogBasketInnerValue(QlBasketPayoff* payoff, QlFdmMesher* mesher, QlError **e);   // exerciseTimes/exerciseDates are parallel arrays of length exDatesLen, zipped into upstream's   // std::map<Time, Date> exerciseDates argument.   QlFdmInnerValueCalculator* qlFdmAffineG2ModelSwapInnerValue(QlG2* disModel, QlG2* fwdModel, QlFixedVsFloatingSwap* swap,-    unsigned exDatesLen, double* exerciseTimes, int* exerciseDates, QlFdmMesher* mesher, unsigned direction, char **e);+    unsigned exDatesLen, double* exerciseTimes, int* exerciseDates, QlFdmMesher* mesher, unsigned direction, QlError **e);   QlFdmInnerValueCalculator* qlFdmAffineHullWhiteModelSwapInnerValue(QlHullWhite* disModel, QlHullWhite* fwdModel, QlFixedVsFloatingSwap* swap,-    unsigned exDatesLen, double* exerciseTimes, int* exerciseDates, QlFdmMesher* mesher, unsigned direction, char **e);+    unsigned exDatesLen, double* exerciseTimes, int* exerciseDates, QlFdmMesher* mesher, unsigned direction, QlError **e);    void qlFdmSolve(QlFdmMesher* mesher,     QlFdmInnerValueCalculator* calculator,     unsigned opSize,-    void (*applyFn)(const double* in, unsigned n, double t1, double t2, double* out),-    void (*applyDirFn)(const double* in, unsigned n, unsigned direction, double t1, double t2, double* out),-    void (*solveSplitFn)(const double* in, unsigned n, unsigned direction, double s, double t1, double t2, double* out),-    void (*stepCondFn)(const double* in, unsigned n, double t, double* out),+    QlCallback* applyFn,+    QlCallback* applyDirFn,+    QlCallback* solveSplitFn,+    QlCallback* stepCondFn,     unsigned stoppingTimesLen, double* stoppingTimes,     FdmSchemeDesc* schemeDesc,     double maturity, double to, unsigned steps, unsigned dampingSteps,-    unsigned* outLen, double** outValues, char **e);+    unsigned* outLen, double** outValues, QlError **e);    void qlFreeFdmQuantoHelper(QlFdmQuantoHelper *o);-  QlFdmQuantoHelper* qlFdmQuantoHelper(QlYieldTermStructure* rTS, QlYieldTermStructure* fTS, QlBlackVolTermStructure* fxVolTS, double equityFxCorrelation, double exchRateATMlevel, char **e);-  double qlFdmQuantoHelperQuantoAdjustment(QlFdmQuantoHelper* helper, double equityVol, double t1, double t2, char **e);+  QlFdmQuantoHelper* qlFdmQuantoHelper(QlYieldTermStructure* rTS, QlYieldTermStructure* fTS, QlBlackVolTermStructure* fxVolTS, double equityFxCorrelation, double exchRateATMlevel, QlError **e);+  double qlFdmQuantoHelperQuantoAdjustment(QlFdmQuantoHelper* helper, double equityVol, double t1, double t2, QlError **e);    void qlFreeGJRGARCHModel(QlGJRGARCHModel *o);   void qlFreeHestonModel(QlHestonModel *o);@@ -363,35 +368,35 @@   void qlFreePiecewiseTimeDependentHestonModel(QlPiecewiseTimeDependentHestonModel *o);   void qlFreeShortRateModel(QlShortRateModel *o);   void qlFreeAffineModel(QlAffineModel *o);-  double qlAffineModelDiscount(QlAffineModel* o, double t, char **e);-  double qlAffineModelDiscountBond(QlAffineModel* o, double now, double maturity, unsigned factorsLen, double* factors, char **e);-  double qlAffineModelDiscountBondOption(QlAffineModel* o, int type, double strike, double maturity, int haveBondStart, double bondStart, double bondMaturity, char **e);+  double qlAffineModelDiscount(QlAffineModel* o, double t, QlError **e);+  double qlAffineModelDiscountBond(QlAffineModel* o, double now, double maturity, unsigned factorsLen, double* factors, QlError **e);+  double qlAffineModelDiscountBondOption(QlAffineModel* o, int type, double strike, double maturity, int haveBondStart, double bondStart, double bondMaturity, QlError **e);   void qlFreeOneFactorAffineModel(QlOneFactorAffineModel *o);-  double qlHullWhiteConvexityBias(double futurePrice, double t, double T, double sigma, double a, char **e);+  double qlHullWhiteConvexityBias(double futurePrice, double t, double T, double sigma, double a, QlError **e);   QlAffineModel* qlOneFactorAffineModelAsAffineModel(QlOneFactorAffineModel *o);   void qlFreeLiborForwardModel(QlLiborForwardModel *o);   QlAffineModel* qlLiborForwardModelAsAffineModel(QlLiborForwardModel *o);-  double qlLiborForwardModelS0(QlLiborForwardModel *o, unsigned alpha, unsigned beta, char **e);+  double qlLiborForwardModelS0(QlLiborForwardModel *o, unsigned alpha, unsigned beta, QlError **e);   void qlFreeHullWhite(QlHullWhite *o);   QlOneFactorAffineModel* qlHullWhiteAsOneFactorAffineModel(QlHullWhite *o);   void qlFreeCalibratedModel(QlCalibratedModel *o);-  QlBatesModel* qlBatesModel(QlBatesProcess* process, char **e);-  QlShortRateModel* qlBlackKarasinski(QlYieldTermStructure* termStructure, double a, double sigma, char **e);-  QlOneFactorAffineModel* qlCoxIngersollRoss(double r0, double theta, double k, double sigma, int withFellerConstraint, char **e);-  QlOneFactorAffineModel* qlExtendedCoxIngersollRoss(QlYieldTermStructure* termStructure, double theta, double k, double sigma, double x0, int withFellerConstraint, char **e);-  QlG2* qlG2(QlYieldTermStructure* termStructure, double a, double sigma, double b, double eta, double rho, char **e);-  QlShortRateModel* qlGeneralizedHullWhite(QlYieldTermStructure* yieldtermStructure, unsigned speedstructureLen, int* speedstructure, unsigned volstructureLen, int* volstructure, unsigned speedLen, double* speed, unsigned volLen, double* vol, char **e);-  QlGJRGARCHModel* qlGJRGARCHModel(QlGJRGARCHProcess* process, char **e);-  QlHestonModel* qlHestonModel(QlHestonProcess* process, char **e);-  QlHullWhite* qlHullWhite(QlYieldTermStructure* termStructure, double a, double sigma, char **e);-  QlCalibratedModel* qlVarianceGammaModel(QlVarianceGammaProcess* process, char **e);-  QlOneFactorAffineModel* qlVasicek(double r0, double a, double b, double sigma, double lambda, char **e);+  QlBatesModel* qlBatesModel(QlBatesProcess* process, QlError **e);+  QlShortRateModel* qlBlackKarasinski(QlYieldTermStructure* termStructure, double a, double sigma, QlError **e);+  QlOneFactorAffineModel* qlCoxIngersollRoss(double r0, double theta, double k, double sigma, int withFellerConstraint, QlError **e);+  QlOneFactorAffineModel* qlExtendedCoxIngersollRoss(QlYieldTermStructure* termStructure, double theta, double k, double sigma, double x0, int withFellerConstraint, QlError **e);+  QlG2* qlG2(QlYieldTermStructure* termStructure, double a, double sigma, double b, double eta, double rho, QlError **e);+  QlShortRateModel* qlGeneralizedHullWhite(QlYieldTermStructure* yieldtermStructure, unsigned speedstructureLen, int* speedstructure, unsigned volstructureLen, int* volstructure, unsigned speedLen, double* speed, unsigned volLen, double* vol, QlError **e);+  QlGJRGARCHModel* qlGJRGARCHModel(QlGJRGARCHProcess* process, QlError **e);+  QlHestonModel* qlHestonModel(QlHestonProcess* process, QlError **e);+  QlHullWhite* qlHullWhite(QlYieldTermStructure* termStructure, double a, double sigma, QlError **e);+  QlCalibratedModel* qlVarianceGammaModel(QlVarianceGammaProcess* process, QlError **e);+  QlOneFactorAffineModel* qlVasicek(double r0, double a, double b, double sigma, double lambda, QlError **e);   void qlFreeG2(QlG2 *o);   QlAffineModel* qlG2AsAffineModel(QlG2 *o);   QlShortRateModel* qlG2AsShortRateModel(QlG2 *o);   void qlFreeShortRateDynamics(QlShortRateDynamics *o);-  QlShortRateDynamics* qlG2Dynamics(QlG2 *o, char **e);-  double qlShortRateDynamicsShortRate(QlShortRateDynamics *o, double t, double x, double y, char **e);+  QlShortRateDynamics* qlG2Dynamics(QlG2 *o, QlError **e);+  double qlShortRateDynamicsShortRate(QlShortRateDynamics *o, double t, double x, double y, QlError **e);   void qlFreeBatesDetJumpModel(QlBatesDetJumpModel *o);   QlBatesModel* qlBatesDetJumpModelAsBatesModel(QlBatesDetJumpModel *o);   void qlFreeBatesDoubleExpDetJumpModel(QlBatesDoubleExpDetJumpModel *o);@@ -401,16 +406,16 @@    void qlFreeLmCorrelationModel(QlLmCorrelationModel *o);   void qlFreeLmVolatilityModel(QlLmVolatilityModel *o);-  QlLmCorrelationModel* qlLmConstWrapperCorrelationModel(QlLmCorrelationModel* corrModel, char **e);-  QlLmVolatilityModel* qlLmConstWrapperVolatilityModel(QlLmVolatilityModel* volaModel, char **e);-  QlLmCorrelationModel* qlLmExponentialCorrelationModel(unsigned size, double rho, char **e);-  QlLmVolatilityModel* qlLmFixedVolatilityModel(unsigned volatilitiesLen, double* volatilities, unsigned startTimesLen, double * startTimes, char **e);-  QlLmCorrelationModel* qlLmLinearExponentialCorrelationModel(unsigned size, double rho, double beta, unsigned factors, char **e);-  QlLmVolatilityModel* qlLmLinearExponentialVolatilityModel(unsigned fixingTimesLen, double * fixingTimes, double a, double b, double c, double d, char **e);-  QlLiborForwardModel* qlLiborForwardModel(QlLiborForwardModelProcess* process, QlLmVolatilityModel* volaModel, QlLmCorrelationModel* corrModel, char **e);+  QlLmCorrelationModel* qlLmConstWrapperCorrelationModel(QlLmCorrelationModel* corrModel, QlError **e);+  QlLmVolatilityModel* qlLmConstWrapperVolatilityModel(QlLmVolatilityModel* volaModel, QlError **e);+  QlLmCorrelationModel* qlLmExponentialCorrelationModel(unsigned size, double rho, QlError **e);+  QlLmVolatilityModel* qlLmFixedVolatilityModel(unsigned volatilitiesLen, double* volatilities, unsigned startTimesLen, double * startTimes, QlError **e);+  QlLmCorrelationModel* qlLmLinearExponentialCorrelationModel(unsigned size, double rho, double beta, unsigned factors, QlError **e);+  QlLmVolatilityModel* qlLmLinearExponentialVolatilityModel(unsigned fixingTimesLen, double * fixingTimes, double a, double b, double c, double d, QlError **e);+  QlLiborForwardModel* qlLiborForwardModel(QlLiborForwardModelProcess* process, QlLmVolatilityModel* volaModel, QlLmCorrelationModel* corrModel, QlError **e);   void qlFreeLfmHullWhiteParameterization(QlLfmHullWhiteParameterization *o);-  QlLfmHullWhiteParameterization* qlLfmHullWhiteParameterization(QlLiborForwardModelProcess* process, QlOptionletVolatilityStructure* capletVol, unsigned correlationRows, unsigned correlationCols, double* correlation, unsigned factors, char **e);-  void qlLfmHullWhiteCovariance(QlLfmHullWhiteParameterization* o, double t, unsigned xLen, double* x, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e);+  QlLfmHullWhiteParameterization* qlLfmHullWhiteParameterization(QlLiborForwardModelProcess* process, QlOptionletVolatilityStructure* capletVol, unsigned correlationRows, unsigned correlationCols, double* correlation, unsigned factors, QlError **e);+  void qlLfmHullWhiteCovariance(QlLfmHullWhiteParameterization* o, double t, unsigned xLen, double* x, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e);    void qlFreeGsr(QlGsr *o);   void qlFreeMarkovFunctional(QlMarkovFunctional *o);@@ -419,27 +424,29 @@   QlCalibratedModel* qlMarkovFunctionalAsCalibratedModel(QlMarkovFunctional *o);   QlGaussian1dModel* qlGsrAsGaussian1dModel(QlGsr *o);   QlGaussian1dModel* qlMarkovFunctionalAsGaussian1dModel(QlMarkovFunctional *o);-  QlGsr* qlGsr(QlYieldTermStructure* termStructure, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, QlQuote** volatilities, QlQuote* reversion, double T, char **e);-  void qlGsrVolatility(QlGsr* o, unsigned *len, double **vs, char **e);-  void qlGsrMoveVolatility(QlGsr* o, unsigned i, unsigned *len, int **fp, char **e);-  void qlGsrMoveReversion(QlGsr* o, unsigned i, unsigned *len, int **fp, char **e);-  void qlGsrCalibrateVolatilitiesIterative(QlGsr* o, unsigned helpersLen, QlBlackCalibrationHelper** helpers, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned weightsLen, double* weights, char **e);-  QlMarkovFunctional* qlMarkovFunctional(QlYieldTermStructure* termStructure, double reversion, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, double* volatilities, QlSwaptionVolatilityStructure* swaptionVol, unsigned expiriesLen, int* swaptionExpiries, unsigned tenorsLen, int* tenorQuantity, unsigned, int* tenorUnit, QlSwapIndex* swapIndexBase, unsigned yGridPoints, char **e);-  QlMarkovFunctional* qlMarkovFunctionalCaplet(QlYieldTermStructure* termStructure, double reversion, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, double* volatilities, QlOptionletVolatilityStructure* capletVol, unsigned expiriesLen, int* capletExpiries, QlIborIndex* iborIndex, unsigned yGridPoints, char **e);-  void qlMarkovFunctionalVolatility(QlMarkovFunctional* o, unsigned *len, double **vs, char **e);-  double qlGaussian1dModelNumeraire(QlGaussian1dModel* o, int referenceDate, double y, QlYieldTermStructure* yts, char **e);-  double qlGaussian1dModelZerobond(QlGaussian1dModel* o, int maturity, int referenceDate, double y, QlYieldTermStructure* yts, char **e);-  double qlGaussian1dModelZerobondOption(QlGaussian1dModel* o, int type, int expiry, int valueDate, int maturity, double strike, int referenceDate, double y, QlYieldTermStructure* yts, double yStdDevs, unsigned yGridPoints, int extrapolatePayoff, int flatPayoffExtrapolation, char **e);-  double qlGaussian1dModelForwardRate(QlGaussian1dModel* o, int fixing, int referenceDate, double y, QlIborIndex* iborIdx, char **e);-  double qlGaussian1dModelSwapRate(QlGaussian1dModel* o, int fixing, int tenorLen, int tenorUnit, int referenceDate, double y, QlSwapIndex* swapIdx, char **e);-  double qlGaussian1dModelSwapAnnuity(QlGaussian1dModel* o, int fixing, int tenorLen, int tenorUnit, int referenceDate, double y, QlSwapIndex* swapIdx, char **e);-  void qlGaussian1dModelYGrid(QlGaussian1dModel* o, double yStdDevs, int gridPoints, double bigT, double t, double y, unsigned *len, double **out, char **e);-  QlStochasticProcess1D* qlGaussian1dModelStateProcess(QlGaussian1dModel* o, char **e);-  QlPricingEngine* qlGaussian1dSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlYieldTermStructure* discountCurve, int probabilities, char **e);-  QlPricingEngine* qlGaussian1dNonstandardSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlQuote* oas, QlYieldTermStructure* discountCurve, int probabilities, char **e);-  QlPricingEngine* qlGaussian1dFloatFloatSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlQuote* oas, QlYieldTermStructure* discountCurve, int includeTodaysExercise, int probabilities, char **e);-  QlPricingEngine* qlGaussian1dJamshidianSwaptionEngine(QlGaussian1dModel* model, char **e);-  QlPricingEngine* qlGaussian1dCapFloorEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlYieldTermStructure* discountCurve, char **e);+  QlGsr* qlGsr(QlYieldTermStructure* termStructure, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, QlQuote** volatilities, unsigned reversionsLen, QlQuote** reversions, double T, QlError **e);+  void qlGsrVolatility(QlGsr* o, unsigned *len, double **vs, QlError **e);+  void qlGsrReversion(QlGsr* o, unsigned *len, double **vs, QlError **e);+  void qlGsrMoveVolatility(QlGsr* o, unsigned i, unsigned *len, int **fp, QlError **e);+  void qlGsrMoveReversion(QlGsr* o, unsigned i, unsigned *len, int **fp, QlError **e);+  void qlGsrCalibrateVolatilitiesIterative(QlGsr* o, unsigned helpersLen, QlBlackCalibrationHelper** helpers, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned weightsLen, double* weights, QlError **e);+  void qlGsrCalibrateReversionsIterative(QlGsr* o, unsigned helpersLen, QlBlackCalibrationHelper** helpers, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned weightsLen, double* weights, QlError **e);+  QlMarkovFunctional* qlMarkovFunctional(QlYieldTermStructure* termStructure, double reversion, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, double* volatilities, QlSwaptionVolatilityStructure* swaptionVol, unsigned expiriesLen, int* swaptionExpiries, unsigned tenorsLen, int* tenorQuantity, unsigned, int* tenorUnit, QlSwapIndex* swapIndexBase, unsigned yGridPoints, QlError **e);+  QlMarkovFunctional* qlMarkovFunctionalCaplet(QlYieldTermStructure* termStructure, double reversion, unsigned volstepdatesLen, int* volstepdates, unsigned volatilitiesLen, double* volatilities, QlOptionletVolatilityStructure* capletVol, unsigned expiriesLen, int* capletExpiries, QlIborIndex* iborIndex, unsigned yGridPoints, QlError **e);+  void qlMarkovFunctionalVolatility(QlMarkovFunctional* o, unsigned *len, double **vs, QlError **e);+  double qlGaussian1dModelNumeraire(QlGaussian1dModel* o, int referenceDate, double y, QlYieldTermStructure* yts, QlError **e);+  double qlGaussian1dModelZerobond(QlGaussian1dModel* o, int maturity, int referenceDate, double y, QlYieldTermStructure* yts, QlError **e);+  double qlGaussian1dModelZerobondOption(QlGaussian1dModel* o, int type, int expiry, int valueDate, int maturity, double strike, int referenceDate, double y, QlYieldTermStructure* yts, double yStdDevs, unsigned yGridPoints, int extrapolatePayoff, int flatPayoffExtrapolation, QlError **e);+  double qlGaussian1dModelForwardRate(QlGaussian1dModel* o, int fixing, int referenceDate, double y, QlIborIndex* iborIdx, QlError **e);+  double qlGaussian1dModelSwapRate(QlGaussian1dModel* o, int fixing, int tenorLen, int tenorUnit, int referenceDate, double y, QlSwapIndex* swapIdx, QlError **e);+  double qlGaussian1dModelSwapAnnuity(QlGaussian1dModel* o, int fixing, int tenorLen, int tenorUnit, int referenceDate, double y, QlSwapIndex* swapIdx, QlError **e);+  void qlGaussian1dModelYGrid(QlGaussian1dModel* o, double yStdDevs, int gridPoints, double bigT, double t, double y, unsigned *len, double **out, QlError **e);+  QlStochasticProcess1D* qlGaussian1dModelStateProcess(QlGaussian1dModel* o, QlError **e);+  QlPricingEngine* qlGaussian1dSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlYieldTermStructure* discountCurve, int probabilities, QlError **e);+  QlPricingEngine* qlGaussian1dNonstandardSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlQuote* oas, QlYieldTermStructure* discountCurve, int probabilities, QlError **e);+  QlPricingEngine* qlGaussian1dFloatFloatSwaptionEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlQuote* oas, QlYieldTermStructure* discountCurve, int includeTodaysExercise, int probabilities, QlError **e);+  QlPricingEngine* qlGaussian1dJamshidianSwaptionEngine(QlGaussian1dModel* model, QlError **e);+  QlPricingEngine* qlGaussian1dCapFloorEngine(QlGaussian1dModel* model, int integrationPoints, double stddevs, int extrapolatePayoff, int flatPayoffExtrapolation, QlYieldTermStructure* discountCurve, QlError **e);    QlCalibratedModel* qlGJRGARCHModelAsCalibratedModel(QlGJRGARCHModel *o);   QlCalibratedModel* qlHestonModelAsCalibratedModel(QlHestonModel *o);@@ -452,28 +459,29 @@   void qlFreeCalibrationHelper(QlCalibrationHelper *o);   void qlFreeBlackCalibrationHelper(QlBlackCalibrationHelper *o);   QlCalibrationHelper* qlBlackCalibrationHelperAsCalibrationHelper(QlBlackCalibrationHelper *o);-  void qlCalibratedModelCalibrate(QlCalibratedModel* o, unsigned x1Len, QlCalibrationHelper** x1, unsigned wLen, double *weights, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned fpLen, int* fixParameters, char **e);-  double qlCalibratedModelValue(QlCalibratedModel* o, unsigned pLen, double* p, unsigned hLen, QlCalibrationHelper** h, char **e);+  void qlCalibratedModelCalibrate(QlCalibratedModel* o, unsigned x1Len, QlCalibrationHelper** x1, unsigned wLen, double *weights, QlOptimizationMethod* method, QlEndCriteria* endCriteria, Constraint* constraint, unsigned fpLen, int* fixParameters, QlError **e);+  double qlCalibratedModelValue(QlCalibratedModel* o, unsigned pLen, double* p, unsigned hLen, QlCalibrationHelper** h, QlError **e); -  void qlBlackCalibrationHelperSetPricingEngine(QlBlackCalibrationHelper* o, QlPricingEngine* engine, char **e);-  QlBlackCalibrationHelper* qlCapHelper(int, int, QlQuote* volatility, QlIborIndex* index, int fixedLegFrequency, DayCounter* fixedLegDayCounter, int includeFirstSwaplet, QlYieldTermStructure* termStructure, int errorType, int type, double shift, char **e);-  QlBlackCalibrationHelper* qlHestonModelHelper(int, int, Calendar* calendar, QlQuote* s0, double strikePrice, QlQuote* volatility, QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, int errorType, char **e);+  void qlBlackCalibrationHelperSetPricingEngine(QlBlackCalibrationHelper* o, QlPricingEngine* engine, QlError **e);+  QlBlackCalibrationHelper* qlCapHelper(int, int, QlQuote* volatility, QlIborIndex* index, int fixedLegFrequency, DayCounter* fixedLegDayCounter, int includeFirstSwaplet, QlYieldTermStructure* termStructure, int errorType, int type, double shift, QlError **e);+  QlBlackCalibrationHelper* qlHestonModelHelper(int, int, Calendar* calendar, QlQuote* s0, double strikePrice, QlQuote* volatility, QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, int errorType, QlError **e);   void qlFreeSwaptionHelper(QlSwaptionHelper *o);   QlBlackCalibrationHelper* qlSwaptionHelperAsBlackCalibrationHelper(QlSwaptionHelper *o);-  QlSwaptionHelper* qlSwaptionHelper(int, int, int, int, QlQuote* volatility, QlIborIndex* index, int, int, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, char **e);-  QlSwaptionHelper* qlSwaptionHelperFromDate(int exerciseDate, int, int, QlQuote* volatility, QlIborIndex* index, int, int, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, char **e);-  QlSwaptionHelper* qlSwaptionHelperFromDates(int exerciseDate, int endDate, QlQuote* volatility, QlIborIndex* index, int, int, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, char **e);-  QlFixedVsFloatingSwap* qlSwaptionHelperUnderlying(QlSwaptionHelper* o, char **e);-  QlSwaption* qlSwaptionHelperSwaption(QlSwaptionHelper* o, char **e);-  void qlBlackCalibrationHelperTimes(QlBlackCalibrationHelper* o, unsigned *len, double **ts, char **e);+  QlSwaptionHelper* qlSwaptionHelper(int, int, int, int, QlQuote* volatility, QlIborIndex* index, int, int, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, QlError **e);+  QlSwaptionHelper* qlSwaptionHelperFromDate(int exerciseDate, int, int, QlQuote* volatility, QlIborIndex* index, int, int, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, QlError **e);+  QlSwaptionHelper* qlSwaptionHelperFromDates(int exerciseDate, int endDate, QlQuote* volatility, QlIborIndex* index, int, int, DayCounter* fixedLegDayCounter, DayCounter* floatingLegDayCounter, QlYieldTermStructure* termStructure, int errorType, double strike, double nominal, int volatilityType, double shift, unsigned settlementDays, int averagingMethod, QlError **e);+  QlFixedVsFloatingSwap* qlSwaptionHelperUnderlying(QlSwaptionHelper* o, QlError **e);+  QlSwaption* qlSwaptionHelperSwaption(QlSwaptionHelper* o, QlError **e);+  void qlBlackCalibrationHelperTimes(QlBlackCalibrationHelper* o, unsigned *len, double **ts, QlError **e); -  void qlCalibratedModelParams(QlCalibratedModel* o, unsigned *len, double** ps, char **e);-  double qlBlackCalibrationHelperBlackPrice(QlBlackCalibrationHelper* o, double volatility, char **e);-  double qlBlackCalibrationHelperCalibrationError(QlBlackCalibrationHelper* o, char **e);-  double qlBlackCalibrationHelperImpliedVolatility(QlBlackCalibrationHelper* o, double targetValue, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, char **e);-  double qlBlackCalibrationHelperMarketValue(QlBlackCalibrationHelper* o, char **e);-  double qlBlackCalibrationHelperModelValue(QlBlackCalibrationHelper* o, char **e);-  QlQuote* qlBlackCalibrationHelperVolatility(QlBlackCalibrationHelper* o, char **e);+  void qlCalibratedModelParams(QlCalibratedModel* o, unsigned *len, double** ps, QlError **e);+  void qlCalibratedModelSetParams(QlCalibratedModel* o, unsigned pLen, double* p, QlError **e);+  double qlBlackCalibrationHelperBlackPrice(QlBlackCalibrationHelper* o, double volatility, QlError **e);+  double qlBlackCalibrationHelperCalibrationError(QlBlackCalibrationHelper* o, QlError **e);+  double qlBlackCalibrationHelperImpliedVolatility(QlBlackCalibrationHelper* o, double targetValue, double accuracy, unsigned maxEvaluations, double minVol, double maxVol, QlError **e);+  double qlBlackCalibrationHelperMarketValue(QlBlackCalibrationHelper* o, QlError **e);+  double qlBlackCalibrationHelperModelValue(QlBlackCalibrationHelper* o, QlError **e);+  QlQuote* qlBlackCalibrationHelperVolatility(QlBlackCalibrationHelper* o, QlError **e);    void qlFreeBlackProcess(QlBlackProcess *o);   QlGeneralizedBlackScholesProcess* qlBlackProcessAsGeneralizedBlackScholesProcess(QlBlackProcess *o);@@ -482,32 +490,32 @@   void qlFreeStochasticProcess(QlStochasticProcess *o);   void qlFreeStochasticProcess1D(QlStochasticProcess1D *o);   QlStochasticProcess* qlStochasticProcess1DAsStochasticProcess(QlStochasticProcess1D *o);-  unsigned qlStochasticProcessFactors(QlStochasticProcess* o, char **e);-  void qlStochasticProcessInitialValues(QlStochasticProcess* o, unsigned *len, double **vs, char **e);-  void qlStochasticProcessDrift(QlStochasticProcess* o, double t, unsigned xLen, double *x, unsigned *len, double **vs, char **e);-  void qlStochasticProcessDiffusion(QlStochasticProcess* o, double t, unsigned xLen, double *x, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e);-  void qlStochasticProcessExpectation(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *len, double **vs, char **e);-  void qlStochasticProcessStdDeviation(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e);-  void qlStochasticProcessCovariance(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *rows, unsigned *cols, unsigned *len, double **vs, char **e);-  void qlStochasticProcessApply(QlStochasticProcess* o, unsigned x0Len, double *x0, unsigned dxLen, double *dx, unsigned *len, double **vs, char **e);-  void qlStochasticProcessEvolve(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned dwLen, double *dw, unsigned *len, double **vs, char **e);+  unsigned qlStochasticProcessFactors(QlStochasticProcess* o, QlError **e);+  void qlStochasticProcessInitialValues(QlStochasticProcess* o, unsigned *len, double **vs, QlError **e);+  void qlStochasticProcessDrift(QlStochasticProcess* o, double t, unsigned xLen, double *x, unsigned *len, double **vs, QlError **e);+  void qlStochasticProcessDiffusion(QlStochasticProcess* o, double t, unsigned xLen, double *x, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e);+  void qlStochasticProcessExpectation(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *len, double **vs, QlError **e);+  void qlStochasticProcessStdDeviation(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e);+  void qlStochasticProcessCovariance(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned *rows, unsigned *cols, unsigned *len, double **vs, QlError **e);+  void qlStochasticProcessApply(QlStochasticProcess* o, unsigned x0Len, double *x0, unsigned dxLen, double *dx, unsigned *len, double **vs, QlError **e);+  void qlStochasticProcessEvolve(QlStochasticProcess* o, double t0, unsigned x0Len, double *x0, double dt, unsigned dwLen, double *dw, unsigned *len, double **vs, QlError **e); -  QlBlackProcess* qlBlackProcess(QlQuote* x0, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e);-  QlGeneralizedBlackScholesProcess* qlBlackScholesMertonProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e);-  QlGeneralizedBlackScholesProcess* qlBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e);-  QlGeneralizedBlackScholesProcess* qlExtendedBlackScholesMertonProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int evolDisc, char **e);-  QlGeneralizedBlackScholesProcess* qlGarmanKohlhagenProcess(QlQuote* x0, QlYieldTermStructure* foreignRiskFreeTS, QlYieldTermStructure* domesticRiskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e);-  QlGeneralizedBlackScholesProcess* qlGeneralizedBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, char **e);-  QlStochasticProcess1D* qlSquareRootProcess(double b, double a, double sigma, double x0, int d, char **e);-  QlGeneralizedBlackScholesProcess* qlVegaStressedBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, double lowerTimeBorderForStressTest, double upperTimeBorderForStressTest, double lowerAssetBorderForStressTest, double upperAssetBorderForStressTest, double stressLevel, int d, char **e);+  QlBlackProcess* qlBlackProcess(QlQuote* x0, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e);+  QlGeneralizedBlackScholesProcess* qlBlackScholesMertonProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e);+  QlGeneralizedBlackScholesProcess* qlBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e);+  QlGeneralizedBlackScholesProcess* qlExtendedBlackScholesMertonProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int evolDisc, QlError **e);+  QlGeneralizedBlackScholesProcess* qlGarmanKohlhagenProcess(QlQuote* x0, QlYieldTermStructure* foreignRiskFreeTS, QlYieldTermStructure* domesticRiskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e);+  QlGeneralizedBlackScholesProcess* qlGeneralizedBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, int d, int forceDiscretization, QlError **e);+  QlStochasticProcess1D* qlSquareRootProcess(double b, double a, double sigma, double x0, int d, QlError **e);+  QlGeneralizedBlackScholesProcess* qlVegaStressedBlackScholesProcess(QlQuote* x0, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, double lowerTimeBorderForStressTest, double upperTimeBorderForStressTest, double lowerAssetBorderForStressTest, double upperAssetBorderForStressTest, double stressLevel, int d, QlError **e);    void qlFreeExtOUWithJumpsProcess(QlExtOUWithJumpsProcess *o);   QlStochasticProcess* qlExtOUWithJumpsProcessAsStochasticProcess(QlExtOUWithJumpsProcess *o);   void qlFreeExtendedOrnsteinUhlenbeckProcess(QlExtendedOrnsteinUhlenbeckProcess *o);   QlStochasticProcess1D* qlExtendedOrnsteinUhlenbeckProcessAsStochasticProcess1D(QlExtendedOrnsteinUhlenbeckProcess *o);-  // The returned process retains b; its FunPtr must remain alive for the process lifetime.-  QlExtendedOrnsteinUhlenbeckProcess* qlExtendedOrnsteinUhlenbeckProcess(double speed, double sigma, double x0, double (*b)(double), int discretization, double intEps, char **e);-  QlExtendedOrnsteinUhlenbeckProcess* qlLinearSeasonalOrnsteinUhlenbeckProcess(double speed, double sigma, double x0, double a, double k, double c, double phase, int discretization, double intEps, char **e);+  // The returned process retains shared ownership of b.+  QlExtendedOrnsteinUhlenbeckProcess* qlExtendedOrnsteinUhlenbeckProcess(double speed, double sigma, double x0, QlCallback* b, int discretization, double intEps, QlError **e);+  QlExtendedOrnsteinUhlenbeckProcess* qlLinearSeasonalOrnsteinUhlenbeckProcess(double speed, double sigma, double x0, double a, double k, double c, double phase, int discretization, double intEps, QlError **e);   void qlFreeGJRGARCHProcess(QlGJRGARCHProcess *o);   QlStochasticProcess* qlGJRGARCHProcessAsStochasticProcess(QlGJRGARCHProcess *o);   void qlFreeHestonProcess(QlHestonProcess *o);@@ -530,41 +538,41 @@   QlStochasticProcess1D* qlHullWhiteProcessAsStochasticProcess1D(QlHullWhiteProcess *o);   void qlFreeHullWhiteForwardProcess(QlHullWhiteForwardProcess *o);   QlStochasticProcess1D* qlHullWhiteForwardProcessAsStochasticProcess1D(QlHullWhiteForwardProcess *o);-  void qlHullWhiteForwardProcessSetForwardMeasureTime(QlHullWhiteForwardProcess* o, double t, char **e);-  double qlHullWhiteProcessAlpha(QlHullWhiteProcess* o, double t, char **e);-  double qlHullWhiteForwardProcessAlpha(QlHullWhiteForwardProcess* o, double t, char **e);-  double qlHullWhiteForwardProcessB(QlHullWhiteForwardProcess* o, double t, double T, char **e);-  double qlHullWhiteForwardProcessMT(QlHullWhiteForwardProcess* o, double s, double t, double T, char **e);-  double qlHybridHestonHullWhiteProcessNumeraire(QlHybridHestonHullWhiteProcess* o, double t, unsigned xLen, double *x, char **e);+  void qlHullWhiteForwardProcessSetForwardMeasureTime(QlHullWhiteForwardProcess* o, double t, QlError **e);+  double qlHullWhiteProcessAlpha(QlHullWhiteProcess* o, double t, QlError **e);+  double qlHullWhiteForwardProcessAlpha(QlHullWhiteForwardProcess* o, double t, QlError **e);+  double qlHullWhiteForwardProcessB(QlHullWhiteForwardProcess* o, double t, double T, QlError **e);+  double qlHullWhiteForwardProcessMT(QlHullWhiteForwardProcess* o, double s, double t, double T, QlError **e);+  double qlHybridHestonHullWhiteProcessNumeraire(QlHybridHestonHullWhiteProcess* o, double t, unsigned xLen, double *x, QlError **e);    void qlFreeG2Process(QlG2Process *o);   QlStochasticProcess* qlG2ProcessAsStochasticProcess(QlG2Process *o);-  double qlG2ProcessPhi(QlG2Process* o, double t, char **e);+  double qlG2ProcessPhi(QlG2Process* o, double t, QlError **e);   double qlG2ProcessShortRate(QlG2Process* o, double t, double x, double y);   void qlFreeG2ForwardProcess(QlG2ForwardProcess *o);   QlStochasticProcess* qlG2ForwardProcessAsStochasticProcess(QlG2ForwardProcess *o);-  double qlG2ForwardProcessPhi(QlG2ForwardProcess* o, double t, char **e);+  double qlG2ForwardProcessPhi(QlG2ForwardProcess* o, double t, QlError **e);   double qlG2ForwardProcessShortRate(QlG2ForwardProcess* o, double t, double x, double y);-  void qlG2ForwardProcessSetForwardMeasureTime(QlG2ForwardProcess* o, double t, char **e);+  void qlG2ForwardProcessSetForwardMeasureTime(QlG2ForwardProcess* o, double t, QlError **e); -  QlBatesProcess* qlBatesProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double kappa, double theta, double sigma, double rho, double lambda, double nu, double delta, int d, char **e);-  QlExtOUWithJumpsProcess* qlExtOUWithJumpsProcess(QlExtendedOrnsteinUhlenbeckProcess* process, double Y0, double beta, double jumpIntensity, double eta, char **e);-  QlG2ForwardProcess* qlG2ForwardProcess(double a, double sigma, double b, double eta, double rho, QlYieldTermStructure* termStructure, char **e);-  QlG2Process* qlG2Process(double a, double sigma, double b, double eta, double rho, QlYieldTermStructure* termStructure, char **e);-  QlStochasticProcess1D* qlGemanRoncoroniProcess(double x0, double alpha, double beta, double gamma, double delta, double eps, double zeta, double d, double k, double tau, double sig2, double a, double b, double theta1, double theta2, double theta3, double psi, char **e);-  QlStochasticProcess1D* qlGeometricBrownianMotionProcess(double initialValue, double mue, double sigma, char **e);-  QlGJRGARCHProcess* qlGJRGARCHProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double omega, double alpha, double beta, double gamma, double lambda, double daysPerYear, int d, char **e);-  QlHestonProcess* qlHestonProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double kappa, double theta, double sigma, double rho, int d, char **e);-  double qlHestonProcessPdf(QlHestonProcess* o, double x, double v, double t, double eps, char **e);+  QlBatesProcess* qlBatesProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double kappa, double theta, double sigma, double rho, double lambda, double nu, double delta, int d, QlError **e);+  QlExtOUWithJumpsProcess* qlExtOUWithJumpsProcess(QlExtendedOrnsteinUhlenbeckProcess* process, double Y0, double beta, double jumpIntensity, double eta, QlError **e);+  QlG2ForwardProcess* qlG2ForwardProcess(double a, double sigma, double b, double eta, double rho, QlYieldTermStructure* termStructure, QlError **e);+  QlG2Process* qlG2Process(double a, double sigma, double b, double eta, double rho, QlYieldTermStructure* termStructure, QlError **e);+  QlStochasticProcess1D* qlGemanRoncoroniProcess(double x0, double alpha, double beta, double gamma, double delta, double eps, double zeta, double d, double k, double tau, double sig2, double a, double b, double theta1, double theta2, double theta3, double psi, QlError **e);+  QlStochasticProcess1D* qlGeometricBrownianMotionProcess(double initialValue, double mue, double sigma, QlError **e);+  QlGJRGARCHProcess* qlGJRGARCHProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double omega, double alpha, double beta, double gamma, double lambda, double daysPerYear, int d, QlError **e);+  QlHestonProcess* qlHestonProcess(QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, QlQuote* s0, double v0, double kappa, double theta, double sigma, double rho, int d, QlError **e);+  double qlHestonProcessPdf(QlHestonProcess* o, double x, double v, double t, double eps, QlError **e);   void qlFreeHestonSLVProcess(QlHestonSLVProcess *o);   QlStochasticProcess* qlHestonSLVProcessAsStochasticProcess(QlHestonSLVProcess *o);-  QlHestonSLVProcess* qlHestonSLVProcess(QlHestonProcess* hestonProcess, QlLocalVolTermStructure* leverageFct, double mixingFactor, char **e);+  QlHestonSLVProcess* qlHestonSLVProcess(QlHestonProcess* hestonProcess, QlLocalVolTermStructure* leverageFct, double mixingFactor, QlError **e);   void qlFreeBrownianGeneratorFactory(QlBrownianGeneratorFactory *o);-  QlBrownianGeneratorFactory* qlMTBrownianGeneratorFactory(unsigned long seed, char **e);-  QlBrownianGeneratorFactory* qlSobolBrownianGeneratorFactory(int ordering, unsigned long seed, int directionIntegers, char **e);+  QlBrownianGeneratorFactory* qlMTBrownianGeneratorFactory(unsigned long seed, QlError **e);+  QlBrownianGeneratorFactory* qlSobolBrownianGeneratorFactory(int ordering, unsigned long seed, int directionIntegers, QlError **e);   void qlFreeHestonSLVMCModel(QlHestonSLVMCModel *o);-  QlHestonSLVMCModel* qlHestonSLVMCModel(QlLocalVolTermStructure* localVol, QlHestonModel* hestonModel, QlBrownianGeneratorFactory* factory, int endDate, unsigned timeStepsPerYear, unsigned nBins, unsigned calibrationPaths, unsigned mandatoryDatesLen, int* mandatoryDates, double mixingFactor, char **e);-  QlLocalVolTermStructure* qlHestonSLVMCModelLeverageFunction(QlHestonSLVMCModel* o, char **e);+  QlHestonSLVMCModel* qlHestonSLVMCModel(QlLocalVolTermStructure* localVol, QlHestonModel* hestonModel, QlBrownianGeneratorFactory* factory, int endDate, unsigned timeStepsPerYear, unsigned nBins, unsigned calibrationPaths, unsigned mandatoryDatesLen, int* mandatoryDates, double mixingFactor, QlError **e);+  QlLocalVolTermStructure* qlHestonSLVMCModelLeverageFunction(QlHestonSLVMCModel* o, QlError **e);   void qlFreeHestonSLVFDMModel(QlHestonSLVFDMModel *o);   QlHestonSLVFDMModel* qlHestonSLVFDMModel(QlLocalVolTermStructure* localVol, QlHestonModel* hestonModel, int endDate,     unsigned xGrid, unsigned vGrid, unsigned tMaxStepsPerYear, unsigned tMinStepsPerYear, double tStepNumberDecay,@@ -572,68 +580,94 @@     unsigned maxIntegrationIterations, double vLowerEps, double vUpperEps, double vMin, double v0Density,     double vLowerBoundDensity, double vUpperBoundDensity, double leverageFctPropEps, int greensAlgorithm,     int trafoType, FdmSchemeDesc* schemeDesc, int logging, unsigned mandatoryDatesLen, int* mandatoryDates,-    double mixingFactor, char **e);-  QlLocalVolTermStructure* qlHestonSLVFDMModelLeverageFunction(QlHestonSLVFDMModel* o, char **e);-  HestonSLVFDMLogEntries* qlHestonSLVFDMModelLogEntries(QlHestonSLVFDMModel* o, char **e);+    double mixingFactor, QlError **e);+  QlLocalVolTermStructure* qlHestonSLVFDMModelLeverageFunction(QlHestonSLVFDMModel* o, QlError **e);+  HestonSLVFDMLogEntries* qlHestonSLVFDMModelLogEntries(QlHestonSLVFDMModel* o, QlError **e);   void qlFreeHestonSLVFDMLogEntries(HestonSLVFDMLogEntries* o);   unsigned qlHestonSLVFDMLogEntriesSize(HestonSLVFDMLogEntries* o);-  double qlHestonSLVFDMLogEntriesTime(HestonSLVFDMLogEntries* o, unsigned i, char **e);-  void qlHestonSLVFDMLogEntriesSpotGrid(HestonSLVFDMLogEntries* o, unsigned i, unsigned* len, double** values, char **e);-  void qlHestonSLVFDMLogEntriesVarianceGrid(HestonSLVFDMLogEntries* o, unsigned i, unsigned* len, double** values, char **e);-  void qlHestonSLVFDMLogEntriesDensity(HestonSLVFDMLogEntries* o, unsigned i, unsigned* rows, unsigned* cols, unsigned* len, double** values, char **e);-  QlHullWhiteForwardProcess* qlHullWhiteForwardProcess(QlYieldTermStructure* h, double a, double sigma, char **e);-  QlHullWhiteProcess* qlHullWhiteProcess(QlYieldTermStructure* h, double a, double sigma, char **e);-  QlHybridHestonHullWhiteProcess* qlHybridHestonHullWhiteProcess(QlHestonProcess* hestonProcess, QlHullWhiteForwardProcess* hullWhiteProcess, double corrEquityShortRate, int discretization, char **e);-  QlKlugeExtOUProcess* qlKlugeExtOUProcess(double rho, QlExtOUWithJumpsProcess* kluge, QlExtendedOrnsteinUhlenbeckProcess* extOU, char **e);-  QlLiborForwardModelProcess* qlLiborForwardModelProcess(unsigned size, QlIborIndex* index, char **e);-  void qlLiborForwardModelProcessFixingDates(QlLiborForwardModelProcess* o, unsigned *len, int **dates, char **e);-  void qlLiborForwardModelProcessFixingTimes(QlLiborForwardModelProcess* o, unsigned *len, double **times, char **e);-  Leg* qlLiborForwardModelProcessCashFlows(QlLiborForwardModelProcess* o, double amount, char **e);-  QlIborIndex* qlLiborForwardModelProcessIndex(QlLiborForwardModelProcess* o, char **e);-  void qlLiborForwardModelProcessSetCovarParam(QlLiborForwardModelProcess* o, QlLfmHullWhiteParameterization* param, char **e);-  void qlLiborForwardModelProcessDiscountBond(QlLiborForwardModelProcess* o, unsigned ratesLen, double *rates, unsigned *len, double **dfs, char **e);-  void qlLiborForwardModelProcessAccrualTimes(QlLiborForwardModelProcess* o, unsigned *startLen, double **start, unsigned *endLen, double **end, char **e);-  QlMerton76Process* qlMerton76Process(QlQuote* stateVariable, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, QlQuote* jumpInt, QlQuote* logJMean, QlQuote* logJVol, int d, char **e);-  QlStochasticProcess1D* qlOrnsteinUhlenbeckProcess(double speed, double vol, double x0, double level, char **e);-  QlVarianceGammaProcess* qlVarianceGammaProcess(QlQuote* s0, QlYieldTermStructure* dividendYield, QlYieldTermStructure* riskFreeRate, double sigma, double nu, double theta, char **e);-  QlStochasticProcessArray* qlStochasticProcessArray(unsigned x0Len, QlStochasticProcess1D** x0, unsigned correlationRows, unsigned correlationCols, double* correlation, char **e);+  double qlHestonSLVFDMLogEntriesTime(HestonSLVFDMLogEntries* o, unsigned i, QlError **e);+  void qlHestonSLVFDMLogEntriesSpotGrid(HestonSLVFDMLogEntries* o, unsigned i, unsigned* len, double** values, QlError **e);+  void qlHestonSLVFDMLogEntriesVarianceGrid(HestonSLVFDMLogEntries* o, unsigned i, unsigned* len, double** values, QlError **e);+  void qlHestonSLVFDMLogEntriesDensity(HestonSLVFDMLogEntries* o, unsigned i, unsigned* rows, unsigned* cols, unsigned* len, double** values, QlError **e);+  QlHullWhiteForwardProcess* qlHullWhiteForwardProcess(QlYieldTermStructure* h, double a, double sigma, QlError **e);+  QlHullWhiteProcess* qlHullWhiteProcess(QlYieldTermStructure* h, double a, double sigma, QlError **e);+  QlHybridHestonHullWhiteProcess* qlHybridHestonHullWhiteProcess(QlHestonProcess* hestonProcess, QlHullWhiteForwardProcess* hullWhiteProcess, double corrEquityShortRate, int discretization, QlError **e);+  QlKlugeExtOUProcess* qlKlugeExtOUProcess(double rho, QlExtOUWithJumpsProcess* kluge, QlExtendedOrnsteinUhlenbeckProcess* extOU, QlError **e);+  QlLiborForwardModelProcess* qlLiborForwardModelProcess(unsigned size, QlIborIndex* index, QlError **e);+  void qlLiborForwardModelProcessFixingDates(QlLiborForwardModelProcess* o, unsigned *len, int **dates, QlError **e);+  void qlLiborForwardModelProcessFixingTimes(QlLiborForwardModelProcess* o, unsigned *len, double **times, QlError **e);+  Leg* qlLiborForwardModelProcessCashFlows(QlLiborForwardModelProcess* o, double amount, QlError **e);+  QlIborIndex* qlLiborForwardModelProcessIndex(QlLiborForwardModelProcess* o, QlError **e);+  void qlLiborForwardModelProcessSetCovarParam(QlLiborForwardModelProcess* o, QlLfmHullWhiteParameterization* param, QlError **e);+  void qlLiborForwardModelProcessDiscountBond(QlLiborForwardModelProcess* o, unsigned ratesLen, double *rates, unsigned *len, double **dfs, QlError **e);+  void qlLiborForwardModelProcessAccrualTimes(QlLiborForwardModelProcess* o, unsigned *startLen, double **start, unsigned *endLen, double **end, QlError **e);+  QlMerton76Process* qlMerton76Process(QlQuote* stateVariable, QlYieldTermStructure* dividendTS, QlYieldTermStructure* riskFreeTS, QlBlackVolTermStructure* blackVolTS, QlQuote* jumpInt, QlQuote* logJMean, QlQuote* logJVol, int d, QlError **e);+  QlStochasticProcess1D* qlOrnsteinUhlenbeckProcess(double speed, double vol, double x0, double level, QlError **e);+  QlVarianceGammaProcess* qlVarianceGammaProcess(QlQuote* s0, QlYieldTermStructure* dividendYield, QlYieldTermStructure* riskFreeRate, double sigma, double nu, double theta, QlError **e);+  QlStochasticProcessArray* qlStochasticProcessArray(unsigned x0Len, QlStochasticProcess1D** x0, unsigned correlationRows, unsigned correlationCols, double* correlation, QlError **e);    void qlFreePathGenerator(PolymorphicPathGenerator *gen);-  PolymorphicPathGenerator *qlPathGenerator(int rngtrait, QlStochasticProcess *p, TimeGrid *t, unsigned seed, unsigned dim, int brownianBridge, char **e);-  PolymorphicPathGenerator *qlSobolPathGenerator(int dir, QlStochasticProcess *p, TimeGrid *t, unsigned seed, unsigned dim, int brownianBridge, char **e);-  SamplePath *qlPathGeneratorNext(PolymorphicPathGenerator *pgen, char **e);-  SamplePath *qlPathGeneratorAntithetic(PolymorphicPathGenerator *pgen, char **e);+  PolymorphicPathGenerator *qlPathGenerator(int rngtrait, QlStochasticProcess *p, TimeGrid *t, unsigned seed, unsigned dim, int brownianBridge, QlError **e);+  PolymorphicPathGenerator *qlSobolPathGenerator(int dir, QlStochasticProcess *p, TimeGrid *t, unsigned seed, unsigned dim, int brownianBridge, QlError **e);+  SamplePath *qlPathGeneratorNext(PolymorphicPathGenerator *pgen, QlError **e);+  SamplePath *qlPathGeneratorAntithetic(PolymorphicPathGenerator *pgen, QlError **e);   double qlSamplePathWeight(SamplePath *p);   unsigned qlSamplePathAssetNumber(SamplePath *p);   unsigned qlSamplePathSize(SamplePath *p);   void qlFreeSamplePath(SamplePath *p);-  double qlSamplePathAt(SamplePath *p, unsigned asset, unsigned point, char **e);-  void qlSamplePathAssetPath(SamplePath *s, unsigned asset, unsigned *len, double **p, char **e);+  double qlSamplePathAt(SamplePath *p, unsigned asset, unsigned point, QlError **e);+  void qlSamplePathAssetPath(SamplePath *s, unsigned asset, unsigned *len, double **p, QlError **e);    // Standalone gaussian sequence generator -- the primitive MultiPathGenerator consumes, exposed   // on its own so a Haskell-defined SDE can be evolved in Haskell with no callback per timestep.   void qlFreeGaussianRsg(PolymorphicGaussianRsg *g);-  PolymorphicGaussianRsg *qlGaussianRsg(int rngtrait, unsigned dimension, unsigned seed, char **e);-  PolymorphicGaussianRsg *qlSobolGaussianRsg(int dir, unsigned dimension, unsigned seed, char **e);+  PolymorphicGaussianRsg *qlGaussianRsg(int rngtrait, unsigned dimension, unsigned seed, QlError **e);+  PolymorphicGaussianRsg *qlSobolGaussianRsg(int dir, unsigned dimension, unsigned seed, QlError **e);   unsigned qlGaussianRsgDimension(PolymorphicGaussianRsg *g);   // Draws the next sequence: *values is a fresh qlAllocateDoubles array of *len draws, *weight   // the sample's weight (1 for every trait bound here, carried through for completeness).-  void qlGaussianRsgNextSequence(PolymorphicGaussianRsg *g, unsigned *len, double **values, double *weight, char **e);+  void qlGaussianRsgNextSequence(PolymorphicGaussianRsg *g, unsigned *len, double **values, double *weight, QlError **e);   // Re-reads the sequence last drawn, without advancing the generator.-  void qlGaussianRsgLastSequence(PolymorphicGaussianRsg *g, unsigned *len, double **values, double *weight, char **e);+  void qlPathGeneratorSequence(PolymorphicPathGenerator *g, unsigned *len, double **values, double *weight, QlError **e);+  void qlGaussianRsgLastSequence(PolymorphicGaussianRsg *g, unsigned *len, double **values, double *weight, QlError **e); -  void qlLsmRegress(int polynomType, unsigned order, unsigned fitStatesLen, double *fitStates, unsigned fitTargetsLen, double *fitTargets, unsigned evalLen, double *evalStates, unsigned *outLen, double **outValues, char **e);-  void qlLsmRegressMulti(int polynomType, unsigned order, unsigned fitRows, unsigned fitCols, double *fitStates, unsigned fitTargetsLen, double *fitTargets, unsigned evalRows, unsigned evalCols, double *evalStates, unsigned *outLen, double **outValues, char **e);+  void qlLsmRegress(int polynomType, unsigned order, unsigned fitStatesLen, double *fitStates, unsigned fitTargetsLen, double *fitTargets, unsigned evalLen, double *evalStates, unsigned *outLen, double **outValues, QlError **e);+  void qlLsmRegressMulti(int polynomType, unsigned order, unsigned fitRows, unsigned fitCols, double *fitStates, unsigned fitTargetsLen, double *fitTargets, unsigned evalRows, unsigned evalCols, double *evalStates, unsigned *outLen, double **outValues, QlError **e);+  void qlLsmFit(int polynomType, unsigned order, unsigned rows, unsigned cols, double *states, unsigned targetsLen, double *targets, unsigned *outLen, double **outCoefficients, QlError **e);+  void qlLsmEvaluate(int polynomType, unsigned order, unsigned coeffLen, double *coefficients, unsigned rows, unsigned cols, double *states, unsigned *outLen, double **outValues, QlError **e);+  const char *qlLsmEvaluatorIdentity(); -  double qlUnsafeSabrLogNormalVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, char **e);-  double qlUnsafeShiftedSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, double shift, int volatilityType, char **e);-  double qlUnsafeSabrNormalVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, char **e);-  double qlUnsafeSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, int volatilityType, char **e);-  double qlSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, int volatilityType, char **e);-  double qlShiftedSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, double shift, int volatilityType, char **e);-  double qlSabrFlochKennedyVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, char **e);-  void qlValidateSabrParameters(double alpha, double beta, double nu, double rho, char **e);-  void qlSabrGuess(double k_m, double vol_m, double k_0, double vol_0, double k_p, double vol_p, double forward, double expiryTime, double beta, double shift, int volatilityType, unsigned *len, double **out, char **e);+  double qlUnsafeSabrLogNormalVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, QlError **e);+  double qlUnsafeShiftedSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, double shift, int volatilityType, QlError **e);+  double qlUnsafeSabrNormalVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, QlError **e);+  double qlUnsafeSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, int volatilityType, QlError **e);+  double qlSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, int volatilityType, QlError **e);+  double qlShiftedSabrVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, double shift, int volatilityType, QlError **e);+  double qlSabrFlochKennedyVolatility(double strike, double forward, double expiryTime, double alpha, double beta, double nu, double rho, QlError **e);+  void qlValidateSabrParameters(double alpha, double beta, double nu, double rho, QlError **e);+  void qlSabrGuess(double k_m, double vol_m, double k_0, double vol_0, double k_p, double vol_p, double forward, double expiryTime, double beta, double shift, int volatilityType, unsigned *len, double **out, QlError **e);+  double qlGaussian1dModelCompoundedRate(QlGaussian1dModel* model, QlOvernightIndexedCoupon* coupon, int date, double y, QlYieldTermStructure* curve, QlError **e);+void qlFreeRoughHestonModel(QlRoughHestonModel* o);+QlCalibratedModel* qlRoughHestonModelAsCalibratedModel(QlRoughHestonModel* o);+QlRoughHestonModel* qlRoughHestonModel(QlHestonProcess* process, double hurst, QlError **e);+double qlRoughHestonModelTheta(QlRoughHestonModel* o, QlError **e);+double qlRoughHestonModelKappa(QlRoughHestonModel* o, QlError **e);+double qlRoughHestonModelSigma(QlRoughHestonModel* o, QlError **e);+double qlRoughHestonModelRho(QlRoughHestonModel* o, QlError **e);+double qlRoughHestonModelV0(QlRoughHestonModel* o, QlError **e);+double qlRoughHestonModelHurst(QlRoughHestonModel* o, QlError **e);+QlHestonProcess* qlRoughHestonModelProcess(QlRoughHestonModel* o, QlError **e);+void qlFreeAnalyticRoughHestonEngine(QlAnalyticRoughHestonEngine* o);+QlPricingEngine* qlAnalyticRoughHestonEngineAsPricingEngine(QlAnalyticRoughHestonEngine* o);+QlAnalyticRoughHestonEngine* qlAnalyticRoughHestonEngine(QlRoughHestonModel* model, unsigned integrationOrder, unsigned timeSteps, int approximation, unsigned nFactors, QlError **e);+QlAnalyticRoughHestonEngine* qlAnalyticRoughHestonEngineWithIntegration(QlRoughHestonModel* model, int algorithm, unsigned count, double relative, double absolute, int convergence, unsigned timeSteps, double epsilon, double alpha, int approximation, unsigned nFactors, QlError **e);+void qlRoughHestonchF(QlAnalyticRoughHestonEngine* o, double real, double imag, double time, double* outReal, double* outImag, QlError **e);+void qlRoughHestonlnChF(QlAnalyticRoughHestonEngine* o, double real, double imag, double time, double* outReal, double* outImag, QlError **e);+void qlRoughHestonriccatiSolution(QlAnalyticRoughHestonEngine* o, double real, double imag, double time, double* outReal, double* outImag, QlError **e);+unsigned qlRoughHestonNumberOfEvaluations(QlAnalyticRoughHestonEngine* o, QlError **e);+double qlRoughHestonPriceDate(QlAnalyticRoughHestonEngine* o, QlPlainVanillaPayoff* payoff, int maturity, QlError **e);+double qlRoughHestonPriceTime(QlAnalyticRoughHestonEngine* o, QlPlainVanillaPayoff* payoff, double maturity, QlError **e);+QlPricingEngine* qlDiscountingMtMCrossCurrencyBasisSwapEngine(Currency* domesticCcy, QlYieldTermStructure* domesticCurve, Currency* foreignCcy, QlYieldTermStructure* foreignCurve, QlQuote* spotFx, int includeSettlement, int settlementDate, int npvDate, int spotFxSettleDate, QlError **e); #ifdef __cplusplus } #endif
cbits/qlPricingEngineAux.cpp view
@@ -1,3 +1,4 @@+#include "qlCheckedFdEngine.h" // this file intentionally does not contain any references to wrappers, only vanilla QuantLib is used here #include <ql/pricingengines/all.hpp> #include <ql/pricingengines/vanilla/binomialengine.hpp>@@ -30,6 +31,7 @@ }  using QuantLib::ext::shared_ptr;+#include "qlStdCompat.h" #include "qlPricingEngineAux.h" using namespace QuantLib; @@ -40,15 +42,8 @@ // an empty `Tag<T>` per axis, so each constructor is written once and recovers types through // `typename decltype(r)::type`. //-// Every dispatcher takes its return type as an explicit leading template argument-// (`dispatchRngStat<PricingEngine*>(...)`) rather than deducing it with a trailing-// `-> decltype(make(Tag<PseudoRandom>()))`. That is not a style choice. A trailing return type is-// an *unevaluated* operand, so the probe call it names is the first instantiation of the lambda-// for that tag -- and clang then emits the engine's constructor but never marks its vtable used,-// leaving `~Engine()` and its thunks undefined. It links as a missing-// `..MCPagodaEngine<..,Statistics>..D0Ev` at dlopen time, and *only* for the exact tag named in-// the probe (`Statistics` here), which is why it looks like a QuantLib packaging problem rather-// than a bug in this file. Keep the explicit `Ret`; do not "simplify" it back to decltype.+// Use an explicit result type: a decltype probe can prevent clang from emitting the selected+// engine's vtable. template <class T> struct Tag { using type = T; };  template <class Ret, class F>@@ -145,7 +140,7 @@   }); } -PricingEngine* qlMCAmericanEngine1Aux(int rngtrait, int stattrait, const shared_ptr<GeneralizedBlackScholesProcess> process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned polynomOrder, LsmBasisSystem::PolynomialType polynomType, unsigned nCalibrationSamples, ext::optional<bool> antitheticVariateCalibration, unsigned seedCalibration) {+PricingEngine* qlMCAmericanEngine1Aux(int rngtrait, int stattrait, const shared_ptr<GeneralizedBlackScholesProcess> process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned polynomOrder, LsmBasisSystem::PolynomialType polynomType, unsigned nCalibrationSamples, optional<bool> antitheticVariateCalibration, unsigned seedCalibration) {   return dispatchRngStat<PricingEngine*>(rngtrait, stattrait, [&](auto r, auto st) {     return new MCAmericanEngine<typename decltype(r)::type, typename decltype(st)::type>(process, timeSteps, timeStepsPerYear, antitheticVariate, controlVariate, requiredSamples, requiredTolerance, maxSamples, seed, polynomOrder, polynomType, nCalibrationSamples, antitheticVariateCalibration, seedCalibration);   });@@ -287,23 +282,24 @@   }); } -// MCAmericanBasketEngine is templated <RNG> only upstream (its base MCLongstaffSchwartzEngine<BasketOption::engine,-// MultiVariate,RNG> never forwards a second template argument), so unlike every other engine in this file it has no-// S axis to expose -- not a gap, a real upstream limitation. See CLAUDE.md/PricingEngine.chs for the note.+// Upstream MCAmericanBasketEngine has only an RNG template parameter; it has no statistics axis. PricingEngine* qlMCAmericanBasketEngine1Aux(int rngtrait, const shared_ptr<StochasticProcessArray> processes, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned nCalibrationSamples, unsigned polynomialOrder, LsmBasisSystem::PolynomialType polynomialType) {   return dispatchRng<PricingEngine*>(rngtrait, [&](auto r) {     return new MCAmericanBasketEngine<typename decltype(r)::type>(processes, timeSteps, timeStepsPerYear, brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples, seed, nCalibrationSamples, polynomialOrder, polynomialType);   }); } -PricingEngine* qlFdBlackScholesVanillaEngineAux(const shared_ptr<GeneralizedBlackScholesProcess> process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, const FdmSchemeDesc &fdScheme, bool localVol, double illegalLocalVolOverwrite, int cashDividendModel) {return new FdBlackScholesVanillaEngine(process, tGrid, xGrid, dampingSteps, fdScheme, localVol, illegalLocalVolOverwrite, (FdBlackScholesVanillaEngine::CashDividendModel)cashDividendModel);}+PricingEngine* qlFdBlackScholesVanillaEngineAux(const shared_ptr<GeneralizedBlackScholesProcess> process, unsigned tGrid, unsigned xGrid, unsigned dampingSteps, const FdmSchemeDesc &fdScheme, bool localVol, double illegalLocalVolOverwrite, int cashDividendModel) {return new hasquant::CheckedFdEngine<FdBlackScholesVanillaEngine>(process, tGrid, xGrid, dampingSteps, fdScheme, localVol, illegalLocalVolOverwrite, (FdBlackScholesVanillaEngine::CashDividendModel)cashDividendModel);}  class PolymorphicPathGenerator { private:-  using PseudoRandomPathGenerator = MultiPathGenerator<PseudoRandom::rsg_type>;-  using SobolPathGenerator = MultiPathGenerator<LowDiscrepancy::rsg_type>;-  using PoissonPathGenerator = MultiPathGenerator<PoissonPseudoRandom::rsg_type>;-  using ZigguratPathGenerator = MultiPathGenerator<Ziggurat::rsg_type>;+  template <class Rsg> struct SequenceSource {+    using sample_type = typename Rsg::sample_type;+    shared_ptr<Rsg> source;+    unsigned dimension() const {return source->dimension();}+    const Sample<std::vector<Real>>& nextSequence() const {return source->nextSequence();}+    const Sample<std::vector<Real>>& lastSequence() const {return source->lastSequence();}+  }; public:   PolymorphicPathGenerator(int rngtrait, const shared_ptr<StochasticProcess> p, const TimeGrid &t, unsigned seed, unsigned dim, bool brownianBridge) {     init(rngtrait, p, t, seed, dim, brownianBridge, SobolRsg::Jaeckel);@@ -311,41 +307,43 @@   PolymorphicPathGenerator(SobolRsg::DirectionIntegers dir, const shared_ptr<StochasticProcess> p, const TimeGrid &t, unsigned seed, unsigned dim, bool brownianBridge) {     init(hasquant::LowDiscrepancy, p, t, seed, dim, brownianBridge, dir);   }-  const Sample<MultiPath>& next() const {return _next();}+  const Sample<MultiPath>& next() const {const auto& s = _next(); drawn_ = true; return s;}   const Sample<MultiPath>& antithetic() const {return _antithetic();}+  const Sample<std::vector<Real>>& sequence() const {+    QL_REQUIRE(drawn_, "no path has been drawn");+    return _sequence();+  } private:+  template <class Rsg> void install(const shared_ptr<StochasticProcess>& p, const TimeGrid& t, Rsg rsg, bool brownianBridge) {+    auto source = shared_ptr<Rsg>(new Rsg(std::move(rsg)));+    using Generator = MultiPathGenerator<SequenceSource<Rsg>>;+    auto gen = shared_ptr<Generator>(new Generator(p, t, SequenceSource<Rsg>{source}, brownianBridge));+    _next = [gen]() -> const Sample<MultiPath>& {return gen->next();};+    _antithetic = [gen]() -> const Sample<MultiPath>& {return gen->antithetic();};+    _sequence = [source]() -> const Sample<std::vector<Real>>& {return source->lastSequence();};+  }   void init(int rngtrait, const shared_ptr<StochasticProcess> p, const TimeGrid &t, unsigned seed, unsigned dim, bool brownianBridge, SobolRsg::DirectionIntegers dir) {     switch (rngtrait) {     case hasquant::PseudoRandom:-      _pseudoRandom = std::unique_ptr<PseudoRandomPathGenerator>(new PseudoRandomPathGenerator(p, t, PseudoRandom::rsg_type(PseudoRandom::ursg_type(dim, PseudoRandom::urng_type(seed))), brownianBridge));-      _next = std::bind(static_cast<const Sample<MultiPath>& (PseudoRandomPathGenerator::*)() const>(&PseudoRandomPathGenerator::next), _pseudoRandom.get());-      _antithetic = std::bind(&PseudoRandomPathGenerator::antithetic, _pseudoRandom.get());+      install(p, t, PseudoRandom::rsg_type(PseudoRandom::ursg_type(dim, PseudoRandom::urng_type(seed))), brownianBridge);       break;     case hasquant::PoissonPseudoRandom:-      _poisson = std::unique_ptr<PoissonPathGenerator>(new PoissonPathGenerator(p, t, PoissonPseudoRandom::rsg_type(PoissonPseudoRandom::ursg_type(dim, PoissonPseudoRandom::urng_type(seed))), brownianBridge));-      _next = std::bind(static_cast<const Sample<MultiPath>& (PoissonPathGenerator::*)() const>(&PoissonPathGenerator::next), _poisson.get());-      _antithetic = std::bind(&PoissonPathGenerator::antithetic, _poisson.get());+      install(p, t, PoissonPseudoRandom::rsg_type(PoissonPseudoRandom::ursg_type(dim, PoissonPseudoRandom::urng_type(seed))), brownianBridge);       break;     case hasquant::LowDiscrepancy:-      _sobol = std::unique_ptr<SobolPathGenerator>(new SobolPathGenerator(p, t, LowDiscrepancy::rsg_type(SobolRsg(dim, seed, dir)), brownianBridge));-      _next = std::bind(static_cast<const Sample<MultiPath>& (SobolPathGenerator::*)() const>(&SobolPathGenerator::next), _sobol.get());-      _antithetic = std::bind(&SobolPathGenerator::antithetic, _sobol.get());+      install(p, t, LowDiscrepancy::rsg_type(SobolRsg(dim, seed, dir)), brownianBridge);       break;     case hasquant::Ziggurat:-      _ziggurat = std::unique_ptr<ZigguratPathGenerator>(new ZigguratPathGenerator(p, t, Ziggurat::rsg_type(dim, ZigguratRng(seed)), brownianBridge));-      _next = std::bind(static_cast<const Sample<MultiPath>& (ZigguratPathGenerator::*)() const>(&ZigguratPathGenerator::next), _ziggurat.get());-      _antithetic = std::bind(&ZigguratPathGenerator::antithetic, _ziggurat.get());+      install(p, t, Ziggurat::rsg_type(dim, ZigguratRng(seed)), brownianBridge);       break;     default:       QL_FAIL("Unknown RNG "<< rngtrait);     }   }-  std::unique_ptr<PseudoRandomPathGenerator> _pseudoRandom;-  std::unique_ptr<SobolPathGenerator> _sobol;-  std::unique_ptr<PoissonPathGenerator> _poisson;-  std::unique_ptr<ZigguratPathGenerator> _ziggurat;   std::function<const Sample<MultiPath>& ()> _next;   std::function<const Sample<MultiPath>& ()> _antithetic;+  std::function<const Sample<std::vector<Real>>& ()> _sequence;+  mutable bool drawn_ = false; };  PolymorphicPathGenerator* qlPathGeneratorAux(int rngtrait, const shared_ptr<StochasticProcess> p, const TimeGrid &grid, unsigned seed, unsigned dim, bool brownianBridge) {@@ -356,13 +354,8 @@   return new PolymorphicPathGenerator(dir, p, grid, seed, dim, brownianBridge); } -// The gaussian sequence generator that PolymorphicPathGenerator's MultiPathGenerator merely-// consumes, lifted out so Haskell can drive its own SDE evolution with no callback in the hot-// loop -- shape 1 of CLAUDE.md's "coarsen the language-boundary crossing" bullet, the same trick-// lsmRegress plays on LongstaffSchwartzPathPricer. Same four-way RngTrait switch and the same-// SobolRsg::DirectionIntegers overload as PolymorphicPathGenerator above, deliberately: the two-// construct their rsg identically, so a Haskell-evolved path can be compared draw-for-draw-// against pathGenerator's own.+// Expose the gaussian sequence generator so Haskell can evolve paths without a hot-loop callback.+// Match PolymorphicPathGenerator's RNG and Sobol dispatch for draw-for-draw comparisons. class PolymorphicGaussianRsg { private:   using PseudoRandomRsg = PseudoRandom::rsg_type;@@ -432,3 +425,5 @@ const Sample<MultiPath>& qlPathGeneratorAntitheticAux(PolymorphicPathGenerator *p) {return p->antithetic();}  /* vim: set ft=cpp ff=unix ts=8 sts=2 sw=2 et: */++const Sample<std::vector<Real>>& qlPathGeneratorSequenceAux(PolymorphicPathGenerator* g) {return g->sequence();}
cbits/qlPricingEngineAux.h view
@@ -6,7 +6,7 @@  QuantLib::PricingEngine* qlMCVarianceSwapEngine1Aux(int rngtrait, int stattrait, const shared_ptr<QuantLib::GeneralizedBlackScholesProcess> process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed); QuantLib::PricingEngine* qlMCHestonHullWhiteEngine1Aux(int rngtrait, int stattrait, const shared_ptr<QuantLib::HybridHestonHullWhiteProcess> process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed);-QuantLib::PricingEngine* qlMCAmericanEngine1Aux(int rngtrait, int stattrait, const shared_ptr<QuantLib::GeneralizedBlackScholesProcess> process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned polynomOrder, QuantLib::LsmBasisSystem::PolynomialType polynomType, unsigned nCalibrationSamples, QuantLib::ext::optional<bool> antitheticVariateCalibration, unsigned seedCalibration);+QuantLib::PricingEngine* qlMCAmericanEngine1Aux(int rngtrait, int stattrait, const shared_ptr<QuantLib::GeneralizedBlackScholesProcess> process, unsigned timeSteps, unsigned timeStepsPerYear, int antitheticVariate, int controlVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed, unsigned polynomOrder, QuantLib::LsmBasisSystem::PolynomialType polynomType, unsigned nCalibrationSamples, optional<bool> antitheticVariateCalibration, unsigned seedCalibration); QuantLib::PricingEngine* qlMCBarrierEngine1Aux(int rngtrait, int stattrait, const shared_ptr<QuantLib::GeneralizedBlackScholesProcess> process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, int isBiased, unsigned seed); QuantLib::PricingEngine* qlMCDigitalEngine1Aux(int rngtrait, int stattrait, const shared_ptr<QuantLib::GeneralizedBlackScholesProcess> x0, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed); QuantLib::PricingEngine* qlMCForwardEuropeanBSEngine1Aux(int rngtrait, int stattrait, const shared_ptr<QuantLib::GeneralizedBlackScholesProcess> process, unsigned timeSteps, unsigned timeStepsPerYear, int brownianBridge, int antitheticVariate, unsigned requiredSamples, double requiredTolerance, unsigned maxSamples, unsigned seed);@@ -40,6 +40,7 @@ void qlFreePolymorphicPathGeneratorAux(PolymorphicPathGenerator *p); const SamplePath& qlPathGeneratorNextAux(PolymorphicPathGenerator* gen); const SamplePath& qlPathGeneratorAntitheticAux(PolymorphicPathGenerator* gen);+const QuantLib::Sample<std::vector<QuantLib::Real>>& qlPathGeneratorSequenceAux(PolymorphicPathGenerator* gen);  // The gaussian sequence generator MultiPathGenerator merely consumes, exposed standalone so a // Haskell-defined SDE can be evolved entirely in Haskell -- see QuantLib.Method.gaussianRsg.
+ cbits/qlStdCompat.h view
@@ -0,0 +1,31 @@+#ifndef QL_STD_COMPAT_H+#define QL_STD_COMPAT_H++#include <ql/version.hpp>+#include <ql/optional.hpp>+#include <ql/any.hpp>++// New constructor arguments disappear entirely when compiling against the preceding release.+#if QL_HEX_VERSION >= 0x01440000+#define QL144_ARGS(...) , __VA_ARGS__+#else+#define QL144_ARGS(...)+#endif++// QuantLib's optional and any: std, or boost on a QuantLib <= 1.43 built without the std flags.+#if QL_HEX_VERSION < 0x01440000 && !defined(QL_USE_STD_OPTIONAL)+using boost::optional;+inline const boost::none_t& nullopt = boost::none;+#else+using std::optional;+using std::nullopt;+#endif+#if QL_HEX_VERSION < 0x01440000 && !defined(QL_USE_STD_ANY)+using boost::any;+using boost::any_cast;+#else+using std::any;+using std::any_cast;+#endif++#endif
cbits/qlTermStructure.cpp view
@@ -8,2605 +8,3002 @@ #include <ql/termstructures/volatility/atmsmilesection.hpp> #include <ql/experimental/volatility/svismilesection.hpp> #include <ql/experimental/volatility/sviinterpolatedsmilesection.hpp>-#include <ql/termstructures/volatility/equityfx/all.hpp>-#include <ql/termstructures/volatility/equityfx/andreasenhugelocalvoladapter.hpp>-#include <ql/termstructures/volatility/equityfx/andreasenhugevolatilityadapter.hpp>-#include <ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp>-#include <ql/termstructures/volatility/equityfx/gridmodellocalvolsurface.hpp>-#include <ql/termstructures/volatility/equityfx/hestonblackvolsurface.hpp>-#include <ql/termstructures/volatility/swaption/swaptionconstantvol.hpp>-#include <ql/termstructures/volatility/equityfx/blackconstantvol.hpp>-#include <ql/termstructures/volatility/swaption/swaptionconstantvol.hpp>-#include <ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp>-#include <ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp>-#include <ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp>-#include <ql/termstructures/volatility/swaption/interpolatedswaptionvolatilitycube.hpp>-#include <ql/termstructures/volatility/sabrsmilesection.hpp>-#include <ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp>-#include <ql/experimental/volatility/noarbsabrsmilesection.hpp>-#include <ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp>-#include <ql/experimental/volatility/blackatmvolcurve.hpp>-#include <ql/experimental/volatility/blackvolsurface.hpp>-#include <ql/experimental/volatility/abcdatmvolcurve.hpp>-#include <ql/experimental/volatility/sabrvolsurface.hpp>-#include <ql/termstructures/volatility/optionlet/optionletstripper2.hpp>-#include <ql/instruments/capfloor.hpp>-#include <ql/termstructures/volatility/capfloor/all.hpp>-#include <ql/math/interpolations/all.hpp>-#include <ql/experimental/callablebonds/callablebondvolstructure.hpp>-#include <ql/experimental/callablebonds/callablebondconstantvol.hpp>-#include <ql/termstructures/credit/flathazardrate.hpp>-#include <ql/experimental/credit/spreadedhazardratecurve.hpp>-#include <ql/experimental/credit/factorspreadedhazardratecurve.hpp>-#include <ql/termstructures/credit/defaultprobabilityhelpers.hpp>-#include <ql/termstructures/yield/all.hpp>-#include <ql/termstructures/multicurve.hpp>-#include <ql/experimental/termstructures/basisswapratehelpers.hpp>-#include <ql/experimental/termstructures/crosscurrencyratehelpers.hpp>-#include <ql/math/interpolations/all.hpp>-#include <ql/index.hpp>-#include <ql/indexes/indexmanager.hpp>-#include <ql/indexes/swapindex.hpp>-#include <ql/indexes/bmaindex.hpp>-#include <ql/indexes/swap/all.hpp>-#include <ql/indexes/iborindex.hpp>-#include <ql/indexes/ibor/all.hpp>-#include <ql/indexes/inflation/all.hpp>-#include <ql/termstructures/inflation/inflationhelpers.hpp>-#include <ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp>-#include <ql/indexes/equityindex.hpp>-#include <ql/experimental/commodities/commoditycurve.hpp>-#include <ql/experimental/commodities/commodityindex.hpp>-#include <ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp>-#include <ql/pricingengines/inflation/inflationcapfloorengines.hpp>-#include <ql/experimental/inflation/cpicapfloortermpricesurface.hpp>-#include <ql/experimental/inflation/cpicapfloorengines.hpp>-#include <ql/termstructures/volatility/inflation/constantcpivolatility.hpp>-#include <ql/experimental/inflation/yoycapfloortermpricesurface.hpp>-#include <ql/experimental/inflation/interpolatedyoyoptionletstripper.hpp>-#include <ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp>--#include "qlaux.h"-#include "qlMisc.h"-using namespace QuantLib;-// these are type aliases so we cannot use their forward declarations in qlaux.h without including all relevant header files-using QlDefaultProbabilityHelper = shared_ptr<DefaultProbabilityHelper>;-using QlRateHelper = shared_ptr<RateHelper>;-using FittedBondDiscountCurveFittingMethod = FittedBondDiscountCurve::FittingMethod;-#include "qlTermStructure.h"-#include "qlTermStructureAux.h"--namespace hasquant {-#include "qlEnumObjects.h"-}--#ifdef QLTRACK_ALLOCATIONS-QL_TRACE_NAME(DefaultProbabilityHelper)-QL_TRACE_NAME(QlDefaultProbabilityHelper)-QL_TRACE_NAME(RateHelper)-QL_TRACE_NAME(QlRateHelper)-QL_TRACE_NAME(FittedBondDiscountCurveFittingMethod)-QL_TRACE_NAME(PiecewiseZeroSpreadedTermStructure)-#endif--namespace {-  bool sameIndexName(const std::string& s1, const std::string& s2) {-    return s1.size() == s2.size() && std::equal(s1.begin(), s1.end(), s2.begin(),-      [](const auto& c1, const auto& c2) {-        return std::toupper(static_cast<unsigned char>(c1)) == std::toupper(static_cast<unsigned char>(c2));-      });-  }--  template <class T>-  inline std::vector< std::vector<Handle<T> > > qlHandleMatrix(Handle<T> **vals, size_t rows, size_t cols) {-    std::vector< std::vector<Handle<T> > > r; r.reserve(rows);-    for (size_t i = 0; i < rows; ++i) {-      std::vector<Handle<T> > row; row.reserve(cols);-      for (size_t j = 0; j < cols; ++j)-        row.push_back(*arg(vals[i * cols + j]));-      r.push_back(row);-    }-    return r;-  }--  // The stripper sets the real vol on this engine as it bootstraps each strike's curve-  // (interpolatedyoyoptionletstripper.hpp), so it is constructed with a deliberately null-  // vol handle -- same idiom as the upstream test (inflationvolatility.cpp's testYoYPriceSurfaceToVol).-  Handle<YoYOptionletVolatilitySurface> qlNullYoYOptionletVolatilitySurfaceHandle() {-    return Handle<YoYOptionletVolatilitySurface>(shared_ptr<YoYOptionletVolatilitySurface>(), false);-  }--  // IterativeBootstrap's constructor defaults for the narrow piecewise-yield entry points;-  // bootstrapOpts below builds the same POD from explicit full-arity yield/credit settings.-  QlIterativeBootstrapOpts defaultBootstrapOpts() {-    QlIterativeBootstrapOpts b;-    b.accuracy = b.minValue = b.maxValue = Null<Real>();-    b.maxAttempts = 1;-    b.maxFactor = b.minFactor = 2.0;-    b.dontThrow = 0;-    b.dontThrowSteps = 10;-    b.maxEvaluations = MAX_FUNCTION_EVALUATIONS;-    return b;-  }--  QlIterativeBootstrapOpts bootstrapOpts(double accuracy, double minValue, double maxValue,-      unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow,-      unsigned dontThrowSteps, unsigned maxEvaluations) {-    QlIterativeBootstrapOpts b;-    b.accuracy = accuracy; b.minValue = minValue; b.maxValue = maxValue;-    b.maxAttempts = maxAttempts; b.maxFactor = maxFactor; b.minFactor = minFactor;-    b.dontThrow = dontThrow; b.dontThrowSteps = dontThrowSteps; b.maxEvaluations = maxEvaluations;-    return b;-  }--  template <class Build>-  QlDefaultProbabilityTermStructure* piecewiseDefaultCurveImpl(Build&& build, char **e) {-    try {-      auto ts = allocShared(build());-      return ret(new QlDefaultProbabilityTermStructure(ts));-    } catch (std::exception& er) {-      return handleException<QlDefaultProbabilityTermStructure*>(e, er);-    }-  }---// The named-index factory tables below live inside the extern "C" block with the shims that-// use them, but a template cannot be declared with C linkage, so their element constructors-// sit here instead.-// Return type spelled as the base (not the concrete subclass): alloc() takes its trace label-// from its argument's static type, and these are freed through the base -- see makeCurrency-// in qlMisc.cpp for the same reasoning spelled out in full.-template <class I> SwapIndex *makeSwapIndex(const Period &p, const QlYieldTermStructure &h1, const QlYieldTermStructure &h2) {return new I(p, h1, h2);}-// Three constructor shapes upstream: a tenor Period, a bare curve, or a plain number of months.-template <class I> IborIndex *makeIborIndex(int l, int u, const QlYieldTermStructure &ts) {return new I(Period(l, (TimeUnit)u), ts);}-template <class I> IborIndex *makeIborIndexTS(int, int, const QlYieldTermStructure &ts) {return new I(ts);}-template <class I> IborIndex *makeIborIndexMonths(int l, int, const QlYieldTermStructure &ts) {return new I(l, ts);}-template <class I> OvernightIndex *makeONIndex(const QlYieldTermStructure &ts) {return new I(ts);}-template <class I> ZeroInflationIndex *makeZeroInflationIndex() {return new I();}-template <class I> YoYInflationIndex *makeYoYInflationIndex() {return new I();}-template <class R> Region *makeRegion() {return new R();}--using makeSwapIdx = SwapIndex *(*)(const Period &p, const QlYieldTermStructure &h1, const QlYieldTermStructure &h2);-using makeIborIdx = IborIndex *(*)(int l, int u, const QlYieldTermStructure &ts);-using makeOnIdx = OvernightIndex *(*)(const QlYieldTermStructure &ts);-using makeZeroInflIdx = ZeroInflationIndex *(*)();-using makeYoYInflIdx = YoYInflationIndex *(*)();-using makeReg = Region *(*)();-}--extern "C" {-QlOptionletVolatilityStructure *qlConstantOptionletVol1(unsigned days, Calendar *cal, int conv, QlQuote *q, DayCounter *dc, int type, double displacement, char **e) {-  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new ConstantOptionletVolatility(days, *arg(cal), (BusinessDayConvention) conv, *arg(q), *arg(dc), (VolatilityType)type, displacement)))));-  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure *>(e, er);}}-QlOptionletVolatilityStructure *qlCapletVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned volsLen, double* vols, DayCounter* dc, int type, double displacement, char **e) {-  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new CapletVarianceCurve(Date(referenceDate), qlDateVector(dates, datesLen), std::vector<double>(vols, vols+volsLen), *arg(dc), (VolatilityType)type, displacement)))));-  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure *>(e, er);}}--void qlFreeOptionletVolatilityStructure(QlOptionletVolatilityStructure *p) {del(p);}-// Deliberate snapshot detach, same reasoning as qlBlackVolTermStructureAsVolatilityTermStructure.-QlVolatilityTermStructure* qlOptionletVolatilityStructureAsVolatilityTermStructure(QlOptionletVolatilityStructure *o) {return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}--// OptionletStripper1 is never exposed to Haskell as its own type -- immediately wrapped in a-// StrippedOptionletAdapter, itself an OptionletVolatilityStructure, mirroring qlConstantOptionletVol1-// above. optionletFrequencyUnit < 0 is the ext::nullopt sentinel for optionletFrequency, same-// convention as qlOptBusinessDayConvention/qlOptFrequency (TimeUnit starts at 0, so can't self-sentinel).-QlOptionletVolatilityStructure* qlOptionletStripper1(QlCapFloorTermVolSurface* surface, QlIborIndex* index, double switchStrikes, double accuracy, unsigned maxIter, QlYieldTermStructure* discount, int type, double displacement, int dontThrow, int optionletFrequencyLen, int optionletFrequencyUnit, char **e) {-  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new StrippedOptionletAdapter(-            shared_ptr<OptionletStripper1>(alloc(new OptionletStripper1(*arg(surface), *arg(index), switchStrikes, accuracy, maxIter,-              qlNullableHandle(arg(discount)), (VolatilityType)type, displacement, (bool)dontThrow,-              optionletFrequencyUnit < 0 ? ext::optional<Period>() : ext::optional<Period>(Period(optionletFrequencyLen, (TimeUnit)optionletFrequencyUnit))))))))));-  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure*>(e, er);}}--// A relinkable handle, empty when `initial` is null -- mirrors qlRelinkableYieldTermStructure.-QlRelinkableOptionletVolatilityStructure* qlRelinkableOptionletVolatilityStructure(QlOptionletVolatilityStructure *initial, char **e) {-  try {return ret(initial ? new QlRelinkableOptionletVolatilityStructure(handlePtr(arg(initial)))-                          : new QlRelinkableOptionletVolatilityStructure());-  } catch (std::exception& er) {return handleException<QlRelinkableOptionletVolatilityStructure*>(e, er);}}-void qlFreeRelinkableOptionletVolatilityStructure(QlRelinkableOptionletVolatilityStructure *o) {del(o);}-void qlRelinkableOptionletVolatilityStructureLinkTo(QlRelinkableOptionletVolatilityStructure *o, QlOptionletVolatilityStructure *c, char **e) {-  try {arg(o)->linkTo(handlePtr(arg(c)));} catch (std::exception& er) {(void)handleException<void *>(e, er);}}-QlOptionletVolatilityStructure* qlRelinkableOptionletVolatilityStructureAsOptionletVolatilityStructure(QlRelinkableOptionletVolatilityStructure *o) {return ret(new QlOptionletVolatilityStructure(*arg(o)));}-void qlFreeBlackVolTermStructure(QlBlackVolTermStructure *o) {del(o);}-// VolatilityTermStructure is never a Handle upstream (confirmed by grep), so this is a-// deliberate snapshot detach -- same reasoning as qlYieldTermStructureAsTermStructure.-QlVolatilityTermStructure* qlBlackVolTermStructureAsVolatilityTermStructure(QlBlackVolTermStructure *o) {return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}-double qlBlackVolTermStructureBlackVol(QlBlackVolTermStructure* o, int d, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVol(Date(d), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackVolTermStructureBlackVol1(QlBlackVolTermStructure* o, double t, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVol(t, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackVolTermStructureBlackVariance(QlBlackVolTermStructure* o, int d, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(Date(d), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackVolTermStructureBlackVariance1(QlBlackVolTermStructure* o, double t, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(t, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackVolTermStructureBlackForwardVol(QlBlackVolTermStructure* o, int d1, int d2, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackForwardVol(Date(d1), Date(d2), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackVolTermStructureBlackForwardVol1(QlBlackVolTermStructure* o, double t1, double t2, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackForwardVol(t1, t2, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackVolTermStructureBlackForwardVariance(QlBlackVolTermStructure* o, int d1, int d2, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackForwardVariance(Date(d1), Date(d2), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackVolTermStructureBlackForwardVariance1(QlBlackVolTermStructure* o, double t1, double t2, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackForwardVariance(t1, t2, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--// A relinkable handle, empty when `initial` is null -- mirrors qlRelinkableYieldTermStructure.-QlRelinkableBlackVolTermStructure* qlRelinkableBlackVolTermStructure(QlBlackVolTermStructure *initial, char **e) {-  try {return ret(initial ? new QlRelinkableBlackVolTermStructure(handlePtr(arg(initial)))-                          : new QlRelinkableBlackVolTermStructure());-  } catch (std::exception& er) {return handleException<QlRelinkableBlackVolTermStructure*>(e, er);}}-void qlFreeRelinkableBlackVolTermStructure(QlRelinkableBlackVolTermStructure *o) {del(o);}-void qlRelinkableBlackVolTermStructureLinkTo(QlRelinkableBlackVolTermStructure *o, QlBlackVolTermStructure *c, char **e) {-  try {arg(o)->linkTo(handlePtr(arg(c)));} catch (std::exception& er) {(void)handleException<void *>(e, er);}}-QlBlackVolTermStructure* qlRelinkableBlackVolTermStructureAsBlackVolTermStructure(QlRelinkableBlackVolTermStructure *o) {return ret(new QlBlackVolTermStructure(*arg(o)));}-void qlFreeVolatilityTermStructure(QlVolatilityTermStructure *o) {del(o);}-QlTermStructure* qlVolatilityTermStructureAsTermStructure(QlVolatilityTermStructure *o) {return ret(new QlTermStructure(*arg(o)));}-double qlVolatilityTermStructureMinStrike(QlVolatilityTermStructure* o, char **e) {-  try {return (*arg(o))->minStrike();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlVolatilityTermStructureMaxStrike(QlVolatilityTermStructure* o, char **e) {-  try {return (*arg(o))->maxStrike();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeBlackAtmVolCurve(QlBlackAtmVolCurve *o) {del(o);}-QlVolatilityTermStructure* qlBlackAtmVolCurveAsVolatilityTermStructure(QlBlackAtmVolCurve *o) {return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}-void qlFreeBlackVolSurface(QlBlackVolSurface *o) {del(o);}-QlBlackAtmVolCurve* qlBlackVolSurfaceAsBlackAtmVolCurve(QlBlackVolSurface *o) {return ret(new QlBlackAtmVolCurve(*arg(o)));}-void qlFreeAbcdAtmVolCurve(QlAbcdAtmVolCurve *o) {del(o);}-QlBlackAtmVolCurve* qlAbcdAtmVolCurveAsBlackAtmVolCurve(QlAbcdAtmVolCurve *o) {return ret(new QlBlackAtmVolCurve(*arg(o)));}-void qlFreeSabrVolSurface(QlSabrVolSurface *o) {del(o);}-QlBlackVolSurface* qlSabrVolSurfaceAsBlackVolSurface(QlSabrVolSurface *o) {return ret(new QlBlackVolSurface(*arg(o)));}-double qlBlackAtmVolCurveAtmVolForPeriod(QlBlackAtmVolCurve* o, int n, int u, int extrapolate, char **e) {-  try {return (*arg(o))->atmVol(Period(n, (TimeUnit)u), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackAtmVolCurveAtmVolForDate(QlBlackAtmVolCurve* o, int date, int extrapolate, char **e) {-  try {return (*arg(o))->atmVol(Date(date), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackAtmVolCurveAtmVolForTime(QlBlackAtmVolCurve* o, double t, int extrapolate, char **e) {-  try {return (*arg(o))->atmVol(t, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackAtmVolCurveAtmVarianceForPeriod(QlBlackAtmVolCurve* o, int n, int u, int extrapolate, char **e) {-  try {return (*arg(o))->atmVariance(Period(n, (TimeUnit)u), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackAtmVolCurveAtmVarianceForDate(QlBlackAtmVolCurve* o, int date, int extrapolate, char **e) {-  try {return (*arg(o))->atmVariance(Date(date), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlBlackAtmVolCurveAtmVarianceForTime(QlBlackAtmVolCurve* o, double t, int extrapolate, char **e) {-  try {return (*arg(o))->atmVariance(t, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlSmileSection* qlBlackVolSurfaceSmileSectionForPeriod(QlBlackVolSurface* o, int n, int u, int extrapolate, char **e) {-  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Period(n, (TimeUnit)u), extrapolate))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlBlackVolSurfaceSmileSectionForDate(QlBlackVolSurface* o, int date, int extrapolate, char **e) {-  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Date(date), extrapolate))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlBlackVolSurfaceSmileSectionForTime(QlBlackVolSurface* o, double t, int extrapolate, char **e) {-  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(t, extrapolate))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlAbcdAtmVolCurve* qlAbcdAtmVolCurve(unsigned settlementDays, Calendar* calendar, unsigned optionTenorsLen, int *n, unsigned, int *u, unsigned volsLen, QlQuote** vols, unsigned flagsLen, int *flags, int bdc, DayCounter* dc, char **e) {-  try {return ret(new QlAbcdAtmVolCurve(alloc(new AbcdAtmVolCurve(settlementDays, *arg(calendar),-              qlPeriodVector(n, u, optionTenorsLen), qlHandleVector(vols, volsLen),-              std::vector<bool>(flags, flags+flagsLen), (BusinessDayConvention)bdc, *arg(dc)))));-  } catch (std::exception& er) {return handleException<QlAbcdAtmVolCurve*>(e, er);}}-double qlAbcdAtmVolCurveA(QlAbcdAtmVolCurve* o, char **e) {-  try {return (*arg(o))->a();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAbcdAtmVolCurveB(QlAbcdAtmVolCurve* o, char **e) {-  try {return (*arg(o))->b();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAbcdAtmVolCurveC(QlAbcdAtmVolCurve* o, char **e) {-  try {return (*arg(o))->c();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAbcdAtmVolCurveD(QlAbcdAtmVolCurve* o, char **e) {-  try {return (*arg(o))->d();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAbcdAtmVolCurveRmsError(QlAbcdAtmVolCurve* o, char **e) {-  try {return (*arg(o))->rmsError();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAbcdAtmVolCurveMaxError(QlAbcdAtmVolCurve* o, char **e) {-  try {return (*arg(o))->maxError();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlAbcdAtmVolCurveEndCriteria(QlAbcdAtmVolCurve* o, char **e) {-  try {return (int)(*arg(o))->endCriteria();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlAbcdAtmVolCurveKAtTime(QlAbcdAtmVolCurve* o, double t, char **e) {-  try {return (*arg(o))->k(t);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlAbcdAtmVolCurveK(QlAbcdAtmVolCurve* o, unsigned *count, double **ks, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->k();}, count, ks);-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-void qlAbcdAtmVolCurveOptionTenors(QlAbcdAtmVolCurve* o, unsigned *count, int **n, unsigned *count2, int **u, char **e) {-  OutArrayResult<int> lengthResult(count, n), unitResult(count2, u);-  try {-    const std::vector<Period> &p = (*arg(o))->optionTenors();-    int *lengths = lengthResult.allocate((unsigned)p.size()), *units = unitResult.allocate((unsigned)p.size());-    for (size_t i = 0; i < p.size(); ++i) {lengths[i] = p[i].length(); units[i] = (int)p[i].units();}-    lengthResult.commit(); unitResult.commit();-  } catch (const std::exception& er) {*e = tracedup(er.what());}}-void qlAbcdAtmVolCurveOptionTenorsInInterpolation(QlAbcdAtmVolCurve* o, unsigned *count, int **n, unsigned *count2, int **u, char **e) {-  OutArrayResult<int> lengthResult(count, n), unitResult(count2, u);-  try {-    const std::vector<Period> &p = (*arg(o))->optionTenorsInInterpolation();-    int *lengths = lengthResult.allocate((unsigned)p.size()), *units = unitResult.allocate((unsigned)p.size());-    for (size_t i = 0; i < p.size(); ++i) {lengths[i] = p[i].length(); units[i] = (int)p[i].units();}-    lengthResult.commit(); unitResult.commit();-  } catch (const std::exception& er) {*e = tracedup(er.what());}}-void qlAbcdAtmVolCurveOptionDates(QlAbcdAtmVolCurve* o, unsigned *count, int **days, char **e) {-  OutArrayResult<int> result(count, days);-  try {-    const std::vector<Date> &dates = (*arg(o))->optionDates();-    int *out = result.allocate(dates.size());-    for (size_t i = 0; i < dates.size(); ++i) out[i] = dates[i].serialNumber();-    result.commit();-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-void qlAbcdAtmVolCurveOptionTimes(QlAbcdAtmVolCurve* o, unsigned *count, double **times, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->optionTimes();}, count, times);-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-QlSabrVolSurface* qlSabrVolSurface(QlInterestRateIndex* index, QlBlackAtmVolCurve* atmCurve, unsigned tenorsLen, int *n, unsigned, int *u, unsigned spreadsLen, double *atmRateSpreads, unsigned volRows, unsigned volCols, QlQuote** volSpreads, char **e) {-  try {return ret(new QlSabrVolSurface(alloc(new SabrVolSurface(*arg(index), Handle<BlackAtmVolCurve>(*arg(atmCurve)),-      qlPeriodVector(n, u, tenorsLen), std::vector<Spread>(atmRateSpreads, atmRateSpreads+spreadsLen),-      qlHandleMatrix(volSpreads, volRows, volCols)))));-  } catch (std::exception& er) {return handleException<QlSabrVolSurface*>(e, er);}}-QlBlackAtmVolCurve* qlSabrVolSurfaceAtmCurve(QlSabrVolSurface* o, char **e) {-  try {return ret(new QlBlackAtmVolCurve((*arg(o))->atmCurve().currentLink()));-  } catch (std::exception& er) {return handleException<QlBlackAtmVolCurve*>(e, er);}}-void qlSabrVolSurfaceVolatilitySpreadsForPeriod(QlSabrVolSurface* o, int n, int u, unsigned *count, double **vols, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->volatilitySpreads(Period(n, (TimeUnit)u));}, count, vols);-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-void qlSabrVolSurfaceVolatilitySpreadsForDate(QlSabrVolSurface* o, int date, unsigned *count, double **vols, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->volatilitySpreads(Date(date));}, count, vols);-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-QlInterestRateIndex* qlSabrVolSurfaceIndex(QlSabrVolSurface* o, char **e) {-  try {return ret(new QlInterestRateIndex((*arg(o))->index()));-  } catch (std::exception& er) {return handleException<QlInterestRateIndex*>(e, er);}}-int qlSabrVolSurfaceOptionDateFromTenor(QlSabrVolSurface* o, int n, int u, char **e) {-  try {return (*arg(o))->optionDateFromTenor(Period(n, (TimeUnit)u)).serialNumber();-  } catch (std::exception& er) {return handleException<int>(e, er);}}--// OptionletStripper2 builds an OptionletStripper1 internally (never exposed to Haskell, same-// fusion as qlOptionletStripper1 above) then wraps OptionletStripper2 itself around it, keeping-// the OptionletStripper2 shared_ptr so its own diagnostic getters below are reachable with no cast.-QlOptionletStripper2* qlOptionletStripper2(QlCapFloorTermVolSurface* surface, QlIborIndex* index, double switchStrikes, double accuracy, unsigned maxIter, QlYieldTermStructure* discount, int type, double displacement, int dontThrow, int optionletFrequencyLen, int optionletFrequencyUnit, QlCapFloorTermVolCurve* atmCurve, char **e) {-  try {-    auto stripper1 = shared_ptr<OptionletStripper1>(alloc(new OptionletStripper1(*arg(surface), *arg(index),-        switchStrikes, accuracy, maxIter, qlNullableHandle(arg(discount)), (VolatilityType)type, displacement,-        (bool)dontThrow, optionletFrequencyUnit < 0 ? ext::optional<Period>() : ext::optional<Period>(Period(optionletFrequencyLen, (TimeUnit)optionletFrequencyUnit)))));-    return ret(new QlOptionletStripper2(alloc(new OptionletStripper2(stripper1, Handle<CapFloorTermVolCurve>(*arg(atmCurve))))));-  } catch (std::exception& er) {return handleException<QlOptionletStripper2*>(e, er);}}-void qlFreeOptionletStripper2(QlOptionletStripper2 *o) {del(o);}-// Fresh construction (StrippedOptionletAdapter around the OptionletStripper2 itself), never a-// cast -- same idiom as qlSabrInterpolatedSmileSectionAsSmileSection.-QlOptionletVolatilityStructure* qlOptionletStripper2AsOptionletVolatilityStructure(QlOptionletStripper2 *o, char **e) {-  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(-      alloc(new StrippedOptionletAdapter(*arg(o))))));-  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure*>(e, er);}}-void qlOptionletStripper2AtmCapFloorStrikes(QlOptionletStripper2* o, unsigned *count, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->atmCapFloorStrikes();}, count, vs);-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-void qlOptionletStripper2AtmCapFloorPrices(QlOptionletStripper2* o, unsigned *count, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->atmCapFloorPrices();}, count, vs);-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}-void qlOptionletStripper2SpreadsVol(QlOptionletStripper2* o, unsigned *count, double **vs, char **e) {-  try {fillVectorOut([&] {return (*arg(o))->spreadsVol();}, count, vs);-  } catch (std::exception& er) {(void)handleException<int>(e, er);}}--void qlFreeSwaptionVolatilityStructure(QlSwaptionVolatilityStructure *o) {del(o);}-// Deliberate snapshot detach, same reasoning as qlBlackVolTermStructureAsVolatilityTermStructure.-QlVolatilityTermStructure* qlSwaptionVolatilityStructureAsVolatilityTermStructure(QlSwaptionVolatilityStructure *o) {return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}--// A relinkable handle, empty when `initial` is null -- mirrors qlRelinkableYieldTermStructure.-QlRelinkableSwaptionVolatilityStructure* qlRelinkableSwaptionVolatilityStructure(QlSwaptionVolatilityStructure *initial, char **e) {-  try {return ret(initial ? new QlRelinkableSwaptionVolatilityStructure(handlePtr(arg(initial)))-                          : new QlRelinkableSwaptionVolatilityStructure());-  } catch (std::exception& er) {return handleException<QlRelinkableSwaptionVolatilityStructure*>(e, er);}}-void qlFreeRelinkableSwaptionVolatilityStructure(QlRelinkableSwaptionVolatilityStructure *o) {del(o);}-void qlRelinkableSwaptionVolatilityStructureLinkTo(QlRelinkableSwaptionVolatilityStructure *o, QlSwaptionVolatilityStructure *c, char **e) {-  try {arg(o)->linkTo(handlePtr(arg(c)));} catch (std::exception& er) {(void)handleException<void *>(e, er);}}-QlSwaptionVolatilityStructure* qlRelinkableSwaptionVolatilityStructureAsSwaptionVolatilityStructure(QlRelinkableSwaptionVolatilityStructure *o) {return ret(new QlSwaptionVolatilityStructure(*arg(o)));}-void qlFreeSmileSection(QlSmileSection *o) {del(o);}--QlBlackVolTermStructure* qlBlackConstantVol1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, char **e) {-  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new BlackConstantVol(settlementDays, *arg(x1), *arg(volatility), *arg(dayCounter))))));-  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}-QlBlackVolTermStructure* qlBlackConstantVol(int referenceDate, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, char **e) {-  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new BlackConstantVol(Date(referenceDate), *arg(x1), *arg(volatility), *arg(dayCounter))))));-  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}-QlOptionletVolatilityStructure* qlConstantOptionletVolatility(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double displacement, char **e) {-  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new ConstantOptionletVolatility(Date(referenceDate), *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), (*arg(dc)), (VolatilityType)type, displacement)))));-  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure*>(e, er);}}-QlSwaptionVolatilityStructure* qlConstantSwaptionVolatility1(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double shift, char **e) {-  try {return ret(new QlSwaptionVolatilityStructure(shared_ptr<SwaptionVolatilityStructure>(alloc(new ConstantSwaptionVolatility(Date(referenceDate), *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), (*arg(dc)), (VolatilityType)type, shift)))));-  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityStructure*>(e, er);}}-QlSwaptionVolatilityStructure* qlConstantSwaptionVolatility(unsigned settlementDays, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double shift, char **e) {-  try {return ret(new QlSwaptionVolatilityStructure(shared_ptr<SwaptionVolatilityStructure>(alloc(new ConstantSwaptionVolatility(settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), (*arg(dc)), (VolatilityType)type, shift)))));-  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityStructure*>(e, er);}}-double qlSwaptionVolatilityStructureBlackVariance1(QlSwaptionVolatilityStructure* o, int optionDate, int n, int u, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(Date(optionDate), Period(n, (TimeUnit)u), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureBlackVariance2(QlSwaptionVolatilityStructure* o, double optionTime, int n, int u, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(optionTime, Period(n, (TimeUnit)u), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureBlackVariance3(QlSwaptionVolatilityStructure* o, int n, int u, double swapLength, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(Period(n, (TimeUnit)u), swapLength, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureBlackVariance4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(Date(optionDate), swapLength, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureBlackVariance5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(optionTime, swapLength, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureBlackVariance(QlSwaptionVolatilityStructure* o, int n, int u, int n1, int u1, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(Period(n, (TimeUnit)u), Period(n1, (TimeUnit)u1), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureMaxSwapLength(QlSwaptionVolatilityStructure* o, char **e) {try {return (*arg(o))->maxSwapLength();} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlSwaptionVolatilityStructureMaxSwapTenor(QlSwaptionVolatilityStructure* o, int *u, char **e) {-  try {const Period &p = (*arg(o))->maxSwapTenor();*u = p.units(); return p.length();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-QlSmileSection* qlSwaptionVolatilityStructureSmileSection1(QlSwaptionVolatilityStructure* o, int optionDate, int n, int u, int extr, char **e) {-  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Date(optionDate), Period(n, (TimeUnit)u), extr))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlSwaptionVolatilityStructureSmileSection2(QlSwaptionVolatilityStructure* o, double optionTime, int n, int u, int extr, char **e) {-  try {-    // declared but not implemented in Swaption TS for some reason:-    //return ret(new QlSmileSection(alloc((*arg(o))->smileSection(optionTime, *arg(swapTenor), extr))));-    SwaptionVolatilityStructure *ts = handlePtr(arg(o)).get(); Time length = ts->swapLength(Period(n, (TimeUnit)u));-    return ret(new QlSmileSection(alloc(ts->smileSection(optionTime, length, extr))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlSwaptionVolatilityStructureSmileSection3(QlSwaptionVolatilityStructure* o, int n, int u, double swapLength, int extr, char **e) {-  try {-    // declared but not implemented in Swaption TS for some reason:-    //return ret(new QlSmileSection(alloc((*arg(o))->smileSection(*arg(optionTenor), swapLength, extr))));-    SwaptionVolatilityStructure *ts = handlePtr(arg(o)).get(); Date optionDate = ts->optionDateFromTenor(Period(n, (TimeUnit)u));-    Time optionTime = ts->timeFromReference(optionDate);-    return ret(new QlSmileSection(alloc(ts->smileSection(optionTime, swapLength, extr))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlSwaptionVolatilityStructureSmileSection4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, int extr, char **e) {-  try {-    // declared but not implemented in Swaption TS for some reason:-    //return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Date(optionDate), swapLength, extr))));-    SwaptionVolatilityStructure *ts = handlePtr(arg(o)).get(); Time optionTime = ts->timeFromReference(Date(optionDate));-    return ret(new QlSmileSection(alloc(ts->smileSection(optionTime, swapLength, extr))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}--QlSmileSection* qlSwaptionVolatilityStructureSmileSection5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, int extr, char **e) {-  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(optionTime, swapLength, extr))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlSwaptionVolatilityStructureSmileSection(QlSwaptionVolatilityStructure* o, int n, int u, int n1, int u1, int extr, char **e) {-  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Period(n, (TimeUnit)u), Period(n1, (TimeUnit)u1), extr))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlSabrSmileSection(double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double shift, int volatilityType, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new SabrSmileSection(-      timeToExpiry, forward, std::vector<Real>{alpha, beta, nu, rho}, shift, (VolatilityType)volatilityType)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlSabrSmileSection1(int optionDate, double forward, double alpha, double beta, double nu, double rho, int referenceDate, DayCounter* dc, double shift, int volatilityType, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new SabrSmileSection(-      Date(optionDate), forward, std::vector<Real>{alpha, beta, nu, rho}, qlNullableDate(referenceDate),-      *arg(dc), shift, (VolatilityType)volatilityType)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlNoArbSabrSmileSection(double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double shift, int volatilityType, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new NoArbSabrSmileSection(-      timeToExpiry, forward, std::vector<Real>{alpha, beta, nu, rho}, shift, (VolatilityType)volatilityType)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlNoArbSabrSmileSection1(int optionDate, double forward, double alpha, double beta, double nu, double rho, DayCounter* dc, double shift, int volatilityType, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new NoArbSabrSmileSection(-      Date(optionDate), forward, std::vector<Real>{alpha, beta, nu, rho}, *arg(dc), shift, (VolatilityType)volatilityType)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-double qlSmileSectionVolatility(QlSmileSection* o, double strike, char **e) {-  try {return (*arg(o))->volatility(strike);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSmileSectionVariance(QlSmileSection* o, double strike, char **e) {-  try {return (*arg(o))->variance(strike);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSmileSectionAtmLevel(QlSmileSection* o, char **e) {-  try {return (*arg(o))->atmLevel();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSmileSectionOptionPrice(QlSmileSection* o, double strike, int type, double discount, char **e) {-  try {return (*arg(o))->optionPrice(strike, (Option::Type)type, discount);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSmileSectionDigitalOptionPrice(QlSmileSection* o, double strike, int type, double discount, double gap, char **e) {-  try {return (*arg(o))->digitalOptionPrice(strike, (Option::Type)type, discount, gap);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSmileSectionDensity(QlSmileSection* o, double strike, double discount, double gap, char **e) {-  try {return (*arg(o))->density(strike, discount, gap);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlSmileSection* qlFlatSmileSection(int d, double vol, DayCounter* dc, int referenceDate, double atmLevel, int type, double shift, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new FlatSmileSection(-      Date(d), vol, *arg(dc), qlNullableDate(referenceDate), atmLevel, (VolatilityType)type, shift)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlSpreadedSmileSection(QlSmileSection* source, QlQuote* spread, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new SpreadedSmileSection(*arg(source), *arg(spread))))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlAtmSmileSection(QlSmileSection* source, double atm, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new AtmSmileSection(*arg(source), atm)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-// SviSmileSection exposes no getters beyond the SmileSection base (a/b/sigma/rho/m are-// private, no accessors), so this returns the generic QlSmileSection directly -- same-// shape as qlFlatSmileSection/qlSpreadedSmileSection/qlAtmSmileSection above, not the-// dedicated-leaf pattern used for SabrInterpolatedSmileSection.-QlSmileSection* qlSviSmileSection(int d, double forward, double a, double b, double sigma, double rho, double m, DayCounter* dc, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new SviSmileSection(-      Date(d), forward, std::vector<Real>{a, b, sigma, rho, m}, *arg(dc))))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-// ZabrSmileSection's evaluation-tag dispatch lives in qlTermStructureAux.cpp (a runtime enum-// selects a template argument). Same generic-QlSmileSection shape as qlSviSmileSection above ---// ZabrSmileSection's only extra getter, model(), isn't exposed (no known consumer; ZabrModel-// itself isn't bound as its own type).-QlSmileSection* qlZabrSmileSection(int evaluation, double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double gamma, unsigned moneynessLen, double* moneyness, unsigned fdRefinement, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(-      qlZabrSmileSectionAux(evaluation, timeToExpiry, forward, std::vector<Real>{alpha, beta, nu, rho, gamma},-          std::vector<Real>(moneyness, moneyness + moneynessLen), fdRefinement)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlZabrSmileSection1(int evaluation, int d, double forward, double alpha, double beta, double nu, double rho, double gamma, DayCounter* dc, unsigned moneynessLen, double* moneyness, unsigned fdRefinement, char **e) {-  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(-      qlZabrSmileSectionAux1(evaluation, Date(d), forward, std::vector<Real>{alpha, beta, nu, rho, gamma},-          *arg(dc), std::vector<Real>(moneyness, moneyness + moneynessLen), fdRefinement)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSabrInterpolatedSmileSection* qlSabrInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, double shift, char **e) {-  try {-    // endCriteria/method are nullable (NULL -> empty shared_ptr, letting SABRInterpolation's-    // own internal EndCriteria/LevenbergMarquardt defaults apply); when given, copying the-    // shared_ptr out of Haskell's QlEndCriteria/QlOptimizationMethod box into this ctor's own-    // shared_ptr member is safe regardless of when Haskell's box is later collected -- see the-    // qlaux.h comment above the QlEndCriteria/QlOptimizationMethod aliases.-    // Returns the concrete type directly (not QlSmileSection) so alpha/beta/nu/rho/etc below-    // need no dynamic_pointer_cast -- see the CLAUDE.md API-design rule on preferring a-    // dedicated leaf over a runtime downcast. qlSabrInterpolatedSmileSectionAsSmileSection-    // below is the escape hatch for callers that need the generic SmileSection interface.-    ext::shared_ptr<SabrInterpolatedSmileSection> section(new SabrInterpolatedSmileSection(-        Date(optionDate), *arg(forward), std::vector<Real>(strikes, strikes + strikesLen), hasFloatingStrikes,-        *arg(atmVolatility), qlHandleVector(vols, volsLen), alpha, beta, nu, rho,-        isAlphaFixed, isBetaFixed, isNuFixed, isRhoFixed, vegaWeighted,-        endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(),-        method ? *arg(method) : shared_ptr<OptimizationMethod>(), *arg(dc), shift));-    section->atmLevel(); // force calibration now, surfacing failures at construction-    return ret(new QlSabrInterpolatedSmileSection(alloc(section)));-  } catch (std::exception& er) {return handleException<QlSabrInterpolatedSmileSection*>(e, er);}}-void qlFreeSabrInterpolatedSmileSection(QlSabrInterpolatedSmileSection* p) {del(p);}-// Fresh shared_ptr construction (implicit Derived->Base conversion), not a cast -- same-// pattern as qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure.-QlSmileSection* qlSabrInterpolatedSmileSectionAsSmileSection(QlSabrInterpolatedSmileSection* o, char **e) {-  try {return ret(new QlSmileSection(*arg(o)));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-double qlSabrInterpolatedSmileSectionAlpha(QlSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->alpha();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSabrInterpolatedSmileSectionBeta(QlSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->beta();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSabrInterpolatedSmileSectionNu(QlSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->nu();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSabrInterpolatedSmileSectionRho(QlSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->rho();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSabrInterpolatedSmileSectionRmsError(QlSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->rmsError();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSabrInterpolatedSmileSectionMaxError(QlSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->maxError();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlSabrInterpolatedSmileSectionEndCriteria(QlSabrInterpolatedSmileSection* o, char **e) {-  try {return (int)(*arg(o))->endCriteria();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-// SVI's aIsFixed..mIsFixed have no upstream defaults (unlike SABR's isAlphaFixed..isRhoFixed,-// which default to false) -- only vegaWeighted/endCriteria/method/dc are trailing-defaulted, so-// this widens in place rather than using a TH options record (below the 10-param threshold).-// Bind only the Quote overload, per AGENTS.md's std::variant/Handle<Quote> rule (SabrInterpolated--// SmileSection above does the same; the flat Rate/Volatility overload stays unbound). Same-// dedicated-leaf-over-dynamic_cast reasoning and eager-calibration-at-construction convention-// (atmLevel() forces the fit now, surfacing checkSviParameters' QL_REQUIREs at construction-// rather than at first use) as qlSabrInterpolatedSmileSection.-QlSviInterpolatedSmileSection* qlSviInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double a, double b, double sigma, double rho, double m, int aIsFixed, int bIsFixed, int sigmaIsFixed, int rhoIsFixed, int mIsFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, char **e) {-  try {-    ext::shared_ptr<SviInterpolatedSmileSection> section(new SviInterpolatedSmileSection(-        Date(optionDate), *arg(forward), std::vector<Real>(strikes, strikes + strikesLen), hasFloatingStrikes,-        *arg(atmVolatility), qlHandleVector(vols, volsLen), a, b, sigma, rho, m,-        aIsFixed, bIsFixed, sigmaIsFixed, rhoIsFixed, mIsFixed, vegaWeighted,-        endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(),-        method ? *arg(method) : shared_ptr<OptimizationMethod>(), *arg(dc)));-    section->atmLevel(); // force calibration now, surfacing failures at construction-    return ret(new QlSviInterpolatedSmileSection(alloc(section)));-  } catch (std::exception& er) {return handleException<QlSviInterpolatedSmileSection*>(e, er);}}-void qlFreeSviInterpolatedSmileSection(QlSviInterpolatedSmileSection* p) {del(p);}-// Fresh shared_ptr construction (implicit Derived->Base conversion), not a cast -- same-// pattern as qlSabrInterpolatedSmileSectionAsSmileSection.-QlSmileSection* qlSviInterpolatedSmileSectionAsSmileSection(QlSviInterpolatedSmileSection* o, char **e) {-  try {return ret(new QlSmileSection(*arg(o)));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-double qlSviInterpolatedSmileSectionA(QlSviInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->a();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSviInterpolatedSmileSectionB(QlSviInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->b();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSviInterpolatedSmileSectionSigma(QlSviInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->sigma();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSviInterpolatedSmileSectionRho(QlSviInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->rho();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSviInterpolatedSmileSectionM(QlSviInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->m();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSviInterpolatedSmileSectionRmsError(QlSviInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->rmsError();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSviInterpolatedSmileSectionMaxError(QlSviInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->maxError();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlSviInterpolatedSmileSectionEndCriteria(QlSviInterpolatedSmileSection* o, char **e) {-  try {return (int)(*arg(o))->endCriteria();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-// NoArbSabrInterpolatedSmileSection's isAlphaFixed..isRhoFixed all default to false, same as-// SabrInterpolatedSmileSection's, and it has no shift parameter (unlike SabrInterpolatedSmile--// Section) -- 8 trailing-defaulted params, still under the 10-param threshold, so this widens in-// place like qlSviInterpolatedSmileSection. Same std::variant/Handle<Quote> rule (Quote overload-// only), dedicated-leaf-over-dynamic_cast reasoning, and eager-calibration-at-construction-// convention (atmLevel() forces the fit now) as qlSabrInterpolatedSmileSection/-// qlSviInterpolatedSmileSection above.-QlNoArbSabrInterpolatedSmileSection* qlNoArbSabrInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, char **e) {-  try {-    ext::shared_ptr<NoArbSabrInterpolatedSmileSection> section(new NoArbSabrInterpolatedSmileSection(-        Date(optionDate), *arg(forward), std::vector<Real>(strikes, strikes + strikesLen), hasFloatingStrikes,-        *arg(atmVolatility), qlHandleVector(vols, volsLen), alpha, beta, nu, rho,-        isAlphaFixed, isBetaFixed, isNuFixed, isRhoFixed, vegaWeighted,-        endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(),-        method ? *arg(method) : shared_ptr<OptimizationMethod>(), *arg(dc)));-    section->atmLevel(); // force calibration now, surfacing failures at construction-    return ret(new QlNoArbSabrInterpolatedSmileSection(alloc(section)));-  } catch (std::exception& er) {return handleException<QlNoArbSabrInterpolatedSmileSection*>(e, er);}}-void qlFreeNoArbSabrInterpolatedSmileSection(QlNoArbSabrInterpolatedSmileSection* p) {del(p);}-// Fresh shared_ptr construction (implicit Derived->Base conversion), not a cast -- same pattern-// as qlSabrInterpolatedSmileSectionAsSmileSection.-QlSmileSection* qlNoArbSabrInterpolatedSmileSectionAsSmileSection(QlNoArbSabrInterpolatedSmileSection* o, char **e) {-  try {return ret(new QlSmileSection(*arg(o)));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-double qlNoArbSabrInterpolatedSmileSectionAlpha(QlNoArbSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->alpha();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlNoArbSabrInterpolatedSmileSectionBeta(QlNoArbSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->beta();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlNoArbSabrInterpolatedSmileSectionNu(QlNoArbSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->nu();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlNoArbSabrInterpolatedSmileSectionRho(QlNoArbSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->rho();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlNoArbSabrInterpolatedSmileSectionRmsError(QlNoArbSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->rmsError();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlNoArbSabrInterpolatedSmileSectionMaxError(QlNoArbSabrInterpolatedSmileSection* o, char **e) {-  try {return (*arg(o))->maxError();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlNoArbSabrInterpolatedSmileSectionEndCriteria(QlNoArbSabrInterpolatedSmileSection* o, char **e) {-  try {return (int)(*arg(o))->endCriteria();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlSwaptionVolatilityStructureSwapLength1(QlSwaptionVolatilityStructure* o, int start, int end, char **e) {-  try {return (*arg(o))->swapLength(Date(start), Date(end));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureSwapLength(QlSwaptionVolatilityStructure* o, int n, int u, char **e) {-  try {return (*arg(o))->swapLength(Period(n, (TimeUnit)u));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureVolatility1(QlSwaptionVolatilityStructure* o, int optionDate, int n, int u, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(Date(optionDate), Period(n, (TimeUnit)u), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureVolatility2(QlSwaptionVolatilityStructure* o, double optionTime, int n, int u, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(optionTime, Period(n, (TimeUnit)u), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureVolatility3(QlSwaptionVolatilityStructure* o, int n, int u, double swapLength, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(Period(n, (TimeUnit)u), swapLength, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureVolatility4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(Date(optionDate), swapLength, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureVolatility5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(optionTime, swapLength, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSwaptionVolatilityStructureVolatility(QlSwaptionVolatilityStructure* o, int n, int u, int n1, int u1, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(Period(n, (TimeUnit)u), Period(n1, (TimeUnit)u1), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlCapFloorTermVolCurve* qlCapFloorTermVolCurve1(int settlementDate, Calendar* calendar, int bdc, unsigned l, int *n, unsigned, int *u, unsigned volsLen, QlQuote** vols, DayCounter* dc, char **e) {-  try {return ret(new QlCapFloorTermVolCurve(alloc(new CapFloorTermVolCurve(Date(settlementDate), *arg(calendar), (BusinessDayConvention)bdc,-              qlPeriodVector(n, u, l), qlHandleVector(vols, volsLen), *arg(dc)))));-  } catch (std::exception& er) {return handleException<QlCapFloorTermVolCurve*>(e, er);}}-QlCapFloorTermVolCurve* qlCapFloorTermVolCurve(unsigned settlementDays, Calendar* calendar, int bdc, unsigned l, int *n, unsigned, int *u, unsigned volsLen, QlQuote** vols, DayCounter* dc, char **e) {-  try {return ret(new QlCapFloorTermVolCurve(alloc(new CapFloorTermVolCurve(settlementDays, *arg(calendar), (BusinessDayConvention)bdc,-              qlPeriodVector(n, u, l), qlHandleVector(vols, volsLen), *arg(dc)))));-  } catch (std::exception& er) {return handleException<QlCapFloorTermVolCurve*>(e, er);}}-QlCapFloorTermVolatilityStructure* qlConstantCapFloorTermVolatility1(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, char **e) {-  try {return ret(new QlCapFloorTermVolatilityStructure(alloc(new ConstantCapFloorTermVolatility(Date(referenceDate), *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), *arg(dc)))));-  } catch (std::exception& er) {return handleException<QlCapFloorTermVolatilityStructure*>(e, er);}}-QlCapFloorTermVolatilityStructure* qlConstantCapFloorTermVolatility(unsigned settlementDays, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, char **e) {-  try {return ret(new QlCapFloorTermVolatilityStructure(alloc(new ConstantCapFloorTermVolatility(settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), *arg(dc)))));-  } catch (std::exception& er) {return handleException<QlCapFloorTermVolatilityStructure*>(e, er);}}-double qlCapFloorTermVolatilityStructureVolatilityForPeriod(QlCapFloorTermVolatilityStructure* o, int n, int u, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(Period(n, (TimeUnit)u), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCapFloorTermVolatilityStructureVolatilityForDate(QlCapFloorTermVolatilityStructure* o, int date, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(Date(date), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCapFloorTermVolatilityStructureVolatilityForTime(QlCapFloorTermVolatilityStructure* o, double t, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(t, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlSwaptionVolatilityStructure* qlSpreadedSwaptionVolatility(QlSwaptionVolatilityStructure* x0, QlQuote* spread, char **e) {-  try {return ret(new QlSwaptionVolatilityStructure(shared_ptr<SwaptionVolatilityStructure>(alloc(new SpreadedSwaptionVolatility(*arg(x0), *arg(spread))))));-  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityStructure*>(e, er);}}-QlOptionletVolatilityStructure* qlSpreadedOptionletVolatility(QlOptionletVolatilityStructure* x0, QlQuote* spread, char **e) {-  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new SpreadedOptionletVolatility(*arg(x0), *arg(spread))))));-  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure*>(e, er);}}--void qlFreeCapFloorTermVolatilityStructure(QlCapFloorTermVolatilityStructure *o) {del(o);}-QlVolatilityTermStructure* qlCapFloorTermVolatilityStructureAsVolatilityTermStructure(QlCapFloorTermVolatilityStructure *o) {return ret(new QlVolatilityTermStructure(*arg(o)));}-void qlFreeCapFloorTermVolCurve(QlCapFloorTermVolCurve *o) {del(o);}-QlCapFloorTermVolatilityStructure* qlCapFloorTermVolCurveAsCapFloorTermVolatilityStructure(QlCapFloorTermVolCurve *o) {return ret(new QlCapFloorTermVolatilityStructure(*arg(o)));}-void qlCapFloorTermVolCurveOptionDates(QlCapFloorTermVolCurve *o, unsigned *count, int **days, char **e) {-  OutArrayResult<int> result(count, days);-  try {-    const std::vector<Date> &dates = (*arg(o))->optionDates();-    int *out = result.allocate((unsigned)dates.size());-    for (size_t i = 0; i < dates.size(); ++i) out[i] = dates[i].serialNumber();-    result.commit();-  } catch (const std::exception& er) {*e = tracedup(er.what());}-}-void qlCapFloorTermVolCurveOptionTimes(QlCapFloorTermVolCurve *o, unsigned *count, double **times, char **e) {-  OutArrayResult<double> result(count, times);-  try {-    const std::vector<Time> &t = (*arg(o))->optionTimes();-    double *out = result.allocate((unsigned)t.size());-    for (size_t i = 0; i < t.size(); ++i) out[i] = t[i];-    result.commit();-  } catch (const std::exception& er) {*e = tracedup(er.what());}-}--void qlFreeCapFloorTermVolSurface(QlCapFloorTermVolSurface *o) {del(o);}-QlCapFloorTermVolatilityStructure* qlCapFloorTermVolSurfaceAsCapFloorTermVolatilityStructure(QlCapFloorTermVolSurface *o) {return ret(new QlCapFloorTermVolatilityStructure(*arg(o)));}-void qlCapFloorTermVolSurfaceOptionDates(QlCapFloorTermVolSurface *o, unsigned *count, int **days, char **e) {-  OutArrayResult<int> result(count, days);-  try {-    const std::vector<Date> &dates = (*arg(o))->optionDates();-    int *out = result.allocate((unsigned)dates.size());-    for (size_t i = 0; i < dates.size(); ++i) out[i] = dates[i].serialNumber();-    result.commit();-  } catch (const std::exception& er) {*e = tracedup(er.what());}-}-void qlCapFloorTermVolSurfaceOptionTimes(QlCapFloorTermVolSurface *o, unsigned *count, double **times, char **e) {-  OutArrayResult<double> result(count, times);-  try {-    const std::vector<Time> &t = (*arg(o))->optionTimes();-    double *out = result.allocate((unsigned)t.size());-    for (size_t i = 0; i < t.size(); ++i) out[i] = t[i];-    result.commit();-  } catch (const std::exception& er) {*e = tracedup(er.what());}-}-void qlFreeLocalVolTermStructure(QlLocalVolTermStructure *o) {del(o);}-QlVolatilityTermStructure* qlLocalVolTermStructureAsVolatilityTermStructure(QlLocalVolTermStructure *o) {return ret(new QlVolatilityTermStructure(*arg(o)));}-double qlLocalVolTermStructureLocalVol(QlLocalVolTermStructure* o, int d, double underlyingLevel, int extrapolate, char **e) {-  try {return (*arg(o))->localVol(Date(d), underlyingLevel, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeBlackVarianceCurve(QlBlackVarianceCurve *o) {del(o);}-QlBlackVolTermStructure* qlBlackVarianceCurveAsBlackVolTermStructure(QlBlackVarianceCurve *o) {return ret(new QlBlackVolTermStructure(*arg(o)));}-QlLocalVolTermStructure* qlLocalConstantVol1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, char **e) {-  try {return ret(new QlLocalVolTermStructure(alloc(new LocalConstantVol(settlementDays, *arg(x1), *arg(volatility), *arg(dayCounter)))));-  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}-QlLocalVolTermStructure* qlLocalConstantVol(int referenceDate, QlQuote* volatility, DayCounter* dayCounter, char **e) {-  try {return ret(new QlLocalVolTermStructure(alloc(new LocalConstantVol(Date(referenceDate), *arg(volatility), *arg(dayCounter)))));-  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}-QlLocalVolTermStructure* qlLocalVolCurve(QlBlackVarianceCurve* curve, char **e) {-  try {return ret(new QlLocalVolTermStructure(alloc(new LocalVolCurve(Handle<BlackVarianceCurve>(*arg(curve))))));-  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}-QlLocalVolTermStructure* qlLocalVolSurface(QlBlackVolTermStructure* blackTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* dividendTS, QlQuote* underlying, char **e) {-  try {return ret(new QlLocalVolTermStructure(alloc(new LocalVolSurface(*arg(blackTS), *arg(riskFreeTS), *arg(dividendTS), *arg(underlying)))));-  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}-QlLocalVolTermStructure* qlNoExceptLocalVolSurface(QlBlackVolTermStructure* blackTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* dividendTS, QlQuote* underlying, double illegalLocalVolOverwrite, char **e) {-  try {return ret(new QlLocalVolTermStructure(alloc(new NoExceptLocalVolSurface(*arg(blackTS), *arg(riskFreeTS), *arg(dividendTS), *arg(underlying), illegalLocalVolOverwrite))));-  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}-QlLocalVolTermStructure* qlFixedLocalVolSurface(int referenceDate, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned matrixRows, unsigned matrixCols, double* matrixData, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, char **e) {-  try {return ret(new QlLocalVolTermStructure(alloc(new FixedLocalVolSurface(Date(referenceDate), qlDateVector(dates, datesLen),-      std::vector<Real>(strikes, strikes+strikesLen), ext::make_shared<Matrix>(qlMatrix(matrixData, matrixRows, matrixCols)),-      *arg(dayCounter), (FixedLocalVolSurface::Extrapolation)lowerExtrapolation, (FixedLocalVolSurface::Extrapolation)upperExtrapolation))));-  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}-void qlFreeGridModelLocalVolSurface(QlGridModelLocalVolSurface *o) {del(o);}-QlLocalVolTermStructure* qlGridModelLocalVolSurfaceAsLocalVolTermStructure(QlGridModelLocalVolSurface *o) {return ret(new QlLocalVolTermStructure(*arg(o)));}-QlCalibratedModel* qlGridModelLocalVolSurfaceAsCalibratedModel(QlGridModelLocalVolSurface *o, char **e) {-  try {return ret(new QlCalibratedModel(*arg(o)));-  } catch (std::exception& er) {return handleException<QlCalibratedModel*>(e, er);}}-QlGridModelLocalVolSurface* qlGridModelLocalVolSurface(int referenceDate, unsigned datesLen, int* dates, unsigned rows, unsigned* strikeLengths, double* strikes, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, char **e) {-  try {-    std::vector<ext::shared_ptr<std::vector<Real>>> strikeRows;-    strikeRows.reserve(rows);-    size_t offset = 0;-    for (size_t i = 0; i < rows; ++i) {-      strikeRows.push_back(ext::make_shared<std::vector<Real>>(strikes + offset, strikes + offset + strikeLengths[i]));-      offset += strikeLengths[i];-    }-    return ret(new QlGridModelLocalVolSurface(alloc(new GridModelLocalVolSurface(-        Date(referenceDate), qlDateVector(dates, datesLen), strikeRows, *arg(dayCounter),-        (FixedLocalVolSurface::Extrapolation)lowerExtrapolation,-        (FixedLocalVolSurface::Extrapolation)upperExtrapolation))));-  } catch (std::exception& er) {return handleException<QlGridModelLocalVolSurface*>(e, er);}}-QlBlackVolTermStructure* qlHestonBlackVolSurface(QlHestonModel* model, int cpxLogFormula, unsigned integrationOrder, char **e) {-  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new HestonBlackVolSurface(-      Handle<HestonModel>(*arg(model)), (AnalyticHestonEngine::ComplexLogFormula)cpxLogFormula,-      AnalyticHestonEngine::Integration::gaussLaguerre(integrationOrder))))));-  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}-void qlFreeAndreasenHugeVolatilityInterpl(QlAndreasenHugeVolatilityInterpl *o) {del(o);}-QlAndreasenHugeVolatilityInterpl* qlAndreasenHugeVolatilityInterpl(unsigned calibrationLen, QlVanillaOption** options, QlQuote** quotes, QlQuote* spot, QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, int interpolationType, int calibrationType, unsigned nGridPoints, double minStrike, double maxStrike, QlOptimizationMethod* optimizationMethod, QlEndCriteria* endCriteria, char **e) {-  try {-    AndreasenHugeVolatilityInterpl::CalibrationSet calibrationSet;-    calibrationSet.reserve(calibrationLen);-    for (size_t i = 0; i < calibrationLen; ++i)-      calibrationSet.emplace_back(*arg(options[i]), handlePtr(arg(quotes[i])));-    return ret(new QlAndreasenHugeVolatilityInterpl(alloc(new AndreasenHugeVolatilityInterpl(-        calibrationSet, *arg(spot), *arg(riskFreeRate), *arg(dividendYield),-        (AndreasenHugeVolatilityInterpl::InterpolationType)interpolationType,-        (AndreasenHugeVolatilityInterpl::CalibrationType)calibrationType, nGridPoints,-        minStrike, maxStrike, *arg(optimizationMethod), **arg(endCriteria)))));-  } catch (std::exception& er) {return handleException<QlAndreasenHugeVolatilityInterpl*>(e, er);}}-void qlAndreasenHugeVolatilityInterplCalibrationError(QlAndreasenHugeVolatilityInterpl* o, unsigned* count, double** values, char **e) {-  *count = 0; *values = nullptr;-  try {-    const auto errors = (*arg(o))->calibrationError();-    auto out = qlAllocateDoubles(3); out[0] = std::get<0>(errors); out[1] = std::get<1>(errors); out[2] = std::get<2>(errors);-    *count = 3; *values = out;-  } catch (std::exception& er) {(void)handleException<void *>(e, er);}}-double qlAndreasenHugeVolatilityInterplFwd(QlAndreasenHugeVolatilityInterpl* o, double t, char **e) {-  try {return (*arg(o))->fwd(t);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAndreasenHugeVolatilityInterplOptionPrice(QlAndreasenHugeVolatilityInterpl* o, double t, double strike, int optionType, char **e) {-  try {return (*arg(o))->optionPrice(t, strike, (Option::Type)optionType);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlAndreasenHugeVolatilityInterplLocalVol(QlAndreasenHugeVolatilityInterpl* o, double t, double strike, char **e) {-  try {return (*arg(o))->localVol(t, strike);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlBlackVolTermStructure* qlAndreasenHugeVolatilityAdapter(QlAndreasenHugeVolatilityInterpl* o, double eps, char **e) {-  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new AndreasenHugeVolatilityAdapter(*arg(o), eps)))));-  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}-QlLocalVolTermStructure* qlAndreasenHugeLocalVolAdapter(QlAndreasenHugeVolatilityInterpl* o, char **e) {-  try {return ret(new QlLocalVolTermStructure(alloc(new AndreasenHugeLocalVolAdapter(*arg(o)))));-  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}-QlBlackVolTermStructure* qlImpliedVolTermStructure(QlBlackVolTermStructure* origTS, int referenceDate, char **e) {-  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new ImpliedVolTermStructure(*arg(origTS), Date(referenceDate))))));-  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}--QlBlackVarianceCurve* qlBlackVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned blackVolCurveLen, double* blackVolCurve, DayCounter* dayCounter, int forceMonotoneVariance, int interpolator, int approximator, int approximatorArg, char **e) {-  try {-    auto c = allocShared(new BlackVarianceCurve(Date(referenceDate), qlDateVector(dates, datesLen), std::vector<double>(blackVolCurve, blackVolCurve+blackVolCurveLen), *arg(dayCounter), forceMonotoneVariance));-    if (interpolator != Null<Integer>())-      qlSetBlackVarianceCurveInterpolationAux(c.get(), interpolator, approximator, approximatorArg);-    return ret(new QlBlackVarianceCurve(c));-  } catch (std::exception& er) {-    return handleException<QlBlackVarianceCurve*>(e, er);-  }-}--QlBlackVolTermStructure* qlBlackVarianceSurface(int referenceDate, Calendar* cal, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned blackVolMatrixRows, unsigned blackVolMatrixCols, double* blackVolMatrix, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, int interpolator, char **e) {-  try {-    auto s = allocShared(new BlackVarianceSurface(Date(referenceDate), *arg(cal), qlDateVector(dates, datesLen), std::vector<double>(strikes, strikes+strikesLen), qlMatrix(blackVolMatrix, blackVolMatrixRows, blackVolMatrixCols), *arg(dayCounter), (BlackVarianceSurface::Extrapolation)lowerExtrapolation, (BlackVarianceSurface::Extrapolation)upperExtrapolation));-    qlSetBlackVarianceSurfaceInterpolationAux(s.get(), interpolator);-    return ret(new QlBlackVolTermStructure(s));-  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}-QlBlackVolTermStructure* qlPiecewiseBlackVarianceSurface(int referenceDate, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned blackVolsRows, unsigned blackVolsCols, double* blackVols, DayCounter* dayCounter, char **e) {-  try {-    return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(-        PiecewiseBlackVarianceSurface::makeFromGrid(Date(referenceDate), qlDateVector(dates, datesLen),-            std::vector<Real>(strikes, strikes+strikesLen), qlMatrix(blackVols, blackVolsRows, blackVolsCols), *arg(dayCounter)))));-  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}-void qlFreeBlackVolatilitySurfaceDelta(QlBlackVolatilitySurfaceDelta *o) {del(o);}-QlBlackVolTermStructure* qlBlackVolatilitySurfaceDeltaAsBlackVolTermStructure(QlBlackVolatilitySurfaceDelta *o) {return ret(new QlBlackVolTermStructure(*arg(o)));}-QlBlackVolatilitySurfaceDelta* qlBlackVolatilitySurfaceDelta(int referenceDate, unsigned datesLen, int* dates,-    unsigned putDeltasLen, double* putDeltas, unsigned callDeltasLen, double* callDeltas,-    int hasAtm, unsigned blackVolMatrixRows, unsigned blackVolMatrixCols, double* blackVolMatrix,-    DayCounter* dayCounter, Calendar* cal, QlQuote* spot,-    QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS,-    int deltaType, int atmType, int atmDeltaType,-    int interpolationMethod, int flatStrikeExtrapolation, int timeExtrapolationType,-    int switchTenorLen, int switchTenorUnit,-    int longTermDeltaType, int longTermAtmType, int longTermAtmDeltaType,-    char **e) {-  try {-    return ret(new QlBlackVolatilitySurfaceDelta(alloc(new BlackVolatilitySurfaceDelta(-        Date(referenceDate), qlDateVector(dates, datesLen),-        std::vector<Real>(putDeltas, putDeltas+putDeltasLen), std::vector<Real>(callDeltas, callDeltas+callDeltasLen),-        hasAtm, qlMatrix(blackVolMatrix, blackVolMatrixRows, blackVolMatrixCols),-        *arg(dayCounter), *arg(cal), *arg(spot), *arg(domesticTS), *arg(foreignTS),-        (DeltaVolQuote::DeltaType)deltaType, (DeltaVolQuote::AtmType)atmType,-        atmDeltaType < 0 ? ext::nullopt : ext::optional<DeltaVolQuote::DeltaType>((DeltaVolQuote::DeltaType)atmDeltaType),-        (BlackVolatilitySurfaceDelta::SmileInterpolationMethod)interpolationMethod,-        flatStrikeExtrapolation, (BlackVolTimeExtrapolation::Type)timeExtrapolationType,-        Period(switchTenorLen, (TimeUnit)switchTenorUnit),-        (DeltaVolQuote::DeltaType)longTermDeltaType, (DeltaVolQuote::AtmType)longTermAtmType,-        longTermAtmDeltaType < 0 ? ext::nullopt : ext::optional<DeltaVolQuote::DeltaType>((DeltaVolQuote::DeltaType)longTermAtmDeltaType)))));-  } catch (std::exception& er) {return handleException<QlBlackVolatilitySurfaceDelta*>(e, er);}}-QlSmileSection* qlBlackVolatilitySurfaceDeltaSmile1(QlBlackVolatilitySurfaceDelta* o, double t, char **e) {-  try {return ret(new QlSmileSection((*arg(o))->blackVolSmile(t)));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlBlackVolatilitySurfaceDeltaSmile(QlBlackVolatilitySurfaceDelta* o, int d, char **e) {-  try {return ret(new QlSmileSection((*arg(o))->blackVolSmile(Date(d))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlCapFloorTermVolSurface* qlCapFloorTermVolSurface(unsigned settlementDays, Calendar* calendar, int bdc, unsigned l, int *n, unsigned, int *u, unsigned strikesLen, double* strikes, unsigned volatilitiesRows, unsigned volatilitiesCols, QlQuote** volatilities, DayCounter* dc, char **e) {-  try {return ret(new QlCapFloorTermVolSurface(alloc(new CapFloorTermVolSurface(settlementDays, *arg(calendar), (BusinessDayConvention)bdc,-            qlPeriodVector(n, u, l), std::vector<double>(strikes, strikes+strikesLen), qlHandleMatrix(volatilities, volatilitiesRows, volatilitiesCols), *arg(dc)))));-  } catch (std::exception& er) {return handleException<QlCapFloorTermVolSurface*>(e, er);}}-QlCapFloorTermVolSurface* qlCapFloorTermVolSurface1(int settlementDate, Calendar* calendar, int bdc, unsigned l, int *n, unsigned, int *u, unsigned strikesLen, double* strikes, unsigned volatilitiesRows, unsigned volatilitiesCols, QlQuote** volatilities, DayCounter* dc, char **e) {-  try {return ret(new QlCapFloorTermVolSurface(alloc(new CapFloorTermVolSurface(Date(settlementDate), *arg(calendar), (BusinessDayConvention)bdc,-            qlPeriodVector(n, u, l), std::vector<double>(strikes, strikes+strikesLen), qlHandleMatrix(volatilities, volatilitiesRows, volatilitiesCols), *arg(dc)))));-  } catch (std::exception& er) {return handleException<QlCapFloorTermVolSurface*>(e, er);}}-QlSwaptionVolatilityMatrix* qlSwaptionVolatilityMatrix(int referenceDate, Calendar* calendar, int bdc,-    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,-    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,-    unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dc, int flatExtrapolation, int type,-    unsigned shiftRows, unsigned shiftCols, double* shifts, char **e) {-  try {return ret(new QlSwaptionVolatilityMatrix(alloc(new SwaptionVolatilityMatrix(-            Date(referenceDate), *arg(calendar), (BusinessDayConvention)bdc,-            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),-            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),-            qlHandleMatrix(vols, volRows, volCols), *arg(dc), (bool)flatExtrapolation, (VolatilityType)type,-            qlRealMatrix(shifts, shiftRows, shiftCols)))));-  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityMatrix*>(e, er);}}-QlSwaptionVolatilityMatrix* qlSwaptionVolatilityMatrix1(Calendar* calendar, int bdc,-    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,-    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,-    unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dc, int flatExtrapolation, int type,-    unsigned shiftRows, unsigned shiftCols, double* shifts, char **e) {-  try {return ret(new QlSwaptionVolatilityMatrix(alloc(new SwaptionVolatilityMatrix(-            *arg(calendar), (BusinessDayConvention)bdc,-            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),-            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),-            qlHandleMatrix(vols, volRows, volCols), *arg(dc), (bool)flatExtrapolation, (VolatilityType)type,-            qlRealMatrix(shifts, shiftRows, shiftCols)))));-  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityMatrix*>(e, er);}}-void qlFreeSwaptionVolatilityMatrix(QlSwaptionVolatilityMatrix *o) {del(o);}-// Fresh Handle for this newly built object -- same shape as qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure.-QlSwaptionVolatilityStructure* qlSwaptionVolatilityMatrixAsSwaptionVolatilityStructure(QlSwaptionVolatilityMatrix *o) {-  return ret(new QlSwaptionVolatilityStructure(*arg(o)));}-void qlSwaptionVolatilityMatrixLocate(QlSwaptionVolatilityMatrix *o, int optionDate, int n, int u, unsigned *i, unsigned *j, char **e) {-  OutValue<unsigned> iResult(i), jResult(j);-  try {std::pair<Size,Size> ij = (*arg(o))->locate(Date(optionDate), Period(n, (TimeUnit)u));-    iResult.set(ij.first); jResult.set(ij.second); iResult.commit(); jResult.commit();-  } catch (std::exception& er) {(void)handleException<void*>(e, er);}}--// These classes have dedicated Haskell types because they expose class-specific calculations.-// Their diagnostics take concrete pointers without runtime downcasts. Use-// qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure/-// qlInterpolatedSwaptionVolatilityCubeAsSwaptionVolatilityStructure/-// qlSwaptionVolatilityMatrixAsSwaptionVolatilityStructure (below) to pass any of them into-// anything that wants the generic parent (pricing engines, relinkable handles, etc.).-//-// endCriteria/method are nullable (NULL -> empty shared_ptr, letting SABRInterpolation's own-// internal EndCriteria/LevenbergMarquardt defaults apply at every calibrated node); when given,-// `endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>()` copies a shared reference into-// this ctor's own shared_ptr member -- safe regardless of when Haskell's own EndCriteria/-// OptimizationMethod box is collected, since QlEndCriteria/QlOptimizationMethod are themselves-// shared_ptr boxes (see qlLevenbergMarquardt/qlSimplex/qlEndCriteria in qlMisc.cpp): the-// underlying object is only freed once every shared_ptr referencing it has gone away.-//-// volSpreads and parametersGuess are both flattened over the (optionTenor x swapTenor) product as-// the OUTER index (row = j*nSwapTenors+k, j over optionTenors, k over swapTenors) -- not simply-// "one row per optionTenor" the way qlSwaptionVolatilityMatrix's grid is. volSpreadsCols is-// strikeSpreadsLen; parametersGuessCols is always 4 (SABR's alpha/beta/nu/rho).-//-// Calibration is lazy (XabrSwaptionVolatilityCube is a LazyObject): unlike-// qlSabrInterpolatedSmileSection, construction here does NOT force an eager fit, so a-// constructor call can succeed even for inputs that will later fail to calibrate -- the error-// only surfaces on the first smileSection/volatility/etc. call.-QlSabrSwaptionVolatilityCube* qlSabrSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,-    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,-    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,-    unsigned strikeSpreadsLen, double* strikeSpreads,-    unsigned volSpreadsRows, unsigned volSpreadsCols, QlQuote** volSpreads,-    QlSwapIndex* swapIndexBase, QlSwapIndex* shortSwapIndexBase,-    int vegaWeightedSmileFit,-    unsigned parametersGuessRows, unsigned parametersGuessCols, QlQuote** parametersGuess,-    int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed,-    int isAtmCalibrated,-    QlEndCriteria* endCriteria, QlOptimizationMethod* method,-    double maxErrorTolerance, double errorAccept, int useMaxError, unsigned maxGuesses,-    int backwardFlat, double cutoffStrike, char **e) {-  try {-    return ret(new QlSabrSwaptionVolatilityCube(alloc(new SabrSwaptionVolatilityCube(-            *arg(atmVolStructure),-            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),-            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),-            std::vector<Real>(strikeSpreads, strikeSpreads + strikeSpreadsLen),-            qlHandleMatrix(volSpreads, volSpreadsRows, volSpreadsCols),-            *arg(swapIndexBase), *arg(shortSwapIndexBase),-            (bool)vegaWeightedSmileFit,-            qlHandleMatrix(parametersGuess, parametersGuessRows, parametersGuessCols),-            std::vector<bool>{(bool)isAlphaFixed, (bool)isBetaFixed, (bool)isNuFixed, (bool)isRhoFixed},-            (bool)isAtmCalibrated,-            endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(), maxErrorTolerance,-            method ? *arg(method) : shared_ptr<OptimizationMethod>(),-            errorAccept, (bool)useMaxError, maxGuesses, (bool)backwardFlat, cutoffStrike))));-  } catch (std::exception& er) {return handleException<QlSabrSwaptionVolatilityCube*>(e, er);}}-void qlFreeSabrSwaptionVolatilityCube(QlSabrSwaptionVolatilityCube *o) {del(o);}-// Fresh Handle for this newly built object -- same shape as every QlXxxAsSwaptionVolatilityStructure--// style upcast that starts from a shared_ptr leaf (e.g. qlBlackVolatilitySurfaceDeltaAsBlackVolTermStructure),-// not a rewrap of an existing Handle.-QlSwaptionVolatilityStructure* qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlSabrSwaptionVolatilityCube *o) {-  return ret(new QlSwaptionVolatilityStructure(*arg(o)));}--// NoArbSabrSwaptionVolatilityCube is XabrSwaptionVolatilityCube<SwaptionVolCubeNoArbSabrModel> ---// the same class template as SabrSwaptionVolatilityCube one model policy over, with an identical-// constructor signature (both policies use the default XabrModelTraits<> nParams=4) and identical-// getters, so this is a straight copy of the SabrSwaptionVolatilityCube shims above with the type-// swapped -- no new marshalling shape. See the comment above qlSabrSwaptionVolatilityCube for the-// EndCriteria/OptimizationMethod nullability, volSpreads/parametersGuess flattening, and lazy--// calibration notes, all identical here.-QlNoArbSabrSwaptionVolatilityCube* qlNoArbSabrSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,-    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,-    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,-    unsigned strikeSpreadsLen, double* strikeSpreads,-    unsigned volSpreadsRows, unsigned volSpreadsCols, QlQuote** volSpreads,-    QlSwapIndex* swapIndexBase, QlSwapIndex* shortSwapIndexBase,-    int vegaWeightedSmileFit,-    unsigned parametersGuessRows, unsigned parametersGuessCols, QlQuote** parametersGuess,-    int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed,-    int isAtmCalibrated,-    QlEndCriteria* endCriteria, QlOptimizationMethod* method,-    double maxErrorTolerance, double errorAccept, int useMaxError, unsigned maxGuesses,-    int backwardFlat, double cutoffStrike, char **e) {-  try {-    return ret(new QlNoArbSabrSwaptionVolatilityCube(alloc(new NoArbSabrSwaptionVolatilityCube(-            *arg(atmVolStructure),-            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),-            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),-            std::vector<Real>(strikeSpreads, strikeSpreads + strikeSpreadsLen),-            qlHandleMatrix(volSpreads, volSpreadsRows, volSpreadsCols),-            *arg(swapIndexBase), *arg(shortSwapIndexBase),-            (bool)vegaWeightedSmileFit,-            qlHandleMatrix(parametersGuess, parametersGuessRows, parametersGuessCols),-            std::vector<bool>{(bool)isAlphaFixed, (bool)isBetaFixed, (bool)isNuFixed, (bool)isRhoFixed},-            (bool)isAtmCalibrated,-            endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(), maxErrorTolerance,-            method ? *arg(method) : shared_ptr<OptimizationMethod>(),-            errorAccept, (bool)useMaxError, maxGuesses, (bool)backwardFlat, cutoffStrike))));-  } catch (std::exception& er) {return handleException<QlNoArbSabrSwaptionVolatilityCube*>(e, er);}}-void qlFreeNoArbSabrSwaptionVolatilityCube(QlNoArbSabrSwaptionVolatilityCube *o) {del(o);}-QlSwaptionVolatilityStructure* qlNoArbSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlNoArbSabrSwaptionVolatilityCube *o) {-  return ret(new QlSwaptionVolatilityStructure(*arg(o)));}-void qlNoArbSabrSwaptionVolatilityCubeSparseSabrParameters(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e) {-  try {fillMatrixOut([&] {return (*arg(o))->sparseSabrParameters();}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlNoArbSabrSwaptionVolatilityCubeDenseSabrParameters(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e) {-  try {fillMatrixOut([&] {return (*arg(o))->denseSabrParameters();}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlNoArbSabrSwaptionVolatilityCubeMarketVolCube(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e) {-  try {fillMatrixOut([&] {return (*arg(o))->marketVolCube();}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlNoArbSabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e) {-  try {fillMatrixOut([&] {return (*arg(o))->volCubeAtmCalibrated();}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-double qlNoArbSabrSwaptionVolatilityCubeAtmStrike1(QlNoArbSabrSwaptionVolatilityCube* o, int optionDate, int n, int u, char **e) {-  try {return (*arg(o))->atmStrike(Date(optionDate), Period(n, (TimeUnit)u));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlNoArbSabrSwaptionVolatilityCubeAtmStrike(QlNoArbSabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, char **e) {-  try {return (*arg(o))->atmStrike(Period(optionN, (TimeUnit)optionU), Period(n, (TimeUnit)u));-  } catch (std::exception& er) {return handleException<double>(e, er);}}--// No EndCriteria/OptimizationMethod hazard here: InterpolatedSwaptionVolatilityCube only-// interpolates the given volSpreads, it never calibrates anything.-QlInterpolatedSwaptionVolatilityCube* qlInterpolatedSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,-    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,-    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,-    unsigned strikeSpreadsLen, double* strikeSpreads,-    unsigned volSpreadsRows, unsigned volSpreadsCols, QlQuote** volSpreads,-    QlSwapIndex* swapIndexBase, QlSwapIndex* shortSwapIndexBase,-    int vegaWeightedSmileFit, char **e) {-  try {-    return ret(new QlInterpolatedSwaptionVolatilityCube(alloc(new InterpolatedSwaptionVolatilityCube(-            *arg(atmVolStructure),-            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),-            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),-            std::vector<Real>(strikeSpreads, strikeSpreads + strikeSpreadsLen),-            qlHandleMatrix(volSpreads, volSpreadsRows, volSpreadsCols),-            *arg(swapIndexBase), *arg(shortSwapIndexBase),-            (bool)vegaWeightedSmileFit))));-  } catch (std::exception& er) {return handleException<QlInterpolatedSwaptionVolatilityCube*>(e, er);}}-void qlFreeInterpolatedSwaptionVolatilityCube(QlInterpolatedSwaptionVolatilityCube *o) {del(o);}-QlSwaptionVolatilityStructure* qlInterpolatedSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlInterpolatedSwaptionVolatilityCube *o) {-  return ret(new QlSwaptionVolatilityStructure(*arg(o)));}-// volSpreads(i) indexes by strike -- one Matrix (optionTenors x swapTenors) per strike spread.-void qlInterpolatedSwaptionVolatilityCubeVolSpreads(QlInterpolatedSwaptionVolatilityCube* o, unsigned i, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e) {-  try {fillMatrixOut([&] {return (*arg(o))->volSpreads(i);}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}--// Matrix-out diagnostics, direct on the concrete type -- no downcast needed. Composes the-// established 1D out-array idiom (qlAllocateDoubles + unsigned*len/double**vs, see-// qlGsrVolatility/qlCalibratedModelParams) with row/col out-params -- no prior shim in this-// codebase returns a Matrix outward, every existing Matrix use (qlMatrix/qlHandleMatrix/-// qlRealMatrix) crosses the boundary inward only.-void qlSabrSwaptionVolatilityCubeSparseSabrParameters(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e) {-  try {fillMatrixOut([&] {return (*arg(o))->sparseSabrParameters();}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlSabrSwaptionVolatilityCubeDenseSabrParameters(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e) {-  try {fillMatrixOut([&] {return (*arg(o))->denseSabrParameters();}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlSabrSwaptionVolatilityCubeMarketVolCube(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e) {-  try {fillMatrixOut([&] {return (*arg(o))->marketVolCube();}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}-void qlSabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e) {-  try {fillMatrixOut([&] {return (*arg(o))->volCubeAtmCalibrated();}, rows, cols, len, vs);-  } catch (std::exception& er) {handleException<double*>(e, er);}}--// atmStrike is defined on the abstract SwaptionVolatilityCube base (both concrete subtypes-// inherit it); bound once per concrete leaf rather than via a shared abstract-base type, since-// neither subtype otherwise needs one and CLAUDE.md's "no dedicated type for a class with no-// calcs of its own" argues against adding a node just for this.-double qlSabrSwaptionVolatilityCubeAtmStrike1(QlSabrSwaptionVolatilityCube* o, int optionDate, int n, int u, char **e) {-  try {return (*arg(o))->atmStrike(Date(optionDate), Period(n, (TimeUnit)u));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlSabrSwaptionVolatilityCubeAtmStrike(QlSabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, char **e) {-  try {return (*arg(o))->atmStrike(Period(optionN, (TimeUnit)optionU), Period(n, (TimeUnit)u));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlInterpolatedSwaptionVolatilityCubeAtmStrike1(QlInterpolatedSwaptionVolatilityCube* o, int optionDate, int n, int u, char **e) {-  try {return (*arg(o))->atmStrike(Date(optionDate), Period(n, (TimeUnit)u));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlInterpolatedSwaptionVolatilityCubeAtmStrike(QlInterpolatedSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, char **e) {-  try {return (*arg(o))->atmStrike(Period(optionN, (TimeUnit)optionU), Period(n, (TimeUnit)u));-  } catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeCallableBondVolatilityStructure(QlCallableBondVolatilityStructure *o) {del(o);}-QlTermStructure* qlCallableBondVolatilityStructureAsTermStructure(QlCallableBondVolatilityStructure *o) {return ret(new QlTermStructure(*arg(o)));}-void qlFreeDefaultProbabilityTermStructure(QlDefaultProbabilityTermStructure *o) {del(o);}-QlTermStructure* qlDefaultProbabilityTermStructureAsTermStructure(QlDefaultProbabilityTermStructure *o) {return ret(new QlTermStructure(*arg(o)));}--QlCallableBondVolatilityStructure* qlCallableBondConstantVolatility1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, char **e) {-  try {return ret(new QlCallableBondVolatilityStructure(alloc(new CallableBondConstantVolatility(settlementDays, *arg(x1), *arg(volatility), *arg(dayCounter)))));-  } catch (std::exception& er) {return handleException<QlCallableBondVolatilityStructure*>(e, er);}}-QlCallableBondVolatilityStructure* qlCallableBondConstantVolatility(int referenceDate, QlQuote* volatility, DayCounter* dayCounter, char **e) {-  try {return ret(new QlCallableBondVolatilityStructure(alloc(new CallableBondConstantVolatility(Date(referenceDate), *arg(volatility), *arg(dayCounter)))));-  } catch (std::exception& er) {return handleException<QlCallableBondVolatilityStructure*>(e, er);}}-double qlCallableBondVolatilityStructureVolatilityForTime(QlCallableBondVolatilityStructure* o, double optionTime, double bondLength, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(optionTime, bondLength, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCallableBondVolatilityStructureVolatilityForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(Date(optionDate), Period(bondTenorLen, (TimeUnit)bondTenorUnit), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCallableBondVolatilityStructureVolatilityForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->volatility(Period(optionTenorLen, (TimeUnit)optionTenorUnit), Period(bondTenorLen, (TimeUnit)bondTenorUnit), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCallableBondVolatilityStructureBlackVarianceForTime(QlCallableBondVolatilityStructure* o, double optionTime, double bondLength, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(optionTime, bondLength, strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCallableBondVolatilityStructureBlackVarianceForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(Date(optionDate), Period(bondTenorLen, (TimeUnit)bondTenorUnit), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCallableBondVolatilityStructureBlackVarianceForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, char **e) {-  try {return (*arg(o))->blackVariance(Period(optionTenorLen, (TimeUnit)optionTenorUnit), Period(bondTenorLen, (TimeUnit)bondTenorUnit), strike, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlSmileSection* qlCallableBondVolatilityStructureSmileSectionForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, char **e) {-  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Date(optionDate), Period(bondTenorLen, (TimeUnit)bondTenorUnit)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-QlSmileSection* qlCallableBondVolatilityStructureSmileSectionForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, char **e) {-  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Period(optionTenorLen, (TimeUnit)optionTenorUnit), Period(bondTenorLen, (TimeUnit)bondTenorUnit)))));-  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}-int qlCallableBondVolatilityStructureMaxBondTenor(QlCallableBondVolatilityStructure* o, int *u, char **e) {-  try {const Period &p = (*arg(o))->maxBondTenor(); *u = p.units(); return p.length();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-double qlCallableBondVolatilityStructureMinStrike(QlCallableBondVolatilityStructure* o, char **e) {-  try {return (*arg(o))->minStrike();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlCallableBondVolatilityStructureMaxStrike(QlCallableBondVolatilityStructure* o, char **e) {-  try {return (*arg(o))->maxStrike();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlDefaultProbabilityTermStructure* qlFactorSpreadedHazardRateCurve(QlDefaultProbabilityTermStructure* originalCurve, QlQuote* spread, char **e) {-  try {return ret(new QlDefaultProbabilityTermStructure(alloc(new FactorSpreadedHazardRateCurve(Handle<DefaultProbabilityTermStructure>(*arg(originalCurve)), *arg(spread)))));-  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}-QlDefaultProbabilityTermStructure* qlFlatHazardRate1(unsigned settlementDays, Calendar* calendar, QlQuote* hazardRate, DayCounter* x3, char **e) {-  try {return ret(new QlDefaultProbabilityTermStructure(alloc(new FlatHazardRate(settlementDays, *arg(calendar), *arg(hazardRate), (*arg(x3))))));-  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}-QlDefaultProbabilityTermStructure* qlFlatHazardRate(int referenceDate, QlQuote* hazardRate, DayCounter* x2, char **e) {-  try {return ret(new QlDefaultProbabilityTermStructure(alloc(new FlatHazardRate(Date(referenceDate), *arg(hazardRate), (*arg(x2))))));-  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}-QlDefaultProbabilityTermStructure* qlSpreadedHazardRateCurve(QlDefaultProbabilityTermStructure* originalCurve, QlQuote* spread, char **e) {-  try {return ret(new QlDefaultProbabilityTermStructure(alloc(new SpreadedHazardRateCurve(Handle<DefaultProbabilityTermStructure>(*arg(originalCurve)), *arg(spread)))));-  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}-QlDefaultProbabilityTermStructure* qlInterpolatedDefaultDensityCurve(unsigned datesLen, int* dates, unsigned densitiesLen, double* densities, DayCounter* dayCounter, Calendar* calendar, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, char **e) {-  try {return ret(new QlDefaultProbabilityTermStructure(alloc(qlInterpolatedDefaultDensityCurveAux(qlDateVector(dates, datesLen), std::vector<double>(densities, densities+densitiesLen), *arg(dayCounter), *arg(calendar), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), interpolator, approximator, approximatorArg))));-  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}-QlDefaultProbabilityTermStructure* qlInterpolatedHazardRateCurve(unsigned datesLen, int* dates, unsigned hazardRatesLen, double* hazardRates, DayCounter* dayCounter, Calendar* cal, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlInterpolatedHazardRateCurveAux(qlDateVector(dates, datesLen), std::vector<double>(hazardRates, hazardRates+hazardRatesLen), *arg(dayCounter), *arg(cal), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), interpolator, approximator, approximatorArg));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlDefaultProbabilityTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}-QlDefaultProbabilityTermStructure* qlInterpolatedSurvivalProbabilityCurve(unsigned datesLen, int* dates, unsigned probabilitiesLen, double* probabilities, DayCounter* dayCounter, Calendar* calendar, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, char **e) {-  try {return ret(new QlDefaultProbabilityTermStructure(alloc(qlInterpolatedSurvivalProbabilityCurveAux(qlDateVector(dates, datesLen), std::vector<double>(probabilities, probabilities+probabilitiesLen), *arg(dayCounter), *arg(calendar), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), interpolator, approximator, approximatorArg))));-  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}--void qlFreeDefaultProbabilityHelper(QlDefaultProbabilityHelper *o) {del(o);}-double qlDefaultProbabilityHelperImpliedQuote(QlDefaultProbabilityHelper *o, char **e) {-  try {return (*arg(o))->impliedQuote();-  } catch (std::exception& er) {return handleException<double>(e, er);}}--QlDefaultProbabilityHelper* qlSpreadCdsHelper(QlQuote* runningSpread, int n, int u, int settlementDays, Calendar* calendar, int frequency, int paymentConvention, int rule, DayCounter* dayCounter, double recoveryRate, QlYieldTermStructure* discountCurve, int settlesAccrual, int paysAtDefaultTime, int startDate, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int model, char **e) {-  try {return ret(new QlDefaultProbabilityHelper(alloc(new SpreadCdsHelper(*arg(runningSpread), Period(n, (TimeUnit)u), settlementDays, *arg(calendar), (Frequency)frequency, (BusinessDayConvention)paymentConvention, (DateGeneration::Rule)rule, *arg(dayCounter), recoveryRate, *arg(discountCurve), settlesAccrual, paysAtDefaultTime,-            qlNullableDate(startDate), *arg(lastPeriodDayCounter), rebatesAccrual, (CreditDefaultSwap::PricingModel)model))));-  } catch (std::exception& er) {return handleException<QlDefaultProbabilityHelper*>(e, er);}}-QlDefaultProbabilityHelper* qlUpfrontCdsHelper(QlQuote* upfront, double runningSpread, int n, int u, int settlementDays, Calendar* calendar, int frequency, int paymentConvention, int rule, DayCounter* dayCounter, double recoveryRate, QlYieldTermStructure* discountCurve, unsigned upfrontSettlementDays, int settlesAccrual, int paysAtDefaultTime, int startDate, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int model, char **e) {-  try {return ret(new QlDefaultProbabilityHelper(alloc(new UpfrontCdsHelper(*arg(upfront), runningSpread, Period(n, (TimeUnit)u), settlementDays, *arg(calendar), (Frequency)frequency, (BusinessDayConvention)paymentConvention, (DateGeneration::Rule)rule, *arg(dayCounter), recoveryRate, *arg(discountCurve), upfrontSettlementDays, settlesAccrual, paysAtDefaultTime,-            qlNullableDate(startDate), *arg(lastPeriodDayCounter), rebatesAccrual, (CreditDefaultSwap::PricingModel)model))));-  } catch (std::exception& er) {return handleException<QlDefaultProbabilityHelper*>(e, er);}}-QlDefaultProbabilityTermStructure* qlPiecewiseDefaultCurve(int referenceDate, unsigned instrumentsLen, QlDefaultProbabilityHelper** instruments, DayCounter* dayCounter, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, char **e) {-  const auto b = bootstrapOpts(accuracy, minValue, maxValue, maxAttempts, maxFactor, minFactor, dontThrow, dontThrowSteps, maxEvaluations);-  return piecewiseDefaultCurveImpl([&] {-    return qlPiecewiseDefaultCurveAux(Date(referenceDate), qlVector(instruments, instrumentsLen), *arg(dayCounter), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), trait, interpolator, approximator, approximatorArg, b);-  }, e);-}-QlDefaultProbabilityTermStructure* qlPiecewiseDefaultCurve1(unsigned settlementDays, Calendar *calendar, unsigned instrumentsLen, QlDefaultProbabilityHelper** instruments, DayCounter* dayCounter, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, char **e) {-  const auto b = bootstrapOpts(accuracy, minValue, maxValue, maxAttempts, maxFactor, minFactor, dontThrow, dontThrowSteps, maxEvaluations);-  return piecewiseDefaultCurveImpl([&] {-    return qlPiecewiseDefaultCurveAux1(settlementDays, *arg(calendar), qlVector(instruments, instrumentsLen), *arg(dayCounter), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), trait, interpolator, approximator, approximatorArg, b);-  }, e);-}-double qlDefaultProbabilityTermStructureDefaultDensity1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, char **e) {-  try {return (*arg(o))->defaultDensity(t, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDefaultProbabilityTermStructureDefaultDensity(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, char **e) {-  try {return (*arg(o))->defaultDensity(Date(d), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDefaultProbabilityTermStructureDefaultProbability1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, char **e) {-  try {return (*arg(o))->defaultProbability(t, (bool)extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDefaultProbabilityTermStructureDefaultProbability2(QlDefaultProbabilityTermStructure* o, int x1, int x2, int extrapolate, char **e) {-  try {return (*arg(o))->defaultProbability(Date(x1), Date(x2), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDefaultProbabilityTermStructureDefaultProbability3(QlDefaultProbabilityTermStructure* o, double x1, double x2, int extrapo, char **e) {-  try {return (*arg(o))->defaultProbability(x1, x2, extrapo);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDefaultProbabilityTermStructureDefaultProbability(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, char **e) {-  try {return (*arg(o))->defaultProbability(Date(d), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDefaultProbabilityTermStructureHazardRate1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, char **e) {-  try {return (*arg(o))->hazardRate(t, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDefaultProbabilityTermStructureHazardRate(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, char **e) {-  try {return (*arg(o))->hazardRate(Date(d), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDefaultProbabilityTermStructureSurvivalProbability1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, char **e) {-  try {return (*arg(o))->survivalProbability(t, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlDefaultProbabilityTermStructureSurvivalProbability(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, char **e) {-  try {return (*arg(o))->survivalProbability(Date(d), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--void qlFreeZeroInflationTermStructure(QlZeroInflationTermStructure *o) {del(o);}-QlTermStructure* qlZeroInflationTermStructureAsTermStructure(QlZeroInflationTermStructure *o) {return ret(new QlTermStructure(*arg(o)));}-double qlZeroInflationTermStructureZeroRate(QlZeroInflationTermStructure* o, int d, int extrapolate, char **e) {-  try {return (*arg(o))->zeroRate(Date(d), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-void qlFreeYoYInflationTermStructure(QlYoYInflationTermStructure *o) {del(o);}-QlTermStructure* qlYoYInflationTermStructureAsTermStructure(QlYoYInflationTermStructure *o) {return ret(new QlTermStructure(*arg(o)));}-double qlYoYInflationTermStructureYoYRate(QlYoYInflationTermStructure* o, int d, int extrapolate, char **e) {-  try {return (*arg(o))->yoyRate(Date(d), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--/* CommodityCurve */--QlCommodityCurve* qlCommodityCurve(char *name, CommodityType *commodityType, Currency *currency,-                                   UnitOfMeasure *unitOfMeasure, Calendar *calendar,-                                   unsigned datesLen, int *dates, unsigned pricesLen, double *prices,-                                   DayCounter *dayCounter, char **e) {-  try {return ret(new QlCommodityCurve(alloc(new CommodityCurve(-      arg(name), *arg(commodityType), *arg(currency), *arg(unitOfMeasure), *arg(calendar),-      qlDateVector(dates, datesLen), std::vector<Real>(prices, prices+pricesLen), *arg(dayCounter)))));-  } catch (std::exception& er) {return handleException<QlCommodityCurve*>(e, er);}}--void qlFreeCommodityCurve(QlCommodityCurve *o) {del(o);}-QlTermStructure* qlCommodityCurveAsTermStructure(QlCommodityCurve *o) {return ret(new QlTermStructure(*arg(o)));}-char *qlCommodityCurveName(QlCommodityCurve *o) {return tracedup((*arg(o))->name().c_str());}-CommodityType *qlCommodityCurveCommodityType(QlCommodityCurve *o, char **e) {-  try {return ret(new CommodityType((*arg(o))->commodityType()));-  } catch (std::exception& er) {return handleException<CommodityType*>(e, er);}}-UnitOfMeasure *qlCommodityCurveUnitOfMeasure(QlCommodityCurve *o, char **e) {-  try {return ret(new UnitOfMeasure((*arg(o))->unitOfMeasure()));-  } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}-Currency *qlCommodityCurveCurrency(QlCommodityCurve *o, char **e) {-  try {return ret(new Currency((*arg(o))->currency()));-  } catch (std::exception& er) {return handleException<Currency*>(e, er);}}--void qlCommodityCurveDates(QlCommodityCurve *o, unsigned *count, int **days, char **e) {-  *count = 0; *days = 0;-  try {-    const std::vector<Date> &dates = (*arg(o))->dates();-    unsigned n = (unsigned)dates.size();-    int *ds = qlAllocateInts(n);-    for (size_t i = 0; i < dates.size(); ++i)-      ds[i] = dates[i].serialNumber();-    *count = n; *days = ds;-  } catch (std::exception& er) {*e = tracedup(er.what());}-}--void qlCommodityCurvePrices(QlCommodityCurve *o, unsigned *count, double **prices, char **e) {-  *count = 0; *prices = 0;-  try {-    const std::vector<Real> &p = (*arg(o))->prices();-    unsigned n = (unsigned)p.size();-    double *ps = qlAllocateDoubles(n);-    for (size_t i = 0; i < p.size(); ++i)-      ps[i] = p[i];-    *count = n; *prices = ps;-  } catch (std::exception& er) {*e = tracedup(er.what());}-}--int qlCommodityCurveEmpty(QlCommodityCurve *o) {return (*arg(o))->empty();}--// basisOfCurve_ is a nullptr shared_ptr when unset -- returned as-is (not via ret(), nothing new-// is allocated here) so the Haskell side's peekMaybeCommodityCurve can null-check it directly.-QlCommodityCurve *qlCommodityCurveBasisOfCurve(QlCommodityCurve *o) {-  const shared_ptr<CommodityCurve> &b = (*arg(o))->basisOfCurve();-  return b ? ret(new QlCommodityCurve(b)) : nullptr;-}--// Not bad_alloc-only: setBasisOfCurve() itself calls-// CommodityPricingHelper::calculateUomConversionFactor, which QL_REQUIRE-throws via-// UnitOfMeasureConversionManager::lookup when no matching conversion is registered.-void qlCommodityCurveSetBasisOfCurve(QlCommodityCurve *o, QlCommodityCurve *basisOfCurve, char **e) {-  try {(*arg(o))->setBasisOfCurve(*arg(basisOfCurve));-  } catch (std::exception& er) {*e = tracedup(er.what());}-}--// Builds the ExchangeContracts map the nearby-rolling price()/underlyingPriceDate() calls take.-// Always constructed (even when n==0): price() only dereferences it when nearbyOffset>0, and-// underlyingPriceDate() requires nearbyOffset>0 too (QL_REQUIRE'd before any lower_bound call), so-// an empty-but-non-null map is exactly as safe as a null one for every reachable call shape here,-// and skips a conditional the two call sites would otherwise have to repeat.-static shared_ptr<ExchangeContracts> qlBuildExchangeContracts(-    unsigned n, int *ecKeys, char **ecCodes, int *ecExpirations, int *ecStarts, int *ecEnds) {-  auto ecs = ext::make_shared<ExchangeContracts>();-  for (unsigned i = 0; i < n; ++i)-    (*ecs)[Date(ecKeys[i])] = ExchangeContract(ecCodes[i], Date(ecExpirations[i]),-                                                Date(ecStarts[i]), Date(ecEnds[i]));-  return ecs;-}--// nearbyOffset<=0 never touches exchangeContracts (see commoditycurve.hpp's inline price()), so-// this also serves the plain flat-price case when called with an empty map and offset 0.-double qlCommodityCurvePrice(QlCommodityCurve *o, int date,-    unsigned ecLen1, int *ecKeys, unsigned, char **ecCodes,-    unsigned, int *ecExpirations, unsigned, int *ecStarts,-    unsigned, int *ecEnds, int nearbyOffset, char **e) {-  try {-    auto ecs = qlBuildExchangeContracts(ecLen1, ecKeys, ecCodes, ecExpirations, ecStarts, ecEnds);-    return (*arg(o))->price(Date(date), ecs, nearbyOffset);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--double qlCommodityCurveBasisOfPrice(QlCommodityCurve *o, int date, char **e) {-  try {return (*arg(o))->basisOfPrice(Date(date));-  } catch (std::exception& er) {return handleException<double>(e, er);}}--int qlCommodityCurveUnderlyingPriceDate(QlCommodityCurve *o, int date,-    unsigned ecLen1, int *ecKeys, unsigned, char **ecCodes,-    unsigned, int *ecExpirations, unsigned, int *ecStarts,-    unsigned, int *ecEnds, int nearbyOffset, char **e) {-  try {-    auto ecs = qlBuildExchangeContracts(ecLen1, ecKeys, ecCodes, ecExpirations, ecStarts, ecEnds);-    return (*arg(o))->underlyingPriceDate(Date(date), ecs, nearbyOffset).serialNumber();-  } catch (std::exception& er) {return handleException<int>(e, er);}}--/* CommodityIndex */--// exchangeContracts/nearbyOffset are hardcoded to null/0 -- see qlTermStructure.h's comment;-// forwardCurve is nullable, matching upstream's own nullable ext::shared_ptr<CommodityCurve>.-QlCommodityIndex* qlCommodityIndex(char *name, CommodityType *commodityType, Currency *currency,-                                   UnitOfMeasure *unitOfMeasure, Calendar *calendar,-                                   double lotQuantity, QlCommodityCurve *forwardCurve, char **e) {-  try {return ret(new QlCommodityIndex(alloc(new CommodityIndex(-      name, *arg(commodityType), *arg(currency), *arg(unitOfMeasure), *arg(calendar), lotQuantity,-      forwardCurve ? *arg(forwardCurve) : shared_ptr<CommodityCurve>(),-      shared_ptr<ExchangeContracts>(), 0))));-  } catch (std::exception& er) {return handleException<QlCommodityIndex*>(e, er);}}--void qlFreeCommodityIndex(QlCommodityIndex *o) {del(o);}-QlIndex* qlCommodityIndexAsIndex(QlCommodityIndex *o) {return ret(new QlIndex(*arg(o)));}--// commodityType()/currency()/unitOfMeasure()/lotQuantity()/forwardCurve() are all plain,-// never-mutated echoes of the constructor's own arguments (commodityindex.hpp's inline getters-// each just `return foo_;`) -- not bound, per CLAUDE.md's trivial-getter rule.--double qlCommodityIndexForwardPrice(QlCommodityIndex *o, int date, char **e) {-  try {return (*arg(o))->forwardPrice(Date(date));-  } catch (std::exception& er) {return handleException<double>(e, er);}}--// lastQuoteDate() -> timeSeries().lastDate(), which QL_REQUIREs a non-empty historical fixing-// series -- check emptiness first (via CommodityIndex::empty(), itself just timeSeries().empty())-// rather than catching the exception, so callers can check isEmpty first if they want.-int qlCommodityIndexLastQuoteDate(QlCommodityIndex *o, char **e) {-  try {return (*arg(o))->lastQuoteDate().serialNumber();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlCommodityIndexEmpty(QlCommodityIndex *o) {return (*arg(o))->empty();}--void qlFreeZeroCouponInflationSwapHelper(QlZeroCouponInflationSwapHelper *o) {del(o);}-QlZeroCouponInflationSwapHelper* qlZeroCouponInflationSwapHelper(QlQuote* quote, int n, int u, int maturity, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlZeroInflationIndex* zii, int observationInterpolation, int pillar, int customPillarDate, char **e) {-  try {return ret(new QlZeroCouponInflationSwapHelper(alloc(new ZeroCouponInflationSwapHelper(*arg(quote), Period(n, (TimeUnit)u), Date(maturity),-          *arg(calendar), (BusinessDayConvention)paymentConvention, *arg(dayCounter), *arg(zii),-          observationInterpolation == 0 ? CPI::Flat : CPI::Linear, (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));-  } catch (std::exception& er) {return handleException<QlZeroCouponInflationSwapHelper*>(e, er);}}--void qlFreeYearOnYearInflationSwapHelper(QlYearOnYearInflationSwapHelper *o) {del(o);}-QlYearOnYearInflationSwapHelper* qlYearOnYearInflationSwapHelper(QlQuote* quote, int n, int u, int maturity, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlYoYInflationIndex* yii, int observationInterpolation, QlYieldTermStructure* nominalTermStructure, int pillar, int customPillarDate, char **e) {-  try {return ret(new QlYearOnYearInflationSwapHelper(alloc(new YearOnYearInflationSwapHelper(*arg(quote), Period(n, (TimeUnit)u), Date(maturity),-          *arg(calendar), (BusinessDayConvention)paymentConvention, *arg(dayCounter), *arg(yii),-          observationInterpolation == 0 ? CPI::Flat : CPI::Linear, *arg(nominalTermStructure), (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));-  } catch (std::exception& er) {return handleException<QlYearOnYearInflationSwapHelper*>(e, er);}}--QlZeroCouponInflationSwap* qlZeroCouponInflationSwapHelperSwap(QlZeroCouponInflationSwapHelper* o, char **e) {try {return ret(new QlZeroCouponInflationSwap((*arg(o))->swap()));} catch (std::exception& er) {return handleException<QlZeroCouponInflationSwap*>(e, er);}}-QlYearOnYearInflationSwap* qlYearOnYearInflationSwapHelperSwap(QlYearOnYearInflationSwapHelper* o, char **e) {try {return ret(new QlYearOnYearInflationSwap((*arg(o))->swap()));} catch (std::exception& er) {return handleException<QlYearOnYearInflationSwap*>(e, er);}}--QlZeroInflationTermStructure* qlPiecewiseZeroInflationCurve(int referenceDate, int baseDate, int frequency, DayCounter* dayCounter, unsigned instrumentsLen, QlZeroCouponInflationSwapHelper** instruments, int interpolator, int approximator, int approximatorArg, char **e) {-  try {-    // instruments[i] is shared_ptr<ZeroCouponInflationSwapHelper>*; push_back upcasts each-    // element to shared_ptr<BootstrapHelper<ZeroInflationTermStructure>> (PiecewiseZeroInflationCurve's-    // helper type) -- qlVector can't do this since it deduces the vector's element type from the-    // array's pointee type, not the target parameter type.-    std::vector<shared_ptr<BootstrapHelper<ZeroInflationTermStructure> > > instr;-    instr.reserve(instrumentsLen);-    for (unsigned i = 0; i < instrumentsLen; ++i) instr.push_back(*instruments[i]);-    auto ts = allocShared(qlPiecewiseZeroInflationCurveAux(Date(referenceDate), Date(baseDate), (Frequency)frequency, *arg(dayCounter),-        instr, interpolator, approximator, approximatorArg));-    return ret(new QlZeroInflationTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlZeroInflationTermStructure*>(e, er);}}-QlYoYInflationTermStructure* qlPiecewiseYoYInflationCurve(int referenceDate, int baseDate, double baseYoYRate, int frequency, DayCounter* dayCounter, unsigned instrumentsLen, QlYearOnYearInflationSwapHelper** instruments, int interpolator, int approximator, int approximatorArg, char **e) {-  try {-    std::vector<shared_ptr<BootstrapHelper<YoYInflationTermStructure> > > instr;-    instr.reserve(instrumentsLen);-    for (unsigned i = 0; i < instrumentsLen; ++i) instr.push_back(*instruments[i]);-    auto ts = allocShared(qlPiecewiseYoYInflationCurveAux(Date(referenceDate), Date(baseDate), baseYoYRate, (Frequency)frequency, *arg(dayCounter),-        instr, interpolator, approximator, approximatorArg));-    return ret(new QlYoYInflationTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYoYInflationTermStructure*>(e, er);}}--// InterpolatedYoYInflationCurve<Interpolator> -- direct (dates, rates) curve, unlike-// qlPiecewiseYoYInflationCurve's bootstrap from swap helpers. No seasonality (unbound elsewhere-// in hasquant).-QlYoYInflationTermStructure* qlInterpolatedYoYInflationCurve(int referenceDate,-    unsigned datesLen, int *dates, double *rates, int frequency, DayCounter *dayCounter,-    int interpolator, int approximator, int approximatorArg, char **e) {-  try {-    std::vector<Date> ds(datesLen);-    for (unsigned i = 0; i < datesLen; ++i) ds[i] = Date(dates[i]);-    auto ts = allocShared(qlInterpolatedYoYInflationCurveAux(Date(referenceDate), ds, std::vector<Rate>(rates, rates+datesLen),-        (Frequency)frequency, *arg(dayCounter), interpolator, approximator, approximatorArg));-    return ret(new QlYoYInflationTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYoYInflationTermStructure*>(e, er);}}--QlRateHelper *qlDepositRateHelper(QlQuote *quote, int l, int u, unsigned fixDays, Calendar *calendar, int conv, int eom, DayCounter *dayCount, char **e) {-  try {return ret(new QlRateHelper(alloc(new DepositRateHelper( *arg(quote), Period(l, (TimeUnit)u), fixDays,-          *arg(calendar), (BusinessDayConvention) conv, eom, *arg(dayCount)))));-  } catch (std::exception& er) {return handleException<QlRateHelper *>(e, er);}}-QlBondHelper *qlFixedRateBondHelper(QlQuote *quote, unsigned settlDays, double face,-    Schedule *sched, unsigned cLen, double *coupons, DayCounter *dayCount, int conv, double redemption, int issue, char **e) {-  try {return ret(new QlBondHelper(alloc(new FixedRateBondHelper(*arg(quote), settlDays, face, *arg(sched),-          std::vector<Rate>(coupons, coupons+cLen), *arg(dayCount), (BusinessDayConvention) conv, redemption, qlNullableDate(issue)))));-  } catch (std::exception& er) {return handleException<QlBondHelper *>(e, er);}}-QlBondHelper *qlCPIBondHelper(QlQuote *quote, unsigned settlementDays, double faceAmount, double baseCPI, int obsLagLen, int obsLagUnit,-    QlZeroInflationIndex* index, int observationInterpolation, Schedule *schedule, unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter,-    int paymentConvention, int issueDate, Calendar *paymentCalendar, char **e) {-  try {return ret(new QlBondHelper(alloc(new CPIBondHelper(*arg(quote), settlementDays, faceAmount, baseCPI, Period(obsLagLen, (TimeUnit)obsLagUnit),-          *arg(index), (CPI::InterpolationType)observationInterpolation, *arg(schedule), std::vector<Rate>(coupons, coupons+couponsLen),-          *arg(accrualDayCounter), (BusinessDayConvention)paymentConvention, qlNullableDate(issueDate), *arg(paymentCalendar)))));-  } catch (std::exception& er) {return handleException<QlBondHelper *>(e, er);}}-void qlFreeRateHelper(QlRateHelper *helper) {del(helper);}--static QlYieldTermStructure *piecewiseYieldCurveImpl(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, const QlIterativeBootstrapOpts& b, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveAux(Date(date), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), trait, interpolator, approximator, approximatorArg, b));-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--QlYieldTermStructure *qlPiecewiseYieldCurveFull(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg,-  double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, char **e) {-  return piecewiseYieldCurveImpl(date, rateLen, ratehelpers, dayCount, quoteLen, quotes, datesLen, dates,-      trait, interpolator, approximator, approximatorArg,-      bootstrapOpts(accuracy, minValue, maxValue, maxAttempts, maxFactor, minFactor, dontThrow, dontThrowSteps, maxEvaluations), e);-}--using curveBuilder = YieldTermStructure *(*)( const std::vector<Date>& dates, const std::vector<double>& dfs, const DayCounter& dayCount, const Calendar& cal,-  const std::vector<Handle<Quote> >& jumps, const std::vector<Date>& jumpDates, int interpolator, int approximator, int approximatorArg);--QlYieldTermStructure *qlInterpolatedCurve(curveBuilder builder, unsigned rateLen, double *rates, unsigned rateDatesLen, int *rateDates,-  DayCounter *dayCount, Calendar *cal, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, int extrapolate, char **e) {-  try {-    auto ts = allocShared(builder(qlDateVector(rateDates, rateDatesLen), std::vector<double>(rates, rates+rateLen), *arg(dayCount), *arg(cal),-        qlHandleVector(quotes, quoteLen), qlDateVector(dates, datesLen), interpolator, approximator, approximatorArg));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}-QlYieldTermStructure *qlInterpolatedDiscountCurve(unsigned dfsLen, double *dfs, unsigned dfdatesLen, int *dfsDates, DayCounter *dayCount, Calendar *cal,-  unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, int extrapolate, char **e) {-  return qlInterpolatedCurve(&qlInterpolatedDiscountCurveAux, dfsLen, dfs, dfdatesLen, dfsDates,-    dayCount, cal, quoteLen, quotes, datesLen, dates, interpolator, approximator, approximatorArg, extrapolate, e);-}-QlYieldTermStructure *qlInterpolatedForwardCurve(unsigned fwdLen, double *fwds, unsigned fwddatesLen, int *fwdDates, DayCounter *dayCount, Calendar *cal, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, char **e) {-  return qlInterpolatedCurve(&qlInterpolatedForwardCurveAux, fwdLen, fwds, fwddatesLen, fwdDates,-    dayCount, cal, quoteLen, quotes, datesLen, dates, interpolator, approximator, approximatorArg, /*extrapolate=*/0, e);-}-QlYieldTermStructure *qlInterpolatedZeroCurve(unsigned yieldLen, double *yields, unsigned ydatesLen, int *yieldDates, DayCounter *dayCount, Calendar *cal, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, char **e) {-  return qlInterpolatedCurve(&qlInterpolatedZeroCurveAux, yieldLen, yields, ydatesLen, yieldDates,-    dayCount, cal, quoteLen, quotes,  datesLen, dates, interpolator, approximator, approximatorArg, /*extrapolate=*/0, e);-}-static QlYieldTermStructure *piecewiseYieldCurve1Impl(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, const QlIterativeBootstrapOpts& b, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), trait, interpolator, approximator, approximatorArg, /*bootstrap=*/0, /*accuracy=*/0.0,-        std::vector<double>(), b));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--QlYieldTermStructure *qlPiecewiseYieldCurve1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, int extrapolate, char **e) {-  return piecewiseYieldCurve1Impl(settl, cal, rateLen, ratehelpers, dayCount, quoteLen, quotes, datesLen, dates,-      trait, interpolator, approximator, approximatorArg, defaultBootstrapOpts(), extrapolate, e);-}--QlYieldTermStructure *qlPiecewiseYieldCurveFull1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg,-  double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, int extrapolate, char **e) {-  return piecewiseYieldCurve1Impl(settl, cal, rateLen, ratehelpers, dayCount, quoteLen, quotes, datesLen, dates,-      trait, interpolator, approximator, approximatorArg,-      bootstrapOpts(accuracy, minValue, maxValue, maxAttempts, maxFactor, minFactor, dontThrow, dontThrowSteps, maxEvaluations), extrapolate, e);-}-QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), hasquant::Discount, hasquant::LogLinear, /*approximator=*/0, /*approximatorArg=*/0, /*bootstrap=*/1, accuracy,-        std::vector<double>(weights, weights + weightsLen), defaultBootstrapOpts()));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--static QlYieldTermStructure *piecewiseYieldCurveGlobalBootstrapFixed(int date, unsigned rateLen,-  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,-  unsigned datesLen, int *dates, int trait, int interpolator, double accuracy,-  unsigned weightsLen, double *weights, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveGlobalBootstrapAux(Date(date),-        qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), trait, interpolator, accuracy,-        std::vector<double>(weights, weights + weightsLen)));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed1(int date, unsigned rateLen,-  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,-  unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights,-  int extrapolate, char **e) {-  return piecewiseYieldCurveGlobalBootstrapFixed(date, rateLen, ratehelpers, dayCount, quoteLen,-      quotes, datesLen, dates, hasquant::Discount, hasquant::LogLinear, accuracy, weightsLen,-      weights, extrapolate, e);-}--QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed2(int date, unsigned rateLen,-  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,-  unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights,-  int extrapolate, char **e) {-  return piecewiseYieldCurveGlobalBootstrapFixed(date, rateLen, ratehelpers, dayCount, quoteLen,-      quotes, datesLen, dates, hasquant::SimpleZeroYield, hasquant::Linear, accuracy, weightsLen,-      weights, extrapolate, e);-}--QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap2(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), hasquant::SimpleZeroYield, hasquant::Linear, /*approximator=*/0, /*approximatorArg=*/0, /*bootstrap=*/1, accuracy,-        std::vector<double>(weights, weights + weightsLen), defaultBootstrapOpts()));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap4(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), hasquant::ForwardRate, hasquant::Linear, /*approximator=*/0, /*approximatorArg=*/0, /*bootstrap=*/1, accuracy,-        std::vector<double>(weights, weights + weightsLen), defaultBootstrapOpts()));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap5(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), hasquant::ZeroYield, hasquant::Linear, /*approximator=*/0, /*approximatorArg=*/0, /*bootstrap=*/1, accuracy,-        std::vector<double>(weights, weights + weightsLen), defaultBootstrapOpts()));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed4(int date, unsigned rateLen,-  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,-  unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights,-  int extrapolate, char **e) {-  return piecewiseYieldCurveGlobalBootstrapFixed(date, rateLen, ratehelpers, dayCount, quoteLen,-      quotes, datesLen, dates, hasquant::ForwardRate, hasquant::Linear, accuracy, weightsLen,-      weights, extrapolate, e);-}--QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed5(int date, unsigned rateLen,-  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,-  unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights,-  int extrapolate, char **e) {-  return piecewiseYieldCurveGlobalBootstrapFixed(date, rateLen, ratehelpers, dayCount, quoteLen,-      quotes, datesLen, dates, hasquant::ZeroYield, hasquant::Linear, accuracy, weightsLen,-      weights, extrapolate, e);-}--QlYieldTermStructure *qlPiecewiseYieldCurveLocalBootstrap1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, int trait, unsigned localisation, int forcePositive, double accuracy,-  double quadraticity, double monotonicity, int convexForcePositive, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveLocalBootstrapAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), trait, localisation, forcePositive != 0, accuracy, quadraticity, monotonicity, convexForcePositive != 0));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--QlYieldTermStructure *qlPiecewiseYieldCurveLocalBootstrapFixed(int date, unsigned rateLen,-  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,-  unsigned datesLen, int *dates, int trait, unsigned localisation, int forcePositive,-  double accuracy, double quadraticity, double monotonicity, int convexForcePositive,-  int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveLocalBootstrapAux(Date(date),-        qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), trait, localisation, forcePositive != 0, accuracy,-        quadraticity, monotonicity, convexForcePositive != 0));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap3(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,-  QlQuote **quotes, unsigned datesLen, int *dates, unsigned additionalRateLen, QlRateHelper **additionalRatehelpers, unsigned additionalDatesLen, int *additionalDates,-  double accuracy, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveGlobalBootstrapFullAux(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), qlVector(additionalRatehelpers, additionalRateLen), qlDateVector(additionalDates, additionalDatesLen), accuracy));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed3(int date, unsigned rateLen,-  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,-  unsigned datesLen, int *dates, unsigned additionalRateLen,-  QlRateHelper **additionalRatehelpers, unsigned additionalDatesLen, int *additionalDates,-  double accuracy, int extrapolate, char **e) {-  try {-    auto ts = allocShared(qlPiecewiseYieldCurveGlobalBootstrapFullAux(Date(date),-        qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),-        qlDateVector(dates, datesLen), qlVector(additionalRatehelpers, additionalRateLen),-        qlDateVector(additionalDates, additionalDatesLen), accuracy));-    if (extrapolate) ts->enableExtrapolation();-    return ret(new QlYieldTermStructure(ts));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}--// MultiCurve builds a set of curves that form a genuine dependency cycle -- see the class's own-// doc comment in multicurve.hpp for the 4-step protocol this wraps. It is bound as a standalone-// leaf (see QlMultiCurve's alias comment in qlaux.h), not part of the TermStructure hierarchy.-QlMultiCurve *qlMultiCurve(double accuracy, char **e) {-  try {return ret(new QlMultiCurve(shared_ptr<MultiCurve>(alloc(new MultiCurve(accuracy)))));-  } catch (std::exception& er) {return handleException<QlMultiCurve*>(e, er);}}-void qlFreeMultiCurve(QlMultiCurve *o) {del(o);}--// curve's underlying shared_ptr is copied out of its Handle (currentLink()) and moved into-// addBootstrappedCurve/addNonBootstrappedCurve -- the caller's own QlYieldTermStructure* still-// owns/frees its Handle independently afterward. The Handle<YieldTermStructure> this returns is-// wrapped directly, never rebuilt from a shared_ptr (see the "no Handle<YieldTermStructure>("-// invariant in CLAUDE.md) -- this is a Handle the API itself handed back, not a fresh one.-QlYieldTermStructure *qlMultiCurveAddBootstrappedCurve(QlMultiCurve *mc, QlRelinkableYieldTermStructure *internalHandle, QlYieldTermStructure *curve, char **e) {-  try {-    shared_ptr<YieldTermStructure> sp = (*arg(curve)).currentLink();-    return ret(new QlYieldTermStructure((*arg(mc))->addBootstrappedCurve(*arg(internalHandle), std::move(sp))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}-QlYieldTermStructure *qlMultiCurveAddNonBootstrappedCurve(QlMultiCurve *mc, QlRelinkableYieldTermStructure *internalHandle, QlYieldTermStructure *curve, char **e) {-  try {-    shared_ptr<YieldTermStructure> sp = (*arg(curve)).currentLink();-    return ret(new QlYieldTermStructure((*arg(mc))->addNonBootstrappedCurve(*arg(internalHandle), std::move(sp))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}--// ql/experimental/termstructures/basisswapratehelpers.hpp -- rate-helper constructors only-// (impliedQuote/accept/setTermStructure/swap() are visitor-pattern/internal plumbing, matching-// the existing FraRateHelper/SwapRateHelper precedent of leaving those unbound).-QlRateHelper *qlIborIborBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar *calendar, int convention, int endOfMonth,-  QlIborIndex *baseIndex, QlIborIndex *otherIndex, QlYieldTermStructure *discountHandle, int bootstrapBaseCurve, char **e) {-  try {-    return ret(new QlRateHelper(alloc(new IborIborBasisSwapRateHelper(*arg(basis), Period(tenorLen, (TimeUnit)tenorUnit), settlementDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,-      *arg(baseIndex), *arg(otherIndex), *arg(discountHandle), bootstrapBaseCurve))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlRateHelper *qlOvernightIborBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar *calendar, int convention, int endOfMonth,-  QlOvernightIndex *baseIndex, QlIborIndex *otherIndex, QlYieldTermStructure *discountHandle, char **e) {-  try {-    return ret(new QlRateHelper(alloc(new OvernightIborBasisSwapRateHelper(*arg(basis), Period(tenorLen, (TimeUnit)tenorUnit), settlementDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,-      *arg(baseIndex), *arg(otherIndex), qlNullableHandle(arg(discountHandle))))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}--// ql/experimental/termstructures/crosscurrencyratehelpers.hpp -- CrossCurrencySwapRateHelperBase-// and CrossCurrencyBasisSwapRateHelperBase are protected-constructor bases, not directly-// constructible, so only the three concrete leaf classes are bound here.-QlRateHelper *qlConstNotionalCrossCurrencyBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth,-  QlIborIndex *baseCurrencyIndex, QlIborIndex *quoteCurrencyIndex, QlYieldTermStructure *collateralCurve,-  int isFxBaseCurrencyCollateralCurrency, int isBasisOnFxBaseCurrencyLeg,-  int paymentFrequency, int paymentLag, int quoteCurrencyPaymentFrequency, char **e) {-  try {-    return ret(new QlRateHelper(alloc(new ConstNotionalCrossCurrencyBasisSwapRateHelper(*arg(basis), Period(tenorLen, (TimeUnit)tenorUnit), fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,-      *arg(baseCurrencyIndex), *arg(quoteCurrencyIndex), *arg(collateralCurve),-      isFxBaseCurrencyCollateralCurrency, isBasisOnFxBaseCurrencyLeg,-      paymentFrequency < 0 ? ext::optional<Frequency>() : ext::optional<Frequency>((Frequency)paymentFrequency),-      paymentLag,-      quoteCurrencyPaymentFrequency < 0 ? ext::optional<Frequency>() : ext::optional<Frequency>((Frequency)quoteCurrencyPaymentFrequency)))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlRateHelper *qlMtMCrossCurrencyBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth,-  QlIborIndex *baseCurrencyIndex, QlIborIndex *quoteCurrencyIndex, QlYieldTermStructure *collateralCurve,-  int isFxBaseCurrencyCollateralCurrency, int isBasisOnFxBaseCurrencyLeg, int isFxBaseCurrencyLegResettable,-  int paymentFrequency, int paymentLag, int quoteCurrencyPaymentFrequency, char **e) {-  try {-    return ret(new QlRateHelper(alloc(new MtMCrossCurrencyBasisSwapRateHelper(*arg(basis), Period(tenorLen, (TimeUnit)tenorUnit), fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,-      *arg(baseCurrencyIndex), *arg(quoteCurrencyIndex), *arg(collateralCurve),-      isFxBaseCurrencyCollateralCurrency, isBasisOnFxBaseCurrencyLeg, isFxBaseCurrencyLegResettable,-      paymentFrequency < 0 ? ext::optional<Frequency>() : ext::optional<Frequency>((Frequency)paymentFrequency),-      paymentLag,-      quoteCurrencyPaymentFrequency < 0 ? ext::optional<Frequency>() : ext::optional<Frequency>((Frequency)quoteCurrencyPaymentFrequency)))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlRateHelper *qlConstNotionalCrossCurrencySwapRateHelper(QlQuote *fixedRate, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth,-  int fixedFrequency, DayCounter *fixedDayCount, QlIborIndex *floatIndex, QlYieldTermStructure *collateralCurve, int collateralOnFixedLeg, int paymentLag, char **e) {-  try {-    return ret(new QlRateHelper(alloc(new ConstNotionalCrossCurrencySwapRateHelper(*arg(fixedRate), Period(tenorLen, (TimeUnit)tenorUnit), fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,-      (Frequency)fixedFrequency, *arg(fixedDayCount), *arg(floatIndex), *arg(collateralCurve), collateralOnFixedLeg, paymentLag))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlRateHelper *qlFxSwapRateHelper(QlQuote *fwdPoint, QlQuote *spotFx, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth,-  int isFxBaseCurrencyCollateralCurrency, QlYieldTermStructure *collateralCurve, Calendar *tradingCalendar, char **e) {-  try {-    return ret(new QlRateHelper(alloc(new FxSwapRateHelper(*arg(fwdPoint), *arg(spotFx), Period(tenorLen, (TimeUnit)tenorUnit), fixingDays, *arg(calendar), (BusinessDayConvention)convention,-      endOfMonth, isFxBaseCurrencyCollateralCurrency, *arg(collateralCurve), *arg(tradingCalendar)))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlRateHelper *qlFxSwapRateHelper2(QlQuote *fwdPoint, QlQuote *spotFx, int startDate, int endDate, int isFxBaseCurrencyCollateralCurrency, QlYieldTermStructure *collateralCurve, char **e) {-  try {-    return ret(new QlRateHelper(alloc(new FxSwapRateHelper(*arg(fwdPoint), *arg(spotFx), Date(startDate), Date(endDate), isFxBaseCurrencyCollateralCurrency, *arg(collateralCurve)))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}--double qlYieldTSDiscount(QlYieldTermStructure *ts, int date, int extrapolate, char **e) {-  try {return (*ts)->discount(Date(date), extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlSwapRateHelper *qlSwapRateHelper1(QlQuote *q, int l, int u, Calendar *cal, int freq,-  int conv, DayCounter *dc, QlIborIndex *i, QlQuote *s, int fl, int fu, QlYieldTermStructure *ts,-  unsigned settlementDays, int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons,-  int floatConvention, QlFloatingRateCouponPricer *couponPricer, char **e) {-  try {-    return ret(new QlSwapRateHelper(alloc(new SwapRateHelper(*arg(q),-	    Period(l, (TimeUnit)u), *arg(cal), (Frequency) freq, (BusinessDayConvention) conv, *arg(dc), *arg(i),-            qlNullableHandle(arg(s)),-            Period(fl, (TimeUnit)fu), qlNullableHandle(arg(ts)),-            settlementDays, (Pillar::Choice)pillar, qlNullableDate(customPillarDate), endOfMonth,-            qlOptBool(useIndexedCoupons),-            qlOptBusinessDayConvention(floatConvention),-            couponPricer ? *arg(couponPricer) : ext::shared_ptr<FloatingRateCouponPricer>()))));-  } catch (std::exception& er) {return handleException<QlSwapRateHelper *>(e, er);}}-QlYieldTermStructure* qlFlatForward(int referenceDate, QlQuote* forward, DayCounter* dayCounter, int compounding, int frequency, char **e) {-try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new FlatForward(Date(referenceDate), *arg(forward), *arg(dayCounter), (Compounding)compounding, (Frequency)frequency)))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}-QlYieldTermStructure* qlFlatForward1(unsigned settlementDays, Calendar* calendar, QlQuote* forward, DayCounter* dayCounter, int compounding, int frequency, char **e) {-try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new FlatForward(settlementDays, *arg(calendar), *arg(forward), *arg(dayCounter), (Compounding)compounding, (Frequency)frequency)))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}-QlYieldTermStructure* qlCompositeZeroYieldStructure(QlYieldTermStructure* curve1, QlYieldTermStructure* curve2, double (*fn)(double, double), int compounding, int frequency, char **e) {-  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new CompositeZeroYieldStructure<double (*)(double, double)>(*arg(curve1), *arg(curve2), fn, (Compounding)compounding, (Frequency)frequency)))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}--void qlFreeFittedBondDiscountCurveFittingMethod(FittedBondDiscountCurveFittingMethod *o) {del(o);}--// generated functions-InterestRate* qlYieldTermStructureZeroRate(QlYieldTermStructure* o, int d, DayCounter* resultDayCounter, int comp, int freq, int extrapolate, char **e) {-try {return ret(new InterestRate((*arg(o))->zeroRate(Date(d), *arg(resultDayCounter), (Compounding)comp, (Frequency)freq, extrapolate)));-  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}-InterestRate* qlYieldTermStructureForwardRate(QlYieldTermStructure* o, int d1, int d2, DayCounter* resultDayCounter, int comp, int freq, int extrapolate, char **e) {-  try {return ret(new InterestRate((*arg(o))->forwardRate(Date(d1), Date(d2), *arg(resultDayCounter), (Compounding)comp, (Frequency)freq, extrapolate)));-  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}-InterestRate* qlYieldTermStructureForwardRate2(QlYieldTermStructure* o, double t1, double t2, int comp, int freq, int extrapolate, char **e) {-  try {return ret(new InterestRate((*arg(o))->forwardRate(t1, t2, (Compounding)comp, (Frequency)freq, extrapolate)));-  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}-InterestRate* qlYieldTermStructureZeroRate1(QlYieldTermStructure* o, double t, int comp, int freq, int extrapolate, char **e) {-  try {return ret(new InterestRate((*arg(o))->zeroRate(t, (Compounding)comp, (Frequency)freq, extrapolate)));-  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}-double qlYieldTermStructureDiscount1(QlYieldTermStructure* o, double t, int extrapolate, char **e) {-  try {return (*arg(o))->discount(t, extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlRateHelper* qlFraRateHelper(QlQuote* rate, unsigned monthsToStart, unsigned monthsToEnd, unsigned fixingDays, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, int pillar, int customPillarDate, int useIndexedCoupon, char **e) {-  try {return ret(new QlRateHelper(alloc(new FraRateHelper(*arg(rate), monthsToStart, monthsToEnd, fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth, *arg(dayCounter), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-// Each shim below now binds the primary ctor overload (including the leading-// `optimizationMethod` param): OptimizationMethod is a shared_ptr box-// (QlOptimizationMethod, see qlLevenbergMarquardt/qlSimplex) rather than a raw-// Haskell-finalized pointer, so `method ? *arg(method) : shared_ptr<...>()`-// safely copies a shared reference into FittingMethod's own shared_ptr member-// -- correct even though FittedBondDiscountCurve additionally clones its-// fitting method, since cloning just copies that member (bumping the-// refcount), and correct regardless of when Haskell's own box is collected,-// since the object is only actually freed once every shared_ptr referencing-// it (Haskell's box included) has gone away.-// allocAs<FittedBondDiscountCurveFittingMethod> (not a bare alloc()) in each ctor below: see-// allocAs's doc comment in qlaux.h -- alloc() alone would trace each of these under its own-// leaf type (CubicBSplinesFitting, ...) rather than the base type qlFreeFittedBondDiscount--// CurveFittingMethod's del() traces the matching free under.-FittedBondDiscountCurveFittingMethod* qlCubicBSplinesFitting(unsigned knotVectorLen, double *knotVector, int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, char **e) {-  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new CubicBSplinesFitting(std::vector<double>(knotVector, knotVector+knotVectorLen), constrainAtZero, Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, constraint ? *arg(constraint) : Constraint(NoConstraint())));-  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}-FittedBondDiscountCurveFittingMethod* qlExponentialSplinesFitting(int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, unsigned numCoeffs, double fixedKappa, QlOptimizationMethod* method, Constraint* constraint, char **e) {-  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new ExponentialSplinesFitting(constrainAtZero, Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, numCoeffs, fixedKappa, constraint ? *arg(constraint) : Constraint(NoConstraint())));-  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}-FittedBondDiscountCurveFittingMethod* qlNelsonSiegelFitting(unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, char **e) {-  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new NelsonSiegelFitting(Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, constraint ? *arg(constraint) : Constraint(NoConstraint())));-  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}-FittedBondDiscountCurveFittingMethod* qlSimplePolynomialFitting(unsigned degree, int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, char **e) {-  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new SimplePolynomialFitting(degree, constrainAtZero, Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, constraint ? *arg(constraint) : Constraint(NoConstraint())));-  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}-FittedBondDiscountCurveFittingMethod* qlSvenssonFitting(unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, char **e) {-  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new SvenssonFitting(Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, constraint ? *arg(constraint) : Constraint(NoConstraint())));-  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}-QlFittedBondDiscountCurve* qlFittedBondDiscountCurve(unsigned settlementDays, Calendar* calendar, unsigned bondsLen, QlBondHelper** bonds, DayCounter* dayCounter, FittedBondDiscountCurve::FittingMethod* fittingMethod, double accuracy, unsigned maxEvaluations, unsigned guessLen, double *guess, double simplexLambda, char **e) {-  try {return ret(new QlFittedBondDiscountCurve(alloc(new FittedBondDiscountCurve(settlementDays, *arg(calendar), qlVector(bonds, bondsLen), *arg(dayCounter), *arg(fittingMethod), accuracy, maxEvaluations, Array(guess, guess+guessLen), simplexLambda))));-  } catch (std::exception& er) {return handleException<QlFittedBondDiscountCurve*>(e, er);}}-QlFittedBondDiscountCurve* qlFittedBondDiscountCurve1(int referenceDate, unsigned bondsLen, QlBondHelper** bonds, DayCounter* dayCounter, FittedBondDiscountCurveFittingMethod* fittingMethod, double accuracy, unsigned maxEvaluations, unsigned guessLen, double *guess, double simplexLambda, char **e) {-  try {return ret(new QlFittedBondDiscountCurve(alloc(new FittedBondDiscountCurve(Date(referenceDate), qlVector(bonds, bondsLen), *arg(dayCounter), *arg(fittingMethod), accuracy, maxEvaluations, Array(guess, guess+guessLen), simplexLambda))));-  } catch (std::exception& er) {return handleException<QlFittedBondDiscountCurve*>(e, er);}}--double qlFittedBondDiscountCurveFittingMethodMinimumCostValue(QlFittedBondDiscountCurve *o, char **e) {try {return (*arg(o))->fitResults().minimumCostValue();} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlFittedBondDiscountCurveFittingMethodNumberOfIterations(QlFittedBondDiscountCurve *o, char **e) {try {return (*arg(o))->fitResults().numberOfIterations();} catch (std::exception& er) {return handleException<int>(e, er);}}-void qlFreeYieldTermStructure(QlYieldTermStructure *ts) {del(ts);}--// A relinkable handle, empty when `initial` is null. An empty handle is meaningful, not an-// error: it is what makes a rate helper discount off the curve being bootstrapped.-QlRelinkableYieldTermStructure* qlRelinkableYieldTermStructure(QlYieldTermStructure *initial, char **e) {-  try {return ret(initial ? new QlRelinkableYieldTermStructure(handlePtr(arg(initial)))-                          : new QlRelinkableYieldTermStructure());-  } catch (std::exception& er) {return handleException<QlRelinkableYieldTermStructure*>(e, er);}}-void qlFreeRelinkableYieldTermStructure(QlRelinkableYieldTermStructure *o) {del(o);}-void qlRelinkableYieldTermStructureLinkTo(QlRelinkableYieldTermStructure *o, QlYieldTermStructure *c, char **e) {-  try {arg(o)->linkTo(handlePtr(arg(c)));} catch (std::exception& er) {(void)handleException<void *>(e, er);}}-// The same-T Handle copy shares link_, so dependents built from this upcast follow relinking.-QlYieldTermStructure* qlRelinkableYieldTermStructureAsYieldTermStructure(QlRelinkableYieldTermStructure *o) {-  return ret(new QlYieldTermStructure(*arg(o)));}-void qlFreeFittedBondDiscountCurve(QlFittedBondDiscountCurve *o) {del(o);}-QlYieldTermStructure* qlFittedBondDiscountCurveAsYieldTermStructure(QlFittedBondDiscountCurve *o) {return ret(new QlYieldTermStructure(*arg(o)));}-void qlFreeBondHelper(QlBondHelper *o) {del(o);}-QlRateHelper* qlBondHelperAsRateHelper(QlBondHelper *o) {return ret(new QlRateHelper(*arg(o)));}-void qlFreeSwapRateHelper(QlSwapRateHelper *o) {del(o);}-QlRateHelper* qlSwapRateHelperAsRateHelper(QlSwapRateHelper *o) {return ret(new QlRateHelper(*arg(o)));}-void qlFreeOISRateHelper(QlOISRateHelper *o) {del(o);}-QlRateHelper* qlOISRateHelperAsRateHelper(QlOISRateHelper *o) {return ret(new QlRateHelper(*arg(o)));}-void qlFreeTermStructure(QlTermStructure *o) {del(o);}-QlTermStructure* qlYieldTermStructureAsTermStructure(QlYieldTermStructure *o) {return ret(new QlTermStructure(handlePtr(arg(o))));}--QlBondHelper* qlBondHelper(QlQuote* cleanPrice, QlBond* bond, int priceType, char **e) {-  try {return ret(new QlBondHelper(alloc(new BondHelper(*arg(cleanPrice), *arg(bond), (Bond::Price::Type)priceType))));-  } catch (std::exception& er) {return handleException<QlBondHelper*>(e, er);}}-QlOISRateHelper* qlOISRateHelper(unsigned settlementDays, int l, int u, QlQuote* fixedRate, QlOvernightIndex* overnightIndex, QlYieldTermStructure* discountingCurve,-  int telescopicValueDates, int paymentLag, int paymentConvention, int paymentFrequency, Calendar* paymentCalendar,-  int fl, int fu, QlQuote* overnightSpread, int pillar, int customPillarDate, int averagingMethod, int endOfMonth, int fixedPaymentFrequency,-  Calendar* fixedCalendar, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift,-  QlFloatingRateCouponPricer* pricer, int rule, Calendar* overnightCalendar, int convention, char **e) {-  try {return ret(new QlOISRateHelper(alloc(new OISRateHelper(settlementDays, Period(l, (TimeUnit)u), *arg(fixedRate), *arg(overnightIndex), qlNullableHandle(arg(discountingCurve)),-    telescopicValueDates, paymentLag, (BusinessDayConvention)paymentConvention, (Frequency)paymentFrequency, *arg(paymentCalendar),-    Period(fl, (TimeUnit)fu),-    overnightSpread ? std::variant<Spread, Handle<Quote>>(*arg(overnightSpread)) : std::variant<Spread, Handle<Quote>>(Spread(0.0)),-    (Pillar::Choice)pillar, qlNullableDate(customPillarDate), (RateAveraging::Type)averagingMethod, qlOptBool(endOfMonth),-    fixedPaymentFrequency < 0 ? ext::optional<Frequency>() : ext::optional<Frequency>((Frequency)fixedPaymentFrequency),-    *arg(fixedCalendar), lookbackDays, lockoutDays, applyObservationShift,-    pricer ? *arg(pricer) : ext::shared_ptr<FloatingRateCouponPricer>(), (DateGeneration::Rule)rule, *arg(overnightCalendar), (BusinessDayConvention)convention))));-  } catch (std::exception& er) {return handleException<QlOISRateHelper*>(e, er);}}-QlOISRateHelper* qlOISRateHelper2(int start, int end, QlQuote* fixedRate, QlOvernightIndex* overnightIndex, QlYieldTermStructure* discountingCurve,-  int telescopicValueDates, int paymentLag, int paymentConvention, int paymentFrequency, Calendar* paymentCalendar,-  QlQuote* overnightSpread, int pillar, int customPillarDate, int averagingMethod, int endOfMonth, int fixedPaymentFrequency,-  Calendar* fixedCalendar, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift,-  QlFloatingRateCouponPricer* pricer, int rule, Calendar* overnightCalendar, int convention, char **e) {-    try {return ret(new QlOISRateHelper(alloc(new OISRateHelper(Date(start), Date(end), *arg(fixedRate), *arg(overnightIndex), qlNullableHandle(arg(discountingCurve)),-    telescopicValueDates, paymentLag, (BusinessDayConvention)paymentConvention, (Frequency)paymentFrequency, *arg(paymentCalendar),-    overnightSpread ? std::variant<Spread, Handle<Quote>>(*arg(overnightSpread)) : std::variant<Spread, Handle<Quote>>(Spread(0.0)),-    (Pillar::Choice)pillar, qlNullableDate(customPillarDate), (RateAveraging::Type)averagingMethod, qlOptBool(endOfMonth),-    fixedPaymentFrequency < 0 ? ext::optional<Frequency>() : ext::optional<Frequency>((Frequency)fixedPaymentFrequency),-    *arg(fixedCalendar), lookbackDays, lockoutDays, applyObservationShift,-    pricer ? *arg(pricer) : ext::shared_ptr<FloatingRateCouponPricer>(), (DateGeneration::Rule)rule, *arg(overnightCalendar), (BusinessDayConvention)convention))));-  } catch (std::exception& er) {return handleException<QlOISRateHelper*>(e, er);}}-QlSwapRateHelper* qlSwapRateHelper(QlQuote* rate, QlSwapIndex* swapIndex, QlQuote* spread, int fl, int fu, QlYieldTermStructure* discountingCurve,-  int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons, QlFloatingRateCouponPricer *couponPricer, char **e) {-  try {return ret(new QlSwapRateHelper(alloc(new SwapRateHelper(*arg(rate), *arg(swapIndex), qlNullableHandle(arg(spread)), Period(fl, (TimeUnit)fu), qlNullableHandle(arg(discountingCurve)),-          (Pillar::Choice)pillar, qlNullableDate(customPillarDate), endOfMonth,-          qlOptBool(useIndexedCoupons),-          couponPricer ? *arg(couponPricer) : ext::shared_ptr<FloatingRateCouponPricer>()))));-  } catch (std::exception& er) {return handleException<QlSwapRateHelper*>(e, er);}}--QlYieldTermStructure* qlForwardSpreadedTermStructure(QlYieldTermStructure* x0, QlQuote* spread, char **e) {-  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new ForwardSpreadedTermStructure(*arg(x0), *arg(spread))))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}--QlYieldTermStructure* qlZeroSpreadedTermStructure(QlYieldTermStructure* x0, QlQuote* spread, int comp, int freq, char **e) {-  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new ZeroSpreadedTermStructure(*arg(x0), *arg(spread), (Compounding)comp, (Frequency)freq)))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}--QlRateHelper* qlBMASwapRateHelper(QlQuote* liborFraction, int tl, int tu, unsigned settlementDays, Calendar* calendar, int bl, int bu, int bmaConvention, DayCounter* bmaDayCount, QlBMAIndex* bmaIndex, QlIborIndex* index, char **e) {-  try {return ret(new QlRateHelper(alloc(new BMASwapRateHelper(*arg(liborFraction), Period(tl, (TimeUnit)tu), settlementDays, *arg(calendar), Period(bl, (TimeUnit)bu), (BusinessDayConvention)bmaConvention, *arg(bmaDayCount), *arg(bmaIndex), *arg(index)))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlRateHelper* qlDepositRateHelper1(QlQuote* rate, QlIborIndex* iborIndex, char **e) {-  try {return ret(new QlRateHelper(alloc(new DepositRateHelper(*arg(rate), *arg(iborIndex)))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlRateHelper* qlFraRateHelper1(QlQuote* rate, unsigned monthsToStart, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, char **e) {-  try {return ret(new QlRateHelper(alloc(new FraRateHelper(*arg(rate), monthsToStart, *arg(iborIndex), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlRateHelper* qlFraRateHelper2(QlQuote* rate, int l, int u, unsigned lengthInMonths, unsigned fixingDays, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, int pillar, int customPillarDate, int useIndexedCoupon, char **e) {-  try {return ret(new QlRateHelper(alloc(new FraRateHelper(*arg(rate), Period(l, (TimeUnit)u), lengthInMonths, fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth, *arg(dayCounter), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlRateHelper* qlFraRateHelper3(QlQuote* rate, int l, int u, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, char **e) {-  try {return ret(new QlRateHelper(alloc(new FraRateHelper(*arg(rate), Period(l, (TimeUnit)u), *arg(iborIndex), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-QlFuturesRateHelper* qlFuturesRateHelper1(QlQuote* price, int immStartDate, int endDate, DayCounter* dayCounter, QlQuote* convexityAdjustment, int type, char **e) {-  try {return ret(new QlFuturesRateHelper(alloc(new FuturesRateHelper(*arg(price), Date(immStartDate), Date(endDate), *arg(dayCounter), qlNullableHandle(arg(convexityAdjustment)), (Futures::Type)type))));-  } catch (std::exception& er) {return handleException<QlFuturesRateHelper*>(e, er);}}-QlFuturesRateHelper* qlFuturesRateHelper2(QlQuote* price, int immDate, QlIborIndex* iborIndex, QlQuote* convexityAdjustment, int type, char **e) {-  try {return ret(new QlFuturesRateHelper(alloc(new FuturesRateHelper(*arg(price), Date(immDate), *arg(iborIndex), qlNullableHandle(arg(convexityAdjustment)), (Futures::Type)type))));-  } catch (std::exception& er) {return handleException<QlFuturesRateHelper*>(e, er);}}-QlFuturesRateHelper* qlFuturesRateHelper(QlQuote* price, int immDate, unsigned lengthInMonths, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, QlQuote* convexityAdjustment, int type, char **e) {-  try {return ret(new QlFuturesRateHelper(alloc(new FuturesRateHelper(*arg(price), Date(immDate), lengthInMonths, *arg(calendar), (BusinessDayConvention)convention, endOfMonth, *arg(dayCounter), qlNullableHandle(arg(convexityAdjustment)), (Futures::Type)type))));-  } catch (std::exception& er) {return handleException<QlFuturesRateHelper*>(e, er);}}-void qlFreeFuturesRateHelper(QlFuturesRateHelper *o) {del(o);}-QlRateHelper* qlFuturesRateHelperAsRateHelper(QlFuturesRateHelper *o) {return ret(new QlRateHelper(*arg(o)));}-double qlFuturesRateHelperConvexityAdjustment(QlFuturesRateHelper *o, char **e) {-  try {return (*arg(o))->convexityAdjustment();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlOvernightIndexFutureRateHelper* qlOvernightIndexFutureRateHelper(QlQuote* price, int valueDate, int maturityDate, QlOvernightIndex* overnightIndex, QlQuote* convexityAdjustment, int averagingMethod, int pillar, int customPillarDate, char **e) {-  try {return ret(new QlOvernightIndexFutureRateHelper(alloc(new OvernightIndexFutureRateHelper(*arg(price), Date(valueDate), Date(maturityDate),-      *arg(overnightIndex), qlNullableHandle(arg(convexityAdjustment)), (RateAveraging::Type)averagingMethod,-      (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));-  } catch (std::exception& er) {return handleException<QlOvernightIndexFutureRateHelper*>(e, er);}}-void qlFreeOvernightIndexFutureRateHelper(QlOvernightIndexFutureRateHelper *o) {del(o);}-QlRateHelper* qlOvernightIndexFutureRateHelperAsRateHelper(QlOvernightIndexFutureRateHelper *o) {return ret(new QlRateHelper(*arg(o)));}-double qlOvernightIndexFutureRateHelperConvexityAdjustment(QlOvernightIndexFutureRateHelper *o, char **e) {-  try {return (*arg(o))->convexityAdjustment();-  } catch (std::exception& er) {return handleException<double>(e, er);}}-QlRateHelper* qlSofrFutureRateHelper(QlQuote* price, int month, int year, int freq, QlQuote* convexityAdjustment, int pillar, int customPillarDate, char **e) {-  try {return ret(new QlRateHelper(alloc(new SofrFutureRateHelper(-      std::variant<Rate, Handle<Quote>>(*arg(price)), (Month)month, year, (Frequency)freq,-      convexityAdjustment ? std::variant<Rate, Handle<Quote>>(*arg(convexityAdjustment)) : std::variant<Rate, Handle<Quote>>(Rate(0.0)),-      (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}-double qlRateHelperImpliedQuote(QlRateHelper* o, char **e) {try {return (*arg(o))->impliedQuote();} catch (std::exception& er) {return handleException<double>(e, er);}}-QlBond* qlBondHelperBond(QlBondHelper* o, char **e) {try {return ret(new QlBond((*arg(o))->bond()));} catch (std::exception& er) {return handleException<QlBond*>(e, er);}}-QlOvernightIndexedSwap* qlOISRateHelperSwap(QlOISRateHelper* o, char **e) {-  try {return ret(new QlOvernightIndexedSwap((*arg(o))->swap()));-  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwap*>(e, er);}}-QlVanillaSwap* qlSwapRateHelperSwap(QlSwapRateHelper* o, char **e) {try {return ret(new QlVanillaSwap((*arg(o))->swap()));} catch (std::exception& er) {return handleException<QlVanillaSwap*>(e, er);} }-int qlTermStructureReferenceDate(QlTermStructure* o, char **e) {try {return (*arg(o))->referenceDate().serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlTermStructureMaxDate(QlTermStructure* o, char **e) {try {return (*arg(o))->maxDate().serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlTermStructureAllowsExtrapolation(QlTermStructure* o) {return (*arg(o))->allowsExtrapolation();}-void qlTermStructureSetExtrapolation(QlTermStructure* o, int enabled) {(*arg(o))->enableExtrapolation(enabled);}-double qlTermStructureTimeFromReference(QlTermStructure* o, int date, char **e) {try {return (*arg(o))->timeFromReference(Date(date));} catch (std::exception& er) {return handleException<double>(e, er);}}-QlYieldTermStructure* qlImpliedTermStructure(QlYieldTermStructure* x0, int referenceDate, char **e) {-  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new ImpliedTermStructure(*arg(x0), Date(referenceDate))))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}--QlYieldTermStructure* qlPiecewiseZeroSpreadedTermStructure(QlYieldTermStructure* x0, unsigned spreadsLen, QlQuote** spreads, unsigned datesLen, int* dates, int comp, int freq, int interpolator, int approximator, int approximatorArg, char **e) {-  try {-    YieldTermStructure *ts = qlPiecewiseZeroSpreadedTermStructureAux(qlNullableHandle(arg(x0)), qlHandleVector(spreads, spreadsLen), qlDateVector(dates, datesLen), (Compounding)comp, (Frequency)freq, interpolator, approximator, approximatorArg);-    return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(ts))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}-QlYieldTermStructure* qlQuantoTermStructure(QlYieldTermStructure* underlyingDividendTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* foreignRiskFreeTS, QlBlackVolTermStructure* underlyingBlackVolTS, double strike, QlBlackVolTermStructure* exchRateBlackVolTS, double exchRateATMlevel, double underlyingExchRateCorrelation, char **e) {-  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new QuantoTermStructure(*arg(underlyingDividendTS), *arg(riskFreeTS), *arg(foreignRiskFreeTS), *arg(underlyingBlackVolTS), strike, *arg(exchRateBlackVolTS), exchRateATMlevel, underlyingExchRateCorrelation)))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}--QlYieldTermStructure* qlUltimateForwardTermStructure(QlYieldTermStructure* x0, QlQuote* lastLiquidForwardRate, QlQuote* ultimateForwardRate, int fspLen, int fspUnit, double alpha, int roundingDigits, int compounding, int frequency, char **e) {-  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new UltimateForwardTermStructure(*arg(x0), *arg(lastLiquidForwardRate), *arg(ultimateForwardRate), Period(fspLen, (TimeUnit)fspUnit), alpha,-      roundingDigits == Null<Integer>() ? ext::optional<Integer>() : ext::optional<Integer>(roundingDigits), (Compounding)compounding, (Frequency)frequency)))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}--QlYieldTermStructure* qlInterpolatedSpreadDiscountCurve(QlYieldTermStructure* baseCurve, unsigned dfsLen, double *dfs, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, char **e) {-  try {-    YieldTermStructure *ts = qlInterpolatedSpreadDiscountCurveAux(qlNullableHandle(arg(baseCurve)), qlDateVector(dates, datesLen), std::vector<double>(dfs, dfs+dfsLen), interpolator, approximator, approximatorArg);-    return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(ts))));-  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}--QlRateHelper* qlMultipleResetsSwapRateHelper(unsigned settlementDays, int tenorLen, int tenorUnit, QlQuote* fixedRate, QlIborIndex* iborIndex, unsigned resetsPerCoupon, QlYieldTermStructure* discountingCurve, int averagingMethod, double spread, int fixedFrequency, DayCounter* fixedDayCount, int fixedConvention, char **e) {-  try {return ret(new QlRateHelper(alloc(new MultipleResetsSwapRateHelper(settlementDays, Period(tenorLen, (TimeUnit)tenorUnit), *arg(fixedRate), *arg(iborIndex), resetsPerCoupon,-      qlNullableHandle(arg(discountingCurve)), (RateAveraging::Type)averagingMethod, spread, (Frequency)fixedFrequency, *arg(fixedDayCount), (BusinessDayConvention)fixedConvention))));-  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}--void qlIndexAddFixing(QlIndex *i, int date, double fix, int overwrite, char **e) {try {(*arg(i))->addFixing(Date(date), fix, overwrite);} catch (std::exception& er) {(void)handleException<void *>(e, er);}}-double qlIndexFixing(QlIndex *i, int date, int forecastTodaysFixing, char **e) {try {return (*arg(i))->fixing(Date(date), forecastTodaysFixing);} catch (std::exception& er) {return handleException<double>(e, er);}}-int qlIndexHasHistoricalFixing(QlIndex *i, int date, char **e) {try {return (*arg(i))->hasHistoricalFixing(Date(date));} catch (std::exception& er) {return handleException<int>(e, er);}}-int qlIndexIsValidFixingDate(QlIndex *i, int date, char **e) {try {return (*arg(i))->isValidFixingDate(Date(date));} catch (std::exception& er) {return handleException<int>(e, er);}}-void qlIndexAddFixings(QlIndex *i, unsigned datesLen, int *dates, double *values, int overwrite, char **e) {-  try {std::vector<Date> ds = qlDateVector(dates, datesLen);(*arg(i))->addFixings(ds.begin(), ds.end(), values, overwrite);-  } catch (std::exception& er) {(void)handleException<void *>(e, er);}}-void qlIndexClearFixings(QlIndex *i, char **e) {try {(*arg(i))->clearFixings();} catch (std::exception& er) {(void)handleException<void *>(e, er);}}-void qlIndexFixingHistory(QlIndex *i, unsigned *datesLen, int **dates, unsigned *valuesLen, double **values, char **e) {-  OutArrayResult<int> dateResult(datesLen, dates);-  OutArrayResult<double> valueResult(valuesLen, values);-  try {-    const std::string& name = (*arg(i))->name();-    const std::vector<std::string> names = IndexManager::instance().histories();-    if (std::none_of(names.begin(), names.end(), [&](const std::string& candidate) {-          return sameIndexName(candidate, name);-        }))-      return;-    const TimeSeries<Real>& history = (*arg(i))->timeSeries();-    const std::vector<Date> historyDates = history.dates();-    const std::vector<Real> historyValues = history.values();-    int *ds = dateResult.allocate((unsigned)historyDates.size());-    double *vs = valueResult.allocate((unsigned)historyValues.size());-    for (unsigned n = 0; n < historyDates.size(); ++n) ds[n] = historyDates[n].serialNumber();-    for (unsigned n = 0; n < historyValues.size(); ++n) vs[n] = historyValues[n];-    dateResult.commit(); valueResult.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}}-void qlIndexManagerHistories(unsigned *count, char ***names, char **e) {-  OutStringArrayResult result(count, names);-  try {-    const std::vector<std::string> histories = IndexManager::instance().histories();-    const unsigned n = (unsigned)histories.size();-    char **ns = result.allocate(n);-    for (unsigned i = 0; i < n; ++i) ns[i] = tracedup(histories[i].c_str());-    result.commit();-  } catch (std::exception& er) {*e = tracedup(er.what());}}-void qlIndexManagerClearHistories(char **e) {-  try {IndexManager::instance().clearHistories();}-  catch (std::exception& er) {*e = tracedup(er.what());}}-// must match with the order of qlEnumObjects.h:LiborSwapIndexType-static const makeSwapIdx swapIndices[] = {-    &makeSwapIndex<ChfLiborSwapIsdaFix>-  , &makeSwapIndex<EurLiborSwapIfrFix>-  , &makeSwapIndex<EurLiborSwapIsdaFixA>-  , &makeSwapIndex<EurLiborSwapIsdaFixB>-  , &makeSwapIndex<EuriborSwapIfrFix>-  , &makeSwapIndex<EuriborSwapIsdaFixA>-  , &makeSwapIndex<EuriborSwapIsdaFixB>-  , &makeSwapIndex<GbpLiborSwapIsdaFix>-  , &makeSwapIndex<JpyLiborSwapIsdaFixAm>-  , &makeSwapIndex<JpyLiborSwapIsdaFixPm>-  , &makeSwapIndex<UsdLiborSwapIsdaFixAm>-  , &makeSwapIndex<UsdLiborSwapIsdaFixPm>-};--QlSwapIndex* qlCreateLiborSwapIndex(int index, int l, int u, QlYieldTermStructure* h1, QlYieldTermStructure* h2, char **e) {-  try {-    if (index < 0 || index >= (int)std::size(swapIndices))-      QL_FAIL("Invalid swap index index" << index);-    QlYieldTermStructure ts1 = qlNullableHandle(h1);-    QlYieldTermStructure ts2 = qlNullableHandle(h2);-    SwapIndex *i = swapIndices[index](Period(l, (TimeUnit)u), ts1, ts2);-    return ret(new QlSwapIndex(alloc(i)));-  } catch (std::exception& er) {return handleException<QlSwapIndex*>(e, er);}}--void qlFreeIndex(QlIndex *i) {del(i);}-void qlFreeInterestRateIndex(QlInterestRateIndex *o) {del(o);}-QlIndex* qlInterestRateIndexAsIndex(QlInterestRateIndex *o) {return ret(new QlIndex(*arg(o)));}-void qlFreeSwapIndex(QlSwapIndex *o) {del(o);}-QlInterestRateIndex* qlSwapIndexAsInterestRateIndex(QlSwapIndex *o) {return ret(new QlInterestRateIndex(*arg(o)));}-void qlFreeBMAIndex(QlBMAIndex *o) {del(o);}-QlInterestRateIndex* qlBMAIndexAsInterestRateIndex(QlBMAIndex *o) {return ret(new QlInterestRateIndex(*arg(o)));}-void qlFreeOvernightIndexedSwapIndex(QlOvernightIndexedSwapIndex *o) {del(o);}-QlSwapIndex* qlOvernightIndexedSwapIndexAsSwapIndex(QlOvernightIndexedSwapIndex *o) {return ret(new QlSwapIndex(*arg(o)));}--QlBMAIndex* qlBMAIndex(QlYieldTermStructure* h, char **e) {-  try {return ret(new QlBMAIndex(alloc(new BMAIndex(qlNullableHandle(arg(h))))));-  } catch (std::exception& er) {return handleException<QlBMAIndex*>(e, er);}}-QlOvernightIndexedSwapIndex* qlOvernightIndexedSwapIndex(char* familyName, int l, int u, unsigned settlementDays, Currency* currency, QlOvernightIndex* overnightIndex, int telescopicValueDates, int averagingMethod, char **e) {-  try {return ret(new QlOvernightIndexedSwapIndex(alloc(new OvernightIndexedSwapIndex(std::string(arg(familyName)), Period(l, (TimeUnit)u), settlementDays, *arg(currency), *arg(overnightIndex), telescopicValueDates, (RateAveraging::Type)averagingMethod))));-  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwapIndex*>(e, er);}}-QlSwapIndex* qlSwapIndex1(char* familyName, int l, int u, unsigned settlementDays, Currency* currency, Calendar* calendar, int fl, int fu, int fixedLegConvention, DayCounter* fixedLegDayCounter, QlIborIndex* iborIndex, QlYieldTermStructure* discountingTermStructure, char **e) {-  try {return ret(new QlSwapIndex(alloc(new SwapIndex(std::string(arg(familyName)), Period(l, (TimeUnit)u), settlementDays, *arg(currency), *arg(calendar), Period(fl, (TimeUnit)fu), (BusinessDayConvention)fixedLegConvention, *arg(fixedLegDayCounter), *arg(iborIndex), *arg(discountingTermStructure)))));-  } catch (std::exception& er) {return handleException<QlSwapIndex*>(e, er);}}-QlSwapIndex* qlSwapIndex(char* familyName, int l, int u, unsigned settlementDays, Currency* currency, Calendar* calendar, int fl, int fu, int fixedLegConvention, DayCounter* fixedLegDayCounter, QlIborIndex* iborIndex, char **e) {-  try {return ret(new QlSwapIndex(alloc(new SwapIndex(std::string(arg(familyName)), Period(l, (TimeUnit)u), settlementDays, *arg(currency), *arg(calendar), Period(fl, (TimeUnit)fu), (BusinessDayConvention)fixedLegConvention, *arg(fixedLegDayCounter), *arg(iborIndex)))));-  } catch (std::exception& er) {return handleException<QlSwapIndex*>(e, er);}}-Schedule* qlBMAIndexFixingSchedule(QlBMAIndex* o, int start, int end, char **e) {-  try {return ret(new Schedule((*arg(o))->fixingSchedule(Date(start), Date(end))));-  } catch (std::exception& er) {return handleException<Schedule*>(e, er);}}-QlOvernightIndexedSwap* qlOvernightIndexedSwapIndexUnderlyingSwap(QlOvernightIndexedSwapIndex* o, int fixingDate, char **e) {-  try {return ret(new QlOvernightIndexedSwap((*arg(o))->underlyingSwap(Date(fixingDate))));-  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwap*>(e, er);}}-QlVanillaSwap* qlSwapIndexUnderlyingSwap(QlSwapIndex* o, int fixingDate, char **e) {-  try {return ret(new QlVanillaSwap((*arg(o))->underlyingSwap(Date(fixingDate))));-  } catch (std::exception& er) {return handleException<QlVanillaSwap*>(e, er);}}-double qlInterestRateIndexForecastFixing(QlInterestRateIndex* o, int fixingDate, char **e) {-  try {return (*arg(o))->forecastFixing(Date(fixingDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-int qlInterestRateIndexFixingDate(QlInterestRateIndex* o, int valueDate, char **e) {-  try {return (*arg(o))->fixingDate(Date(valueDate)).serialNumber();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlInterestRateIndexValueDate(QlInterestRateIndex* o, int fixingDate, char **e) {-  try {return (*arg(o))->valueDate(Date(fixingDate)).serialNumber();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlInterestRateIndexMaturityDate(QlInterestRateIndex* o, int valueDate, char **e) {-  try {return (*arg(o))->maturityDate(Date(valueDate)).serialNumber();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-Calendar* qlIndexFixingCalendar(QlIndex* o, char **e) {-  try {return alloc(new Calendar((*arg(o))->fixingCalendar()));-  } catch (std::exception& er) {return handleException<Calendar*>(e, er);}}-Currency* qlInterestRateIndexCurrency(QlInterestRateIndex* o, char **e) {-  try {return alloc(new Currency((*arg(o))->currency()));-  } catch (std::exception& er) {return handleException<Currency*>(e, er);}}-DayCounter* qlInterestRateIndexDayCounter(QlInterestRateIndex* o, char **e) {-  try {return alloc(new DayCounter((*arg(o))->dayCounter()));-  } catch (std::exception& er) {return handleException<DayCounter*>(e, er);}}-unsigned qlInterestRateIndexFixingDays(QlInterestRateIndex* o) {return (*arg(o))->fixingDays();}--int qlInterestRateIndexTenor(QlInterestRateIndex* o, int *u, char **e) {-  try {const Period& p = (*arg(o))->tenor();*u = p.units();return p.length();-  } catch (std::exception& er) {return handleException<int>(e, er);}}-QlIborIndex *qlIborIndex(char *name, int l, int u, unsigned settlDays, Currency *ccy, Calendar *cal, int conv, int eom, DayCounter *dayCount,-  QlYieldTermStructure *fwd, char **e) {-  try {-    return ret(new QlIborIndex(alloc(new IborIndex(name, Period(l, (TimeUnit)u),-	  settlDays, *arg(ccy), *arg(cal), (BusinessDayConvention) conv,-	  eom, *arg(dayCount), qlNullableHandle(fwd)))));-  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}--const char* qlIndexName(QlIndex *index) {std::string name = (*arg(index))->name(); return tracedup(name.c_str());}-void qlFreeIborIndex(QlIborIndex *i) {del(i);}--QlIborIndex *qlLibor(char *name, int l, int u, unsigned settlDays,-    Currency *ccy, Calendar *cal, DayCounter *dc, QlYieldTermStructure *fwd, char **e) {-  try {return ret(new QlIborIndex(alloc(new Libor(name, Period(l, (TimeUnit)u), settlDays,-            *arg(ccy), *arg(cal), *arg(dc), qlNullableHandle(fwd)))));-  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}-QlIborIndex *qlDailyTenorLibor(char *name, unsigned settlDays,-    Currency *ccy, Calendar *cal, DayCounter *dc,-    QlYieldTermStructure *fwd, char **e) {-  try {return ret(new QlIborIndex(alloc(new DailyTenorLibor(name, settlDays,-            *arg(ccy), *arg(cal), *arg(dc), qlNullableHandle(fwd)))));-  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}-QlIborIndex *qlCustomIborIndex(char *name, int l, int u, unsigned settlDays,-    Currency *ccy, Calendar *fixingCal, Calendar *valueCal, Calendar *maturityCal,-    int conv, int eom, DayCounter *dayCount, QlYieldTermStructure *fwd, char **e) {-  try {-    return ret(new QlIborIndex(alloc(new CustomIborIndex(name, Period(l, (TimeUnit)u),-      settlDays, *arg(ccy), *arg(fixingCal), *arg(valueCal), *arg(maturityCal),-      (BusinessDayConvention) conv, eom, *arg(dayCount), qlNullableHandle(fwd)))));-  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}-QlOvernightIndex *qlOvernightIndex(char *name, unsigned settlDays, Currency *ccy,-    Calendar *cal, DayCounter *dayCount, QlYieldTermStructure *fwd, char **e) {-  try {return ret(new QlOvernightIndex(alloc(new OvernightIndex(name, settlDays,-            *arg(ccy), *arg(cal), *arg(dayCount), qlNullableHandle(fwd)))));-  } catch (std::exception& er) {return handleException<QlOvernightIndex *>(e, er);}}--// must match the order of qlEnumObjects.h:IborIndexType (Standard block), then-// IborDailyTenorIndexType (DailyTenor block), then IborONIndexType (Overnight block) ---// see deriveIborConstructor in QuantLib/Internal/Syntax.hs for how the three Haskell-side-// enums are stitched back into a single flat offset into this array.-static const makeIborIdx iborIndices[] = {-    // -- Standard block (IborIndexType) ---    &makeIborIndex<Bbsw>-  , &makeIborIndex<Bibor>-  , &makeIborIndex<Bkbm>-  , &makeIborIndex<Cdor>-  , &makeIborIndex<EURLibor>-  , &makeIborIndex<AUDLibor>-  , &makeIborIndex<CADLibor>-  , &makeIborIndex<CHFLibor>-  , &makeIborIndex<DKKLibor>-  , &makeIborIndex<GBPLibor>-  , &makeIborIndex<JPYLibor>-  , &makeIborIndex<NZDLibor>-  , &makeIborIndex<SEKLibor>-  , &makeIborIndex<USDLibor>-  , &makeIborIndex<Euribor>-  , &makeIborIndex<Euribor365>-  , &makeIborIndex<Jibar>-  , &makeIborIndex<Mosprime>-  , &makeIborIndex<Pribor>-  , &makeIborIndex<Robor>-  , &makeIborIndex<Shibor>-  , &makeIborIndex<THBFIX>-  , &makeIborIndex<TRLibor>-  , &makeIborIndex<Tibor>-  , &makeIborIndex<Wibor>-  , &makeIborIndex<Zibor>-  , &makeIborIndex<Nibor>-    // -- DailyTenor block (IborDailyTenorIndexType) ---  , &makeIborIndexMonths<DailyTenorEURLibor>-  , &makeIborIndexMonths<DailyTenorCHFLibor>-  , &makeIborIndexMonths<DailyTenorGBPLibor>-  , &makeIborIndexMonths<DailyTenorJPYLibor>-  , &makeIborIndexMonths<DailyTenorUSDLibor>-    // -- Overnight block (IborONIndexType) ---  , &makeIborIndexTS<CADLiborON>-  , &makeIborIndexTS<EURLiborON>-  , &makeIborIndexTS<GBPLiborON>-  , &makeIborIndexTS<USDLiborON>-};--QlIborIndex *qlCreateIbor(int index, int l, int u, QlYieldTermStructure *fwd, char **e) {-  try {-    if (index < 0 || index >= (int)std::size(iborIndices))-      QL_FAIL("Invalid IBOR index index: " << index);-    QlYieldTermStructure ts = qlNullableHandle(fwd);-    IborIndex *i = iborIndices[index](l, u, ts);-    return ret(new QlIborIndex(alloc(i)));-  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}--// should match the order of qlEnumObjects.h:OvernightIborIndexType-static const makeOnIdx onIndices[] = {-    &makeONIndex<Aonia>-  , &makeONIndex<Eonia>-  , &makeONIndex<Estr>-  , &makeONIndex<FedFunds>-  , &makeONIndex<Nzocr>-  , &makeONIndex<Sofr>-  , &makeONIndex<Sonia>-  , &makeONIndex<Cdi>-  , &makeONIndex<Corra>-  , &makeONIndex<Kofr>-  , &makeONIndex<Destr>-  , &makeONIndex<Swestr>-  , &makeONIndex<Shir>-  , &makeONIndex<Tonar>-  , &makeONIndex<Saron>-  , &makeONIndex<Zaronia>-};--QlOvernightIndex *qlCreateONIndex(int index, QlYieldTermStructure *fwd, char **e) {-  try {-    if (index < 0 || index >= (int)std::size(onIndices))-      QL_FAIL("Invalid O/N index index" << index);-    QlYieldTermStructure ts = qlNullableHandle(fwd);-    OvernightIndex *i = onIndices[index](ts);-    return ret(new QlOvernightIndex(alloc(i)));-  } catch (std::exception& er) {return handleException<QlOvernightIndex *>(e, er);}}--QlInterestRateIndex* qlIborIndexAsInterestRateIndex(QlIborIndex *o) {return ret(new QlInterestRateIndex(*arg(o)));}-void qlFreeOvernightIndex(QlOvernightIndex *o) {del(o);}-QlIborIndex* qlOvernightIndexAsIborIndex(QlOvernightIndex *o) {return ret(new QlIborIndex(*arg(o)));}-int qlIborIndexBusinessDayConvention(QlIborIndex* o) {return (*arg(o))->businessDayConvention();}-int qlIborIndexEndOfMonth(QlIborIndex* o) {return (*arg(o))->endOfMonth();}--QlEquityIndex *qlEquityIndex(char *name, Calendar *fixingCalendar, Currency *ccy, QlYieldTermStructure *interest, QlYieldTermStructure *dividend, QlQuote *spot, char **e) {-  try {-    return ret(new QlEquityIndex(alloc(new EquityIndex(name, *arg(fixingCalendar), *arg(ccy),-      qlNullableHandle(interest), qlNullableHandle(dividend), qlNullableHandle(spot)))));-  } catch (std::exception& er) {return handleException<QlEquityIndex *>(e, er);}}-void qlFreeEquityIndex(QlEquityIndex *o) {del(o);}-QlIndex* qlEquityIndexAsIndex(QlEquityIndex *o) {return ret(new QlIndex(*arg(o)));}-// currency()/equityInterestRateCurve()/equityDividendCurve()/spot() are all plain,-// never-mutated echoes of the constructor's own arguments (equityindex.hpp's inline getters-// each just `return foo_;`) -- not bound, per CLAUDE.md's trivial-getter rule.--// must match the order of qlEnumObjects.h:ZeroInflationIndexType-static const makeZeroInflIdx zeroInflationIndices[] = {-    []{return static_cast<ZeroInflationIndex *>(new AUCPI(Quarterly, false));} // AU CPI is published quarterly, unlike the other (monthly) named indices-  , &makeZeroInflationIndex<EUHICP>-  , &makeZeroInflationIndex<EUHICPXT>-  , &makeZeroInflationIndex<FRHICP>-  , &makeZeroInflationIndex<UKHICP>-  , &makeZeroInflationIndex<UKRPI>-  , &makeZeroInflationIndex<USCPI>-  , &makeZeroInflationIndex<ZACPI>-};--QlZeroInflationIndex *qlCreateZeroInflationIndex(int index, char **e) {-  try {-    if (index < 0 || index >= (int)std::size(zeroInflationIndices))-      QL_FAIL("Invalid zero inflation index index" << index);-    return ret(new QlZeroInflationIndex(alloc(zeroInflationIndices[index]())));-  } catch (std::exception& er) {return handleException<QlZeroInflationIndex *>(e, er);}}--// must match the order of qlEnumObjects.h:YoYInflationIndexType-static const makeYoYInflIdx yoyInflationIndices[] = {-    []{return static_cast<YoYInflationIndex *>(new YYAUCPI(Quarterly, false));}-  , &makeYoYInflationIndex<YYEUHICP>-  , &makeYoYInflationIndex<YYEUHICPXT>-  , &makeYoYInflationIndex<YYFRHICP>-  , &makeYoYInflationIndex<YYUKRPI>-  , &makeYoYInflationIndex<YYUSCPI>-  , &makeYoYInflationIndex<YYZACPI>-};--QlYoYInflationIndex *qlCreateYoYInflationIndex(int index, char **e) {-  try {-    if (index < 0 || index >= (int)std::size(yoyInflationIndices))-      QL_FAIL("Invalid year-on-year inflation index index" << index);-    return ret(new QlYoYInflationIndex(alloc(yoyInflationIndices[index]())));-  } catch (std::exception& er) {return handleException<QlYoYInflationIndex *>(e, er);}}--// must match the order of qlEnumObjects.h:RegionType-static const makeReg regions[] = {-    &makeRegion<AustraliaRegion>-  , &makeRegion<EURegion>-  , &makeRegion<FranceRegion>-  , &makeRegion<UKRegion>-  , &makeRegion<USRegion>-  , &makeRegion<ZARegion>-};-Region *qlRegion(int r, char **e) {-  try {-    if (r < 0 || r >= (int)std::size(regions)) QL_FAIL("Invalid region index " << r);-    return alloc(regions[r]());-  } catch (std::exception& er) {return handleException<Region*>(e, er);}}-Region *qlCreateRegion(char* name, char* code, char **e) {-  try {return allocAs<Region>(new CustomRegion(arg(name), arg(code)));-  } catch (std::exception& er) {return handleException<Region*>(e, er);}}-void qlFreeRegion(Region *o) {del(o);}-const char *qlRegionName(Region *o) {return tracedup(arg(o)->name().c_str());}--QlZeroInflationIndex *qlZeroInflationIndex(char *familyName, Region *region, int revised, int frequency,-    int availLagN, int availLagU, Currency *currency, QlZeroInflationTermStructure *ts, char **e) {-  try {return ret(new QlZeroInflationIndex(alloc(new ZeroInflationIndex(arg(familyName), *arg(region), revised,-          (Frequency)frequency, Period(availLagN, (TimeUnit)availLagU), *arg(currency), qlNullableHandle(ts)))));-  } catch (std::exception& er) {return handleException<QlZeroInflationIndex *>(e, er);}}-QlYoYInflationIndex *qlYoYInflationIndex(char *familyName, Region *region, int revised, int frequency,-    int availLagN, int availLagU, Currency *currency, QlYoYInflationTermStructure *ts, char **e) {-  try {return ret(new QlYoYInflationIndex(alloc(new YoYInflationIndex(arg(familyName), *arg(region), revised,-          (Frequency)frequency, Period(availLagN, (TimeUnit)availLagU), *arg(currency), qlNullableHandle(ts)))));-  } catch (std::exception& er) {return handleException<QlYoYInflationIndex *>(e, er);}}-QlYoYInflationIndex *qlYoYInflationIndexFromZero(QlZeroInflationIndex *underlying, QlYoYInflationTermStructure *ts, char **e) {-  try {return ret(new QlYoYInflationIndex(alloc(new YoYInflationIndex(*arg(underlying), qlNullableHandle(ts)))));-  } catch (std::exception& er) {return handleException<QlYoYInflationIndex *>(e, er);}}--void qlFreeInflationIndex(QlInflationIndex *o) {del(o);}-QlIndex* qlInflationIndexAsIndex(QlInflationIndex *o) {return ret(new QlIndex(*arg(o)));}-void qlFreeZeroInflationIndex(QlZeroInflationIndex *o) {del(o);}-QlInflationIndex* qlZeroInflationIndexAsInflationIndex(QlZeroInflationIndex *o) {return ret(new QlInflationIndex(*arg(o)));}-void qlFreeYoYInflationIndex(QlYoYInflationIndex *o) {del(o);}-QlInflationIndex* qlYoYInflationIndexAsInflationIndex(QlYoYInflationIndex *o) {return ret(new QlInflationIndex(*arg(o)));}--double qlZeroInflationIndexFixing(QlZeroInflationIndex* o, int fixingDate, char **e) {-  try {return (*arg(o))->fixing(Date(fixingDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-double qlYoYInflationIndexFixing(QlYoYInflationIndex* o, int fixingDate, char **e) {-  try {return (*arg(o))->fixing(Date(fixingDate));-  } catch (std::exception& er) {return handleException<double>(e, er);}}-// Both reach inflationPeriod(), which QL_FAILs on a frequency outside Annual..Monthly -- and the-// index constructors above take an unconstrained one -- so these need an error channel despite-// looking like plain getters.-int qlZeroInflationIndexNeedsForecast(QlZeroInflationIndex* o, int fixingDate, char **e) {-  try {return (*arg(o))->needsForecast(Date(fixingDate));-  } catch (std::exception& er) {return handleException<int>(e, er);}}-int qlYoYInflationIndexNeedsForecast(QlYoYInflationIndex* o, int fixingDate, char **e) {-  try {return (*arg(o))->needsForecast(Date(fixingDate));-  } catch (std::exception& er) {return handleException<int>(e, er);}}--/* YoYOptionletVolatilitySurface */--QlYoYOptionletVolatilitySurface *qlConstantYoYOptionletVolatility(QlQuote *v, unsigned settlementDays,-    Calendar *cal, int bdc, DayCounter *dc, int observationLagLen, int observationLagUnit, int frequency,-    int indexIsInterpolated, double minStrike, double maxStrike, int volType, double displacement, char **e) {-  try {return ret(new QlYoYOptionletVolatilitySurface(Handle<YoYOptionletVolatilitySurface>(-      shared_ptr<YoYOptionletVolatilitySurface>(alloc(new ConstantYoYOptionletVolatility(*arg(v), settlementDays, *arg(cal), (BusinessDayConvention)bdc,-        *arg(dc), Period(observationLagLen, (TimeUnit)observationLagUnit), (Frequency)frequency,-        (bool)indexIsInterpolated, minStrike, maxStrike, (VolatilityType)volType, displacement))))));-  } catch (std::exception& er) {return handleException<QlYoYOptionletVolatilitySurface*>(e, er);}}--void qlFreeYoYOptionletVolatilitySurface(QlYoYOptionletVolatilitySurface *p) {del(p);}--// Deliberate snapshot detach, same reasoning as qlOptionletVolatilityStructureAsVolatilityTermStructure.-QlVolatilityTermStructure *qlYoYOptionletVolatilitySurfaceAsVolatilityTermStructure(QlYoYOptionletVolatilitySurface *o) {-  return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}--// obsLagUnit < 0 is the "use my own observationLag" sentinel, matching the C++ default-// Period(-1, Days) -- same convention as qlOptionletStripper1's optionletFrequency.-double qlYoYOptionletVolatilitySurfaceVolatility(QlYoYOptionletVolatilitySurface *o, int maturityDate,-    double strike, int obsLagLen, int obsLagUnit, int extrapolate, char **e) {-  try {return handleRef(arg(o)).volatility(Date(maturityDate), strike,-      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--double qlYoYOptionletVolatilitySurfaceTotalVariance(QlYoYOptionletVolatilitySurface *o, int exerciseDate,-    double strike, int obsLagLen, int obsLagUnit, int extrapolate, char **e) {-  try {return handleRef(arg(o)).totalVariance(Date(exerciseDate), strike,-      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--/* YoY inflation cap/floor pricing engines */--QlPricingEngine *qlYoYInflationBlackCapFloorEngine(QlYoYInflationIndex *index, QlYoYOptionletVolatilitySurface *vol,-    QlYieldTermStructure *nominalTs, char **e) {-  try {return ret(new QlPricingEngine(alloc(new YoYInflationBlackCapFloorEngine(*arg(index), *arg(vol), *arg(nominalTs)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}--QlPricingEngine *qlYoYInflationUnitDisplacedBlackCapFloorEngine(QlYoYInflationIndex *index,-    QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, char **e) {-  try {return ret(new QlPricingEngine(alloc(new YoYInflationUnitDisplacedBlackCapFloorEngine(*arg(index), *arg(vol), *arg(nominalTs)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}--QlPricingEngine *qlYoYInflationBachelierCapFloorEngine(QlYoYInflationIndex *index, QlYoYOptionletVolatilitySurface *vol,-    QlYieldTermStructure *nominalTs, char **e) {-  try {return ret(new QlPricingEngine(alloc(new YoYInflationBachelierCapFloorEngine(*arg(index), *arg(vol), *arg(nominalTs)))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}--/* CPICapFloorTermPriceSurface */--void qlFreeCPICapFloorTermPriceSurface(QlCPICapFloorTermPriceSurface *o) {del(o);}-QlTermStructure *qlCPICapFloorTermPriceSurfaceAsTermStructure(QlCPICapFloorTermPriceSurface *o) {-  return ret(new QlTermStructure(*arg(o)));}--QlCPICapFloorTermPriceSurface *qlCPICapFloorTermPriceSurface(double nominal, double baseRate,-    int observationLagLen, int observationLagUnit, Calendar *cal, int bdc, DayCounter *dc,-    QlZeroInflationIndex *zii, int interpolationType, QlYieldTermStructure *yts,-    unsigned cStrikesLen, double *cStrikes, unsigned fStrikesLen, double *fStrikes,-    unsigned cfMaturitiesLen, int *cfMaturitiesNum, unsigned, int *cfMaturitiesUnit,-    unsigned cPriceRows, unsigned cPriceCols, double *cPriceData,-    unsigned fPriceRows, unsigned fPriceCols, double *fPriceData,-    int interpolator2D, char **e) {-  try {-    const Period observationLag(observationLagLen, (TimeUnit)observationLagUnit);-    const std::vector<Rate> cStrikesVec(cStrikes, cStrikes+cStrikesLen);-    const std::vector<Rate> fStrikesVec(fStrikes, fStrikes+fStrikesLen);-    const std::vector<Period> cfMaturitiesVec = qlPeriodVector(cfMaturitiesNum, cfMaturitiesUnit, cfMaturitiesLen);-    const Matrix cPriceMat = qlMatrix(cPriceData, cPriceRows, cPriceCols);-    const Matrix fPriceMat = qlMatrix(fPriceData, fPriceRows, fPriceCols);-    CPICapFloorTermPriceSurface *s = qlCPICapFloorTermPriceSurfaceAux(nominal, baseRate, observationLag, *arg(cal),-        (BusinessDayConvention)bdc, *arg(dc), *arg(zii), (CPI::InterpolationType)interpolationType, *arg(yts),-        cStrikesVec, fStrikesVec, cfMaturitiesVec, cPriceMat, fPriceMat, interpolator2D);-    return ret(new QlCPICapFloorTermPriceSurface(alloc(s)));-  } catch (std::exception& er) {return handleException<QlCPICapFloorTermPriceSurface*>(e, er);}}--/* InterpolatingCPICapFloorEngine -- the only CPICapFloor engine in QL 1.43 */--QlPricingEngine *qlInterpolatingCPICapFloorEngine(QlCPICapFloorTermPriceSurface *surface, char **e) {-  try {return ret(new QlPricingEngine(alloc(new InterpolatingCPICapFloorEngine(Handle<CPICapFloorTermPriceSurface>(*arg(surface))))));-  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}--/* CPIVolatilitySurface -- no consumer (engine/pricer) in QL 1.43, see qlaux.h/Internal.Type's own-   note; this type stands alone as a queryable surface. */--QlCPIVolatilitySurface *qlConstantCPIVolatility(QlQuote *v, unsigned settlementDays, Calendar *cal,-    int bdc, DayCounter *dc, int observationLagLen, int observationLagUnit, int frequency,-    int indexIsInterpolated, char **e) {-  try {return ret(new QlCPIVolatilitySurface(Handle<CPIVolatilitySurface>(-      shared_ptr<CPIVolatilitySurface>(alloc(new ConstantCPIVolatility(*arg(v), settlementDays, *arg(cal), (BusinessDayConvention)bdc,-        *arg(dc), Period(observationLagLen, (TimeUnit)observationLagUnit), (Frequency)frequency,-        (bool)indexIsInterpolated))))));-  } catch (std::exception& er) {return handleException<QlCPIVolatilitySurface*>(e, er);}}--void qlFreeCPIVolatilitySurface(QlCPIVolatilitySurface *p) {del(p);}--// Deliberate snapshot detach, same reasoning as qlYoYOptionletVolatilitySurfaceAsVolatilityTermStructure.-QlVolatilityTermStructure *qlCPIVolatilitySurfaceAsVolatilityTermStructure(QlCPIVolatilitySurface *o) {-  return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}--double qlCPIVolatilitySurfaceVolatility(QlCPIVolatilitySurface *o, int maturityDate,-    double strike, int obsLagLen, int obsLagUnit, int extrapolate, char **e) {-  try {return handleRef(arg(o)).volatility(Date(maturityDate), strike,-      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--double qlCPIVolatilitySurfaceTotalVariance(QlCPIVolatilitySurface *o, int exerciseDate,-    double strike, int obsLagLen, int obsLagUnit, int extrapolate, char **e) {-  try {return handleRef(arg(o)).totalVariance(Date(exerciseDate), strike,-      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--/* YoYCapFloorTermPriceSurface */--void qlFreeYoYCapFloorTermPriceSurface(QlYoYCapFloorTermPriceSurface *o) {del(o);}-QlTermStructure *qlYoYCapFloorTermPriceSurfaceAsTermStructure(QlYoYCapFloorTermPriceSurface *o) {-  return ret(new QlTermStructure(*arg(o)));}--QlYoYCapFloorTermPriceSurface *qlYoYCapFloorTermPriceSurface(unsigned fixingDays,-    int yyLagLen, int yyLagUnit, QlYoYInflationIndex *yii, int interpolationType,-    QlYieldTermStructure *nominal, DayCounter *dc, Calendar *cal, int bdc,-    unsigned cStrikesLen, double *cStrikes, unsigned fStrikesLen, double *fStrikes,-    unsigned cfMaturitiesLen, int *cfMaturitiesNum, unsigned, int *cfMaturitiesUnit,-    unsigned cPriceRows, unsigned cPriceCols, double *cPriceData,-    unsigned fPriceRows, unsigned fPriceCols, double *fPriceData,-    int interpolator2D, int interpolator1D, int approximator, int approximatorArg, char **e) {-  try {-    const Period yyLag(yyLagLen, (TimeUnit)yyLagUnit);-    const shared_ptr<YoYInflationIndex>& yiiRef = *arg(yii);-    const Handle<YieldTermStructure>& nominalRef = *arg(nominal);-    const std::vector<Rate> cStrikesVec(cStrikes, cStrikes+cStrikesLen);-    const std::vector<Rate> fStrikesVec(fStrikes, fStrikes+fStrikesLen);-    const std::vector<Period> cfMaturitiesVec = qlPeriodVector(cfMaturitiesNum, cfMaturitiesUnit, cfMaturitiesLen);-    const Matrix cPriceMat = qlMatrix(cPriceData, cPriceRows, cPriceCols);-    const Matrix fPriceMat = qlMatrix(fPriceData, fPriceRows, fPriceCols);-    YoYCapFloorTermPriceSurface *s = qlYoYCapFloorTermPriceSurfaceAux(fixingDays, yyLag, yiiRef,-        (CPI::InterpolationType)interpolationType, nominalRef, *arg(dc), *arg(cal), (BusinessDayConvention)bdc,-        cStrikesVec, fStrikesVec, cfMaturitiesVec, cPriceMat, fPriceMat,-        interpolator2D, interpolator1D, approximator, approximatorArg);-    return ret(new QlYoYCapFloorTermPriceSurface(alloc(s)));-  } catch (std::exception& er) {return handleException<QlYoYCapFloorTermPriceSurface*>(e, er);}}--int qlYoYCapFloorTermPriceSurfaceBaseDate(QlYoYCapFloorTermPriceSurface *o, char **e) {-  try {return qlNullableDate((*arg(o))->baseDate());-  } catch (std::exception& er) {return handleException<int>(e, er);}}--void qlYoYCapFloorTermPriceSurfaceAtmYoYSwapDateRates(QlYoYCapFloorTermPriceSurface *o,-    unsigned *dl, int **date, unsigned *rl, double **rate, char **e) {-  OutArrayResult<int> dateResult(dl, date);-  OutArrayResult<double> rateResult(rl, rate);-  try {-    const auto &dr = (*arg(o))->atmYoYSwapDateRates();-    int *dates = dateResult.allocate((unsigned)dr.first.size());-    double *rates = rateResult.allocate((unsigned)dr.second.size());-    for (unsigned i = 0; i < dr.first.size(); ++i) dates[i] = dr.first[i].serialNumber();-    for (unsigned i = 0; i < dr.second.size(); ++i) rates[i] = dr.second[i];-    dateResult.commit(); rateResult.commit();-  } catch (const std::exception& er) {*e = tracedup(er.what());}-}--void qlYoYCapFloorTermPriceSurfaceAtmYoYSwapTimeRates(QlYoYCapFloorTermPriceSurface *o,-    unsigned *tl, double **time, unsigned *rl, double **rate, char **e) {-  OutArrayResult<double> timeResult(tl, time), rateResult(rl, rate);-  try {-    const auto &tr = (*arg(o))->atmYoYSwapTimeRates();-    double *times = timeResult.allocate((unsigned)tr.first.size());-    double *rates = rateResult.allocate((unsigned)tr.second.size());-    for (unsigned i = 0; i < tr.first.size(); ++i) times[i] = tr.first[i];-    for (unsigned i = 0; i < tr.second.size(); ++i) rates[i] = tr.second[i];-    timeResult.commit(); rateResult.commit();-  } catch (const std::exception& er) {*e = tracedup(er.what());}-}--double qlYoYCapFloorTermPriceSurfaceAtmYoYSwapRate(QlYoYCapFloorTermPriceSurface *o, int d,-    int extrapolate, char **e) {-  try {return (*arg(o))->atmYoYSwapRate(Date(d), (bool)extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--double qlYoYCapFloorTermPriceSurfaceAtmYoYRate(QlYoYCapFloorTermPriceSurface *o, int d,-    int obsLagLen, int obsLagUnit, int extrapolate, char **e) {-  try {return (*arg(o))->atmYoYRate(Date(d),-      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);-  } catch (std::exception& er) {return handleException<double>(e, er);}}--void qlYoYCapFloorTermPriceSurfaceStrikes(QlYoYCapFloorTermPriceSurface *o, unsigned *sl, double **strike, char **e) {-  OutArrayResult<double> result(sl, strike);-  try {-    const std::vector<Rate> &ks = (*arg(o))->strikes();-    double *out = result.allocate((unsigned)ks.size());-    for (unsigned i = 0; i < ks.size(); ++i) out[i] = ks[i];-    result.commit();-  } catch (const std::exception& er) {*e = tracedup(er.what());}-}--/* KInterpolatedYoYOptionletVolatilitySurface */--QlYoYOptionletVolatilitySurface *qlKInterpolatedYoYOptionletVolatilitySurfaceBlack(-    unsigned settlementDays, Calendar *cal, int bdc, DayCounter *dc,-    QlYoYCapFloorTermPriceSurface *capFloorPrices, QlYoYInflationIndex *index,-    QlYieldTermStructure *nominalTs, double slope,-    int interpolator, int approximator, int approximatorArg, char **e) {-  try {-    shared_ptr<YoYInflationCapFloorEngine> engine(new YoYInflationBlackCapFloorEngine(-        *arg(index), qlNullYoYOptionletVolatilitySurfaceHandle(), *arg(nominalTs)));-    YoYOptionletVolatilitySurface *s = qlKInterpolatedYoYOptionletVolatilitySurfaceAux(-        settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(dc), *arg(capFloorPrices), engine, slope,-        interpolator, approximator, approximatorArg);-    return ret(new QlYoYOptionletVolatilitySurface(Handle<YoYOptionletVolatilitySurface>(shared_ptr<YoYOptionletVolatilitySurface>(alloc(s)))));-  } catch (std::exception& er) {return handleException<QlYoYOptionletVolatilitySurface*>(e, er);}}--QlYoYOptionletVolatilitySurface *qlKInterpolatedYoYOptionletVolatilitySurfaceUnitDisplacedBlack(-    unsigned settlementDays, Calendar *cal, int bdc, DayCounter *dc,-    QlYoYCapFloorTermPriceSurface *capFloorPrices, QlYoYInflationIndex *index,-    QlYieldTermStructure *nominalTs, double slope,-    int interpolator, int approximator, int approximatorArg, char **e) {-  try {-    shared_ptr<YoYInflationCapFloorEngine> engine(new YoYInflationUnitDisplacedBlackCapFloorEngine(-        *arg(index), qlNullYoYOptionletVolatilitySurfaceHandle(), *arg(nominalTs)));-    YoYOptionletVolatilitySurface *s = qlKInterpolatedYoYOptionletVolatilitySurfaceAux(-        settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(dc), *arg(capFloorPrices), engine, slope,-        interpolator, approximator, approximatorArg);-    return ret(new QlYoYOptionletVolatilitySurface(Handle<YoYOptionletVolatilitySurface>(shared_ptr<YoYOptionletVolatilitySurface>(alloc(s)))));-  } catch (std::exception& er) {return handleException<QlYoYOptionletVolatilitySurface*>(e, er);}}--QlYoYOptionletVolatilitySurface *qlKInterpolatedYoYOptionletVolatilitySurfaceBachelier(-    unsigned settlementDays, Calendar *cal, int bdc, DayCounter *dc,-    QlYoYCapFloorTermPriceSurface *capFloorPrices, QlYoYInflationIndex *index,-    QlYieldTermStructure *nominalTs, double slope,-    int interpolator, int approximator, int approximatorArg, char **e) {-  try {-    shared_ptr<YoYInflationCapFloorEngine> engine(new YoYInflationBachelierCapFloorEngine(-        *arg(index), qlNullYoYOptionletVolatilitySurfaceHandle(), *arg(nominalTs)));-    YoYOptionletVolatilitySurface *s = qlKInterpolatedYoYOptionletVolatilitySurfaceAux(-        settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(dc), *arg(capFloorPrices), engine, slope,-        interpolator, approximator, approximatorArg);-    return ret(new QlYoYOptionletVolatilitySurface(Handle<YoYOptionletVolatilitySurface>(shared_ptr<YoYOptionletVolatilitySurface>(alloc(s)))));-  } catch (std::exception& er) {return handleException<QlYoYOptionletVolatilitySurface*>(e, er);}}+#include <ql/experimental/volatility/sabrvoltermstructure.hpp>+#include <ql/experimental/volatility/extendedblackvariancecurve.hpp>+#include <ql/experimental/volatility/extendedblackvariancesurface.hpp>+#include <ql/termstructures/volatility/equityfx/all.hpp>+#include <ql/termstructures/volatility/equityfx/andreasenhugelocalvoladapter.hpp>+#include <ql/termstructures/volatility/equityfx/andreasenhugevolatilityadapter.hpp>+#include <ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp>+#include <ql/termstructures/volatility/equityfx/gridmodellocalvolsurface.hpp>+#include <ql/termstructures/volatility/equityfx/hestonblackvolsurface.hpp>+#include <ql/termstructures/volatility/swaption/swaptionconstantvol.hpp>+#include <ql/termstructures/volatility/equityfx/blackconstantvol.hpp>+#include <ql/termstructures/volatility/swaption/swaptionconstantvol.hpp>+#include <ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp>+#include <ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp>+#include <ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp>+#include <ql/termstructures/volatility/swaption/interpolatedswaptionvolatilitycube.hpp>+#include <ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp>+#include <ql/termstructures/volatility/gaussian1dsmilesection.hpp>+#include <ql/instruments/makeswaption.hpp>+#include <ql/termstructures/volatility/sabrsmilesection.hpp>+#include <ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp>+#include <ql/experimental/volatility/noarbsabrsmilesection.hpp>+#include <ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp>+#include <ql/experimental/volatility/blackatmvolcurve.hpp>+#include <ql/experimental/volatility/blackvolsurface.hpp>+#include <ql/experimental/volatility/abcdatmvolcurve.hpp>+#include <ql/experimental/volatility/sabrvolsurface.hpp>+#include <ql/termstructures/volatility/optionlet/optionletstripper2.hpp>+#include <ql/instruments/capfloor.hpp>+#include <ql/termstructures/volatility/capfloor/all.hpp>+#include <ql/math/interpolations/all.hpp>+#include <ql/experimental/callablebonds/callablebondvolstructure.hpp>+#include <ql/experimental/callablebonds/callablebondconstantvol.hpp>+#include <ql/termstructures/credit/flathazardrate.hpp>+#include <ql/experimental/credit/spreadedhazardratecurve.hpp>+#include <ql/experimental/credit/factorspreadedhazardratecurve.hpp>+#include <ql/experimental/credit/interpolatedaffinehazardratecurve.hpp>+#include <ql/termstructures/credit/defaultprobabilityhelpers.hpp>+#include <ql/version.hpp>+#include <ql/termstructures/yield/all.hpp>+#if QL_HEX_VERSION >= 0x01440000+#include <ql/experimental/termstructures/overnightindexedfundingratehelper.hpp>+#endif+#include <ql/termstructures/multicurve.hpp>+#include <ql/experimental/termstructures/basisswapratehelpers.hpp>+#include <ql/experimental/termstructures/crosscurrencyratehelpers.hpp>+#include <ql/math/interpolations/all.hpp>+#include <ql/index.hpp>+#include <ql/indexes/indexmanager.hpp>+#include <ql/indexes/swapindex.hpp>+#include <ql/indexes/bmaindex.hpp>+#include <ql/indexes/swap/all.hpp>+#include <ql/indexes/iborindex.hpp>+#include <ql/indexes/ibor/all.hpp>+#include <ql/indexes/inflation/all.hpp>+#include <ql/termstructures/inflation/inflationhelpers.hpp>+#include <ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp>+#include <ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp>+#include <ql/termstructures/inflation/seasonality.hpp>+#include <ql/indexes/equityindex.hpp>+#include <ql/experimental/commodities/commoditycurve.hpp>+#include <ql/experimental/commodities/commodityindex.hpp>+#include <ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp>+#include <ql/pricingengines/inflation/inflationcapfloorengines.hpp>+#include <ql/experimental/inflation/cpicapfloortermpricesurface.hpp>+#include <ql/experimental/inflation/cpicapfloorengines.hpp>+#include <ql/termstructures/volatility/inflation/constantcpivolatility.hpp>+#include <ql/experimental/inflation/yoycapfloortermpricesurface.hpp>+#include <ql/experimental/inflation/interpolatedyoyoptionletstripper.hpp>+#include <ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp>+#include <ql/version.hpp>++#include "qlaux.h"+#include "qlMisc.h"+using namespace QuantLib;+// these are type aliases so we cannot use their forward declarations in qlaux.h without including all relevant header files+using QlDefaultProbabilityHelper = shared_ptr<DefaultProbabilityHelper>;+using QlRateHelper = shared_ptr<RateHelper>;+using FittedBondDiscountCurveFittingMethod = FittedBondDiscountCurve::FittingMethod;+#include "qlTermStructure.h"+#include "qlTermStructureAux.h"++namespace hasquant {+#include "qlEnumObjects.h"+}++#ifdef QLTRACK_ALLOCATIONS+QL_TRACE_NAME(DefaultProbabilityHelper)+QL_TRACE_NAME(QlDefaultProbabilityHelper)+QL_TRACE_NAME(RateHelper)+QL_TRACE_NAME(QlRateHelper)+QL_TRACE_NAME(FittedBondDiscountCurveFittingMethod)+QL_TRACE_NAME(PiecewiseZeroSpreadedTermStructure)+#endif++namespace {+  bool sameIndexName(const std::string& s1, const std::string& s2) {+    return s1.size() == s2.size() && std::equal(s1.begin(), s1.end(), s2.begin(),+      [](const auto& c1, const auto& c2) {+        return std::toupper(static_cast<unsigned char>(c1)) == std::toupper(static_cast<unsigned char>(c2));+      });+  }++  template <class T>+  inline std::vector< std::vector<Handle<T> > > qlHandleMatrix(Handle<T> **vals, size_t rows, size_t cols) {+    std::vector< std::vector<Handle<T> > > r; r.reserve(rows);+    for (size_t i = 0; i < rows; ++i) {+      std::vector<Handle<T> > row; row.reserve(cols);+      for (size_t j = 0; j < cols; ++j)+        row.push_back(*arg(vals[i * cols + j]));+      r.push_back(row);+    }+    return r;+  }++  // The stripper sets the real vol on this engine as it bootstraps each strike's curve+  // (interpolatedyoyoptionletstripper.hpp), so it is constructed with a deliberately null+  // vol handle -- same idiom as the upstream test (inflationvolatility.cpp's testYoYPriceSurfaceToVol).+  Handle<YoYOptionletVolatilitySurface> qlNullYoYOptionletVolatilitySurfaceHandle() {+    return Handle<YoYOptionletVolatilitySurface>(shared_ptr<YoYOptionletVolatilitySurface>(), false);+  }++  // IterativeBootstrap's constructor defaults for the narrow piecewise-yield entry points;+  // bootstrapOpts below builds the same POD from explicit full-arity yield/credit settings.+  QlIterativeBootstrapOpts defaultBootstrapOpts() {+    QlIterativeBootstrapOpts b;+    b.accuracy = b.minValue = b.maxValue = Null<Real>();+    b.maxAttempts = 1;+    b.maxFactor = b.minFactor = 2.0;+    b.dontThrow = 0;+    b.dontThrowSteps = 10;+    b.maxEvaluations = MAX_FUNCTION_EVALUATIONS;+    return b;+  }++  QlIterativeBootstrapOpts bootstrapOpts(double accuracy, double minValue, double maxValue,+      unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow,+      unsigned dontThrowSteps, unsigned maxEvaluations) {+    QlIterativeBootstrapOpts b;+    b.accuracy = accuracy; b.minValue = minValue; b.maxValue = maxValue;+    b.maxAttempts = maxAttempts; b.maxFactor = maxFactor; b.minFactor = minFactor;+    b.dontThrow = dontThrow; b.dontThrowSteps = dontThrowSteps; b.maxEvaluations = maxEvaluations;+    return b;+  }++  // kind: -1 none, 0 MultiplicativePriceSeasonality, 1 KerkhofSeasonality (monthly, freq ignored).+  shared_ptr<Seasonality> qlSeasonality(int kind, int baseDate, int freq, unsigned len, double *factors) {+    std::vector<Rate> fs(factors, factors + len);+    switch (kind) {+    case -1: return shared_ptr<Seasonality>();+    case 0: return QuantLib::ext::make_shared<MultiplicativePriceSeasonality>(Date(baseDate), (Frequency)freq, fs);+    case 1: return QuantLib::ext::make_shared<KerkhofSeasonality>(Date(baseDate), fs);+    default: QL_FAIL("Unsupported seasonality kind " << kind);+    }+  }++  template <class Build>+  QlDefaultProbabilityTermStructure* piecewiseDefaultCurveImpl(Build&& build, QlError **e) { QlCallScope callbackScope(e);+    try {+      auto ts = allocShared(build());+      return ret(new QlDefaultProbabilityTermStructure(ts));+    } catch (std::exception& er) {+      return handleException<QlDefaultProbabilityTermStructure*>(e, er);+    }+  }+++// The named-index factory tables below live inside the extern "C" block with the shims that+// use them, but a template cannot be declared with C linkage, so their element constructors+// sit here instead.+// Return type spelled as the base (not the concrete subclass): alloc() takes its trace label+// from its argument's static type, and these are freed through the base -- see makeCurrency+// in qlMisc.cpp for the same reasoning spelled out in full.+template <class I> SwapIndex *makeSwapIndex(const Period &p, const QlYieldTermStructure &h1, const QlYieldTermStructure &h2) {return new I(p, h1, h2);}+// Three constructor shapes upstream: a tenor Period, a bare curve, or a plain number of months.+template <class I> IborIndex *makeIborIndex(int l, int u, const QlYieldTermStructure &ts) {return new I(Period(l, (TimeUnit)u), ts);}+template <class I> IborIndex *makeIborIndexTS(int, int, const QlYieldTermStructure &ts) {return new I(ts);}+template <class I> IborIndex *makeIborIndexMonths(int l, int, const QlYieldTermStructure &ts) {return new I(l, ts);}+template <class I> OvernightIndex *makeONIndex(const QlYieldTermStructure &ts) {return new I(ts);}+template <class I> ZeroInflationIndex *makeZeroInflationIndex() {return new I();}+template <class I> YoYInflationIndex *makeYoYInflationIndex() {return new I();}+template <class R> Region *makeRegion() {return new R();}++using makeSwapIdx = SwapIndex *(*)(const Period &p, const QlYieldTermStructure &h1, const QlYieldTermStructure &h2);+using makeIborIdx = IborIndex *(*)(int l, int u, const QlYieldTermStructure &ts);+using makeOnIdx = OvernightIndex *(*)(const QlYieldTermStructure &ts);+using makeZeroInflIdx = ZeroInflationIndex *(*)();+using makeYoYInflIdx = YoYInflationIndex *(*)();+using makeReg = Region *(*)();++#if QL_HEX_VERSION < 0x01440000+// QuantLib <= 1.43 leaves MakeSwaption::nominal_ uninitialized (fixed in 1.44), so reprice with a+// unit nominal.+class UnitNominalGaussian1dSmileSection : public QuantLib::Gaussian1dSmileSection {+  public:+    UnitNominalGaussian1dSmileSection(const Date& fixingDate, const shared_ptr<SwapIndex>& swapIndex,+        const shared_ptr<Gaussian1dModel>& model, const DayCounter& dc)+    : QuantLib::Gaussian1dSmileSection(fixingDate, swapIndex, model, dc), fixingDate_(fixingDate), swapIndex_(swapIndex),+      annuity_(model->swapAnnuity(fixingDate, swapIndex->tenor(), Date(), 0.0, swapIndex)),+      engine_(QuantLib::ext::make_shared<Gaussian1dSwaptionEngine>(model, 64, 7.0, true, false,+          swapIndex->discountingTermStructure())) {}+    Real optionPrice(Rate strike, Option::Type type, Real discount) const override {+      Swaption s = QuantLib::MakeSwaption(swapIndex_, fixingDate_, strike)+          .withNominal(1.0)+          .withUnderlyingType(type == Option::Call ? Swap::Payer : Swap::Receiver)+          .withPricingEngine(engine_);+      return s.NPV() / annuity_ * discount;+    }+  private:+    Date fixingDate_;+    shared_ptr<SwapIndex> swapIndex_;+    Real annuity_;+    shared_ptr<PricingEngine> engine_;+};++// Upstream's time-based smile sections delegate to this date overload, so every query is covered.+class UnitNominalGaussian1dSwaptionVolatility : public QuantLib::Gaussian1dSwaptionVolatility {+  public:+    UnitNominalGaussian1dSwaptionVolatility(const Calendar& cal, BusinessDayConvention bdc,+        const shared_ptr<SwapIndex>& indexBase, const shared_ptr<Gaussian1dModel>& model, const DayCounter& dc)+    : QuantLib::Gaussian1dSwaptionVolatility(cal, bdc, indexBase, model, dc), indexBase_(indexBase), model_(model) {}+  protected:+    using QuantLib::Gaussian1dSwaptionVolatility::smileSectionImpl;+    shared_ptr<QuantLib::SmileSection> smileSectionImpl(const Date& d, const Period& tenor) const override {+      return QuantLib::ext::make_shared<UnitNominalGaussian1dSmileSection>(d, indexBase_->clone(tenor), model_, dayCounter());+    }+  private:+    shared_ptr<SwapIndex> indexBase_;+    shared_ptr<Gaussian1dModel> model_;+};+#endif++// Upstream keeps a reference to its quote vector; this base is constructed first and owns it.+struct ExtendedBlackVarianceSurfaceQuotes {+  std::vector<Handle<Quote>> quotes;+};+class OwningExtendedBlackVarianceSurface : private ExtendedBlackVarianceSurfaceQuotes, public QuantLib::ExtendedBlackVarianceSurface {+  public:+    OwningExtendedBlackVarianceSurface(const Date& referenceDate, const Calendar& cal, const std::vector<Date>& dates,+        std::vector<Real> strikes, std::vector<Handle<Quote>> vols, const DayCounter& dc, Extrapolation lower, Extrapolation upper)+    : ExtendedBlackVarianceSurfaceQuotes{std::move(vols)},+      QuantLib::ExtendedBlackVarianceSurface(referenceDate, cal, dates, std::move(strikes), quotes, dc, lower, upper) {}+};+}++#ifdef QLTRACK_ALLOCATIONS+#if QL_HEX_VERSION < 0x01440000+QL_TRACE_NAME(UnitNominalGaussian1dSwaptionVolatility)+#endif+QL_TRACE_NAME(OwningExtendedBlackVarianceSurface)+#endif++namespace hasquant {+  // Only the Haskell value and the external handles own the group; original handles own just their+  // member, so members that outlive the group are cut off from it before it releases the rest.+  class ManagedMultiCurve : public MultiCurve {+  public:+    explicit ManagedMultiCurve(double accuracy) : MultiCurve(accuracy) {}+    ~ManagedMultiCurve() override {+      // The shared bootstrapper holds raw pointers to every member; survivors bootstrap standalone.+      for (const auto* contributor : contributors_)+        contributor->setParentBootstrapper(nullptr);+      // Clear non-owning links before the member curves die, including escaped pricing indexes.+      for (auto& handle : internalHandles_) {+        try { handle.linkTo({}, false); } catch (...) {}+      }+    }+    Handle<YieldTermStructure> add(RelinkableHandle<YieldTermStructure>& internal,+                                   const Handle<YieldTermStructure>& original, bool bootstrap) {+      QL_REQUIRE(internal.empty(), "internal handle must be empty; was the curve added already?");+      auto member = original.currentLink();+      // A second registration would give the shared bootstrapper the same contributor twice.+      for (const auto& existing : members_)+        QL_REQUIRE(existing.get() != member.get(), "curve already belongs to this MultiCurve");+      // Retain attempted additions too: upstream can register a raw contributor before throwing.+      members_.push_back(member);+      internalHandles_.push_back(internal);+      // Same cross-cast as upstream's addBootstrappedCurve: the contributor has no other accessor.+      if (bootstrap) {+        if (auto provider = ext::dynamic_pointer_cast<MultiCurveBootstrapProvider>(member))+          if (const auto* contributor = provider->multiCurveBootstrapContributor())+            contributors_.push_back(contributor);+      }+      return bootstrap ? addBootstrappedCurve(internal, std::move(member))+                       : addNonBootstrappedCurve(internal, std::move(member));+    }+  private:+    std::vector<shared_ptr<YieldTermStructure>> members_;+    std::vector<RelinkableHandle<YieldTermStructure>> internalHandles_;+    std::vector<const MultiCurveBootstrapContributor*> contributors_;+  };+}+#ifdef QLTRACK_ALLOCATIONS+QL_TRACE_NAME(hasquant::ManagedMultiCurve)+#endif+++extern "C" {+QlOptionletVolatilityStructure *qlConstantOptionletVol1(unsigned days, Calendar *cal, int conv, QlQuote *q, DayCounter *dc, int type, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new ConstantOptionletVolatility(days, *arg(cal), (BusinessDayConvention) conv, *arg(q), *arg(dc), (VolatilityType)type, displacement)))));+  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure *>(e, er);}}+QlOptionletVolatilityStructure *qlCapletVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned volsLen, double* vols, DayCounter* dc, int type, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new CapletVarianceCurve(Date(referenceDate), qlDateVector(dates, datesLen), std::vector<double>(vols, vols+volsLen), *arg(dc), (VolatilityType)type, displacement)))));+  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure *>(e, er);}}++void qlFreeOptionletVolatilityStructure(QlOptionletVolatilityStructure *p) {del(p);}+// Deliberate snapshot detach, same reasoning as qlBlackVolTermStructureAsVolatilityTermStructure.+QlVolatilityTermStructure* qlOptionletVolatilityStructureAsVolatilityTermStructure(QlOptionletVolatilityStructure *o) {return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}++// OptionletStripper1 is never exposed to Haskell as its own type -- immediately wrapped in a+// StrippedOptionletAdapter, itself an OptionletVolatilityStructure, mirroring qlConstantOptionletVol1+// above. optionletFrequencyUnit < 0 is the ext::nullopt sentinel for optionletFrequency, same+// convention as qlOptBusinessDayConvention/qlOptFrequency (TimeUnit starts at 0, so can't self-sentinel).+QlOptionletVolatilityStructure* qlOptionletStripper1(QlCapFloorTermVolSurface* surface, QlIborIndex* index, double switchStrikes, double accuracy, unsigned maxIter, QlYieldTermStructure* discount, int type, double displacement, int dontThrow, int optionletFrequencyLen, int optionletFrequencyUnit, unsigned paymentLag, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "optionletStripper", paymentLag == 0)) return nullptr;+  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new StrippedOptionletAdapter(+            shared_ptr<OptionletStripper1>(alloc(new OptionletStripper1(*arg(surface), *arg(index), switchStrikes, accuracy, maxIter,+              qlNullableHandle(arg(discount)), (VolatilityType)type, displacement, (bool)dontThrow,+              optionletFrequencyUnit < 0 ? optional<Period>() : optional<Period>(Period(optionletFrequencyLen, (TimeUnit)optionletFrequencyUnit)) QL144_ARGS(paymentLag)))))))));+  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure*>(e, er);}}++// A relinkable handle, empty when `initial` is null -- mirrors qlRelinkableYieldTermStructure.+QlRelinkableOptionletVolatilityStructure* qlRelinkableOptionletVolatilityStructure(QlOptionletVolatilityStructure *initial, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(initial ? new QlRelinkableOptionletVolatilityStructure(handlePtr(arg(initial)))+                          : new QlRelinkableOptionletVolatilityStructure());+  } catch (std::exception& er) {return handleException<QlRelinkableOptionletVolatilityStructure*>(e, er);}}+void qlFreeRelinkableOptionletVolatilityStructure(QlRelinkableOptionletVolatilityStructure *o) {del(o);}+void qlRelinkableOptionletVolatilityStructureLinkTo(QlRelinkableOptionletVolatilityStructure *o, QlOptionletVolatilityStructure *c, QlError **e) { QlCallScope callbackScope(e);+  try {arg(o)->linkTo(handlePtr(arg(c)));} catch (std::exception& er) {(void)handleException<void *>(e, er);}}+QlOptionletVolatilityStructure* qlRelinkableOptionletVolatilityStructureAsOptionletVolatilityStructure(QlRelinkableOptionletVolatilityStructure *o) {return ret(new QlOptionletVolatilityStructure(*arg(o)));}+void qlFreeBlackVolTermStructure(QlBlackVolTermStructure *o) {del(o);}+// VolatilityTermStructure has no Handle upstream, so this conversion detaches a snapshot.+QlVolatilityTermStructure* qlBlackVolTermStructureAsVolatilityTermStructure(QlBlackVolTermStructure *o) {return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}+double qlBlackVolTermStructureBlackVol(QlBlackVolTermStructure* o, int d, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVol(Date(d), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackVolTermStructureBlackVol1(QlBlackVolTermStructure* o, double t, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVol(t, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackVolTermStructureBlackVariance(QlBlackVolTermStructure* o, int d, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(Date(d), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackVolTermStructureBlackVariance1(QlBlackVolTermStructure* o, double t, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(t, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackVolTermStructureBlackForwardVol(QlBlackVolTermStructure* o, int d1, int d2, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackForwardVol(Date(d1), Date(d2), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackVolTermStructureBlackForwardVol1(QlBlackVolTermStructure* o, double t1, double t2, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackForwardVol(t1, t2, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackVolTermStructureBlackForwardVariance(QlBlackVolTermStructure* o, int d1, int d2, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackForwardVariance(Date(d1), Date(d2), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackVolTermStructureBlackForwardVariance1(QlBlackVolTermStructure* o, double t1, double t2, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackForwardVariance(t1, t2, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++// A relinkable handle, empty when `initial` is null -- mirrors qlRelinkableYieldTermStructure.+QlRelinkableBlackVolTermStructure* qlRelinkableBlackVolTermStructure(QlBlackVolTermStructure *initial, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(initial ? new QlRelinkableBlackVolTermStructure(handlePtr(arg(initial)))+                          : new QlRelinkableBlackVolTermStructure());+  } catch (std::exception& er) {return handleException<QlRelinkableBlackVolTermStructure*>(e, er);}}+void qlFreeRelinkableBlackVolTermStructure(QlRelinkableBlackVolTermStructure *o) {del(o);}+void qlRelinkableBlackVolTermStructureLinkTo(QlRelinkableBlackVolTermStructure *o, QlBlackVolTermStructure *c, QlError **e) { QlCallScope callbackScope(e);+  try {arg(o)->linkTo(handlePtr(arg(c)));} catch (std::exception& er) {(void)handleException<void *>(e, er);}}+QlBlackVolTermStructure* qlRelinkableBlackVolTermStructureAsBlackVolTermStructure(QlRelinkableBlackVolTermStructure *o) {return ret(new QlBlackVolTermStructure(*arg(o)));}+void qlFreeVolatilityTermStructure(QlVolatilityTermStructure *o) {del(o);}+QlTermStructure* qlVolatilityTermStructureAsTermStructure(QlVolatilityTermStructure *o) {return ret(new QlTermStructure(*arg(o)));}+double qlVolatilityTermStructureMinStrike(QlVolatilityTermStructure* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->minStrike();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlVolatilityTermStructureMaxStrike(QlVolatilityTermStructure* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->maxStrike();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlVolatilityTermStructureOptionDateFromTenor(QlVolatilityTermStructure* o, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->optionDateFromTenor(Period(n, (TimeUnit)u)).serialNumber();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+void qlFreeBlackAtmVolCurve(QlBlackAtmVolCurve *o) {del(o);}+QlVolatilityTermStructure* qlBlackAtmVolCurveAsVolatilityTermStructure(QlBlackAtmVolCurve *o) {return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}+void qlFreeBlackVolSurface(QlBlackVolSurface *o) {del(o);}+QlBlackAtmVolCurve* qlBlackVolSurfaceAsBlackAtmVolCurve(QlBlackVolSurface *o) {return ret(new QlBlackAtmVolCurve(*arg(o)));}+void qlFreeAbcdAtmVolCurve(QlAbcdAtmVolCurve *o) {del(o);}+QlBlackAtmVolCurve* qlAbcdAtmVolCurveAsBlackAtmVolCurve(QlAbcdAtmVolCurve *o) {return ret(new QlBlackAtmVolCurve(*arg(o)));}+void qlFreeSabrVolSurface(QlSabrVolSurface *o) {del(o);}+QlBlackVolSurface* qlSabrVolSurfaceAsBlackVolSurface(QlSabrVolSurface *o) {return ret(new QlBlackVolSurface(*arg(o)));}+double qlBlackAtmVolCurveAtmVolForPeriod(QlBlackAtmVolCurve* o, int n, int u, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmVol(Period(n, (TimeUnit)u), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackAtmVolCurveAtmVolForDate(QlBlackAtmVolCurve* o, int date, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmVol(Date(date), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackAtmVolCurveAtmVolForTime(QlBlackAtmVolCurve* o, double t, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmVol(t, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackAtmVolCurveAtmVarianceForPeriod(QlBlackAtmVolCurve* o, int n, int u, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmVariance(Period(n, (TimeUnit)u), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackAtmVolCurveAtmVarianceForDate(QlBlackAtmVolCurve* o, int date, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmVariance(Date(date), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlBlackAtmVolCurveAtmVarianceForTime(QlBlackAtmVolCurve* o, double t, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmVariance(t, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlSmileSection* qlBlackVolSurfaceSmileSectionForPeriod(QlBlackVolSurface* o, int n, int u, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Period(n, (TimeUnit)u), extrapolate))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlBlackVolSurfaceSmileSectionForDate(QlBlackVolSurface* o, int date, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Date(date), extrapolate))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlBlackVolSurfaceSmileSectionForTime(QlBlackVolSurface* o, double t, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(t, extrapolate))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlAbcdAtmVolCurve* qlAbcdAtmVolCurve(unsigned settlementDays, Calendar* calendar, unsigned optionTenorsLen, int *n, unsigned, int *u, unsigned volsLen, QlQuote** vols, unsigned flagsLen, int *flags, int bdc, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlAbcdAtmVolCurve(alloc(new AbcdAtmVolCurve(settlementDays, *arg(calendar),+              qlPeriodVector(n, u, optionTenorsLen), qlHandleVector(vols, volsLen),+              std::vector<bool>(flags, flags+flagsLen), (BusinessDayConvention)bdc, *arg(dc)))));+  } catch (std::exception& er) {return handleException<QlAbcdAtmVolCurve*>(e, er);}}+double qlAbcdAtmVolCurveA(QlAbcdAtmVolCurve* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->a();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAbcdAtmVolCurveB(QlAbcdAtmVolCurve* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->b();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAbcdAtmVolCurveC(QlAbcdAtmVolCurve* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->c();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAbcdAtmVolCurveD(QlAbcdAtmVolCurve* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->d();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAbcdAtmVolCurveRmsError(QlAbcdAtmVolCurve* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->rmsError();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAbcdAtmVolCurveMaxError(QlAbcdAtmVolCurve* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->maxError();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlAbcdAtmVolCurveEndCriteria(QlAbcdAtmVolCurve* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (int)(*arg(o))->endCriteria();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlAbcdAtmVolCurveKAtTime(QlAbcdAtmVolCurve* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->k(t);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlAbcdAtmVolCurveK(QlAbcdAtmVolCurve* o, unsigned *count, double **ks, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->k();}, count, ks);+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlAbcdAtmVolCurveOptionTenors(QlAbcdAtmVolCurve* o, unsigned *count, int **n, unsigned *count2, int **u, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> lengthResult(count, n), unitResult(count2, u);+  try {+    const std::vector<Period> &p = (*arg(o))->optionTenors();+    int *lengths = lengthResult.allocate((unsigned)p.size()), *units = unitResult.allocate((unsigned)p.size());+    for (size_t i = 0; i < p.size(); ++i) {lengths[i] = p[i].length(); units[i] = (int)p[i].units();}+    lengthResult.commit(); unitResult.commit();+  } catch (const std::exception& er) {qlSetError(e, er.what());}}+void qlAbcdAtmVolCurveOptionTenorsInInterpolation(QlAbcdAtmVolCurve* o, unsigned *count, int **n, unsigned *count2, int **u, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> lengthResult(count, n), unitResult(count2, u);+  try {+    const std::vector<Period> &p = (*arg(o))->optionTenorsInInterpolation();+    int *lengths = lengthResult.allocate((unsigned)p.size()), *units = unitResult.allocate((unsigned)p.size());+    for (size_t i = 0; i < p.size(); ++i) {lengths[i] = p[i].length(); units[i] = (int)p[i].units();}+    lengthResult.commit(); unitResult.commit();+  } catch (const std::exception& er) {qlSetError(e, er.what());}}+void qlAbcdAtmVolCurveOptionDates(QlAbcdAtmVolCurve* o, unsigned *count, int **days, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(count, days);+  try {+    const std::vector<Date> &dates = (*arg(o))->optionDates();+    int *out = result.allocate(dates.size());+    for (size_t i = 0; i < dates.size(); ++i) out[i] = dates[i].serialNumber();+    result.commit();+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlAbcdAtmVolCurveOptionTimes(QlAbcdAtmVolCurve* o, unsigned *count, double **times, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->optionTimes();}, count, times);+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+QlSabrVolSurface* qlSabrVolSurface(QlInterestRateIndex* index, QlBlackAtmVolCurve* atmCurve, unsigned tenorsLen, int *n, unsigned, int *u, unsigned spreadsLen, double *atmRateSpreads, unsigned volRows, unsigned volCols, QlQuote** volSpreads, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSabrVolSurface(alloc(new SabrVolSurface(*arg(index), Handle<BlackAtmVolCurve>(*arg(atmCurve)),+      qlPeriodVector(n, u, tenorsLen), std::vector<Spread>(atmRateSpreads, atmRateSpreads+spreadsLen),+      qlHandleMatrix(volSpreads, volRows, volCols)))));+  } catch (std::exception& er) {return handleException<QlSabrVolSurface*>(e, er);}}+QlBlackAtmVolCurve* qlSabrVolSurfaceAtmCurve(QlSabrVolSurface* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackAtmVolCurve((*arg(o))->atmCurve().currentLink()));+  } catch (std::exception& er) {return handleException<QlBlackAtmVolCurve*>(e, er);}}+void qlSabrVolSurfaceVolatilitySpreadsForPeriod(QlSabrVolSurface* o, int n, int u, unsigned *count, double **vols, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->volatilitySpreads(Period(n, (TimeUnit)u));}, count, vols);+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlSabrVolSurfaceVolatilitySpreadsForDate(QlSabrVolSurface* o, int date, unsigned *count, double **vols, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->volatilitySpreads(Date(date));}, count, vols);+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+QlInterestRateIndex* qlSabrVolSurfaceIndex(QlSabrVolSurface* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlInterestRateIndex((*arg(o))->index()));+  } catch (std::exception& er) {return handleException<QlInterestRateIndex*>(e, er);}}+int qlSabrVolSurfaceOptionDateFromTenor(QlSabrVolSurface* o, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->optionDateFromTenor(Period(n, (TimeUnit)u)).serialNumber();+  } catch (std::exception& er) {return handleException<int>(e, er);}}++// OptionletStripper2 builds an OptionletStripper1 internally (never exposed to Haskell, same+// fusion as qlOptionletStripper1 above) then wraps OptionletStripper2 itself around it, keeping+// the OptionletStripper2 shared_ptr so its own diagnostic getters below are reachable with no cast.+QlOptionletStripper2* qlOptionletStripper2(QlCapFloorTermVolSurface* surface, QlIborIndex* index, double switchStrikes, double accuracy, unsigned maxIter, QlYieldTermStructure* discount, int type, double displacement, int dontThrow, int optionletFrequencyLen, int optionletFrequencyUnit, QlCapFloorTermVolCurve* atmCurve, unsigned paymentLag, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "optionletStripperWithAtm", paymentLag == 0)) return nullptr;+  try {+    auto stripper1 = shared_ptr<OptionletStripper1>(alloc(new OptionletStripper1(*arg(surface), *arg(index),+        switchStrikes, accuracy, maxIter, qlNullableHandle(arg(discount)), (VolatilityType)type, displacement,+        (bool)dontThrow, optionletFrequencyUnit < 0 ? optional<Period>() : optional<Period>(Period(optionletFrequencyLen, (TimeUnit)optionletFrequencyUnit)) QL144_ARGS(paymentLag))));+    return ret(new QlOptionletStripper2(alloc(new OptionletStripper2(stripper1, Handle<CapFloorTermVolCurve>(*arg(atmCurve))))));+  } catch (std::exception& er) {return handleException<QlOptionletStripper2*>(e, er);}}+void qlFreeOptionletStripper2(QlOptionletStripper2 *o) {del(o);}+// Fresh construction (StrippedOptionletAdapter around the OptionletStripper2 itself), never a+// cast -- same idiom as qlSabrInterpolatedSmileSectionAsSmileSection.+QlOptionletVolatilityStructure* qlOptionletStripper2AsOptionletVolatilityStructure(QlOptionletStripper2 *o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(+      alloc(new StrippedOptionletAdapter(*arg(o))))));+  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure*>(e, er);}}+void qlOptionletStripper2AtmCapFloorStrikes(QlOptionletStripper2* o, unsigned *count, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->atmCapFloorStrikes();}, count, vs);+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlOptionletStripper2AtmCapFloorPrices(QlOptionletStripper2* o, unsigned *count, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->atmCapFloorPrices();}, count, vs);+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}+void qlOptionletStripper2SpreadsVol(QlOptionletStripper2* o, unsigned *count, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->spreadsVol();}, count, vs);+  } catch (std::exception& er) {(void)handleException<int>(e, er);}}++void qlFreeSwaptionVolatilityStructure(QlSwaptionVolatilityStructure *o) {del(o);}+// Deliberate snapshot detach, same reasoning as qlBlackVolTermStructureAsVolatilityTermStructure.+QlVolatilityTermStructure* qlSwaptionVolatilityStructureAsVolatilityTermStructure(QlSwaptionVolatilityStructure *o) {return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}++// A relinkable handle, empty when `initial` is null -- mirrors qlRelinkableYieldTermStructure.+QlRelinkableSwaptionVolatilityStructure* qlRelinkableSwaptionVolatilityStructure(QlSwaptionVolatilityStructure *initial, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(initial ? new QlRelinkableSwaptionVolatilityStructure(handlePtr(arg(initial)))+                          : new QlRelinkableSwaptionVolatilityStructure());+  } catch (std::exception& er) {return handleException<QlRelinkableSwaptionVolatilityStructure*>(e, er);}}+void qlFreeRelinkableSwaptionVolatilityStructure(QlRelinkableSwaptionVolatilityStructure *o) {del(o);}+void qlRelinkableSwaptionVolatilityStructureLinkTo(QlRelinkableSwaptionVolatilityStructure *o, QlSwaptionVolatilityStructure *c, QlError **e) { QlCallScope callbackScope(e);+  try {arg(o)->linkTo(handlePtr(arg(c)));} catch (std::exception& er) {(void)handleException<void *>(e, er);}}+QlSwaptionVolatilityStructure* qlRelinkableSwaptionVolatilityStructureAsSwaptionVolatilityStructure(QlRelinkableSwaptionVolatilityStructure *o) {return ret(new QlSwaptionVolatilityStructure(*arg(o)));}+void qlFreeSmileSection(QlSmileSection *o) {del(o);}++QlBlackVolTermStructure* qlBlackConstantVol1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new BlackConstantVol(settlementDays, *arg(x1), *arg(volatility), *arg(dayCounter))))));+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}+QlBlackVolTermStructure* qlBlackConstantVol(int referenceDate, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new BlackConstantVol(Date(referenceDate), *arg(x1), *arg(volatility), *arg(dayCounter))))));+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}+QlBlackVolTermStructure* qlSabrVolTermStructure(double alpha, double beta, double gamma, double rho, double s0, double r, int referenceDate, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new SABRVolTermStructure(alpha, beta, gamma, rho, s0, r, Date(referenceDate), *arg(dc))))));+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}+QlOptionletVolatilityStructure* qlConstantOptionletVolatility(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new ConstantOptionletVolatility(Date(referenceDate), *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), (*arg(dc)), (VolatilityType)type, displacement)))));+  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure*>(e, er);}}+QlSwaptionVolatilityStructure* qlConstantSwaptionVolatility1(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double shift, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwaptionVolatilityStructure(shared_ptr<SwaptionVolatilityStructure>(alloc(new ConstantSwaptionVolatility(Date(referenceDate), *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), (*arg(dc)), (VolatilityType)type, shift)))));+  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityStructure*>(e, er);}}+QlSwaptionVolatilityStructure* qlConstantSwaptionVolatility(unsigned settlementDays, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double shift, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwaptionVolatilityStructure(shared_ptr<SwaptionVolatilityStructure>(alloc(new ConstantSwaptionVolatility(settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), (*arg(dc)), (VolatilityType)type, shift)))));+  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityStructure*>(e, er);}}+double qlSwaptionVolatilityStructureBlackVariance1(QlSwaptionVolatilityStructure* o, int optionDate, int n, int u, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(Date(optionDate), Period(n, (TimeUnit)u), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureBlackVariance2(QlSwaptionVolatilityStructure* o, double optionTime, int n, int u, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(optionTime, Period(n, (TimeUnit)u), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureBlackVariance3(QlSwaptionVolatilityStructure* o, int n, int u, double swapLength, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(Period(n, (TimeUnit)u), swapLength, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureBlackVariance4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(Date(optionDate), swapLength, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureBlackVariance5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(optionTime, swapLength, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureBlackVariance(QlSwaptionVolatilityStructure* o, int n, int u, int n1, int u1, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(Period(n, (TimeUnit)u), Period(n1, (TimeUnit)u1), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureMaxSwapLength(QlSwaptionVolatilityStructure* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->maxSwapLength();} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlSwaptionVolatilityStructureMaxSwapTenor(QlSwaptionVolatilityStructure* o, int *u, QlError **e) { QlCallScope callbackScope(e);+  try {const Period &p = (*arg(o))->maxSwapTenor();*u = p.units(); return p.length();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+QlSmileSection* qlSwaptionVolatilityStructureSmileSection1(QlSwaptionVolatilityStructure* o, int optionDate, int n, int u, int extr, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Date(optionDate), Period(n, (TimeUnit)u), extr))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlSwaptionVolatilityStructureSmileSection2(QlSwaptionVolatilityStructure* o, double optionTime, int n, int u, int extr, QlError **e) { QlCallScope callbackScope(e);+  try {+    // declared but not implemented in Swaption TS for some reason:+    //return ret(new QlSmileSection(alloc((*arg(o))->smileSection(optionTime, *arg(swapTenor), extr))));+    SwaptionVolatilityStructure *ts = handlePtr(arg(o)).get(); Time length = ts->swapLength(Period(n, (TimeUnit)u));+    return ret(new QlSmileSection(alloc(ts->smileSection(optionTime, length, extr))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlSwaptionVolatilityStructureSmileSection3(QlSwaptionVolatilityStructure* o, int n, int u, double swapLength, int extr, QlError **e) { QlCallScope callbackScope(e);+  try {+    // declared but not implemented in Swaption TS for some reason:+    //return ret(new QlSmileSection(alloc((*arg(o))->smileSection(*arg(optionTenor), swapLength, extr))));+    SwaptionVolatilityStructure *ts = handlePtr(arg(o)).get(); Date optionDate = ts->optionDateFromTenor(Period(n, (TimeUnit)u));+    Time optionTime = ts->timeFromReference(optionDate);+    return ret(new QlSmileSection(alloc(ts->smileSection(optionTime, swapLength, extr))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlSwaptionVolatilityStructureSmileSection4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, int extr, QlError **e) { QlCallScope callbackScope(e);+  try {+    // declared but not implemented in Swaption TS for some reason:+    //return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Date(optionDate), swapLength, extr))));+    SwaptionVolatilityStructure *ts = handlePtr(arg(o)).get(); Time optionTime = ts->timeFromReference(Date(optionDate));+    return ret(new QlSmileSection(alloc(ts->smileSection(optionTime, swapLength, extr))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}++QlSmileSection* qlSwaptionVolatilityStructureSmileSection5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, int extr, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(optionTime, swapLength, extr))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlSwaptionVolatilityStructureSmileSection(QlSwaptionVolatilityStructure* o, int n, int u, int n1, int u1, int extr, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Period(n, (TimeUnit)u), Period(n1, (TimeUnit)u1), extr))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlSabrSmileSection(double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double shift, int volatilityType, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new SabrSmileSection(+      timeToExpiry, forward, std::vector<Real>{alpha, beta, nu, rho}, shift, (VolatilityType)volatilityType)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlSabrSmileSection1(int optionDate, double forward, double alpha, double beta, double nu, double rho, int referenceDate, DayCounter* dc, double shift, int volatilityType, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new SabrSmileSection(+      Date(optionDate), forward, std::vector<Real>{alpha, beta, nu, rho}, qlNullableDate(referenceDate),+      *arg(dc), shift, (VolatilityType)volatilityType)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlNoArbSabrSmileSection(double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double shift, int volatilityType, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new NoArbSabrSmileSection(+      timeToExpiry, forward, std::vector<Real>{alpha, beta, nu, rho}, shift, (VolatilityType)volatilityType)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlNoArbSabrSmileSection1(int optionDate, double forward, double alpha, double beta, double nu, double rho, DayCounter* dc, double shift, int volatilityType, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new NoArbSabrSmileSection(+      Date(optionDate), forward, std::vector<Real>{alpha, beta, nu, rho}, *arg(dc), shift, (VolatilityType)volatilityType)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+double qlSmileSectionVolatility(QlSmileSection* o, double strike, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(strike);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSmileSectionVariance(QlSmileSection* o, double strike, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->variance(strike);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSmileSectionAtmLevel(QlSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmLevel();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSmileSectionOptionPrice(QlSmileSection* o, double strike, int type, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->optionPrice(strike, (Option::Type)type, discount);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSmileSectionDigitalOptionPrice(QlSmileSection* o, double strike, int type, double discount, double gap, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->digitalOptionPrice(strike, (Option::Type)type, discount, gap);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSmileSectionDensity(QlSmileSection* o, double strike, double discount, double gap, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->density(strike, discount, gap);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSmileSectionMinStrike(QlSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->minStrike();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSmileSectionMaxStrike(QlSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->maxStrike();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSmileSectionVega(QlSmileSection* o, double strike, double discount, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->vega(strike, discount);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlSmileSection* qlFlatSmileSection(int d, double vol, DayCounter* dc, int referenceDate, double atmLevel, int type, double shift, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new FlatSmileSection(+      Date(d), vol, *arg(dc), qlNullableDate(referenceDate), atmLevel, (VolatilityType)type, shift)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlSpreadedSmileSection(QlSmileSection* source, QlQuote* spread, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new SpreadedSmileSection(*arg(source), *arg(spread))))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlAtmSmileSection(QlSmileSection* source, double atm, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new AtmSmileSection(*arg(source), atm)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+// SviSmileSection exposes no getters beyond the SmileSection base (a/b/sigma/rho/m are+// private, no accessors), so this returns the generic QlSmileSection directly -- same+// shape as qlFlatSmileSection/qlSpreadedSmileSection/qlAtmSmileSection above, not the+// dedicated-leaf pattern used for SabrInterpolatedSmileSection.+QlSmileSection* qlSviSmileSection(int d, double forward, double a, double b, double sigma, double rho, double m, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(new SviSmileSection(+      Date(d), forward, std::vector<Real>{a, b, sigma, rho, m}, *arg(dc))))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+// ZabrSmileSection's evaluation-tag dispatch lives in qlTermStructureAux.cpp (a runtime enum+// selects a template argument). Same generic-QlSmileSection shape as qlSviSmileSection above --+// ZabrSmileSection's only extra getter, model(), isn't exposed (no known consumer; ZabrModel+// itself isn't bound as its own type).+QlSmileSection* qlZabrSmileSection(int evaluation, double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double gamma, unsigned moneynessLen, double* moneyness, unsigned fdRefinement, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(+      qlZabrSmileSectionAux(evaluation, timeToExpiry, forward, std::vector<Real>{alpha, beta, nu, rho, gamma},+          std::vector<Real>(moneyness, moneyness + moneynessLen), fdRefinement)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlZabrSmileSection1(int evaluation, int d, double forward, double alpha, double beta, double nu, double rho, double gamma, DayCounter* dc, unsigned moneynessLen, double* moneyness, unsigned fdRefinement, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc(ext::shared_ptr<SmileSection>(+      qlZabrSmileSectionAux1(evaluation, Date(d), forward, std::vector<Real>{alpha, beta, nu, rho, gamma},+          *arg(dc), std::vector<Real>(moneyness, moneyness + moneynessLen), fdRefinement)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSabrInterpolatedSmileSection* qlSabrInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, double shift, QlError **e) { QlCallScope callbackScope(e);+  try {+    // endCriteria/method are nullable (NULL -> empty shared_ptr, letting SABRInterpolation's+    // own internal EndCriteria/LevenbergMarquardt defaults apply); when given, copying the+    // shared_ptr out of Haskell's QlEndCriteria/QlOptimizationMethod box into this ctor's own+    // shared_ptr member is safe regardless of when Haskell's box is later collected -- see the+    // qlaux.h comment above the QlEndCriteria/QlOptimizationMethod aliases.+    // Keep the concrete type for the parameter getters; the conversion below supplies the+    // generic SmileSection interface.+    ext::shared_ptr<SabrInterpolatedSmileSection> section(new SabrInterpolatedSmileSection(+        Date(optionDate), *arg(forward), std::vector<Real>(strikes, strikes + strikesLen), hasFloatingStrikes,+        *arg(atmVolatility), qlHandleVector(vols, volsLen), alpha, beta, nu, rho,+        isAlphaFixed, isBetaFixed, isNuFixed, isRhoFixed, vegaWeighted,+        endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(),+        method ? *arg(method) : shared_ptr<OptimizationMethod>(), *arg(dc), shift));+    section->atmLevel(); // force calibration now, surfacing failures at construction+    return ret(new QlSabrInterpolatedSmileSection(alloc(section)));+  } catch (std::exception& er) {return handleException<QlSabrInterpolatedSmileSection*>(e, er);}}+void qlFreeSabrInterpolatedSmileSection(QlSabrInterpolatedSmileSection* p) {del(p);}+// Fresh shared_ptr construction (implicit Derived->Base conversion), not a cast -- same+// pattern as qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure.+QlSmileSection* qlSabrInterpolatedSmileSectionAsSmileSection(QlSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(*arg(o)));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+double qlSabrInterpolatedSmileSectionAlpha(QlSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->alpha();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSabrInterpolatedSmileSectionBeta(QlSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->beta();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSabrInterpolatedSmileSectionNu(QlSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->nu();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSabrInterpolatedSmileSectionRho(QlSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->rho();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSabrInterpolatedSmileSectionRmsError(QlSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->rmsError();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSabrInterpolatedSmileSectionMaxError(QlSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->maxError();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlSabrInterpolatedSmileSectionEndCriteria(QlSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (int)(*arg(o))->endCriteria();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+// SVI's aIsFixed..mIsFixed have no upstream defaults (unlike SABR's isAlphaFixed..isRhoFixed,+// which default to false) -- only vegaWeighted/endCriteria/method/dc are trailing-defaulted, so+// this widens in place rather than using a TH options record (below the 10-param threshold).+// Bind only the Quote overload, per AGENTS.md's std::variant/Handle<Quote> rule (SabrInterpolated-+// SmileSection above does the same; the flat Rate/Volatility overload stays unbound). Same+// dedicated-leaf-over-dynamic_cast reasoning and eager-calibration-at-construction convention+// (atmLevel() forces the fit now, surfacing checkSviParameters' QL_REQUIREs at construction+// rather than at first use) as qlSabrInterpolatedSmileSection.+QlSviInterpolatedSmileSection* qlSviInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double a, double b, double sigma, double rho, double m, int aIsFixed, int bIsFixed, int sigmaIsFixed, int rhoIsFixed, int mIsFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {+    ext::shared_ptr<SviInterpolatedSmileSection> section(new SviInterpolatedSmileSection(+        Date(optionDate), *arg(forward), std::vector<Real>(strikes, strikes + strikesLen), hasFloatingStrikes,+        *arg(atmVolatility), qlHandleVector(vols, volsLen), a, b, sigma, rho, m,+        aIsFixed, bIsFixed, sigmaIsFixed, rhoIsFixed, mIsFixed, vegaWeighted,+        endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(),+        method ? *arg(method) : shared_ptr<OptimizationMethod>(), *arg(dc)));+    section->atmLevel(); // force calibration now, surfacing failures at construction+    return ret(new QlSviInterpolatedSmileSection(alloc(section)));+  } catch (std::exception& er) {return handleException<QlSviInterpolatedSmileSection*>(e, er);}}+void qlFreeSviInterpolatedSmileSection(QlSviInterpolatedSmileSection* p) {del(p);}+// Fresh shared_ptr construction (implicit Derived->Base conversion), not a cast -- same+// pattern as qlSabrInterpolatedSmileSectionAsSmileSection.+QlSmileSection* qlSviInterpolatedSmileSectionAsSmileSection(QlSviInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(*arg(o)));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+double qlSviInterpolatedSmileSectionA(QlSviInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->a();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSviInterpolatedSmileSectionB(QlSviInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->b();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSviInterpolatedSmileSectionSigma(QlSviInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->sigma();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSviInterpolatedSmileSectionRho(QlSviInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->rho();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSviInterpolatedSmileSectionM(QlSviInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->m();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSviInterpolatedSmileSectionRmsError(QlSviInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->rmsError();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSviInterpolatedSmileSectionMaxError(QlSviInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->maxError();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlSviInterpolatedSmileSectionEndCriteria(QlSviInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (int)(*arg(o))->endCriteria();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+// NoArbSabrInterpolatedSmileSection's isAlphaFixed..isRhoFixed all default to false, same as+// SabrInterpolatedSmileSection's, and it has no shift parameter (unlike SabrInterpolatedSmile-+// Section) -- 8 trailing-defaulted params, still under the 10-param threshold, so this widens in+// place like qlSviInterpolatedSmileSection. Same std::variant/Handle<Quote> rule (Quote overload+// only), dedicated-leaf-over-dynamic_cast reasoning, and eager-calibration-at-construction+// convention (atmLevel() forces the fit now) as qlSabrInterpolatedSmileSection/+// qlSviInterpolatedSmileSection above.+QlNoArbSabrInterpolatedSmileSection* qlNoArbSabrInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {+    ext::shared_ptr<NoArbSabrInterpolatedSmileSection> section(new NoArbSabrInterpolatedSmileSection(+        Date(optionDate), *arg(forward), std::vector<Real>(strikes, strikes + strikesLen), hasFloatingStrikes,+        *arg(atmVolatility), qlHandleVector(vols, volsLen), alpha, beta, nu, rho,+        isAlphaFixed, isBetaFixed, isNuFixed, isRhoFixed, vegaWeighted,+        endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(),+        method ? *arg(method) : shared_ptr<OptimizationMethod>(), *arg(dc)));+    section->atmLevel(); // force calibration now, surfacing failures at construction+    return ret(new QlNoArbSabrInterpolatedSmileSection(alloc(section)));+  } catch (std::exception& er) {return handleException<QlNoArbSabrInterpolatedSmileSection*>(e, er);}}+void qlFreeNoArbSabrInterpolatedSmileSection(QlNoArbSabrInterpolatedSmileSection* p) {del(p);}+// Fresh shared_ptr construction (implicit Derived->Base conversion), not a cast -- same pattern+// as qlSabrInterpolatedSmileSectionAsSmileSection.+QlSmileSection* qlNoArbSabrInterpolatedSmileSectionAsSmileSection(QlNoArbSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(*arg(o)));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+double qlNoArbSabrInterpolatedSmileSectionAlpha(QlNoArbSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->alpha();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlNoArbSabrInterpolatedSmileSectionBeta(QlNoArbSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->beta();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlNoArbSabrInterpolatedSmileSectionNu(QlNoArbSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->nu();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlNoArbSabrInterpolatedSmileSectionRho(QlNoArbSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->rho();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlNoArbSabrInterpolatedSmileSectionRmsError(QlNoArbSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->rmsError();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlNoArbSabrInterpolatedSmileSectionMaxError(QlNoArbSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->maxError();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlNoArbSabrInterpolatedSmileSectionEndCriteria(QlNoArbSabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (int)(*arg(o))->endCriteria();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+// ZabrInterpolatedSmileSection<Evaluation>'s evaluation-tag dispatch lives in+// qlTermStructureAux.cpp; see the ZabrInterpolatedSmileSectionHandle comment in qlaux.h for why+// this wraps a handle of closures rather than a dedicated leaf or a type-erased SmileSection.+QlZabrInterpolatedSmileSection* qlZabrInterpolatedSmileSection(int evaluation, int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, double gamma, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int isGammaFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto handle = allocShared(qlZabrInterpolatedSmileSectionAux(evaluation, Date(optionDate), *arg(forward),+        std::vector<Real>(strikes, strikes + strikesLen), hasFloatingStrikes, *arg(atmVolatility),+        qlHandleVector(vols, volsLen), alpha, beta, nu, rho, gamma,+        isAlphaFixed, isBetaFixed, isNuFixed, isRhoFixed, isGammaFixed, vegaWeighted,+        endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(),+        method ? *arg(method) : shared_ptr<OptimizationMethod>(), *arg(dc)));+    return ret(new QlZabrInterpolatedSmileSection(handle));+  } catch (std::exception& er) {return handleException<QlZabrInterpolatedSmileSection*>(e, er);}}+void qlFreeZabrInterpolatedSmileSection(QlZabrInterpolatedSmileSection* p) {del(p);}+QlSmileSection* qlZabrInterpolatedSmileSectionAsSmileSection(QlZabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection((*arg(o))->section));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+double qlZabrInterpolatedSmileSectionAlpha(QlZabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->alphaFn();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlZabrInterpolatedSmileSectionBeta(QlZabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->betaFn();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlZabrInterpolatedSmileSectionNu(QlZabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->nuFn();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlZabrInterpolatedSmileSectionRho(QlZabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->rhoFn();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlZabrInterpolatedSmileSectionGamma(QlZabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->gammaFn();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlZabrInterpolatedSmileSectionRmsError(QlZabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->rmsErrorFn();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlZabrInterpolatedSmileSectionMaxError(QlZabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->maxErrorFn();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlZabrInterpolatedSmileSectionEndCriteria(QlZabrInterpolatedSmileSection* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (int)(*arg(o))->endCriteriaFn();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlSwaptionVolatilityStructureSwapLength1(QlSwaptionVolatilityStructure* o, int start, int end, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->swapLength(Date(start), Date(end));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureSwapLength(QlSwaptionVolatilityStructure* o, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->swapLength(Period(n, (TimeUnit)u));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureVolatility1(QlSwaptionVolatilityStructure* o, int optionDate, int n, int u, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(Date(optionDate), Period(n, (TimeUnit)u), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureVolatility2(QlSwaptionVolatilityStructure* o, double optionTime, int n, int u, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(optionTime, Period(n, (TimeUnit)u), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureVolatility3(QlSwaptionVolatilityStructure* o, int n, int u, double swapLength, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(Period(n, (TimeUnit)u), swapLength, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureVolatility4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(Date(optionDate), swapLength, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureVolatility5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(optionTime, swapLength, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSwaptionVolatilityStructureVolatility(QlSwaptionVolatilityStructure* o, int n, int u, int n1, int u1, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(Period(n, (TimeUnit)u), Period(n1, (TimeUnit)u1), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlCapFloorTermVolCurve* qlCapFloorTermVolCurve1(int settlementDate, Calendar* calendar, int bdc, unsigned l, int *n, unsigned, int *u, unsigned volsLen, QlQuote** vols, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloorTermVolCurve(alloc(new CapFloorTermVolCurve(Date(settlementDate), *arg(calendar), (BusinessDayConvention)bdc,+              qlPeriodVector(n, u, l), qlHandleVector(vols, volsLen), *arg(dc)))));+  } catch (std::exception& er) {return handleException<QlCapFloorTermVolCurve*>(e, er);}}+QlCapFloorTermVolCurve* qlCapFloorTermVolCurve(unsigned settlementDays, Calendar* calendar, int bdc, unsigned l, int *n, unsigned, int *u, unsigned volsLen, QlQuote** vols, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloorTermVolCurve(alloc(new CapFloorTermVolCurve(settlementDays, *arg(calendar), (BusinessDayConvention)bdc,+              qlPeriodVector(n, u, l), qlHandleVector(vols, volsLen), *arg(dc)))));+  } catch (std::exception& er) {return handleException<QlCapFloorTermVolCurve*>(e, er);}}+QlCapFloorTermVolatilityStructure* qlConstantCapFloorTermVolatility1(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloorTermVolatilityStructure(alloc(new ConstantCapFloorTermVolatility(Date(referenceDate), *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), *arg(dc)))));+  } catch (std::exception& er) {return handleException<QlCapFloorTermVolatilityStructure*>(e, er);}}+QlCapFloorTermVolatilityStructure* qlConstantCapFloorTermVolatility(unsigned settlementDays, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloorTermVolatilityStructure(alloc(new ConstantCapFloorTermVolatility(settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(volatility), *arg(dc)))));+  } catch (std::exception& er) {return handleException<QlCapFloorTermVolatilityStructure*>(e, er);}}+double qlCapFloorTermVolatilityStructureVolatilityForPeriod(QlCapFloorTermVolatilityStructure* o, int n, int u, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(Period(n, (TimeUnit)u), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCapFloorTermVolatilityStructureVolatilityForDate(QlCapFloorTermVolatilityStructure* o, int date, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(Date(date), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCapFloorTermVolatilityStructureVolatilityForTime(QlCapFloorTermVolatilityStructure* o, double t, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(t, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlSwaptionVolatilityStructure* qlSpreadedSwaptionVolatility(QlSwaptionVolatilityStructure* x0, QlQuote* spread, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwaptionVolatilityStructure(shared_ptr<SwaptionVolatilityStructure>(alloc(new SpreadedSwaptionVolatility(*arg(x0), *arg(spread))))));+  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityStructure*>(e, er);}}+// Smile sections use upstream's default Gaussian1dSwaptionEngine; hasquant's engines are+// type-erased PricingEngines.+QlSwaptionVolatilityStructure* qlGaussian1dSwaptionVolatility(Calendar* cal, int bdc, QlSwapIndex* indexBase, QlGaussian1dModel* model, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+#if QL_HEX_VERSION < 0x01440000+  try {return ret(new QlSwaptionVolatilityStructure(allocShared(new UnitNominalGaussian1dSwaptionVolatility(*arg(cal), (BusinessDayConvention)bdc, *arg(indexBase), *arg(model), *arg(dc)))));+#else+  try {return ret(new QlSwaptionVolatilityStructure(allocShared(new Gaussian1dSwaptionVolatility(*arg(cal), (BusinessDayConvention)bdc, *arg(indexBase), *arg(model), *arg(dc)))));+#endif+  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityStructure*>(e, er);}}+QlOptionletVolatilityStructure* qlSpreadedOptionletVolatility(QlOptionletVolatilityStructure* x0, QlQuote* spread, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOptionletVolatilityStructure(shared_ptr<OptionletVolatilityStructure>(alloc(new SpreadedOptionletVolatility(*arg(x0), *arg(spread))))));+  } catch (std::exception& er) {return handleException<QlOptionletVolatilityStructure*>(e, er);}}++void qlFreeCapFloorTermVolatilityStructure(QlCapFloorTermVolatilityStructure *o) {del(o);}+QlVolatilityTermStructure* qlCapFloorTermVolatilityStructureAsVolatilityTermStructure(QlCapFloorTermVolatilityStructure *o) {return ret(new QlVolatilityTermStructure(*arg(o)));}+void qlFreeCapFloorTermVolCurve(QlCapFloorTermVolCurve *o) {del(o);}+QlCapFloorTermVolatilityStructure* qlCapFloorTermVolCurveAsCapFloorTermVolatilityStructure(QlCapFloorTermVolCurve *o) {return ret(new QlCapFloorTermVolatilityStructure(*arg(o)));}+void qlCapFloorTermVolCurveOptionDates(QlCapFloorTermVolCurve *o, unsigned *count, int **days, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(count, days);+  try {+    const std::vector<Date> &dates = (*arg(o))->optionDates();+    int *out = result.allocate((unsigned)dates.size());+    for (size_t i = 0; i < dates.size(); ++i) out[i] = dates[i].serialNumber();+    result.commit();+  } catch (const std::exception& er) {qlSetError(e, er.what());}+}+void qlCapFloorTermVolCurveOptionTimes(QlCapFloorTermVolCurve *o, unsigned *count, double **times, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> result(count, times);+  try {+    const std::vector<Time> &t = (*arg(o))->optionTimes();+    double *out = result.allocate((unsigned)t.size());+    for (size_t i = 0; i < t.size(); ++i) out[i] = t[i];+    result.commit();+  } catch (const std::exception& er) {qlSetError(e, er.what());}+}++void qlFreeCapFloorTermVolSurface(QlCapFloorTermVolSurface *o) {del(o);}+QlCapFloorTermVolatilityStructure* qlCapFloorTermVolSurfaceAsCapFloorTermVolatilityStructure(QlCapFloorTermVolSurface *o) {return ret(new QlCapFloorTermVolatilityStructure(*arg(o)));}+void qlCapFloorTermVolSurfaceOptionDates(QlCapFloorTermVolSurface *o, unsigned *count, int **days, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> result(count, days);+  try {+    const std::vector<Date> &dates = (*arg(o))->optionDates();+    int *out = result.allocate((unsigned)dates.size());+    for (size_t i = 0; i < dates.size(); ++i) out[i] = dates[i].serialNumber();+    result.commit();+  } catch (const std::exception& er) {qlSetError(e, er.what());}+}+void qlCapFloorTermVolSurfaceOptionTimes(QlCapFloorTermVolSurface *o, unsigned *count, double **times, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> result(count, times);+  try {+    const std::vector<Time> &t = (*arg(o))->optionTimes();+    double *out = result.allocate((unsigned)t.size());+    for (size_t i = 0; i < t.size(); ++i) out[i] = t[i];+    result.commit();+  } catch (const std::exception& er) {qlSetError(e, er.what());}+}+void qlFreeLocalVolTermStructure(QlLocalVolTermStructure *o) {del(o);}+QlVolatilityTermStructure* qlLocalVolTermStructureAsVolatilityTermStructure(QlLocalVolTermStructure *o) {return ret(new QlVolatilityTermStructure(*arg(o)));}+double qlLocalVolTermStructureLocalVol(QlLocalVolTermStructure* o, int d, double underlyingLevel, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->localVol(Date(d), underlyingLevel, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeBlackVarianceCurve(QlBlackVarianceCurve *o) {del(o);}+QlBlackVolTermStructure* qlBlackVarianceCurveAsBlackVolTermStructure(QlBlackVarianceCurve *o) {return ret(new QlBlackVolTermStructure(*arg(o)));}+QlLocalVolTermStructure* qlLocalConstantVol1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLocalVolTermStructure(alloc(new LocalConstantVol(settlementDays, *arg(x1), *arg(volatility), *arg(dayCounter)))));+  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}+QlLocalVolTermStructure* qlLocalConstantVol(int referenceDate, QlQuote* volatility, DayCounter* dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLocalVolTermStructure(alloc(new LocalConstantVol(Date(referenceDate), *arg(volatility), *arg(dayCounter)))));+  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}+QlLocalVolTermStructure* qlLocalVolCurve(QlBlackVarianceCurve* curve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLocalVolTermStructure(alloc(new LocalVolCurve(Handle<BlackVarianceCurve>(*arg(curve))))));+  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}+QlLocalVolTermStructure* qlLocalVolSurface(QlBlackVolTermStructure* blackTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* dividendTS, QlQuote* underlying, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLocalVolTermStructure(alloc(new LocalVolSurface(*arg(blackTS), *arg(riskFreeTS), *arg(dividendTS), *arg(underlying)))));+  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}+QlLocalVolTermStructure* qlNoExceptLocalVolSurface(QlBlackVolTermStructure* blackTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* dividendTS, QlQuote* underlying, double illegalLocalVolOverwrite, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLocalVolTermStructure(alloc(new NoExceptLocalVolSurface(*arg(blackTS), *arg(riskFreeTS), *arg(dividendTS), *arg(underlying), illegalLocalVolOverwrite))));+  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}+QlLocalVolTermStructure* qlFixedLocalVolSurface(int referenceDate, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned matrixRows, unsigned matrixCols, double* matrixData, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLocalVolTermStructure(alloc(new FixedLocalVolSurface(Date(referenceDate), qlDateVector(dates, datesLen),+      std::vector<Real>(strikes, strikes+strikesLen), ext::make_shared<Matrix>(qlMatrix(matrixData, matrixRows, matrixCols)),+      *arg(dayCounter), (FixedLocalVolSurface::Extrapolation)lowerExtrapolation, (FixedLocalVolSurface::Extrapolation)upperExtrapolation))));+  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}+void qlFreeGridModelLocalVolSurface(QlGridModelLocalVolSurface *o) {del(o);}+QlLocalVolTermStructure* qlGridModelLocalVolSurfaceAsLocalVolTermStructure(QlGridModelLocalVolSurface *o) {return ret(new QlLocalVolTermStructure(*arg(o)));}+QlCalibratedModel* qlGridModelLocalVolSurfaceAsCalibratedModel(QlGridModelLocalVolSurface *o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCalibratedModel(*arg(o)));+  } catch (std::exception& er) {return handleException<QlCalibratedModel*>(e, er);}}+QlGridModelLocalVolSurface* qlGridModelLocalVolSurface(int referenceDate, unsigned datesLen, int* dates, unsigned rows, unsigned* strikeLengths, double* strikes, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, QlError **e) { QlCallScope callbackScope(e);+  try {+    std::vector<ext::shared_ptr<std::vector<Real>>> strikeRows;+    strikeRows.reserve(rows);+    size_t offset = 0;+    for (size_t i = 0; i < rows; ++i) {+      strikeRows.push_back(ext::make_shared<std::vector<Real>>(strikes + offset, strikes + offset + strikeLengths[i]));+      offset += strikeLengths[i];+    }+    return ret(new QlGridModelLocalVolSurface(alloc(new GridModelLocalVolSurface(+        Date(referenceDate), qlDateVector(dates, datesLen), strikeRows, *arg(dayCounter),+        (FixedLocalVolSurface::Extrapolation)lowerExtrapolation,+        (FixedLocalVolSurface::Extrapolation)upperExtrapolation))));+  } catch (std::exception& er) {return handleException<QlGridModelLocalVolSurface*>(e, er);}}+QlBlackVolTermStructure* qlHestonBlackVolSurface(QlHestonModel* model, int cpxLogFormula, unsigned integrationOrder, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new HestonBlackVolSurface(+      Handle<HestonModel>(*arg(model)), (AnalyticHestonEngine::ComplexLogFormula)cpxLogFormula,+      AnalyticHestonEngine::Integration::gaussLaguerre(integrationOrder))))));+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}+void qlFreeAndreasenHugeVolatilityInterpl(QlAndreasenHugeVolatilityInterpl *o) {del(o);}+QlAndreasenHugeVolatilityInterpl* qlAndreasenHugeVolatilityInterpl(unsigned calibrationLen, QlVanillaOption** options, QlQuote** quotes, QlQuote* spot, QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, int interpolationType, int calibrationType, unsigned nGridPoints, double minStrike, double maxStrike, QlOptimizationMethod* optimizationMethod, QlEndCriteria* endCriteria, QlError **e) { QlCallScope callbackScope(e);+  try {+    AndreasenHugeVolatilityInterpl::CalibrationSet calibrationSet;+    calibrationSet.reserve(calibrationLen);+    for (size_t i = 0; i < calibrationLen; ++i)+      calibrationSet.emplace_back(*arg(options[i]), handlePtr(arg(quotes[i])));+    return ret(new QlAndreasenHugeVolatilityInterpl(alloc(new AndreasenHugeVolatilityInterpl(+        calibrationSet, *arg(spot), *arg(riskFreeRate), *arg(dividendYield),+        (AndreasenHugeVolatilityInterpl::InterpolationType)interpolationType,+        (AndreasenHugeVolatilityInterpl::CalibrationType)calibrationType, nGridPoints,+        minStrike, maxStrike, *arg(optimizationMethod), **arg(endCriteria)))));+  } catch (std::exception& er) {return handleException<QlAndreasenHugeVolatilityInterpl*>(e, er);}}+void qlAndreasenHugeVolatilityInterplCalibrationError(QlAndreasenHugeVolatilityInterpl* o, unsigned* count, double** values, QlError **e) { QlCallScope callbackScope(e);+  *count = 0; *values = nullptr;+  try {+    const auto errors = (*arg(o))->calibrationError();+    auto out = qlAllocateDoubles(3); out[0] = std::get<0>(errors); out[1] = std::get<1>(errors); out[2] = std::get<2>(errors);+    *count = 3; *values = out;+  } catch (std::exception& er) {(void)handleException<void *>(e, er);}}+double qlAndreasenHugeVolatilityInterplFwd(QlAndreasenHugeVolatilityInterpl* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->fwd(t);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAndreasenHugeVolatilityInterplOptionPrice(QlAndreasenHugeVolatilityInterpl* o, double t, double strike, int optionType, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->optionPrice(t, strike, (Option::Type)optionType);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAndreasenHugeVolatilityInterplLocalVol(QlAndreasenHugeVolatilityInterpl* o, double t, double strike, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->localVol(t, strike);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlBlackVolTermStructure* qlAndreasenHugeVolatilityAdapter(QlAndreasenHugeVolatilityInterpl* o, double eps, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new AndreasenHugeVolatilityAdapter(*arg(o), eps)))));+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}+QlLocalVolTermStructure* qlAndreasenHugeLocalVolAdapter(QlAndreasenHugeVolatilityInterpl* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlLocalVolTermStructure(alloc(new AndreasenHugeLocalVolAdapter(*arg(o)))));+  } catch (std::exception& er) {return handleException<QlLocalVolTermStructure*>(e, er);}}+QlBlackVolTermStructure* qlImpliedVolTermStructure(QlBlackVolTermStructure* origTS, int referenceDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new ImpliedVolTermStructure(*arg(origTS), Date(referenceDate))))));+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}++QlBlackVarianceCurve* qlBlackVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned blackVolCurveLen, double* blackVolCurve, DayCounter* dayCounter, int forceMonotoneVariance, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto c = allocShared(new BlackVarianceCurve(Date(referenceDate), qlDateVector(dates, datesLen), std::vector<double>(blackVolCurve, blackVolCurve+blackVolCurveLen), *arg(dayCounter), forceMonotoneVariance));+    if (interpolator != Null<Integer>())+      qlSetBlackVarianceCurveInterpolationAux(c.get(), interpolator, approximator, approximatorArg);+    return ret(new QlBlackVarianceCurve(c));+  } catch (std::exception& er) {+    return handleException<QlBlackVarianceCurve*>(e, er);+  }+}++QlBlackVolTermStructure* qlBlackVarianceSurface(int referenceDate, Calendar* cal, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned blackVolMatrixRows, unsigned blackVolMatrixCols, double* blackVolMatrix, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, int interpolator, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto s = allocShared(new BlackVarianceSurface(Date(referenceDate), *arg(cal), qlDateVector(dates, datesLen), std::vector<double>(strikes, strikes+strikesLen), qlMatrix(blackVolMatrix, blackVolMatrixRows, blackVolMatrixCols), *arg(dayCounter), (BlackVarianceSurface::Extrapolation)lowerExtrapolation, (BlackVarianceSurface::Extrapolation)upperExtrapolation));+    qlSetBlackVarianceSurfaceInterpolationAux(s.get(), interpolator);+    return ret(new QlBlackVolTermStructure(s));+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}+QlBlackVolTermStructure* qlExtendedBlackVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned volsLen, QlQuote** vols, DayCounter* dayCounter, int forceMonotoneVariance, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new ExtendedBlackVarianceCurve(Date(referenceDate), qlDateVector(dates, datesLen), qlHandleVector(vols, volsLen), *arg(dayCounter), forceMonotoneVariance)))));+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}+// QuantLib <= 1.43 reads and writes out of bounds on every construction and update (fixed in 1.44).+QlBlackVolTermStructure* qlExtendedBlackVarianceSurface(int referenceDate, Calendar* cal, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, QlError **e) { QlCallScope callbackScope(e);+  try {+#if QL_HEX_VERSION < 0x01440000+    (void)referenceDate; (void)cal; (void)datesLen; (void)dates;+    (void)strikesLen; (void)strikes; (void)volRows; (void)volCols; (void)vols;+    (void)dayCounter; (void)lowerExtrapolation; (void)upperExtrapolation;+    QL_FAIL("ExtendedBlackVarianceSurface is unavailable with QuantLib " QL_VERSION+            " because its implementation accesses the volatility grid out of bounds");+#else+    QL_REQUIRE(volRows == strikesLen && volCols == datesLen, "volatilities need one row per strike and one column per date");+    return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(alloc(new OwningExtendedBlackVarianceSurface(Date(referenceDate), *arg(cal),+        qlDateVector(dates, datesLen), std::vector<double>(strikes, strikes+strikesLen), qlHandleVector(vols, volRows*volCols), *arg(dayCounter),+        (ExtendedBlackVarianceSurface::Extrapolation)lowerExtrapolation, (ExtendedBlackVarianceSurface::Extrapolation)upperExtrapolation)))));+#endif+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}+QlBlackVolTermStructure* qlPiecewiseBlackVarianceSurface(int referenceDate, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned blackVolsRows, unsigned blackVolsCols, double* blackVols, DayCounter* dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlBlackVolTermStructure(shared_ptr<BlackVolTermStructure>(+        PiecewiseBlackVarianceSurface::makeFromGrid(Date(referenceDate), qlDateVector(dates, datesLen),+            std::vector<Real>(strikes, strikes+strikesLen), qlMatrix(blackVols, blackVolsRows, blackVolsCols), *arg(dayCounter)))));+  } catch (std::exception& er) {return handleException<QlBlackVolTermStructure*>(e, er);}}+void qlFreeBlackVolatilitySurfaceDelta(QlBlackVolatilitySurfaceDelta *o) {del(o);}+QlBlackVolTermStructure* qlBlackVolatilitySurfaceDeltaAsBlackVolTermStructure(QlBlackVolatilitySurfaceDelta *o) {return ret(new QlBlackVolTermStructure(*arg(o)));}+QlBlackVolatilitySurfaceDelta* qlBlackVolatilitySurfaceDelta(int referenceDate, unsigned datesLen, int* dates,+    unsigned putDeltasLen, double* putDeltas, unsigned callDeltasLen, double* callDeltas,+    int hasAtm, unsigned blackVolMatrixRows, unsigned blackVolMatrixCols, double* blackVolMatrix,+    DayCounter* dayCounter, Calendar* cal, QlQuote* spot,+    QlYieldTermStructure* domesticTS, QlYieldTermStructure* foreignTS,+    int deltaType, int atmType, int atmDeltaType,+    int interpolationMethod, int flatStrikeExtrapolation, int timeExtrapolationType,+    int switchTenorLen, int switchTenorUnit,+    int longTermDeltaType, int longTermAtmType, int longTermAtmDeltaType,+    QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlBlackVolatilitySurfaceDelta(alloc(new BlackVolatilitySurfaceDelta(+        Date(referenceDate), qlDateVector(dates, datesLen),+        std::vector<Real>(putDeltas, putDeltas+putDeltasLen), std::vector<Real>(callDeltas, callDeltas+callDeltasLen),+        hasAtm, qlMatrix(blackVolMatrix, blackVolMatrixRows, blackVolMatrixCols),+        *arg(dayCounter), *arg(cal), *arg(spot), *arg(domesticTS), *arg(foreignTS),+        (DeltaVolQuote::DeltaType)deltaType, (DeltaVolQuote::AtmType)atmType,+        atmDeltaType < 0 ? nullopt : optional<DeltaVolQuote::DeltaType>((DeltaVolQuote::DeltaType)atmDeltaType),+        (BlackVolatilitySurfaceDelta::SmileInterpolationMethod)interpolationMethod,+        flatStrikeExtrapolation, (BlackVolTimeExtrapolation::Type)timeExtrapolationType,+        Period(switchTenorLen, (TimeUnit)switchTenorUnit),+        (DeltaVolQuote::DeltaType)longTermDeltaType, (DeltaVolQuote::AtmType)longTermAtmType,+        longTermAtmDeltaType < 0 ? nullopt : optional<DeltaVolQuote::DeltaType>((DeltaVolQuote::DeltaType)longTermAtmDeltaType)))));+  } catch (std::exception& er) {return handleException<QlBlackVolatilitySurfaceDelta*>(e, er);}}+QlSmileSection* qlBlackVolatilitySurfaceDeltaSmile1(QlBlackVolatilitySurfaceDelta* o, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection((*arg(o))->blackVolSmile(t)));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlBlackVolatilitySurfaceDeltaSmile(QlBlackVolatilitySurfaceDelta* o, int d, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection((*arg(o))->blackVolSmile(Date(d))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlCapFloorTermVolSurface* qlCapFloorTermVolSurface(unsigned settlementDays, Calendar* calendar, int bdc, unsigned l, int *n, unsigned, int *u, unsigned strikesLen, double* strikes, unsigned volatilitiesRows, unsigned volatilitiesCols, QlQuote** volatilities, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloorTermVolSurface(alloc(new CapFloorTermVolSurface(settlementDays, *arg(calendar), (BusinessDayConvention)bdc,+            qlPeriodVector(n, u, l), std::vector<double>(strikes, strikes+strikesLen), qlHandleMatrix(volatilities, volatilitiesRows, volatilitiesCols), *arg(dc)))));+  } catch (std::exception& er) {return handleException<QlCapFloorTermVolSurface*>(e, er);}}+QlCapFloorTermVolSurface* qlCapFloorTermVolSurface1(int settlementDate, Calendar* calendar, int bdc, unsigned l, int *n, unsigned, int *u, unsigned strikesLen, double* strikes, unsigned volatilitiesRows, unsigned volatilitiesCols, QlQuote** volatilities, DayCounter* dc, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCapFloorTermVolSurface(alloc(new CapFloorTermVolSurface(Date(settlementDate), *arg(calendar), (BusinessDayConvention)bdc,+            qlPeriodVector(n, u, l), std::vector<double>(strikes, strikes+strikesLen), qlHandleMatrix(volatilities, volatilitiesRows, volatilitiesCols), *arg(dc)))));+  } catch (std::exception& er) {return handleException<QlCapFloorTermVolSurface*>(e, er);}}+QlSwaptionVolatilityMatrix* qlSwaptionVolatilityMatrix(int referenceDate, Calendar* calendar, int bdc,+    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,+    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,+    unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dc, int flatExtrapolation, int type,+    unsigned shiftRows, unsigned shiftCols, double* shifts, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwaptionVolatilityMatrix(alloc(new SwaptionVolatilityMatrix(+            Date(referenceDate), *arg(calendar), (BusinessDayConvention)bdc,+            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),+            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),+            qlHandleMatrix(vols, volRows, volCols), *arg(dc), (bool)flatExtrapolation, (VolatilityType)type,+            qlRealMatrix(shifts, shiftRows, shiftCols)))));+  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityMatrix*>(e, er);}}+QlSwaptionVolatilityMatrix* qlSwaptionVolatilityMatrix1(Calendar* calendar, int bdc,+    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,+    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,+    unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dc, int flatExtrapolation, int type,+    unsigned shiftRows, unsigned shiftCols, double* shifts, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwaptionVolatilityMatrix(alloc(new SwaptionVolatilityMatrix(+            *arg(calendar), (BusinessDayConvention)bdc,+            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),+            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),+            qlHandleMatrix(vols, volRows, volCols), *arg(dc), (bool)flatExtrapolation, (VolatilityType)type,+            qlRealMatrix(shifts, shiftRows, shiftCols)))));+  } catch (std::exception& er) {return handleException<QlSwaptionVolatilityMatrix*>(e, er);}}+void qlFreeSwaptionVolatilityMatrix(QlSwaptionVolatilityMatrix *o) {del(o);}+// Fresh Handle for this newly built object -- same shape as qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure.+QlSwaptionVolatilityStructure* qlSwaptionVolatilityMatrixAsSwaptionVolatilityStructure(QlSwaptionVolatilityMatrix *o) {+  return ret(new QlSwaptionVolatilityStructure(*arg(o)));}+void qlSwaptionVolatilityMatrixLocate(QlSwaptionVolatilityMatrix *o, int optionDate, int n, int u, unsigned *i, unsigned *j, QlError **e) { QlCallScope callbackScope(e);+  OutValue<unsigned> iResult(i), jResult(j);+  try {std::pair<Size,Size> ij = (*arg(o))->locate(Date(optionDate), Period(n, (TimeUnit)u));+    iResult.set(ij.first); jResult.set(ij.second); iResult.commit(); jResult.commit();+  } catch (std::exception& er) {(void)handleException<void*>(e, er);}}++// These classes have dedicated Haskell types because they expose class-specific calculations.+// Their diagnostics take concrete pointers without runtime downcasts. Use+// qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure/+// qlInterpolatedSwaptionVolatilityCubeAsSwaptionVolatilityStructure/+// qlSwaptionVolatilityMatrixAsSwaptionVolatilityStructure (below) to pass any of them into+// anything that wants the generic parent (pricing engines, relinkable handles, etc.).+//+// endCriteria/method are nullable (NULL -> empty shared_ptr, letting SABRInterpolation's own+// internal EndCriteria/LevenbergMarquardt defaults apply at every calibrated node); when given,+// `endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>()` copies a shared reference into+// this ctor's own shared_ptr member -- safe regardless of when Haskell's own EndCriteria/+// OptimizationMethod box is collected, since QlEndCriteria/QlOptimizationMethod are themselves+// shared_ptr boxes (see qlLevenbergMarquardt/qlSimplex/qlEndCriteria in qlMisc.cpp): the+// underlying object is only freed once every shared_ptr referencing it has gone away.+//+// volSpreads and parametersGuess are both flattened over the (optionTenor x swapTenor) product as+// the OUTER index (row = j*nSwapTenors+k, j over optionTenors, k over swapTenors) -- not simply+// "one row per optionTenor" the way qlSwaptionVolatilityMatrix's grid is. volSpreadsCols is+// strikeSpreadsLen; parametersGuessCols is always 4 (SABR's alpha/beta/nu/rho).+//+// Calibration is lazy (XabrSwaptionVolatilityCube is a LazyObject): unlike+// qlSabrInterpolatedSmileSection, construction here does NOT force an eager fit, so a+// constructor call can succeed even for inputs that will later fail to calibrate -- the error+// only surfaces on the first smileSection/volatility/etc. call.+QlSabrSwaptionVolatilityCube* qlSabrSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,+    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,+    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,+    unsigned strikeSpreadsLen, double* strikeSpreads,+    unsigned volSpreadsRows, unsigned volSpreadsCols, QlQuote** volSpreads,+    QlSwapIndex* swapIndexBase, QlSwapIndex* shortSwapIndexBase,+    int vegaWeightedSmileFit,+    unsigned parametersGuessRows, unsigned parametersGuessCols, QlQuote** parametersGuess,+    int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed,+    int isAtmCalibrated,+    QlEndCriteria* endCriteria, QlOptimizationMethod* method,+    double maxErrorTolerance, double errorAccept, int useMaxError, unsigned maxGuesses,+    int backwardFlat, double cutoffStrike, int singlePassCalibration, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "sabrSwaptionVolatilityCube", !singlePassCalibration)) return nullptr;+  try {+    return ret(new QlSabrSwaptionVolatilityCube(alloc(new SabrSwaptionVolatilityCube(+            *arg(atmVolStructure),+            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),+            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),+            std::vector<Real>(strikeSpreads, strikeSpreads + strikeSpreadsLen),+            qlHandleMatrix(volSpreads, volSpreadsRows, volSpreadsCols),+            *arg(swapIndexBase), *arg(shortSwapIndexBase),+            (bool)vegaWeightedSmileFit,+            qlHandleMatrix(parametersGuess, parametersGuessRows, parametersGuessCols),+            std::vector<bool>{(bool)isAlphaFixed, (bool)isBetaFixed, (bool)isNuFixed, (bool)isRhoFixed},+            (bool)isAtmCalibrated,+            endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(), maxErrorTolerance,+            method ? *arg(method) : shared_ptr<OptimizationMethod>(),+            errorAccept, (bool)useMaxError, maxGuesses, (bool)backwardFlat, cutoffStrike QL144_ARGS((bool)singlePassCalibration)))));+  } catch (std::exception& er) {return handleException<QlSabrSwaptionVolatilityCube*>(e, er);}}+void qlFreeSabrSwaptionVolatilityCube(QlSabrSwaptionVolatilityCube *o) {del(o);}+// Fresh Handle for this newly built object -- same shape as every QlXxxAsSwaptionVolatilityStructure-+// style upcast that starts from a shared_ptr leaf (e.g. qlBlackVolatilitySurfaceDeltaAsBlackVolTermStructure),+// not a rewrap of an existing Handle.+QlSwaptionVolatilityStructure* qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlSabrSwaptionVolatilityCube *o) {+  return ret(new QlSwaptionVolatilityStructure(*arg(o)));}++// NoArbSabrSwaptionVolatilityCube is XabrSwaptionVolatilityCube<SwaptionVolCubeNoArbSabrModel> --+// the same class template as SabrSwaptionVolatilityCube one model policy over, with an identical+// constructor signature (both policies use the default XabrModelTraits<> nParams=4) and identical+// getters, so this is a straight copy of the SabrSwaptionVolatilityCube shims above with the type+// swapped -- no new marshalling shape. See the comment above qlSabrSwaptionVolatilityCube for the+// EndCriteria/OptimizationMethod nullability, volSpreads/parametersGuess flattening, and lazy-+// calibration notes, all identical here.+QlNoArbSabrSwaptionVolatilityCube* qlNoArbSabrSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,+    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,+    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,+    unsigned strikeSpreadsLen, double* strikeSpreads,+    unsigned volSpreadsRows, unsigned volSpreadsCols, QlQuote** volSpreads,+    QlSwapIndex* swapIndexBase, QlSwapIndex* shortSwapIndexBase,+    int vegaWeightedSmileFit,+    unsigned parametersGuessRows, unsigned parametersGuessCols, QlQuote** parametersGuess,+    int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed,+    int isAtmCalibrated,+    QlEndCriteria* endCriteria, QlOptimizationMethod* method,+    double maxErrorTolerance, double errorAccept, int useMaxError, unsigned maxGuesses,+    int backwardFlat, double cutoffStrike, int singlePassCalibration, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "noArbSabrSwaptionVolatilityCube", !singlePassCalibration)) return nullptr;+  try {+    return ret(new QlNoArbSabrSwaptionVolatilityCube(alloc(new NoArbSabrSwaptionVolatilityCube(+            *arg(atmVolStructure),+            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),+            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),+            std::vector<Real>(strikeSpreads, strikeSpreads + strikeSpreadsLen),+            qlHandleMatrix(volSpreads, volSpreadsRows, volSpreadsCols),+            *arg(swapIndexBase), *arg(shortSwapIndexBase),+            (bool)vegaWeightedSmileFit,+            qlHandleMatrix(parametersGuess, parametersGuessRows, parametersGuessCols),+            std::vector<bool>{(bool)isAlphaFixed, (bool)isBetaFixed, (bool)isNuFixed, (bool)isRhoFixed},+            (bool)isAtmCalibrated,+            endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(), maxErrorTolerance,+            method ? *arg(method) : shared_ptr<OptimizationMethod>(),+            errorAccept, (bool)useMaxError, maxGuesses, (bool)backwardFlat, cutoffStrike QL144_ARGS((bool)singlePassCalibration)))));+  } catch (std::exception& er) {return handleException<QlNoArbSabrSwaptionVolatilityCube*>(e, er);}}+void qlFreeNoArbSabrSwaptionVolatilityCube(QlNoArbSabrSwaptionVolatilityCube *o) {del(o);}+QlSwaptionVolatilityStructure* qlNoArbSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlNoArbSabrSwaptionVolatilityCube *o) {+  return ret(new QlSwaptionVolatilityStructure(*arg(o)));}+void qlNoArbSabrSwaptionVolatilityCubeSparseSabrParameters(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->sparseSabrParameters();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlNoArbSabrSwaptionVolatilityCubeDenseSabrParameters(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->denseSabrParameters();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlNoArbSabrSwaptionVolatilityCubeMarketVolCube(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->marketVolCube();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlNoArbSabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->volCubeAtmCalibrated();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+double qlNoArbSabrSwaptionVolatilityCubeAtmStrike1(QlNoArbSabrSwaptionVolatilityCube* o, int optionDate, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmStrike(Date(optionDate), Period(n, (TimeUnit)u));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlNoArbSabrSwaptionVolatilityCubeAtmStrike(QlNoArbSabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmStrike(Period(optionN, (TimeUnit)optionU), Period(n, (TimeUnit)u));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++// ZabrSwaptionVolatilityCube is the Xabr cube with the default ZABR kernel: NoArb's shims with a+// fifth (gamma) parameter column and fixed flag.+QlZabrSwaptionVolatilityCube* qlZabrSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,+    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,+    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,+    unsigned strikeSpreadsLen, double* strikeSpreads,+    unsigned volSpreadsRows, unsigned volSpreadsCols, QlQuote** volSpreads,+    QlSwapIndex* swapIndexBase, QlSwapIndex* shortSwapIndexBase,+    int vegaWeightedSmileFit,+    unsigned parametersGuessRows, unsigned parametersGuessCols, QlQuote** parametersGuess,+    int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int isGammaFixed,+    int isAtmCalibrated,+    QlEndCriteria* endCriteria, QlOptimizationMethod* method,+    double maxErrorTolerance, double errorAccept, int useMaxError, unsigned maxGuesses,+    int backwardFlat, double cutoffStrike, int singlePassCalibration, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "zabrSwaptionVolatilityCube", !singlePassCalibration)) return nullptr;+  try {+    return ret(new QlZabrSwaptionVolatilityCube(alloc(new ZabrSwaptionVolatilityCube(+            *arg(atmVolStructure),+            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),+            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),+            std::vector<Real>(strikeSpreads, strikeSpreads + strikeSpreadsLen),+            qlHandleMatrix(volSpreads, volSpreadsRows, volSpreadsCols),+            *arg(swapIndexBase), *arg(shortSwapIndexBase),+            (bool)vegaWeightedSmileFit,+            qlHandleMatrix(parametersGuess, parametersGuessRows, parametersGuessCols),+            std::vector<bool>{(bool)isAlphaFixed, (bool)isBetaFixed, (bool)isNuFixed, (bool)isRhoFixed, (bool)isGammaFixed},+            (bool)isAtmCalibrated,+            endCriteria ? *arg(endCriteria) : shared_ptr<EndCriteria>(), maxErrorTolerance,+            method ? *arg(method) : shared_ptr<OptimizationMethod>(),+            errorAccept, (bool)useMaxError, maxGuesses, (bool)backwardFlat, cutoffStrike QL144_ARGS((bool)singlePassCalibration)))));+  } catch (std::exception& er) {return handleException<QlZabrSwaptionVolatilityCube*>(e, er);}}+void qlFreeZabrSwaptionVolatilityCube(QlZabrSwaptionVolatilityCube *o) {del(o);}+QlSwaptionVolatilityStructure* qlZabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlZabrSwaptionVolatilityCube *o) {+  return ret(new QlSwaptionVolatilityStructure(*arg(o)));}+void qlZabrSwaptionVolatilityCubeSparseSabrParameters(QlZabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->sparseSabrParameters();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlZabrSwaptionVolatilityCubeDenseSabrParameters(QlZabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->denseSabrParameters();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlZabrSwaptionVolatilityCubeMarketVolCube(QlZabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->marketVolCube();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlZabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlZabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->volCubeAtmCalibrated();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+double qlZabrSwaptionVolatilityCubeAtmStrike1(QlZabrSwaptionVolatilityCube* o, int optionDate, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmStrike(Date(optionDate), Period(n, (TimeUnit)u));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlZabrSwaptionVolatilityCubeAtmStrike(QlZabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmStrike(Period(optionN, (TimeUnit)optionU), Period(n, (TimeUnit)u));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++// No EndCriteria/OptimizationMethod hazard here: InterpolatedSwaptionVolatilityCube only+// interpolates the given volSpreads, it never calibrates anything.+QlInterpolatedSwaptionVolatilityCube* qlInterpolatedSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,+    unsigned optionTenorsLen, int *optionTenorsNum, unsigned, int *optionTenorsUnit,+    unsigned swapTenorsLen, int *swapTenorsNum, unsigned, int *swapTenorsUnit,+    unsigned strikeSpreadsLen, double* strikeSpreads,+    unsigned volSpreadsRows, unsigned volSpreadsCols, QlQuote** volSpreads,+    QlSwapIndex* swapIndexBase, QlSwapIndex* shortSwapIndexBase,+    int vegaWeightedSmileFit, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlInterpolatedSwaptionVolatilityCube(alloc(new InterpolatedSwaptionVolatilityCube(+            *arg(atmVolStructure),+            qlPeriodVector(optionTenorsNum, optionTenorsUnit, optionTenorsLen),+            qlPeriodVector(swapTenorsNum, swapTenorsUnit, swapTenorsLen),+            std::vector<Real>(strikeSpreads, strikeSpreads + strikeSpreadsLen),+            qlHandleMatrix(volSpreads, volSpreadsRows, volSpreadsCols),+            *arg(swapIndexBase), *arg(shortSwapIndexBase),+            (bool)vegaWeightedSmileFit))));+  } catch (std::exception& er) {return handleException<QlInterpolatedSwaptionVolatilityCube*>(e, er);}}+void qlFreeInterpolatedSwaptionVolatilityCube(QlInterpolatedSwaptionVolatilityCube *o) {del(o);}+QlSwaptionVolatilityStructure* qlInterpolatedSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlInterpolatedSwaptionVolatilityCube *o) {+  return ret(new QlSwaptionVolatilityStructure(*arg(o)));}+// volSpreads(i) indexes by strike -- one Matrix (optionTenors x swapTenors) per strike spread.+void qlInterpolatedSwaptionVolatilityCubeVolSpreads(QlInterpolatedSwaptionVolatilityCube* o, unsigned i, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->volSpreads(i);}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}++// Matrix-out diagnostics, direct on the concrete type -- no downcast needed. Composes the+// established 1D out-array idiom (qlAllocateDoubles + unsigned*len/double**vs, see+// qlGsrVolatility/qlCalibratedModelParams) with row/col out-params -- no prior shim in this+// codebase returns a Matrix outward, every existing Matrix use (qlMatrix/qlHandleMatrix/+// qlRealMatrix) crosses the boundary inward only.+void qlSabrSwaptionVolatilityCubeSparseSabrParameters(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->sparseSabrParameters();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlSabrSwaptionVolatilityCubeDenseSabrParameters(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->denseSabrParameters();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlSabrSwaptionVolatilityCubeMarketVolCube(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->marketVolCube();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}+void qlSabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillMatrixOut([&] {return (*arg(o))->volCubeAtmCalibrated();}, rows, cols, len, vs);+  } catch (std::exception& er) {handleException<double*>(e, er);}}++// Both concrete cube types inherit atmStrike; each exposes it through its own binding.+double qlSabrSwaptionVolatilityCubeAtmStrike1(QlSabrSwaptionVolatilityCube* o, int optionDate, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmStrike(Date(optionDate), Period(n, (TimeUnit)u));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlSabrSwaptionVolatilityCubeAtmStrike(QlSabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmStrike(Period(optionN, (TimeUnit)optionU), Period(n, (TimeUnit)u));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlInterpolatedSwaptionVolatilityCubeAtmStrike1(QlInterpolatedSwaptionVolatilityCube* o, int optionDate, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmStrike(Date(optionDate), Period(n, (TimeUnit)u));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlInterpolatedSwaptionVolatilityCubeAtmStrike(QlInterpolatedSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmStrike(Period(optionN, (TimeUnit)optionU), Period(n, (TimeUnit)u));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeCallableBondVolatilityStructure(QlCallableBondVolatilityStructure *o) {del(o);}+QlTermStructure* qlCallableBondVolatilityStructureAsTermStructure(QlCallableBondVolatilityStructure *o) {return ret(new QlTermStructure(*arg(o)));}+void qlFreeDefaultProbabilityTermStructure(QlDefaultProbabilityTermStructure *o) {del(o);}+QlTermStructure* qlDefaultProbabilityTermStructureAsTermStructure(QlDefaultProbabilityTermStructure *o) {return ret(new QlTermStructure(*arg(o)));}+void qlFreeAffineHazardRateCurve(QlAffineHazardRateCurve *o) {del(o);}+QlDefaultProbabilityTermStructure* qlAffineHazardRateCurveAsDefaultProbabilityTermStructure(QlAffineHazardRateCurve *o) {return ret(new QlDefaultProbabilityTermStructure(*arg(o)));}+double qlAffineHazardRateCurveConditionalSurvivalProbability(QlAffineHazardRateCurve* o, int dFwd, int dTgt, double yVal, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->conditionalSurvivalProbability(Date(dFwd), Date(dTgt), yVal, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlAffineHazardRateCurveConditionalSurvivalProbability1(QlAffineHazardRateCurve* o, double tFwd, double tTgt, double yVal, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->conditionalSurvivalProbability(tFwd, tTgt, yVal, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++QlCallableBondVolatilityStructure* qlCallableBondConstantVolatility1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCallableBondVolatilityStructure(alloc(new CallableBondConstantVolatility(settlementDays, *arg(x1), *arg(volatility), *arg(dayCounter)))));+  } catch (std::exception& er) {return handleException<QlCallableBondVolatilityStructure*>(e, er);}}+QlCallableBondVolatilityStructure* qlCallableBondConstantVolatility(int referenceDate, QlQuote* volatility, DayCounter* dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCallableBondVolatilityStructure(alloc(new CallableBondConstantVolatility(Date(referenceDate), *arg(volatility), *arg(dayCounter)))));+  } catch (std::exception& er) {return handleException<QlCallableBondVolatilityStructure*>(e, er);}}+double qlCallableBondVolatilityStructureVolatilityForTime(QlCallableBondVolatilityStructure* o, double optionTime, double bondLength, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(optionTime, bondLength, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCallableBondVolatilityStructureVolatilityForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(Date(optionDate), Period(bondTenorLen, (TimeUnit)bondTenorUnit), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCallableBondVolatilityStructureVolatilityForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->volatility(Period(optionTenorLen, (TimeUnit)optionTenorUnit), Period(bondTenorLen, (TimeUnit)bondTenorUnit), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCallableBondVolatilityStructureBlackVarianceForTime(QlCallableBondVolatilityStructure* o, double optionTime, double bondLength, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(optionTime, bondLength, strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCallableBondVolatilityStructureBlackVarianceForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(Date(optionDate), Period(bondTenorLen, (TimeUnit)bondTenorUnit), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCallableBondVolatilityStructureBlackVarianceForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->blackVariance(Period(optionTenorLen, (TimeUnit)optionTenorUnit), Period(bondTenorLen, (TimeUnit)bondTenorUnit), strike, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlSmileSection* qlCallableBondVolatilityStructureSmileSectionForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Date(optionDate), Period(bondTenorLen, (TimeUnit)bondTenorUnit)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+QlSmileSection* qlCallableBondVolatilityStructureSmileSectionForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSmileSection(alloc((*arg(o))->smileSection(Period(optionTenorLen, (TimeUnit)optionTenorUnit), Period(bondTenorLen, (TimeUnit)bondTenorUnit)))));+  } catch (std::exception& er) {return handleException<QlSmileSection*>(e, er);}}+int qlCallableBondVolatilityStructureMaxBondTenor(QlCallableBondVolatilityStructure* o, int *u, QlError **e) { QlCallScope callbackScope(e);+  try {const Period &p = (*arg(o))->maxBondTenor(); *u = p.units(); return p.length();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+double qlCallableBondVolatilityStructureMinStrike(QlCallableBondVolatilityStructure* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->minStrike();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlCallableBondVolatilityStructureMaxStrike(QlCallableBondVolatilityStructure* o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->maxStrike();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlDefaultProbabilityTermStructure* qlFactorSpreadedHazardRateCurve(QlDefaultProbabilityTermStructure* originalCurve, QlQuote* spread, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDefaultProbabilityTermStructure(alloc(new FactorSpreadedHazardRateCurve(Handle<DefaultProbabilityTermStructure>(*arg(originalCurve)), *arg(spread)))));+  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}+QlDefaultProbabilityTermStructure* qlFlatHazardRate1(unsigned settlementDays, Calendar* calendar, QlQuote* hazardRate, DayCounter* x3, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDefaultProbabilityTermStructure(alloc(new FlatHazardRate(settlementDays, *arg(calendar), *arg(hazardRate), (*arg(x3))))));+  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}+QlDefaultProbabilityTermStructure* qlFlatHazardRate(int referenceDate, QlQuote* hazardRate, DayCounter* x2, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDefaultProbabilityTermStructure(alloc(new FlatHazardRate(Date(referenceDate), *arg(hazardRate), (*arg(x2))))));+  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}+QlDefaultProbabilityTermStructure* qlSpreadedHazardRateCurve(QlDefaultProbabilityTermStructure* originalCurve, QlQuote* spread, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDefaultProbabilityTermStructure(alloc(new SpreadedHazardRateCurve(Handle<DefaultProbabilityTermStructure>(*arg(originalCurve)), *arg(spread)))));+  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}+QlDefaultProbabilityTermStructure* qlInterpolatedDefaultDensityCurve(unsigned datesLen, int* dates, unsigned densitiesLen, double* densities, DayCounter* dayCounter, Calendar* calendar, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDefaultProbabilityTermStructure(alloc(qlInterpolatedDefaultDensityCurveAux(qlDateVector(dates, datesLen), std::vector<double>(densities, densities+densitiesLen), *arg(dayCounter), *arg(calendar), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), interpolator, approximator, approximatorArg))));+  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}+QlDefaultProbabilityTermStructure* qlInterpolatedHazardRateCurve(unsigned datesLen, int* dates, unsigned hazardRatesLen, double* hazardRates, DayCounter* dayCounter, Calendar* cal, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlInterpolatedHazardRateCurveAux(qlDateVector(dates, datesLen), std::vector<double>(hazardRates, hazardRates+hazardRatesLen), *arg(dayCounter), *arg(cal), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), interpolator, approximator, approximatorArg));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlDefaultProbabilityTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}+QlAffineHazardRateCurve* qlInterpolatedAffineHazardRateCurve(unsigned datesLen, int* dates, unsigned hazardRatesLen, double* hazardRates, DayCounter* dayCounter, QlOneFactorAffineModel* model, Calendar* cal, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlInterpolatedAffineHazardRateCurveAux(qlDateVector(dates, datesLen), std::vector<double>(hazardRates, hazardRates+hazardRatesLen), *arg(dayCounter), *arg(model), *arg(cal), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), interpolator, approximator, approximatorArg));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlAffineHazardRateCurve(ts));+  } catch (std::exception& er) {return handleException<QlAffineHazardRateCurve*>(e, er);}}+QlDefaultProbabilityTermStructure* qlInterpolatedSurvivalProbabilityCurve(unsigned datesLen, int* dates, unsigned probabilitiesLen, double* probabilities, DayCounter* dayCounter, Calendar* calendar, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlDefaultProbabilityTermStructure(alloc(qlInterpolatedSurvivalProbabilityCurveAux(qlDateVector(dates, datesLen), std::vector<double>(probabilities, probabilities+probabilitiesLen), *arg(dayCounter), *arg(calendar), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), interpolator, approximator, approximatorArg))));+  } catch (std::exception& er) {return handleException<QlDefaultProbabilityTermStructure*>(e, er);}}++void qlFreeDefaultProbabilityHelper(QlDefaultProbabilityHelper *o) {del(o);}+double qlDefaultProbabilityHelperImpliedQuote(QlDefaultProbabilityHelper *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->impliedQuote();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityHelperImpliedQuoteOn(QlDefaultProbabilityHelper *o, QlDefaultProbabilityTermStructure *curve, QlError **e) { QlCallScope callbackScope(e);+  try {+    (*arg(o))->setTermStructure(arg(curve)->get());+    return (*arg(o))->impliedQuote();+  } catch (std::exception& er) {return handleException<double>(e, er);}}++QlDefaultProbabilityHelper* qlSpreadCdsHelper(QlQuote* runningSpread, int n, int u, int settlementDays, Calendar* calendar, int frequency, int paymentConvention, int rule, DayCounter* dayCounter, double recoveryRate, QlYieldTermStructure* discountCurve, int settlesAccrual, int paysAtDefaultTime, int startDate, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int model, int tradeDate, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "spreadCdsHelper", tradeDate == 0)) return nullptr;+  try {return ret(new QlDefaultProbabilityHelper(alloc(new SpreadCdsHelper(*arg(runningSpread), Period(n, (TimeUnit)u), settlementDays, *arg(calendar), (Frequency)frequency, (BusinessDayConvention)paymentConvention, (DateGeneration::Rule)rule, *arg(dayCounter), recoveryRate, *arg(discountCurve), settlesAccrual, paysAtDefaultTime,+            qlNullableDate(startDate), *arg(lastPeriodDayCounter), rebatesAccrual, (CreditDefaultSwap::PricingModel)model QL144_ARGS(qlNullableDate(tradeDate))))));+  } catch (std::exception& er) {return handleException<QlDefaultProbabilityHelper*>(e, er);}}+QlDefaultProbabilityHelper* qlUpfrontCdsHelper(QlQuote* upfront, double runningSpread, int n, int u, int settlementDays, Calendar* calendar, int frequency, int paymentConvention, int rule, DayCounter* dayCounter, double recoveryRate, QlYieldTermStructure* discountCurve, unsigned upfrontSettlementDays, int settlesAccrual, int paysAtDefaultTime, int startDate, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int model, int tradeDate, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "upfrontCdsHelper", tradeDate == 0)) return nullptr;+  try {return ret(new QlDefaultProbabilityHelper(alloc(new UpfrontCdsHelper(*arg(upfront), runningSpread, Period(n, (TimeUnit)u), settlementDays, *arg(calendar), (Frequency)frequency, (BusinessDayConvention)paymentConvention, (DateGeneration::Rule)rule, *arg(dayCounter), recoveryRate, *arg(discountCurve), upfrontSettlementDays, settlesAccrual, paysAtDefaultTime,+            qlNullableDate(startDate), *arg(lastPeriodDayCounter), rebatesAccrual, (CreditDefaultSwap::PricingModel)model QL144_ARGS(qlNullableDate(tradeDate))))));+  } catch (std::exception& er) {return handleException<QlDefaultProbabilityHelper*>(e, er);}}+QlDefaultProbabilityTermStructure* qlPiecewiseDefaultCurve(int referenceDate, unsigned instrumentsLen, QlDefaultProbabilityHelper** instruments, DayCounter* dayCounter, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  const auto b = bootstrapOpts(accuracy, minValue, maxValue, maxAttempts, maxFactor, minFactor, dontThrow, dontThrowSteps, maxEvaluations);+  return piecewiseDefaultCurveImpl([&] {+    return qlPiecewiseDefaultCurveAux(Date(referenceDate), qlVector(instruments, instrumentsLen), *arg(dayCounter), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), trait, interpolator, approximator, approximatorArg, b);+  }, e);+}+QlDefaultProbabilityTermStructure* qlPiecewiseDefaultCurve1(unsigned settlementDays, Calendar *calendar, unsigned instrumentsLen, QlDefaultProbabilityHelper** instruments, DayCounter* dayCounter, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  const auto b = bootstrapOpts(accuracy, minValue, maxValue, maxAttempts, maxFactor, minFactor, dontThrow, dontThrowSteps, maxEvaluations);+  return piecewiseDefaultCurveImpl([&] {+    return qlPiecewiseDefaultCurveAux1(settlementDays, *arg(calendar), qlVector(instruments, instrumentsLen), *arg(dayCounter), qlHandleVector(jumps, jumpsLen), qlDateVector(jumpDates, jDatesLen), trait, interpolator, approximator, approximatorArg, b);+  }, e);+}+double qlDefaultProbabilityTermStructureDefaultDensity1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->defaultDensity(t, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityTermStructureDefaultDensity(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->defaultDensity(Date(d), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityTermStructureDefaultProbability1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->defaultProbability(t, (bool)extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityTermStructureDefaultProbability2(QlDefaultProbabilityTermStructure* o, int x1, int x2, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->defaultProbability(Date(x1), Date(x2), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityTermStructureDefaultProbability3(QlDefaultProbabilityTermStructure* o, double x1, double x2, int extrapo, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->defaultProbability(x1, x2, extrapo);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityTermStructureDefaultProbability(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->defaultProbability(Date(d), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityTermStructureHazardRate1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->hazardRate(t, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityTermStructureHazardRate(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->hazardRate(Date(d), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityTermStructureSurvivalProbability1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->survivalProbability(t, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlDefaultProbabilityTermStructureSurvivalProbability(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->survivalProbability(Date(d), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++void qlFreeZeroInflationTermStructure(QlZeroInflationTermStructure *o) {del(o);}+QlTermStructure* qlZeroInflationTermStructureAsTermStructure(QlZeroInflationTermStructure *o) {return ret(new QlTermStructure(*arg(o)));}+double qlZeroInflationTermStructureZeroRate(QlZeroInflationTermStructure* o, int d, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->zeroRate(Date(d), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeYoYInflationTermStructure(QlYoYInflationTermStructure *o) {del(o);}+QlTermStructure* qlYoYInflationTermStructureAsTermStructure(QlYoYInflationTermStructure *o) {return ret(new QlTermStructure(*arg(o)));}+double qlYoYInflationTermStructureYoYRate(QlYoYInflationTermStructure* o, int d, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->yoyRate(Date(d), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++/* CommodityCurve */++QlCommodityCurve* qlCommodityCurve(char *name, CommodityType *commodityType, Currency *currency,+                                   UnitOfMeasure *unitOfMeasure, Calendar *calendar,+                                   unsigned datesLen, int *dates, unsigned pricesLen, double *prices,+                                   DayCounter *dayCounter, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCommodityCurve(alloc(new CommodityCurve(+      arg(name), *arg(commodityType), *arg(currency), *arg(unitOfMeasure), *arg(calendar),+      qlDateVector(dates, datesLen), std::vector<Real>(prices, prices+pricesLen), *arg(dayCounter)))));+  } catch (std::exception& er) {return handleException<QlCommodityCurve*>(e, er);}}++void qlFreeCommodityCurve(QlCommodityCurve *o) {del(o);}+QlTermStructure* qlCommodityCurveAsTermStructure(QlCommodityCurve *o) {return ret(new QlTermStructure(*arg(o)));}+char *qlCommodityCurveName(QlCommodityCurve *o) {return tracedup((*arg(o))->name().c_str());}+CommodityType *qlCommodityCurveCommodityType(QlCommodityCurve *o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new CommodityType((*arg(o))->commodityType()));+  } catch (std::exception& er) {return handleException<CommodityType*>(e, er);}}+UnitOfMeasure *qlCommodityCurveUnitOfMeasure(QlCommodityCurve *o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new UnitOfMeasure((*arg(o))->unitOfMeasure()));+  } catch (std::exception& er) {return handleException<UnitOfMeasure*>(e, er);}}+Currency *qlCommodityCurveCurrency(QlCommodityCurve *o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new Currency((*arg(o))->currency()));+  } catch (std::exception& er) {return handleException<Currency*>(e, er);}}++void qlCommodityCurveDates(QlCommodityCurve *o, unsigned *count, int **days, QlError **e) { QlCallScope callbackScope(e);+  *count = 0; *days = 0;+  try {+    const std::vector<Date> &dates = (*arg(o))->dates();+    unsigned n = (unsigned)dates.size();+    int *ds = qlAllocateInts(n);+    for (size_t i = 0; i < dates.size(); ++i)+      ds[i] = dates[i].serialNumber();+    *count = n; *days = ds;+  } catch (std::exception& er) {qlSetError(e, er.what());}+}++void qlCommodityCurvePrices(QlCommodityCurve *o, unsigned *count, double **prices, QlError **e) { QlCallScope callbackScope(e);+  *count = 0; *prices = 0;+  try {+    const std::vector<Real> &p = (*arg(o))->prices();+    unsigned n = (unsigned)p.size();+    double *ps = qlAllocateDoubles(n);+    for (size_t i = 0; i < p.size(); ++i)+      ps[i] = p[i];+    *count = n; *prices = ps;+  } catch (std::exception& er) {qlSetError(e, er.what());}+}++int qlCommodityCurveEmpty(QlCommodityCurve *o) {return (*arg(o))->empty();}++// basisOfCurve_ is a nullptr shared_ptr when unset -- returned as-is (not via ret(), nothing new+// is allocated here) so the Haskell side's peekMaybeCommodityCurve can null-check it directly.+QlCommodityCurve *qlCommodityCurveBasisOfCurve(QlCommodityCurve *o) {+  const shared_ptr<CommodityCurve> &b = (*arg(o))->basisOfCurve();+  return b ? ret(new QlCommodityCurve(b)) : nullptr;+}++// Not bad_alloc-only: setBasisOfCurve() itself calls+// CommodityPricingHelper::calculateUomConversionFactor, which QL_REQUIRE-throws via+// UnitOfMeasureConversionManager::lookup when no matching conversion is registered.+void qlCommodityCurveSetBasisOfCurve(QlCommodityCurve *o, QlCommodityCurve *basisOfCurve, QlError **e) { QlCallScope callbackScope(e);+  try {(*arg(o))->setBasisOfCurve(*arg(basisOfCurve));+  } catch (std::exception& er) {qlSetError(e, er.what());}+}++// Builds the ExchangeContracts map the nearby-rolling price()/underlyingPriceDate() calls take.+// Always constructed (even when n==0): price() only dereferences it when nearbyOffset>0, and+// underlyingPriceDate() requires nearbyOffset>0 too (QL_REQUIRE'd before any lower_bound call), so+// an empty-but-non-null map is exactly as safe as a null one for every reachable call shape here,+// and skips a conditional the two call sites would otherwise have to repeat.+static shared_ptr<ExchangeContracts> qlBuildExchangeContracts(+    unsigned n, int *ecKeys, char **ecCodes, int *ecExpirations, int *ecStarts, int *ecEnds) {+  auto ecs = ext::make_shared<ExchangeContracts>();+  for (unsigned i = 0; i < n; ++i)+    (*ecs)[Date(ecKeys[i])] = ExchangeContract(ecCodes[i], Date(ecExpirations[i]),+                                                Date(ecStarts[i]), Date(ecEnds[i]));+  return ecs;+}++// nearbyOffset<=0 never touches exchangeContracts (see commoditycurve.hpp's inline price()), so+// this also serves the plain flat-price case when called with an empty map and offset 0.+double qlCommodityCurvePrice(QlCommodityCurve *o, int date,+    unsigned ecLen1, int *ecKeys, unsigned, char **ecCodes,+    unsigned, int *ecExpirations, unsigned, int *ecStarts,+    unsigned, int *ecEnds, int nearbyOffset, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ecs = qlBuildExchangeContracts(ecLen1, ecKeys, ecCodes, ecExpirations, ecStarts, ecEnds);+    return (*arg(o))->price(Date(date), ecs, nearbyOffset);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++double qlCommodityCurveBasisOfPrice(QlCommodityCurve *o, int date, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->basisOfPrice(Date(date));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++int qlCommodityCurveUnderlyingPriceDate(QlCommodityCurve *o, int date,+    unsigned ecLen1, int *ecKeys, unsigned, char **ecCodes,+    unsigned, int *ecExpirations, unsigned, int *ecStarts,+    unsigned, int *ecEnds, int nearbyOffset, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ecs = qlBuildExchangeContracts(ecLen1, ecKeys, ecCodes, ecExpirations, ecStarts, ecEnds);+    return (*arg(o))->underlyingPriceDate(Date(date), ecs, nearbyOffset).serialNumber();+  } catch (std::exception& er) {return handleException<int>(e, er);}}++/* CommodityIndex */++// exchangeContracts/nearbyOffset are hardcoded to null/0 -- see qlTermStructure.h's comment;+// forwardCurve is nullable, matching upstream's own nullable ext::shared_ptr<CommodityCurve>.+QlCommodityIndex* qlCommodityIndex(char *name, CommodityType *commodityType, Currency *currency,+                                   UnitOfMeasure *unitOfMeasure, Calendar *calendar,+                                   double lotQuantity, QlCommodityCurve *forwardCurve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCommodityIndex(alloc(new CommodityIndex(+      name, *arg(commodityType), *arg(currency), *arg(unitOfMeasure), *arg(calendar), lotQuantity,+      forwardCurve ? *arg(forwardCurve) : shared_ptr<CommodityCurve>(),+      shared_ptr<ExchangeContracts>(), 0))));+  } catch (std::exception& er) {return handleException<QlCommodityIndex*>(e, er);}}++void qlFreeCommodityIndex(QlCommodityIndex *o) {del(o);}+QlIndex* qlCommodityIndexAsIndex(QlCommodityIndex *o) {return ret(new QlIndex(*arg(o)));}++double qlCommodityIndexForwardPrice(QlCommodityIndex *o, int date, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->forwardPrice(Date(date));+  } catch (std::exception& er) {return handleException<double>(e, er);}}++// lastQuoteDate() -> timeSeries().lastDate(), which QL_REQUIREs a non-empty historical fixing+// series -- check emptiness first (via CommodityIndex::empty(), itself just timeSeries().empty())+// rather than catching the exception, so callers can check isEmpty first if they want.+int qlCommodityIndexLastQuoteDate(QlCommodityIndex *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->lastQuoteDate().serialNumber();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlCommodityIndexEmpty(QlCommodityIndex *o) {return (*arg(o))->empty();}++void qlFreeZeroCouponInflationSwapHelper(QlZeroCouponInflationSwapHelper *o) {del(o);}+double qlZeroCouponInflationSwapHelperImpliedQuoteOn(QlZeroCouponInflationSwapHelper *o, QlZeroInflationTermStructure *curve, QlError **e) { QlCallScope callbackScope(e);+  try {+    (*arg(o))->setTermStructure(arg(curve)->get());+    return (*arg(o))->impliedQuote();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlYearOnYearInflationSwapHelperImpliedQuoteOn(QlYearOnYearInflationSwapHelper *o, QlYoYInflationTermStructure *curve, QlError **e) { QlCallScope callbackScope(e);+  try {+    (*arg(o))->setTermStructure(arg(curve)->get());+    return (*arg(o))->impliedQuote();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlZeroCouponInflationSwapHelper* qlZeroCouponInflationSwapHelper(QlQuote* quote, int n, int u, int maturity, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlZeroInflationIndex* zii, int observationInterpolation, int pillar, int customPillarDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlZeroCouponInflationSwapHelper(alloc(new ZeroCouponInflationSwapHelper(*arg(quote), Period(n, (TimeUnit)u), Date(maturity),+          *arg(calendar), (BusinessDayConvention)paymentConvention, *arg(dayCounter), *arg(zii),+          (CPI::InterpolationType)observationInterpolation, (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));+  } catch (std::exception& er) {return handleException<QlZeroCouponInflationSwapHelper*>(e, er);}}+QlZeroCouponInflationSwapHelper* qlZeroCouponInflationSwapHelper2(QlQuote* quote, int n, int u, int startDate, int endDate, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlZeroInflationIndex* zii, int observationInterpolation, int pillar, int customPillarDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlZeroCouponInflationSwapHelper(alloc(new ZeroCouponInflationSwapHelper(*arg(quote), Period(n, (TimeUnit)u), Date(startDate), Date(endDate),+          *arg(calendar), (BusinessDayConvention)paymentConvention, *arg(dayCounter), *arg(zii),+          (CPI::InterpolationType)observationInterpolation, (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));+  } catch (std::exception& er) {return handleException<QlZeroCouponInflationSwapHelper*>(e, er);}}++void qlFreeYearOnYearInflationSwapHelper(QlYearOnYearInflationSwapHelper *o) {del(o);}+QlYearOnYearInflationSwapHelper* qlYearOnYearInflationSwapHelper(QlQuote* quote, int n, int u, int maturity, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlYoYInflationIndex* yii, int observationInterpolation, QlYieldTermStructure* nominalTermStructure, int pillar, int customPillarDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYearOnYearInflationSwapHelper(alloc(new YearOnYearInflationSwapHelper(*arg(quote), Period(n, (TimeUnit)u), Date(maturity),+          *arg(calendar), (BusinessDayConvention)paymentConvention, *arg(dayCounter), *arg(yii),+          (CPI::InterpolationType)observationInterpolation, *arg(nominalTermStructure), (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));+  } catch (std::exception& er) {return handleException<QlYearOnYearInflationSwapHelper*>(e, er);}}+QlYearOnYearInflationSwapHelper* qlYearOnYearInflationSwapHelper2(QlQuote* quote, int n, int u, int startDate, int endDate, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlYoYInflationIndex* yii, int observationInterpolation, QlYieldTermStructure* nominalTermStructure, int pillar, int customPillarDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYearOnYearInflationSwapHelper(alloc(new YearOnYearInflationSwapHelper(*arg(quote), Period(n, (TimeUnit)u), Date(startDate), Date(endDate),+          *arg(calendar), (BusinessDayConvention)paymentConvention, *arg(dayCounter), *arg(yii),+          (CPI::InterpolationType)observationInterpolation, *arg(nominalTermStructure), (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));+  } catch (std::exception& er) {return handleException<QlYearOnYearInflationSwapHelper*>(e, er);}}++QlZeroCouponInflationSwap* qlZeroCouponInflationSwapHelperSwap(QlZeroCouponInflationSwapHelper* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlZeroCouponInflationSwap((*arg(o))->swap()));} catch (std::exception& er) {return handleException<QlZeroCouponInflationSwap*>(e, er);}}+QlYearOnYearInflationSwap* qlYearOnYearInflationSwapHelperSwap(QlYearOnYearInflationSwapHelper* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlYearOnYearInflationSwap((*arg(o))->swap()));} catch (std::exception& er) {return handleException<QlYearOnYearInflationSwap*>(e, er);}}++QlZeroInflationTermStructure* qlPiecewiseZeroInflationCurve(int referenceDate, int baseDate, int frequency, DayCounter* dayCounter, unsigned instrumentsLen, QlZeroCouponInflationSwapHelper** instruments,+    int seasKind, int seasBaseDate, int seasFreq, unsigned seasLen, double *seasFactors, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    // instruments[i] is shared_ptr<ZeroCouponInflationSwapHelper>*; push_back upcasts each+    // element to shared_ptr<BootstrapHelper<ZeroInflationTermStructure>> (PiecewiseZeroInflationCurve's+    // helper type) -- qlVector can't do this since it deduces the vector's element type from the+    // array's pointee type, not the target parameter type.+    std::vector<shared_ptr<BootstrapHelper<ZeroInflationTermStructure> > > instr;+    instr.reserve(instrumentsLen);+    for (unsigned i = 0; i < instrumentsLen; ++i) instr.push_back(*instruments[i]);+    auto ts = allocShared(qlPiecewiseZeroInflationCurveAux(Date(referenceDate), Date(baseDate), (Frequency)frequency, *arg(dayCounter),+        instr, qlSeasonality(seasKind, seasBaseDate, seasFreq, seasLen, seasFactors), interpolator, approximator, approximatorArg));+    return ret(new QlZeroInflationTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlZeroInflationTermStructure*>(e, er);}}+QlYoYInflationTermStructure* qlPiecewiseYoYInflationCurve(int referenceDate, int baseDate, double baseYoYRate, int frequency, DayCounter* dayCounter, unsigned instrumentsLen, QlYearOnYearInflationSwapHelper** instruments,+    int seasKind, int seasBaseDate, int seasFreq, unsigned seasLen, double *seasFactors, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    std::vector<shared_ptr<BootstrapHelper<YoYInflationTermStructure> > > instr;+    instr.reserve(instrumentsLen);+    for (unsigned i = 0; i < instrumentsLen; ++i) instr.push_back(*instruments[i]);+    auto ts = allocShared(qlPiecewiseYoYInflationCurveAux(Date(referenceDate), Date(baseDate), baseYoYRate, (Frequency)frequency, *arg(dayCounter),+        instr, qlSeasonality(seasKind, seasBaseDate, seasFreq, seasLen, seasFactors), interpolator, approximator, approximatorArg));+    return ret(new QlYoYInflationTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYoYInflationTermStructure*>(e, er);}}++// Interpolated (dates, rates) inflation curves, unlike the piecewise bootstraps from swap helpers.+QlYoYInflationTermStructure* qlInterpolatedYoYInflationCurve(int referenceDate,+    unsigned datesLen, int *dates, double *rates, int frequency, DayCounter *dayCounter,+    int seasKind, int seasBaseDate, int seasFreq, unsigned seasLen, double *seasFactors,+    int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlInterpolatedYoYInflationCurveAux(Date(referenceDate), qlDateVector(dates, datesLen), std::vector<Rate>(rates, rates+datesLen),+        (Frequency)frequency, *arg(dayCounter), qlSeasonality(seasKind, seasBaseDate, seasFreq, seasLen, seasFactors), interpolator, approximator, approximatorArg));+    return ret(new QlYoYInflationTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYoYInflationTermStructure*>(e, er);}}+QlZeroInflationTermStructure* qlInterpolatedZeroInflationCurve(int referenceDate,+    unsigned datesLen, int *dates, double *rates, int frequency, DayCounter *dayCounter,+    int seasKind, int seasBaseDate, int seasFreq, unsigned seasLen, double *seasFactors,+    int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlInterpolatedZeroInflationCurveAux(Date(referenceDate), qlDateVector(dates, datesLen), std::vector<Rate>(rates, rates+datesLen),+        (Frequency)frequency, *arg(dayCounter), qlSeasonality(seasKind, seasBaseDate, seasFreq, seasLen, seasFactors), interpolator, approximator, approximatorArg));+    return ret(new QlZeroInflationTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlZeroInflationTermStructure*>(e, er);}}++QlRateHelper *qlDepositRateHelper(QlQuote *quote, int l, int u, unsigned fixDays, Calendar *calendar, int conv, int eom, DayCounter *dayCount, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new DepositRateHelper( *arg(quote), Period(l, (TimeUnit)u), fixDays,+          *arg(calendar), (BusinessDayConvention) conv, eom, *arg(dayCount)))));+  } catch (std::exception& er) {return handleException<QlRateHelper *>(e, er);}}+QlBondHelper *qlFixedRateBondHelper(QlQuote *quote, unsigned settlDays, double face,+    Schedule *sched, unsigned cLen, double *coupons, DayCounter *dayCount, int conv, double redemption, int issue, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBondHelper(alloc(new FixedRateBondHelper(*arg(quote), settlDays, face, *arg(sched),+          std::vector<Rate>(coupons, coupons+cLen), *arg(dayCount), (BusinessDayConvention) conv, redemption, qlNullableDate(issue)))));+  } catch (std::exception& er) {return handleException<QlBondHelper *>(e, er);}}+QlBondHelper *qlCPIBondHelper(QlQuote *quote, unsigned settlementDays, double faceAmount, double baseCPI, int obsLagLen, int obsLagUnit,+    QlZeroInflationIndex* index, int observationInterpolation, Schedule *schedule, unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter,+    int paymentConvention, int issueDate, Calendar *paymentCalendar, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBondHelper(alloc(new CPIBondHelper(*arg(quote), settlementDays, faceAmount, baseCPI, Period(obsLagLen, (TimeUnit)obsLagUnit),+          *arg(index), (CPI::InterpolationType)observationInterpolation, *arg(schedule), std::vector<Rate>(coupons, coupons+couponsLen),+          *arg(accrualDayCounter), (BusinessDayConvention)paymentConvention, qlNullableDate(issueDate), *arg(paymentCalendar)))));+  } catch (std::exception& er) {return handleException<QlBondHelper *>(e, er);}}+void qlFreeRateHelper(QlRateHelper *helper) {del(helper);}++static QlYieldTermStructure *piecewiseYieldCurveImpl(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, const QlIterativeBootstrapOpts& b, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveAux(Date(date), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), trait, interpolator, approximator, approximatorArg, b));+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++QlYieldTermStructure *qlPiecewiseYieldCurveFull(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg,+  double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, QlError **e) { QlCallScope callbackScope(e);+  return piecewiseYieldCurveImpl(date, rateLen, ratehelpers, dayCount, quoteLen, quotes, datesLen, dates,+      trait, interpolator, approximator, approximatorArg,+      bootstrapOpts(accuracy, minValue, maxValue, maxAttempts, maxFactor, minFactor, dontThrow, dontThrowSteps, maxEvaluations), e);+}++using curveBuilder = YieldTermStructure *(*)( const std::vector<Date>& dates, const std::vector<double>& dfs, const DayCounter& dayCount, const Calendar& cal,+  const std::vector<Handle<Quote> >& jumps, const std::vector<Date>& jumpDates, int interpolator, int approximator, int approximatorArg);++QlYieldTermStructure *qlInterpolatedCurve(curveBuilder builder, unsigned rateLen, double *rates, unsigned rateDatesLen, int *rateDates,+  DayCounter *dayCount, Calendar *cal, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(builder(qlDateVector(rateDates, rateDatesLen), std::vector<double>(rates, rates+rateLen), *arg(dayCount), *arg(cal),+        qlHandleVector(quotes, quoteLen), qlDateVector(dates, datesLen), interpolator, approximator, approximatorArg));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}+QlYieldTermStructure *qlInterpolatedDiscountCurve(unsigned dfsLen, double *dfs, unsigned dfdatesLen, int *dfsDates, DayCounter *dayCount, Calendar *cal,+  unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  return qlInterpolatedCurve(&qlInterpolatedDiscountCurveAux, dfsLen, dfs, dfdatesLen, dfsDates,+    dayCount, cal, quoteLen, quotes, datesLen, dates, interpolator, approximator, approximatorArg, extrapolate, e);+}+QlYieldTermStructure *qlInterpolatedForwardCurve(unsigned fwdLen, double *fwds, unsigned fwddatesLen, int *fwdDates, DayCounter *dayCount, Calendar *cal, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  return qlInterpolatedCurve(&qlInterpolatedForwardCurveAux, fwdLen, fwds, fwddatesLen, fwdDates,+    dayCount, cal, quoteLen, quotes, datesLen, dates, interpolator, approximator, approximatorArg, /*extrapolate=*/0, e);+}+QlYieldTermStructure *qlInterpolatedZeroCurve(unsigned yieldLen, double *yields, unsigned ydatesLen, int *yieldDates, DayCounter *dayCount, Calendar *cal, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  return qlInterpolatedCurve(&qlInterpolatedZeroCurveAux, yieldLen, yields, ydatesLen, yieldDates,+    dayCount, cal, quoteLen, quotes,  datesLen, dates, interpolator, approximator, approximatorArg, /*extrapolate=*/0, e);+}+QlYieldTermStructure *qlInterpolatedSimpleZeroCurve(unsigned yieldLen, double *yields, unsigned ydatesLen, int *yieldDates, DayCounter *dayCount, Calendar *cal, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  return qlInterpolatedCurve(&qlInterpolatedSimpleZeroCurveAux, yieldLen, yields, ydatesLen, yieldDates,+    dayCount, cal, quoteLen, quotes, datesLen, dates, interpolator, approximator, approximatorArg, /*extrapolate=*/0, e);+}+static QlYieldTermStructure *piecewiseYieldCurve1Impl(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, const QlIterativeBootstrapOpts& b, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), trait, interpolator, approximator, approximatorArg, /*bootstrap=*/0, /*accuracy=*/0.0,+        std::vector<double>(), b));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++QlYieldTermStructure *qlPiecewiseYieldCurve1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  return piecewiseYieldCurve1Impl(settl, cal, rateLen, ratehelpers, dayCount, quoteLen, quotes, datesLen, dates,+      trait, interpolator, approximator, approximatorArg, defaultBootstrapOpts(), extrapolate, e);+}++QlYieldTermStructure *qlPiecewiseYieldCurveFull1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg,+  double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  return piecewiseYieldCurve1Impl(settl, cal, rateLen, ratehelpers, dayCount, quoteLen, quotes, datesLen, dates,+      trait, interpolator, approximator, approximatorArg,+      bootstrapOpts(accuracy, minValue, maxValue, maxAttempts, maxFactor, minFactor, dontThrow, dontThrowSteps, maxEvaluations), extrapolate, e);+}+QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), hasquant::Discount, hasquant::LogLinear, /*approximator=*/0, /*approximatorArg=*/0, /*bootstrap=*/1, accuracy,+        std::vector<double>(weights, weights + weightsLen), defaultBootstrapOpts(), initialGuess ? *initialGuess : QlCallback()));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++static QlYieldTermStructure *piecewiseYieldCurveGlobalBootstrapFixed(int date, unsigned rateLen,+  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,+  unsigned datesLen, int *dates, int trait, int interpolator, double accuracy,+  unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveGlobalBootstrapAux(Date(date),+        qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), trait, interpolator, accuracy,+        std::vector<double>(weights, weights + weightsLen), initialGuess ? *initialGuess : QlCallback()));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed1(int date, unsigned rateLen,+  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,+  unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights,+  int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  return piecewiseYieldCurveGlobalBootstrapFixed(date, rateLen, ratehelpers, dayCount, quoteLen,+      quotes, datesLen, dates, hasquant::Discount, hasquant::LogLinear, accuracy, weightsLen,+      weights, extrapolate, initialGuess, e);+}++QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed2(int date, unsigned rateLen,+  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,+  unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights,+  int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  return piecewiseYieldCurveGlobalBootstrapFixed(date, rateLen, ratehelpers, dayCount, quoteLen,+      quotes, datesLen, dates, hasquant::SimpleZeroYield, hasquant::Linear, accuracy, weightsLen,+      weights, extrapolate, initialGuess, e);+}++QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap2(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), hasquant::SimpleZeroYield, hasquant::Linear, /*approximator=*/0, /*approximatorArg=*/0, /*bootstrap=*/1, accuracy,+        std::vector<double>(weights, weights + weightsLen), defaultBootstrapOpts(), initialGuess ? *initialGuess : QlCallback()));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap4(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), hasquant::ForwardRate, hasquant::Linear, /*approximator=*/0, /*approximatorArg=*/0, /*bootstrap=*/1, accuracy,+        std::vector<double>(weights, weights + weightsLen), defaultBootstrapOpts(), initialGuess ? *initialGuess : QlCallback()));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap5(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), hasquant::ZeroYield, hasquant::Linear, /*approximator=*/0, /*approximatorArg=*/0, /*bootstrap=*/1, accuracy,+        std::vector<double>(weights, weights + weightsLen), defaultBootstrapOpts(), initialGuess ? *initialGuess : QlCallback()));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed4(int date, unsigned rateLen,+  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,+  unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights,+  int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  return piecewiseYieldCurveGlobalBootstrapFixed(date, rateLen, ratehelpers, dayCount, quoteLen,+      quotes, datesLen, dates, hasquant::ForwardRate, hasquant::Linear, accuracy, weightsLen,+      weights, extrapolate, initialGuess, e);+}++QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed5(int date, unsigned rateLen,+  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,+  unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights,+  int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  return piecewiseYieldCurveGlobalBootstrapFixed(date, rateLen, ratehelpers, dayCount, quoteLen,+      quotes, datesLen, dates, hasquant::ZeroYield, hasquant::Linear, accuracy, weightsLen,+      weights, extrapolate, initialGuess, e);+}++QlYieldTermStructure *qlPiecewiseYieldCurveLocalBootstrap1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, int trait, unsigned localisation, int forcePositive, double accuracy,+  double quadraticity, double monotonicity, int convexForcePositive, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveLocalBootstrapAux1(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), trait, localisation, forcePositive != 0, accuracy, quadraticity, monotonicity, convexForcePositive != 0));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++QlYieldTermStructure *qlPiecewiseYieldCurveLocalBootstrapFixed(int date, unsigned rateLen,+  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,+  unsigned datesLen, int *dates, int trait, unsigned localisation, int forcePositive,+  double accuracy, double quadraticity, double monotonicity, int convexForcePositive,+  int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveLocalBootstrapAux(Date(date),+        qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), trait, localisation, forcePositive != 0, accuracy,+        quadraticity, monotonicity, convexForcePositive != 0));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap3(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen,+  QlQuote **quotes, unsigned datesLen, int *dates, unsigned additionalRateLen, QlRateHelper **additionalRatehelpers, unsigned additionalDatesLen, int *additionalDates,+  double accuracy, int extrapolate, unsigned weightsLen, double* weights, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveGlobalBootstrapFullAux(settl, *arg(cal), qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), qlVector(additionalRatehelpers, additionalRateLen), qlDateVector(additionalDates, additionalDatesLen), accuracy, std::vector<double>(weights, weights + weightsLen), initialGuess ? *initialGuess : QlCallback()));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}++QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed3(int date, unsigned rateLen,+  QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes,+  unsigned datesLen, int *dates, unsigned additionalRateLen,+  QlRateHelper **additionalRatehelpers, unsigned additionalDatesLen, int *additionalDates,+  double accuracy, int extrapolate, unsigned weightsLen, double* weights, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseYieldCurveGlobalBootstrapFullAux(Date(date),+        qlVector(ratehelpers, rateLen), *arg(dayCount), qlHandleVector(quotes, quoteLen),+        qlDateVector(dates, datesLen), qlVector(additionalRatehelpers, additionalRateLen),+        qlDateVector(additionalDates, additionalDatesLen), accuracy, std::vector<double>(weights, weights + weightsLen), initialGuess ? *initialGuess : QlCallback()));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure *>(e, er);}}+++QlMultiCurve *qlMultiCurve(double accuracy, QlError **e) { QlCallScope callbackScope(e);+  // Original handles do not own the group, so a callback's GC can release it during a bootstrap.+  try {return ret(new QlMultiCurve(alloc(new hasquant::ManagedMultiCurve(accuracy)),+                                   hasquant::DeleteAfterCall<hasquant::ManagedMultiCurve>()));+  } catch (std::exception& er) {return handleException<QlMultiCurve*>(e, er);}}+void qlFreeMultiCurve(QlMultiCurve *o) {del(o);}++QlYieldTermStructure *qlMultiCurveAddBootstrappedCurve(QlMultiCurve *mc, QlRelinkableYieldTermStructure *internalHandle, QlYieldTermStructure *curve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYieldTermStructure((*arg(mc))->add(*arg(internalHandle), *arg(curve), true)));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}+QlYieldTermStructure *qlMultiCurveAddNonBootstrappedCurve(QlMultiCurve *mc, QlRelinkableYieldTermStructure *internalHandle, QlYieldTermStructure *curve, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYieldTermStructure((*arg(mc))->add(*arg(internalHandle), *arg(curve), false)));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}++// ql/experimental/termstructures/basisswapratehelpers.hpp -- rate-helper constructors only+// (impliedQuote/accept/setTermStructure/swap() are visitor-pattern/internal plumbing, matching+// the existing FraRateHelper/SwapRateHelper precedent of leaving those unbound).+QlRateHelper *qlIborIborBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar *calendar, int convention, int endOfMonth,+  QlIborIndex *baseIndex, QlIborIndex *otherIndex, QlYieldTermStructure *discountHandle, int bootstrapBaseCurve, int useIndexedCoupons, int rule, int paymentLag, QlStubIndexSelection* baseStub, QlStubIndexSelection* otherStub, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "iborIborBasisSwapRateHelper", useIndexedCoupons == -1 && rule == DateGeneration::Backward && paymentLag == 0 && !baseStub && !otherStub)) return nullptr;+  try {+    return ret(new QlRateHelper(alloc(new IborIborBasisSwapRateHelper(*arg(basis), Period(tenorLen, (TimeUnit)tenorUnit), settlementDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,+      *arg(baseIndex), *arg(otherIndex), *arg(discountHandle), bootstrapBaseCurve QL144_ARGS(qlOptBool(useIndexedCoupons), (DateGeneration::Rule)rule, paymentLag, qlStubSelection(baseStub), qlStubSelection(otherStub))))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper *qlOvernightIborBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar *calendar, int convention, int endOfMonth,+  QlOvernightIndex *baseIndex, QlIborIndex *otherIndex, QlYieldTermStructure *discountHandle, int bootstrapBaseCurve, int paymentLag, int overnightPaymentFrequency, int useIndexedCoupons, int rule, int averagingMethod, int telescopicValueDates, int basisOnIborLeg, QlStubIndexSelection* iborStub, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "overnightIborBasisSwapRateHelper", !bootstrapBaseCurve && paymentLag == 0 && overnightPaymentFrequency < 0 && useIndexedCoupons == -1 && rule == DateGeneration::Backward && averagingMethod == RateAveraging::Compound && !telescopicValueDates && !basisOnIborLeg && !iborStub)) return nullptr;+  try {+    return ret(new QlRateHelper(alloc(new OvernightIborBasisSwapRateHelper(*arg(basis), Period(tenorLen, (TimeUnit)tenorUnit), settlementDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,+      *arg(baseIndex), *arg(otherIndex), qlNullableHandle(arg(discountHandle)) QL144_ARGS(bootstrapBaseCurve, paymentLag, overnightPaymentFrequency < 0 ? optional<Frequency>() : optional<Frequency>((Frequency)overnightPaymentFrequency), qlOptBool(useIndexedCoupons), (DateGeneration::Rule)rule, (RateAveraging::Type)averagingMethod, telescopicValueDates, basisOnIborLeg, qlStubSelection(iborStub))))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}++// ql/experimental/termstructures/crosscurrencyratehelpers.hpp -- CrossCurrencySwapRateHelperBase+// and CrossCurrencyBasisSwapRateHelperBase are protected-constructor bases, not directly+// constructible, so only the three concrete leaf classes are bound here.+QlRateHelper *qlConstNotionalCrossCurrencyBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth,+  QlIborIndex *baseCurrencyIndex, QlIborIndex *quoteCurrencyIndex, QlYieldTermStructure *collateralCurve,+  int isFxBaseCurrencyCollateralCurrency, int isBasisOnFxBaseCurrencyLeg,+  int paymentFrequency, int paymentLag, int quoteCurrencyPaymentFrequency, int useIndexedCoupons, int paymentLagOnNotionalExchanges, QlStubIndexSelection* baseStub, QlStubIndexSelection* quoteStub, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "constNotionalCrossCurrencyBasisSwapRateHelper", useIndexedCoupons == -1 && !paymentLagOnNotionalExchanges && !baseStub && !quoteStub)) return nullptr;+  try {+    return ret(new QlRateHelper(alloc(new ConstNotionalCrossCurrencyBasisSwapRateHelper(*arg(basis), Period(tenorLen, (TimeUnit)tenorUnit), fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,+      *arg(baseCurrencyIndex), *arg(quoteCurrencyIndex), *arg(collateralCurve),+      isFxBaseCurrencyCollateralCurrency, isBasisOnFxBaseCurrencyLeg,+      paymentFrequency < 0 ? optional<Frequency>() : optional<Frequency>((Frequency)paymentFrequency),+      paymentLag,+      quoteCurrencyPaymentFrequency < 0 ? optional<Frequency>() : optional<Frequency>((Frequency)quoteCurrencyPaymentFrequency) QL144_ARGS(qlOptBool(useIndexedCoupons), paymentLagOnNotionalExchanges, qlStubSelection(baseStub), qlStubSelection(quoteStub))))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper *qlMtMCrossCurrencyBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth,+  QlIborIndex *baseCurrencyIndex, QlIborIndex *quoteCurrencyIndex, QlYieldTermStructure *collateralCurve,+  int isFxBaseCurrencyCollateralCurrency, int isBasisOnFxBaseCurrencyLeg, int isFxBaseCurrencyLegResettable,+  int paymentFrequency, int paymentLag, int quoteCurrencyPaymentFrequency, unsigned fxResetFixingDays, Calendar* fxResetFixingCalendar, int useIndexedCoupons, QlStubIndexSelection* baseStub, QlStubIndexSelection* quoteStub, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "mtmCrossCurrencyBasisSwapRateHelper", fxResetFixingDays == 0 && !fxResetFixingCalendar && useIndexedCoupons == -1 && !baseStub && !quoteStub)) return nullptr;+  try {+    return ret(new QlRateHelper(alloc(new MtMCrossCurrencyBasisSwapRateHelper(*arg(basis), Period(tenorLen, (TimeUnit)tenorUnit), fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,+      *arg(baseCurrencyIndex), *arg(quoteCurrencyIndex), *arg(collateralCurve),+      isFxBaseCurrencyCollateralCurrency, isBasisOnFxBaseCurrencyLeg, isFxBaseCurrencyLegResettable,+      paymentFrequency < 0 ? optional<Frequency>() : optional<Frequency>((Frequency)paymentFrequency),+      paymentLag,+      quoteCurrencyPaymentFrequency < 0 ? optional<Frequency>() : optional<Frequency>((Frequency)quoteCurrencyPaymentFrequency) QL144_ARGS(fxResetFixingDays, fxResetFixingCalendar ? *fxResetFixingCalendar : Calendar(), qlOptBool(useIndexedCoupons), qlStubSelection(baseStub), qlStubSelection(quoteStub))))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper *qlConstNotionalCrossCurrencySwapRateHelper(QlQuote *fixedRate, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth,+  int fixedFrequency, DayCounter *fixedDayCount, QlIborIndex *floatIndex, QlYieldTermStructure *collateralCurve, int collateralOnFixedLeg, int paymentLag, int useIndexedCoupons, int floatPaymentFrequency, QlStubIndexSelection* floatStub, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "constNotionalCrossCurrencySwapRateHelper", useIndexedCoupons == -1 && floatPaymentFrequency < 0 && !floatStub)) return nullptr;+  try {+    return ret(new QlRateHelper(alloc(new ConstNotionalCrossCurrencySwapRateHelper(*arg(fixedRate), Period(tenorLen, (TimeUnit)tenorUnit), fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth,+      (Frequency)fixedFrequency, *arg(fixedDayCount), *arg(floatIndex), *arg(collateralCurve), collateralOnFixedLeg, paymentLag QL144_ARGS(qlOptBool(useIndexedCoupons), floatPaymentFrequency < 0 ? optional<Frequency>() : optional<Frequency>((Frequency)floatPaymentFrequency), qlStubSelection(floatStub))))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper *qlFxSwapRateHelper(QlQuote *fwdPoint, QlQuote *spotFx, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth,+  int isFxBaseCurrencyCollateralCurrency, QlYieldTermStructure *collateralCurve, Calendar *tradingCalendar, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlRateHelper(alloc(new FxSwapRateHelper(*arg(fwdPoint), *arg(spotFx), Period(tenorLen, (TimeUnit)tenorUnit), fixingDays, *arg(calendar), (BusinessDayConvention)convention,+      endOfMonth, isFxBaseCurrencyCollateralCurrency, *arg(collateralCurve), *arg(tradingCalendar)))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper *qlFxSwapRateHelper2(QlQuote *fwdPoint, QlQuote *spotFx, int startDate, int endDate, int isFxBaseCurrencyCollateralCurrency, QlYieldTermStructure *collateralCurve, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlRateHelper(alloc(new FxSwapRateHelper(*arg(fwdPoint), *arg(spotFx), Date(startDate), Date(endDate), isFxBaseCurrencyCollateralCurrency, *arg(collateralCurve)))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}++double qlYieldTSDiscount(QlYieldTermStructure *ts, int date, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*ts)->discount(Date(date), extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlSwapRateHelper *qlSwapRateHelper1(QlQuote *q, int l, int u, Calendar *cal, int freq,+  int conv, DayCounter *dc, QlIborIndex *i, QlQuote *s, int fl, int fu, QlYieldTermStructure *ts,+  unsigned settlementDays, int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons,+  int floatConvention, QlFloatingRateCouponPricer *couponPricer, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlSwapRateHelper(alloc(new SwapRateHelper(*arg(q),+	    Period(l, (TimeUnit)u), *arg(cal), (Frequency) freq, (BusinessDayConvention) conv, *arg(dc), *arg(i),+            qlNullableHandle(arg(s)),+            Period(fl, (TimeUnit)fu), qlNullableHandle(arg(ts)),+            settlementDays, (Pillar::Choice)pillar, qlNullableDate(customPillarDate), endOfMonth,+            qlOptBool(useIndexedCoupons),+            qlOptBusinessDayConvention(floatConvention),+            couponPricer ? *arg(couponPricer) : ext::shared_ptr<FloatingRateCouponPricer>()))));+  } catch (std::exception& er) {return handleException<QlSwapRateHelper *>(e, er);}}+QlSwapRateHelper *qlSwapRateHelper2(QlQuote *q, int startDate, int endDate, Calendar *cal, int freq,+  int conv, DayCounter *dc, QlIborIndex *i, QlQuote *s, QlYieldTermStructure *ts,+  int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons,+  int floatConvention, QlFloatingRateCouponPricer *couponPricer, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlSwapRateHelper(alloc(new SwapRateHelper(*arg(q),+            Date(startDate), Date(endDate), *arg(cal), (Frequency) freq, (BusinessDayConvention) conv, *arg(dc), *arg(i),+            qlNullableHandle(arg(s)), qlNullableHandle(arg(ts)),+            (Pillar::Choice)pillar, qlNullableDate(customPillarDate), endOfMonth,+            qlOptBool(useIndexedCoupons),+            qlOptBusinessDayConvention(floatConvention),+            couponPricer ? *arg(couponPricer) : ext::shared_ptr<FloatingRateCouponPricer>()))));+  } catch (std::exception& er) {return handleException<QlSwapRateHelper *>(e, er);}}+QlYieldTermStructure* qlFlatForward(int referenceDate, QlQuote* forward, DayCounter* dayCounter, int compounding, int frequency, QlError **e) { QlCallScope callbackScope(e);+try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new FlatForward(Date(referenceDate), *arg(forward), *arg(dayCounter), (Compounding)compounding, (Frequency)frequency)))));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}+QlYieldTermStructure* qlFlatForward1(unsigned settlementDays, Calendar* calendar, QlQuote* forward, DayCounter* dayCounter, int compounding, int frequency, QlError **e) { QlCallScope callbackScope(e);+try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new FlatForward(settlementDays, *arg(calendar), *arg(forward), *arg(dayCounter), (Compounding)compounding, (Frequency)frequency)))));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}+QlYieldTermStructure* qlCompositeZeroYieldStructure(QlYieldTermStructure* curve1, QlYieldTermStructure* curve2, QlCallback* fn, int compounding, int frequency, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new CompositeZeroYieldStructure<hasquant::BinaryCallback>(*arg(curve1), *arg(curve2), hasquant::BinaryCallback{*arg(fn)}, (Compounding)compounding, (Frequency)frequency)))));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}++void qlFreeFittedBondDiscountCurveFittingMethod(FittedBondDiscountCurveFittingMethod *o) {del(o);}++// generated functions+InterestRate* qlYieldTermStructureZeroRate(QlYieldTermStructure* o, int d, DayCounter* resultDayCounter, int comp, int freq, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+try {return ret(new InterestRate((*arg(o))->zeroRate(Date(d), *arg(resultDayCounter), (Compounding)comp, (Frequency)freq, extrapolate)));+  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}+InterestRate* qlYieldTermStructureForwardRate(QlYieldTermStructure* o, int d1, int d2, DayCounter* resultDayCounter, int comp, int freq, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new InterestRate((*arg(o))->forwardRate(Date(d1), Date(d2), *arg(resultDayCounter), (Compounding)comp, (Frequency)freq, extrapolate)));+  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}+InterestRate* qlYieldTermStructureForwardRate2(QlYieldTermStructure* o, double t1, double t2, int comp, int freq, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new InterestRate((*arg(o))->forwardRate(t1, t2, (Compounding)comp, (Frequency)freq, extrapolate)));+  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}+InterestRate* qlYieldTermStructureZeroRate1(QlYieldTermStructure* o, double t, int comp, int freq, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new InterestRate((*arg(o))->zeroRate(t, (Compounding)comp, (Frequency)freq, extrapolate)));+  } catch (std::exception& er) {return handleException<InterestRate*>(e, er);}}+double qlYieldTermStructureDiscount1(QlYieldTermStructure* o, double t, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->discount(t, extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlRateHelper* qlFraRateHelper(QlQuote* rate, unsigned monthsToStart, unsigned monthsToEnd, unsigned fixingDays, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new FraRateHelper(*arg(rate), monthsToStart, monthsToEnd, fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth, *arg(dayCounter), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+// Each shim below now binds the primary ctor overload (including the leading+// `optimizationMethod` param): OptimizationMethod is a shared_ptr box+// (QlOptimizationMethod, see qlLevenbergMarquardt/qlSimplex) rather than a raw+// Haskell-finalized pointer, so `method ? *arg(method) : shared_ptr<...>()`+// safely copies a shared reference into FittingMethod's own shared_ptr member+// -- correct even though FittedBondDiscountCurve additionally clones its+// fitting method, since cloning just copies that member (bumping the+// refcount), and correct regardless of when Haskell's own box is collected,+// since the object is only actually freed once every shared_ptr referencing+// it (Haskell's box included) has gone away.+// allocAs<FittedBondDiscountCurveFittingMethod> (not a bare alloc()) in each ctor below: see+// allocAs's doc comment in qlaux.h -- alloc() alone would trace each of these under its own+// leaf type (CubicBSplinesFitting, ...) rather than the base type qlFreeFittedBondDiscount-+// CurveFittingMethod's del() traces the matching free under.+FittedBondDiscountCurveFittingMethod* qlCubicBSplinesFitting(unsigned knotVectorLen, double *knotVector, int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, QlError **e) { QlCallScope callbackScope(e);+  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new CubicBSplinesFitting(std::vector<double>(knotVector, knotVector+knotVectorLen), constrainAtZero, Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, constraint ? *arg(constraint) : Constraint(NoConstraint())));+  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}+FittedBondDiscountCurveFittingMethod* qlExponentialSplinesFitting(int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, unsigned numCoeffs, double fixedKappa, QlOptimizationMethod* method, Constraint* constraint, QlError **e) { QlCallScope callbackScope(e);+  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new ExponentialSplinesFitting(constrainAtZero, Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, numCoeffs, fixedKappa, constraint ? *arg(constraint) : Constraint(NoConstraint())));+  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}+FittedBondDiscountCurveFittingMethod* qlNelsonSiegelFitting(unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, QlError **e) { QlCallScope callbackScope(e);+  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new NelsonSiegelFitting(Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, constraint ? *arg(constraint) : Constraint(NoConstraint())));+  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}+FittedBondDiscountCurveFittingMethod* qlSimplePolynomialFitting(unsigned degree, int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, QlError **e) { QlCallScope callbackScope(e);+  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new SimplePolynomialFitting(degree, constrainAtZero, Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, constraint ? *arg(constraint) : Constraint(NoConstraint())));+  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}+FittedBondDiscountCurveFittingMethod* qlSvenssonFitting(unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, QlError **e) { QlCallScope callbackScope(e);+  try {return allocAs<FittedBondDiscountCurveFittingMethod>(new SvenssonFitting(Array(weights, weights+weightsLen), method ? *arg(method) : shared_ptr<OptimizationMethod>(), Array(l2, l2+l2Len), minCutoffTime, maxCutoffTime, constraint ? *arg(constraint) : Constraint(NoConstraint())));+  } catch (std::exception& er) {return handleException<FittedBondDiscountCurveFittingMethod*>(e, er);}}+QlFittedBondDiscountCurve* qlFittedBondDiscountCurve(unsigned settlementDays, Calendar* calendar, unsigned bondsLen, QlBondHelper** bonds, DayCounter* dayCounter, FittedBondDiscountCurve::FittingMethod* fittingMethod, double accuracy, unsigned maxEvaluations, unsigned guessLen, double *guess, double simplexLambda, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFittedBondDiscountCurve(alloc(new FittedBondDiscountCurve(settlementDays, *arg(calendar), qlVector(bonds, bondsLen), *arg(dayCounter), *arg(fittingMethod), accuracy, maxEvaluations, Array(guess, guess+guessLen), simplexLambda))));+  } catch (std::exception& er) {return handleException<QlFittedBondDiscountCurve*>(e, er);}}+QlFittedBondDiscountCurve* qlFittedBondDiscountCurve1(int referenceDate, unsigned bondsLen, QlBondHelper** bonds, DayCounter* dayCounter, FittedBondDiscountCurveFittingMethod* fittingMethod, double accuracy, unsigned maxEvaluations, unsigned guessLen, double *guess, double simplexLambda, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFittedBondDiscountCurve(alloc(new FittedBondDiscountCurve(Date(referenceDate), qlVector(bonds, bondsLen), *arg(dayCounter), *arg(fittingMethod), accuracy, maxEvaluations, Array(guess, guess+guessLen), simplexLambda))));+  } catch (std::exception& er) {return handleException<QlFittedBondDiscountCurve*>(e, er);}}++double qlFittedBondDiscountCurveFittingMethodMinimumCostValue(QlFittedBondDiscountCurve *o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fitResults().minimumCostValue();} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlFittedBondDiscountCurveFittingMethodNumberOfIterations(QlFittedBondDiscountCurve *o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fitResults().numberOfIterations();} catch (std::exception& er) {return handleException<int>(e, er);}}+unsigned qlFittedBondDiscountCurveFittingMethodSize(QlFittedBondDiscountCurve *o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fitResults().size();} catch (std::exception& er) {return handleException<unsigned>(e, er);}}+int qlFittedBondDiscountCurveFittingMethodErrorCode(QlFittedBondDiscountCurve *o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->fitResults().errorCode();} catch (std::exception& er) {return handleException<int>(e, er);}}+void qlFittedBondDiscountCurveFittingMethodSolution(QlFittedBondDiscountCurve *o, unsigned *len, double **vs, QlError **e) { QlCallScope callbackScope(e);+  try {fillVectorOut([&] {return (*arg(o))->fitResults().solution(); }, len, vs);+  } catch (std::exception& er) {(void)handleException<double*>(e, er);}}+double qlFittedBondDiscountCurveFittingMethodDiscount(QlFittedBondDiscountCurve *o, unsigned xLen, double *x, double t, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->fitResults().discount(Array(x, x+xLen), t);+  } catch (std::exception& er) {return handleException<double>(e, er);}}+void qlFreeYieldTermStructure(QlYieldTermStructure *ts) {del(ts);}++// A relinkable handle, empty when `initial` is null. An empty handle is meaningful, not an+// error: it is what makes a rate helper discount off the curve being bootstrapped.+QlRelinkableYieldTermStructure* qlRelinkableYieldTermStructure(QlYieldTermStructure *initial, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(initial ? new QlRelinkableYieldTermStructure(handlePtr(arg(initial)))+                          : new QlRelinkableYieldTermStructure());+  } catch (std::exception& er) {return handleException<QlRelinkableYieldTermStructure*>(e, er);}}+void qlFreeRelinkableYieldTermStructure(QlRelinkableYieldTermStructure *o) {del(o);}+void qlRelinkableYieldTermStructureLinkTo(QlRelinkableYieldTermStructure *o, QlYieldTermStructure *c, QlError **e) { QlCallScope callbackScope(e);+  try {arg(o)->linkTo(handlePtr(arg(c)));} catch (std::exception& er) {(void)handleException<void *>(e, er);}}+// The same-T Handle copy shares link_, so dependents built from this upcast follow relinking.+QlYieldTermStructure* qlRelinkableYieldTermStructureAsYieldTermStructure(QlRelinkableYieldTermStructure *o) {+  return ret(new QlYieldTermStructure(*arg(o)));}+void qlFreeFittedBondDiscountCurve(QlFittedBondDiscountCurve *o) {del(o);}+QlYieldTermStructure* qlFittedBondDiscountCurveAsYieldTermStructure(QlFittedBondDiscountCurve *o) {return ret(new QlYieldTermStructure(*arg(o)));}+void qlFreeBondHelper(QlBondHelper *o) {del(o);}+QlRateHelper* qlBondHelperAsRateHelper(QlBondHelper *o) {return ret(new QlRateHelper(*arg(o)));}+void qlFreeSwapRateHelper(QlSwapRateHelper *o) {del(o);}+QlRateHelper* qlSwapRateHelperAsRateHelper(QlSwapRateHelper *o) {return ret(new QlRateHelper(*arg(o)));}+void qlFreeOISRateHelper(QlOISRateHelper *o) {del(o);}+QlRateHelper* qlOISRateHelperAsRateHelper(QlOISRateHelper *o) {return ret(new QlRateHelper(*arg(o)));}+void qlFreeTermStructure(QlTermStructure *o) {del(o);}+QlTermStructure* qlYieldTermStructureAsTermStructure(QlYieldTermStructure *o) {return ret(new QlTermStructure(handlePtr(arg(o))));}++QlBondHelper* qlBondHelper(QlQuote* cleanPrice, QlBond* bond, int priceType, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBondHelper(alloc(new BondHelper(*arg(cleanPrice), *arg(bond), (Bond::Price::Type)priceType))));+  } catch (std::exception& er) {return handleException<QlBondHelper*>(e, er);}}+QlOISRateHelper* qlOISRateHelper(unsigned settlementDays, int l, int u, QlQuote* fixedRate, QlOvernightIndex* overnightIndex, QlYieldTermStructure* discountingCurve,+  int telescopicValueDates, int paymentLag, int paymentConvention, int paymentFrequency, Calendar* paymentCalendar,+  int fl, int fu, QlQuote* overnightSpread, int pillar, int customPillarDate, int averagingMethod, int endOfMonth, int fixedPaymentFrequency,+  Calendar* fixedCalendar, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift,+  QlFloatingRateCouponPricer* pricer, int rule, Calendar* overnightCalendar, int convention, DayCounter* fixedDayCount, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "oisRateHelperWithOptions", !fixedDayCount)) return nullptr;+  try {return ret(new QlOISRateHelper(alloc(new OISRateHelper(settlementDays, Period(l, (TimeUnit)u), *arg(fixedRate), *arg(overnightIndex), qlNullableHandle(arg(discountingCurve)),+    telescopicValueDates, paymentLag, (BusinessDayConvention)paymentConvention, (Frequency)paymentFrequency, *arg(paymentCalendar),+    Period(fl, (TimeUnit)fu),+    overnightSpread ? std::variant<Spread, Handle<Quote>>(*arg(overnightSpread)) : std::variant<Spread, Handle<Quote>>(Spread(0.0)),+    (Pillar::Choice)pillar, qlNullableDate(customPillarDate), (RateAveraging::Type)averagingMethod, qlOptBool(endOfMonth),+    fixedPaymentFrequency < 0 ? optional<Frequency>() : optional<Frequency>((Frequency)fixedPaymentFrequency),+    *arg(fixedCalendar), lookbackDays, lockoutDays, applyObservationShift,+    pricer ? *arg(pricer) : ext::shared_ptr<FloatingRateCouponPricer>(), (DateGeneration::Rule)rule, *arg(overnightCalendar), (BusinessDayConvention)convention QL144_ARGS(fixedDayCount ? *fixedDayCount : DayCounter())))));+  } catch (std::exception& er) {return handleException<QlOISRateHelper*>(e, er);}}+QlOISRateHelper* qlOISRateHelper2(int start, int end, QlQuote* fixedRate, QlOvernightIndex* overnightIndex, QlYieldTermStructure* discountingCurve,+  int telescopicValueDates, int paymentLag, int paymentConvention, int paymentFrequency, Calendar* paymentCalendar,+  QlQuote* overnightSpread, int pillar, int customPillarDate, int averagingMethod, int endOfMonth, int fixedPaymentFrequency,+  Calendar* fixedCalendar, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift,+  QlFloatingRateCouponPricer* pricer, int rule, Calendar* overnightCalendar, int convention, DayCounter* fixedDayCount, QlError **e) { QlCallScope callbackScope(e);+  if (!ql144Default(e, "oisRateHelperWithOptions", !fixedDayCount)) return nullptr;+    try {return ret(new QlOISRateHelper(alloc(new OISRateHelper(Date(start), Date(end), *arg(fixedRate), *arg(overnightIndex), qlNullableHandle(arg(discountingCurve)),+    telescopicValueDates, paymentLag, (BusinessDayConvention)paymentConvention, (Frequency)paymentFrequency, *arg(paymentCalendar),+    overnightSpread ? std::variant<Spread, Handle<Quote>>(*arg(overnightSpread)) : std::variant<Spread, Handle<Quote>>(Spread(0.0)),+    (Pillar::Choice)pillar, qlNullableDate(customPillarDate), (RateAveraging::Type)averagingMethod, qlOptBool(endOfMonth),+    fixedPaymentFrequency < 0 ? optional<Frequency>() : optional<Frequency>((Frequency)fixedPaymentFrequency),+    *arg(fixedCalendar), lookbackDays, lockoutDays, applyObservationShift,+    pricer ? *arg(pricer) : ext::shared_ptr<FloatingRateCouponPricer>(), (DateGeneration::Rule)rule, *arg(overnightCalendar), (BusinessDayConvention)convention QL144_ARGS(fixedDayCount ? *fixedDayCount : DayCounter())))));+  } catch (std::exception& er) {return handleException<QlOISRateHelper*>(e, er);}}+QlSwapRateHelper* qlSwapRateHelper(QlQuote* rate, QlSwapIndex* swapIndex, QlQuote* spread, int fl, int fu, QlYieldTermStructure* discountingCurve,+  int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons, QlFloatingRateCouponPricer *couponPricer, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwapRateHelper(alloc(new SwapRateHelper(*arg(rate), *arg(swapIndex), qlNullableHandle(arg(spread)), Period(fl, (TimeUnit)fu), qlNullableHandle(arg(discountingCurve)),+          (Pillar::Choice)pillar, qlNullableDate(customPillarDate), endOfMonth,+          qlOptBool(useIndexedCoupons),+          couponPricer ? *arg(couponPricer) : ext::shared_ptr<FloatingRateCouponPricer>()))));+  } catch (std::exception& er) {return handleException<QlSwapRateHelper*>(e, er);}}++QlYieldTermStructure* qlForwardSpreadedTermStructure(QlYieldTermStructure* x0, QlQuote* spread, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new ForwardSpreadedTermStructure(*arg(x0), *arg(spread))))));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}++QlYieldTermStructure* qlZeroSpreadedTermStructure(QlYieldTermStructure* x0, QlQuote* spread, int comp, int freq, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new ZeroSpreadedTermStructure(*arg(x0), *arg(spread), (Compounding)comp, (Frequency)freq)))));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}++QlRateHelper* qlBMASwapRateHelper(QlQuote* liborFraction, int tl, int tu, unsigned settlementDays, Calendar* calendar, int bl, int bu, int bmaConvention, DayCounter* bmaDayCount, QlBMAIndex* bmaIndex, QlIborIndex* index, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new BMASwapRateHelper(*arg(liborFraction), Period(tl, (TimeUnit)tu), settlementDays, *arg(calendar), Period(bl, (TimeUnit)bu), (BusinessDayConvention)bmaConvention, *arg(bmaDayCount), *arg(bmaIndex), *arg(index)))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper* qlDepositRateHelper1(QlQuote* rate, QlIborIndex* iborIndex, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new DepositRateHelper(*arg(rate), *arg(iborIndex)))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper* qlDepositRateHelper2(QlQuote* rate, int fixingDate, QlIborIndex* iborIndex, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new FixedDateDepositRateHelper(*arg(rate), Date(fixingDate), *arg(iborIndex)))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper* qlFraRateHelper1(QlQuote* rate, unsigned monthsToStart, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new FraRateHelper(*arg(rate), monthsToStart, *arg(iborIndex), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper* qlFraRateHelper2(QlQuote* rate, int l, int u, unsigned lengthInMonths, unsigned fixingDays, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new FraRateHelper(*arg(rate), Period(l, (TimeUnit)u), lengthInMonths, fixingDays, *arg(calendar), (BusinessDayConvention)convention, endOfMonth, *arg(dayCounter), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper* qlFraRateHelper3(QlQuote* rate, int l, int u, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new FraRateHelper(*arg(rate), Period(l, (TimeUnit)u), *arg(iborIndex), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper* qlFraRateHelper4(QlQuote* rate, int startDate, int endDate, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new FixedDateFraRateHelper(*arg(rate), Date(startDate), Date(endDate), *arg(iborIndex), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlRateHelper* qlFraRateHelper5(QlQuote* rate, unsigned immOffsetStart, unsigned immOffsetEnd, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new FraRateHelper(*arg(rate), immOffsetStart, immOffsetEnd, *arg(iborIndex), (Pillar::Choice)pillar, qlNullableDate(customPillarDate), useIndexedCoupon))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+QlFuturesRateHelper* qlFuturesRateHelper1(QlQuote* price, int immStartDate, int endDate, DayCounter* dayCounter, QlQuote* convexityAdjustment, int type, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFuturesRateHelper(alloc(new FuturesRateHelper(*arg(price), Date(immStartDate), Date(endDate), *arg(dayCounter), qlNullableHandle(arg(convexityAdjustment)), (Futures::Type)type))));+  } catch (std::exception& er) {return handleException<QlFuturesRateHelper*>(e, er);}}+QlFuturesRateHelper* qlFuturesRateHelper2(QlQuote* price, int immDate, QlIborIndex* iborIndex, QlQuote* convexityAdjustment, int type, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFuturesRateHelper(alloc(new FuturesRateHelper(*arg(price), Date(immDate), *arg(iborIndex), qlNullableHandle(arg(convexityAdjustment)), (Futures::Type)type))));+  } catch (std::exception& er) {return handleException<QlFuturesRateHelper*>(e, er);}}+QlFuturesRateHelper* qlFuturesRateHelper(QlQuote* price, int immDate, unsigned lengthInMonths, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, QlQuote* convexityAdjustment, int type, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlFuturesRateHelper(alloc(new FuturesRateHelper(*arg(price), Date(immDate), lengthInMonths, *arg(calendar), (BusinessDayConvention)convention, endOfMonth, *arg(dayCounter), qlNullableHandle(arg(convexityAdjustment)), (Futures::Type)type))));+  } catch (std::exception& er) {return handleException<QlFuturesRateHelper*>(e, er);}}+void qlFreeFuturesRateHelper(QlFuturesRateHelper *o) {del(o);}+QlRateHelper* qlFuturesRateHelperAsRateHelper(QlFuturesRateHelper *o) {return ret(new QlRateHelper(*arg(o)));}+double qlFuturesRateHelperConvexityAdjustment(QlFuturesRateHelper *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->convexityAdjustment();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlOvernightIndexFutureRateHelper* qlOvernightIndexFutureRateHelper(QlQuote* price, int valueDate, int maturityDate, QlOvernightIndex* overnightIndex, QlQuote* convexityAdjustment, int averagingMethod, int pillar, int customPillarDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOvernightIndexFutureRateHelper(alloc(new OvernightIndexFutureRateHelper(*arg(price), Date(valueDate), Date(maturityDate),+      *arg(overnightIndex), qlNullableHandle(arg(convexityAdjustment)), (RateAveraging::Type)averagingMethod,+      (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));+  } catch (std::exception& er) {return handleException<QlOvernightIndexFutureRateHelper*>(e, er);}}+void qlFreeOvernightIndexFutureRateHelper(QlOvernightIndexFutureRateHelper *o) {del(o);}+QlRateHelper* qlOvernightIndexFutureRateHelperAsRateHelper(QlOvernightIndexFutureRateHelper *o) {return ret(new QlRateHelper(*arg(o)));}+double qlOvernightIndexFutureRateHelperConvexityAdjustment(QlOvernightIndexFutureRateHelper *o, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->convexityAdjustment();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlRateHelper* qlSofrFutureRateHelper(QlQuote* price, int month, int year, int freq, QlQuote* convexityAdjustment, int pillar, int customPillarDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new SofrFutureRateHelper(+      std::variant<Rate, Handle<Quote>>(*arg(price)), (Month)month, year, (Frequency)freq,+      convexityAdjustment ? std::variant<Rate, Handle<Quote>>(*arg(convexityAdjustment)) : std::variant<Rate, Handle<Quote>>(Rate(0.0)),+      (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}+double qlRateHelperImpliedQuote(QlRateHelper* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->impliedQuote();} catch (std::exception& er) {return handleException<double>(e, er);}}+// The helper keeps a non-owning pointer to the curve until it is next set; the caller keeps the+// curve alive for this call, and only impliedQuote reads it here.+double qlRateHelperImpliedQuoteOn(QlRateHelper* o, QlYieldTermStructure* curve, QlError **e) { QlCallScope callbackScope(e);+  try {+    QL_REQUIRE(!arg(curve)->empty(), "empty term structure given");+    (*arg(o))->setTermStructure(arg(curve)->currentLink().get());+    return (*arg(o))->impliedQuote();+  } catch (std::exception& er) {return handleException<double>(e, er);}}+QlBond* qlBondHelperBond(QlBondHelper* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlBond((*arg(o))->bond()));} catch (std::exception& er) {return handleException<QlBond*>(e, er);}}+QlOvernightIndexedSwap* qlOISRateHelperSwap(QlOISRateHelper* o, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOvernightIndexedSwap((*arg(o))->swap()));+  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwap*>(e, er);}}+QlVanillaSwap* qlSwapRateHelperSwap(QlSwapRateHelper* o, QlError **e) { QlCallScope callbackScope(e);try {return ret(new QlVanillaSwap((*arg(o))->swap()));} catch (std::exception& er) {return handleException<QlVanillaSwap*>(e, er);} }+int qlTermStructureReferenceDate(QlTermStructure* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->referenceDate().serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlTermStructureMaxDate(QlTermStructure* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->maxDate().serialNumber();} catch (std::exception& er) {return handleException<int>(e, er);}}+double qlTermStructureMaxTime(QlTermStructure* o, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->maxTime();} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlTermStructureAllowsExtrapolation(QlTermStructure* o) {return (*arg(o))->allowsExtrapolation();}+void qlTermStructureSetExtrapolation(QlTermStructure* o, int enabled) {(*arg(o))->enableExtrapolation(enabled);}+double qlTermStructureTimeFromReference(QlTermStructure* o, int date, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(o))->timeFromReference(Date(date));} catch (std::exception& er) {return handleException<double>(e, er);}}+QlYieldTermStructure* qlImpliedTermStructure(QlYieldTermStructure* x0, int referenceDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new ImpliedTermStructure(*arg(x0), Date(referenceDate))))));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}++QlYieldTermStructure* qlPiecewiseZeroSpreadedTermStructure(QlYieldTermStructure* x0, unsigned spreadsLen, QlQuote** spreads, unsigned datesLen, int* dates, int comp, int freq, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseZeroSpreadedTermStructureAux(qlNullableHandle(arg(x0)), qlHandleVector(spreads, spreadsLen), qlDateVector(dates, datesLen), (Compounding)comp, (Frequency)freq, interpolator, approximator, approximatorArg));+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}+QlYieldTermStructure* qlPiecewiseForwardSpreadedTermStructure(QlYieldTermStructure* x0, unsigned spreadsLen, QlQuote** spreads, unsigned datesLen, int* dates, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseForwardSpreadedTermStructureAux(qlNullableHandle(arg(x0)), qlHandleVector(spreads, spreadsLen), qlDateVector(dates, datesLen), interpolator, approximator, approximatorArg));+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}+QlYieldTermStructure* qlPiecewiseSpreadYieldCurve(QlYieldTermStructure* baseCurve, unsigned rateLen, QlRateHelper** helpers, int interpolator, int approximator, int approximatorArg,+    double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseSpreadYieldCurveAux(qlNullableHandle(arg(baseCurve)), qlVector(helpers, rateLen), interpolator, approximator, approximatorArg,+        bootstrapOpts(accuracy, minValue, maxValue, maxAttempts, maxFactor, minFactor, dontThrow, dontThrowSteps, maxEvaluations)));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}+QlYieldTermStructure* qlPiecewiseSpreadYieldCurveGlobalBootstrap(QlYieldTermStructure* baseCurve, unsigned rateLen, QlRateHelper** helpers, double accuracy, unsigned weightsLen, double* weights, int extrapolate, QlCallback* initialGuess, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlPiecewiseSpreadYieldCurveGlobalBootstrapAux(qlNullableHandle(arg(baseCurve)), qlVector(helpers, rateLen), accuracy,+        std::vector<double>(weights, weights + weightsLen), initialGuess ? *initialGuess : QlCallback()));+    if (extrapolate) ts->enableExtrapolation();+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}+QlYieldTermStructure* qlQuantoTermStructure(QlYieldTermStructure* underlyingDividendTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* foreignRiskFreeTS, QlBlackVolTermStructure* underlyingBlackVolTS, double strike, QlBlackVolTermStructure* exchRateBlackVolTS, double exchRateATMlevel, double underlyingExchRateCorrelation, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new QuantoTermStructure(*arg(underlyingDividendTS), *arg(riskFreeTS), *arg(foreignRiskFreeTS), *arg(underlyingBlackVolTS), strike, *arg(exchRateBlackVolTS), exchRateATMlevel, underlyingExchRateCorrelation)))));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}++QlYieldTermStructure* qlUltimateForwardTermStructure(QlYieldTermStructure* x0, QlQuote* lastLiquidForwardRate, QlQuote* ultimateForwardRate, int fspLen, int fspUnit, double alpha, int roundingDigits, int compounding, int frequency, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYieldTermStructure(shared_ptr<YieldTermStructure>(alloc(new UltimateForwardTermStructure(*arg(x0), *arg(lastLiquidForwardRate), *arg(ultimateForwardRate), Period(fspLen, (TimeUnit)fspUnit), alpha,+      roundingDigits == Null<Integer>() ? optional<Integer>() : optional<Integer>(roundingDigits), (Compounding)compounding, (Frequency)frequency)))));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}++QlYieldTermStructure* qlInterpolatedSpreadDiscountCurve(QlYieldTermStructure* baseCurve, unsigned dfsLen, double *dfs, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    auto ts = allocShared(qlInterpolatedSpreadDiscountCurveAux(qlNullableHandle(arg(baseCurve)), qlDateVector(dates, datesLen), std::vector<double>(dfs, dfs+dfsLen), interpolator, approximator, approximatorArg));+    return ret(new QlYieldTermStructure(ts));+  } catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}}++QlRateHelper* qlMultipleResetsSwapRateHelper(unsigned settlementDays, int tenorLen, int tenorUnit, QlQuote* fixedRate, QlIborIndex* iborIndex, unsigned resetsPerCoupon, QlYieldTermStructure* discountingCurve, int averagingMethod, double spread, int fixedFrequency, DayCounter* fixedDayCount, int fixedConvention, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlRateHelper(alloc(new MultipleResetsSwapRateHelper(settlementDays, Period(tenorLen, (TimeUnit)tenorUnit), *arg(fixedRate), *arg(iborIndex), resetsPerCoupon,+      qlNullableHandle(arg(discountingCurve)), (RateAveraging::Type)averagingMethod, spread, (Frequency)fixedFrequency, *arg(fixedDayCount), (BusinessDayConvention)fixedConvention))));+  } catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}}++void qlIndexAddFixing(QlIndex *i, int date, double fix, int overwrite, QlError **e) { QlCallScope callbackScope(e);try {(*arg(i))->addFixing(Date(date), fix, overwrite);} catch (std::exception& er) {(void)handleException<void *>(e, er);}}+double qlIndexFixing(QlIndex *i, int date, int forecastTodaysFixing, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(i))->fixing(Date(date), forecastTodaysFixing);} catch (std::exception& er) {return handleException<double>(e, er);}}+int qlIndexHasHistoricalFixing(QlIndex *i, int date, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(i))->hasHistoricalFixing(Date(date));} catch (std::exception& er) {return handleException<int>(e, er);}}+int qlIndexIsValidFixingDate(QlIndex *i, int date, QlError **e) { QlCallScope callbackScope(e);try {return (*arg(i))->isValidFixingDate(Date(date));} catch (std::exception& er) {return handleException<int>(e, er);}}+void qlIndexAddFixings(QlIndex *i, unsigned datesLen, int *dates, double *values, int overwrite, QlError **e) { QlCallScope callbackScope(e);+  try {std::vector<Date> ds = qlDateVector(dates, datesLen);(*arg(i))->addFixings(ds.begin(), ds.end(), values, overwrite);+  } catch (std::exception& er) {(void)handleException<void *>(e, er);}}+void qlIndexClearFixings(QlIndex *i, QlError **e) { QlCallScope callbackScope(e);try {(*arg(i))->clearFixings();} catch (std::exception& er) {(void)handleException<void *>(e, er);}}+void qlIndexFixingHistory(QlIndex *i, unsigned *datesLen, int **dates, unsigned *valuesLen, double **values, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> dateResult(datesLen, dates);+  OutArrayResult<double> valueResult(valuesLen, values);+  try {+    const std::string& name = (*arg(i))->name();+    const std::vector<std::string> names = IndexManager::instance().histories();+    if (std::none_of(names.begin(), names.end(), [&](const std::string& candidate) {+          return sameIndexName(candidate, name);+        }))+      return;+    const TimeSeries<Real>& history = (*arg(i))->timeSeries();+    const std::vector<Date> historyDates = history.dates();+    const std::vector<Real> historyValues = history.values();+    int *ds = dateResult.allocate((unsigned)historyDates.size());+    double *vs = valueResult.allocate((unsigned)historyValues.size());+    for (unsigned n = 0; n < historyDates.size(); ++n) ds[n] = historyDates[n].serialNumber();+    for (unsigned n = 0; n < historyValues.size(); ++n) vs[n] = historyValues[n];+    dateResult.commit(); valueResult.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}+void qlIndexManagerHistories(unsigned *count, char ***names, QlError **e) { QlCallScope callbackScope(e);+  OutStringArrayResult result(count, names);+  try {+    const std::vector<std::string> histories = IndexManager::instance().histories();+    const unsigned n = (unsigned)histories.size();+    char **ns = result.allocate(n);+    for (unsigned i = 0; i < n; ++i) ns[i] = tracedup(histories[i].c_str());+    result.commit();+  } catch (std::exception& er) {qlSetError(e, er.what());}}+void qlIndexManagerClearHistories(QlError **e) { QlCallScope callbackScope(e);+  try {IndexManager::instance().clearHistories();}+  catch (std::exception& er) {qlSetError(e, er.what());}}+// must match with the order of qlEnumObjects.h:LiborSwapIndexType+static const makeSwapIdx swapIndices[] = {+    &makeSwapIndex<ChfLiborSwapIsdaFix>+  , &makeSwapIndex<EurLiborSwapIfrFix>+  , &makeSwapIndex<EurLiborSwapIsdaFixA>+  , &makeSwapIndex<EurLiborSwapIsdaFixB>+  , &makeSwapIndex<EuriborSwapIfrFix>+  , &makeSwapIndex<EuriborSwapIsdaFixA>+  , &makeSwapIndex<EuriborSwapIsdaFixB>+  , &makeSwapIndex<GbpLiborSwapIsdaFix>+  , &makeSwapIndex<JpyLiborSwapIsdaFixAm>+  , &makeSwapIndex<JpyLiborSwapIsdaFixPm>+  , &makeSwapIndex<UsdLiborSwapIsdaFixAm>+  , &makeSwapIndex<UsdLiborSwapIsdaFixPm>+};++QlSwapIndex* qlCreateLiborSwapIndex(int index, int l, int u, QlYieldTermStructure* h1, QlYieldTermStructure* h2, QlError **e) { QlCallScope callbackScope(e);+  try {+    if (index < 0 || index >= (int)std::size(swapIndices))+      QL_FAIL("Invalid swap index index" << index);+    QlYieldTermStructure ts1 = qlNullableHandle(h1);+    QlYieldTermStructure ts2 = qlNullableHandle(h2);+    auto i = allocShared(swapIndices[index](Period(l, (TimeUnit)u), ts1, ts2));+    return ret(new QlSwapIndex(i));+  } catch (std::exception& er) {return handleException<QlSwapIndex*>(e, er);}}++void qlFreeIndex(QlIndex *i) {del(i);}+void qlFreeInterestRateIndex(QlInterestRateIndex *o) {del(o);}+QlIndex* qlInterestRateIndexAsIndex(QlInterestRateIndex *o) {return ret(new QlIndex(*arg(o)));}+void qlFreeSwapIndex(QlSwapIndex *o) {del(o);}+QlInterestRateIndex* qlSwapIndexAsInterestRateIndex(QlSwapIndex *o) {return ret(new QlInterestRateIndex(*arg(o)));}+void qlFreeBMAIndex(QlBMAIndex *o) {del(o);}+QlInterestRateIndex* qlBMAIndexAsInterestRateIndex(QlBMAIndex *o) {return ret(new QlInterestRateIndex(*arg(o)));}+void qlFreeOvernightIndexedSwapIndex(QlOvernightIndexedSwapIndex *o) {del(o);}+QlSwapIndex* qlOvernightIndexedSwapIndexAsSwapIndex(QlOvernightIndexedSwapIndex *o) {return ret(new QlSwapIndex(*arg(o)));}++QlBMAIndex* qlBMAIndex(QlYieldTermStructure* h, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlBMAIndex(alloc(new BMAIndex(qlNullableHandle(arg(h))))));+  } catch (std::exception& er) {return handleException<QlBMAIndex*>(e, er);}}+QlOvernightIndexedSwapIndex* qlOvernightIndexedSwapIndex(char* familyName, int l, int u, unsigned settlementDays, Currency* currency, QlOvernightIndex* overnightIndex, int telescopicValueDates, int averagingMethod, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOvernightIndexedSwapIndex(alloc(new OvernightIndexedSwapIndex(std::string(arg(familyName)), Period(l, (TimeUnit)u), settlementDays, *arg(currency), *arg(overnightIndex), telescopicValueDates, (RateAveraging::Type)averagingMethod))));+  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwapIndex*>(e, er);}}+QlSwapIndex* qlSwapIndex1(char* familyName, int l, int u, unsigned settlementDays, Currency* currency, Calendar* calendar, int fl, int fu, int fixedLegConvention, DayCounter* fixedLegDayCounter, QlIborIndex* iborIndex, QlYieldTermStructure* discountingTermStructure, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwapIndex(alloc(new SwapIndex(std::string(arg(familyName)), Period(l, (TimeUnit)u), settlementDays, *arg(currency), *arg(calendar), Period(fl, (TimeUnit)fu), (BusinessDayConvention)fixedLegConvention, *arg(fixedLegDayCounter), *arg(iborIndex), *arg(discountingTermStructure)))));+  } catch (std::exception& er) {return handleException<QlSwapIndex*>(e, er);}}+QlSwapIndex* qlSwapIndex(char* familyName, int l, int u, unsigned settlementDays, Currency* currency, Calendar* calendar, int fl, int fu, int fixedLegConvention, DayCounter* fixedLegDayCounter, QlIborIndex* iborIndex, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlSwapIndex(alloc(new SwapIndex(std::string(arg(familyName)), Period(l, (TimeUnit)u), settlementDays, *arg(currency), *arg(calendar), Period(fl, (TimeUnit)fu), (BusinessDayConvention)fixedLegConvention, *arg(fixedLegDayCounter), *arg(iborIndex)))));+  } catch (std::exception& er) {return handleException<QlSwapIndex*>(e, er);}}+Schedule* qlBMAIndexFixingSchedule(QlBMAIndex* o, int start, int end, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new Schedule((*arg(o))->fixingSchedule(Date(start), Date(end))));+  } catch (std::exception& er) {return handleException<Schedule*>(e, er);}}+QlOvernightIndexedSwap* qlOvernightIndexedSwapIndexUnderlyingSwap(QlOvernightIndexedSwapIndex* o, int fixingDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOvernightIndexedSwap((*arg(o))->underlyingSwap(Date(fixingDate))));+  } catch (std::exception& er) {return handleException<QlOvernightIndexedSwap*>(e, er);}}+QlVanillaSwap* qlSwapIndexUnderlyingSwap(QlSwapIndex* o, int fixingDate, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlVanillaSwap((*arg(o))->underlyingSwap(Date(fixingDate))));+  } catch (std::exception& er) {return handleException<QlVanillaSwap*>(e, er);}}+double qlInterestRateIndexForecastFixing(QlInterestRateIndex* o, int fixingDate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->forecastFixing(Date(fixingDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+int qlInterestRateIndexFixingDate(QlInterestRateIndex* o, int valueDate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->fixingDate(Date(valueDate)).serialNumber();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlInterestRateIndexValueDate(QlInterestRateIndex* o, int fixingDate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->valueDate(Date(fixingDate)).serialNumber();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlInterestRateIndexMaturityDate(QlInterestRateIndex* o, int valueDate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->maturityDate(Date(valueDate)).serialNumber();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+Calendar* qlIndexFixingCalendar(QlIndex* o, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Calendar((*arg(o))->fixingCalendar()));+  } catch (std::exception& er) {return handleException<Calendar*>(e, er);}}+Currency* qlInterestRateIndexCurrency(QlInterestRateIndex* o, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new Currency((*arg(o))->currency()));+  } catch (std::exception& er) {return handleException<Currency*>(e, er);}}+DayCounter* qlInterestRateIndexDayCounter(QlInterestRateIndex* o, QlError **e) { QlCallScope callbackScope(e);+  try {return alloc(new DayCounter((*arg(o))->dayCounter()));+  } catch (std::exception& er) {return handleException<DayCounter*>(e, er);}}+unsigned qlInterestRateIndexFixingDays(QlInterestRateIndex* o) {return (*arg(o))->fixingDays();}++int qlInterestRateIndexTenor(QlInterestRateIndex* o, int *u, QlError **e) { QlCallScope callbackScope(e);+  try {const Period& p = (*arg(o))->tenor();*u = p.units();return p.length();+  } catch (std::exception& er) {return handleException<int>(e, er);}}+QlIborIndex *qlIborIndex(char *name, int l, int u, unsigned settlDays, Currency *ccy, Calendar *cal, int conv, int eom, DayCounter *dayCount,+  QlYieldTermStructure *fwd, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlIborIndex(alloc(new IborIndex(name, Period(l, (TimeUnit)u),+	  settlDays, *arg(ccy), *arg(cal), (BusinessDayConvention) conv,+	  eom, *arg(dayCount), qlNullableHandle(fwd)))));+  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}++const char* qlIndexName(QlIndex *index) {std::string name = (*arg(index))->name(); return tracedup(name.c_str());}+void qlFreeIborIndex(QlIborIndex *i) {del(i);}++QlIborIndex *qlLibor(char *name, int l, int u, unsigned settlDays,+    Currency *ccy, Calendar *cal, DayCounter *dc, QlYieldTermStructure *fwd, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlIborIndex(alloc(new Libor(name, Period(l, (TimeUnit)u), settlDays,+            *arg(ccy), *arg(cal), *arg(dc), qlNullableHandle(fwd)))));+  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}+QlIborIndex *qlDailyTenorLibor(char *name, unsigned settlDays,+    Currency *ccy, Calendar *cal, DayCounter *dc,+    QlYieldTermStructure *fwd, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlIborIndex(alloc(new DailyTenorLibor(name, settlDays,+            *arg(ccy), *arg(cal), *arg(dc), qlNullableHandle(fwd)))));+  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}+QlIborIndex *qlCustomIborIndex(char *name, int l, int u, unsigned settlDays,+    Currency *ccy, Calendar *fixingCal, Calendar *valueCal, Calendar *maturityCal,+    int conv, int eom, DayCounter *dayCount, QlYieldTermStructure *fwd, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlIborIndex(alloc(new CustomIborIndex(name, Period(l, (TimeUnit)u),+      settlDays, *arg(ccy), *arg(fixingCal), *arg(valueCal), *arg(maturityCal),+      (BusinessDayConvention) conv, eom, *arg(dayCount), qlNullableHandle(fwd)))));+  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}+QlOvernightIndex *qlOvernightIndex(char *name, unsigned settlDays, Currency *ccy,+    Calendar *cal, DayCounter *dayCount, QlYieldTermStructure *fwd, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlOvernightIndex(alloc(new OvernightIndex(name, settlDays,+            *arg(ccy), *arg(cal), *arg(dayCount), qlNullableHandle(fwd)))));+  } catch (std::exception& er) {return handleException<QlOvernightIndex *>(e, er);}}++// must match the order of qlEnumObjects.h:IborIndexType (Standard block), then+// IborDailyTenorIndexType (DailyTenor block), then IborONIndexType (Overnight block) --+// see deriveIborConstructor in QuantLib/Internal/Syntax.hs for how the three Haskell-side+// enums are stitched back into a single flat offset into this array.+static const makeIborIdx iborIndices[] = {+    // -- Standard block (IborIndexType) --+    &makeIborIndex<Bbsw>+  , &makeIborIndex<Bibor>+  , &makeIborIndex<Bkbm>+  , &makeIborIndex<Cdor>+  , &makeIborIndex<EURLibor>+  , &makeIborIndex<AUDLibor>+  , &makeIborIndex<CADLibor>+  , &makeIborIndex<CHFLibor>+  , &makeIborIndex<DKKLibor>+  , &makeIborIndex<GBPLibor>+  , &makeIborIndex<JPYLibor>+  , &makeIborIndex<NZDLibor>+  , &makeIborIndex<SEKLibor>+  , &makeIborIndex<USDLibor>+  , &makeIborIndex<Euribor>+  , &makeIborIndex<Euribor365>+  , &makeIborIndex<Jibar>+  , &makeIborIndex<Mosprime>+  , &makeIborIndex<Pribor>+  , &makeIborIndex<Robor>+  , &makeIborIndex<Shibor>+  , &makeIborIndex<THBFIX>+  , &makeIborIndex<TRLibor>+  , &makeIborIndex<Tibor>+  , &makeIborIndex<Wibor>+  , &makeIborIndex<Zibor>+  , &makeIborIndex<Nibor>+    // -- DailyTenor block (IborDailyTenorIndexType) --+  , &makeIborIndexMonths<DailyTenorEURLibor>+  , &makeIborIndexMonths<DailyTenorCHFLibor>+  , &makeIborIndexMonths<DailyTenorGBPLibor>+  , &makeIborIndexMonths<DailyTenorJPYLibor>+  , &makeIborIndexMonths<DailyTenorUSDLibor>+    // -- Overnight block (IborONIndexType) --+  , &makeIborIndexTS<CADLiborON>+  , &makeIborIndexTS<EURLiborON>+  , &makeIborIndexTS<GBPLiborON>+  , &makeIborIndexTS<USDLiborON>+};++QlIborIndex *qlCreateIbor(int index, int l, int u, QlYieldTermStructure *fwd, QlError **e) { QlCallScope callbackScope(e);+  try {+    if (index < 0 || index >= (int)std::size(iborIndices))+      QL_FAIL("Invalid IBOR index index: " << index);+    QlYieldTermStructure ts = qlNullableHandle(fwd);+    auto i = allocShared(iborIndices[index](l, u, ts));+    return ret(new QlIborIndex(i));+  } catch (std::exception& er) {return handleException<QlIborIndex *>(e, er);}}++// should match the order of qlEnumObjects.h:OvernightIborIndexType+static const makeOnIdx onIndices[] = {+    &makeONIndex<Aonia>+  , &makeONIndex<Eonia>+  , &makeONIndex<Estr>+  , &makeONIndex<FedFunds>+  , &makeONIndex<Nzocr>+  , &makeONIndex<Sofr>+  , &makeONIndex<Sonia>+  , &makeONIndex<Cdi>+  , &makeONIndex<Corra>+  , &makeONIndex<Kofr>+  , &makeONIndex<Destr>+  , &makeONIndex<Swestr>+  , &makeONIndex<Shir>+  , &makeONIndex<Tonar>+  , &makeONIndex<Saron>+  , &makeONIndex<Zaronia>+};++QlOvernightIndex *qlCreateONIndex(int index, QlYieldTermStructure *fwd, QlError **e) { QlCallScope callbackScope(e);+  try {+    if (index < 0 || index >= (int)std::size(onIndices))+      QL_FAIL("Invalid O/N index index" << index);+    QlYieldTermStructure ts = qlNullableHandle(fwd);+    auto i = allocShared(onIndices[index](ts));+    return ret(new QlOvernightIndex(i));+  } catch (std::exception& er) {return handleException<QlOvernightIndex *>(e, er);}}++QlInterestRateIndex* qlIborIndexAsInterestRateIndex(QlIborIndex *o) {return ret(new QlInterestRateIndex(*arg(o)));}+void qlFreeOvernightIndex(QlOvernightIndex *o) {del(o);}+QlIborIndex* qlOvernightIndexAsIborIndex(QlOvernightIndex *o) {return ret(new QlIborIndex(*arg(o)));}+int qlIborIndexBusinessDayConvention(QlIborIndex* o) {return (*arg(o))->businessDayConvention();}+int qlIborIndexEndOfMonth(QlIborIndex* o) {return (*arg(o))->endOfMonth();}++QlEquityIndex *qlEquityIndex(char *name, Calendar *fixingCalendar, Currency *ccy, QlYieldTermStructure *interest, QlYieldTermStructure *dividend, QlQuote *spot, QlError **e) { QlCallScope callbackScope(e);+  try {+    return ret(new QlEquityIndex(alloc(new EquityIndex(name, *arg(fixingCalendar), *arg(ccy),+      qlNullableHandle(interest), qlNullableHandle(dividend), qlNullableHandle(spot)))));+  } catch (std::exception& er) {return handleException<QlEquityIndex *>(e, er);}}+void qlFreeEquityIndex(QlEquityIndex *o) {del(o);}+QlIndex* qlEquityIndexAsIndex(QlEquityIndex *o) {return ret(new QlIndex(*arg(o)));}+// must match the order of qlEnumObjects.h:ZeroInflationIndexType+static const makeZeroInflIdx zeroInflationIndices[] = {+    []{return static_cast<ZeroInflationIndex *>(new AUCPI(Quarterly, false));} // AU CPI is published quarterly, unlike the other (monthly) named indices+  , &makeZeroInflationIndex<EUHICP>+  , &makeZeroInflationIndex<EUHICPXT>+  , &makeZeroInflationIndex<FRHICP>+  , &makeZeroInflationIndex<UKHICP>+  , &makeZeroInflationIndex<UKRPI>+  , &makeZeroInflationIndex<USCPI>+  , &makeZeroInflationIndex<ZACPI>+};++QlZeroInflationIndex *qlCreateZeroInflationIndex(int index, QlError **e) { QlCallScope callbackScope(e);+  try {+    if (index < 0 || index >= (int)std::size(zeroInflationIndices))+      QL_FAIL("Invalid zero inflation index index" << index);+    return ret(new QlZeroInflationIndex(alloc(zeroInflationIndices[index]())));+  } catch (std::exception& er) {return handleException<QlZeroInflationIndex *>(e, er);}}++// must match the order of qlEnumObjects.h:YoYInflationIndexType+static const makeYoYInflIdx yoyInflationIndices[] = {+    []{return static_cast<YoYInflationIndex *>(new YYAUCPI(Quarterly, false));}+  , &makeYoYInflationIndex<YYEUHICP>+  , &makeYoYInflationIndex<YYEUHICPXT>+  , &makeYoYInflationIndex<YYFRHICP>+  , &makeYoYInflationIndex<YYUKRPI>+  , &makeYoYInflationIndex<YYUSCPI>+  , &makeYoYInflationIndex<YYZACPI>+};++QlYoYInflationIndex *qlCreateYoYInflationIndex(int index, QlError **e) { QlCallScope callbackScope(e);+  try {+    if (index < 0 || index >= (int)std::size(yoyInflationIndices))+      QL_FAIL("Invalid year-on-year inflation index index" << index);+    return ret(new QlYoYInflationIndex(alloc(yoyInflationIndices[index]())));+  } catch (std::exception& er) {return handleException<QlYoYInflationIndex *>(e, er);}}++// must match the order of qlEnumObjects.h:RegionType+static const makeReg regions[] = {+    &makeRegion<AustraliaRegion>+  , &makeRegion<EURegion>+  , &makeRegion<FranceRegion>+  , &makeRegion<UKRegion>+  , &makeRegion<USRegion>+  , &makeRegion<ZARegion>+};+Region *qlRegion(int r, QlError **e) { QlCallScope callbackScope(e);+  try {+    if (r < 0 || r >= (int)std::size(regions)) QL_FAIL("Invalid region index " << r);+    return alloc(regions[r]());+  } catch (std::exception& er) {return handleException<Region*>(e, er);}}+Region *qlCreateRegion(char* name, char* code, QlError **e) { QlCallScope callbackScope(e);+  try {return allocAs<Region>(new CustomRegion(arg(name), arg(code)));+  } catch (std::exception& er) {return handleException<Region*>(e, er);}}+void qlFreeRegion(Region *o) {del(o);}+const char *qlRegionName(Region *o) {return tracedup(arg(o)->name().c_str());}++QlZeroInflationIndex *qlZeroInflationIndex(char *familyName, Region *region, int revised, int frequency,+    int availLagN, int availLagU, Currency *currency, QlZeroInflationTermStructure *ts, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlZeroInflationIndex(alloc(new ZeroInflationIndex(arg(familyName), *arg(region), revised,+          (Frequency)frequency, Period(availLagN, (TimeUnit)availLagU), *arg(currency), qlNullableHandle(ts)))));+  } catch (std::exception& er) {return handleException<QlZeroInflationIndex *>(e, er);}}+QlYoYInflationIndex *qlYoYInflationIndex(char *familyName, Region *region, int revised, int frequency,+    int availLagN, int availLagU, Currency *currency, QlYoYInflationTermStructure *ts, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationIndex(alloc(new YoYInflationIndex(arg(familyName), *arg(region), revised,+          (Frequency)frequency, Period(availLagN, (TimeUnit)availLagU), *arg(currency), qlNullableHandle(ts)))));+  } catch (std::exception& er) {return handleException<QlYoYInflationIndex *>(e, er);}}+QlYoYInflationIndex *qlYoYInflationIndexFromZero(QlZeroInflationIndex *underlying, QlYoYInflationTermStructure *ts, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYInflationIndex(alloc(new YoYInflationIndex(*arg(underlying), qlNullableHandle(ts)))));+  } catch (std::exception& er) {return handleException<QlYoYInflationIndex *>(e, er);}}++void qlFreeInflationIndex(QlInflationIndex *o) {del(o);}+QlIndex* qlInflationIndexAsIndex(QlInflationIndex *o) {return ret(new QlIndex(*arg(o)));}+void qlFreeZeroInflationIndex(QlZeroInflationIndex *o) {del(o);}+QlInflationIndex* qlZeroInflationIndexAsInflationIndex(QlZeroInflationIndex *o) {return ret(new QlInflationIndex(*arg(o)));}+void qlFreeYoYInflationIndex(QlYoYInflationIndex *o) {del(o);}+QlInflationIndex* qlYoYInflationIndexAsInflationIndex(QlYoYInflationIndex *o) {return ret(new QlInflationIndex(*arg(o)));}++double qlZeroInflationIndexFixing(QlZeroInflationIndex* o, int fixingDate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->fixing(Date(fixingDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+double qlYoYInflationIndexFixing(QlYoYInflationIndex* o, int fixingDate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->fixing(Date(fixingDate));+  } catch (std::exception& er) {return handleException<double>(e, er);}}+// Both reach inflationPeriod(), which QL_FAILs on a frequency outside Annual..Monthly -- and the+// index constructors above take an unconstrained one -- so these need an error channel despite+// looking like plain getters.+int qlZeroInflationIndexNeedsForecast(QlZeroInflationIndex* o, int fixingDate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->needsForecast(Date(fixingDate));+  } catch (std::exception& er) {return handleException<int>(e, er);}}+int qlYoYInflationIndexNeedsForecast(QlYoYInflationIndex* o, int fixingDate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->needsForecast(Date(fixingDate));+  } catch (std::exception& er) {return handleException<int>(e, er);}}++/* YoYOptionletVolatilitySurface */++QlYoYOptionletVolatilitySurface *qlConstantYoYOptionletVolatility(QlQuote *v, unsigned settlementDays,+    Calendar *cal, int bdc, DayCounter *dc, int observationLagLen, int observationLagUnit, int frequency,+    int indexIsInterpolated, double minStrike, double maxStrike, int volType, double displacement, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlYoYOptionletVolatilitySurface(Handle<YoYOptionletVolatilitySurface>(+      shared_ptr<YoYOptionletVolatilitySurface>(alloc(new ConstantYoYOptionletVolatility(*arg(v), settlementDays, *arg(cal), (BusinessDayConvention)bdc,+        *arg(dc), Period(observationLagLen, (TimeUnit)observationLagUnit), (Frequency)frequency,+        (bool)indexIsInterpolated, minStrike, maxStrike, (VolatilityType)volType, displacement))))));+  } catch (std::exception& er) {return handleException<QlYoYOptionletVolatilitySurface*>(e, er);}}++void qlFreeYoYOptionletVolatilitySurface(QlYoYOptionletVolatilitySurface *p) {del(p);}++// Deliberate snapshot detach, same reasoning as qlOptionletVolatilityStructureAsVolatilityTermStructure.+QlVolatilityTermStructure *qlYoYOptionletVolatilitySurfaceAsVolatilityTermStructure(QlYoYOptionletVolatilitySurface *o) {+  return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}++// obsLagUnit < 0 is the "use my own observationLag" sentinel, matching the C++ default+// Period(-1, Days) -- same convention as qlOptionletStripper1's optionletFrequency.+double qlYoYOptionletVolatilitySurfaceVolatility(QlYoYOptionletVolatilitySurface *o, int maturityDate,+    double strike, int obsLagLen, int obsLagUnit, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return handleRef(arg(o)).volatility(Date(maturityDate), strike,+      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++double qlYoYOptionletVolatilitySurfaceTotalVariance(QlYoYOptionletVolatilitySurface *o, int exerciseDate,+    double strike, int obsLagLen, int obsLagUnit, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return handleRef(arg(o)).totalVariance(Date(exerciseDate), strike,+      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++/* YoY inflation cap/floor pricing engines */++QlPricingEngine *qlYoYInflationBlackCapFloorEngine(QlYoYInflationIndex *index, QlYoYOptionletVolatilitySurface *vol,+    QlYieldTermStructure *nominalTs, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new YoYInflationBlackCapFloorEngine(*arg(index), *arg(vol), *arg(nominalTs)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}++QlPricingEngine *qlYoYInflationUnitDisplacedBlackCapFloorEngine(QlYoYInflationIndex *index,+    QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new YoYInflationUnitDisplacedBlackCapFloorEngine(*arg(index), *arg(vol), *arg(nominalTs)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}++QlPricingEngine *qlYoYInflationBachelierCapFloorEngine(QlYoYInflationIndex *index, QlYoYOptionletVolatilitySurface *vol,+    QlYieldTermStructure *nominalTs, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new YoYInflationBachelierCapFloorEngine(*arg(index), *arg(vol), *arg(nominalTs)))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}++/* CPICapFloorTermPriceSurface */++void qlFreeCPICapFloorTermPriceSurface(QlCPICapFloorTermPriceSurface *o) {del(o);}+QlTermStructure *qlCPICapFloorTermPriceSurfaceAsTermStructure(QlCPICapFloorTermPriceSurface *o) {+  return ret(new QlTermStructure(*arg(o)));}++QlCPICapFloorTermPriceSurface *qlCPICapFloorTermPriceSurface(double nominal, double baseRate,+    int observationLagLen, int observationLagUnit, Calendar *cal, int bdc, DayCounter *dc,+    QlZeroInflationIndex *zii, int interpolationType, QlYieldTermStructure *yts,+    unsigned cStrikesLen, double *cStrikes, unsigned fStrikesLen, double *fStrikes,+    unsigned cfMaturitiesLen, int *cfMaturitiesNum, unsigned, int *cfMaturitiesUnit,+    unsigned cPriceRows, unsigned cPriceCols, double *cPriceData,+    unsigned fPriceRows, unsigned fPriceCols, double *fPriceData,+    int interpolator2D, QlError **e) { QlCallScope callbackScope(e);+  try {+    const Period observationLag(observationLagLen, (TimeUnit)observationLagUnit);+    const std::vector<Rate> cStrikesVec(cStrikes, cStrikes+cStrikesLen);+    const std::vector<Rate> fStrikesVec(fStrikes, fStrikes+fStrikesLen);+    const std::vector<Period> cfMaturitiesVec = qlPeriodVector(cfMaturitiesNum, cfMaturitiesUnit, cfMaturitiesLen);+    const Matrix cPriceMat = qlMatrix(cPriceData, cPriceRows, cPriceCols);+    const Matrix fPriceMat = qlMatrix(fPriceData, fPriceRows, fPriceCols);+    auto s = allocShared(qlCPICapFloorTermPriceSurfaceAux(nominal, baseRate, observationLag, *arg(cal),+        (BusinessDayConvention)bdc, *arg(dc), *arg(zii), (CPI::InterpolationType)interpolationType, *arg(yts),+        cStrikesVec, fStrikesVec, cfMaturitiesVec, cPriceMat, fPriceMat, interpolator2D));+    return ret(new QlCPICapFloorTermPriceSurface(s));+  } catch (std::exception& er) {return handleException<QlCPICapFloorTermPriceSurface*>(e, er);}}++/* InterpolatingCPICapFloorEngine -- the only CPICapFloor engine in QL 1.43 */++QlPricingEngine *qlInterpolatingCPICapFloorEngine(QlCPICapFloorTermPriceSurface *surface, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlPricingEngine(alloc(new InterpolatingCPICapFloorEngine(Handle<CPICapFloorTermPriceSurface>(*arg(surface))))));+  } catch (std::exception& er) {return handleException<QlPricingEngine*>(e, er);}}++/* CPIVolatilitySurface -- no consumer (engine/pricer) in QL 1.43, see qlaux.h/Internal.Type's own+   note; this type stands alone as a queryable surface. */++QlCPIVolatilitySurface *qlConstantCPIVolatility(QlQuote *v, unsigned settlementDays, Calendar *cal,+    int bdc, DayCounter *dc, int observationLagLen, int observationLagUnit, int frequency,+    int indexIsInterpolated, QlError **e) { QlCallScope callbackScope(e);+  try {return ret(new QlCPIVolatilitySurface(Handle<CPIVolatilitySurface>(+      shared_ptr<CPIVolatilitySurface>(alloc(new ConstantCPIVolatility(*arg(v), settlementDays, *arg(cal), (BusinessDayConvention)bdc,+        *arg(dc), Period(observationLagLen, (TimeUnit)observationLagUnit), (Frequency)frequency,+        (bool)indexIsInterpolated))))));+  } catch (std::exception& er) {return handleException<QlCPIVolatilitySurface*>(e, er);}}++void qlFreeCPIVolatilitySurface(QlCPIVolatilitySurface *p) {del(p);}++// Deliberate snapshot detach, same reasoning as qlYoYOptionletVolatilitySurfaceAsVolatilityTermStructure.+QlVolatilityTermStructure *qlCPIVolatilitySurfaceAsVolatilityTermStructure(QlCPIVolatilitySurface *o) {+  return ret(new QlVolatilityTermStructure(handlePtr(arg(o))));}++double qlCPIVolatilitySurfaceVolatility(QlCPIVolatilitySurface *o, int maturityDate,+    double strike, int obsLagLen, int obsLagUnit, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return handleRef(arg(o)).volatility(Date(maturityDate), strike,+      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++double qlCPIVolatilitySurfaceTotalVariance(QlCPIVolatilitySurface *o, int exerciseDate,+    double strike, int obsLagLen, int obsLagUnit, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return handleRef(arg(o)).totalVariance(Date(exerciseDate), strike,+      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++/* YoYCapFloorTermPriceSurface */++void qlFreeYoYCapFloorTermPriceSurface(QlYoYCapFloorTermPriceSurface *o) {del(o);}+QlTermStructure *qlYoYCapFloorTermPriceSurfaceAsTermStructure(QlYoYCapFloorTermPriceSurface *o) {+  return ret(new QlTermStructure(*arg(o)));}++QlYoYCapFloorTermPriceSurface *qlYoYCapFloorTermPriceSurface(unsigned fixingDays,+    int yyLagLen, int yyLagUnit, QlYoYInflationIndex *yii, int interpolationType,+    QlYieldTermStructure *nominal, DayCounter *dc, Calendar *cal, int bdc,+    unsigned cStrikesLen, double *cStrikes, unsigned fStrikesLen, double *fStrikes,+    unsigned cfMaturitiesLen, int *cfMaturitiesNum, unsigned, int *cfMaturitiesUnit,+    unsigned cPriceRows, unsigned cPriceCols, double *cPriceData,+    unsigned fPriceRows, unsigned fPriceCols, double *fPriceData,+    int interpolator2D, int interpolator1D, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    const Period yyLag(yyLagLen, (TimeUnit)yyLagUnit);+    const shared_ptr<YoYInflationIndex>& yiiRef = *arg(yii);+    const Handle<YieldTermStructure>& nominalRef = *arg(nominal);+    const std::vector<Rate> cStrikesVec(cStrikes, cStrikes+cStrikesLen);+    const std::vector<Rate> fStrikesVec(fStrikes, fStrikes+fStrikesLen);+    const std::vector<Period> cfMaturitiesVec = qlPeriodVector(cfMaturitiesNum, cfMaturitiesUnit, cfMaturitiesLen);+    const Matrix cPriceMat = qlMatrix(cPriceData, cPriceRows, cPriceCols);+    const Matrix fPriceMat = qlMatrix(fPriceData, fPriceRows, fPriceCols);+    auto s = allocShared(qlYoYCapFloorTermPriceSurfaceAux(fixingDays, yyLag, yiiRef,+        (CPI::InterpolationType)interpolationType, nominalRef, *arg(dc), *arg(cal), (BusinessDayConvention)bdc,+        cStrikesVec, fStrikesVec, cfMaturitiesVec, cPriceMat, fPriceMat,+        interpolator2D, interpolator1D, approximator, approximatorArg));+    return ret(new QlYoYCapFloorTermPriceSurface(s));+  } catch (std::exception& er) {return handleException<QlYoYCapFloorTermPriceSurface*>(e, er);}}++int qlYoYCapFloorTermPriceSurfaceBaseDate(QlYoYCapFloorTermPriceSurface *o, QlError **e) { QlCallScope callbackScope(e);+  try {return qlNullableDate((*arg(o))->baseDate());+  } catch (std::exception& er) {return handleException<int>(e, er);}}++void qlYoYCapFloorTermPriceSurfaceAtmYoYSwapDateRates(QlYoYCapFloorTermPriceSurface *o,+    unsigned *dl, int **date, unsigned *rl, double **rate, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<int> dateResult(dl, date);+  OutArrayResult<double> rateResult(rl, rate);+  try {+    const auto &dr = (*arg(o))->atmYoYSwapDateRates();+    int *dates = dateResult.allocate((unsigned)dr.first.size());+    double *rates = rateResult.allocate((unsigned)dr.second.size());+    for (unsigned i = 0; i < dr.first.size(); ++i) dates[i] = dr.first[i].serialNumber();+    for (unsigned i = 0; i < dr.second.size(); ++i) rates[i] = dr.second[i];+    dateResult.commit(); rateResult.commit();+  } catch (const std::exception& er) {qlSetError(e, er.what());}+}++void qlYoYCapFloorTermPriceSurfaceAtmYoYSwapTimeRates(QlYoYCapFloorTermPriceSurface *o,+    unsigned *tl, double **time, unsigned *rl, double **rate, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> timeResult(tl, time), rateResult(rl, rate);+  try {+    const auto &tr = (*arg(o))->atmYoYSwapTimeRates();+    double *times = timeResult.allocate((unsigned)tr.first.size());+    double *rates = rateResult.allocate((unsigned)tr.second.size());+    for (unsigned i = 0; i < tr.first.size(); ++i) times[i] = tr.first[i];+    for (unsigned i = 0; i < tr.second.size(); ++i) rates[i] = tr.second[i];+    timeResult.commit(); rateResult.commit();+  } catch (const std::exception& er) {qlSetError(e, er.what());}+}++double qlYoYCapFloorTermPriceSurfaceAtmYoYSwapRate(QlYoYCapFloorTermPriceSurface *o, int d,+    int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmYoYSwapRate(Date(d), (bool)extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++double qlYoYCapFloorTermPriceSurfaceAtmYoYRate(QlYoYCapFloorTermPriceSurface *o, int d,+    int obsLagLen, int obsLagUnit, int extrapolate, QlError **e) { QlCallScope callbackScope(e);+  try {return (*arg(o))->atmYoYRate(Date(d),+      obsLagUnit < 0 ? Period(-1, Days) : Period(obsLagLen, (TimeUnit)obsLagUnit), (bool)extrapolate);+  } catch (std::exception& er) {return handleException<double>(e, er);}}++void qlYoYCapFloorTermPriceSurfaceStrikes(QlYoYCapFloorTermPriceSurface *o, unsigned *sl, double **strike, QlError **e) { QlCallScope callbackScope(e);+  OutArrayResult<double> result(sl, strike);+  try {+    const std::vector<Rate> &ks = (*arg(o))->strikes();+    double *out = result.allocate((unsigned)ks.size());+    for (unsigned i = 0; i < ks.size(); ++i) out[i] = ks[i];+    result.commit();+  } catch (const std::exception& er) {qlSetError(e, er.what());}+}++/* KInterpolatedYoYOptionletVolatilitySurface */++QlYoYOptionletVolatilitySurface *qlKInterpolatedYoYOptionletVolatilitySurfaceBlack(+    unsigned settlementDays, Calendar *cal, int bdc, DayCounter *dc,+    QlYoYCapFloorTermPriceSurface *capFloorPrices, QlYoYInflationIndex *index,+    QlYieldTermStructure *nominalTs, double slope,+    int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    shared_ptr<YoYInflationCapFloorEngine> engine(new YoYInflationBlackCapFloorEngine(+        *arg(index), qlNullYoYOptionletVolatilitySurfaceHandle(), *arg(nominalTs)));+    auto s = allocShared(qlKInterpolatedYoYOptionletVolatilitySurfaceAux(+        settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(dc), *arg(capFloorPrices), engine, slope,+        interpolator, approximator, approximatorArg));+    return ret(new QlYoYOptionletVolatilitySurface(Handle<YoYOptionletVolatilitySurface>(s)));+  } catch (std::exception& er) {return handleException<QlYoYOptionletVolatilitySurface*>(e, er);}}++QlYoYOptionletVolatilitySurface *qlKInterpolatedYoYOptionletVolatilitySurfaceUnitDisplacedBlack(+    unsigned settlementDays, Calendar *cal, int bdc, DayCounter *dc,+    QlYoYCapFloorTermPriceSurface *capFloorPrices, QlYoYInflationIndex *index,+    QlYieldTermStructure *nominalTs, double slope,+    int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    shared_ptr<YoYInflationCapFloorEngine> engine(new YoYInflationUnitDisplacedBlackCapFloorEngine(+        *arg(index), qlNullYoYOptionletVolatilitySurfaceHandle(), *arg(nominalTs)));+    auto s = allocShared(qlKInterpolatedYoYOptionletVolatilitySurfaceAux(+        settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(dc), *arg(capFloorPrices), engine, slope,+        interpolator, approximator, approximatorArg));+    return ret(new QlYoYOptionletVolatilitySurface(Handle<YoYOptionletVolatilitySurface>(s)));+  } catch (std::exception& er) {return handleException<QlYoYOptionletVolatilitySurface*>(e, er);}}++QlYoYOptionletVolatilitySurface *qlKInterpolatedYoYOptionletVolatilitySurfaceBachelier(+    unsigned settlementDays, Calendar *cal, int bdc, DayCounter *dc,+    QlYoYCapFloorTermPriceSurface *capFloorPrices, QlYoYInflationIndex *index,+    QlYieldTermStructure *nominalTs, double slope,+    int interpolator, int approximator, int approximatorArg, QlError **e) { QlCallScope callbackScope(e);+  try {+    shared_ptr<YoYInflationCapFloorEngine> engine(new YoYInflationBachelierCapFloorEngine(+        *arg(index), qlNullYoYOptionletVolatilitySurfaceHandle(), *arg(nominalTs)));+    auto s = allocShared(qlKInterpolatedYoYOptionletVolatilitySurfaceAux(+        settlementDays, *arg(cal), (BusinessDayConvention)bdc, *arg(dc), *arg(capFloorPrices), engine, slope,+        interpolator, approximator, approximatorArg));+    return ret(new QlYoYOptionletVolatilitySurface(Handle<YoYOptionletVolatilitySurface>(s)));+  } catch (std::exception& er) {return handleException<QlYoYOptionletVolatilitySurface*>(e, er);}}+QlYieldTermStructure* qlImpliedTermStructureMoving(QlYieldTermStructure* curve, unsigned days, Calendar* calendar, QlError **e) { QlCallScope scope(e);+#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlYieldTermStructure(allocShared(new ImpliedTermStructure(*curve, days, *calendar))));}+  catch (std::exception& er) {return handleException<QlYieldTermStructure*>(e, er);}+#else+  (void)curve; (void)days; (void)calendar;+  qlUnsupportedVersion(e, "impliedTermStructureMoving", "1.44"); return nullptr;+#endif+}+QlRateHelper* qlOvernightOvernightBasisSwapRateHelper(QlQuote* basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar* calendar, int convention, int endOfMonth, QlOvernightIndex* baseIndex, QlOvernightIndex* otherIndex, QlYieldTermStructure* discount, int bootstrapBaseCurve, int paymentLag, int paymentFrequency, int baseAveragingMethod, int otherAveragingMethod, int telescopicValueDates, int rule, QlError **e) { QlCallScope scope(e);+#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlRateHelper(allocShared(new OvernightOvernightBasisSwapRateHelper(*basis, Period(tenorLen, (TimeUnit)tenorUnit), settlementDays, *calendar, (BusinessDayConvention)convention, endOfMonth, *baseIndex, *otherIndex, qlNullableHandle(discount), bootstrapBaseCurve, paymentLag, (Frequency)paymentFrequency, (RateAveraging::Type)baseAveragingMethod, (RateAveraging::Type)otherAveragingMethod, telescopicValueDates, (DateGeneration::Rule)rule))));}+  catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}+#else+  (void)basis; (void)tenorLen; (void)tenorUnit; (void)settlementDays; (void)calendar; (void)convention; (void)endOfMonth; (void)baseIndex; (void)otherIndex; (void)discount; (void)bootstrapBaseCurve; (void)paymentLag; (void)paymentFrequency; (void)baseAveragingMethod; (void)otherAveragingMethod; (void)telescopicValueDates; (void)rule;+  qlUnsupportedVersion(e, "overnightOvernightBasisSwapRateHelper", "1.44"); return nullptr;+#endif+}+QlRateHelper* qlOvernightIndexedFundingRateHelperRaw(int dated, int start, int end, int tenorUnit, QlQuote* margin, Calendar* calendar, int convention, int endOfMonth, QlOvernightIndex* index, int paymentTenorLen, int paymentTenorUnit, DayCounter* paymentDayCounter, int paymentLag, int telescopicValueDates, int rule, int pillar, int customPillarDate, QlError **e) { QlCallScope scope(e);+#if QL_HEX_VERSION >= 0x01440000+  try {return ret(new QlRateHelper(allocShared(dated ? new OvernightIndexedFundingRateHelper(*margin, Date(start), Date(end), *calendar, (BusinessDayConvention)convention, endOfMonth, *index, Period(paymentTenorLen, (TimeUnit)paymentTenorUnit), *paymentDayCounter, paymentLag, telescopicValueDates, (DateGeneration::Rule)rule, (Pillar::Choice)pillar, qlNullableDate(customPillarDate)) : new OvernightIndexedFundingRateHelper(*margin, Period(end, (TimeUnit)tenorUnit), start, *calendar, (BusinessDayConvention)convention, endOfMonth, *index, Period(paymentTenorLen, (TimeUnit)paymentTenorUnit), *paymentDayCounter, paymentLag, telescopicValueDates, (DateGeneration::Rule)rule, (Pillar::Choice)pillar, qlNullableDate(customPillarDate)))));}+  catch (std::exception& er) {return handleException<QlRateHelper*>(e, er);}+#else+  (void)dated; (void)start; (void)end; (void)tenorUnit; (void)margin; (void)calendar; (void)convention; (void)endOfMonth; (void)index; (void)paymentTenorLen; (void)paymentTenorUnit; (void)paymentDayCounter; (void)paymentLag; (void)telescopicValueDates; (void)rule; (void)pillar; (void)customPillarDate;+  qlUnsupportedVersion(e, "overnightIndexedFundingRateHelper", "1.44"); return nullptr;+#endif+} } /* vim: set ft=cpp ff=unix ts=8 sts=2 sw=2 et: */
cbits/qlTermStructure.h view
@@ -1,19 +1,20 @@ #ifdef __cplusplus extern "C" { #endif-  QlOptionletVolatilityStructure *qlConstantOptionletVol1(unsigned days, Calendar *cal, int conv, QlQuote *q, DayCounter *dc, int type, double displacement, char **e);-  QlOptionletVolatilityStructure *qlCapletVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned volsLen, double* vols, DayCounter* dc, int type, double displacement, char **e);+  QlOptionletVolatilityStructure *qlConstantOptionletVol1(unsigned days, Calendar *cal, int conv, QlQuote *q, DayCounter *dc, int type, double displacement, QlError **e);+  QlOptionletVolatilityStructure *qlCapletVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned volsLen, double* vols, DayCounter* dc, int type, double displacement, QlError **e);   void qlFreeOptionletVolatilityStructure(QlOptionletVolatilityStructure *p);   QlVolatilityTermStructure* qlOptionletVolatilityStructureAsVolatilityTermStructure(QlOptionletVolatilityStructure *o);-  QlRelinkableOptionletVolatilityStructure* qlRelinkableOptionletVolatilityStructure(QlOptionletVolatilityStructure *initial, char **e);+  QlRelinkableOptionletVolatilityStructure* qlRelinkableOptionletVolatilityStructure(QlOptionletVolatilityStructure *initial, QlError **e);   void qlFreeRelinkableOptionletVolatilityStructure(QlRelinkableOptionletVolatilityStructure *o);-  void qlRelinkableOptionletVolatilityStructureLinkTo(QlRelinkableOptionletVolatilityStructure *o, QlOptionletVolatilityStructure *c, char **e);+  void qlRelinkableOptionletVolatilityStructureLinkTo(QlRelinkableOptionletVolatilityStructure *o, QlOptionletVolatilityStructure *c, QlError **e);   QlOptionletVolatilityStructure* qlRelinkableOptionletVolatilityStructureAsOptionletVolatilityStructure(QlRelinkableOptionletVolatilityStructure *o);-  QlOptionletVolatilityStructure* qlOptionletStripper1(QlCapFloorTermVolSurface* surface, QlIborIndex* index, double switchStrikes, double accuracy, unsigned maxIter, QlYieldTermStructure* discount, int type, double displacement, int dontThrow, int optionletFrequencyLen, int optionletFrequencyUnit, char **e);+  QlOptionletVolatilityStructure* qlOptionletStripper1(QlCapFloorTermVolSurface* surface, QlIborIndex* index, double switchStrikes, double accuracy, unsigned maxIter, QlYieldTermStructure* discount, int type, double displacement, int dontThrow, int optionletFrequencyLen, int optionletFrequencyUnit, unsigned paymentLag, QlError **e);   void qlFreeVolatilityTermStructure(QlVolatilityTermStructure *o);   QlTermStructure* qlVolatilityTermStructureAsTermStructure(QlVolatilityTermStructure *o);-  double qlVolatilityTermStructureMinStrike(QlVolatilityTermStructure* o, char **e);-  double qlVolatilityTermStructureMaxStrike(QlVolatilityTermStructure* o, char **e);+  double qlVolatilityTermStructureMinStrike(QlVolatilityTermStructure* o, QlError **e);+  int qlVolatilityTermStructureOptionDateFromTenor(QlVolatilityTermStructure* o, int n, int u, QlError **e);+  double qlVolatilityTermStructureMaxStrike(QlVolatilityTermStructure* o, QlError **e);   void qlFreeBlackAtmVolCurve(QlBlackAtmVolCurve *o);   QlVolatilityTermStructure* qlBlackAtmVolCurveAsVolatilityTermStructure(QlBlackAtmVolCurve *o);   void qlFreeBlackVolSurface(QlBlackVolSurface *o);@@ -22,185 +23,203 @@   QlBlackAtmVolCurve* qlAbcdAtmVolCurveAsBlackAtmVolCurve(QlAbcdAtmVolCurve *o);   void qlFreeSabrVolSurface(QlSabrVolSurface *o);   QlBlackVolSurface* qlSabrVolSurfaceAsBlackVolSurface(QlSabrVolSurface *o);-  double qlBlackAtmVolCurveAtmVolForPeriod(QlBlackAtmVolCurve* o, int n, int u, int extrapolate, char **e);-  double qlBlackAtmVolCurveAtmVolForDate(QlBlackAtmVolCurve* o, int date, int extrapolate, char **e);-  double qlBlackAtmVolCurveAtmVolForTime(QlBlackAtmVolCurve* o, double t, int extrapolate, char **e);-  double qlBlackAtmVolCurveAtmVarianceForPeriod(QlBlackAtmVolCurve* o, int n, int u, int extrapolate, char **e);-  double qlBlackAtmVolCurveAtmVarianceForDate(QlBlackAtmVolCurve* o, int date, int extrapolate, char **e);-  double qlBlackAtmVolCurveAtmVarianceForTime(QlBlackAtmVolCurve* o, double t, int extrapolate, char **e);-  QlSmileSection* qlBlackVolSurfaceSmileSectionForPeriod(QlBlackVolSurface* o, int n, int u, int extrapolate, char **e);-  QlSmileSection* qlBlackVolSurfaceSmileSectionForDate(QlBlackVolSurface* o, int date, int extrapolate, char **e);-  QlSmileSection* qlBlackVolSurfaceSmileSectionForTime(QlBlackVolSurface* o, double t, int extrapolate, char **e);-  QlAbcdAtmVolCurve* qlAbcdAtmVolCurve(unsigned settlementDays, Calendar* calendar, unsigned, int *n, unsigned, int *u, unsigned volsLen, QlQuote** vols, unsigned flagsLen, int *flags, int bdc, DayCounter* dc, char **e);-  double qlAbcdAtmVolCurveA(QlAbcdAtmVolCurve* o, char **e);-  double qlAbcdAtmVolCurveB(QlAbcdAtmVolCurve* o, char **e);-  double qlAbcdAtmVolCurveC(QlAbcdAtmVolCurve* o, char **e);-  double qlAbcdAtmVolCurveD(QlAbcdAtmVolCurve* o, char **e);-  double qlAbcdAtmVolCurveRmsError(QlAbcdAtmVolCurve* o, char **e);-  double qlAbcdAtmVolCurveMaxError(QlAbcdAtmVolCurve* o, char **e);-  int qlAbcdAtmVolCurveEndCriteria(QlAbcdAtmVolCurve* o, char **e);-  double qlAbcdAtmVolCurveKAtTime(QlAbcdAtmVolCurve* o, double t, char **e);-  void qlAbcdAtmVolCurveK(QlAbcdAtmVolCurve* o, unsigned *count, double **ks, char **e);-  void qlAbcdAtmVolCurveOptionTenors(QlAbcdAtmVolCurve* o, unsigned *count, int **n, unsigned *count2, int **u, char **e);-  void qlAbcdAtmVolCurveOptionTenorsInInterpolation(QlAbcdAtmVolCurve* o, unsigned *count, int **n, unsigned *count2, int **u, char **e);-  void qlAbcdAtmVolCurveOptionDates(QlAbcdAtmVolCurve* o, unsigned *count, int **days, char **e);-  void qlAbcdAtmVolCurveOptionTimes(QlAbcdAtmVolCurve* o, unsigned *count, double **times, char **e);-  QlSabrVolSurface* qlSabrVolSurface(QlInterestRateIndex* index, QlBlackAtmVolCurve* atmCurve, unsigned tenorsLen, int *n, unsigned, int *u, unsigned spreadsLen, double *atmRateSpreads, unsigned volRows, unsigned volCols, QlQuote** volSpreads, char **e);-  QlBlackAtmVolCurve* qlSabrVolSurfaceAtmCurve(QlSabrVolSurface* o, char **e);-  void qlSabrVolSurfaceVolatilitySpreadsForPeriod(QlSabrVolSurface* o, int n, int u, unsigned *count, double **vols, char **e);-  void qlSabrVolSurfaceVolatilitySpreadsForDate(QlSabrVolSurface* o, int date, unsigned *count, double **vols, char **e);-  QlInterestRateIndex* qlSabrVolSurfaceIndex(QlSabrVolSurface* o, char **e);-  int qlSabrVolSurfaceOptionDateFromTenor(QlSabrVolSurface* o, int n, int u, char **e);-  QlOptionletStripper2* qlOptionletStripper2(QlCapFloorTermVolSurface* surface, QlIborIndex* index, double switchStrikes, double accuracy, unsigned maxIter, QlYieldTermStructure* discount, int type, double displacement, int dontThrow, int optionletFrequencyLen, int optionletFrequencyUnit, QlCapFloorTermVolCurve* atmCurve, char **e);+  double qlBlackAtmVolCurveAtmVolForPeriod(QlBlackAtmVolCurve* o, int n, int u, int extrapolate, QlError **e);+  double qlBlackAtmVolCurveAtmVolForDate(QlBlackAtmVolCurve* o, int date, int extrapolate, QlError **e);+  double qlBlackAtmVolCurveAtmVolForTime(QlBlackAtmVolCurve* o, double t, int extrapolate, QlError **e);+  double qlBlackAtmVolCurveAtmVarianceForPeriod(QlBlackAtmVolCurve* o, int n, int u, int extrapolate, QlError **e);+  double qlBlackAtmVolCurveAtmVarianceForDate(QlBlackAtmVolCurve* o, int date, int extrapolate, QlError **e);+  double qlBlackAtmVolCurveAtmVarianceForTime(QlBlackAtmVolCurve* o, double t, int extrapolate, QlError **e);+  QlSmileSection* qlBlackVolSurfaceSmileSectionForPeriod(QlBlackVolSurface* o, int n, int u, int extrapolate, QlError **e);+  QlSmileSection* qlBlackVolSurfaceSmileSectionForDate(QlBlackVolSurface* o, int date, int extrapolate, QlError **e);+  QlSmileSection* qlBlackVolSurfaceSmileSectionForTime(QlBlackVolSurface* o, double t, int extrapolate, QlError **e);+  QlAbcdAtmVolCurve* qlAbcdAtmVolCurve(unsigned settlementDays, Calendar* calendar, unsigned, int *n, unsigned, int *u, unsigned volsLen, QlQuote** vols, unsigned flagsLen, int *flags, int bdc, DayCounter* dc, QlError **e);+  double qlAbcdAtmVolCurveA(QlAbcdAtmVolCurve* o, QlError **e);+  double qlAbcdAtmVolCurveB(QlAbcdAtmVolCurve* o, QlError **e);+  double qlAbcdAtmVolCurveC(QlAbcdAtmVolCurve* o, QlError **e);+  double qlAbcdAtmVolCurveD(QlAbcdAtmVolCurve* o, QlError **e);+  double qlAbcdAtmVolCurveRmsError(QlAbcdAtmVolCurve* o, QlError **e);+  double qlAbcdAtmVolCurveMaxError(QlAbcdAtmVolCurve* o, QlError **e);+  int qlAbcdAtmVolCurveEndCriteria(QlAbcdAtmVolCurve* o, QlError **e);+  double qlAbcdAtmVolCurveKAtTime(QlAbcdAtmVolCurve* o, double t, QlError **e);+  void qlAbcdAtmVolCurveK(QlAbcdAtmVolCurve* o, unsigned *count, double **ks, QlError **e);+  void qlAbcdAtmVolCurveOptionTenors(QlAbcdAtmVolCurve* o, unsigned *count, int **n, unsigned *count2, int **u, QlError **e);+  void qlAbcdAtmVolCurveOptionTenorsInInterpolation(QlAbcdAtmVolCurve* o, unsigned *count, int **n, unsigned *count2, int **u, QlError **e);+  void qlAbcdAtmVolCurveOptionDates(QlAbcdAtmVolCurve* o, unsigned *count, int **days, QlError **e);+  void qlAbcdAtmVolCurveOptionTimes(QlAbcdAtmVolCurve* o, unsigned *count, double **times, QlError **e);+  QlSabrVolSurface* qlSabrVolSurface(QlInterestRateIndex* index, QlBlackAtmVolCurve* atmCurve, unsigned tenorsLen, int *n, unsigned, int *u, unsigned spreadsLen, double *atmRateSpreads, unsigned volRows, unsigned volCols, QlQuote** volSpreads, QlError **e);+  QlBlackAtmVolCurve* qlSabrVolSurfaceAtmCurve(QlSabrVolSurface* o, QlError **e);+  void qlSabrVolSurfaceVolatilitySpreadsForPeriod(QlSabrVolSurface* o, int n, int u, unsigned *count, double **vols, QlError **e);+  void qlSabrVolSurfaceVolatilitySpreadsForDate(QlSabrVolSurface* o, int date, unsigned *count, double **vols, QlError **e);+  QlInterestRateIndex* qlSabrVolSurfaceIndex(QlSabrVolSurface* o, QlError **e);+  int qlSabrVolSurfaceOptionDateFromTenor(QlSabrVolSurface* o, int n, int u, QlError **e);+  QlOptionletStripper2* qlOptionletStripper2(QlCapFloorTermVolSurface* surface, QlIborIndex* index, double switchStrikes, double accuracy, unsigned maxIter, QlYieldTermStructure* discount, int type, double displacement, int dontThrow, int optionletFrequencyLen, int optionletFrequencyUnit, QlCapFloorTermVolCurve* atmCurve, unsigned paymentLag, QlError **e);   void qlFreeOptionletStripper2(QlOptionletStripper2 *o);-  QlOptionletVolatilityStructure* qlOptionletStripper2AsOptionletVolatilityStructure(QlOptionletStripper2 *o, char **e);-  void qlOptionletStripper2AtmCapFloorStrikes(QlOptionletStripper2* o, unsigned *count, double **vs, char **e);-  void qlOptionletStripper2AtmCapFloorPrices(QlOptionletStripper2* o, unsigned *count, double **vs, char **e);-  void qlOptionletStripper2SpreadsVol(QlOptionletStripper2* o, unsigned *count, double **vs, char **e);+  QlOptionletVolatilityStructure* qlOptionletStripper2AsOptionletVolatilityStructure(QlOptionletStripper2 *o, QlError **e);+  void qlOptionletStripper2AtmCapFloorStrikes(QlOptionletStripper2* o, unsigned *count, double **vs, QlError **e);+  void qlOptionletStripper2AtmCapFloorPrices(QlOptionletStripper2* o, unsigned *count, double **vs, QlError **e);+  void qlOptionletStripper2SpreadsVol(QlOptionletStripper2* o, unsigned *count, double **vs, QlError **e);   void qlFreeBlackVolTermStructure(QlBlackVolTermStructure *o);   QlVolatilityTermStructure* qlBlackVolTermStructureAsVolatilityTermStructure(QlBlackVolTermStructure *o);-  double qlBlackVolTermStructureBlackVol(QlBlackVolTermStructure* o, int d, double strike, int extrapolate, char **e);-  double qlBlackVolTermStructureBlackVol1(QlBlackVolTermStructure* o, double t, double strike, int extrapolate, char **e);-  double qlBlackVolTermStructureBlackVariance(QlBlackVolTermStructure* o, int d, double strike, int extrapolate, char **e);-  double qlBlackVolTermStructureBlackVariance1(QlBlackVolTermStructure* o, double t, double strike, int extrapolate, char **e);-  double qlBlackVolTermStructureBlackForwardVol(QlBlackVolTermStructure* o, int d1, int d2, double strike, int extrapolate, char **e);-  double qlBlackVolTermStructureBlackForwardVol1(QlBlackVolTermStructure* o, double t1, double t2, double strike, int extrapolate, char **e);-  double qlBlackVolTermStructureBlackForwardVariance(QlBlackVolTermStructure* o, int d1, int d2, double strike, int extrapolate, char **e);-  double qlBlackVolTermStructureBlackForwardVariance1(QlBlackVolTermStructure* o, double t1, double t2, double strike, int extrapolate, char **e);-  QlRelinkableBlackVolTermStructure* qlRelinkableBlackVolTermStructure(QlBlackVolTermStructure *initial, char **e);+  double qlBlackVolTermStructureBlackVol(QlBlackVolTermStructure* o, int d, double strike, int extrapolate, QlError **e);+  double qlBlackVolTermStructureBlackVol1(QlBlackVolTermStructure* o, double t, double strike, int extrapolate, QlError **e);+  double qlBlackVolTermStructureBlackVariance(QlBlackVolTermStructure* o, int d, double strike, int extrapolate, QlError **e);+  double qlBlackVolTermStructureBlackVariance1(QlBlackVolTermStructure* o, double t, double strike, int extrapolate, QlError **e);+  double qlBlackVolTermStructureBlackForwardVol(QlBlackVolTermStructure* o, int d1, int d2, double strike, int extrapolate, QlError **e);+  double qlBlackVolTermStructureBlackForwardVol1(QlBlackVolTermStructure* o, double t1, double t2, double strike, int extrapolate, QlError **e);+  double qlBlackVolTermStructureBlackForwardVariance(QlBlackVolTermStructure* o, int d1, int d2, double strike, int extrapolate, QlError **e);+  double qlBlackVolTermStructureBlackForwardVariance1(QlBlackVolTermStructure* o, double t1, double t2, double strike, int extrapolate, QlError **e);+  QlRelinkableBlackVolTermStructure* qlRelinkableBlackVolTermStructure(QlBlackVolTermStructure *initial, QlError **e);   void qlFreeRelinkableBlackVolTermStructure(QlRelinkableBlackVolTermStructure *o);-  void qlRelinkableBlackVolTermStructureLinkTo(QlRelinkableBlackVolTermStructure *o, QlBlackVolTermStructure *c, char **e);+  void qlRelinkableBlackVolTermStructureLinkTo(QlRelinkableBlackVolTermStructure *o, QlBlackVolTermStructure *c, QlError **e);   QlBlackVolTermStructure* qlRelinkableBlackVolTermStructureAsBlackVolTermStructure(QlRelinkableBlackVolTermStructure *o);   void qlFreeSwaptionVolatilityStructure(QlSwaptionVolatilityStructure *o);   QlVolatilityTermStructure* qlSwaptionVolatilityStructureAsVolatilityTermStructure(QlSwaptionVolatilityStructure *o);-  QlRelinkableSwaptionVolatilityStructure* qlRelinkableSwaptionVolatilityStructure(QlSwaptionVolatilityStructure *initial, char **e);+  QlRelinkableSwaptionVolatilityStructure* qlRelinkableSwaptionVolatilityStructure(QlSwaptionVolatilityStructure *initial, QlError **e);   void qlFreeRelinkableSwaptionVolatilityStructure(QlRelinkableSwaptionVolatilityStructure *o);-  void qlRelinkableSwaptionVolatilityStructureLinkTo(QlRelinkableSwaptionVolatilityStructure *o, QlSwaptionVolatilityStructure *c, char **e);+  void qlRelinkableSwaptionVolatilityStructureLinkTo(QlRelinkableSwaptionVolatilityStructure *o, QlSwaptionVolatilityStructure *c, QlError **e);   QlSwaptionVolatilityStructure* qlRelinkableSwaptionVolatilityStructureAsSwaptionVolatilityStructure(QlRelinkableSwaptionVolatilityStructure *o);   void qlFreeSmileSection(QlSmileSection *o);-  QlBlackVolTermStructure* qlBlackConstantVol1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, char **e);-  QlBlackVolTermStructure* qlBlackConstantVol(int referenceDate, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, char **e);-  QlOptionletVolatilityStructure* qlConstantOptionletVolatility(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double displacement, char **e);-  QlSwaptionVolatilityStructure* qlConstantSwaptionVolatility1(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double shift, char **e);-  QlSwaptionVolatilityStructure* qlConstantSwaptionVolatility(unsigned settlementDays, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double shift, char **e);-  double qlSwaptionVolatilityStructureBlackVariance1(QlSwaptionVolatilityStructure* o, int optionDate, int, int, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureBlackVariance2(QlSwaptionVolatilityStructure* o, double optionTime, int, int, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureBlackVariance3(QlSwaptionVolatilityStructure* o, int, int, double swapLength, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureBlackVariance4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureBlackVariance5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureBlackVariance(QlSwaptionVolatilityStructure* o, int, int, int, int, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureMaxSwapLength(QlSwaptionVolatilityStructure* o, char **e);-  int qlSwaptionVolatilityStructureMaxSwapTenor(QlSwaptionVolatilityStructure* o, int *, char **e);-  QlSmileSection* qlSwaptionVolatilityStructureSmileSection1(QlSwaptionVolatilityStructure* o, int optionDate, int, int, int extr, char **e);-  QlSmileSection* qlSwaptionVolatilityStructureSmileSection2(QlSwaptionVolatilityStructure* o, double optionTime, int, int, int extr, char **e);-  QlSmileSection* qlSwaptionVolatilityStructureSmileSection3(QlSwaptionVolatilityStructure* o, int, int, double swapLength, int extr, char **e);-  QlSmileSection* qlSwaptionVolatilityStructureSmileSection4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, int extr, char **e);-  QlSmileSection* qlSwaptionVolatilityStructureSmileSection5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, int extr, char **e);-  QlSmileSection* qlSwaptionVolatilityStructureSmileSection(QlSwaptionVolatilityStructure* o, int, int, int, int, int extr, char **e);-  QlSmileSection* qlSabrSmileSection(double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double shift, int volatilityType, char **e);-  QlSmileSection* qlSabrSmileSection1(int optionDate, double forward, double alpha, double beta, double nu, double rho, int referenceDate, DayCounter* dc, double shift, int volatilityType, char **e);-  QlSmileSection* qlNoArbSabrSmileSection(double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double shift, int volatilityType, char **e);-  QlSmileSection* qlNoArbSabrSmileSection1(int optionDate, double forward, double alpha, double beta, double nu, double rho, DayCounter* dc, double shift, int volatilityType, char **e);-  double qlSmileSectionVolatility(QlSmileSection* o, double strike, char **e);-  double qlSmileSectionVariance(QlSmileSection* o, double strike, char **e);-  double qlSmileSectionAtmLevel(QlSmileSection* o, char **e);-  double qlSmileSectionOptionPrice(QlSmileSection* o, double strike, int type, double discount, char **e);-  double qlSmileSectionDigitalOptionPrice(QlSmileSection* o, double strike, int type, double discount, double gap, char **e);-  double qlSmileSectionDensity(QlSmileSection* o, double strike, double discount, double gap, char **e);-  QlSmileSection* qlFlatSmileSection(int d, double vol, DayCounter* dc, int referenceDate, double atmLevel, int type, double shift, char **e);-  QlSmileSection* qlSviSmileSection(int d, double forward, double a, double b, double sigma, double rho, double m, DayCounter* dc, char **e);-  QlSmileSection* qlZabrSmileSection(int evaluation, double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double gamma, unsigned moneynessLen, double* moneyness, unsigned fdRefinement, char **e);-  QlSmileSection* qlZabrSmileSection1(int evaluation, int d, double forward, double alpha, double beta, double nu, double rho, double gamma, DayCounter* dc, unsigned moneynessLen, double* moneyness, unsigned fdRefinement, char **e);-  QlSmileSection* qlSpreadedSmileSection(QlSmileSection* source, QlQuote* spread, char **e);-  QlSmileSection* qlAtmSmileSection(QlSmileSection* source, double atm, char **e);-  QlSabrInterpolatedSmileSection* qlSabrInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, double shift, char **e);+  QlBlackVolTermStructure* qlBlackConstantVol1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, QlError **e);+  QlBlackVolTermStructure* qlBlackConstantVol(int referenceDate, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, QlError **e);+  QlBlackVolTermStructure* qlSabrVolTermStructure(double alpha, double beta, double gamma, double rho, double s0, double r, int referenceDate, DayCounter* dc, QlError **e);+  QlOptionletVolatilityStructure* qlConstantOptionletVolatility(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double displacement, QlError **e);+  QlSwaptionVolatilityStructure* qlConstantSwaptionVolatility1(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double shift, QlError **e);+  QlSwaptionVolatilityStructure* qlConstantSwaptionVolatility(unsigned settlementDays, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, int type, double shift, QlError **e);+  double qlSwaptionVolatilityStructureBlackVariance1(QlSwaptionVolatilityStructure* o, int optionDate, int, int, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureBlackVariance2(QlSwaptionVolatilityStructure* o, double optionTime, int, int, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureBlackVariance3(QlSwaptionVolatilityStructure* o, int, int, double swapLength, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureBlackVariance4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureBlackVariance5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureBlackVariance(QlSwaptionVolatilityStructure* o, int, int, int, int, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureMaxSwapLength(QlSwaptionVolatilityStructure* o, QlError **e);+  int qlSwaptionVolatilityStructureMaxSwapTenor(QlSwaptionVolatilityStructure* o, int *, QlError **e);+  QlSmileSection* qlSwaptionVolatilityStructureSmileSection1(QlSwaptionVolatilityStructure* o, int optionDate, int, int, int extr, QlError **e);+  QlSmileSection* qlSwaptionVolatilityStructureSmileSection2(QlSwaptionVolatilityStructure* o, double optionTime, int, int, int extr, QlError **e);+  QlSmileSection* qlSwaptionVolatilityStructureSmileSection3(QlSwaptionVolatilityStructure* o, int, int, double swapLength, int extr, QlError **e);+  QlSmileSection* qlSwaptionVolatilityStructureSmileSection4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, int extr, QlError **e);+  QlSmileSection* qlSwaptionVolatilityStructureSmileSection5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, int extr, QlError **e);+  QlSmileSection* qlSwaptionVolatilityStructureSmileSection(QlSwaptionVolatilityStructure* o, int, int, int, int, int extr, QlError **e);+  QlSmileSection* qlSabrSmileSection(double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double shift, int volatilityType, QlError **e);+  QlSmileSection* qlSabrSmileSection1(int optionDate, double forward, double alpha, double beta, double nu, double rho, int referenceDate, DayCounter* dc, double shift, int volatilityType, QlError **e);+  QlSmileSection* qlNoArbSabrSmileSection(double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double shift, int volatilityType, QlError **e);+  QlSmileSection* qlNoArbSabrSmileSection1(int optionDate, double forward, double alpha, double beta, double nu, double rho, DayCounter* dc, double shift, int volatilityType, QlError **e);+  double qlSmileSectionVolatility(QlSmileSection* o, double strike, QlError **e);+  double qlSmileSectionVariance(QlSmileSection* o, double strike, QlError **e);+  double qlSmileSectionAtmLevel(QlSmileSection* o, QlError **e);+  double qlSmileSectionOptionPrice(QlSmileSection* o, double strike, int type, double discount, QlError **e);+  double qlSmileSectionDigitalOptionPrice(QlSmileSection* o, double strike, int type, double discount, double gap, QlError **e);+  double qlSmileSectionDensity(QlSmileSection* o, double strike, double discount, double gap, QlError **e);+  double qlSmileSectionMinStrike(QlSmileSection* o, QlError **e);+  double qlSmileSectionMaxStrike(QlSmileSection* o, QlError **e);+  double qlSmileSectionVega(QlSmileSection* o, double strike, double discount, QlError **e);+  QlSmileSection* qlFlatSmileSection(int d, double vol, DayCounter* dc, int referenceDate, double atmLevel, int type, double shift, QlError **e);+  QlSmileSection* qlSviSmileSection(int d, double forward, double a, double b, double sigma, double rho, double m, DayCounter* dc, QlError **e);+  QlSmileSection* qlZabrSmileSection(int evaluation, double timeToExpiry, double forward, double alpha, double beta, double nu, double rho, double gamma, unsigned moneynessLen, double* moneyness, unsigned fdRefinement, QlError **e);+  QlSmileSection* qlZabrSmileSection1(int evaluation, int d, double forward, double alpha, double beta, double nu, double rho, double gamma, DayCounter* dc, unsigned moneynessLen, double* moneyness, unsigned fdRefinement, QlError **e);+  QlSmileSection* qlSpreadedSmileSection(QlSmileSection* source, QlQuote* spread, QlError **e);+  QlSmileSection* qlAtmSmileSection(QlSmileSection* source, double atm, QlError **e);+  QlSabrInterpolatedSmileSection* qlSabrInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, double shift, QlError **e);   void qlFreeSabrInterpolatedSmileSection(QlSabrInterpolatedSmileSection* p);-  QlSmileSection* qlSabrInterpolatedSmileSectionAsSmileSection(QlSabrInterpolatedSmileSection* o, char **e);-  double qlSabrInterpolatedSmileSectionAlpha(QlSabrInterpolatedSmileSection* o, char **e);-  double qlSabrInterpolatedSmileSectionBeta(QlSabrInterpolatedSmileSection* o, char **e);-  double qlSabrInterpolatedSmileSectionNu(QlSabrInterpolatedSmileSection* o, char **e);-  double qlSabrInterpolatedSmileSectionRho(QlSabrInterpolatedSmileSection* o, char **e);-  double qlSabrInterpolatedSmileSectionRmsError(QlSabrInterpolatedSmileSection* o, char **e);-  double qlSabrInterpolatedSmileSectionMaxError(QlSabrInterpolatedSmileSection* o, char **e);-  int qlSabrInterpolatedSmileSectionEndCriteria(QlSabrInterpolatedSmileSection* o, char **e);-  QlSviInterpolatedSmileSection* qlSviInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double a, double b, double sigma, double rho, double m, int aIsFixed, int bIsFixed, int sigmaIsFixed, int rhoIsFixed, int mIsFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, char **e);+  QlSmileSection* qlSabrInterpolatedSmileSectionAsSmileSection(QlSabrInterpolatedSmileSection* o, QlError **e);+  double qlSabrInterpolatedSmileSectionAlpha(QlSabrInterpolatedSmileSection* o, QlError **e);+  double qlSabrInterpolatedSmileSectionBeta(QlSabrInterpolatedSmileSection* o, QlError **e);+  double qlSabrInterpolatedSmileSectionNu(QlSabrInterpolatedSmileSection* o, QlError **e);+  double qlSabrInterpolatedSmileSectionRho(QlSabrInterpolatedSmileSection* o, QlError **e);+  double qlSabrInterpolatedSmileSectionRmsError(QlSabrInterpolatedSmileSection* o, QlError **e);+  double qlSabrInterpolatedSmileSectionMaxError(QlSabrInterpolatedSmileSection* o, QlError **e);+  int qlSabrInterpolatedSmileSectionEndCriteria(QlSabrInterpolatedSmileSection* o, QlError **e);+  QlSviInterpolatedSmileSection* qlSviInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double a, double b, double sigma, double rho, double m, int aIsFixed, int bIsFixed, int sigmaIsFixed, int rhoIsFixed, int mIsFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, QlError **e);   void qlFreeSviInterpolatedSmileSection(QlSviInterpolatedSmileSection* p);-  QlSmileSection* qlSviInterpolatedSmileSectionAsSmileSection(QlSviInterpolatedSmileSection* o, char **e);-  double qlSviInterpolatedSmileSectionA(QlSviInterpolatedSmileSection* o, char **e);-  double qlSviInterpolatedSmileSectionB(QlSviInterpolatedSmileSection* o, char **e);-  double qlSviInterpolatedSmileSectionSigma(QlSviInterpolatedSmileSection* o, char **e);-  double qlSviInterpolatedSmileSectionRho(QlSviInterpolatedSmileSection* o, char **e);-  double qlSviInterpolatedSmileSectionM(QlSviInterpolatedSmileSection* o, char **e);-  double qlSviInterpolatedSmileSectionRmsError(QlSviInterpolatedSmileSection* o, char **e);-  double qlSviInterpolatedSmileSectionMaxError(QlSviInterpolatedSmileSection* o, char **e);-  int qlSviInterpolatedSmileSectionEndCriteria(QlSviInterpolatedSmileSection* o, char **e);-  QlNoArbSabrInterpolatedSmileSection* qlNoArbSabrInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, char **e);+  QlSmileSection* qlSviInterpolatedSmileSectionAsSmileSection(QlSviInterpolatedSmileSection* o, QlError **e);+  double qlSviInterpolatedSmileSectionA(QlSviInterpolatedSmileSection* o, QlError **e);+  double qlSviInterpolatedSmileSectionB(QlSviInterpolatedSmileSection* o, QlError **e);+  double qlSviInterpolatedSmileSectionSigma(QlSviInterpolatedSmileSection* o, QlError **e);+  double qlSviInterpolatedSmileSectionRho(QlSviInterpolatedSmileSection* o, QlError **e);+  double qlSviInterpolatedSmileSectionM(QlSviInterpolatedSmileSection* o, QlError **e);+  double qlSviInterpolatedSmileSectionRmsError(QlSviInterpolatedSmileSection* o, QlError **e);+  double qlSviInterpolatedSmileSectionMaxError(QlSviInterpolatedSmileSection* o, QlError **e);+  int qlSviInterpolatedSmileSectionEndCriteria(QlSviInterpolatedSmileSection* o, QlError **e);+  QlNoArbSabrInterpolatedSmileSection* qlNoArbSabrInterpolatedSmileSection(int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, QlError **e);   void qlFreeNoArbSabrInterpolatedSmileSection(QlNoArbSabrInterpolatedSmileSection* p);-  QlSmileSection* qlNoArbSabrInterpolatedSmileSectionAsSmileSection(QlNoArbSabrInterpolatedSmileSection* o, char **e);-  double qlNoArbSabrInterpolatedSmileSectionAlpha(QlNoArbSabrInterpolatedSmileSection* o, char **e);-  double qlNoArbSabrInterpolatedSmileSectionBeta(QlNoArbSabrInterpolatedSmileSection* o, char **e);-  double qlNoArbSabrInterpolatedSmileSectionNu(QlNoArbSabrInterpolatedSmileSection* o, char **e);-  double qlNoArbSabrInterpolatedSmileSectionRho(QlNoArbSabrInterpolatedSmileSection* o, char **e);-  double qlNoArbSabrInterpolatedSmileSectionRmsError(QlNoArbSabrInterpolatedSmileSection* o, char **e);-  double qlNoArbSabrInterpolatedSmileSectionMaxError(QlNoArbSabrInterpolatedSmileSection* o, char **e);-  int qlNoArbSabrInterpolatedSmileSectionEndCriteria(QlNoArbSabrInterpolatedSmileSection* o, char **e);-  double qlSwaptionVolatilityStructureSwapLength1(QlSwaptionVolatilityStructure* o, int start, int end, char **e);-  double qlSwaptionVolatilityStructureSwapLength(QlSwaptionVolatilityStructure* o, int, int, char **e);-  double qlSwaptionVolatilityStructureVolatility1(QlSwaptionVolatilityStructure* o, int optionDate, int, int, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureVolatility2(QlSwaptionVolatilityStructure* o, double optionTime, int, int, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureVolatility3(QlSwaptionVolatilityStructure* o, int, int, double swapLength, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureVolatility4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureVolatility5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, double strike, int extrapolate, char **e);-  double qlSwaptionVolatilityStructureVolatility(QlSwaptionVolatilityStructure* o, int, int, int, int, double strike, int extrapolate, char **e);-  QlCapFloorTermVolCurve* qlCapFloorTermVolCurve1(int settlementDate, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned volsLen, QlQuote** vols, DayCounter* dc, char **e);-  QlCapFloorTermVolCurve* qlCapFloorTermVolCurve(unsigned settlementDays, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned volsLen, QlQuote** vols, DayCounter* dc, char **e);-  QlCapFloorTermVolatilityStructure* qlConstantCapFloorTermVolatility1(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, char **e);-  QlCapFloorTermVolatilityStructure* qlConstantCapFloorTermVolatility(unsigned settlementDays, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, char **e);-  QlSwaptionVolatilityStructure* qlSpreadedSwaptionVolatility(QlSwaptionVolatilityStructure* x0, QlQuote* spread, char **e);-  QlOptionletVolatilityStructure* qlSpreadedOptionletVolatility(QlOptionletVolatilityStructure* x0, QlQuote* spread, char **e);+  QlSmileSection* qlNoArbSabrInterpolatedSmileSectionAsSmileSection(QlNoArbSabrInterpolatedSmileSection* o, QlError **e);+  double qlNoArbSabrInterpolatedSmileSectionAlpha(QlNoArbSabrInterpolatedSmileSection* o, QlError **e);+  double qlNoArbSabrInterpolatedSmileSectionBeta(QlNoArbSabrInterpolatedSmileSection* o, QlError **e);+  double qlNoArbSabrInterpolatedSmileSectionNu(QlNoArbSabrInterpolatedSmileSection* o, QlError **e);+  double qlNoArbSabrInterpolatedSmileSectionRho(QlNoArbSabrInterpolatedSmileSection* o, QlError **e);+  double qlNoArbSabrInterpolatedSmileSectionRmsError(QlNoArbSabrInterpolatedSmileSection* o, QlError **e);+  double qlNoArbSabrInterpolatedSmileSectionMaxError(QlNoArbSabrInterpolatedSmileSection* o, QlError **e);+  int qlNoArbSabrInterpolatedSmileSectionEndCriteria(QlNoArbSabrInterpolatedSmileSection* o, QlError **e);+  QlZabrInterpolatedSmileSection* qlZabrInterpolatedSmileSection(int evaluation, int optionDate, QlQuote* forward, unsigned strikesLen, double* strikes, int hasFloatingStrikes, QlQuote* atmVolatility, unsigned volsLen, QlQuote** vols, double alpha, double beta, double nu, double rho, double gamma, int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int isGammaFixed, int vegaWeighted, QlEndCriteria* endCriteria, QlOptimizationMethod* method, DayCounter* dc, QlError **e);+  void qlFreeZabrInterpolatedSmileSection(QlZabrInterpolatedSmileSection* p);+  QlSmileSection* qlZabrInterpolatedSmileSectionAsSmileSection(QlZabrInterpolatedSmileSection* o, QlError **e);+  double qlZabrInterpolatedSmileSectionAlpha(QlZabrInterpolatedSmileSection* o, QlError **e);+  double qlZabrInterpolatedSmileSectionBeta(QlZabrInterpolatedSmileSection* o, QlError **e);+  double qlZabrInterpolatedSmileSectionNu(QlZabrInterpolatedSmileSection* o, QlError **e);+  double qlZabrInterpolatedSmileSectionRho(QlZabrInterpolatedSmileSection* o, QlError **e);+  double qlZabrInterpolatedSmileSectionGamma(QlZabrInterpolatedSmileSection* o, QlError **e);+  double qlZabrInterpolatedSmileSectionRmsError(QlZabrInterpolatedSmileSection* o, QlError **e);+  double qlZabrInterpolatedSmileSectionMaxError(QlZabrInterpolatedSmileSection* o, QlError **e);+  int qlZabrInterpolatedSmileSectionEndCriteria(QlZabrInterpolatedSmileSection* o, QlError **e);+  double qlSwaptionVolatilityStructureSwapLength1(QlSwaptionVolatilityStructure* o, int start, int end, QlError **e);+  double qlSwaptionVolatilityStructureSwapLength(QlSwaptionVolatilityStructure* o, int, int, QlError **e);+  double qlSwaptionVolatilityStructureVolatility1(QlSwaptionVolatilityStructure* o, int optionDate, int, int, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureVolatility2(QlSwaptionVolatilityStructure* o, double optionTime, int, int, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureVolatility3(QlSwaptionVolatilityStructure* o, int, int, double swapLength, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureVolatility4(QlSwaptionVolatilityStructure* o, int optionDate, double swapLength, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureVolatility5(QlSwaptionVolatilityStructure* o, double optionTime, double swapLength, double strike, int extrapolate, QlError **e);+  double qlSwaptionVolatilityStructureVolatility(QlSwaptionVolatilityStructure* o, int, int, int, int, double strike, int extrapolate, QlError **e);+  QlCapFloorTermVolCurve* qlCapFloorTermVolCurve1(int settlementDate, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned volsLen, QlQuote** vols, DayCounter* dc, QlError **e);+  QlCapFloorTermVolCurve* qlCapFloorTermVolCurve(unsigned settlementDays, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned volsLen, QlQuote** vols, DayCounter* dc, QlError **e);+  QlCapFloorTermVolatilityStructure* qlConstantCapFloorTermVolatility1(int referenceDate, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, QlError **e);+  QlCapFloorTermVolatilityStructure* qlConstantCapFloorTermVolatility(unsigned settlementDays, Calendar* cal, int bdc, QlQuote* volatility, DayCounter* dc, QlError **e);+  QlSwaptionVolatilityStructure* qlSpreadedSwaptionVolatility(QlSwaptionVolatilityStructure* x0, QlQuote* spread, QlError **e);+  QlSwaptionVolatilityStructure* qlGaussian1dSwaptionVolatility(Calendar* cal, int bdc, QlSwapIndex* indexBase, QlGaussian1dModel* model, DayCounter* dc, QlError **e);+  QlOptionletVolatilityStructure* qlSpreadedOptionletVolatility(QlOptionletVolatilityStructure* x0, QlQuote* spread, QlError **e);    void qlFreeCapFloorTermVolatilityStructure(QlCapFloorTermVolatilityStructure *o);   QlVolatilityTermStructure* qlCapFloorTermVolatilityStructureAsVolatilityTermStructure(QlCapFloorTermVolatilityStructure *o);-  double qlCapFloorTermVolatilityStructureVolatilityForPeriod(QlCapFloorTermVolatilityStructure* o, int n, int u, double strike, int extrapolate, char **e);-  double qlCapFloorTermVolatilityStructureVolatilityForDate(QlCapFloorTermVolatilityStructure* o, int date, double strike, int extrapolate, char **e);-  double qlCapFloorTermVolatilityStructureVolatilityForTime(QlCapFloorTermVolatilityStructure* o, double t, double strike, int extrapolate, char **e);+  double qlCapFloorTermVolatilityStructureVolatilityForPeriod(QlCapFloorTermVolatilityStructure* o, int n, int u, double strike, int extrapolate, QlError **e);+  double qlCapFloorTermVolatilityStructureVolatilityForDate(QlCapFloorTermVolatilityStructure* o, int date, double strike, int extrapolate, QlError **e);+  double qlCapFloorTermVolatilityStructureVolatilityForTime(QlCapFloorTermVolatilityStructure* o, double t, double strike, int extrapolate, QlError **e);   void qlFreeCapFloorTermVolCurve(QlCapFloorTermVolCurve *o);   QlCapFloorTermVolatilityStructure* qlCapFloorTermVolCurveAsCapFloorTermVolatilityStructure(QlCapFloorTermVolCurve *o);-  void qlCapFloorTermVolCurveOptionDates(QlCapFloorTermVolCurve *o, unsigned *count, int **days, char **e);-  void qlCapFloorTermVolCurveOptionTimes(QlCapFloorTermVolCurve *o, unsigned *count, double **times, char **e);+  void qlCapFloorTermVolCurveOptionDates(QlCapFloorTermVolCurve *o, unsigned *count, int **days, QlError **e);+  void qlCapFloorTermVolCurveOptionTimes(QlCapFloorTermVolCurve *o, unsigned *count, double **times, QlError **e);    void qlFreeCapFloorTermVolSurface(QlCapFloorTermVolSurface *o);   QlCapFloorTermVolatilityStructure* qlCapFloorTermVolSurfaceAsCapFloorTermVolatilityStructure(QlCapFloorTermVolSurface *o);-  void qlCapFloorTermVolSurfaceOptionDates(QlCapFloorTermVolSurface *o, unsigned *count, int **days, char **e);-  void qlCapFloorTermVolSurfaceOptionTimes(QlCapFloorTermVolSurface *o, unsigned *count, double **times, char **e);+  void qlCapFloorTermVolSurfaceOptionDates(QlCapFloorTermVolSurface *o, unsigned *count, int **days, QlError **e);+  void qlCapFloorTermVolSurfaceOptionTimes(QlCapFloorTermVolSurface *o, unsigned *count, double **times, QlError **e);   void qlFreeLocalVolTermStructure(QlLocalVolTermStructure *o);   QlVolatilityTermStructure* qlLocalVolTermStructureAsVolatilityTermStructure(QlLocalVolTermStructure *o);   void qlFreeGridModelLocalVolSurface(QlGridModelLocalVolSurface *o);   QlLocalVolTermStructure* qlGridModelLocalVolSurfaceAsLocalVolTermStructure(QlGridModelLocalVolSurface *o);-  QlCalibratedModel* qlGridModelLocalVolSurfaceAsCalibratedModel(QlGridModelLocalVolSurface *o, char **e);-  QlGridModelLocalVolSurface* qlGridModelLocalVolSurface(int referenceDate, unsigned datesLen, int* dates, unsigned rows, unsigned* strikeLengths, double* strikes, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, char **e);-  QlBlackVolTermStructure* qlHestonBlackVolSurface(QlHestonModel* model, int cpxLogFormula, unsigned integrationOrder, char **e);+  QlCalibratedModel* qlGridModelLocalVolSurfaceAsCalibratedModel(QlGridModelLocalVolSurface *o, QlError **e);+  QlGridModelLocalVolSurface* qlGridModelLocalVolSurface(int referenceDate, unsigned datesLen, int* dates, unsigned rows, unsigned* strikeLengths, double* strikes, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, QlError **e);+  QlBlackVolTermStructure* qlHestonBlackVolSurface(QlHestonModel* model, int cpxLogFormula, unsigned integrationOrder, QlError **e);   void qlFreeAndreasenHugeVolatilityInterpl(QlAndreasenHugeVolatilityInterpl *o);-  QlAndreasenHugeVolatilityInterpl* qlAndreasenHugeVolatilityInterpl(unsigned calibrationLen, QlVanillaOption** options, QlQuote** quotes, QlQuote* spot, QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, int interpolationType, int calibrationType, unsigned nGridPoints, double minStrike, double maxStrike, QlOptimizationMethod* optimizationMethod, QlEndCriteria* endCriteria, char **e);-  void qlAndreasenHugeVolatilityInterplCalibrationError(QlAndreasenHugeVolatilityInterpl* o, unsigned* count, double** values, char **e);-  double qlAndreasenHugeVolatilityInterplFwd(QlAndreasenHugeVolatilityInterpl* o, double t, char **e);-  double qlAndreasenHugeVolatilityInterplOptionPrice(QlAndreasenHugeVolatilityInterpl* o, double t, double strike, int optionType, char **e);-  double qlAndreasenHugeVolatilityInterplLocalVol(QlAndreasenHugeVolatilityInterpl* o, double t, double strike, char **e);-  QlBlackVolTermStructure* qlAndreasenHugeVolatilityAdapter(QlAndreasenHugeVolatilityInterpl* o, double eps, char **e);-  QlLocalVolTermStructure* qlAndreasenHugeLocalVolAdapter(QlAndreasenHugeVolatilityInterpl* o, char **e);-  double qlLocalVolTermStructureLocalVol(QlLocalVolTermStructure* o, int d, double underlyingLevel, int extrapolate, char **e);-  QlLocalVolTermStructure* qlLocalConstantVol1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, char **e);-  QlLocalVolTermStructure* qlLocalConstantVol(int referenceDate, QlQuote* volatility, DayCounter* dayCounter, char **e);-  QlLocalVolTermStructure* qlLocalVolCurve(QlBlackVarianceCurve* curve, char **e);-  QlLocalVolTermStructure* qlLocalVolSurface(QlBlackVolTermStructure* blackTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* dividendTS, QlQuote* underlying, char **e);-  QlLocalVolTermStructure* qlNoExceptLocalVolSurface(QlBlackVolTermStructure* blackTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* dividendTS, QlQuote* underlying, double illegalLocalVolOverwrite, char **e);-  QlLocalVolTermStructure* qlFixedLocalVolSurface(int referenceDate, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned matrixRows, unsigned matrixCols, double* matrixData, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, char **e);+  QlAndreasenHugeVolatilityInterpl* qlAndreasenHugeVolatilityInterpl(unsigned calibrationLen, QlVanillaOption** options, QlQuote** quotes, QlQuote* spot, QlYieldTermStructure* riskFreeRate, QlYieldTermStructure* dividendYield, int interpolationType, int calibrationType, unsigned nGridPoints, double minStrike, double maxStrike, QlOptimizationMethod* optimizationMethod, QlEndCriteria* endCriteria, QlError **e);+  void qlAndreasenHugeVolatilityInterplCalibrationError(QlAndreasenHugeVolatilityInterpl* o, unsigned* count, double** values, QlError **e);+  double qlAndreasenHugeVolatilityInterplFwd(QlAndreasenHugeVolatilityInterpl* o, double t, QlError **e);+  double qlAndreasenHugeVolatilityInterplOptionPrice(QlAndreasenHugeVolatilityInterpl* o, double t, double strike, int optionType, QlError **e);+  double qlAndreasenHugeVolatilityInterplLocalVol(QlAndreasenHugeVolatilityInterpl* o, double t, double strike, QlError **e);+  QlBlackVolTermStructure* qlAndreasenHugeVolatilityAdapter(QlAndreasenHugeVolatilityInterpl* o, double eps, QlError **e);+  QlLocalVolTermStructure* qlAndreasenHugeLocalVolAdapter(QlAndreasenHugeVolatilityInterpl* o, QlError **e);+  double qlLocalVolTermStructureLocalVol(QlLocalVolTermStructure* o, int d, double underlyingLevel, int extrapolate, QlError **e);+  QlLocalVolTermStructure* qlLocalConstantVol1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, QlError **e);+  QlLocalVolTermStructure* qlLocalConstantVol(int referenceDate, QlQuote* volatility, DayCounter* dayCounter, QlError **e);+  QlLocalVolTermStructure* qlLocalVolCurve(QlBlackVarianceCurve* curve, QlError **e);+  QlLocalVolTermStructure* qlLocalVolSurface(QlBlackVolTermStructure* blackTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* dividendTS, QlQuote* underlying, QlError **e);+  QlLocalVolTermStructure* qlNoExceptLocalVolSurface(QlBlackVolTermStructure* blackTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* dividendTS, QlQuote* underlying, double illegalLocalVolOverwrite, QlError **e);+  QlLocalVolTermStructure* qlFixedLocalVolSurface(int referenceDate, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned matrixRows, unsigned matrixCols, double* matrixData, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, QlError **e);   void qlFreeBlackVarianceCurve(QlBlackVarianceCurve *o);   QlBlackVolTermStructure* qlBlackVarianceCurveAsBlackVolTermStructure(QlBlackVarianceCurve *o);-  QlBlackVolTermStructure* qlImpliedVolTermStructure(QlBlackVolTermStructure* origTS, int referenceDate, char **e);-  QlBlackVarianceCurve* qlBlackVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned blackVolCurveLen, double* blackVolCurve, DayCounter* dayCounter, int forceMonotoneVariance, int interpolator, int approximator, int approximatorArg, char **e);-  QlBlackVolTermStructure* qlBlackVarianceSurface(int referenceDate, Calendar* cal, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned blackVolMatrixRows, unsigned blackVolMatrixCols, double* blackVolMatrix, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, int interpolator, char **e);-  QlBlackVolTermStructure* qlPiecewiseBlackVarianceSurface(int referenceDate, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned blackVolsRows, unsigned blackVolsCols, double* blackVols, DayCounter* dayCounter, char **e);+  QlBlackVolTermStructure* qlImpliedVolTermStructure(QlBlackVolTermStructure* origTS, int referenceDate, QlError **e);+  QlBlackVarianceCurve* qlBlackVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned blackVolCurveLen, double* blackVolCurve, DayCounter* dayCounter, int forceMonotoneVariance, int interpolator, int approximator, int approximatorArg, QlError **e);+  QlBlackVolTermStructure* qlBlackVarianceSurface(int referenceDate, Calendar* cal, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned blackVolMatrixRows, unsigned blackVolMatrixCols, double* blackVolMatrix, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, int interpolator, QlError **e);+  QlBlackVolTermStructure* qlExtendedBlackVarianceCurve(int referenceDate, unsigned datesLen, int* dates, unsigned volsLen, QlQuote** vols, DayCounter* dayCounter, int forceMonotoneVariance, QlError **e);+  QlBlackVolTermStructure* qlExtendedBlackVarianceSurface(int referenceDate, Calendar* cal, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dayCounter, int lowerExtrapolation, int upperExtrapolation, QlError **e);+  QlBlackVolTermStructure* qlPiecewiseBlackVarianceSurface(int referenceDate, unsigned datesLen, int* dates, unsigned strikesLen, double* strikes, unsigned blackVolsRows, unsigned blackVolsCols, double* blackVols, DayCounter* dayCounter, QlError **e);   void qlFreeBlackVolatilitySurfaceDelta(QlBlackVolatilitySurfaceDelta *o);   QlBlackVolTermStructure* qlBlackVolatilitySurfaceDeltaAsBlackVolTermStructure(QlBlackVolatilitySurfaceDelta *o);   QlBlackVolatilitySurfaceDelta* qlBlackVolatilitySurfaceDelta(int referenceDate, unsigned datesLen, int* dates,@@ -212,16 +231,16 @@     int interpolationMethod, int flatStrikeExtrapolation, int timeExtrapolationType,     int switchTenorLen, int switchTenorUnit,     int longTermDeltaType, int longTermAtmType, int longTermAtmDeltaType,-    char **e);-  QlSmileSection* qlBlackVolatilitySurfaceDeltaSmile1(QlBlackVolatilitySurfaceDelta* o, double t, char **e);-  QlSmileSection* qlBlackVolatilitySurfaceDeltaSmile(QlBlackVolatilitySurfaceDelta* o, int d, char **e);-  QlCapFloorTermVolSurface* qlCapFloorTermVolSurface(unsigned settlementDays, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned strikesLen, double* strikes, unsigned volatilitiesRows, unsigned volatilitiesCols, QlQuote** volatilities, DayCounter* dc, char **e);-  QlCapFloorTermVolSurface* qlCapFloorTermVolSurface1(int settlementDate, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned strikesLen, double* strikes, unsigned volatilitiesRows, unsigned volatilitiesCols, QlQuote** volatilities, DayCounter* dc, char **e);-  QlSwaptionVolatilityMatrix* qlSwaptionVolatilityMatrix(int referenceDate, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned, int*, unsigned, int*, unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dc, int flatExtrapolation, int type, unsigned shiftRows, unsigned shiftCols, double* shifts, char **e);-  QlSwaptionVolatilityMatrix* qlSwaptionVolatilityMatrix1(Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned, int*, unsigned, int*, unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dc, int flatExtrapolation, int type, unsigned shiftRows, unsigned shiftCols, double* shifts, char **e);+    QlError **e);+  QlSmileSection* qlBlackVolatilitySurfaceDeltaSmile1(QlBlackVolatilitySurfaceDelta* o, double t, QlError **e);+  QlSmileSection* qlBlackVolatilitySurfaceDeltaSmile(QlBlackVolatilitySurfaceDelta* o, int d, QlError **e);+  QlCapFloorTermVolSurface* qlCapFloorTermVolSurface(unsigned settlementDays, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned strikesLen, double* strikes, unsigned volatilitiesRows, unsigned volatilitiesCols, QlQuote** volatilities, DayCounter* dc, QlError **e);+  QlCapFloorTermVolSurface* qlCapFloorTermVolSurface1(int settlementDate, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned strikesLen, double* strikes, unsigned volatilitiesRows, unsigned volatilitiesCols, QlQuote** volatilities, DayCounter* dc, QlError **e);+  QlSwaptionVolatilityMatrix* qlSwaptionVolatilityMatrix(int referenceDate, Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned, int*, unsigned, int*, unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dc, int flatExtrapolation, int type, unsigned shiftRows, unsigned shiftCols, double* shifts, QlError **e);+  QlSwaptionVolatilityMatrix* qlSwaptionVolatilityMatrix1(Calendar* calendar, int bdc, unsigned, int*, unsigned, int*, unsigned, int*, unsigned, int*, unsigned volRows, unsigned volCols, QlQuote** vols, DayCounter* dc, int flatExtrapolation, int type, unsigned shiftRows, unsigned shiftCols, double* shifts, QlError **e);   void qlFreeSwaptionVolatilityMatrix(QlSwaptionVolatilityMatrix *o);   QlSwaptionVolatilityStructure* qlSwaptionVolatilityMatrixAsSwaptionVolatilityStructure(QlSwaptionVolatilityMatrix *o);-  void qlSwaptionVolatilityMatrixLocate(QlSwaptionVolatilityMatrix *o, int optionDate, int n, int u, unsigned *i, unsigned *j, char **e);+  void qlSwaptionVolatilityMatrixLocate(QlSwaptionVolatilityMatrix *o, int optionDate, int n, int u, unsigned *i, unsigned *j, QlError **e);    QlSabrSwaptionVolatilityCube* qlSabrSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,       unsigned, int*, unsigned, int*, unsigned, int*, unsigned, int*,@@ -234,7 +253,7 @@       int isAtmCalibrated,       QlEndCriteria* endCriteria, QlOptimizationMethod* method,       double maxErrorTolerance, double errorAccept, int useMaxError, unsigned maxGuesses,-      int backwardFlat, double cutoffStrike, char **e);+      int backwardFlat, double cutoffStrike, int singlePassCalibration, QlError **e);   void qlFreeSabrSwaptionVolatilityCube(QlSabrSwaptionVolatilityCube *o);   QlSwaptionVolatilityStructure* qlSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlSabrSwaptionVolatilityCube *o);   QlNoArbSabrSwaptionVolatilityCube* qlNoArbSabrSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,@@ -248,99 +267,125 @@       int isAtmCalibrated,       QlEndCriteria* endCriteria, QlOptimizationMethod* method,       double maxErrorTolerance, double errorAccept, int useMaxError, unsigned maxGuesses,-      int backwardFlat, double cutoffStrike, char **e);+      int backwardFlat, double cutoffStrike, int singlePassCalibration, QlError **e);   void qlFreeNoArbSabrSwaptionVolatilityCube(QlNoArbSabrSwaptionVolatilityCube *o);   QlSwaptionVolatilityStructure* qlNoArbSabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlNoArbSabrSwaptionVolatilityCube *o);-  void qlNoArbSabrSwaptionVolatilityCubeSparseSabrParameters(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e);-  void qlNoArbSabrSwaptionVolatilityCubeDenseSabrParameters(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e);-  void qlNoArbSabrSwaptionVolatilityCubeMarketVolCube(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e);-  void qlNoArbSabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e);-  double qlNoArbSabrSwaptionVolatilityCubeAtmStrike1(QlNoArbSabrSwaptionVolatilityCube* o, int optionDate, int n, int u, char **e);-  double qlNoArbSabrSwaptionVolatilityCubeAtmStrike(QlNoArbSabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, char **e);+  void qlNoArbSabrSwaptionVolatilityCubeSparseSabrParameters(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlNoArbSabrSwaptionVolatilityCubeDenseSabrParameters(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlNoArbSabrSwaptionVolatilityCubeMarketVolCube(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlNoArbSabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlNoArbSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  double qlNoArbSabrSwaptionVolatilityCubeAtmStrike1(QlNoArbSabrSwaptionVolatilityCube* o, int optionDate, int n, int u, QlError **e);+  double qlNoArbSabrSwaptionVolatilityCubeAtmStrike(QlNoArbSabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, QlError **e);+  QlZabrSwaptionVolatilityCube* qlZabrSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,+      unsigned, int*, unsigned, int*, unsigned, int*, unsigned, int*,+      unsigned strikeSpreadsLen, double* strikeSpreads,+      unsigned volSpreadsRows, unsigned volSpreadsCols, QlQuote** volSpreads,+      QlSwapIndex* swapIndexBase, QlSwapIndex* shortSwapIndexBase,+      int vegaWeightedSmileFit,+      unsigned parametersGuessRows, unsigned parametersGuessCols, QlQuote** parametersGuess,+      int isAlphaFixed, int isBetaFixed, int isNuFixed, int isRhoFixed, int isGammaFixed,+      int isAtmCalibrated,+      QlEndCriteria* endCriteria, QlOptimizationMethod* method,+      double maxErrorTolerance, double errorAccept, int useMaxError, unsigned maxGuesses,+      int backwardFlat, double cutoffStrike, int singlePassCalibration, QlError **e);+  void qlFreeZabrSwaptionVolatilityCube(QlZabrSwaptionVolatilityCube *o);+  QlSwaptionVolatilityStructure* qlZabrSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlZabrSwaptionVolatilityCube *o);+  void qlZabrSwaptionVolatilityCubeSparseSabrParameters(QlZabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlZabrSwaptionVolatilityCubeDenseSabrParameters(QlZabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlZabrSwaptionVolatilityCubeMarketVolCube(QlZabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlZabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlZabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  double qlZabrSwaptionVolatilityCubeAtmStrike1(QlZabrSwaptionVolatilityCube* o, int optionDate, int n, int u, QlError **e);+  double qlZabrSwaptionVolatilityCubeAtmStrike(QlZabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, QlError **e);   QlInterpolatedSwaptionVolatilityCube* qlInterpolatedSwaptionVolatilityCube(QlSwaptionVolatilityStructure* atmVolStructure,       unsigned, int*, unsigned, int*, unsigned, int*, unsigned, int*,       unsigned strikeSpreadsLen, double* strikeSpreads,       unsigned volSpreadsRows, unsigned volSpreadsCols, QlQuote** volSpreads,       QlSwapIndex* swapIndexBase, QlSwapIndex* shortSwapIndexBase,-      int vegaWeightedSmileFit, char **e);+      int vegaWeightedSmileFit, QlError **e);   void qlFreeInterpolatedSwaptionVolatilityCube(QlInterpolatedSwaptionVolatilityCube *o);   QlSwaptionVolatilityStructure* qlInterpolatedSwaptionVolatilityCubeAsSwaptionVolatilityStructure(QlInterpolatedSwaptionVolatilityCube *o);-  void qlInterpolatedSwaptionVolatilityCubeVolSpreads(QlInterpolatedSwaptionVolatilityCube* o, unsigned i, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e);-  void qlSabrSwaptionVolatilityCubeSparseSabrParameters(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e);-  void qlSabrSwaptionVolatilityCubeDenseSabrParameters(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e);-  void qlSabrSwaptionVolatilityCubeMarketVolCube(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e);-  void qlSabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, char** e);-  double qlSabrSwaptionVolatilityCubeAtmStrike1(QlSabrSwaptionVolatilityCube* o, int optionDate, int n, int u, char **e);-  double qlSabrSwaptionVolatilityCubeAtmStrike(QlSabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, char **e);-  double qlInterpolatedSwaptionVolatilityCubeAtmStrike1(QlInterpolatedSwaptionVolatilityCube* o, int optionDate, int n, int u, char **e);-  double qlInterpolatedSwaptionVolatilityCubeAtmStrike(QlInterpolatedSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, char **e);+  void qlInterpolatedSwaptionVolatilityCubeVolSpreads(QlInterpolatedSwaptionVolatilityCube* o, unsigned i, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlSabrSwaptionVolatilityCubeSparseSabrParameters(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlSabrSwaptionVolatilityCubeDenseSabrParameters(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlSabrSwaptionVolatilityCubeMarketVolCube(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  void qlSabrSwaptionVolatilityCubeVolCubeAtmCalibrated(QlSabrSwaptionVolatilityCube* o, unsigned* rows, unsigned* cols, unsigned* len, double** vs, QlError **e);+  double qlSabrSwaptionVolatilityCubeAtmStrike1(QlSabrSwaptionVolatilityCube* o, int optionDate, int n, int u, QlError **e);+  double qlSabrSwaptionVolatilityCubeAtmStrike(QlSabrSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, QlError **e);+  double qlInterpolatedSwaptionVolatilityCubeAtmStrike1(QlInterpolatedSwaptionVolatilityCube* o, int optionDate, int n, int u, QlError **e);+  double qlInterpolatedSwaptionVolatilityCubeAtmStrike(QlInterpolatedSwaptionVolatilityCube* o, int optionN, int optionU, int n, int u, QlError **e);    void qlFreeCallableBondVolatilityStructure(QlCallableBondVolatilityStructure *o);   QlTermStructure* qlCallableBondVolatilityStructureAsTermStructure(QlCallableBondVolatilityStructure *o);-  QlCallableBondVolatilityStructure* qlCallableBondConstantVolatility1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, char **e);-  QlCallableBondVolatilityStructure* qlCallableBondConstantVolatility(int referenceDate, QlQuote* volatility, DayCounter* dayCounter, char **e);-  double qlCallableBondVolatilityStructureVolatilityForTime(QlCallableBondVolatilityStructure* o, double optionTime, double bondLength, double strike, int extrapolate, char **e);-  double qlCallableBondVolatilityStructureVolatilityForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, char **e);-  double qlCallableBondVolatilityStructureVolatilityForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, char **e);-  double qlCallableBondVolatilityStructureBlackVarianceForTime(QlCallableBondVolatilityStructure* o, double optionTime, double bondLength, double strike, int extrapolate, char **e);-  double qlCallableBondVolatilityStructureBlackVarianceForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, char **e);-  double qlCallableBondVolatilityStructureBlackVarianceForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, char **e);-  QlSmileSection* qlCallableBondVolatilityStructureSmileSectionForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, char **e);-  QlSmileSection* qlCallableBondVolatilityStructureSmileSectionForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, char **e);-  int qlCallableBondVolatilityStructureMaxBondTenor(QlCallableBondVolatilityStructure* o, int *u, char **e);-  double qlCallableBondVolatilityStructureMinStrike(QlCallableBondVolatilityStructure* o, char **e);-  double qlCallableBondVolatilityStructureMaxStrike(QlCallableBondVolatilityStructure* o, char **e);+  QlCallableBondVolatilityStructure* qlCallableBondConstantVolatility1(unsigned settlementDays, Calendar* x1, QlQuote* volatility, DayCounter* dayCounter, QlError **e);+  QlCallableBondVolatilityStructure* qlCallableBondConstantVolatility(int referenceDate, QlQuote* volatility, DayCounter* dayCounter, QlError **e);+  double qlCallableBondVolatilityStructureVolatilityForTime(QlCallableBondVolatilityStructure* o, double optionTime, double bondLength, double strike, int extrapolate, QlError **e);+  double qlCallableBondVolatilityStructureVolatilityForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, QlError **e);+  double qlCallableBondVolatilityStructureVolatilityForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, QlError **e);+  double qlCallableBondVolatilityStructureBlackVarianceForTime(QlCallableBondVolatilityStructure* o, double optionTime, double bondLength, double strike, int extrapolate, QlError **e);+  double qlCallableBondVolatilityStructureBlackVarianceForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, QlError **e);+  double qlCallableBondVolatilityStructureBlackVarianceForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, double strike, int extrapolate, QlError **e);+  QlSmileSection* qlCallableBondVolatilityStructureSmileSectionForDate(QlCallableBondVolatilityStructure* o, int optionDate, int bondTenorLen, int bondTenorUnit, QlError **e);+  QlSmileSection* qlCallableBondVolatilityStructureSmileSectionForPeriod(QlCallableBondVolatilityStructure* o, int optionTenorLen, int optionTenorUnit, int bondTenorLen, int bondTenorUnit, QlError **e);+  int qlCallableBondVolatilityStructureMaxBondTenor(QlCallableBondVolatilityStructure* o, int *u, QlError **e);+  double qlCallableBondVolatilityStructureMinStrike(QlCallableBondVolatilityStructure* o, QlError **e);+  double qlCallableBondVolatilityStructureMaxStrike(QlCallableBondVolatilityStructure* o, QlError **e);    void qlFreeDefaultProbabilityTermStructure(QlDefaultProbabilityTermStructure *o);   QlTermStructure* qlDefaultProbabilityTermStructureAsTermStructure(QlDefaultProbabilityTermStructure *o);-  QlDefaultProbabilityTermStructure* qlFactorSpreadedHazardRateCurve(QlDefaultProbabilityTermStructure* originalCurve, QlQuote* spread, char **e);-  QlDefaultProbabilityTermStructure* qlFlatHazardRate1(unsigned settlementDays, Calendar* calendar, QlQuote* hazardRate, DayCounter* x3, char **e);-  QlDefaultProbabilityTermStructure* qlFlatHazardRate(int referenceDate, QlQuote* hazardRate, DayCounter* x2, char **e);-  QlDefaultProbabilityTermStructure* qlSpreadedHazardRateCurve(QlDefaultProbabilityTermStructure* originalCurve, QlQuote* spread, char **e);-  QlDefaultProbabilityTermStructure* qlInterpolatedDefaultDensityCurve(unsigned datesLen, int* dates, unsigned densitiesLen, double* densities, DayCounter* dayCounter, Calendar* calendar, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, char **e);-  QlDefaultProbabilityTermStructure* qlInterpolatedHazardRateCurve(unsigned datesLen, int* dates, unsigned hazardRatesLen, double* hazardRates, DayCounter* dayCounter, Calendar* cal, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, int extrapolate, char **e);-  QlDefaultProbabilityTermStructure* qlInterpolatedSurvivalProbabilityCurve(unsigned datesLen, int* dates, unsigned probabilitiesLen, double* probabilities, DayCounter* dayCounter, Calendar* calendar, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, char **e);+  void qlFreeAffineHazardRateCurve(QlAffineHazardRateCurve *o);+  QlDefaultProbabilityTermStructure* qlAffineHazardRateCurveAsDefaultProbabilityTermStructure(QlAffineHazardRateCurve *o);+  double qlAffineHazardRateCurveConditionalSurvivalProbability(QlAffineHazardRateCurve* o, int dFwd, int dTgt, double yVal, int extrapolate, QlError **e);+  double qlAffineHazardRateCurveConditionalSurvivalProbability1(QlAffineHazardRateCurve* o, double tFwd, double tTgt, double yVal, int extrapolate, QlError **e);+  QlDefaultProbabilityTermStructure* qlFactorSpreadedHazardRateCurve(QlDefaultProbabilityTermStructure* originalCurve, QlQuote* spread, QlError **e);+  QlDefaultProbabilityTermStructure* qlFlatHazardRate1(unsigned settlementDays, Calendar* calendar, QlQuote* hazardRate, DayCounter* x3, QlError **e);+  QlDefaultProbabilityTermStructure* qlFlatHazardRate(int referenceDate, QlQuote* hazardRate, DayCounter* x2, QlError **e);+  QlDefaultProbabilityTermStructure* qlSpreadedHazardRateCurve(QlDefaultProbabilityTermStructure* originalCurve, QlQuote* spread, QlError **e);+  QlDefaultProbabilityTermStructure* qlInterpolatedDefaultDensityCurve(unsigned datesLen, int* dates, unsigned densitiesLen, double* densities, DayCounter* dayCounter, Calendar* calendar, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, QlError **e);+  QlDefaultProbabilityTermStructure* qlInterpolatedHazardRateCurve(unsigned datesLen, int* dates, unsigned hazardRatesLen, double* hazardRates, DayCounter* dayCounter, Calendar* cal, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, int extrapolate, QlError **e);+  QlAffineHazardRateCurve* qlInterpolatedAffineHazardRateCurve(unsigned datesLen, int* dates, unsigned hazardRatesLen, double* hazardRates, DayCounter* dayCounter, QlOneFactorAffineModel* model, Calendar* cal, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, int extrapolate, QlError **e);+  QlDefaultProbabilityTermStructure* qlInterpolatedSurvivalProbabilityCurve(unsigned datesLen, int* dates, unsigned probabilitiesLen, double* probabilities, DayCounter* dayCounter, Calendar* calendar, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int interpolator, int approximator, int approximatorArg, QlError **e);   void qlFreeDefaultProbabilityHelper(QlDefaultProbabilityHelper *o);-  double qlDefaultProbabilityHelperImpliedQuote(QlDefaultProbabilityHelper *o, char **e);-  QlDefaultProbabilityHelper* qlSpreadCdsHelper(QlQuote* runningSpread, int, int, int settlementDays, Calendar* calendar, int frequency, int paymentConvention, int rule, DayCounter* dayCounter, double recoveryRate, QlYieldTermStructure* discountCurve, int settlesAccrual, int paysAtDefaultTime, int startDate, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int model, char **e);-  QlDefaultProbabilityHelper* qlUpfrontCdsHelper(QlQuote* upfront, double runningSpread, int, int, int settlementDays, Calendar* calendar, int frequency, int paymentConvention, int rule, DayCounter* dayCounter, double recoveryRate, QlYieldTermStructure* discountCurve, unsigned upfrontSettlementDays, int settlesAccrual, int paysAtDefaultTime, int startDate, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int model, char **e);-  QlDefaultProbabilityTermStructure* qlPiecewiseDefaultCurve(int referenceDate, unsigned instrumentsLen, QlDefaultProbabilityHelper** instruments, DayCounter* dayCounter, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, char **e);-  QlDefaultProbabilityTermStructure* qlPiecewiseDefaultCurve1(unsigned settlementDays, Calendar *calendar, unsigned instrumentsLen, QlDefaultProbabilityHelper** instruments, DayCounter* dayCounter, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, char **e);+  double qlDefaultProbabilityHelperImpliedQuote(QlDefaultProbabilityHelper *o, QlError **e);+  double qlDefaultProbabilityHelperImpliedQuoteOn(QlDefaultProbabilityHelper *o, QlDefaultProbabilityTermStructure *curve, QlError **e);+  QlDefaultProbabilityHelper* qlSpreadCdsHelper(QlQuote* runningSpread, int, int, int settlementDays, Calendar* calendar, int frequency, int paymentConvention, int rule, DayCounter* dayCounter, double recoveryRate, QlYieldTermStructure* discountCurve, int settlesAccrual, int paysAtDefaultTime, int startDate, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int model, int tradeDate, QlError **e);+  QlDefaultProbabilityHelper* qlUpfrontCdsHelper(QlQuote* upfront, double runningSpread, int, int, int settlementDays, Calendar* calendar, int frequency, int paymentConvention, int rule, DayCounter* dayCounter, double recoveryRate, QlYieldTermStructure* discountCurve, unsigned upfrontSettlementDays, int settlesAccrual, int paysAtDefaultTime, int startDate, DayCounter* lastPeriodDayCounter, int rebatesAccrual, int model, int tradeDate, QlError **e);+  QlDefaultProbabilityTermStructure* qlPiecewiseDefaultCurve(int referenceDate, unsigned instrumentsLen, QlDefaultProbabilityHelper** instruments, DayCounter* dayCounter, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, QlError **e);+  QlDefaultProbabilityTermStructure* qlPiecewiseDefaultCurve1(unsigned settlementDays, Calendar *calendar, unsigned instrumentsLen, QlDefaultProbabilityHelper** instruments, DayCounter* dayCounter, unsigned jumpsLen, QlQuote** jumps, unsigned jDatesLen, int* jumpDates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, QlError **e); -  double qlDefaultProbabilityTermStructureDefaultDensity1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, char **e);-  double qlDefaultProbabilityTermStructureDefaultDensity(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, char **e);-  double qlDefaultProbabilityTermStructureDefaultProbability1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, char **e);-  double qlDefaultProbabilityTermStructureDefaultProbability2(QlDefaultProbabilityTermStructure* o, int x1, int x2, int extrapolate, char **e);-  double qlDefaultProbabilityTermStructureDefaultProbability3(QlDefaultProbabilityTermStructure* o, double x1, double x2, int extrapo, char **e);-  double qlDefaultProbabilityTermStructureDefaultProbability(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, char **e);-  double qlDefaultProbabilityTermStructureHazardRate1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, char **e);-  double qlDefaultProbabilityTermStructureHazardRate(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, char **e);-  double qlDefaultProbabilityTermStructureSurvivalProbability1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, char **e);-  double qlDefaultProbabilityTermStructureSurvivalProbability(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, char **e);+  double qlDefaultProbabilityTermStructureDefaultDensity1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, QlError **e);+  double qlDefaultProbabilityTermStructureDefaultDensity(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, QlError **e);+  double qlDefaultProbabilityTermStructureDefaultProbability1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, QlError **e);+  double qlDefaultProbabilityTermStructureDefaultProbability2(QlDefaultProbabilityTermStructure* o, int x1, int x2, int extrapolate, QlError **e);+  double qlDefaultProbabilityTermStructureDefaultProbability3(QlDefaultProbabilityTermStructure* o, double x1, double x2, int extrapo, QlError **e);+  double qlDefaultProbabilityTermStructureDefaultProbability(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, QlError **e);+  double qlDefaultProbabilityTermStructureHazardRate1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, QlError **e);+  double qlDefaultProbabilityTermStructureHazardRate(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, QlError **e);+  double qlDefaultProbabilityTermStructureSurvivalProbability1(QlDefaultProbabilityTermStructure* o, double t, int extrapolate, QlError **e);+  double qlDefaultProbabilityTermStructureSurvivalProbability(QlDefaultProbabilityTermStructure* o, int d, int extrapolate, QlError **e);    void qlFreeZeroInflationTermStructure(QlZeroInflationTermStructure *o);   QlTermStructure* qlZeroInflationTermStructureAsTermStructure(QlZeroInflationTermStructure *o);-  double qlZeroInflationTermStructureZeroRate(QlZeroInflationTermStructure* o, int d, int extrapolate, char **e);+  double qlZeroInflationTermStructureZeroRate(QlZeroInflationTermStructure* o, int d, int extrapolate, QlError **e);   void qlFreeYoYInflationTermStructure(QlYoYInflationTermStructure *o);   QlTermStructure* qlYoYInflationTermStructureAsTermStructure(QlYoYInflationTermStructure *o);-  double qlYoYInflationTermStructureYoYRate(QlYoYInflationTermStructure* o, int d, int extrapolate, char **e);+  double qlYoYInflationTermStructureYoYRate(QlYoYInflationTermStructure* o, int d, int extrapolate, QlError **e);    /* CommodityCurve -- a plain TermStructure leaf, per qlaux.h's QlCommodityCurve comment. */   QlCommodityCurve* qlCommodityCurve(char *name, CommodityType *commodityType, Currency *currency,                                      UnitOfMeasure *unitOfMeasure, Calendar *calendar,                                      unsigned datesLen, int *dates, unsigned pricesLen, double *prices,-                                     DayCounter *dayCounter, char **e);+                                     DayCounter *dayCounter, QlError **e);   void qlFreeCommodityCurve(QlCommodityCurve *o);   QlTermStructure* qlCommodityCurveAsTermStructure(QlCommodityCurve *o);   char *qlCommodityCurveName(QlCommodityCurve *o);-  CommodityType *qlCommodityCurveCommodityType(QlCommodityCurve *o, char **e);-  UnitOfMeasure *qlCommodityCurveUnitOfMeasure(QlCommodityCurve *o, char **e);-  Currency *qlCommodityCurveCurrency(QlCommodityCurve *o, char **e);-  void qlCommodityCurveDates(QlCommodityCurve *o, unsigned *count, int **days, char **e);-  void qlCommodityCurvePrices(QlCommodityCurve *o, unsigned *count, double **prices, char **e);+  CommodityType *qlCommodityCurveCommodityType(QlCommodityCurve *o, QlError **e);+  UnitOfMeasure *qlCommodityCurveUnitOfMeasure(QlCommodityCurve *o, QlError **e);+  Currency *qlCommodityCurveCurrency(QlCommodityCurve *o, QlError **e);+  void qlCommodityCurveDates(QlCommodityCurve *o, unsigned *count, int **days, QlError **e);+  void qlCommodityCurvePrices(QlCommodityCurve *o, unsigned *count, double **prices, QlError **e);   int qlCommodityCurveEmpty(QlCommodityCurve *o);   QlCommodityCurve *qlCommodityCurveBasisOfCurve(QlCommodityCurve *o);-  void qlCommodityCurveSetBasisOfCurve(QlCommodityCurve *o, QlCommodityCurve *basisOfCurve, char **e);+  void qlCommodityCurveSetBasisOfCurve(QlCommodityCurve *o, QlCommodityCurve *basisOfCurve, QlError **e);   /* Full price()/underlyingPriceDate() signature, threading a real ExchangeContracts map (as 5      parallel arrays -- map key, code, expirationDate, underlyingStartDate, underlyingEndDate --      per the "c2hs's & caps at 2" precedent already used for Quantity's 3 flat args) and a@@ -349,90 +394,100 @@   double qlCommodityCurvePrice(QlCommodityCurve *o, int date,       unsigned ecLen1, int *ecKeys, unsigned ecLen2, char **ecCodes,       unsigned ecLen3, int *ecExpirations, unsigned ecLen4, int *ecStarts,-      unsigned ecLen5, int *ecEnds, int nearbyOffset, char **e);-  double qlCommodityCurveBasisOfPrice(QlCommodityCurve *o, int date, char **e);+      unsigned ecLen5, int *ecEnds, int nearbyOffset, QlError **e);+  double qlCommodityCurveBasisOfPrice(QlCommodityCurve *o, int date, QlError **e);   int qlCommodityCurveUnderlyingPriceDate(QlCommodityCurve *o, int date,       unsigned ecLen1, int *ecKeys, unsigned ecLen2, char **ecCodes,       unsigned ecLen3, int *ecExpirations, unsigned ecLen4, int *ecStarts,-      unsigned ecLen5, int *ecEnds, int nearbyOffset, char **e);+      unsigned ecLen5, int *ecEnds, int nearbyOffset, QlError **e);    /* CommodityIndex is an Index leaf. ExchangeContracts/nearbyOffset are constructor echoes and      not exposed; the shim selects the empty-contract branch used by forwardPrice. */   QlCommodityIndex* qlCommodityIndex(char *name, CommodityType *commodityType, Currency *currency,                                      UnitOfMeasure *unitOfMeasure, Calendar *calendar,-                                     double lotQuantity, QlCommodityCurve *forwardCurve, char **e);+                                     double lotQuantity, QlCommodityCurve *forwardCurve, QlError **e);   void qlFreeCommodityIndex(QlCommodityIndex *o);   QlIndex* qlCommodityIndexAsIndex(QlCommodityIndex *o);-  double qlCommodityIndexForwardPrice(QlCommodityIndex *o, int date, char **e);-  int qlCommodityIndexLastQuoteDate(QlCommodityIndex *o, char **e);+  double qlCommodityIndexForwardPrice(QlCommodityIndex *o, int date, QlError **e);+  int qlCommodityIndexLastQuoteDate(QlCommodityIndex *o, QlError **e);   int qlCommodityIndexEmpty(QlCommodityIndex *o);    void qlFreeZeroCouponInflationSwapHelper(QlZeroCouponInflationSwapHelper *o);-  QlZeroCouponInflationSwapHelper* qlZeroCouponInflationSwapHelper(QlQuote* quote, int, int, int maturity, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlZeroInflationIndex* zii, int observationInterpolation, int pillar, int customPillarDate, char **e);+  double qlZeroCouponInflationSwapHelperImpliedQuoteOn(QlZeroCouponInflationSwapHelper *o, QlZeroInflationTermStructure *curve, QlError **e);+  double qlYearOnYearInflationSwapHelperImpliedQuoteOn(QlYearOnYearInflationSwapHelper *o, QlYoYInflationTermStructure *curve, QlError **e);+  QlZeroCouponInflationSwapHelper* qlZeroCouponInflationSwapHelper(QlQuote* quote, int, int, int maturity, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlZeroInflationIndex* zii, int observationInterpolation, int pillar, int customPillarDate, QlError **e);+  QlZeroCouponInflationSwapHelper* qlZeroCouponInflationSwapHelper2(QlQuote* quote, int, int, int startDate, int endDate, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlZeroInflationIndex* zii, int observationInterpolation, int pillar, int customPillarDate, QlError **e);   void qlFreeYearOnYearInflationSwapHelper(QlYearOnYearInflationSwapHelper *o);-  QlYearOnYearInflationSwapHelper* qlYearOnYearInflationSwapHelper(QlQuote* quote, int, int, int maturity, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlYoYInflationIndex* yii, int observationInterpolation, QlYieldTermStructure* nominalTermStructure, int pillar, int customPillarDate, char **e);-  QlZeroCouponInflationSwap* qlZeroCouponInflationSwapHelperSwap(QlZeroCouponInflationSwapHelper* o, char **e);-  QlYearOnYearInflationSwap* qlYearOnYearInflationSwapHelperSwap(QlYearOnYearInflationSwapHelper* o, char **e);+  QlYearOnYearInflationSwapHelper* qlYearOnYearInflationSwapHelper(QlQuote* quote, int, int, int maturity, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlYoYInflationIndex* yii, int observationInterpolation, QlYieldTermStructure* nominalTermStructure, int pillar, int customPillarDate, QlError **e);+  QlYearOnYearInflationSwapHelper* qlYearOnYearInflationSwapHelper2(QlQuote* quote, int, int, int startDate, int endDate, Calendar* calendar, int paymentConvention, DayCounter* dayCounter, QlYoYInflationIndex* yii, int observationInterpolation, QlYieldTermStructure* nominalTermStructure, int pillar, int customPillarDate, QlError **e);+  QlZeroCouponInflationSwap* qlZeroCouponInflationSwapHelperSwap(QlZeroCouponInflationSwapHelper* o, QlError **e);+  QlYearOnYearInflationSwap* qlYearOnYearInflationSwapHelperSwap(QlYearOnYearInflationSwapHelper* o, QlError **e); -  QlZeroInflationTermStructure* qlPiecewiseZeroInflationCurve(int referenceDate, int baseDate, int frequency, DayCounter* dayCounter, unsigned instrumentsLen, QlZeroCouponInflationSwapHelper** instruments, int interpolator, int approximator, int approximatorArg, char **e);-  QlYoYInflationTermStructure* qlPiecewiseYoYInflationCurve(int referenceDate, int baseDate, double baseYoYRate, int frequency, DayCounter* dayCounter, unsigned instrumentsLen, QlYearOnYearInflationSwapHelper** instruments, int interpolator, int approximator, int approximatorArg, char **e);+  // seasKind: -1 none, 0 MultiplicativePriceSeasonality, 1 KerkhofSeasonality.+  QlZeroInflationTermStructure* qlPiecewiseZeroInflationCurve(int referenceDate, int baseDate, int frequency, DayCounter* dayCounter, unsigned instrumentsLen, QlZeroCouponInflationSwapHelper** instruments,+      int seasKind, int seasBaseDate, int seasFreq, unsigned seasLen, double *seasFactors, int interpolator, int approximator, int approximatorArg, QlError **e);+  QlYoYInflationTermStructure* qlPiecewiseYoYInflationCurve(int referenceDate, int baseDate, double baseYoYRate, int frequency, DayCounter* dayCounter, unsigned instrumentsLen, QlYearOnYearInflationSwapHelper** instruments,+      int seasKind, int seasBaseDate, int seasFreq, unsigned seasLen, double *seasFactors, int interpolator, int approximator, int approximatorArg, QlError **e);   QlYoYInflationTermStructure* qlInterpolatedYoYInflationCurve(int referenceDate, unsigned datesLen, int *dates, double *rates, int frequency, DayCounter* dayCounter,-      int interpolator, int approximator, int approximatorArg, char **e);+      int seasKind, int seasBaseDate, int seasFreq, unsigned seasLen, double *seasFactors, int interpolator, int approximator, int approximatorArg, QlError **e);+  QlZeroInflationTermStructure* qlInterpolatedZeroInflationCurve(int referenceDate, unsigned datesLen, int *dates, double *rates, int frequency, DayCounter* dayCounter,+      int seasKind, int seasBaseDate, int seasFreq, unsigned seasLen, double *seasFactors, int interpolator, int approximator, int approximatorArg, QlError **e); -  QlRateHelper *qlDepositRateHelper(QlQuote *quote, int, int, unsigned fixDays, Calendar *calendar, int conv, int eom, DayCounter *dayCount, char **e);-  QlBondHelper *qlFixedRateBondHelper(QlQuote *quote, unsigned settlDays, double face, Schedule *sched, unsigned cLen, double *coupons, DayCounter *dayCount, int conv, double redemption, int issue, char **e);-  QlBondHelper *qlCPIBondHelper(QlQuote *quote, unsigned settlementDays, double faceAmount, double baseCPI, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* index, int observationInterpolation, Schedule *schedule, unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate, Calendar *paymentCalendar, char **e);-  QlYieldTermStructure *qlPiecewiseYieldCurve1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, int extrapolate, char **e);+  // Every fixing this helper needs, as parallel (index name, fixing date) arrays. Defined beside+  // qlLegFixingDependencies in qlInstrument.cpp, which is where the cash-flow walk it shares+  // lives; see the comment there for which helpers can answer and which contribute nothing.+  void qlRateHelperFixingDependencies(QlRateHelper *helper, unsigned *nameLen, char ***names, unsigned *dateLen, int **dates, int *reachable, QlError **e);+  QlRateHelper *qlDepositRateHelper(QlQuote *quote, int, int, unsigned fixDays, Calendar *calendar, int conv, int eom, DayCounter *dayCount, QlError **e);+  QlBondHelper *qlFixedRateBondHelper(QlQuote *quote, unsigned settlDays, double face, Schedule *sched, unsigned cLen, double *coupons, DayCounter *dayCount, int conv, double redemption, int issue, QlError **e);+  QlBondHelper *qlCPIBondHelper(QlQuote *quote, unsigned settlementDays, double faceAmount, double baseCPI, int obsLagLen, int obsLagUnit, QlZeroInflationIndex* index, int observationInterpolation, Schedule *schedule, unsigned couponsLen, double *coupons, DayCounter *accrualDayCounter, int paymentConvention, int issueDate, Calendar *paymentCalendar, QlError **e);+  QlYieldTermStructure *qlPiecewiseYieldCurve1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, int extrapolate, QlError **e);   // Full-arity counterparts of the two above, additionally taking every IterativeBootstrap   // constructor parameter (ql/termstructures/iterativebootstrap.hpp). Separate entry points   // rather than nine more params on the narrow ones, so the narrow Haskell bindings keep   // their signatures -- see QuantLib/Internal/Common.chs's IterativeBootstrapOpts.   // accuracy/minValue/maxValue take qlNullReal() for "upstream's default".-  QlYieldTermStructure *qlPiecewiseYieldCurveFull(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, char **e);-  QlYieldTermStructure *qlPiecewiseYieldCurveFull1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, int extrapolate, char **e);-  // Dedicated GlobalBootstrap entry point, hardcoding trait=Discount/interpolator=LogLinear in-  // the shim itself (see qlTermStructureAux.cpp) rather than taking those as Haskell-visible-  // params -- CLAUDE.md's "dedicated constructor hardcodes the enum value" pattern.-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e);-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed1(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveFull(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, QlError **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveFull1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, int extrapolate, QlError **e);+  // GlobalBootstrap entry point with fixed Discount/LogLinear dispatch.+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed1(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e);   // Same shape as qlPiecewiseYieldCurveGlobalBootstrap1, hardcoding trait=SimpleZeroYield/   // interpolator=Linear instead -- QuantLib-SWIG's only bound GlobalBootstrap combination   // (GlobalLinearSimpleZeroCurve).-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap2(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e);-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed2(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e);-  // Same shape as qlPiecewiseYieldCurveGlobalBootstrap1/2, hardcoding trait=ForwardRate/-  // interpolator=Linear and trait=ZeroYield/interpolator=Linear respectively -- issue #15's two-  // next-cheapest, most generically useful GlobalBootstrap combinations.-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap4(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e);-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap5(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e);-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed4(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e);-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed5(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, char **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap2(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed2(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e);+  // ForwardRate/Linear and ZeroYield/Linear GlobalBootstrap variants.+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap4(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap5(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed4(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed5(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, double accuracy, unsigned weightsLen, double *weights, int extrapolate, QlCallback* initialGuess, QlError **e);   // trait=SimpleZeroYield/interpolator=Linear via GlobalBootstrap's functor-callback   // constructor (canned AdditionalErrors/AdditionalDates -- see qlTermStructureAux.cpp).   // additionalDatesLen must equal additionalRateLen - 2.-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap3(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, unsigned additionalRateLen, QlRateHelper **additionalRatehelpers, unsigned additionalDatesLen, int *additionalDates, double accuracy, int extrapolate, char **e);-  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed3(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, unsigned additionalRateLen, QlRateHelper **additionalRatehelpers, unsigned additionalDatesLen, int *additionalDates, double accuracy, int extrapolate, char **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrap3(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, unsigned additionalRateLen, QlRateHelper **additionalRatehelpers, unsigned additionalDatesLen, int *additionalDates, double accuracy, int extrapolate, unsigned weightsLen, double* weights, QlCallback* initialGuess, QlError **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFixed3(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, unsigned additionalRateLen, QlRateHelper **additionalRatehelpers, unsigned additionalDatesLen, int *additionalDates, double accuracy, int extrapolate, unsigned weightsLen, double* weights, QlCallback* initialGuess, QlError **e);   // Dedicated LocalBootstrap entry point: interpolator is always ConvexMonotone (the only   // upstream interpolator LocalBootstrap works with -- see qlTermStructureAux.cpp), so trait is   // the only Haskell-visible dispatch axis here; localisation/forcePositive/accuracy are   // LocalBootstrap's own constructor params, quadraticity/monotonicity/convexForcePositive are   // ConvexMonotone's.-  QlYieldTermStructure *qlPiecewiseYieldCurveLocalBootstrap1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, unsigned localisation, int forcePositive, double accuracy, double quadraticity, double monotonicity, int convexForcePositive, int extrapolate, char **e);-  QlYieldTermStructure *qlPiecewiseYieldCurveLocalBootstrapFixed(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, unsigned localisation, int forcePositive, double accuracy, double quadraticity, double monotonicity, int convexForcePositive, int extrapolate, char **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveLocalBootstrap1(unsigned settl, Calendar *cal, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, unsigned localisation, int forcePositive, double accuracy, double quadraticity, double monotonicity, int convexForcePositive, int extrapolate, QlError **e);+  QlYieldTermStructure *qlPiecewiseYieldCurveLocalBootstrapFixed(int date, unsigned rateLen, QlRateHelper **ratehelpers, DayCounter *dayCount, unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int trait, unsigned localisation, int forcePositive, double accuracy, double quadraticity, double monotonicity, int convexForcePositive, int extrapolate, QlError **e); -  QlMultiCurve *qlMultiCurve(double accuracy, char **e);+  QlMultiCurve *qlMultiCurve(double accuracy, QlError **e);   void qlFreeMultiCurve(QlMultiCurve *o);-  QlYieldTermStructure *qlMultiCurveAddBootstrappedCurve(QlMultiCurve *mc, QlRelinkableYieldTermStructure *internalHandle, QlYieldTermStructure *curve, char **e);-  QlYieldTermStructure *qlMultiCurveAddNonBootstrappedCurve(QlMultiCurve *mc, QlRelinkableYieldTermStructure *internalHandle, QlYieldTermStructure *curve, char **e);+  QlYieldTermStructure *qlMultiCurveAddBootstrappedCurve(QlMultiCurve *mc, QlRelinkableYieldTermStructure *internalHandle, QlYieldTermStructure *curve, QlError **e);+  QlYieldTermStructure *qlMultiCurveAddNonBootstrappedCurve(QlMultiCurve *mc, QlRelinkableYieldTermStructure *internalHandle, QlYieldTermStructure *curve, QlError **e); -  QlRateHelper *qlIborIborBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar *calendar, int convention, int endOfMonth, QlIborIndex *baseIndex, QlIborIndex *otherIndex, QlYieldTermStructure *discountHandle, int bootstrapBaseCurve, char **e);-  QlRateHelper *qlOvernightIborBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar *calendar, int convention, int endOfMonth, QlOvernightIndex *baseIndex, QlIborIndex *otherIndex, QlYieldTermStructure *discountHandle, char **e);-  QlRateHelper *qlConstNotionalCrossCurrencyBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth, QlIborIndex *baseCurrencyIndex, QlIborIndex *quoteCurrencyIndex, QlYieldTermStructure *collateralCurve, int isFxBaseCurrencyCollateralCurrency, int isBasisOnFxBaseCurrencyLeg, int paymentFrequency, int paymentLag, int quoteCurrencyPaymentFrequency, char **e);-  QlRateHelper *qlMtMCrossCurrencyBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth, QlIborIndex *baseCurrencyIndex, QlIborIndex *quoteCurrencyIndex, QlYieldTermStructure *collateralCurve, int isFxBaseCurrencyCollateralCurrency, int isBasisOnFxBaseCurrencyLeg, int isFxBaseCurrencyLegResettable, int paymentFrequency, int paymentLag, int quoteCurrencyPaymentFrequency, char **e);-  QlRateHelper *qlConstNotionalCrossCurrencySwapRateHelper(QlQuote *fixedRate, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth, int fixedFrequency, DayCounter *fixedDayCount, QlIborIndex *floatIndex, QlYieldTermStructure *collateralCurve, int collateralOnFixedLeg, int paymentLag, char **e);-  QlRateHelper *qlFxSwapRateHelper(QlQuote *fwdPoint, QlQuote *spotFx, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth, int isFxBaseCurrencyCollateralCurrency, QlYieldTermStructure *collateralCurve, Calendar *tradingCalendar, char **e);-  QlRateHelper *qlFxSwapRateHelper2(QlQuote *fwdPoint, QlQuote *spotFx, int startDate, int endDate, int isFxBaseCurrencyCollateralCurrency, QlYieldTermStructure *collateralCurve, char **e);-  QlSwapRateHelper *qlSwapRateHelper1(QlQuote *q, int, int, Calendar *cal, int freq, int conv, DayCounter *dc, QlIborIndex *i, QlQuote *s, int, int, QlYieldTermStructure *ts, unsigned settlementDays, int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons, int floatConvention, QlFloatingRateCouponPricer *couponPricer, char **e);+  QlRateHelper *qlIborIborBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar *calendar, int convention, int endOfMonth, QlIborIndex *baseIndex, QlIborIndex *otherIndex, QlYieldTermStructure *discountHandle, int bootstrapBaseCurve, int useIndexedCoupons, int rule, int paymentLag, QlStubIndexSelection* baseStub, QlStubIndexSelection* otherStub, QlError **e);+  QlRateHelper *qlOvernightIborBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar *calendar, int convention, int endOfMonth, QlOvernightIndex *baseIndex, QlIborIndex *otherIndex, QlYieldTermStructure *discountHandle, int bootstrapBaseCurve, int paymentLag, int overnightPaymentFrequency, int useIndexedCoupons, int rule, int averagingMethod, int telescopicValueDates, int basisOnIborLeg, QlStubIndexSelection* iborStub, QlError **e);+  QlRateHelper *qlConstNotionalCrossCurrencyBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth, QlIborIndex *baseCurrencyIndex, QlIborIndex *quoteCurrencyIndex, QlYieldTermStructure *collateralCurve, int isFxBaseCurrencyCollateralCurrency, int isBasisOnFxBaseCurrencyLeg, int paymentFrequency, int paymentLag, int quoteCurrencyPaymentFrequency, int useIndexedCoupons, int paymentLagOnNotionalExchanges, QlStubIndexSelection* baseStub, QlStubIndexSelection* quoteStub, QlError **e);+  QlRateHelper *qlMtMCrossCurrencyBasisSwapRateHelper(QlQuote *basis, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth, QlIborIndex *baseCurrencyIndex, QlIborIndex *quoteCurrencyIndex, QlYieldTermStructure *collateralCurve, int isFxBaseCurrencyCollateralCurrency, int isBasisOnFxBaseCurrencyLeg, int isFxBaseCurrencyLegResettable, int paymentFrequency, int paymentLag, int quoteCurrencyPaymentFrequency, unsigned fxResetFixingDays, Calendar* fxResetFixingCalendar, int useIndexedCoupons, QlStubIndexSelection* baseStub, QlStubIndexSelection* quoteStub, QlError **e);+  QlRateHelper *qlConstNotionalCrossCurrencySwapRateHelper(QlQuote *fixedRate, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth, int fixedFrequency, DayCounter *fixedDayCount, QlIborIndex *floatIndex, QlYieldTermStructure *collateralCurve, int collateralOnFixedLeg, int paymentLag, int useIndexedCoupons, int floatPaymentFrequency, QlStubIndexSelection* floatStub, QlError **e);+  QlRateHelper *qlFxSwapRateHelper(QlQuote *fwdPoint, QlQuote *spotFx, int tenorLen, int tenorUnit, unsigned fixingDays, Calendar *calendar, int convention, int endOfMonth, int isFxBaseCurrencyCollateralCurrency, QlYieldTermStructure *collateralCurve, Calendar *tradingCalendar, QlError **e);+  QlRateHelper *qlFxSwapRateHelper2(QlQuote *fwdPoint, QlQuote *spotFx, int startDate, int endDate, int isFxBaseCurrencyCollateralCurrency, QlYieldTermStructure *collateralCurve, QlError **e);+  QlSwapRateHelper *qlSwapRateHelper1(QlQuote *q, int, int, Calendar *cal, int freq, int conv, DayCounter *dc, QlIborIndex *i, QlQuote *s, int, int, QlYieldTermStructure *ts, unsigned settlementDays, int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons, int floatConvention, QlFloatingRateCouponPricer *couponPricer, QlError **e);+  QlSwapRateHelper *qlSwapRateHelper2(QlQuote *q, int startDate, int endDate, Calendar *cal, int freq, int conv, DayCounter *dc, QlIborIndex *i, QlQuote *s, QlYieldTermStructure *ts, int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons, int floatConvention, QlFloatingRateCouponPricer *couponPricer, QlError **e);   void qlFreeSwapRateHelper(QlSwapRateHelper *o);   QlRateHelper* qlSwapRateHelperAsRateHelper(QlSwapRateHelper *o); @@ -440,106 +495,121 @@   QlRateHelper* qlBondHelperAsRateHelper(QlBondHelper *o);    void qlFreeRateHelper(QlRateHelper *helper);-  QlRateHelper* qlFraRateHelper(QlQuote* rate, unsigned monthsToStart, unsigned monthsToEnd, unsigned fixingDays, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, int pillar, int customPillarDate, int useIndexedCoupon, char **e);+  QlRateHelper* qlFraRateHelper(QlQuote* rate, unsigned monthsToStart, unsigned monthsToEnd, unsigned fixingDays, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e);    void qlFreeOISRateHelper(QlOISRateHelper *o);   QlRateHelper* qlOISRateHelperAsRateHelper(QlOISRateHelper *o);-  QlBondHelper* qlBondHelper(QlQuote* cleanPrice, QlBond* bond, int priceType, char **e);+  QlBondHelper* qlBondHelper(QlQuote* cleanPrice, QlBond* bond, int priceType, QlError **e);   QlOISRateHelper* qlOISRateHelper(unsigned settlementDays, int, int, QlQuote* fixedRate, QlOvernightIndex* overnightIndex, QlYieldTermStructure* discountingCurve,     int telescopicValueDates, int paymentLag, int paymentConvention, int paymentFrequency, Calendar* paymentCalendar,     int, int, QlQuote* overnightSpread, int pillar, int customPillarDate, int averagingMethod, int endOfMonth, int fixedPaymentFrequency,     Calendar* fixedCalendar, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift,-    QlFloatingRateCouponPricer* pricer, int rule, Calendar* overnightCalendar, int convention, char **e);+    QlFloatingRateCouponPricer* pricer, int rule, Calendar* overnightCalendar, int convention, DayCounter* fixedDayCount, QlError **e);   QlOISRateHelper* qlOISRateHelper2(int, int, QlQuote* fixedRate, QlOvernightIndex* overnightIndex, QlYieldTermStructure* discountingCurve,     int telescopicValueDates, int paymentLag, int paymentConvention, int paymentFrequency, Calendar* paymentCalendar,     QlQuote* overnightSpread, int pillar, int customPillarDate, int averagingMethod, int endOfMonth, int fixedPaymentFrequency,     Calendar* fixedCalendar, unsigned lookbackDays, unsigned lockoutDays, int applyObservationShift,-    QlFloatingRateCouponPricer* pricer, int rule, Calendar* overnightCalendar, int convention, char **e);-  QlSwapRateHelper* qlSwapRateHelper(QlQuote* rate, QlSwapIndex* swapIndex, QlQuote* spread, int, int, QlYieldTermStructure* discountingCurve, int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons, QlFloatingRateCouponPricer *couponPricer, char **e);-  QlRateHelper* qlBMASwapRateHelper(QlQuote* liborFraction, int, int, unsigned settlementDays, Calendar* calendar, int, int, int bmaConvention, DayCounter* bmaDayCount, QlBMAIndex* bmaIndex, QlIborIndex* index, char **e);-  QlRateHelper* qlDepositRateHelper1(QlQuote* rate, QlIborIndex* iborIndex, char **e);-  QlRateHelper* qlFraRateHelper1(QlQuote* rate, unsigned monthsToStart, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, char **e);-  QlRateHelper* qlFraRateHelper2(QlQuote* rate, int, int, unsigned lengthInMonths, unsigned fixingDays, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, int pillar, int customPillarDate, int useIndexedCoupon, char **e);-  QlRateHelper* qlFraRateHelper3(QlQuote* rate, int, int, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, char **e);-  QlFuturesRateHelper* qlFuturesRateHelper1(QlQuote* price, int immStartDate, int endDate, DayCounter* dayCounter, QlQuote* convexityAdjustment, int type, char **e);-  QlFuturesRateHelper* qlFuturesRateHelper2(QlQuote* price, int immDate, QlIborIndex* iborIndex, QlQuote* convexityAdjustment, int type, char **e);-  QlFuturesRateHelper* qlFuturesRateHelper(QlQuote* price, int immDate, unsigned lengthInMonths, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, QlQuote* convexityAdjustment, int type, char **e);+    QlFloatingRateCouponPricer* pricer, int rule, Calendar* overnightCalendar, int convention, DayCounter* fixedDayCount, QlError **e);+  QlSwapRateHelper* qlSwapRateHelper(QlQuote* rate, QlSwapIndex* swapIndex, QlQuote* spread, int, int, QlYieldTermStructure* discountingCurve, int pillar, int customPillarDate, int endOfMonth, int useIndexedCoupons, QlFloatingRateCouponPricer *couponPricer, QlError **e);+  QlRateHelper* qlBMASwapRateHelper(QlQuote* liborFraction, int, int, unsigned settlementDays, Calendar* calendar, int, int, int bmaConvention, DayCounter* bmaDayCount, QlBMAIndex* bmaIndex, QlIborIndex* index, QlError **e);+  QlRateHelper* qlDepositRateHelper1(QlQuote* rate, QlIborIndex* iborIndex, QlError **e);+  QlRateHelper* qlDepositRateHelper2(QlQuote* rate, int fixingDate, QlIborIndex* iborIndex, QlError **e);+  QlRateHelper* qlFraRateHelper1(QlQuote* rate, unsigned monthsToStart, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e);+  QlRateHelper* qlFraRateHelper2(QlQuote* rate, int, int, unsigned lengthInMonths, unsigned fixingDays, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e);+  QlRateHelper* qlFraRateHelper3(QlQuote* rate, int, int, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e);+  QlRateHelper* qlFraRateHelper4(QlQuote* rate, int startDate, int endDate, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e);+  QlRateHelper* qlFraRateHelper5(QlQuote* rate, unsigned immOffsetStart, unsigned immOffsetEnd, QlIborIndex* iborIndex, int pillar, int customPillarDate, int useIndexedCoupon, QlError **e);+  QlFuturesRateHelper* qlFuturesRateHelper1(QlQuote* price, int immStartDate, int endDate, DayCounter* dayCounter, QlQuote* convexityAdjustment, int type, QlError **e);+  QlFuturesRateHelper* qlFuturesRateHelper2(QlQuote* price, int immDate, QlIborIndex* iborIndex, QlQuote* convexityAdjustment, int type, QlError **e);+  QlFuturesRateHelper* qlFuturesRateHelper(QlQuote* price, int immDate, unsigned lengthInMonths, Calendar* calendar, int convention, int endOfMonth, DayCounter* dayCounter, QlQuote* convexityAdjustment, int type, QlError **e);   void qlFreeFuturesRateHelper(QlFuturesRateHelper *o);   QlRateHelper* qlFuturesRateHelperAsRateHelper(QlFuturesRateHelper *o);-  double qlFuturesRateHelperConvexityAdjustment(QlFuturesRateHelper *o, char **e);-  QlOvernightIndexFutureRateHelper* qlOvernightIndexFutureRateHelper(QlQuote* price, int valueDate, int maturityDate, QlOvernightIndex* overnightIndex, QlQuote* convexityAdjustment, int averagingMethod, int pillar, int customPillarDate, char **e);+  double qlFuturesRateHelperConvexityAdjustment(QlFuturesRateHelper *o, QlError **e);+  QlOvernightIndexFutureRateHelper* qlOvernightIndexFutureRateHelper(QlQuote* price, int valueDate, int maturityDate, QlOvernightIndex* overnightIndex, QlQuote* convexityAdjustment, int averagingMethod, int pillar, int customPillarDate, QlError **e);   void qlFreeOvernightIndexFutureRateHelper(QlOvernightIndexFutureRateHelper *o);   QlRateHelper* qlOvernightIndexFutureRateHelperAsRateHelper(QlOvernightIndexFutureRateHelper *o);-  double qlOvernightIndexFutureRateHelperConvexityAdjustment(QlOvernightIndexFutureRateHelper *o, char **e);-  QlRateHelper* qlSofrFutureRateHelper(QlQuote* price, int month, int year, int freq, QlQuote* convexityAdjustment, int pillar, int customPillarDate, char **e);-  double qlRateHelperImpliedQuote(QlRateHelper* o, char **e);-  QlBond* qlBondHelperBond(QlBondHelper* o, char **e);-  QlOvernightIndexedSwap* qlOISRateHelperSwap(QlOISRateHelper* o, char **e);-  QlVanillaSwap* qlSwapRateHelperSwap(QlSwapRateHelper* o, char **e);+  double qlOvernightIndexFutureRateHelperConvexityAdjustment(QlOvernightIndexFutureRateHelper *o, QlError **e);+  QlRateHelper* qlSofrFutureRateHelper(QlQuote* price, int month, int year, int freq, QlQuote* convexityAdjustment, int pillar, int customPillarDate, QlError **e);+  double qlRateHelperImpliedQuote(QlRateHelper* o, QlError **e);+  double qlRateHelperImpliedQuoteOn(QlRateHelper* o, QlYieldTermStructure* curve, QlError **e);+  QlBond* qlBondHelperBond(QlBondHelper* o, QlError **e);+  QlOvernightIndexedSwap* qlOISRateHelperSwap(QlOISRateHelper* o, QlError **e);+  QlVanillaSwap* qlSwapRateHelperSwap(QlSwapRateHelper* o, QlError **e);   void qlFreeYieldTermStructure(QlYieldTermStructure *ts);-  QlRelinkableYieldTermStructure* qlRelinkableYieldTermStructure(QlYieldTermStructure *initial, char **e);+  QlRelinkableYieldTermStructure* qlRelinkableYieldTermStructure(QlYieldTermStructure *initial, QlError **e);   void qlFreeRelinkableYieldTermStructure(QlRelinkableYieldTermStructure *o);-  void qlRelinkableYieldTermStructureLinkTo(QlRelinkableYieldTermStructure *o, QlYieldTermStructure *c, char **e);+  void qlRelinkableYieldTermStructureLinkTo(QlRelinkableYieldTermStructure *o, QlYieldTermStructure *c, QlError **e);   QlYieldTermStructure* qlRelinkableYieldTermStructureAsYieldTermStructure(QlRelinkableYieldTermStructure *o);   double qlYieldTSDiscount(QlYieldTermStructure *ts, int date,-    int extrapolate, char **e);-  QlYieldTermStructure* qlFlatForward(int referenceDate, QlQuote* forward, DayCounter* dayCounter, int compounding, int frequency, char **e);-  QlYieldTermStructure* qlFlatForward1(unsigned settlementDays, Calendar* calendar, QlQuote* forward, DayCounter* dayCounter, int compounding, int frequency, char **e);-  QlYieldTermStructure* qlCompositeZeroYieldStructure(QlYieldTermStructure* curve1, QlYieldTermStructure* curve2, double (*fn)(double, double), int compounding, int frequency, char **e);-  InterestRate* qlYieldTermStructureZeroRate(QlYieldTermStructure* o, int d, DayCounter* resultDayCounter, int comp, int freq, int extrapolate, char **e);-  InterestRate* qlYieldTermStructureForwardRate(QlYieldTermStructure* o, int d1, int d2, DayCounter* resultDayCounter, int comp, int freq, int extrapolate, char **e);-  InterestRate* qlYieldTermStructureForwardRate2(QlYieldTermStructure* o, double t1, double t2, int comp, int freq, int extrapolate, char **e);-  InterestRate* qlYieldTermStructureZeroRate1(QlYieldTermStructure* o, double t, int comp, int freq, int extrapolate, char **e);-  double qlYieldTermStructureDiscount1(QlYieldTermStructure* o, double t, int extrapolate, char **e);+    int extrapolate, QlError **e);+  QlYieldTermStructure* qlFlatForward(int referenceDate, QlQuote* forward, DayCounter* dayCounter, int compounding, int frequency, QlError **e);+  QlYieldTermStructure* qlFlatForward1(unsigned settlementDays, Calendar* calendar, QlQuote* forward, DayCounter* dayCounter, int compounding, int frequency, QlError **e);+  QlYieldTermStructure* qlCompositeZeroYieldStructure(QlYieldTermStructure* curve1, QlYieldTermStructure* curve2, QlCallback* fn, int compounding, int frequency, QlError **e);+  InterestRate* qlYieldTermStructureZeroRate(QlYieldTermStructure* o, int d, DayCounter* resultDayCounter, int comp, int freq, int extrapolate, QlError **e);+  InterestRate* qlYieldTermStructureForwardRate(QlYieldTermStructure* o, int d1, int d2, DayCounter* resultDayCounter, int comp, int freq, int extrapolate, QlError **e);+  InterestRate* qlYieldTermStructureForwardRate2(QlYieldTermStructure* o, double t1, double t2, int comp, int freq, int extrapolate, QlError **e);+  InterestRate* qlYieldTermStructureZeroRate1(QlYieldTermStructure* o, double t, int comp, int freq, int extrapolate, QlError **e);+  double qlYieldTermStructureDiscount1(QlYieldTermStructure* o, double t, int extrapolate, QlError **e);    QlYieldTermStructure *qlInterpolatedDiscountCurve(unsigned dfsLen,     double *dfs, unsigned dfdatesLen, int *dfsDates, DayCounter *dayCount, Calendar *cal,-    unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, int extrapolate, char **e);+    unsigned quoteLen, QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, int extrapolate, QlError **e);   QlYieldTermStructure *qlInterpolatedForwardCurve(unsigned fwdLen,     double *fwds, unsigned fwddatesLen, int *fwdDates, DayCounter *dayCount, Calendar *cal, unsigned quoteLen,-    QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, char **e);+    QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, QlError **e);   QlYieldTermStructure *qlInterpolatedZeroCurve(unsigned yieldLen,     double *yields, unsigned ydatesLen, int *yieldDates, DayCounter *dayCount, Calendar *cal, unsigned quoteLen,-    QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, char **e);+    QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, QlError **e);+  QlYieldTermStructure *qlInterpolatedSimpleZeroCurve(unsigned yieldLen,+    double *yields, unsigned ydatesLen, int *yieldDates, DayCounter *dayCount, Calendar *cal, unsigned quoteLen,+    QlQuote **quotes, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, QlError **e);   void qlFreeFittedBondDiscountCurveFittingMethod(FittedBondDiscountCurveFittingMethod *o);-  FittedBondDiscountCurveFittingMethod* qlCubicBSplinesFitting(unsigned knotVectorLen, double * knotVector, int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, char **e);-  FittedBondDiscountCurveFittingMethod* qlExponentialSplinesFitting(int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, unsigned numCoeffs, double fixedKappa, QlOptimizationMethod* method, Constraint* constraint, char **e);-  FittedBondDiscountCurveFittingMethod* qlNelsonSiegelFitting(unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, char **e);-  FittedBondDiscountCurveFittingMethod* qlSimplePolynomialFitting(unsigned degree, int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, char **e);-  FittedBondDiscountCurveFittingMethod* qlSvenssonFitting(unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, char **e);-  QlFittedBondDiscountCurve* qlFittedBondDiscountCurve(unsigned settlementDays, Calendar* calendar, unsigned bondsLen, QlBondHelper** bonds, DayCounter* dayCounter, FittedBondDiscountCurveFittingMethod* fittingMethod, double accuracy, unsigned maxEvaluations, unsigned guessLen, double *guess, double simplexLambda, char **e);-  QlFittedBondDiscountCurve* qlFittedBondDiscountCurve1(int referenceDate, unsigned bondsLen, QlBondHelper** bonds, DayCounter* dayCounter, FittedBondDiscountCurveFittingMethod* fittingMethod, double accuracy, unsigned maxEvaluations, unsigned guessLen, double *guess, double simplexLambda, char **e);+  FittedBondDiscountCurveFittingMethod* qlCubicBSplinesFitting(unsigned knotVectorLen, double * knotVector, int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, QlError **e);+  FittedBondDiscountCurveFittingMethod* qlExponentialSplinesFitting(int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, unsigned numCoeffs, double fixedKappa, QlOptimizationMethod* method, Constraint* constraint, QlError **e);+  FittedBondDiscountCurveFittingMethod* qlNelsonSiegelFitting(unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, QlError **e);+  FittedBondDiscountCurveFittingMethod* qlSimplePolynomialFitting(unsigned degree, int constrainAtZero, unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, QlError **e);+  FittedBondDiscountCurveFittingMethod* qlSvenssonFitting(unsigned weightsLen, double *weights, unsigned l2Len, double *l2, double minCutoffTime, double maxCutoffTime, QlOptimizationMethod* method, Constraint* constraint, QlError **e);+  QlFittedBondDiscountCurve* qlFittedBondDiscountCurve(unsigned settlementDays, Calendar* calendar, unsigned bondsLen, QlBondHelper** bonds, DayCounter* dayCounter, FittedBondDiscountCurveFittingMethod* fittingMethod, double accuracy, unsigned maxEvaluations, unsigned guessLen, double *guess, double simplexLambda, QlError **e);+  QlFittedBondDiscountCurve* qlFittedBondDiscountCurve1(int referenceDate, unsigned bondsLen, QlBondHelper** bonds, DayCounter* dayCounter, FittedBondDiscountCurveFittingMethod* fittingMethod, double accuracy, unsigned maxEvaluations, unsigned guessLen, double *guess, double simplexLambda, QlError **e);    void qlFreeFittedBondDiscountCurve(QlFittedBondDiscountCurve *o);   QlYieldTermStructure* qlFittedBondDiscountCurveAsYieldTermStructure(QlFittedBondDiscountCurve *o); -  double qlFittedBondDiscountCurveFittingMethodMinimumCostValue(QlFittedBondDiscountCurve* o, char **e);-  int qlFittedBondDiscountCurveFittingMethodNumberOfIterations(QlFittedBondDiscountCurve* o, char **e);-  QlYieldTermStructure* qlForwardSpreadedTermStructure(QlYieldTermStructure* x0, QlQuote* spread, char **e);-  QlYieldTermStructure* qlZeroSpreadedTermStructure(QlYieldTermStructure* x0, QlQuote* spread, int comp, int freq, char **e);-  int qlTermStructureReferenceDate(QlTermStructure* o, char **e);-  int qlTermStructureMaxDate(QlTermStructure* o, char **e);+  double qlFittedBondDiscountCurveFittingMethodMinimumCostValue(QlFittedBondDiscountCurve* o, QlError **e);+  int qlFittedBondDiscountCurveFittingMethodNumberOfIterations(QlFittedBondDiscountCurve* o, QlError **e);+  unsigned qlFittedBondDiscountCurveFittingMethodSize(QlFittedBondDiscountCurve* o, QlError **e);+  int qlFittedBondDiscountCurveFittingMethodErrorCode(QlFittedBondDiscountCurve* o, QlError **e);+  void qlFittedBondDiscountCurveFittingMethodSolution(QlFittedBondDiscountCurve* o, unsigned* len, double** vs, QlError **e);+  double qlFittedBondDiscountCurveFittingMethodDiscount(QlFittedBondDiscountCurve* o, unsigned xLen, double* x, double t, QlError **e);+  QlYieldTermStructure* qlForwardSpreadedTermStructure(QlYieldTermStructure* x0, QlQuote* spread, QlError **e);+  QlYieldTermStructure* qlZeroSpreadedTermStructure(QlYieldTermStructure* x0, QlQuote* spread, int comp, int freq, QlError **e);+  int qlTermStructureReferenceDate(QlTermStructure* o, QlError **e);+  int qlTermStructureMaxDate(QlTermStructure* o, QlError **e);+  double qlTermStructureMaxTime(QlTermStructure* o, QlError **e);   int qlTermStructureAllowsExtrapolation(QlTermStructure* o);   void qlTermStructureSetExtrapolation(QlTermStructure* o, int enabled);-  double qlTermStructureTimeFromReference(QlTermStructure* o, int date, char **e);+  double qlTermStructureTimeFromReference(QlTermStructure* o, int date, QlError **e);   void qlFreeTermStructure(QlTermStructure *o);   QlTermStructure* qlYieldTermStructureAsTermStructure(QlYieldTermStructure *o);-  QlYieldTermStructure* qlImpliedTermStructure(QlYieldTermStructure* x0, int referenceDate, char **e);-  QlYieldTermStructure* qlPiecewiseZeroSpreadedTermStructure(QlYieldTermStructure* x0, unsigned spreadsLen, QlQuote** spreads, unsigned datesLen, int* dates, int comp, int freq, int interpolator, int approximator, int approximatorArg, char **e);-  QlYieldTermStructure* qlQuantoTermStructure(QlYieldTermStructure* underlyingDividendTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* foreignRiskFreeTS, QlBlackVolTermStructure* underlyingBlackVolTS, double strike, QlBlackVolTermStructure* exchRateBlackVolTS, double exchRateATMlevel, double underlyingExchRateCorrelation, char **e);-  QlYieldTermStructure* qlUltimateForwardTermStructure(QlYieldTermStructure* x0, QlQuote* lastLiquidForwardRate, QlQuote* ultimateForwardRate, int fspLen, int fspUnit, double alpha, int roundingDigits, int compounding, int frequency, char **e);-  QlYieldTermStructure* qlInterpolatedSpreadDiscountCurve(QlYieldTermStructure* baseCurve, unsigned dfsLen, double *dfs, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, char **e);-  QlRateHelper* qlMultipleResetsSwapRateHelper(unsigned settlementDays, int tenorLen, int tenorUnit, QlQuote* fixedRate, QlIborIndex* iborIndex, unsigned resetsPerCoupon, QlYieldTermStructure* discountingCurve, int averagingMethod, double spread, int fixedFrequency, DayCounter* fixedDayCount, int fixedConvention, char **e);+  QlYieldTermStructure* qlImpliedTermStructure(QlYieldTermStructure* x0, int referenceDate, QlError **e);+  QlYieldTermStructure* qlPiecewiseZeroSpreadedTermStructure(QlYieldTermStructure* x0, unsigned spreadsLen, QlQuote** spreads, unsigned datesLen, int* dates, int comp, int freq, int interpolator, int approximator, int approximatorArg, QlError **e);+  QlYieldTermStructure* qlPiecewiseForwardSpreadedTermStructure(QlYieldTermStructure* x0, unsigned spreadsLen, QlQuote** spreads, unsigned datesLen, int* dates, int interpolator, int approximator, int approximatorArg, QlError **e);+  QlYieldTermStructure* qlPiecewiseSpreadYieldCurve(QlYieldTermStructure* baseCurve, unsigned rateLen, QlRateHelper** helpers, int interpolator, int approximator, int approximatorArg, double accuracy, double minValue, double maxValue, unsigned maxAttempts, double maxFactor, double minFactor, int dontThrow, unsigned dontThrowSteps, unsigned maxEvaluations, int extrapolate, QlError **e);+  QlYieldTermStructure* qlPiecewiseSpreadYieldCurveGlobalBootstrap(QlYieldTermStructure* baseCurve, unsigned rateLen, QlRateHelper** helpers, double accuracy, unsigned weightsLen, double* weights, int extrapolate, QlCallback* initialGuess, QlError **e);+  QlYieldTermStructure* qlQuantoTermStructure(QlYieldTermStructure* underlyingDividendTS, QlYieldTermStructure* riskFreeTS, QlYieldTermStructure* foreignRiskFreeTS, QlBlackVolTermStructure* underlyingBlackVolTS, double strike, QlBlackVolTermStructure* exchRateBlackVolTS, double exchRateATMlevel, double underlyingExchRateCorrelation, QlError **e);+  QlYieldTermStructure* qlUltimateForwardTermStructure(QlYieldTermStructure* x0, QlQuote* lastLiquidForwardRate, QlQuote* ultimateForwardRate, int fspLen, int fspUnit, double alpha, int roundingDigits, int compounding, int frequency, QlError **e);+  QlYieldTermStructure* qlInterpolatedSpreadDiscountCurve(QlYieldTermStructure* baseCurve, unsigned dfsLen, double *dfs, unsigned datesLen, int *dates, int interpolator, int approximator, int approximatorArg, QlError **e);+  QlRateHelper* qlMultipleResetsSwapRateHelper(unsigned settlementDays, int tenorLen, int tenorUnit, QlQuote* fixedRate, QlIborIndex* iborIndex, unsigned resetsPerCoupon, QlYieldTermStructure* discountingCurve, int averagingMethod, double spread, int fixedFrequency, DayCounter* fixedDayCount, int fixedConvention, QlError **e); -  void qlIndexAddFixing(QlIndex *i, int date, double fix, int overwrite, char **e);-  double qlIndexFixing(QlIndex *i, int date, int forecastTodaysFixing, char **e);-  int qlIndexHasHistoricalFixing(QlIndex *i, int date, char **e);-  int qlIndexIsValidFixingDate(QlIndex *i, int date, char **e);-  void qlIndexAddFixings(QlIndex *i, unsigned datesLen, int *dates, double *values, int overwrite, char **e);-  void qlIndexClearFixings(QlIndex *i, char **e);-  void qlIndexFixingHistory(QlIndex *i, unsigned *datesLen, int **dates, unsigned *valuesLen, double **values, char **e);-  void qlIndexManagerHistories(unsigned *count, char ***names, char **e);-  void qlIndexManagerClearHistories(char **e);+  void qlIndexAddFixing(QlIndex *i, int date, double fix, int overwrite, QlError **e);+  double qlIndexFixing(QlIndex *i, int date, int forecastTodaysFixing, QlError **e);+  int qlIndexHasHistoricalFixing(QlIndex *i, int date, QlError **e);+  int qlIndexIsValidFixingDate(QlIndex *i, int date, QlError **e);+  void qlIndexAddFixings(QlIndex *i, unsigned datesLen, int *dates, double *values, int overwrite, QlError **e);+  void qlIndexClearFixings(QlIndex *i, QlError **e);+  void qlIndexFixingHistory(QlIndex *i, unsigned *datesLen, int **dates, unsigned *valuesLen, double **values, QlError **e);+  void qlIndexManagerHistories(unsigned *count, char ***names, QlError **e);+  void qlIndexManagerClearHistories(QlError **e);   void qlFreeIndex(QlIndex *i);   void qlFreeInterestRateIndex(QlInterestRateIndex *o);   QlIndex* qlInterestRateIndexAsIndex(QlInterestRateIndex *o);@@ -550,35 +620,35 @@   QlInterestRateIndex* qlBMAIndexAsInterestRateIndex(QlBMAIndex *o);   void qlFreeOvernightIndexedSwapIndex(QlOvernightIndexedSwapIndex *o);   QlSwapIndex* qlOvernightIndexedSwapIndexAsSwapIndex(QlOvernightIndexedSwapIndex *o);-  QlBMAIndex* qlBMAIndex(QlYieldTermStructure* h, char **e);+  QlBMAIndex* qlBMAIndex(QlYieldTermStructure* h, QlError **e); -  QlSwapIndex* qlCreateLiborSwapIndex(int, int, int, QlYieldTermStructure* h1, QlYieldTermStructure* h2, char **e);-  QlOvernightIndexedSwapIndex* qlOvernightIndexedSwapIndex(char* familyName, int, int, unsigned settlementDays, Currency* currency, QlOvernightIndex* overnightIndex, int telescopicValueDates, int averagingMethod, char **e);-  QlSwapIndex* qlSwapIndex1(char* familyName, int, int, unsigned settlementDays, Currency* currency, Calendar* calendar, int, int, int fixedLegConvention, DayCounter* fixedLegDayCounter, QlIborIndex* iborIndex, QlYieldTermStructure* discountingTermStructure, char **e);-  QlSwapIndex* qlSwapIndex(char* familyName, int, int, unsigned settlementDays, Currency* currency, Calendar* calendar, int, int, int fixedLegConvention, DayCounter* fixedLegDayCounter, QlIborIndex* iborIndex, char **e);+  QlSwapIndex* qlCreateLiborSwapIndex(int, int, int, QlYieldTermStructure* h1, QlYieldTermStructure* h2, QlError **e);+  QlOvernightIndexedSwapIndex* qlOvernightIndexedSwapIndex(char* familyName, int, int, unsigned settlementDays, Currency* currency, QlOvernightIndex* overnightIndex, int telescopicValueDates, int averagingMethod, QlError **e);+  QlSwapIndex* qlSwapIndex1(char* familyName, int, int, unsigned settlementDays, Currency* currency, Calendar* calendar, int, int, int fixedLegConvention, DayCounter* fixedLegDayCounter, QlIborIndex* iborIndex, QlYieldTermStructure* discountingTermStructure, QlError **e);+  QlSwapIndex* qlSwapIndex(char* familyName, int, int, unsigned settlementDays, Currency* currency, Calendar* calendar, int, int, int fixedLegConvention, DayCounter* fixedLegDayCounter, QlIborIndex* iborIndex, QlError **e); -  Schedule* qlBMAIndexFixingSchedule(QlBMAIndex* o, int start, int end, char **e);-  QlOvernightIndexedSwap* qlOvernightIndexedSwapIndexUnderlyingSwap(QlOvernightIndexedSwapIndex* o, int fixingDate, char **e);-  QlVanillaSwap* qlSwapIndexUnderlyingSwap(QlSwapIndex* o, int fixingDate, char **e);-  double qlInterestRateIndexForecastFixing(QlInterestRateIndex* o, int fixingDate, char **e);-  int qlInterestRateIndexFixingDate(QlInterestRateIndex* o, int valueDate, char **e);-  int qlInterestRateIndexValueDate(QlInterestRateIndex* o, int fixingDate, char **e);-  int qlInterestRateIndexMaturityDate(QlInterestRateIndex* o, int valueDate, char **e);-  Calendar* qlIndexFixingCalendar(QlIndex* o, char **e);-  Currency* qlInterestRateIndexCurrency(QlInterestRateIndex* o, char **e);-  DayCounter* qlInterestRateIndexDayCounter(QlInterestRateIndex* o, char **e);+  Schedule* qlBMAIndexFixingSchedule(QlBMAIndex* o, int start, int end, QlError **e);+  QlOvernightIndexedSwap* qlOvernightIndexedSwapIndexUnderlyingSwap(QlOvernightIndexedSwapIndex* o, int fixingDate, QlError **e);+  QlVanillaSwap* qlSwapIndexUnderlyingSwap(QlSwapIndex* o, int fixingDate, QlError **e);+  double qlInterestRateIndexForecastFixing(QlInterestRateIndex* o, int fixingDate, QlError **e);+  int qlInterestRateIndexFixingDate(QlInterestRateIndex* o, int valueDate, QlError **e);+  int qlInterestRateIndexValueDate(QlInterestRateIndex* o, int fixingDate, QlError **e);+  int qlInterestRateIndexMaturityDate(QlInterestRateIndex* o, int valueDate, QlError **e);+  Calendar* qlIndexFixingCalendar(QlIndex* o, QlError **e);+  Currency* qlInterestRateIndexCurrency(QlInterestRateIndex* o, QlError **e);+  DayCounter* qlInterestRateIndexDayCounter(QlInterestRateIndex* o, QlError **e);   unsigned qlInterestRateIndexFixingDays(QlInterestRateIndex* o);-  int qlInterestRateIndexTenor(QlInterestRateIndex* o, int *, char **e);+  int qlInterestRateIndexTenor(QlInterestRateIndex* o, int *, QlError **e);   const char* qlIndexName(QlIndex *index);-  QlIborIndex *qlIborIndex(char *name, int, int, unsigned settlDays, Currency *ccy, Calendar *cal, int conv, int eom, DayCounter *dayCount, QlYieldTermStructure *fwd, char **e);-  QlIborIndex *qlLibor(char *name, int, int, unsigned settlDays, Currency *ccy, Calendar *cal, DayCounter *dc, QlYieldTermStructure *fwd, char **e);-  QlIborIndex *qlDailyTenorLibor(char *name, unsigned settlDays, Currency *ccy, Calendar *cal, DayCounter *dayCount, QlYieldTermStructure *fwd, char **e);-  QlIborIndex *qlCustomIborIndex(char *name, int, int, unsigned settlDays, Currency *ccy, Calendar *fixingCal, Calendar *valueCal, Calendar *maturityCal, int conv, int eom, DayCounter *dayCount, QlYieldTermStructure *fwd, char **e);+  QlIborIndex *qlIborIndex(char *name, int, int, unsigned settlDays, Currency *ccy, Calendar *cal, int conv, int eom, DayCounter *dayCount, QlYieldTermStructure *fwd, QlError **e);+  QlIborIndex *qlLibor(char *name, int, int, unsigned settlDays, Currency *ccy, Calendar *cal, DayCounter *dc, QlYieldTermStructure *fwd, QlError **e);+  QlIborIndex *qlDailyTenorLibor(char *name, unsigned settlDays, Currency *ccy, Calendar *cal, DayCounter *dayCount, QlYieldTermStructure *fwd, QlError **e);+  QlIborIndex *qlCustomIborIndex(char *name, int, int, unsigned settlDays, Currency *ccy, Calendar *fixingCal, Calendar *valueCal, Calendar *maturityCal, int conv, int eom, DayCounter *dayCount, QlYieldTermStructure *fwd, QlError **e); -  QlOvernightIndex *qlOvernightIndex(char *name, unsigned settlDays, Currency *cur, Calendar *cal, DayCounter *dayCount, QlYieldTermStructure *fwd, char **e);+  QlOvernightIndex *qlOvernightIndex(char *name, unsigned settlDays, Currency *cur, Calendar *cal, DayCounter *dayCount, QlYieldTermStructure *fwd, QlError **e); -  QlIborIndex *qlCreateIbor(int, int, int, QlYieldTermStructure *fwd, char **e);-  QlOvernightIndex *qlCreateONIndex(int index, QlYieldTermStructure *fwd, char **e);+  QlIborIndex *qlCreateIbor(int, int, int, QlYieldTermStructure *fwd, QlError **e);+  QlOvernightIndex *qlCreateONIndex(int index, QlYieldTermStructure *fwd, QlError **e);    void qlFreeIborIndex(QlIborIndex *i);   QlInterestRateIndex* qlIborIndexAsInterestRateIndex(QlIborIndex *o);@@ -587,23 +657,23 @@   int qlIborIndexBusinessDayConvention(QlIborIndex* o);   int qlIborIndexEndOfMonth(QlIborIndex* o); -  QlEquityIndex *qlEquityIndex(char *name, Calendar *fixingCalendar, Currency *ccy, QlYieldTermStructure *interest, QlYieldTermStructure *dividend, QlQuote *spot, char **e);+  QlEquityIndex *qlEquityIndex(char *name, Calendar *fixingCalendar, Currency *ccy, QlYieldTermStructure *interest, QlYieldTermStructure *dividend, QlQuote *spot, QlError **e);   void qlFreeEquityIndex(QlEquityIndex *o);   QlIndex* qlEquityIndexAsIndex(QlEquityIndex *o); -  QlZeroInflationIndex *qlCreateZeroInflationIndex(int index, char **e);-  QlYoYInflationIndex *qlCreateYoYInflationIndex(int index, char **e);+  QlZeroInflationIndex *qlCreateZeroInflationIndex(int index, QlError **e);+  QlYoYInflationIndex *qlCreateYoYInflationIndex(int index, QlError **e); -  Region *qlRegion(int r, char **e);-  Region *qlCreateRegion(char *name, char *code, char **e);+  Region *qlRegion(int r, QlError **e);+  Region *qlCreateRegion(char *name, char *code, QlError **e);   void qlFreeRegion(Region *o);   const char *qlRegionName(Region *o);    QlZeroInflationIndex *qlZeroInflationIndex(char *familyName, Region *region, int revised, int frequency,-    int availLagN, int availLagU, Currency *currency, QlZeroInflationTermStructure *ts, char **e);+    int availLagN, int availLagU, Currency *currency, QlZeroInflationTermStructure *ts, QlError **e);   QlYoYInflationIndex *qlYoYInflationIndex(char *familyName, Region *region, int revised, int frequency,-    int availLagN, int availLagU, Currency *currency, QlYoYInflationTermStructure *ts, char **e);-  QlYoYInflationIndex *qlYoYInflationIndexFromZero(QlZeroInflationIndex *underlying, QlYoYInflationTermStructure *ts, char **e);+    int availLagN, int availLagU, Currency *currency, QlYoYInflationTermStructure *ts, QlError **e);+  QlYoYInflationIndex *qlYoYInflationIndexFromZero(QlZeroInflationIndex *underlying, QlYoYInflationTermStructure *ts, QlError **e);    void qlFreeInflationIndex(QlInflationIndex *o);   QlIndex* qlInflationIndexAsIndex(QlInflationIndex *o);@@ -612,30 +682,30 @@   void qlFreeYoYInflationIndex(QlYoYInflationIndex *o);   QlInflationIndex* qlYoYInflationIndexAsInflationIndex(QlYoYInflationIndex *o); -  double qlZeroInflationIndexFixing(QlZeroInflationIndex* o, int fixingDate, char **e);-  double qlYoYInflationIndexFixing(QlYoYInflationIndex* o, int fixingDate, char **e);-  int qlZeroInflationIndexNeedsForecast(QlZeroInflationIndex* o, int fixingDate, char **e);-  int qlYoYInflationIndexNeedsForecast(QlYoYInflationIndex* o, int fixingDate, char **e);+  double qlZeroInflationIndexFixing(QlZeroInflationIndex* o, int fixingDate, QlError **e);+  double qlYoYInflationIndexFixing(QlYoYInflationIndex* o, int fixingDate, QlError **e);+  int qlZeroInflationIndexNeedsForecast(QlZeroInflationIndex* o, int fixingDate, QlError **e);+  int qlYoYInflationIndexNeedsForecast(QlYoYInflationIndex* o, int fixingDate, QlError **e);    /* YoYOptionletVolatilitySurface */   QlYoYOptionletVolatilitySurface *qlConstantYoYOptionletVolatility(QlQuote *v, unsigned settlementDays,       Calendar *cal, int bdc, DayCounter *dc, int observationLagLen, int observationLagUnit, int frequency,-      int indexIsInterpolated, double minStrike, double maxStrike, int volType, double displacement, char **e);+      int indexIsInterpolated, double minStrike, double maxStrike, int volType, double displacement, QlError **e);   void qlFreeYoYOptionletVolatilitySurface(QlYoYOptionletVolatilitySurface *p);   QlVolatilityTermStructure *qlYoYOptionletVolatilitySurfaceAsVolatilityTermStructure(QlYoYOptionletVolatilitySurface *o);   double qlYoYOptionletVolatilitySurfaceVolatility(QlYoYOptionletVolatilitySurface *o, int maturityDate,-      double strike, int obsLagLen, int obsLagUnit, int extrapolate, char **e);+      double strike, int obsLagLen, int obsLagUnit, int extrapolate, QlError **e);   double qlYoYOptionletVolatilitySurfaceTotalVariance(QlYoYOptionletVolatilitySurface *o, int exerciseDate,-      double strike, int obsLagLen, int obsLagUnit, int extrapolate, char **e);+      double strike, int obsLagLen, int obsLagUnit, int extrapolate, QlError **e);    /* YoY inflation cap/floor pricing engines -- all three share the same ctor shape      (index, vol surface handle, nominal discount curve handle). */   QlPricingEngine *qlYoYInflationBlackCapFloorEngine(QlYoYInflationIndex *index, QlYoYOptionletVolatilitySurface *vol,-      QlYieldTermStructure *nominalTs, char **e);+      QlYieldTermStructure *nominalTs, QlError **e);   QlPricingEngine *qlYoYInflationUnitDisplacedBlackCapFloorEngine(QlYoYInflationIndex *index,-      QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, char **e);+      QlYoYOptionletVolatilitySurface *vol, QlYieldTermStructure *nominalTs, QlError **e);   QlPricingEngine *qlYoYInflationBachelierCapFloorEngine(QlYoYInflationIndex *index, QlYoYOptionletVolatilitySurface *vol,-      QlYieldTermStructure *nominalTs, char **e);+      QlYieldTermStructure *nominalTs, QlError **e);    /* CPICapFloorTermPriceSurface */   QlCPICapFloorTermPriceSurface *qlCPICapFloorTermPriceSurface(double nominal, double baseRate,@@ -645,25 +715,25 @@       unsigned cfMaturitiesLen, int *cfMaturitiesNum, unsigned, int *cfMaturitiesUnit,       unsigned cPriceRows, unsigned cPriceCols, double *cPriceData,       unsigned fPriceRows, unsigned fPriceCols, double *fPriceData,-      int interpolator2D, char **e);+      int interpolator2D, QlError **e);   void qlFreeCPICapFloorTermPriceSurface(QlCPICapFloorTermPriceSurface *o);   QlTermStructure *qlCPICapFloorTermPriceSurfaceAsTermStructure(QlCPICapFloorTermPriceSurface *o);    /* The only CPICapFloor pricing engine in QL 1.43: prices purely by interpolating a price      surface, no stochastic-vol model (see plan Item 3's note on the CPI/YoY asymmetry). */-  QlPricingEngine *qlInterpolatingCPICapFloorEngine(QlCPICapFloorTermPriceSurface *surface, char **e);+  QlPricingEngine *qlInterpolatingCPICapFloorEngine(QlCPICapFloorTermPriceSurface *surface, QlError **e);    /* CPIVolatilitySurface -- no consumer (engine/pricer) in QL 1.43, see this type's own haddock      in QuantLib.Internal.Type; stands alone as a queryable surface. */   QlCPIVolatilitySurface *qlConstantCPIVolatility(QlQuote *v, unsigned settlementDays, Calendar *cal,       int bdc, DayCounter *dc, int observationLagLen, int observationLagUnit, int frequency,-      int indexIsInterpolated, char **e);+      int indexIsInterpolated, QlError **e);   void qlFreeCPIVolatilitySurface(QlCPIVolatilitySurface *p);   QlVolatilityTermStructure *qlCPIVolatilitySurfaceAsVolatilityTermStructure(QlCPIVolatilitySurface *o);   double qlCPIVolatilitySurfaceVolatility(QlCPIVolatilitySurface *o, int maturityDate,-      double strike, int obsLagLen, int obsLagUnit, int extrapolate, char **e);+      double strike, int obsLagLen, int obsLagUnit, int extrapolate, QlError **e);   double qlCPIVolatilitySurfaceTotalVariance(QlCPIVolatilitySurface *o, int exerciseDate,-      double strike, int obsLagLen, int obsLagUnit, int extrapolate, char **e);+      double strike, int obsLagLen, int obsLagUnit, int extrapolate, QlError **e);    /* YoYCapFloorTermPriceSurface */   QlYoYCapFloorTermPriceSurface *qlYoYCapFloorTermPriceSurface(unsigned fixingDays,@@ -673,19 +743,19 @@       unsigned cfMaturitiesLen, int *cfMaturitiesNum, unsigned, int *cfMaturitiesUnit,       unsigned cPriceRows, unsigned cPriceCols, double *cPriceData,       unsigned fPriceRows, unsigned fPriceCols, double *fPriceData,-      int interpolator2D, int interpolator1D, int approximator, int approximatorArg, char **e);+      int interpolator2D, int interpolator1D, int approximator, int approximatorArg, QlError **e);   void qlFreeYoYCapFloorTermPriceSurface(QlYoYCapFloorTermPriceSurface *o);   QlTermStructure *qlYoYCapFloorTermPriceSurfaceAsTermStructure(QlYoYCapFloorTermPriceSurface *o);-  int qlYoYCapFloorTermPriceSurfaceBaseDate(QlYoYCapFloorTermPriceSurface *o, char **e);+  int qlYoYCapFloorTermPriceSurfaceBaseDate(QlYoYCapFloorTermPriceSurface *o, QlError **e);   void qlYoYCapFloorTermPriceSurfaceAtmYoYSwapDateRates(QlYoYCapFloorTermPriceSurface *o,-      unsigned *dl, int **date, unsigned *rl, double **rate, char **e);+      unsigned *dl, int **date, unsigned *rl, double **rate, QlError **e);   void qlYoYCapFloorTermPriceSurfaceAtmYoYSwapTimeRates(QlYoYCapFloorTermPriceSurface *o,-      unsigned *tl, double **time, unsigned *rl, double **rate, char **e);+      unsigned *tl, double **time, unsigned *rl, double **rate, QlError **e);   double qlYoYCapFloorTermPriceSurfaceAtmYoYSwapRate(QlYoYCapFloorTermPriceSurface *o, int d,-      int extrapolate, char **e);+      int extrapolate, QlError **e);   double qlYoYCapFloorTermPriceSurfaceAtmYoYRate(QlYoYCapFloorTermPriceSurface *o, int d,-      int obsLagLen, int obsLagUnit, int extrapolate, char **e);-  void qlYoYCapFloorTermPriceSurfaceStrikes(QlYoYCapFloorTermPriceSurface *o, unsigned *sl, double **strike, char **e);+      int obsLagLen, int obsLagUnit, int extrapolate, QlError **e);+  void qlYoYCapFloorTermPriceSurfaceStrikes(QlYoYCapFloorTermPriceSurface *o, unsigned *sl, double **strike, QlError **e);    /* KInterpolatedYoYOptionletVolatilitySurface<Linear> -- another concrete leaf constructor for      YoYOptionletVolatilitySurface (Item 1), built by internally wiring up an@@ -699,17 +769,20 @@       unsigned settlementDays, Calendar *cal, int bdc, DayCounter *dc,       QlYoYCapFloorTermPriceSurface *capFloorPrices, QlYoYInflationIndex *index,       QlYieldTermStructure *nominalTs, double slope,-      int interpolator, int approximator, int approximatorArg, char **e);+      int interpolator, int approximator, int approximatorArg, QlError **e);   QlYoYOptionletVolatilitySurface *qlKInterpolatedYoYOptionletVolatilitySurfaceUnitDisplacedBlack(       unsigned settlementDays, Calendar *cal, int bdc, DayCounter *dc,       QlYoYCapFloorTermPriceSurface *capFloorPrices, QlYoYInflationIndex *index,       QlYieldTermStructure *nominalTs, double slope,-      int interpolator, int approximator, int approximatorArg, char **e);+      int interpolator, int approximator, int approximatorArg, QlError **e);   QlYoYOptionletVolatilitySurface *qlKInterpolatedYoYOptionletVolatilitySurfaceBachelier(       unsigned settlementDays, Calendar *cal, int bdc, DayCounter *dc,       QlYoYCapFloorTermPriceSurface *capFloorPrices, QlYoYInflationIndex *index,       QlYieldTermStructure *nominalTs, double slope,-      int interpolator, int approximator, int approximatorArg, char **e);+      int interpolator, int approximator, int approximatorArg, QlError **e);+  QlYieldTermStructure* qlImpliedTermStructureMoving(QlYieldTermStructure* curve, unsigned days, Calendar* calendar, QlError **e);+  QlRateHelper* qlOvernightOvernightBasisSwapRateHelper(QlQuote* basis, int tenorLen, int tenorUnit, unsigned settlementDays, Calendar* calendar, int convention, int endOfMonth, QlOvernightIndex* baseIndex, QlOvernightIndex* otherIndex, QlYieldTermStructure* discount, int bootstrapBaseCurve, int paymentLag, int paymentFrequency, int baseAveragingMethod, int otherAveragingMethod, int telescopicValueDates, int rule, QlError **e);+  QlRateHelper* qlOvernightIndexedFundingRateHelperRaw(int dated, int start, int end, int tenorUnit, QlQuote* margin, Calendar* calendar, int convention, int endOfMonth, QlOvernightIndex* index, int paymentTenorLen, int paymentTenorUnit, DayCounter* paymentDayCounter, int paymentLag, int telescopicValueDates, int rule, int pillar, int customPillarDate, QlError **e); #ifdef __cplusplus } #endif
cbits/qlTermStructureAux.cpp view
@@ -1,5 +1,4 @@ #include <ql/shared_ptr.hpp>-#include <type_traits> using QuantLib::ext::shared_ptr; #include "qlTermStructureAux.h" namespace hasquant {@@ -8,6 +7,23 @@  using namespace QuantLib; +#if QL_HEX_VERSION >= 0x01440000+static std::function<Array(const std::vector<Time>&, const std::vector<Real>&)>+bootstrapInitialGuess(const QlCallback& owner) {+  if (!owner) return nullptr;+  return [owner](const std::vector<Time>& times, const std::vector<Real>& data) {+    QL_REQUIRE(!times.empty(), "initial guess needs curve times");+    Array out(times.size() - 1);+    QlCallbackArgs args{0.0, 0.0, 0.0, times.data(), out.begin(), (unsigned)times.size(), 0};+    args.input2 = data.data();+    args.size2 = (unsigned)data.size();+    args.outputSize = (unsigned)out.size();+    owner->invoke(args);+    return out;+  };+}+#endif+ // Shared piecewise-curve dispatcher; the entry points differ only in leading arguments.  // Use the curve's bootstrap type to avoid invalid template instantiation.@@ -35,18 +51,8 @@ // callable as `typename decltype(t)::type`. template <class T> struct Tag { using type = T; }; -// The shared interpolator x approximation dispatch. `make` receives a constructed interpolator-// instance, so each caller spells its curve constructor once.-//-// The result type is an explicit leading template argument-// (`dispatchInterpolation<YieldTermStructure*>(...)`), not a trailing-// `-> decltype(make(Linear()))`. That is load-bearing: a trailing return type is an *unevaluated*-// operand, so the probe call it names becomes the first instantiation of the caller's lambda for-// that interpolator -- and clang then emits the curve's constructor but never marks its vtable-// used, leaving the destructor and its thunks undefined. It surfaces as a link/dlopen failure for-// one arm only (whichever type the probe named), which reads like a QuantLib packaging problem-// rather than a bug here. Keep the explicit `Ret`; the same rule applies to every dispatcher in-// cbits/qlPricingEngineAux.cpp.+// Use an explicit result type: a decltype probe can prevent clang from emitting the selected+// curve's vtable. The same rule applies to the dispatchers in qlPricingEngineAux.cpp. template <class Ret, class F> Ret dispatchInterpolation(int interpolator, int approximator, int approximatorArg, F&& make) {   switch (interpolator) {@@ -57,7 +63,7 @@   case hasquant::Cubic: return make(makeCubic<Cubic>(approximator, approximatorArg));   case hasquant::LogCubic: return make(makeCubic<LogCubic>(approximator, approximatorArg));   // hasquant::Abcd (InterpolationType's 7th case) has no arm: QuantLib's Abcd interpolation-  // isn't usable as a PiecewiseYieldCurve interpolator. Pre-existing gap, preserved.+  // isn't usable as a PiecewiseYieldCurve interpolator.   default:     QL_FAIL("Unsupported interpolation " << interpolator);   }@@ -130,10 +136,10 @@ // a hand-duplicated block. template <class Trait, class Interp, class... Args> YieldTermStructure *makeGlobalBootstrapCurve(const Interp& interp, double accuracy,-    const std::vector<double>& instrumentWeights, Args&&... args) {+    const std::vector<double>& instrumentWeights, [[maybe_unused]] const QlCallback& initialGuess, Args&&... args) {   using CurveType = PiecewiseYieldCurve<Trait, Interp, QuantLib::GlobalBootstrap>;   return new CurveType(std::forward<Args>(args)..., interp,-      typename CurveType::bootstrap_type(accuracy, nullptr, nullptr, instrumentWeights));+      typename CurveType::bootstrap_type(accuracy, nullptr, nullptr, instrumentWeights QL144_ARGS(bootstrapInitialGuess(initialGuess)))); }  // GlobalBootstrap is wired up only for the combinations concrete use cases have asked for --@@ -144,32 +150,32 @@ // hypothetical future combinations. template <class... Args> YieldTermStructure *dispatchTraitGlobalBootstrap(int trait, int interpolator, double accuracy,-    const std::vector<double>& instrumentWeights, Args&&... args) {+    const std::vector<double>& instrumentWeights, [[maybe_unused]] const QlCallback& initialGuess, Args&&... args) {   switch (trait) {   case hasquant::Discount:     QL_REQUIRE(interpolator == hasquant::LogLinear,         "GlobalBootstrap-based PiecewiseYieldCurve construction with trait=Discount only "         "supports interpolator=LogLinear (got interpolator " << interpolator << ")");     return makeGlobalBootstrapCurve<QuantLib::Discount>(QuantLib::LogLinear(), accuracy,-        instrumentWeights, std::forward<Args>(args)...);+        instrumentWeights, initialGuess, std::forward<Args>(args)...);   case hasquant::SimpleZeroYield:     QL_REQUIRE(interpolator == hasquant::Linear,         "GlobalBootstrap-based PiecewiseYieldCurve construction with trait=SimpleZeroYield "         "only supports interpolator=Linear (got interpolator " << interpolator << ")");     return makeGlobalBootstrapCurve<QuantLib::SimpleZeroYield>(QuantLib::Linear(), accuracy,-        instrumentWeights, std::forward<Args>(args)...);+        instrumentWeights, initialGuess, std::forward<Args>(args)...);   case hasquant::ForwardRate:     QL_REQUIRE(interpolator == hasquant::Linear,         "GlobalBootstrap-based PiecewiseYieldCurve construction with trait=ForwardRate only "         "supports interpolator=Linear (got interpolator " << interpolator << ")");     return makeGlobalBootstrapCurve<QuantLib::ForwardRate>(QuantLib::Linear(), accuracy,-        instrumentWeights, std::forward<Args>(args)...);+        instrumentWeights, initialGuess, std::forward<Args>(args)...);   case hasquant::ZeroYield:     QL_REQUIRE(interpolator == hasquant::Linear,         "GlobalBootstrap-based PiecewiseYieldCurve construction with trait=ZeroYield only "         "supports interpolator=Linear (got interpolator " << interpolator << ")");     return makeGlobalBootstrapCurve<QuantLib::ZeroYield>(QuantLib::Linear(), accuracy,-        instrumentWeights, std::forward<Args>(args)...);+        instrumentWeights, initialGuess, std::forward<Args>(args)...);   default:     QL_FAIL("GlobalBootstrap-based PiecewiseYieldCurve construction is only supported for "         "trait=Discount/interpolator=LogLinear, trait=ForwardRate/interpolator=Linear, "@@ -192,13 +198,9 @@     const std::vector<Handle<Quote> >& jumps, const std::vector<Date>& jumpDates,     const std::vector<shared_ptr<RateHelper> >& additionalHelpers,     const std::vector<Date>& additionalDates,-    double accuracy, Args&&... reference) {-  // AdditionalErrors returns additionalHelpers.size()-2 equations; GlobalBootstrap requires-  // #equations == #unknowns, so additionalDates must supply exactly that many extra unknowns-  // (confirmed empirically by an earlier standalone spike, which crashed at runtime with-  // QuantLib's own "less functions than available variables" until the two were matched).-  // Surfaced here with a message in terms of the Haskell-visible arguments, not left to that-  // internal QuantLib error.+    double accuracy, const std::vector<double>& instrumentWeights, [[maybe_unused]] const QlCallback& initialGuess, Args&&... reference) {+  // AdditionalErrors supplies two fewer equations than helpers; additionalDates must provide+  // the remaining unknowns for GlobalBootstrap's square system.   QL_REQUIRE(additionalHelpers.size() >= 2,       "GlobalBootstrap's canned AdditionalErrors formula needs at least 2 additionalHelpers "       "(got " << additionalHelpers.size() << ")");@@ -213,16 +215,16 @@   return new CurveType(std::forward<Args>(reference)..., instr, dayCount, jumps, jumpDates,       QuantLib::Linear(),       CurveType::bootstrap_type(additionalHelpers, AdditionalDates(additionalDates),-          AdditionalErrors(additionalHelpers), accuracy, nullptr, nullptr));+          AdditionalErrors(additionalHelpers), accuracy, nullptr, nullptr, nullptr, instrumentWeights QL144_ARGS(bootstrapInitialGuess(initialGuess)))); }  YieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFullAux(const Date& date,     const std::vector<shared_ptr<RateHelper> >& instr, const DayCounter& dayCount,     const std::vector<Handle<Quote> >& jumps, const std::vector<Date>& jumpDates,     const std::vector<shared_ptr<RateHelper> >& additionalHelpers,-    const std::vector<Date>& additionalDates, double accuracy) {+    const std::vector<Date>& additionalDates, double accuracy, const std::vector<double>& instrumentWeights, [[maybe_unused]] const QlCallback& initialGuess) {   return piecewiseYieldCurveGlobalBootstrapFull(instr, dayCount, jumps, jumpDates,-      additionalHelpers, additionalDates, accuracy, date);+      additionalHelpers, additionalDates, accuracy, instrumentWeights, initialGuess, date); }  YieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFullAux(unsigned settl,@@ -230,9 +232,9 @@     const DayCounter& dayCount, const std::vector<Handle<Quote> >& jumps,     const std::vector<Date>& jumpDates,     const std::vector<shared_ptr<RateHelper> >& additionalHelpers,-    const std::vector<Date>& additionalDates, double accuracy) {+    const std::vector<Date>& additionalDates, double accuracy, const std::vector<double>& instrumentWeights, [[maybe_unused]] const QlCallback& initialGuess) {   return piecewiseYieldCurveGlobalBootstrapFull(instr, dayCount, jumps, jumpDates,-      additionalHelpers, additionalDates, accuracy, settl, cal);+      additionalHelpers, additionalDates, accuracy, instrumentWeights, initialGuess, settl, cal); }  // LocalBootstrap requires its Interpolator to provide localInterpolate(), which upstream only@@ -241,17 +243,8 @@ // (interpolator-generic), this dispatches trait only, with the interpolator fixed to // ConvexMonotone. //-// Discount is deliberately excluded, unlike dispatchTrait's IterativeBootstrap dispatch (which-// includes it): a standalone raw-C++ reproduction against this same installed libQuantLib (no-// hasquant involved) showed PiecewiseYieldCurve<Discount, ConvexMonotone, LocalBootstrap>-// returning wildly wrong discount factors (>1, growing with maturity) for ordinary deposit-rate-// inputs, reproducibly across both a flat 3% quote and varied per-tenor quotes, and independent-// of LocalBootstrap's accuracy parameter -- not a hasquant marshalling bug, a genuine numerical-// incompatibility between Discount's discount-factor-space guess/updateGuess and ConvexMonotone's-// localInterpolate. ForwardRate, ZeroYield and SimpleZeroYield all reproduce the expected-// 1/(1+rate*tau) values correctly under the same fixture. This matches upstream's own-// test-suite/piecewiseyieldcurve.cpp, whose only LocalBootstrap+ConvexMonotone coverage-// (testLocalBootstrapConsistency) uses ForwardRate, never Discount.+// Discount is excluded: its guesses produce invalid discount factors with+// ConvexMonotone/LocalBootstrap. The supported traits bootstrap ordinary deposit rates. template <class Trait, class... Args> YieldTermStructure *makeCurveLocalBootstrap(const ConvexMonotone& interp, Size localisation,     bool forcePositive, double accuracy, Args&&... args) {@@ -318,9 +311,9 @@     const std::vector<Handle<Quote> >& jumps, const std::vector<Date>& jumpDates,     int trait, int interpolator, int approximator, int approximatorArg,     int bootstrap, double accuracy, const std::vector<double>& instrumentWeights,-    const QlIterativeBootstrapOpts& bootstrapOpts) {+    const QlIterativeBootstrapOpts& bootstrapOpts, [[maybe_unused]] const QlCallback& initialGuess) {   if (bootstrap == 1) {-    return dispatchTraitGlobalBootstrap(trait, interpolator, accuracy, instrumentWeights,+    return dispatchTraitGlobalBootstrap(trait, interpolator, accuracy, instrumentWeights, initialGuess,         settl, cal, instr, dayCount, jumps, jumpDates);   }   return dispatchTrait(trait, interpolator, approximator, approximatorArg, bootstrapOpts,@@ -333,8 +326,8 @@     const DayCounter& dayCount,     const std::vector<Handle<Quote> >& jumps, const std::vector<Date>& jumpDates,     int trait, int interpolator, double accuracy,-    const std::vector<double>& instrumentWeights) {-  return dispatchTraitGlobalBootstrap(trait, interpolator, accuracy, instrumentWeights,+    const std::vector<double>& instrumentWeights, [[maybe_unused]] const QlCallback& initialGuess) {+  return dispatchTraitGlobalBootstrap(trait, interpolator, accuracy, instrumentWeights, initialGuess,       date, instr, dayCount, jumps, jumpDates); } @@ -386,6 +379,20 @@       }); } +YieldTermStructure *qlInterpolatedSimpleZeroCurveAux(+    const std::vector<Date> &yDates,+    const std::vector<double>& yields,+    const DayCounter& dayCount,+    const Calendar& cal,+    const std::vector<Handle<Quote> >& jumps,+    const std::vector<Date>& jumpDates,+    int interpolator, int approximator, int approximatorArg) {+  return dispatchInterpolation<YieldTermStructure*>(interpolator, approximator, approximatorArg,+[&](auto i) {+        return new InterpolatedSimpleZeroCurve<decltype(i)>(yDates, yields, dayCount, cal, jumps, jumpDates, i);+      });+}+ YieldTermStructure *qlInterpolatedSpreadDiscountCurveAux(     const Handle<YieldTermStructure>& baseCurve,     const std::vector<Date>& dates,@@ -409,6 +416,42 @@       }); } +YieldTermStructure *qlPiecewiseForwardSpreadedTermStructureAux(+    const Handle<YieldTermStructure>& baseCurve,+    const std::vector<Handle<Quote> >& spreads,+    const std::vector<Date>& dates,+    int interpolator, int approximator, int approximatorArg) {+  QL_REQUIRE(interpolator != hasquant::LogLinear && interpolator != hasquant::LogCubic,+      "piecewise forward-spreaded term structure needs an interpolation with a primitive; "+      "LogLinear and LogCubic are not supported");+  return dispatchInterpolation<YieldTermStructure*>(interpolator, approximator, approximatorArg,+[&](auto i) {+        return new InterpolatedPiecewiseForwardSpreadedTermStructure<decltype(i)>(baseCurve, spreads, dates, i);+      });+}++YieldTermStructure *qlPiecewiseSpreadYieldCurveAux(+    const Handle<YieldTermStructure>& baseCurve,+    const std::vector<shared_ptr<RateHelper> >& instr,+    int interpolator, int approximator, int approximatorArg,+    const QlIterativeBootstrapOpts& b) {+  return dispatchInterpolation<YieldTermStructure*>(interpolator, approximator, approximatorArg,+[&](auto i) {+        using CurveType = PiecewiseSpreadYieldCurve<QuantLib::Discount, decltype(i)>;+        return new CurveType(baseCurve, instr, i, makeIterativeBootstrap<CurveType>(b));+      });+}++// Bootstrap spelled through CurveType::bootstrap_type, as in makeGlobalBootstrapCurve.+YieldTermStructure *qlPiecewiseSpreadYieldCurveGlobalBootstrapAux(+    const Handle<YieldTermStructure>& baseCurve,+    const std::vector<shared_ptr<RateHelper> >& instr,+    double accuracy, const std::vector<double>& instrumentWeights, [[maybe_unused]] const QlCallback& initialGuess) {+  using CurveType = PiecewiseSpreadYieldCurve<QuantLib::Discount, QuantLib::LogLinear, QuantLib::GlobalBootstrap>;+  return new CurveType(baseCurve, instr, QuantLib::LogLinear(),+      typename CurveType::bootstrap_type(accuracy, nullptr, nullptr, instrumentWeights QL144_ARGS(bootstrapInitialGuess(initialGuess))));+}+ // some credit stuff DefaultProbabilityTermStructure *qlInterpolatedDefaultDensityCurveAux(     const std::vector<Date>& dates,@@ -438,6 +481,21 @@       }); } +OneFactorAffineSurvivalStructure *qlInterpolatedAffineHazardRateCurveAux(+    const std::vector<Date>& dates,+    const std::vector<double>& hazardRates,+    const DayCounter& dayCounter,+    const ext::shared_ptr<OneFactorAffineModel>& model,+    const Calendar& cal,+    const std::vector<Handle<Quote> >& jumps,+    const std::vector<Date>& jumpDates,+    int interpolator, int approximator, int approximatorArg) {+  return dispatchInterpolation<OneFactorAffineSurvivalStructure*>(interpolator, approximator, approximatorArg,+[&](auto i) {+        return new InterpolatedAffineHazardRateCurve<decltype(i)>(dates, hazardRates, dayCounter, model, cal, jumps, jumpDates, i);+      });+}+ DefaultProbabilityTermStructure *qlInterpolatedSurvivalProbabilityCurveAux(     const std::vector<Date>& dates,     const std::vector<double>& probabilities,@@ -523,20 +581,20 @@   }); } -// The `{}` seasonality and the 1.0e-14 / 1.0e-12 accuracy below are upstream's own default-// arguments, spelled explicitly only because the interpolator sits after them-// (piecewisezeroinflationcurve.hpp / piecewiseyoyinflationcurve.hpp).+// The 1.0e-14 / 1.0e-12 accuracies below are upstream's own defaults, spelled explicitly because+// the interpolator follows them (piecewisezeroinflationcurve.hpp / piecewiseyoyinflationcurve.hpp). ZeroInflationTermStructure *qlPiecewiseZeroInflationCurveAux(     const Date &referenceDate,     const Date &baseDate,     Frequency frequency,     const DayCounter& dayCounter,     const std::vector<shared_ptr<BootstrapHelper<ZeroInflationTermStructure> > >& instruments,+    const shared_ptr<Seasonality>& seasonality,     int interpolator, int approximator, int approximatorArg) {   return dispatchInterpolation<ZeroInflationTermStructure*>(interpolator, approximator, approximatorArg, [&](auto i) {         return new PiecewiseZeroInflationCurve<decltype(i)>(referenceDate, baseDate, frequency,-            dayCounter, instruments, {}, 1.0e-14, i);+            dayCounter, instruments, seasonality, 1.0e-14, i);       }); } @@ -547,11 +605,12 @@     Frequency frequency,     const DayCounter& dayCounter,     const std::vector<shared_ptr<BootstrapHelper<YoYInflationTermStructure> > >& instruments,+    const shared_ptr<Seasonality>& seasonality,     int interpolator, int approximator, int approximatorArg) {   return dispatchInterpolation<YoYInflationTermStructure*>(interpolator, approximator, approximatorArg, [&](auto i) {         return new PiecewiseYoYInflationCurve<decltype(i)>(referenceDate, baseDate, baseYoYRate,-            frequency, dayCounter, instruments, {}, 1.0e-12, i);+            frequency, dayCounter, instruments, seasonality, 1.0e-12, i);       }); } @@ -561,14 +620,30 @@     const std::vector<Rate> &rates,     Frequency frequency,     const DayCounter& dayCounter,+    const shared_ptr<Seasonality>& seasonality,     int interpolator, int approximator, int approximatorArg) {   return dispatchInterpolation<YoYInflationTermStructure*>(interpolator, approximator, approximatorArg, [&](auto i) {         return new InterpolatedYoYInflationCurve<decltype(i)>(referenceDate, dates, rates,-            frequency, dayCounter, {}, i);+            frequency, dayCounter, seasonality, i);       }); } +ZeroInflationTermStructure *qlInterpolatedZeroInflationCurveAux(+    const Date &referenceDate,+    const std::vector<Date> &dates,+    const std::vector<Rate> &rates,+    Frequency frequency,+    const DayCounter& dayCounter,+    const shared_ptr<Seasonality>& seasonality,+    int interpolator, int approximator, int approximatorArg) {+  return dispatchInterpolation<ZeroInflationTermStructure*>(interpolator, approximator, approximatorArg,+[&](auto i) {+        return new InterpolatedZeroInflationCurve<decltype(i)>(referenceDate, dates, rates,+            frequency, dayCounter, seasonality, i);+      });+}+ // --------------------------------------------------------------------------------------------- // These entry points keep per-interpolation template instantiation in the auxiliary translation // unit. Callers pass raw enum values and never name an interpolator type.@@ -713,6 +788,29 @@   return dispatchZabrEvaluation<SmileSection*>(evaluation, [&](auto tag) {     using Evaluation = typename decltype(tag)::type;     return new ZabrSmileSection<Evaluation>(d, forward, params, dc, moneyness, fdRefinement);+  });+}++ZabrInterpolatedSmileSectionHandle *qlZabrInterpolatedSmileSectionAux(+    int evaluation, const Date &optionDate, const Handle<Quote> &forward,+    const std::vector<Rate> &strikes, bool hasFloatingStrikes, const Handle<Quote> &atmVolatility,+    const std::vector<Handle<Quote>> &volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma,+    bool isAlphaFixed, bool isBetaFixed, bool isNuFixed, bool isRhoFixed, bool isGammaFixed,+    bool vegaWeighted, const shared_ptr<EndCriteria> &endCriteria,+    const shared_ptr<OptimizationMethod> &method, const DayCounter &dc) {+  return dispatchZabrEvaluation<ZabrInterpolatedSmileSectionHandle*>(evaluation, [&](auto tag) {+    using Evaluation = typename decltype(tag)::type;+    auto section = ext::make_shared<ZabrInterpolatedSmileSection<Evaluation>>(+        optionDate, forward, strikes, hasFloatingStrikes, atmVolatility, volHandles,+        alpha, beta, nu, rho, gamma, isAlphaFixed, isBetaFixed, isNuFixed, isRhoFixed, isGammaFixed,+        vegaWeighted, endCriteria, method, dc);+    section->atmLevel(); // force calibration now, surfacing failures at construction+    return new ZabrInterpolatedSmileSectionHandle{+      section,+      [section]{ return section->alpha(); }, [section]{ return section->beta(); },+      [section]{ return section->nu(); }, [section]{ return section->rho(); },+      [section]{ return section->gamma(); }, [section]{ return section->rmsError(); },+      [section]{ return section->maxError(); }, [section]{ return section->endCriteria(); }};   }); } 
cbits/qlTermStructureAux.h view
@@ -1,3 +1,5 @@+#include "qlCallback.hpp"+#include "qlStdCompat.h" #include <ql/termstructures/yield/all.hpp> #include <ql/termstructures/globalbootstrap.hpp> #include <ql/termstructures/localbootstrap.hpp>@@ -8,12 +10,16 @@ #include <ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp> #include <ql/termstructures/credit/piecewisedefaultcurve.hpp> #include <ql/termstructures/credit/defaultprobabilityhelpers.hpp>+#include <ql/experimental/credit/interpolatedaffinehazardratecurve.hpp> #include <ql/termstructures/inflation/piecewisezeroinflationcurve.hpp> #include <ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp> #include <ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp>+#include <ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp> #include <ql/termstructures/volatility/equityfx/blackvariancecurve.hpp> #include <ql/termstructures/volatility/equityfx/blackvariancesurface.hpp> #include <ql/termstructures/volatility/zabrsmilesection.hpp>+#include <ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp>+#include <functional> #include <ql/experimental/inflation/cpicapfloortermpricesurface.hpp> #include <ql/experimental/inflation/yoycapfloortermpricesurface.hpp> #include <ql/experimental/inflation/interpolatedyoyoptionletstripper.hpp>@@ -53,7 +59,7 @@   const std::vector<QuantLib::Handle<QuantLib::Quote> >& jumps,   const std::vector<QuantLib::Date>& jumpDates,   int trait, int interpolator, double accuracy,-  const std::vector<double>& instrumentWeights);+  const std::vector<double>& instrumentWeights, const QlCallback& initialGuess = {});  // bootstrap: 0 = IterativeBootstrap (existing behaviour, default), 1 = GlobalBootstrap, // wired up only for trait=Discount/interpolator=LogLinear and trait=SimpleZeroYield/@@ -75,7 +81,7 @@   const std::vector<QuantLib::Date>& jumpDates,   int trait, int interpolator, int approximator, int approximatorArg,   int bootstrap, double accuracy, const std::vector<double>& instrumentWeights,-  const QlIterativeBootstrapOpts& bootstrapOpts);+  const QlIterativeBootstrapOpts& bootstrapOpts, const QlCallback& initialGuess = {});  // PiecewiseYieldCurve<SimpleZeroYield, Linear, GlobalBootstrap> built via // GlobalBootstrap's functor-callback constructor (additionalHelpers/additionalDates, with@@ -89,7 +95,7 @@   const std::vector<QuantLib::Date>& jumpDates,   const std::vector<QuantLib::ext::shared_ptr<QuantLib::RateHelper> >& additionalHelpers,   const std::vector<QuantLib::Date>& additionalDates,-  double accuracy);+  double accuracy, const std::vector<double>& instrumentWeights, const QlCallback& initialGuess = {});  QuantLib::YieldTermStructure *qlPiecewiseYieldCurveGlobalBootstrapFullAux(   unsigned settl, const QuantLib::Calendar &cal,@@ -99,7 +105,7 @@   const std::vector<QuantLib::Date>& jumpDates,   const std::vector<QuantLib::ext::shared_ptr<QuantLib::RateHelper> >& additionalHelpers,   const std::vector<QuantLib::Date>& additionalDates,-  double accuracy);+  double accuracy, const std::vector<double>& instrumentWeights, const QlCallback& initialGuess = {});  // PiecewiseYieldCurve<Trait, ConvexMonotone, LocalBootstrap>, dispatched over // ForwardRate/ZeroYield/SimpleZeroYield -- Discount is rejected (QL_FAIL) at trait=Discount:@@ -153,6 +159,15 @@   const std::vector<QuantLib::Date>& jumpDates,   int interpolator, int approximator, int approximatorArg); +QuantLib::YieldTermStructure *qlInterpolatedSimpleZeroCurveAux(+  const std::vector<QuantLib::Date>& dates,+  const std::vector<double>& yields,+  const QuantLib::DayCounter& dayCount,+  const QuantLib::Calendar& cal,+  const std::vector<QuantLib::Handle<QuantLib::Quote> >& jumps,+  const std::vector<QuantLib::Date>& jumpDates,+  int interpolator, int approximator, int approximatorArg);+ QuantLib::YieldTermStructure *qlInterpolatedSpreadDiscountCurveAux(   const QuantLib::Handle<QuantLib::YieldTermStructure>& baseCurve,   const std::vector<QuantLib::Date>& dates,@@ -166,6 +181,27 @@   QuantLib::Compounding comp, QuantLib::Frequency freq,   int interpolator, int approximator, int approximatorArg); +// Rejects LogLinear/LogCubic: the zero rate integrates the spread, and log interpolations have+// no primitive.+QuantLib::YieldTermStructure *qlPiecewiseForwardSpreadedTermStructureAux(+  const QuantLib::Handle<QuantLib::YieldTermStructure>& baseCurve,+  const std::vector<QuantLib::Handle<QuantLib::Quote> >& spreads,+  const std::vector<QuantLib::Date>& dates,+  int interpolator, int approximator, int approximatorArg);++// PiecewiseSpreadYieldCurve<Discount, Interpolator, IterativeBootstrap>.+QuantLib::YieldTermStructure *qlPiecewiseSpreadYieldCurveAux(+  const QuantLib::Handle<QuantLib::YieldTermStructure>& baseCurve,+  const std::vector<QuantLib::ext::shared_ptr<QuantLib::RateHelper> >& instr,+  int interpolator, int approximator, int approximatorArg,+  const QlIterativeBootstrapOpts& bootstrapOpts);++// PiecewiseSpreadYieldCurve<Discount, LogLinear, GlobalBootstrap>.+QuantLib::YieldTermStructure *qlPiecewiseSpreadYieldCurveGlobalBootstrapAux(+  const QuantLib::Handle<QuantLib::YieldTermStructure>& baseCurve,+  const std::vector<QuantLib::ext::shared_ptr<QuantLib::RateHelper> >& instr,+  double accuracy, const std::vector<double>& instrumentWeights, const QlCallback& initialGuess = {});+ // some credit stuff QuantLib::DefaultProbabilityTermStructure *qlInterpolatedDefaultDensityCurveAux(             const std::vector<QuantLib::Date>& dates,@@ -185,6 +221,16 @@             const std::vector<QuantLib::Date>& jumpDates,             int interpolator, int approximator, int approximatorArg); +QuantLib::OneFactorAffineSurvivalStructure *qlInterpolatedAffineHazardRateCurveAux(+            const std::vector<QuantLib::Date>& dates,+            const std::vector<double>& hazardRates,+            const QuantLib::DayCounter& dayCounter,+            const QuantLib::ext::shared_ptr<QuantLib::OneFactorAffineModel>& model,+            const QuantLib::Calendar& cal,+            const std::vector<QuantLib::Handle<QuantLib::Quote> >& jumps,+            const std::vector<QuantLib::Date>& jumpDates,+            int interpolator, int approximator, int approximatorArg);+ QuantLib::DefaultProbabilityTermStructure *qlInterpolatedSurvivalProbabilityCurveAux(             const std::vector<QuantLib::Date>& dates,             const std::vector<double>& probabilities,@@ -226,6 +272,7 @@     QuantLib::Frequency frequency,     const QuantLib::DayCounter& dayCounter,     const std::vector<QuantLib::ext::shared_ptr<QuantLib::BootstrapHelper<QuantLib::ZeroInflationTermStructure> > >& instruments,+    const QuantLib::ext::shared_ptr<QuantLib::Seasonality>& seasonality,     int interpolator, int approximator, int approximatorArg);  QuantLib::YoYInflationTermStructure *qlPiecewiseYoYInflationCurveAux(@@ -235,6 +282,7 @@     QuantLib::Frequency frequency,     const QuantLib::DayCounter& dayCounter,     const std::vector<QuantLib::ext::shared_ptr<QuantLib::BootstrapHelper<QuantLib::YoYInflationTermStructure> > >& instruments,+    const QuantLib::ext::shared_ptr<QuantLib::Seasonality>& seasonality,     int interpolator, int approximator, int approximatorArg);  QuantLib::YoYInflationTermStructure *qlInterpolatedYoYInflationCurveAux(@@ -243,8 +291,18 @@     const std::vector<QuantLib::Rate> &rates,     QuantLib::Frequency frequency,     const QuantLib::DayCounter& dayCounter,+    const QuantLib::ext::shared_ptr<QuantLib::Seasonality>& seasonality,     int interpolator, int approximator, int approximatorArg); +QuantLib::ZeroInflationTermStructure *qlInterpolatedZeroInflationCurveAux(+    const QuantLib::Date &referenceDate,+    const std::vector<QuantLib::Date> &dates,+    const std::vector<QuantLib::Rate> &rates,+    QuantLib::Frequency frequency,+    const QuantLib::DayCounter& dayCounter,+    const QuantLib::ext::shared_ptr<QuantLib::Seasonality>& seasonality,+    int interpolator, int approximator, int approximatorArg);+ // Keep per-interpolation template instantiation in this auxiliary translation unit. These entry // points absorb the enum dispatch so callers pass raw values and never name interpolator types. @@ -300,5 +358,81 @@     int evaluation, const QuantLib::Date &d, double forward,     const std::vector<QuantLib::Real> &params, const QuantLib::DayCounter &dc,     const std::vector<QuantLib::Real> &moneyness, QuantLib::Size fdRefinement);++// ZabrInterpolatedSmileSection<Evaluation> is templated over the same evaluation-tag axis as+// ZabrSmileSection above, but unlike ZabrSmileSection it has its own calibration-diagnostic+// getters (alpha/beta/nu/rho/gamma/rmsError/maxError/endCriteria) declared directly on the+// template class, not through any virtual SmileSection slot -- a type-erased+// shared_ptr<SmileSection> alone can't reach them, and there is no single concrete C++ type to+// alias a leaf pointer to (each Evaluation is a distinct instantiation). This handle captures the+// diagnostics as closures over the concrete instantiation at construction time (inside the+// dispatch lambda in qlTermStructureAux.cpp, where the type is known), alongside the type-erased+// SmileSection base for AsSmileSection/pricing use -- avoids any dynamic_cast or a caller-supplied+// discriminant re-dispatch on every accessor call. qlaux.h only forward-declares this (to stay+// free of the zabrinterpolatedsmilesection.hpp include); qlTermStructure.cpp includes both headers+// so the complete type is visible wherever the handle is actually dereferenced.+struct ZabrInterpolatedSmileSectionHandle {+  QuantLib::ext::shared_ptr<QuantLib::SmileSection> section;+  std::function<QuantLib::Real()> alphaFn, betaFn, nuFn, rhoFn, gammaFn, rmsErrorFn, maxErrorFn;+  std::function<QuantLib::EndCriteria::Type()> endCriteriaFn;+};++// ZabrInterpolatedSmileSection<Evaluation>'s own evaluation-tag dispatch, same rule as+// qlZabrSmileSectionAux above.+ZabrInterpolatedSmileSectionHandle *qlZabrInterpolatedSmileSectionAux(+    int evaluation, const QuantLib::Date &optionDate, const QuantLib::Handle<QuantLib::Quote> &forward,+    const std::vector<QuantLib::Rate> &strikes, bool hasFloatingStrikes,+    const QuantLib::Handle<QuantLib::Quote> &atmVolatility,+    const std::vector<QuantLib::Handle<QuantLib::Quote>> &volHandles,+    QuantLib::Real alpha, QuantLib::Real beta, QuantLib::Real nu, QuantLib::Real rho, QuantLib::Real gamma,+    bool isAlphaFixed, bool isBetaFixed, bool isNuFixed, bool isRhoFixed, bool isGammaFixed,+    bool vegaWeighted, const QuantLib::ext::shared_ptr<QuantLib::EndCriteria> &endCriteria,+    const QuantLib::ext::shared_ptr<QuantLib::OptimizationMethod> &method, const QuantLib::DayCounter &dc);++// The fixed-date deposit and FRA helpers, as hasquant builds them. They are the only deposit and+// FRA forms that read a stored fixing -- impliedQuote() is iborIndex_->fixing(fixingDate_, true),+// which reads the store once the fixing date is before the evaluation date -- and QuantLib keeps+// the fixing date, the index and useIndexedCoupon private, where no pointer-to-member peek+// reaches. So the subclass keeps its own copy of what the fixing walk+// (qlRateHelperFixingDependencies) reports, taken from the constructor's arguments, and accept()+// offers a visitor the subclass before falling back to the base class's own dispatch. Neither+// date moves: both forms pass updateDates = false.+class FixedDateDepositRateHelper : public QuantLib::DepositRateHelper {+ public:+  FixedDateDepositRateHelper(const QuantLib::Handle<QuantLib::Quote>& rate, const QuantLib::Date& fixingDate,+                             const QuantLib::ext::shared_ptr<QuantLib::IborIndex>& iborIndex)+  : DepositRateHelper(rate, fixingDate, iborIndex), indexName_(iborIndex->name()), fixingDate_(fixingDate) {}+  void accept(QuantLib::AcyclicVisitor& v) override {+    if (auto* v1 = dynamic_cast<QuantLib::Visitor<FixedDateDepositRateHelper>*>(&v)) v1->visit(*this);+    else DepositRateHelper::accept(v);+  }+  const std::string& indexName() const {return indexName_;}+  const QuantLib::Date& fixingDate() const {return fixingDate_;}+ private:+  std::string indexName_;+  QuantLib::Date fixingDate_;+};++// The FRA fixes where FraRateHelper::initializeDates puts it, iborIndex->fixingDate(startDate),+// and reads that fixing only with useIndexedCoupon; otherwise it prices off the curve.+class FixedDateFraRateHelper : public QuantLib::FraRateHelper {+ public:+  FixedDateFraRateHelper(const QuantLib::Handle<QuantLib::Quote>& rate, const QuantLib::Date& startDate,+                         const QuantLib::Date& endDate, const QuantLib::ext::shared_ptr<QuantLib::IborIndex>& iborIndex,+                         QuantLib::Pillar::Choice pillar, const QuantLib::Date& customPillarDate, bool useIndexedCoupon)+  : FraRateHelper(rate, startDate, endDate, iborIndex, pillar, customPillarDate, useIndexedCoupon),+    indexName_(iborIndex->name()), fixingDate_(iborIndex->fixingDate(startDate)), useIndexedCoupon_(useIndexedCoupon) {}+  void accept(QuantLib::AcyclicVisitor& v) override {+    if (auto* v1 = dynamic_cast<QuantLib::Visitor<FixedDateFraRateHelper>*>(&v)) v1->visit(*this);+    else FraRateHelper::accept(v);+  }+  const std::string& indexName() const {return indexName_;}+  const QuantLib::Date& fixingDate() const {return fixingDate_;}+  bool useIndexedCoupon() const {return useIndexedCoupon_;}+ private:+  std::string indexName_;+  QuantLib::Date fixingDate_;+  bool useIndexedCoupon_;+};  /* vim: set ft=cpp ff=unix ts=8 sts=2 sw=2 et: */
cbits/qlTypesC2HS.h view
@@ -1,4 +1,7 @@ // fake typedefs for C2HS+typedef struct QlCallback QlCallback;+typedef struct QlError QlError;+typedef struct QlStubIndexSelection QlStubIndexSelection; typedef struct Calendar Calendar; typedef struct DayCounter DayCounter; typedef struct Leg Leg;@@ -93,6 +96,7 @@ typedef struct QlPool QlPool; typedef struct QlDefaultProbabilityHelper QlDefaultProbabilityHelper; typedef struct QlDefaultProbabilityTermStructure QlDefaultProbabilityTermStructure;+typedef struct QlAffineHazardRateCurve QlAffineHazardRateCurve; typedef struct QlDeltaVolQuote QlDeltaVolQuote; typedef struct QlFuturesConvAdjustmentQuote QlFuturesConvAdjustmentQuote; typedef struct QlDividend QlDividend;@@ -214,9 +218,11 @@ typedef struct QlRelinkableYieldTermStructure QlRelinkableYieldTermStructure; typedef struct QlSabrInterpolatedSmileSection QlSabrInterpolatedSmileSection; typedef struct QlNoArbSabrInterpolatedSmileSection QlNoArbSabrInterpolatedSmileSection;+typedef struct QlZabrInterpolatedSmileSection QlZabrInterpolatedSmileSection; typedef struct QlSabrSwaptionVolatilityCube QlSabrSwaptionVolatilityCube; typedef struct QlSwaptionVolatilityMatrix QlSwaptionVolatilityMatrix; typedef struct QlNoArbSabrSwaptionVolatilityCube QlNoArbSabrSwaptionVolatilityCube;+typedef struct QlZabrSwaptionVolatilityCube QlZabrSwaptionVolatilityCube; typedef struct QlShortRateDynamics QlShortRateDynamics; typedef struct QlShortRateModel QlShortRateModel; typedef struct QlSimpleQuote QlSimpleQuote;@@ -266,3 +272,10 @@ typedef struct PolymorphicPathGenerator PolymorphicPathGenerator; typedef struct PolymorphicGaussianRsg PolymorphicGaussianRsg; typedef struct SamplePath SamplePath;++typedef struct QlRoughHestonModel QlRoughHestonModel;+typedef struct QlAnalyticRoughHestonEngine QlAnalyticRoughHestonEngine;+typedef struct QlMtMCrossCurrencyBasisSwap QlMtMCrossCurrencyBasisSwap;+typedef struct QlFxResetPricer QlFxResetPricer;+typedef struct QlFxResetCoupon QlFxResetCoupon;+typedef struct QlFxResetNotionalExchange QlFxResetNotionalExchange;
cbits/qlaux.h view
@@ -1,10 +1,12 @@+#include "qlCallback.hpp"+#include <ql/version.hpp> #include <ql/time/date.hpp> #include <ql/errors.hpp> #include <string.h> #include <iterator> #include <memory> #include <vector>-#include <boost/optional.hpp>+#include "qlStdCompat.h" #include <ql/math/matrix.hpp> #include <ql/instruments/varianceswap.hpp> #include <ql/instruments/constnotionalcrosscurrencyswap.hpp>@@ -19,6 +21,8 @@ // (XabrSwaptionVolatilityCube<SwaptionVolCubeNoArbSabrModel>) -- also a typedef of a template // instantiation, also pulled in fully rather than forward-declared. #include <ql/experimental/volatility/noarbsabrswaptionvolatilitycube.hpp>+// ZabrSwaptionVolatilityCube is another XabrSwaptionVolatilityCube typedef.+#include <ql/termstructures/volatility/swaption/zabrswaptionvolatilitycube.hpp> // TwoFactorModel::ShortRateDynamics is a nested class -- referring to it (even just as a // shared_ptr<> template argument below) requires TwoFactorModel to be a complete type, so // (like SabrSwaptionVolatilityCube above) it can't be left as a forward declaration.@@ -34,11 +38,23 @@ // Used by string-array staging so committed and uncommitted strings share a finalizer and trace label. extern "C" void qlFreeString(char *p); ++ #ifdef QLTRACK_ALLOCATIONS # include <fstream> #endif  namespace QuantLib {+  class RoughHestonModel;+  class AnalyticRoughHestonEngine;+  class MtMCrossCurrencyBasisSwap;+  class FxResetPricer;+  class DiscountingFxResetPricer;+  class FxResetCoupon;+  class FxResetNotionalExchange;+  class DiscountingMtMCrossCurrencyBasisSwapEngine;+  class StubIborCoupon;+   template <class T> class Handle;   class Quote;   class Bond;@@ -89,6 +105,7 @@   class CompositeInstrument;   class CustomIborIndex;   class IborIndex;+  class StubIndexSelection;   class IborCoupon;   class OvernightIndexedCoupon;   class AverageBMACoupon;@@ -130,6 +147,7 @@   class AnalyticEuropeanEngine;   class AnalyticGJRGARCHEngine;   class AnalyticHestonEngine;+  class AnalyticH1HWEngine;   class AnalyticHestonHullWhiteEngine;   class AnalyticPerformanceEngine;   class AssetOrNothingPayoff;@@ -233,6 +251,7 @@   class ExponentialSplinesFitting;   class ExtOUWithJumpsProcess;   class ExtendedBlackScholesMertonProcess;+  class ExtendedBlackVarianceCurve;   class ExtendedOrnsteinUhlenbeckProcess;   class FFTVanillaEngine;   class FaceValueAccrualClaim;@@ -252,6 +271,8 @@   class FractionalDividend;   class FuturesRateHelper;   class OvernightIndexFutureRateHelper;+  class OvernightOvernightBasisSwapRateHelper;+  class OvernightIndexedFundingRateHelper;   class FxForward;   class G2;   class G2ForwardProcess;@@ -263,6 +284,7 @@   class Garch11;   class GarmanKohlagenProcess;   class Gaussian1dModel;+  class Gaussian1dSwaptionVolatility;   class GeneralizedBlackScholesProcess;   class GeneralizedHullWhite;   class Gsr;@@ -283,6 +305,7 @@   class ImpliedTermStructure;   class ImpliedVolTermStructure;   class InflationIndex;+  class BlackCdsOptionEngine;   class IntegralCdsEngine;   class IntegralEngine;   class InterestRateIndex;@@ -318,6 +341,7 @@   class OISRateHelper;   class OneAssetOption;   class OneFactorAffineModel;+  class OneFactorAffineSurvivalStructure;   class OptimizationMethod;   class Option;   class OvernightIndex;@@ -336,6 +360,7 @@   class RebatedExercise;   class ReplicatingVarianceSwapEngine;   class Rounding;+  class SABRVolTermStructure;   class SabrInterpolatedSmileSection;   class SabrVolSurface;   class ShortRateModel;@@ -492,6 +517,7 @@ using QuantLib::AnalyticEuropeanEngine; using QuantLib::AnalyticGJRGARCHEngine; using QuantLib::AnalyticHestonEngine;+using QuantLib::AnalyticH1HWEngine; using QuantLib::AnalyticHestonHullWhiteEngine; using QuantLib::AnalyticPerformanceEngine; using QuantLib::AssetOrNothingPayoff;@@ -594,6 +620,7 @@ using QuantLib::ExponentialSplinesFitting; using QuantLib::ExtOUWithJumpsProcess; using QuantLib::ExtendedBlackScholesMertonProcess;+using QuantLib::ExtendedBlackVarianceCurve; using QuantLib::ExtendedOrnsteinUhlenbeckProcess; using QuantLib::FFTVanillaEngine; using QuantLib::FaceValueAccrualClaim;@@ -613,6 +640,8 @@ using QuantLib::FractionalDividend; using QuantLib::FuturesRateHelper; using QuantLib::OvernightIndexFutureRateHelper;+using QuantLib::OvernightOvernightBasisSwapRateHelper;+using QuantLib::OvernightIndexedFundingRateHelper; using QuantLib::FxForward; using QuantLib::G2; using QuantLib::G2ForwardProcess;@@ -624,6 +653,7 @@ using QuantLib::Garch11; using QuantLib::GarmanKohlagenProcess; using QuantLib::Gaussian1dModel;+using QuantLib::Gaussian1dSwaptionVolatility; using QuantLib::GeneralizedBlackScholesProcess; using QuantLib::GeneralizedHullWhite; using QuantLib::Gsr;@@ -644,6 +674,7 @@ using QuantLib::ImpliedTermStructure; using QuantLib::ImpliedVolTermStructure; using QuantLib::InflationIndex;+using QuantLib::BlackCdsOptionEngine; using QuantLib::IntegralCdsEngine; using QuantLib::IntegralEngine; using QuantLib::InterestRateIndex;@@ -673,6 +704,7 @@ using QuantLib::NelsonSiegelFitting; using QuantLib::NoArbSabrInterpolatedSmileSection; using QuantLib::NoArbSabrSwaptionVolatilityCube;+using QuantLib::ZabrSwaptionVolatilityCube; using QuantLib::NoConstraint; using QuantLib::NonstandardSwap; using QuantLib::NonstandardSwaption;@@ -681,6 +713,7 @@ using QuantLib::OISRateHelper; using QuantLib::OneAssetOption; using QuantLib::OneFactorAffineModel;+using QuantLib::OneFactorAffineSurvivalStructure; using QuantLib::OptimizationMethod; using QuantLib::Option; using QuantLib::OvernightIndex;@@ -700,6 +733,7 @@ using QuantLib::RebatedExercise; using QuantLib::ReplicatingVarianceSwapEngine; using QuantLib::Rounding;+using QuantLib::SABRVolTermStructure; using QuantLib::SabrInterpolatedSmileSection; using QuantLib::SabrVolSurface; using QuantLib::ShortRateModel;@@ -766,10 +800,11 @@ using QuantLib::Date; using QuantLib::Matrix; using QuantLib::ext::shared_ptr;-using QuantLib::ext::optional;  class PolymorphicPathGenerator; class PolymorphicGaussianRsg;+class FixedDateDepositRateHelper;+class FixedDateFraRateHelper;  // Haskell CRateHelper is actually a pointer to a shared_ptr, because rate helpers are used via // shared_ptr in QuantLib and have no Handle-based counterpart upstream.@@ -791,6 +826,30 @@ // and needs no separate parameter type: it goes wherever a curve goes, through the ordinary // Upcastable machinery, and the upcast copy shares its Link so relinking still propagates. using QlRelinkableYieldTermStructure = RelinkableHandle<YieldTermStructure>;+struct QlStubIndexSelection {+  int convention;+  std::vector<shared_ptr<QuantLib::IborIndex>> indices;+};+#if QL_HEX_VERSION >= 0x01440000+QuantLib::StubIndexSelection qlStubSelection(const QlStubIndexSelection* selection);+#endif++using QuantLib::RoughHestonModel;+using QuantLib::AnalyticRoughHestonEngine;+using QuantLib::MtMCrossCurrencyBasisSwap;+using QuantLib::FxResetPricer;+using QuantLib::DiscountingFxResetPricer;+using QuantLib::FxResetCoupon;+using QuantLib::FxResetNotionalExchange;+using QuantLib::DiscountingMtMCrossCurrencyBasisSwapEngine;+using QuantLib::StubIborCoupon;+using QlRoughHestonModel = shared_ptr<RoughHestonModel>;+using QlAnalyticRoughHestonEngine = shared_ptr<AnalyticRoughHestonEngine>;+using QlMtMCrossCurrencyBasisSwap = shared_ptr<MtMCrossCurrencyBasisSwap>;+using QlFxResetPricer = shared_ptr<FxResetPricer>;+using QlFxResetCoupon = shared_ptr<FxResetCoupon>;+using QlFxResetNotionalExchange = shared_ptr<FxResetNotionalExchange>;+ using QlPricingEngine = shared_ptr<PricingEngine>; using QlIborIndex = shared_ptr<IborIndex>; using QlIndex = shared_ptr<Index>;@@ -920,6 +979,9 @@ using QlCPIVolatilitySurface = Handle<CPIVolatilitySurface>; using QlCreditDefaultSwap = shared_ptr<CreditDefaultSwap>; using QlDefaultProbabilityTermStructure = shared_ptr<DefaultProbabilityTermStructure>;+// Held as OneFactorAffineSurvivalStructure, not the DefaultProbabilityTermStructure base, so+// conditionalSurvivalProbability (declared on the former) stays reachable without a downcast.+using QlAffineHazardRateCurve = shared_ptr<OneFactorAffineSurvivalStructure>; using QlDeltaVolQuote = shared_ptr<DeltaVolQuote>; using QlFuturesConvAdjustmentQuote = shared_ptr<FuturesConvAdjustmentQuote>; using QlDividend = shared_ptr<Dividend>;@@ -974,10 +1036,8 @@ using QlMarkovFunctional = shared_ptr<MarkovFunctional>; using QlMerton76Process = shared_ptr<Merton76Process>; using QlMultiAssetOption = shared_ptr<MultiAssetOption>;-// MultiCurve is enable_shared_from_this and upstream's own doc comment says "This must be a-// shared pointer" -- bound as a standalone leaf type (own Finalizable instance, no Upcastable-// parent: it isn't a TermStructure), same shape as e.g. QlSwapRateHelper.-using QlMultiCurve = shared_ptr<MultiCurve>;+namespace hasquant { class ManagedMultiCurve; }+using QlMultiCurve = shared_ptr<hasquant::ManagedMultiCurve>; using QlNonstandardSwap = shared_ptr<NonstandardSwap>; using QlNonstandardSwaption = shared_ptr<NonstandardSwaption>; using QlFloatFloatSwap = shared_ptr<FloatFloatSwap>;@@ -1026,6 +1086,20 @@ // NoArbSabrInterpolatedSmileSection is a dedicated leaf, same shape/reasoning as // QlSabrInterpolatedSmileSection above. using QlNoArbSabrInterpolatedSmileSection = shared_ptr<NoArbSabrInterpolatedSmileSection>;+// ZabrInterpolatedSmileSection<Evaluation> is templated over the same evaluation-tag axis as+// ZabrSmileSection (see qlTermStructureAux.cpp's dispatchZabrEvaluation), but unlike+// ZabrSmileSection it has its own calibration-diagnostic getters (alpha/beta/nu/rho/gamma/+// rmsError/maxError/endCriteria) declared directly on the template class, not through any+// virtual SmileSection slot -- so a type-erased shared_ptr<SmileSection> alone can't reach them,+// and there is no single concrete C++ type to alias a leaf pointer to (each Evaluation is a+// distinct instantiation). ZabrInterpolatedSmileSectionHandle (defined in qlTermStructureAux.h,+// alongside the dispatch that builds it) captures the diagnostics as closures over the concrete+// instantiation at construction time, alongside the type-erased SmileSection base for+// AsSmileSection/pricing use -- avoids any dynamic_cast or a caller-supplied discriminant+// re-dispatch on every accessor call. Forward-declared here (like the Aux-only types above) so+// qlaux.h itself stays free of the zabrinterpolatedsmilesection.hpp include.+struct ZabrInterpolatedSmileSectionHandle;+using QlZabrInterpolatedSmileSection = shared_ptr<ZabrInterpolatedSmileSectionHandle>; using QlSwapIndex = shared_ptr<SwapIndex>; using QlSwapRateHelper = shared_ptr<SwapRateHelper>; using QlSwaption = shared_ptr<Swaption>;@@ -1033,6 +1107,7 @@ using QlSwaptionVolatilityMatrix = shared_ptr<SwaptionVolatilityMatrix>; using QlSabrSwaptionVolatilityCube = shared_ptr<SabrSwaptionVolatilityCube>; using QlNoArbSabrSwaptionVolatilityCube = shared_ptr<NoArbSabrSwaptionVolatilityCube>;+using QlZabrSwaptionVolatilityCube = shared_ptr<ZabrSwaptionVolatilityCube>; using QlInterpolatedSwaptionVolatilityCube = shared_ptr<InterpolatedSwaptionVolatilityCube>; // A vol structure is a Handle, same reasoning as QlBlackVolTermStructure above. using QlSwaptionVolatilityStructure = Handle<SwaptionVolatilityStructure>;@@ -1083,6 +1158,10 @@ template <class T> struct ObjClassName {static const char *name() {return typeid(T).name();}}; #define QL_TRACE_NAME_AS(T, S) template <> struct ObjClassName<T*> {static constexpr const char *name() {return S;}}; #define QL_TRACE_NAME(T) QL_TRACE_NAME_AS(T, #T)+QL_TRACE_NAME(QlError)+QL_TRACE_NAME(QlStubIndexSelection)+QL_TRACE_NAME(QlCallback)+QL_TRACE_NAME(hasquant::Callback) QL_TRACE_NAME(AffineModel) QL_TRACE_NAME(AmericanExercise) QL_TRACE_NAME(AnalyticBSMHullWhiteEngine)@@ -1099,6 +1178,7 @@ QL_TRACE_NAME(AnalyticEuropeanEngine) QL_TRACE_NAME(AnalyticGJRGARCHEngine) QL_TRACE_NAME(AnalyticHestonEngine)+QL_TRACE_NAME(AnalyticH1HWEngine) QL_TRACE_NAME(AnalyticHestonHullWhiteEngine) QL_TRACE_NAME(AnalyticPerformanceEngine) QL_TRACE_NAME(AssetOrNothingPayoff)@@ -1212,6 +1292,7 @@ QL_TRACE_NAME(ExponentialSplinesFitting) QL_TRACE_NAME(ExtOUWithJumpsProcess) QL_TRACE_NAME(ExtendedBlackScholesMertonProcess)+QL_TRACE_NAME(ExtendedBlackVarianceCurve) QL_TRACE_NAME(ExtendedOrnsteinUhlenbeckProcess) QL_TRACE_NAME(FdmQuantoHelper) QL_TRACE_NAME(FFTVanillaEngine)@@ -1245,6 +1326,8 @@ QL_TRACE_NAME(DigitalCmsSpreadCoupon) QL_TRACE_NAME(DigitalReplication) QL_TRACE_NAME(StrippedCappedFlooredCoupon)+QL_TRACE_NAME(FixedDateDepositRateHelper)+QL_TRACE_NAME(FixedDateFraRateHelper) QL_TRACE_NAME(Forward) QL_TRACE_NAME(ForwardRateAgreement) QL_TRACE_NAME(ForwardSpreadedTermStructure)@@ -1252,6 +1335,8 @@ QL_TRACE_NAME(FractionalDividend) QL_TRACE_NAME(FuturesRateHelper) QL_TRACE_NAME(OvernightIndexFutureRateHelper)+QL_TRACE_NAME(OvernightOvernightBasisSwapRateHelper)+QL_TRACE_NAME(OvernightIndexedFundingRateHelper) QL_TRACE_NAME(FxForward) QL_TRACE_NAME(G2) QL_TRACE_NAME(G2SwaptionEngine)@@ -1261,6 +1346,7 @@ QL_TRACE_NAME(Garch11) QL_TRACE_NAME(GarmanKohlagenProcess) QL_TRACE_NAME(Gaussian1dModel)+QL_TRACE_NAME(Gaussian1dSwaptionVolatility) QL_TRACE_NAME(GeneralizedBlackScholesProcess) QL_TRACE_NAME(GeneralizedHullWhite) QL_TRACE_NAME(Gsr)@@ -1283,6 +1369,7 @@ QL_TRACE_NAME(Index) QL_TRACE_NAME(InflationIndex) QL_TRACE_NAME(Instrument)+QL_TRACE_NAME(BlackCdsOptionEngine) QL_TRACE_NAME(IntegralCdsEngine) QL_TRACE_NAME(IntegralEngine) QL_TRACE_NAME(InterestRate)@@ -1314,6 +1401,7 @@ QL_TRACE_NAME(OISRateHelper) QL_TRACE_NAME(OneAssetOption) QL_TRACE_NAME(OneFactorAffineModel)+QL_TRACE_NAME(OneFactorAffineSurvivalStructure) QL_TRACE_NAME(OptimizationMethod) QL_TRACE_NAME(Option) QL_TRACE_NAME(OptionletVolatilityStructure)@@ -1354,6 +1442,7 @@ QL_TRACE_NAME(QlBlackProcess) QL_TRACE_NAME(QlBlackScholesCalculator) QL_TRACE_NAME(QlBlackVarianceCurve)+QL_TRACE_NAME(QlAffineHazardRateCurve) QL_TRACE_NAME(QlBlackVolatilitySurfaceDelta) QL_TRACE_NAME(QlBlackVolTermStructure) QL_TRACE_NAME(QlRelinkableBlackVolTermStructure)@@ -1505,6 +1594,21 @@ QL_TRACE_NAME(QlPercentageStrikePayoff) QL_TRACE_NAME(QlPiecewiseTimeDependentHestonModel) QL_TRACE_NAME(QlPlainVanillaPayoff)+QL_TRACE_NAME(RoughHestonModel)+QL_TRACE_NAME(AnalyticRoughHestonEngine)+QL_TRACE_NAME(MtMCrossCurrencyBasisSwap)+QL_TRACE_NAME(FxResetPricer)+QL_TRACE_NAME(DiscountingFxResetPricer)+QL_TRACE_NAME(FxResetCoupon)+QL_TRACE_NAME(FxResetNotionalExchange)+QL_TRACE_NAME(DiscountingMtMCrossCurrencyBasisSwapEngine)+QL_TRACE_NAME(StubIborCoupon)+QL_TRACE_NAME(QlRoughHestonModel)+QL_TRACE_NAME(QlAnalyticRoughHestonEngine)+QL_TRACE_NAME(QlMtMCrossCurrencyBasisSwap)+QL_TRACE_NAME(QlFxResetPricer)+QL_TRACE_NAME(QlFxResetCoupon)+QL_TRACE_NAME(QlFxResetNotionalExchange) QL_TRACE_NAME(QlPricingEngine) QL_TRACE_NAME(QlQuantoBarrierOption) QL_TRACE_NAME(QlQuantoDoubleBarrierOption)@@ -1525,6 +1629,7 @@ QL_TRACE_NAME(QlStrikedTypePayoff) QL_TRACE_NAME(QlSviInterpolatedSmileSection) QL_TRACE_NAME(QlNoArbSabrInterpolatedSmileSection)+QL_TRACE_NAME(QlZabrInterpolatedSmileSection) QL_TRACE_NAME(QlSwap) QL_TRACE_NAME(QlFixedVsFloatingSwap) QL_TRACE_NAME(QlSwapIndex)@@ -1537,6 +1642,7 @@ QL_TRACE_NAME(QlSabrSwaptionVolatilityCube) QL_TRACE_NAME(QlSwaptionVolatilityMatrix) QL_TRACE_NAME(QlNoArbSabrSwaptionVolatilityCube)+QL_TRACE_NAME(QlZabrSwaptionVolatilityCube) QL_TRACE_NAME(QlInterpolatedSwaptionVolatilityCube) QL_TRACE_NAME(QlSwingExercise) QL_TRACE_NAME(QlTermStructure)@@ -1572,6 +1678,7 @@ QL_TRACE_NAME(Region) QL_TRACE_NAME(ReplicatingVarianceSwapEngine) QL_TRACE_NAME(Rounding)+QL_TRACE_NAME(SABRVolTermStructure) QL_TRACE_NAME(Schedule) QL_TRACE_NAME(ShortRateModel) QL_TRACE_NAME(SimplePolynomialFitting)@@ -1634,14 +1741,20 @@ QL_TRACE_NAME(ZeroInflationIndex) QL_TRACE_NAME(ZeroInflationTermStructure) QL_TRACE_NAME(ZeroSpreadedTermStructure)+QL_TRACE_NAME(ZabrInterpolatedSmileSectionHandle) QL_TRACE_NAME_AS(void, "Ptr")  // The trace destination, opened on first use -- see qlMisc.cpp. std::ostream &traceStream(); +// Format every pointer as an address. In particular, ostream's char* overload must not read the+// pointed-to string or produce a trace line the allocation parser cannot recognize.+template <class T> const void *traceAddress(T *p) {return static_cast<const void*>(p);}+template <class T> const void *traceAddress(const shared_ptr<T>& p) {return p.get();}+ // One line of trace: the verb, the label ObjClassName gives `Label', and the pointer. template <class Label, class T> void emit(const char *what, T p) {-  traceStream() << what << " " << ObjClassName<Label>::name() << ": " << p << std::endl;+  traceStream() << what << " " << ObjClassName<Label>::name() << ": " << traceAddress(p) << std::endl; } inline constexpr bool trackAllocations = true; #else@@ -1869,12 +1982,7 @@ // relinking). Null means an empty handle, as with the shared_ptr form above. template <class T> Handle<T> qlNullableHandle(Handle<T> *p) {return p ? *(arg(p)) : Handle<T>();} -// Same as the Handle form above, but null means "construct this default" (via the caller's-// `make`, returning shared_ptr<T>) rather than an empty handle. Still the one accepted shape of-// Handle<T>(shared_ptr<...>) construction: the default branch has no pre-existing Link to-// detach from, since `make` builds the object fresh right here. Named and centralised so a-// call site never has to spell Handle<T>(...) itself -- see qlBlackIborCouponPricer's-// default-correlation SimpleQuote for the motivating case.+// Null constructs a fresh default through `make`; an existing Handle keeps its Link. template <class T, class F> Handle<T> qlNullableHandleOr(Handle<T> *p, F make) {return p ? *(arg(p)) : Handle<T>(make());}  // Accessors for the QuantLib free functions (BondFunctions::, CashFlows::) that want the@@ -1907,8 +2015,8 @@ }  template <class T>-T handleException(char **msg, std::exception &e) {-  *msg = tracedup(e.what());+T handleException(QlError **msg, std::exception &e) {+  qlSetError(msg, e.what());   return 0; } 
hasquant.cabal view
@@ -1,13 +1,16 @@ cabal-version: 2.2 --- This file has been generated from package.yaml by hpack version 0.39.6.------ see: https://github.com/sol/hpack- name:           hasquant-version:        0.7.0.0+version:        0.8.0.0 synopsis:       Bindings to QuantLib-description:    Bindings to the QuantLib library.+description:    Haskell bindings to the QuantLib C++ library. hasquant provides+                pricing, curve-building, and risk primitives, including financial+                instruments, market indexes, term structures, stochastic models,+                and analytic, tree, finite-difference, and Monte Carlo engines.+                .+                The API stays close to QuantLib while using Haskell types to+                represent its object hierarchies and catch invalid combinations+                at compile time. category:       Finance,FFI,Library homepage:       https://github.com/khorser/hasquant#readme bug-reports:    https://github.com/khorser/hasquant/issues@@ -17,6 +20,8 @@ license:        BSD-3-Clause license-file:   LICENSE build-type:     Simple+-- Pinned Stackage snapshots (cabal.project*): GHC 8.10.6 lts-18.8,+-- 9.6.7 lts-22.44, 9.8.4 lts-23.28, 9.10.3 lts-24.56; the other versions are unpinned. tested-with:     GHC == 8.10.6   , GHC == 9.6.7@@ -27,19 +32,26 @@ extra-source-files:     cbits/ql.h     cbits/qlaux.h+    cbits/qlCallback.h+    cbits/qlCheckedFdEngine.h+    cbits/qlExactMeanH1HwEngine.h     cbits/qlEnumC2HS.h     cbits/qlEnumObjects.h     cbits/qlInstrument.h     cbits/qlMisc.h     cbits/qlPricingEngine.h     cbits/qlPricingEngineAux.h+    cbits/qlStdCompat.h     cbits/qlTermStructure.h     cbits/qlTermStructureAux.h     cbits/qlTypesC2HS.h+    cbits/qlCallback.hpp     README.md     cabal.project.local.WINDOWS     tools/api-name-map-0.7.txt     tools/ql-methods-1.43.txt+    tools/ql-methods-1.44.txt+    tools/quantlib-1.44-audit.md extra-doc-files:     CHANGELOG.md     WINDOWS.md@@ -104,6 +116,7 @@       QuantLib.PricingEngine   other-modules:       QuantLib.Internal+      QuantLib.Internal.Callback       QuantLib.Internal.Common       QuantLib.Internal.Syntax       QuantLib.Internal.CalendarEnum@@ -113,6 +126,7 @@   include-dirs:       cbits   cxx-sources:+      cbits/qlCallback.cpp       cbits/qlInstrument.cpp       cbits/qlMisc.cpp       cbits/qlPricingEngine.cpp@@ -122,7 +136,7 @@   build-depends:       base >=4.14 && <5     , template-haskell >=2.16 && <2.25-    , time >=1.9.3 && <1.16+    , time >=1.9.3 && <1.17     , vector >=0.12.3 && <0.14   default-language: Haskell2010   if flag(trackAllocations)@@ -193,8 +207,8 @@   build-depends:       base >=4.14 && <5     , hasquant-    , time >=1.9.3 && <1.16-    , vector >=0.12.3 && <0.14+    , time >=1.9.3 && <1.17+    , vector   default-language: Haskell2010   if flag(trackAllocations)     ghc-options: -g3@@ -224,7 +238,7 @@     , filepath >=1.4.2.1 && <1.6     , hasquant     , process >=1.6.13.2 && <1.7-    , time >=1.9.3 && <1.16+    , time >=1.9.3 && <1.17   default-language: Haskell2010   if flag(trackAllocations)     ghc-options: -g3@@ -256,15 +270,20 @@       QuantLib.Spec.Instrument.InflationCapFloor       QuantLib.Spec.Instrument.Option       QuantLib.Spec.Instrument.Swap+      QuantLib.Spec.Instrument.MtmCrossCurrency       QuantLib.Spec.InterestRateAndCashFlow+      QuantLib.Spec.CashFlow.FxReset       QuantLib.Spec.Matrix+      QuantLib.Spec.Method       QuantLib.Spec.Model+      QuantLib.Spec.Model.RoughHeston       QuantLib.Spec.PricingEngine       QuantLib.Spec.Process       QuantLib.Spec.Quote       QuantLib.Spec.Statistics       QuantLib.Spec.TermStructure       QuantLib.Spec.TermStructure.Commodity+      QuantLib.Spec.TermStructure.Inflation       QuantLib.Spec.TermStructure.InflationVolatility       QuantLib.Example.AmericanLSM       QuantLib.Example.AsianOption@@ -309,7 +328,7 @@       test/hspec       test/example       test/main-  ghc-options: -Wall -Wredundant-constraints -Wmissing-exported-signatures -Widentities+  ghc-options: -Wall -Wredundant-constraints -Wmissing-exported-signatures -Widentities -rtsopts   build-depends:       HUnit >=1.6.2 && <1.7     , QuickCheck >=2.14.2 && <2.19@@ -319,8 +338,8 @@     , hasquant     , hspec >=2.7.10 && <2.12     , process >=1.6.13.2 && <1.7-    , time >=1.9.3 && <1.16-    , vector >=0.12.3 && <0.14+    , time >=1.9.3 && <1.17+    , vector   default-language: Haskell2010   if flag(trackAllocations)     ghc-options: -g3
test/example/QuantLib/Example/Bond.hs view
@@ -102,12 +102,13 @@       r <- simpleQuote q       depositRateHelper         r-        (p, Months)-        fixDays-        targetCal'-        ModifiedFollowing-        True-        actual365Fixeddc')+        (DepositTenor+          (p, Months)+          fixDays+          targetCal'+          ModifiedFollowing+          True+          actual365Fixeddc'))     $ zip zcQuotes zcTenors   quotes <- mapM simpleQuote marketQuotes   discBondHelpers <- mapM@@ -180,9 +181,9 @@     mapM (\(q, p) ->       do         quote <- simpleQuote q-        depositRateHelper quote p fixDays (targetCal md)+        depositRateHelper quote (DepositTenor p fixDays (targetCal md)                                        ModifiedFollowing-                                       True (actual360dc md)) $+                                       True (actual360dc md))) $           zip liborDepoQuotes liborDepoTerms    eur6M <- I.iborIndex I.Euribor6M Nothing@@ -191,9 +192,9 @@     mapM (\(q, n) ->       do         quote <- simpleQuote q-        swapRateHelperFromConventions quote (n, Years) (targetCal md) Annual Unadjusted-                              (thirty360Europeandc md) eur6M Nothing (1, Days) Nothing-                              Nothing LastRelevantDate Nothing False Nothing Nothing Nothing >>= asRateHelper) $+        swapRateHelper quote (SwapRateTenor (n, Years) (targetCal md) Annual Unadjusted+                              (thirty360Europeandc md) eur6M (1, Days) Nothing Nothing) Nothing Nothing+                              LastRelevantDate Nothing False Nothing Nothing >>= asRateHelper) $           zip liborSwapQuotes liborSwapTerms    fwdCurve <- piecewiseYieldCurve
test/example/QuantLib/Example/CDS.hs view
@@ -45,7 +45,7 @@     (\t -> do         spread <- simpleQuote quotedSpread         spreadCdsHelper spread (t, Months) 1 cal Quarterly Following TwentiethIMM dc-          recoveryRate ts True True Nothing dc True Midpoint)+          recoveryRate ts True True Nothing dc True Midpoint Nothing)     [3, 6, 12, 24]    hts <- piecewiseDefaultCurve (ReferenceDate evalDate) (fromList instruments) dc [] HazardRate BackwardFlat defaultIterativeBootstrapOpts False
test/example/QuantLib/Example/CVAIRS.hs view
@@ -46,9 +46,9 @@    swapQuotes <- mapM simpleQuote ratesSwapMkt   swapHelpers <- forM (zip swapQuotes tenorsSwapMkt) $ \(q, t) ->-    TS.swapRateHelperFromConventions q (t, Years) cal Quarterly ModifiedFollowing actActISDA yieldIndex-      Nothing (0, Days) Nothing-      Nothing TS.LastRelevantDate Nothing False Nothing Nothing Nothing+    TS.swapRateHelper q (TS.SwapRateTenor (t, Years) cal Quarterly ModifiedFollowing actActISDA yieldIndex (0, Days) Nothing Nothing)+      Nothing Nothing+      TS.LastRelevantDate Nothing False Nothing Nothing       >>= TS.asRateHelper    swapTS <- TS.piecewiseYieldCurve (TS.SettlementDays 2 cal) (fromList swapHelpers) actActISDA []
test/example/QuantLib/Example/CustomSDE.hs view
@@ -4,17 +4,8 @@ -- American put on it with 'QuantLib.Method.lsmRegress'. Nothing crosses the FFI boundary inside -- the path loop. ----- This is the @StochasticProcess@ half of issue #18, and it is deliberately /not/ a callback.--- QuantLib's @MultiPathGenerator@ (which 'QuantLib.Method.pathGenerator' wraps) calls--- @process->evolve@ once per timestep /per path/, so a Haskell-subclassed @StochasticProcess@--- would put an FFI crossing in the hottest loop there is -- millions of them for a realistic run.--- The reusable inner primitive sits one level lower: the gaussian sequence generator the path--- generator merely consumes. Exposing that and letting Haskell drive the evolution is the same--- decomposition 'QuantLib.Method.lsmRegress' applies to @LongstaffSchwartzPathPricer@, and it--- costs one crossing per /path/ instead of one per timestep. Little is given up: a Haskell-evolved--- SDE yields paths rather than a @StochasticProcess@ object, but no stock QuantLib pricing engine--- would have accepted a custom process anyway -- their constructors are typed on concrete process--- classes (@GeneralizedBlackScholesProcess@ and friends), not on the abstract base.+-- 'gaussianRsg' lets Haskell evolve a whole path per FFI call. QuantLib's path generator+-- would call a custom process once per timestep, while stock engines require concrete processes. -- -- Three checks, on "QuantLib.Example.AmericanLSM"'s fixture (S=36, K=40, r=6%, vol=20%, val date -- 15-May-1998, maturity 17-May-1999) so the reference numbers carry over:
test/example/QuantLib/Example/Fdm.hs view
@@ -26,8 +26,9 @@ --   per-grid-node crossing rather than a whole-grid one. -- * 'QuantLib.Instrument.Option.withCustomStrikedPayoff' driving --   'QuantLib.PricingEngine.fdBlackScholesVanillaEngine' -- the engine that reaches past the---   @Payoff@ interface, downcasting to @StrikedTypePayoff@ with no null check to read a strike for---   its mesher. A payoff from 'QuantLib.Instrument.Option.withCustomPayoff' crashes there; one+--   @Payoff@ interface, downcasting to @StrikedTypePayoff@ to read a strike for its mesher. A+--   payoff from 'QuantLib.Instrument.Option.withCustomPayoff' is rejected there (QuantLib <= 1.43,+--   which skips the null check, crashes); one --   carrying an advisory strike makes the cast succeed and the engine prices the Haskell function --   itself. Checked against the native @PlainVanilla@ payoff through the same engine (identical --   lambda, identical strike, so identical price).@@ -48,10 +49,7 @@ --   forces an exact node at each factor's mean-reverting level). Evaluated at @t = @ the sole --   exercise date (matching @exerciseDates@'s one entry -- evaluating at @t = 0@, not a key of --   that map, throws deep inside QuantLib's own exercise-date lookup): at the swap's own final---   maturity no cashflows remain, so the value must be exactly 0 regardless of the model. A---   model-independent sanity check in place of the numeric cross-check against an independently---   computed swap NPV originally planned, which would need reproducing---   @FdmAffineModelSwapInnerValue@'s own analytic-bond-pricing formula in Haskell.+--   maturity no cashflows remain, so the value must be exactly 0 regardless of the model. -- * 'gluedMesher' -- splices the grid's left and right halves (split at the center node) back --   together, checked against the original @xs@ list (the shared boundary node must be --   deduplicated, not doubled); and a negative check that gluing the same two halves in the wrong@@ -62,6 +60,9 @@   , run   ) where import Control.Exception(try)+import Control.Monad(when)+import System.Environment(lookupEnv)+import System.IO(hPutStrLn, hFlush, stderr) import Data.Time.Calendar(addDays, addGregorianYearsClip, diffDays) import Data.List(minimumBy) import Data.Ord(comparing)@@ -159,6 +160,11 @@  run :: IO Result run = do+  tracing <- lookupEnv "HASQUANT_TRACE_FDM"+  let mark name = when (tracing == Just "1") $ do+        hPutStrLn stderr ("FDM stage: " ++ name)+        hFlush stderr+  mark "setup and evaluation date"   setEvaluationDate $ Just evalDate   dc <- dayCounter Actual365FixedStandard   underQ <- simpleQuote spot@@ -204,14 +210,17 @@    europeanOpt <- vanillaOption vanillaPayoff europeanEx   analyticEuropeanEngine bsmProc Nothing >>= QuantLib.Instrument.setPricingEngine europeanOpt+  mark "analytic engine"   analytic <- npv europeanOpt +  mark "European rollback"   fdmEuro <- fdmRollback 1 applyFn applyDirFn solveFn Nothing V.empty Douglas grid0 tMat 0 nSteps 0    americanOpt <- vanillaOption vanillaPayoff americanEx   americanInst <- asOneAssetOption americanOpt   fdBlackScholesVanillaEngine bsmProc [] (fromIntegral nSteps) (fromIntegral nPts) 0 Douglas False 0.0 CashDividendSpot     >>= QuantLib.Instrument.setPricingEngine americanInst+  mark "native American engine"   fdRef <- npv americanInst    -- withCustomStrikedPayoff through the very engine a plain withCustomPayoff cannot survive:@@ -221,6 +230,7 @@   -- FdmLogInnerValue, which takes a plain Payoff. Deriving from StrikedTypePayoff makes that cast   -- succeed, so the engine sizes its grid from the advisory strike and then prices the *Haskell*   -- function. Same lambda, same strike as vanillaPayoff, so the result must equal fdRef exactly.+  mark "custom striked payoff engine"   fdCustomStrikedRef <- withCustomStrikedPayoff Call strike "HaskellCall" (\s -> max (s - strike) 0) $ \custom -> do     opt <- vanillaOption custom americanEx     inst <- asOneAssetOption opt@@ -230,8 +240,10 @@    let stepTimes = V.fromList [tMat * fromIntegral i / fromIntegral nSteps | i <- [1 .. nSteps]]       stepCond _t u = V.zipWith max u grid0+  mark "American rollback"   fdmAmerican <- fdmRollback 1 applyFn applyDirFn solveFn (Just stepCond) stepTimes Douglas grid0 tMat 0 nSteps 0 +  mark "meshers"   mesh1d <- predefined1dMesher (V.fromList xs)   mesher <- fdmMesherComposite [mesh1d] @@ -248,13 +260,16 @@   overlapResult <- try (gluedMesher rightHalf leftHalf) :: IO (Either Error Fdm1dMesher)   let gluedOverlapRejected = either (const True) (const False) overlapResult   let ivFn _t loc = case loc of [x] -> intrinsicAt x; _ -> error "fdmSolve: expected a 1D location"+  mark "custom calculator"   withCustomFdmInnerValueCalculator mesher ivFn ivFn $ \calc -> do     -- Node-level check, pinning both fdmAvgInnerValue's argument order and fdmIteratorAt's     -- coordinate-to-index arithmetic on the C++ side (see qlPricingEngine.cpp): the calculator's     -- own avgInnerValue at the grid's center node must match intrinsicAt evaluated directly.     avgAtCenter <- fdmAvgInnerValue calc mesher [centerIdx] tMat +    mark "European solve"     fdmSolveEuro <- fdmSolve mesher calc 1 applyFn applyDirFn solveFn Nothing V.empty Douglas tMat 0 nSteps 0+    mark "American solve"     fdmSolveAmerican <- fdmSolve mesher calc 1 applyFn applyDirFn solveFn (Just stepCond) stepTimes Douglas tMat 0 nSteps 0      -- FdmZeroInnerValue: always 0, at any node.@@ -268,6 +283,7 @@     -- cell center, so it is not bit-for-bit identical, just close (see     -- QuantLib.Method.fdmLogInnerValue's haddock).     logCalc <- fdmLogInnerValue payoff mesher 0+    mark "log inner value solve"     fdmLogEuro <- fdmSolve mesher logCalc 1 applyFn applyDirFn solveFn Nothing V.empty Douglas tMat 0 nSteps 0      -- withCustomCellAveragingInnerValue payoff mesher 0 exp is the same computation as@@ -275,6 +291,7 @@     -- FdmCellAveragingInnerValue with gridMapping = exp internally) via a genuine per-node Haskell     -- callback instead -- this is the check that actually exercises that callback path, and the     -- two must agree bit-for-bit (same C++ formula, same exp function).+    mark "cell averaging solve"     fdmCustomCellAvgEuro <- withCustomCellAveragingInnerValue payoff mesher 0 exp $ \customCalc ->       fdmSolve mesher customCalc 1 applyFn applyDirFn solveFn Nothing V.empty Douglas tMat 0 nSteps 0 @@ -284,6 +301,7 @@     -- innerValue (no cell averaging -- see fdminnervaluecalculator.cpp), so this checks exactly     -- against a Haskell-computed max-basket intrinsic value, at two different node pairs (one     -- where asset 1's leg is the max, one where asset 2's is).+    mark "basket calculators"     basketMesher <- fdmMesherComposite [mesh1d, mesh1d]     basketCalc <- fdmLogBasketInnerValue (Max payoff) basketMesher     basketAtEqualNodes <- fdmAvgInnerValue basketCalc basketMesher [centerIdx, centerIdx] tMat@@ -297,6 +315,7 @@     -- log-spot: fdmLogInnerValue/fdmLogBasketInnerValue apply gridMapping = exp before the payoff     -- is called. Note the continuation spans the whole use, not just construction: the calculator     -- stores the payoff and calls back into it during fdmSolve (see withCustomPayoff's haddock).+    mark "custom payoff and basket"     (fdmCustomPayoffEuro, customBasketAtAsset1Max) <-       withCustomPayoff "HaskellCall" "max(S - K, 0), defined in Haskell" (\s -> max (s - strike) 0) $ \custom -> do         customPayoffCalc <- fdmLogInnerValue custom mesher 0@@ -318,6 +337,7 @@     hwMesher <- fdmMesherComposite [hwMesh]     hwLocs <- fdmMesherLocations hwMesher 0     let hwIdx0 = nearestZeroIdx (V.toList hwLocs)+    mark "Hull-White calculator"     hwCalc <- fdmAffineHullWhiteModelSwapInnerValue hwDisModel hwFwdModel swp [(irMat, swapEnd)] hwMesher 0     -- Evaluated at t = irMat (the sole exercise date, matching the one entry in exerciseDates --     -- evaluating at t = 0, which isn't a t2d key, throws deep inside QuantLib's own exercise-date@@ -336,6 +356,7 @@     g2LocsY <- fdmMesherLocations g2Mesher 1     let g2Idx0x = nearestZeroIdx (V.toList g2LocsX)         g2Idx0y = nearestZeroIdx (V.toList g2LocsY)+    mark "G2 calculator"     g2Calc <- fdmAffineG2ModelSwapInnerValue g2DisModel g2FwdModel swp [(irMat, swapEnd)] g2Mesher 0     g2NodeNpv <- fdmAvgInnerValue g2Calc g2Mesher [g2Idx0x, g2Idx0y] irMat 
test/example/QuantLib/Example/Gaussian1dModels.hs view
@@ -150,7 +150,7 @@       nominalFloating = concatMap (\x -> [x, x]) nominalFixed -- 6m vs. 1y: two float periods per fixed one       strikes = replicate n strike   underlying2 <- nonstandardSwap Payer nominalFixed nominalFloating fixedSchedule strikes thirty360bb-    floatSchedule euribor6m 1.0 0.0 act360 False False Nothing+    floatSchedule euribor6m 1.0 0.0 act360 False False Nothing 0 Nothing   swaption2 <- nonstandardSwaption underlying2 ex Physical PhysicalOTC   setPricingEngine swaption2 nonstandardSwaptionEngine   basket3 <- calibrationBasket swaption2 swapBase swaptionVol MaturityStrikeByDeltaGamma@@ -160,7 +160,7 @@   let nominalFixed2 = replicate n 1.0       nominalFloating2 = replicate (2 * n) 0.0 -- null the second leg   underlying3 <- nonstandardSwap Receiver nominalFixed2 nominalFloating2 fixedSchedule strikes thirty360bb-    floatSchedule euribor6m 1.0 0.0 act360 False True Nothing -- final capital exchange+    floatSchedule euribor6m 1.0 0.0 act360 False True Nothing 0 Nothing -- final capital exchange   let exercise2 = Rebated ex (-1.0) 2 cal Following   swaption3 <- nonstandardSwaption underlying3 exercise2 Physical PhysicalOTC @@ -189,9 +189,7 @@    reversionQuote <- simpleQuote reversion   cmsPricer <- CF.linearTsrPricer swaptionVol reversionQuote Nothing (CF.LinearTsrPricerSettings CF.LinearTsrRateBound Nothing)-  -- Only the CMS leg (leg 0) needs an explicit pricer -- a plain (uncapped/unfloored) Euribor-  -- leg computes its forecast fixing directly, with no pricer required (confirmed in the-  -- increment 2 smoke test).+  -- Only the CMS leg needs a pricer; the plain Euribor leg forecasts its fixing directly.   leg0 <- leg underlying4 0   CF.setCouponPricer leg0 cmsPricer 
test/example/QuantLib/Example/HaskellLSM.hs view
@@ -1,5 +1,4 @@--- |Benchmarks 'QuantLib.Method.lsmRegress' (the coarsened primitive CLAUDE.md's callback-shape--- rule prescribes -- one batched regression call per exercise date, using QuantLib's own+-- |Benchmarks 'QuantLib.Method.lsmRegress' (one batched call per exercise date, using QuantLib's -- Eigen-backed least-squares solve) against the naive alternative: the identical backward -- induction, but with the per-date regression re-implemented from scratch in plain Haskell -- (normal equations solved by hand-rolled Gauss-Jordan elimination over small lists, no@@ -7,13 +6,8 @@ -- exact same calibration\/pricing path sets from "QuantLib.Example.AmericanLSM"'s fixture, so -- any timing difference is the regression implementation, not the paths. ----- This is deliberately an apples-to-oranges comparison, not a controlled microbenchmark: the--- Haskell side uses contiguous vectors for the large path arrays and a textbook--- (unoptimized, non-pivoted-for-speed) solve over the small regression system, while--- 'lsmRegress' calls into QuantLib's C++ least-squares machinery. That gap is the point -- it--- illustrates why CLAUDE.md's "coarsen the language-boundary crossing" pattern reuses QuantLib's--- own regression primitive instead of shipping the state across the FFI boundary once per path--- and reimplementing the fit on the Haskell side.+-- This compares a textbook Haskell solve with QuantLib's optimized least-squares machinery;+-- it is an end-to-end timing comparison, not a controlled microbenchmark. -- -- Every list traversal below is total: no 'head'\/'tail'\/'last'\/'init'\/@(!!)@\/'maximum', and -- no partial conversion of a plain list into a 'NonEmpty'. Genuinely non-empty-by-construction
test/example/QuantLib/Example/InflationCurve.hs view
@@ -43,9 +43,9 @@   forM_ (zip [1 :: Double ..] fixingDates) $ \(i, d) -> addFixing zii d (260.0 + i) False   q1 <- simpleQuote flatRate   q2 <- simpleQuote flatRate-  h1 <- zeroCouponInflationSwapHelper q1 obsLag maturity1 cal Unadjusted dc zii CPILinear LastRelevantDate Nothing-  h2 <- zeroCouponInflationSwapHelper q2 obsLag maturity2 cal Unadjusted dc zii CPILinear LastRelevantDate Nothing-  zeroCurve <- piecewiseZeroInflationCurve evalDate baseDate Monthly dc [h1, h2] Linear+  h1 <- zeroCouponInflationSwapHelper q1 obsLag (InflationSwapToMaturity maturity1) cal Unadjusted dc zii CPILinear LastRelevantDate Nothing+  h2 <- zeroCouponInflationSwapHelper q2 obsLag (InflationSwapToMaturity maturity2) cal Unadjusted dc zii CPILinear LastRelevantDate Nothing+  zeroCurve <- piecewiseZeroInflationCurve evalDate baseDate Monthly dc [h1, h2] Nothing Linear   z1 <- zeroRate zeroCurve maturity1 True   z2 <- zeroRate zeroCurve maturity2 True   -- the helper builds its swap internally, so this accessor is the only way to reach it;@@ -58,9 +58,9 @@   nominalCurve <- flatForward (ReferenceDate evalDate) nominalQ dc IR.Continuous Annual   qy1 <- simpleQuote flatRate   qy2 <- simpleQuote flatRate-  hy1 <- yearOnYearInflationSwapHelper qy1 obsLag maturity1 cal Unadjusted dc yii CPILinear nominalCurve LastRelevantDate Nothing-  hy2 <- yearOnYearInflationSwapHelper qy2 obsLag maturity2 cal Unadjusted dc yii CPILinear nominalCurve LastRelevantDate Nothing-  yoyCurve <- piecewiseYoyInflationCurve evalDate baseDate flatRate Monthly dc [hy1, hy2] Linear+  hy1 <- yearOnYearInflationSwapHelper qy1 obsLag (InflationSwapToMaturity maturity1) cal Unadjusted dc yii CPILinear nominalCurve LastRelevantDate Nothing+  hy2 <- yearOnYearInflationSwapHelper qy2 obsLag (InflationSwapToMaturity maturity2) cal Unadjusted dc yii CPILinear nominalCurve LastRelevantDate Nothing+  yoyCurve <- piecewiseYoyInflationCurve evalDate baseDate flatRate Monthly dc [hy1, hy2] Nothing Linear   y1 <- yoyRate yoyCurve maturity1 True   y2 <- yoyRate yoyCurve maturity2 True   yoyFair <- fairRate =<< helperInstrument hy1
test/example/QuantLib/Example/InflationInstruments.hs view
@@ -25,12 +25,8 @@ import QuantLib.Time.Date import QuantLib.Time.Schedule --- |Two 'ZeroInflationIndex' instances sharing a name/region/currency/frequency/lag share--- fixings via QuantLib's global @IndexManager@ (keyed by name, not per-instance) -- verified--- with a standalone scratch check before relying on it here. This lets us build a curve from--- an *unlinked* index (@idx0@), then construct a second, curve-linked index (@idx1@) that can--- forecast off it, entirely sidestepping the RelinkableHandle-based bootstrap upstream tests--- use (no @RelinkableHandle@\/@linkTo@ concept exists in hasquant -- see README.md's TODO).+-- |Indexes with the same identity share fixings through QuantLib's global @IndexManager@.+-- Build the curve with @idx0@, then forecast through the curve-linked @idx1@. data Result = Result   { zcisNpvBeforeFairRate :: Double   , zcisNpvAtFairRate :: Double@@ -146,9 +142,9 @@    q1 <- simpleQuote flatRate   q2 <- simpleQuote flatRate-  h1 <- zeroCouponInflationSwapHelper q1 obsLag maturity2Y cal Unadjusted dc idx0 CPILinear LastRelevantDate Nothing-  h2 <- zeroCouponInflationSwapHelper q2 obsLag maturity5Y cal Unadjusted dc idx0 CPILinear LastRelevantDate Nothing-  zeroCurve <- piecewiseZeroInflationCurve evalDate baseDate Monthly dc [h1, h2] Linear+  h1 <- zeroCouponInflationSwapHelper q1 obsLag (InflationSwapToMaturity maturity2Y) cal Unadjusted dc idx0 CPILinear LastRelevantDate Nothing+  h2 <- zeroCouponInflationSwapHelper q2 obsLag (InflationSwapToMaturity maturity5Y) cal Unadjusted dc idx0 CPILinear LastRelevantDate Nothing+  zeroCurve <- piecewiseZeroInflationCurve evalDate baseDate Monthly dc [h1, h2] Nothing Linear   -- curve-linked index (same name/region/etc, picks up idx0's fixings automatically)   idx1 <- customZeroInflationIndex "WL CPI" reg False Monthly obsLagI gbp (Just zeroCurve) @@ -181,9 +177,9 @@   forM_ (zip [1 :: Double ..] fixingDates) $ \(i, d) -> addFixing yidx0 d (flatRate + i * 0.0001) False   qy1 <- simpleQuote flatRate   qy2 <- simpleQuote flatRate-  hy1 <- yearOnYearInflationSwapHelper qy1 obsLag maturity2Y cal Unadjusted dc yidx0 CPILinear nominalCurve LastRelevantDate Nothing-  hy2 <- yearOnYearInflationSwapHelper qy2 obsLag maturity5Y cal Unadjusted dc yidx0 CPILinear nominalCurve LastRelevantDate Nothing-  yoyCurve <- piecewiseYoyInflationCurve evalDate baseDate flatRate Monthly dc [hy1, hy2] Linear+  hy1 <- yearOnYearInflationSwapHelper qy1 obsLag (InflationSwapToMaturity maturity2Y) cal Unadjusted dc yidx0 CPILinear nominalCurve LastRelevantDate Nothing+  hy2 <- yearOnYearInflationSwapHelper qy2 obsLag (InflationSwapToMaturity maturity5Y) cal Unadjusted dc yidx0 CPILinear nominalCurve LastRelevantDate Nothing+  yoyCurve <- piecewiseYoyInflationCurve evalDate baseDate flatRate Monthly dc [hy1, hy2] Nothing Linear   yidx1 <- customYoyInflationIndex "WL YoY CPI" reg False Monthly obsLagI gbp (Just yoyCurve)   yoySchedule <- schedule (Just evalDate) maturity5Y (6, Months) cal Unadjusted Unadjusted Backward False Nothing Nothing   yoySwap0 <- yearOnYearInflationSwap Payer nominal fixedSchedule flatRate dc yoySchedule yidx1 obsLag CPILinear 0.0 dc cal Unadjusted@@ -208,8 +204,8 @@   cbAccrued <- accruedAmount cb cbSettlement    q3 <- simpleQuote (flatRate + 0.02) -- higher expected inflation-  h3 <- zeroCouponInflationSwapHelper q3 obsLag maturity5Y cal Unadjusted dc idx0 CPILinear LastRelevantDate Nothing-  hiZeroCurve <- piecewiseZeroInflationCurve evalDate baseDate Monthly dc [h1, h3] Linear+  h3 <- zeroCouponInflationSwapHelper q3 obsLag (InflationSwapToMaturity maturity5Y) cal Unadjusted dc idx0 CPILinear LastRelevantDate Nothing+  hiZeroCurve <- piecewiseZeroInflationCurve evalDate baseDate Monthly dc [h1, h3] Nothing Linear   hiIdx <- customZeroInflationIndex "WL CPI" reg False Monthly obsLagI gbp (Just hiZeroCurve)   cbHi <- cpiBond settlementDays faceAmount baseCPI0 obsLag hiIdx CPILinear cpiBondSchedule [couponRate]     dc Unadjusted (Just evalDate) cal (0, Days) cal Unadjusted False
test/example/QuantLib/Example/IsdaCds.hs view
@@ -43,7 +43,7 @@   let depTenors = [1, 2, 3, 6, 9, 12 :: Int]       depQuotes = [0.003081, 0.005525, 0.007163, 0.012413, 0.014, 0.015488]   depositHelpers <- mapM-    (\(t, q) -> simpleQuote q >>= \sq -> depositRateHelper sq (t, Months) 2 weekendsOnly ModifiedFollowing False act360)+    (\(t, q) -> simpleQuote q >>= \sq -> depositRateHelper sq (DepositTenor (t, Months) 2 weekendsOnly ModifiedFollowing False act360))     (zip depTenors depQuotes)    isdaIbor <- iborIndex (Ibor "IsdaIbor" (3, Months) 2 usd weekendsOnly ModifiedFollowing False act360) Nothing@@ -52,8 +52,8 @@       swapQuotes = [ 0.011907, 0.01699, 0.021198, 0.02444, 0.026937, 0.028967, 0.030504                    , 0.031719, 0.03279, 0.034535, 0.036217, 0.036981, 0.037246, 0.037605 ]   swapHelpers <- mapM-    (\(t, q) -> simpleQuote q >>= \sq -> swapRateHelperFromConventions sq (t, Years) weekendsOnly Semiannual ModifiedFollowing-        thirty360bb isdaIbor Nothing (0, Days) Nothing Nothing LastRelevantDate Nothing False Nothing Nothing Nothing)+    (\(t, q) -> simpleQuote q >>= \sq -> swapRateHelper sq (SwapRateTenor (t, Years) weekendsOnly Semiannual ModifiedFollowing+        thirty360bb isdaIbor (0, Days) Nothing Nothing) Nothing Nothing LastRelevantDate Nothing False Nothing Nothing)     (zip swapTenors swapQuotes)    swapHelpers' <- mapM asRateHelper swapHelpers
test/example/QuantLib/Example/MulticurveBootstrapping.hs view
@@ -4,13 +4,7 @@ -- and undated OIS; then a Euribor 6M forecast curve from a deposit, FRAs and swaps -- whose helpers discount off the EONIA curve. Two swaps are then priced on the pair. ----- The point of the port is that multi-curve bootstrapping needs no relinking at all,--- which is what settles issue #1's "probably would need RelinkableHandle first". Upstream--- holds both curves in RelinkableHandles but only ever calls linkTo once each, right after--- its curve is bootstrapped -- semantically just a plain handle over that curve, which is--- what every curve-taking binding here already builds. Relinking as an actual capability--- is a separate feature, exercised by the "relinkable handles" block in--- main/test/QuantLib/Spec/TermStructure.hs.+-- Both curves are linked once after bootstrapping; the example needs no later relinking. -- -- Two deliberate divergences from upstream: --  * The bootstrap accuracy argument (upstream passes 1.0e-15 via an explicit@@ -76,16 +70,16 @@    depoHelpers <- forM depoQuotes $ \(settlDays, rate) -> do     q <- simpleQuote rate-    TS.depositRateHelper q (1, Days) settlDays cal Following False depositDC+    TS.depositRateHelper q (TS.DepositTenor (1, Days) settlDays cal Following False depositDC)    oisHelpers <- forM (shortOisQuotes ++ longOisQuotes) $ \(tenor, rate) -> do     q <- simpleQuote rate-    TS.oisRateHelper 2 tenor (0, Days) q eonia (Nothing :: Maybe TS.YieldTermStructure)+    TS.oisRateHelper (TS.OisTenor 2 tenor (0, Days)) q eonia (Nothing :: Maybe TS.YieldTermStructure)       >>= TS.asRateHelper    datedOisHelpers <- forM datedOisQuotes $ \(start, end, rate) -> do     q <- simpleQuote rate-    TS.oisRateHelperBetweenDates start end q eonia (Nothing :: Maybe TS.YieldTermStructure)+    TS.oisRateHelper (TS.OisBetweenDates start end) q eonia (Nothing :: Maybe TS.YieldTermStructure)       >>= TS.asRateHelper    eoniaCurve <- TS.piecewiseYieldCurve (TS.SettlementDays 0 cal) (fromList (depoHelpers ++ oisHelpers ++ datedOisHelpers))@@ -96,16 +90,16 @@    let euriborHelpers discounting = do         d6MQuote <- simpleQuote 0.00312-        d6M <- TS.depositRateHelper d6MQuote (6, Months) 3 cal Following False depositDC+        d6M <- TS.depositRateHelper d6MQuote (TS.DepositTenor (6, Months) 3 cal Following False depositDC)         fras <- forM fraQuotes $ \(monthsToStart, rate) -> do           q <- simpleQuote rate           TS.fraRateHelper q (TS.FraMonths monthsToStart (monthsToStart + 6) 2 cal ModifiedFollowing             False depositDC) TS.LastRelevantDate Nothing True         swaps <- forM swapQuotes $ \(yrs, rate) -> do           q <- simpleQuote rate-          TS.swapRateHelperFromConventions q (yrs, Years) cal Annual Unadjusted fixedLegDC euribor6M-            Nothing (0, Days) discounting-            Nothing TS.LastRelevantDate Nothing False Nothing Nothing Nothing+          TS.swapRateHelper q (TS.SwapRateTenor (yrs, Years) cal Annual Unadjusted fixedLegDC euribor6M (0, Days) Nothing Nothing)+            Nothing discounting+            TS.LastRelevantDate Nothing False Nothing Nothing             >>= TS.asRateHelper         pure (d6M : fras ++ swaps) 
test/example/QuantLib/Example/OvernightIndexedSwap.hs view
@@ -48,12 +48,12 @@   engine <- discountingSwapEngine estrTS (Just False) Nothing Nothing    ois <- overnightIndexedSwap Payer 100.0 sched fixedRate act360 estrIndex 0.0-    0 Following cal False AveragingCompound defaultOvernightObservation+    0 Following cal False AveragingCompound defaultOvernightObservation Nothing   setPricingEngine ois engine   npv1 <- npv ois    oisTelescopic <- overnightIndexedSwap Payer 100.0 sched fixedRate act360 estrIndex 0.0-    0 Following cal True AveragingCompound defaultOvernightObservation+    0 Following cal True AveragingCompound defaultOvernightObservation Nothing   setPricingEngine oisTelescopic engine   npv2 <- npv oisTelescopic 
test/example/QuantLib/Example/QuickStart.hs view
@@ -51,7 +51,7 @@     ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing    ois <- overnightIndexedSwap Payer 10000000 sched 0.035 dc sofr 0.0-    0 Following cal False AveragingCompound defaultOvernightObservation+    0 Following cal False AveragingCompound defaultOvernightObservation Nothing    engine <- discountingSwapEngine curve (Just False) Nothing Nothing   setPricingEngine ois engine
test/example/QuantLib/Example/Repo.hs view
@@ -20,7 +20,7 @@ import QuantLib.Time.Date import QuantLib.Time.Schedule --- run tests with stack test --ta '--match /Repo'+-- run tests with cabal test all --enable-tests --test-options='--match /Repo' data Result = Result   { cleanPriceR :: Double   , dirtyPriceR :: Double
test/example/QuantLib/Example/Swap.hs view
@@ -45,7 +45,7 @@   depoDC <- dayCounter (Actual360 False)    depoHelpers <- mapM (\(q, p) ->-    TS.depositRateHelper q p (fromIntegral fixingDays) cal ModifiedFollowing True depoDC) $+    TS.depositRateHelper q (TS.DepositTenor p (fromIntegral fixingDays) cal ModifiedFollowing True depoDC)) $       zip depoQuotes depoTerms   fraHelpers <- mapM (\(q, (m1, m2)) ->     TS.fraRateHelper q (TS.FraMonths m1 m2 (fromIntegral fixingDays) cal ModifiedFollowing True depoDC) TS.LastRelevantDate Nothing True) $@@ -68,8 +68,8 @@   swFixedDC <- dayCounter Thirty360European   eu6m <- IR.iborIndex IR.Euribor6M Nothing   swapHelpers <- mapM (\(q, y) ->-    TS.swapRateHelperFromConventions q (y, Years) cal Annual Unadjusted swFixedDC eu6m Nothing (0, Days) Nothing-      Nothing TS.LastRelevantDate Nothing False Nothing Nothing Nothing >>= TS.asRateHelper) $+    TS.swapRateHelper q (TS.SwapRateTenor (y, Years) cal Annual Unadjusted swFixedDC eu6m (0, Days) Nothing Nothing) Nothing Nothing+      TS.LastRelevantDate Nothing False Nothing Nothing >>= TS.asRateHelper) $       zip swapQuotes swapYears    tsDC <- dayCounter ActualActualISDA
test/example/QuantLib/Example/TARF.hs view
@@ -3,7 +3,7 @@     run   , Result(..)   ) where-import Control.Monad(replicateM)+import Control.Monad(replicateM, when) import Data.Time.Calendar(fromGregorian) import Data.List.NonEmpty(fromList, toList) import qualified Data.Vector.Storable as V@@ -46,8 +46,11 @@   ycILS <- interpolatedDiscountCurve (fromList dfILS) dcILS calILS [] LogLinear False   ycEUR <- interpolatedDiscountCurve (fromList dfEUR) dcEUR calEUR [] LogLinear False -  dfILS' <- points grid >>= mapM (\d -> discount ycILS (TimePoint d) False) . V.toList-  dfEUR' <- points grid >>= mapM (\d -> discount ycEUR (TimePoint d) False) . V.toList+  -- the grid prepends t=0 before the first fixing; only fixing times carry forwards/flows+  fixTimes <- V.toList . V.drop 1 <$> points grid+  when (length fixTimes /= length ds) $ fail "TARF: fixing times do not match schedule dates"+  dfILS' <- mapM (\d -> discount ycILS (TimePoint d) False) fixTimes+  dfEUR' <- mapM (\d -> discount ycEUR (TimePoint d) False) fixTimes   let fwds = map ((`roundTo` fxrateDigits) . (* spot)) $ zipWith (/) dfEUR' dfILS'   -- -- alternatively you can use Black-Scholes process   -- let dsILS = map fst dfILS@@ -89,7 +92,7 @@     nextNPV :: PathGenerator -> [Day] -> GenYieldTermStructure y -> IO (Double, [Double])     nextNPV g ds yc = do       s <- next g-      sim <- asset s 0+      sim <- V.drop 1 <$> asset s 0       let State _ fs = foldl genFlows (State ilsTarget []) $ map (`roundTo` fxrateDigits) (V.toList sim)       l <- leg $ zip ds fs       v <- (`roundTo` notionalDigits) <$> npv l (DiscountingCurve yc) True Nothing Nothing
test/hspec/QuantLib/Spec/Calendars.hs view
@@ -3,6 +3,8 @@  import Prelude hiding(tail) +import Control.Monad(forM_)+import QuantLib.Spec.Helpers(quantLibAtMost143, unsupportedQuantLib144) import Test.Hspec  import Data.Time.Calendar@@ -15,6 +17,14 @@ spec :: Day -> Spec spec evalDate = do     describe "calendars" $ do+      forM_ ([Malaysia, Philippines] :: [CalendarConstructor]) $ \country ->+        it ("supports " ++ show country ++ " with a typed version check") $+          if quantLibAtMost143 then+            calendar country `shouldThrow` unsupportedQuantLib144 ("calendar " ++ show country)+          else do+            cal <- calendar country+            isWeekend cal Date.Saturday `shouldReturn` True+            isHoliday cal (fromGregorian 2026 1 1) `shouldReturn` True       it "adjust" $ do         c <- calendar RussiaSettlement         a <- adjust c (fromGregorian 2012 12 22) Preceding
+ test/hspec/QuantLib/Spec/CashFlow/FxReset.hs view
@@ -0,0 +1,151 @@+module QuantLib.Spec.CashFlow.FxReset (spec) where++import Control.Exception(bracket_)+import Control.Monad(forM_)+import Data.List.NonEmpty(NonEmpty(..))+import Data.Time.Calendar(fromGregorian, addDays, diffDays)+import Test.Hspec+import qualified QuantLib.Context as Context+import QuantLib.Time.Calendar+import QuantLib.Time.Schedule+import QuantLib.Currency hiding (rate)+import QuantLib.InterestRate(Compounding(..), VolatilityType(..))+import qualified QuantLib.Index.InterestRate as IR+import qualified QuantLib.Index as Index+import QuantLib.Quote+import QuantLib.TermStructure(CalendarReference(..))+import QuantLib.TermStructure.Yield+import QuantLib.TermStructure.Volatility(constantOptionletVolatility)+import qualified QuantLib.CashFlow as CF+import QuantLib.Spec.Helpers(quantLibAtMost143, unsupportedQuantLib144)++near :: Double -> Double -> Double -> Expectation+near tolerance expected actual = abs (actual - expected) `shouldSatisfy` (< tolerance)++spec :: Spec+spec = describe "FX reset and stub cash flows 1.44" $ do+  it "calculates business-day observations with native validation" $ Context.keepingSettingsGc $ do+    cal <- calendar TARGET+    let valueDate = fromGregorian 2024 7 8+    if quantLibAtMost143 then+      CF.fxResetObservation (CF.FxResetConvention 2 (Just cal)) valueDate `shouldThrow` unsupportedQuantLib144 "fxResetObservation"+    else do+      reset <- CF.fxResetObservation (CF.FxResetConvention 2 (Just cal)) valueDate+      reset `shouldBe` CF.FxReset (fromGregorian 2024 7 4) valueDate+      CF.fxResetValueDate (CF.FxResetConvention 2 (Just cal)) (CF.fxResetFixingDate reset) `shouldReturn` valueDate+      CF.fxResetObservation (CF.FxResetConvention 0 Nothing) valueDate `shouldReturn` CF.FxReset valueDate valueDate+      CF.fxResetObservation (CF.FxResetConvention 2 Nothing) valueDate `shouldThrow` anyException++  it "scales overnight amounts and accruals, wires legs and retains pricers" $ Context.keepingSettingsGc $ do+    let today = fromGregorian 2024 7 1+        start = fromGregorian 2024 7 8+        end = fromGregorian 2024 10 8+    Context.setEvaluationDate (Just today)+    dc <- dayCounter (Actual360 False)+    eur <- currency EUR+    usd <- currency USD+    eurCurve <- simpleQuote 0.01 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+    usdCurve <- simpleQuote 0.05 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+    idx <- IR.overnightIborIndex IR.Sofr (Just usdCurve)+    underlying <- CF.overnightIndexedCoupon end 100 start end idx 1 0 Nothing Nothing dc False CF.AveragingCompound 0 0 False False Nothing Nothing Nothing Nothing+    spot <- simpleQuote 1.1+    let observation = CF.FxReset start start+    if quantLibAtMost143 then do+      CF.fxResetCoupon underlying 100 observation `shouldThrow` unsupportedQuantLib144 "fxResetCoupon"+      CF.fxResetNotionalExchange start 100 Nothing (Just observation) `shouldThrow` unsupportedQuantLib144 "fxResetNotionalExchange"+      CF.discountingFxResetPricer eur usd eurCurve usdCurve spot True Nothing `shouldThrow` unsupportedQuantLib144 "discountingFxResetPricer"+    else do+      coupon <- CF.fxResetCoupon underlying 100 observation+      CF.amount coupon `shouldThrow` anyException+      pricer <- CF.discountingFxResetPricer eur usd eurCurve usdCurve spot True Nothing+      CF.setFxResetPricer coupon pricer+      fx <- CF.fxResetRate pricer observation+      CF.couponNominal coupon >>= near 1e-10 (100 * fx)+      rawAmount <- CF.amount underlying+      CF.amount coupon >>= near 1e-10 (rawAmount * fx)+      let accrualDate = addDays 30 start+      rawAccrued <- CF.couponAccruedAmount underlying accrualDate+      CF.couponAccruedAmount coupon accrualDate >>= near 1e-10 (rawAccrued * fx)+      initExchange <- CF.fxResetNotionalExchange start 100 Nothing (Just observation)+      finalExchange <- CF.fxResetNotionalExchange end 100 (Just observation) Nothing+      nextExchange <- CF.fxResetNotionalExchange end 100 (Just observation) (Just (CF.FxReset end end))+      flows <- mapM CF.asCashFlow [initExchange, finalExchange, nextExchange]+      leg <- CF.cashFlowLeg flows+      CF.setFxResetLegPricer leg pricer+      CF.amount initExchange >>= near 1e-10 (-100 * fx)+      CF.amount finalExchange >>= near 1e-10 (100 * fx)+      nextFx <- CF.fxResetRate pricer (CF.FxReset end end)+      CF.amount nextExchange >>= near 1e-10 (100 * (fx - nextFx))+      CF.fxResetNotionalExchange end 100 Nothing Nothing `shouldThrow` anyException+      plain <- CF.cashFlowLeg [underlying]+      wrapped <- CF.cashFlowLeg [coupon]+      CF.fixingDependencies plain >>= \dependencies -> CF.fixingDependencies wrapped `shouldReturn` dependencies+      Context.collectGarbage+      CF.amount coupon >>= near 1e-10 (rawAmount * fx)+      _ <- setValue spot 1.2+      CF.amount coupon >>= near 1e-10 (rawAmount * fx * 1.2 / 1.1)++  it "uses historical direct, inverse and triangulated exchange rates" $ Context.keepingSettingsGc $+    bracket_ clearExchangeRates clearExchangeRates $ do+      let today = fromGregorian 2024 7 8+          fixing = fromGregorian 2024 7 1+          valueDate = fromGregorian 2024 7 3+      Context.setEvaluationDate (Just today)+      dc <- dayCounter (Actual360 False)+      eur <- currency EUR+      usd <- currency USD+      gbp <- currency GBP+      curve <- simpleQuote 0.02 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+      spot <- simpleQuote 1.5+      if quantLibAtMost143 then+        CF.discountingFxResetPricer eur usd curve curve spot True Nothing `shouldThrow` unsupportedQuantLib144 "discountingFxResetPricer"+      else do+        pricer <- CF.discountingFxResetPricer eur usd curve curve spot True Nothing+        let observation = CF.FxReset fixing valueDate+            register source target fx = exchangeRate source target fx >>= \rate -> addExchangeRate rate fixing fixing+        CF.fxResetRate pricer observation `shouldThrow` anyException+        register eur usd 1.1+        CF.fxResetRate pricer observation >>= near 1e-12 1.1+        clearExchangeRates+        register usd eur (1 / 1.1)+        CF.fxResetRate pricer observation >>= near 1e-12 1.1+        clearExchangeRates+        register eur gbp 0.8+        register gbp usd 1.375+        CF.fxResetRate pricer observation >>= near 1e-12 1.1++  it "constructs interpolated stub coupons and expands component dependencies" $ Context.keepingSettingsGc $ do+    let today = fromGregorian 2026 5 27+        start = fromGregorian 2026 5 29+        end = fromGregorian 2026 8 28+    Context.setEvaluationDate (Just today)+    cal <- calendar NewZealandWellington+    dc <- dayCounter Actual365FixedStandard+    nzd <- currency NZD+    curve2 <- simpleQuote 0.02 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+    curve3 <- simpleQuote 0.04 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+    short <- IR.iborIndex (IR.Ibor "Bkbm" (2, Months) 0 nzd cal ModifiedFollowing False dc) (Just curve2)+    long <- IR.iborIndex (IR.Ibor "Bkbm" (3, Months) 0 nzd cal ModifiedFollowing False dc) (Just curve3)+    let selection = Just (CF.InterpolatedStubIndexes (short :| [long]))+        makeCoupon = CF.stubIborCoupon end 1 start end 0 selection 1 0 Nothing Nothing (Just dc) False Nothing Preceding+    if quantLibAtMost143 then makeCoupon `shouldThrow` unsupportedQuantLib144 "stubIborCoupon"+    else do+      coupon <- makeCoupon+      vol <- simpleQuote 0.2 >>= \q -> constantOptionletVolatility (CalendarReferenceDate today) cal Following q dc ShiftedLognormal 0+      pricer <- CF.blackIborCouponPricer vol CF.Black76 Nothing (Just True)+      CF.setFloatingRateCouponPricer coupon pricer+      fixing <- IR.fixingDate short start+      shortMaturity <- IR.maturityDate short start+      longMaturity <- IR.maturityDate long start+      shortRate <- Index.fixing short fixing False+      longRate <- Index.fixing long fixing False+      let weight = fromIntegral (diffDays end shortMaturity) / fromIntegral (diffDays longMaturity shortMaturity)+      CF.rate coupon >>= near 1e-12 (shortRate + (longRate - shortRate) * weight)+      leg <- CF.cashFlowLeg [coupon]+      dependencies <- CF.fixingDependencies leg+      names <- mapM Index.name [short, long]+      dependencies `shouldMatchList` [(name, fixing) | name <- names]+      forM_ [CF.ClosestStubIndex (short :| [long])] $ \closest -> do+        c <- CF.stubIborCoupon end 1 start end 0 (Just closest) 1 0 Nothing Nothing Nothing False Nothing Preceding+        CF.setFloatingRateCouponPricer c pricer+        CF.rate c >>= near 1e-12 longRate
test/hspec/QuantLib/Spec/Context.hs view
@@ -13,7 +13,7 @@ import QuantLib.Spec.Helpers(ValidDay(..), InvalidDay(..))  spec :: Spec-spec = do+spec = around_ Context.keepingSettingsGc $ do     describe "settings" $ do       describe "evaluaton date" $ do         it "default is today" $ do
test/hspec/QuantLib/Spec/Credit.hs view
@@ -21,7 +21,7 @@ import QuantLib.PricingEngine(midPointCdsEngine, midPointCdoEngine, integralCdoEngine, integralNtdEngine) import qualified QuantLib.Context as Context import QuantLib.Credit-import QuantLib.Spec.Helpers(closePrec)+import QuantLib.Spec.Helpers(closePrec, quantLibAtMost143, unsupportedQuantLib144)  -- |Builds a small pool/basket/Gaussian-LHP-loss-model chain and checks the loss model actually -- wired up -- 'basketNotional' alone can't tell (it's a plain constructor echo, computed before@@ -340,6 +340,19 @@       betweenTimes <- defaultProbabilityBetween hazard (TimeInterval 0 t1) False       betweenTimes `shouldSatisfy` closePrec betweenDates 1.0e-10 +    it "refuses a CDS helper trade date on QuantLib 1.43" $+      if not quantLibAtMost143 then pendingWith "1.44 accepts a trade date" else Context.keepingSettingsGc $ do+        let refDate = fromGregorian 2015 6 15+        Context.setEvaluationDate (Just refDate)+        cal <- calendar TARGET+        dc <- dayCounter Thirty360BondBasis+        discountCurve <- simpleQuote 0.06 >>= \r -> flatForward (ReferenceDate refDate) r dc Continuous Annual+        q <- simpleQuote 0.01+        spreadCdsHelper q (5, Years) 1 cal Quarterly Following TwentiethIMM dc 0.4 discountCurve True True Nothing dc True Midpoint (Just refDate)+          `shouldThrow` unsupportedQuantLib144 "spreadCdsHelper"+        upfrontCdsHelper q 0.01 (5, Years) 1 cal Quarterly Following TwentiethIMM dc 0.4 discountCurve 3 True True Nothing dc True Midpoint (Just refDate)+          `shouldThrow` unsupportedQuantLib144 "upfrontCdsHelper"+     it "matches fixed and moving references at default bootstrap settings" $ Context.keepingSettingsGc $ do       let refDate = fromGregorian 2015 6 15           spreads = zip [1, 2, 3, 5] [0.005, 0.006, 0.007, 0.009]@@ -354,7 +367,7 @@       discountCurve <- flatForward (ReferenceDate refDate) discountQuote discountDc Continuous Annual       helpers <- forM spreads $ \(years, spread) -> do         q <- simpleQuote spread-        spreadCdsHelper q (years, Years) 1 cal Quarterly Following TwentiethIMM helperDc recovery discountCurve True True Nothing helperDc True Midpoint+        spreadCdsHelper q (years, Years) 1 cal Quarterly Following TwentiethIMM helperDc recovery discountCurve True True Nothing helperDc True Midpoint Nothing       let hs = fromList helpers       fixedCurve <- piecewiseDefaultCurve (ReferenceDate refDate) hs helperDc [] HazardRate BackwardFlat defaultIterativeBootstrapOpts False       movingCurve <- piecewiseDefaultCurve (SettlementDays 0 cal) hs helperDc [] HazardRate BackwardFlat defaultIterativeBootstrapOpts False@@ -389,7 +402,7 @@       discountCurve <- flatForward (ReferenceDate refDate) discountQuote discountDc Continuous Annual       helpers <- forM spreads $ \(years, spread) -> do         q <- simpleQuote spread-        spreadCdsHelper q (years, Years) 1 cal Quarterly Following TwentiethIMM helperDc recovery discountCurve True True Nothing helperDc True Midpoint+        spreadCdsHelper q (years, Years) 1 cal Quarterly Following TwentiethIMM helperDc recovery discountCurve True True Nothing helperDc True Midpoint Nothing       let hs = fromList helpers       curve <- piecewiseDefaultCurve (ReferenceDate refDate) hs helperDc [] HazardRate BackwardFlat defaultIterativeBootstrapOpts False       -- PiecewiseDefaultCurve is a LazyObject: bootstrap (which calls setTermStructure/@@ -401,6 +414,11 @@       forM_ (zip helpers spreads) $ \(h, (_, quotedSpread)) -> do         implied <- impliedQuote h         implied `shouldSatisfy` closePrec quotedSpread 1.0e-8+      -- fresh helpers at a zero spread read the same spreads off the curve they did not build+      forM_ spreads $ \(years, quotedSpread) -> do+        q <- simpleQuote 0+        h <- spreadCdsHelper q (years, Years) 1 cal Quarterly Following TwentiethIMM helperDc recovery discountCurve True True Nothing helperDc True Midpoint Nothing+        impliedQuoteOn h curve >>= (`shouldSatisfy` closePrec quotedSpread 1.0e-8)      it "reproduces CDS spreads for all supported credit traits/interpolators" $ Context.keepingSettingsGc $ do       let refDate = fromGregorian 2015 6 15@@ -421,7 +439,7 @@       discountCurve <- flatForward (ReferenceDate refDate) discountQuote discountDc Continuous Annual       helpers <- forM spreads $ \(years, spread) -> do         q <- simpleQuote spread-        spreadCdsHelper q (years, Years) 1 cal Quarterly Following TwentiethIMM helperDc recovery discountCurve True True Nothing helperDc True Midpoint+        spreadCdsHelper q (years, Years) 1 cal Quarterly Following TwentiethIMM helperDc recovery discountCurve True True Nothing helperDc True Midpoint Nothing       let hs = fromList helpers       forM_ (zip [0 :: Int ..] combinations) $ \(j, (trait, interpolation)) -> do         curve <- if even j@@ -471,7 +489,7 @@       discountCurve <- interpolatedDiscountCurve curveNodes tsDc cal [] LogLinear False       helpers <- forM cdsSpreads $ \(tenor, spread) -> do         q <- simpleQuote spread-        spreadCdsHelper q tenor 1 cal Quarterly Following CDS2015 cdsDc recovery discountCurve True True Nothing lastDc True Midpoint+        spreadCdsHelper q tenor 1 cal Quarterly Following CDS2015 cdsDc recovery discountCurve True True Nothing lastDc True Midpoint Nothing       let hs = fromList helpers       defaultCurve <- piecewiseDefaultCurve (ReferenceDate asof) hs tsDc [] SurvivalProbability LogLinear defaultIterativeBootstrapOpts False       survivalProbability defaultCurve (DatePoint testDate) False `shouldThrow` anyException
test/hspec/QuantLib/Spec/DatesAndSchedule.hs view
@@ -12,6 +12,7 @@ import Data.List.NonEmpty(fromList, head)  import QuantLib.Time.Date as Date+import qualified QuantLib.Index as Index import qualified QuantLib.Context as Context import QuantLib.Time.Calendar import QuantLib.Time.Schedule@@ -174,6 +175,21 @@     -- worth pinning down directly rather than only assuming it from Control.Exception.bracket's     -- documented semantics.     describe "settings" $ do+      it "checked snapshots restore floating dates and every settings field" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate Nothing+          baseline <- Context.captureSettings+          Context.setEvaluationDate (Just (fromGregorian 2024 1 2))+          Context.setEnforceTodaysHistoricFixings (not (Context.snapshotEnforceTodaysHistoricFixings baseline))+          Context.setIncludeTodaysCashFlows (Just True)+          Context.setIncludeReferenceDateEvents (not (Context.snapshotIncludeReferenceDateEvents baseline))+          Context.disableUpdates True+          Context.restoreSettings baseline+          Context.captureSettings `shouldReturn` baseline+      it "native fixing history names use bytewise case-insensitive keys" $ do+        Index.fixingHistoryNameKey "Euribor6M Actual/360" `shouldReturn` "EURIBOR6M ACTUAL/360"+        Index.fixingHistoryNameKey "euribor6m actual/360" `shouldReturn` "EURIBOR6M ACTUAL/360"+       it "keepingSettings restores the evaluation date set inside it, on normal completion" $ do         before' <- Context.evaluationDate         let inside = addDays 365 before'
test/hspec/QuantLib/Spec/Examples.hs view
@@ -450,19 +450,19 @@         (TARFExample.Result rnpv implFwds simFwds) <- Context.keepingSettingsGc TARFExample.run         -- purely from the input EUR/ILS discount tables, no randomness involved         implFwds `shouldSatisfy` listCloseRel id-          [3.3084, 3.3112, 3.3129, 3.3153, 3.3179, 3.3199, 3.3215, 3.3228, 3.324,-           3.3249, 3.3258, 3.3267, 3.3275] 1.0e-6+          [3.3112, 3.3129, 3.3153, 3.3179, 3.3199, 3.3215, 3.3228, 3.324, 3.3249,+           3.3258, 3.3267, 3.3275] 1.0e-6         -- A fixed nonzero seed makes the Monte Carlo leg reproducible. MT19937's integer draw         -- sequence is platform-independent, leaving only FP transform/evolution differences.-        rnpv `shouldSatisfy` closePrec (-75637.39) 10.0+        rnpv `shouldSatisfy` closePrec (-102392.52) 10.0         -- simFwds must track implFwds under the risk-neutral measure (a martingale         -- check caught garmanKohlhagenProcess's foreign/domestic curve args being         -- swapped in TARF.hs: with ILS quoted as ILS-per-EUR, EUR is the foreign         -- currency and ILS the domestic one, but the args were the other way         -- around, biasing the drift and making simFwds run ~1% below implFwds)         simFwds `shouldSatisfy` listCloseRel id-          [3.3084, 3.3113, 3.3129, 3.3153, 3.3177, 3.3196, 3.3217, 3.3229, 3.3235,-           3.3247, 3.3253, 3.3267, 3.3278] 1.0e-4+          [3.3113, 3.3129, 3.3153, 3.3177, 3.3196, 3.3217, 3.3229, 3.3235, 3.3247,+           3.3253, 3.3267, 3.3278] 1.0e-4      describe "American LSM example" $       it "check values" $ do@@ -794,7 +794,7 @@      -- Rolls a hand-rolled 1D Black-Scholes operator back via QuantLib.Method.fdmRollback --     -- hasquant's second real Haskell-callback FFI plumbing, this time coarsened to a whole-grid-    -- crossing per timestep (QuantLib.Internal.Type.withFdmApply et al.). Checked against+    -- crossing per timestep (QuantLib.Method's withFdmApply et al.). Checked against     -- analyticEuropeanEngine (European, no step condition) and fdBlackScholesVanillaEngine     -- (American, with an early-exercise step condition), both already-bound reference engines.     describe "Fdm example (Haskell-driven PDE rollback via fdmRollback)" $@@ -802,9 +802,9 @@         r <- Context.keepingSettingsGc FdmExample.run         FdmExample.fdmEuropeanR r `shouldSatisfy` closePrec (FdmExample.analyticEuropeanR r) (2.0e-3 * FdmExample.analyticEuropeanR r)         FdmExample.fdmAmericanR r `shouldSatisfy` closePrec (FdmExample.fdAmericanR r) (2.0e-3 * FdmExample.fdAmericanR r)-        -- withCustomStrikedPayoff driving fdBlackScholesVanillaEngine -- the engine that-        -- downcasts the payoff unchecked, so a plain withCustomPayoff would crash here rather-        -- than throw. Same lambda and strike as the native payoff, so the price is identical.+        -- withCustomStrikedPayoff driving fdBlackScholesVanillaEngine, which rejects a plain+        -- withCustomPayoff. Same lambda and strike as the+        -- native payoff, so the price is identical.         FdmExample.fdCustomStrikedAmericanR r `shouldBe` FdmExample.fdAmericanR r         -- fdmSolve's mesher-driven initial condition must reproduce fdmRollback's hand-built         -- grid0 exactly -- same operator/step-condition/scheme, only the initial-condition
test/hspec/QuantLib/Spec/Helpers.hs view
@@ -1,8 +1,5 @@ {-# OPTIONS_GHC -fno-warn-orphans #-}--- | Shared arbitrary instances and value-comparison helpers used by more than--- one @QuantLib.Spec.*@ module. Split out of the former single-file--- @MainTest.hs@ (see CLAUDE.md's "Documentation upkeep" for the module--- layout this belongs to).+-- |Shared version checks, arbitrary instances and value-comparison helpers for @QuantLib.Spec.*@. module QuantLib.Spec.Helpers (     ValidDay(..)   , InvalidDay(..)@@ -11,16 +8,32 @@   , listClose   , listCloseRel   , binomialsClose+  , quantLibAtMost143+  , unsupportedQuantLib144   ) where  import Data.Time.Calendar+import Data.Char(isDigit) import Data.List(delete)+import Text.Read(readMaybe)  import Test.QuickCheck(elements, Arbitrary(arbitrary))  import QuantLib.Time.Date(minDate, maxDate) import QuantLib.Time.Schedule(Frequency(..)) import qualified QuantLib.Context as Context++quantLibAtMost143 :: Bool+quantLibAtMost143 = case break (== '.') Context.version of+  (major, '.':rest) -> case (readMaybe major, readMaybe (takeWhile isDigit rest)) of+    (Just major', Just minor') -> (major', minor') <= (1 :: Int, 43 :: Int)+    _ -> False+  _ -> False++unsupportedQuantLib144 :: String -> Context.Error -> Bool+unsupportedQuantLib144 name (Context.UnsupportedQuantLibVersion call required linked) =+  call == name && required == "1.44" && linked == Context.version+unsupportedQuantLib144 _ _ = False  instance Arbitrary Frequency where   arbitrary = elements $ OtherFrequency `delete` [minBound .. ]
test/hspec/QuantLib/Spec/Index/Commodity.hs view
@@ -1,6 +1,7 @@ module QuantLib.Spec.Index.Commodity (spec) where  import Test.Hspec+import Control.Exception (bracket_) import Data.List.NonEmpty(fromList)  import QuantLib.Time.Date@@ -19,7 +20,7 @@       bbl <- barrelUnitOfMeasure       usd <- commoditySettingsCurrency       cal <- calendar TARGET-      idx <- CommodityIndex.commodityIndex "HO index" ho usd bbl cal 1000 Nothing+      idx <- CommodityIndex.commodityIndex "HO empty index" ho usd bbl cal 1000 Nothing       CommodityIndex.isEmpty idx `shouldBe` True      it "forecasts a forward price from a forward curve" $ do@@ -31,7 +32,7 @@       let d0 = 1 `january` 2024           d1 = 1 `february` 2024       curve <- CommodityCurve.commodityCurve "HO curve" ho usd bbl cal (fromList [(d0, 70.0), (d1, 71.0)]) dc-      idx <- CommodityIndex.commodityIndex "HO index" ho usd bbl cal 1000 (Just curve)+      idx <- CommodityIndex.commodityIndex "HO forward index" ho usd bbl cal 1000 (Just curve)       CommodityIndex.forwardPrice idx d0 `shouldReturn` 70.0      it "stores and returns historical fixings via QuantLib.Index's generic addFixing/fixing" $ do@@ -39,11 +40,12 @@       bbl <- barrelUnitOfMeasure       usd <- commoditySettingsCurrency       cal <- calendar TARGET-      idx <- CommodityIndex.commodityIndex "HO index" ho usd bbl cal 1000 Nothing+      idx <- CommodityIndex.commodityIndex "HO fixing index" ho usd bbl cal 1000 Nothing       let d0 = 2 `january` 2024 -- a TARGET business day (Jan 1st is a holiday)-      addFixing idx d0 72.5 False-      CommodityIndex.isEmpty idx `shouldBe` False-      CommodityIndex.lastQuoteDate idx `shouldReturn` d0-      fixing idx d0 False `shouldReturn` 72.5+      bracket_ (clearFixings idx) (clearFixings idx) $ do+        addFixing idx d0 72.5 False+        CommodityIndex.isEmpty idx `shouldBe` False+        CommodityIndex.lastQuoteDate idx `shouldReturn` d0+        fixing idx d0 False `shouldReturn` 72.5  -- vim: set ff=unix ts=8 sts=2 sw=2 et:
test/hspec/QuantLib/Spec/Instrument.hs view
@@ -1,16 +1,4 @@--- | Coverage for 'QuantLib.Instrument' entry points ported from--- @test/smoke/CheckAdditionalResults.hs@ (see CLAUDE.md: coverage is only measured over--- @test\/hspec\/**@ + @test\/example\/**@, so this proven-correct smoke script was invisible--- to the coverage number).------ Checks 'additionalResults' end-to-end against two real QuantLib 1.43 engines that exercise--- three of its four discriminants: the Bjerksund-Stensland American option engine writes--- @exerciseType@ (std::string -> 'StringVal') and @strikeGamma@ (Real -> 'RealVal'); the Black--- cap/floor engine writes @optionletsPrice@ as a @vector\<Real\>@ -> 'RealVectorVal',--- exercising the vector marshalling branch the first check never touches. No shipped 1.43--- engine stores a type this binding can't name, so the fourth discriminant ('UnsupportedVal',--- the RTTI-name fallback) isn't exercised here -- its C++ side is a trivial, visibly-correct--- @else@, and its Haskell side is a compiler-checked exhaustive @case@.+-- |Checks 'additionalResults' string, scalar, and vector marshalling through real engines. {-# LANGUAGE OverloadedLists #-} module QuantLib.Spec.Instrument (spec) where 
test/hspec/QuantLib/Spec/Instrument/Credit.hs view
@@ -1,4 +1,4 @@--- | Golden-value tests for 'QuantLib.Instrument.Credit' ('creditDefaultSwap', 'fairSpread',+-- | Golden-value tests for 'QuantLib.Instrument.Credit' ('creditDefaultSwap', 'fairSpread', 'cdsOption', -- 'fairUpfront', 'impliedHazardRate'), ported from QuantLib's own -- test-suite/creditdefaultswap.cpp -- currently zero coverage (no dedicated hspec Spec module -- existed for this file before).@@ -25,8 +25,9 @@ import QuantLib.TermStructure.Credit import QuantLib.Instrument(npv, setPricingEngine, PricingModel(..)) import QuantLib.Instrument.Credit+import QuantLib.Instrument.Option(Exercise(European), EuropeanExercise(..)) import QuantLib.Instrument.Swap(fairSpread)-import QuantLib.PricingEngine(midPointCdsEngine, integralCdsEngine)+import QuantLib.PricingEngine(blackCdsOptionEngine, midPointCdsEngine, integralCdsEngine)  import QuantLib.Spec.Helpers(closePrec) @@ -177,3 +178,38 @@           value <- npv cds           implied <- impliedHazardRate cds value discountCurve dc 0.4 1.0e-10 Midpoint           implied `shouldSatisfy` closePrec h 1.0e-6++  describe "cdsoption.cpp testCached" $+    it "a payer and a receiver CDS option at the fair spread reproduce the cached Black value,\+       \ and their price implies the quoted volatility back" $+      Context.keepingSettingsGc $ do+        let today' = 10 `december` 2007+        Context.setEvaluationDate (Just today')+        cal <- calendar TARGET+        dc <- dayCounter (Actual360 False)+        rateQ <- simpleQuote 0.02+        riskFree <- flatForward (ReferenceDate today') rateQ dc Continuous Annual+        expiry <- advance cal today' (9, Months) Following False+        start <- advance cal expiry (1, Months) Following False+        maturity <- advance cal start (7, Years) Following False+        sch <- schedule (Just start) maturity (3, Months) cal ModifiedFollowing ModifiedFollowing+          Forward False Nothing Nothing+        hazardQ <- simpleQuote 0.001+        probCurve <- flatHazardRate (SettlementDays 0 cal) hazardQ dc+        swapEngine <- midPointCdsEngine probCurve 0.4 riskFree Nothing+        let cdsOn side spread = do+              c <- creditDefaultSwap side 1000000 spread sch ModifiedFollowing dc True True+                Nothing FaceValue dc True Nothing 3+              setPricingEngine c swapEngine+              pure c+        strike <- cdsOn Seller 0.001 >>= fairSpread+        volQ <- simpleQuote 0.20+        optionEngine <- blackCdsOptionEngine probCurve 0.4 riskFree volQ+        forM_ [Seller, Buyer] $ \side -> do+          underlying <- cdsOn side strike+          option <- cdsOption underlying (European (EuropeanExercise expiry)) True+          setPricingEngine option optionEngine+          value <- npv option+          value `shouldSatisfy` closePrec 270.976348 1.0e-5+          implied <- impliedVolatility option value riskFree probCurve 0.4 1.0e-10 100 1.0e-7 4.0+          implied `shouldSatisfy` closePrec 0.20 1.0e-6
test/hspec/QuantLib/Spec/Instrument/InflationCapFloor.hs view
@@ -67,10 +67,10 @@   maturity2 <- advance cal evalDate (5, Years) Unadjusted False   q1 <- simpleQuote 0.03   q2 <- simpleQuote 0.03-  h1 <- yearOnYearInflationSwapHelper q1 (3, Months) maturity1 cal Unadjusted dc yii0 CPIFlat nominalCurve LastRelevantDate Nothing-  h2 <- yearOnYearInflationSwapHelper q2 (3, Months) maturity2 cal Unadjusted dc yii0 CPIFlat nominalCurve LastRelevantDate Nothing+  h1 <- yearOnYearInflationSwapHelper q1 (3, Months) (InflationSwapToMaturity maturity1) cal Unadjusted dc yii0 CPIFlat nominalCurve LastRelevantDate Nothing+  h2 <- yearOnYearInflationSwapHelper q2 (3, Months) (InflationSwapToMaturity maturity2) cal Unadjusted dc yii0 CPIFlat nominalCurve LastRelevantDate Nothing   baseDate <- advance cal evalDate (-2, Months) Unadjusted False-  yoyCurve <- piecewiseYoyInflationCurve evalDate baseDate 0.03 Monthly dc [h1, h2] Linear+  yoyCurve <- piecewiseYoyInflationCurve evalDate baseDate 0.03 Monthly dc [h1, h2] Nothing Linear   customYoYIndex (Just yoyCurve)  -- |A short YoY-inflation leg (3 annual coupons) on the given (curve-linked) index -- mirrors@@ -121,10 +121,10 @@   maturity2 <- advance cal evalDate (10, Years) Unadjusted False   q1 <- simpleQuote 0.03   q2 <- simpleQuote 0.03-  h1 <- zeroCouponInflationSwapHelper q1 (2, Months) maturity1 cal Unadjusted dc zii0 CPIFlat LastRelevantDate Nothing-  h2 <- zeroCouponInflationSwapHelper q2 (2, Months) maturity2 cal Unadjusted dc zii0 CPIFlat LastRelevantDate Nothing+  h1 <- zeroCouponInflationSwapHelper q1 (2, Months) (InflationSwapToMaturity maturity1) cal Unadjusted dc zii0 CPIFlat LastRelevantDate Nothing+  h2 <- zeroCouponInflationSwapHelper q2 (2, Months) (InflationSwapToMaturity maturity2) cal Unadjusted dc zii0 CPIFlat LastRelevantDate Nothing   baseDate <- advance cal evalDate (-2, Months) Unadjusted False-  zeroCurve <- piecewiseZeroInflationCurve evalDate baseDate Monthly dc [h1, h2] Linear+  zeroCurve <- piecewiseZeroInflationCurve evalDate baseDate Monthly dc [h1, h2] Nothing Linear   customZeroInflationIndex "ICFCT Zero" r False Monthly (1, Months) gbp (Just zeroCurve)  spec :: Spec@@ -158,13 +158,7 @@     abs (capNPV - sum caplets) `shouldSatisfy` (< 1e-6)    it "a capped yoyInflationLeg's NPV decomposes as uncapped leg NPV minus the equivalent cap's NPV" $ Context.keepingSettingsGc $ do-    -- Confirmed by reading inflationcoupon.cpp: InflationCoupon::rate() unconditionally requires-    -- a pricer (QL_REQUIRE(pricer_, "pricer not set")), capped or not -- yoyInflationLeg's own-    -- operator Leg() (yoyinflationcoupon.cpp) auto-attaches a default (non-vol) pricer only when-    -- caps and floors are BOTH empty; a non-empty cap here means 'setYoyInflationCouponPricer'-    -- must be called explicitly, and this test's NPV assertion below only succeeds if it actually-    -- ran (leaving it out reproduces "pricer not set", not a silently-wrong number) -- so this-    -- doubles as the setter's own regression check.+    -- A capped YoY leg needs an explicit pricer; uncapped legs receive a default one.     todayD <- today     Context.setEvaluationDate (Just todayD)     yii <- linkedYoYIndex todayD@@ -204,12 +198,9 @@   -- way: pick an evaluation date on the 1st of a month (so "the start of the inflation period   -- containing the maturity", what CPI::Flat actually samples, coincides exactly with the   -- maturity itself) and a maturity/strike that exactly match one price-surface grid node.-  -- baseCPI is a required constructor argument but never touched by this engine's calculate()-  -- (confirmed by reading cpicapfloorengines.cpp) so an arbitrary placeholder is fine.+  -- This engine does not use the required baseCPI constructor argument.   it "reproduces the exact grid price at a matching strike/maturity node" $ Context.keepingSettingsGc $ do-    -- First-of-month, derived from the real wall-clock date rather than hardcoded, so-    -- CPI::Flat's period-start sampling (see the comment above) lands exactly on the raw date-    -- without pinning the test to a date that will eventually become stale/past.+    -- CPI::Flat samples the period start, so use the first of the current month.     (y, m, _) <- toGregorian <$> today     let today' = fromGregorian y m 1     Context.setEvaluationDate (Just today')
+ test/hspec/QuantLib/Spec/Instrument/MtmCrossCurrency.hs view
@@ -0,0 +1,204 @@+module QuantLib.Spec.Instrument.MtmCrossCurrency (spec) where++import Control.Monad(forM, forM_, void)+import qualified Data.List.NonEmpty as NE+import QuantLib.Math(Interpolation(..))+import Data.Time.Calendar(Day, fromGregorian, addGregorianYearsClip)+import qualified Data.Vector.Storable as V+import Test.Hspec+import qualified QuantLib.Context as Context+import QuantLib.Time.Calendar+import QuantLib.Time.Schedule+import QuantLib.Currency hiding (rate)+import QuantLib.InterestRate(Compounding(..))+import qualified QuantLib.Index.InterestRate as IR+import qualified QuantLib.Index as Index+import QuantLib.Quote+import QuantLib.TermStructure.Yield+import QuantLib.Instrument+import QuantLib.Instrument.Swap hiding (swap)+import QuantLib.PricingEngine+import qualified QuantLib.CashFlow as CF+import QuantLib.Spec.Helpers(quantLibAtMost143, unsupportedQuantLib144)++fixtureDate :: Day+fixtureDate = fromGregorian 2018 9 11++near :: Double -> Double -> Double -> Expectation+near tolerance expected actual = abs (actual - expected) `shouldSatisfy` (< tolerance)++spec :: Spec+spec = describe "MTM cross-currency 1.44" $ do+  it "prices both resettable legs and directions, and reprices at fair spreads" $ Context.keepingSettingsGc $ do+    Context.setEvaluationDate (Just fixtureDate)+    dc <- dayCounter (Actual360 False)+    usd <- currency USD+    eur <- currency EUR+    usdCurve <- simpleQuote 0.02 >>= \q -> flatForward (ReferenceDate fixtureDate) q dc Continuous Annual+    eurCurve <- simpleQuote 0.01 >>= \q -> flatForward (ReferenceDate fixtureDate) q dc Continuous Annual+    usdIndex <- IR.iborIndex (IR.UsdLibor (3, Months)) (Just usdCurve)+    eurIndex <- IR.iborIndex IR.Euribor3M (Just eurCurve)+    cal <- calendar TARGET+    start <- advance cal fixtureDate (2, Days) Following False+    sch <- schedule (Just start) (addGregorianYearsClip 5 start) (3, Months) cal ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing+    spot <- simpleQuote 1.1+    let makeSwap direction resetBase baseSpread quoteSpread = mtmCrossCurrencyBasisSwap direction+          10000000 usd sch usdIndex baseSpread 1 (10000000 / 1.1) eur sch eurIndex quoteSpread 1 resetBase+    if quantLibAtMost143 then do+      makeSwap PayFxBaseCurrency False 0 0 `shouldThrow` unsupportedQuantLib144 "mtmCrossCurrencyBasisSwap"+      discountingMtmCrossCurrencyBasisSwapEngine usd usdCurve eur eurCurve spot Nothing Nothing Nothing Nothing+        `shouldThrow` unsupportedQuantLib144 "discountingMtmCrossCurrencyBasisSwapEngine"+    else do+      engine <- discountingMtmCrossCurrencyBasisSwapEngine usd usdCurve eur eurCurve spot Nothing Nothing Nothing Nothing+      forM_ [False, True] $ \resetBase -> do+        payer <- makeSwap PayFxBaseCurrency resetBase 0 0+        receiver <- makeSwap ReceiveFxBaseCurrency resetBase 0 0+        setPricingEngine payer engine+        setPricingEngine receiver engine+        price <- npv payer+        npv receiver >>= near 1e-6 (-price)+        fairBase <- fairFxBaseSpread payer+        fairQuote <- fairFxQuoteSpread payer+        fairPaySpread payer >>= near 1e-12 fairBase+        fairRecSpread payer >>= near 1e-12 fairQuote+        forM_ [(fairBase, 0), (0, fairQuote)] $ \(baseSpread, quoteSpread) -> do+          par <- makeSwap PayFxBaseCurrency resetBase baseSpread quoteSpread+          setPricingEngine par engine+          npv par >>= near 0.02 0+        rates <- fxResetRates payer+        notionals <- fxResetNotionals payer+        V.length rates `shouldBe` 20+        V.length notionals `shouldBe` V.length rates+        let notional = if resetBase then 10000000 / 1.1 else 10000000+        forM_ (zip (V.toList rates) (V.toList notionals)) $ \(rate, nominal) -> near 1e-6 (notional * rate) nominal+        _ <- legCurrency payer 0+        inCcyLegNpv payer 0 >>= (`shouldSatisfy` (\v -> not (isNaN v || isInfinite v)))+        inCcyLegBps payer 1 >>= (`shouldSatisfy` (/= 0))+        npvDateDiscounts payer 0 `shouldReturn` 1+        fxResetRates payer >>= \old -> do+          _ <- setValue spot 1.2+          changed <- fxResetRates payer+          changed `shouldSatisfy` (/= old)+          void (setValue spot 1.1)++  it "projects resets at value dates and respects spot settlement overrides" $ Context.keepingSettingsGc $ do+    let today = fromGregorian 2024 7 1+        start = fromGregorian 2024 7 8+        end = fromGregorian 2025 1 8+    Context.setEvaluationDate (Just today)+    dc <- dayCounter (Actual360 False)+    eur <- currency EUR+    usd <- currency USD+    eurCurve <- simpleQuote 0.01 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+    usdCurve <- simpleQuote 0.05 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+    eurIndex <- IR.iborIndex IR.Euribor3M (Just eurCurve)+    usdIndex <- IR.iborIndex (IR.UsdLibor (3, Months)) (Just usdCurve)+    cal <- calendar TARGET+    usCal <- calendar UnitedStatesSettlement+    fxCal <- calendar (Joint2 cal usCal JoinHolidays)+    sch <- schedule (Just start) end (3, Months) cal Following Following Forward False Nothing Nothing+    spot <- simpleQuote 1.1+    let makeSwap = mtmCrossCurrencyBasisSwapWithOptions PayFxBaseCurrency+          10000000 eur sch eurIndex 0 1 11000000 usd sch usdIndex 0 1 False+          defaultMtmCrossCurrencyBasisSwapOpts { mtmFxResetFixingDays = 2, mtmFxResetFixingCalendar = Just fxCal }+    if quantLibAtMost143 then makeSwap `shouldThrow` unsupportedQuantLib144 "mtmCrossCurrencyBasisSwap"+    else do+      swap <- makeSwap+      engine <- discountingMtmCrossCurrencyBasisSwapEngine usd usdCurve eur eurCurve spot Nothing Nothing Nothing Nothing+      setPricingEngine swap engine+      price <- npv swap+      valueDate <- CF.fxResetValueDate (CF.FxResetConvention 2 (Just fxCal)) today+      eurSpotDf <- discount eurCurve (DatePoint valueDate) False+      usdSpotDf <- discount usdCurve (DatePoint valueDate) False+      eurStartDf <- discount eurCurve (DatePoint start) False+      usdStartDf <- discount usdCurve (DatePoint start) False+      rates <- fxResetRates swap+      case V.toList rates of+        first:_ -> near 1e-10 (1.1 * usdSpotDf / eurSpotDf * eurStartDf / usdStartDf) first+        [] -> expectationFailure "no FX reset rates"+      explicit <- discountingMtmCrossCurrencyBasisSwapEngine usd usdCurve eur eurCurve spot Nothing Nothing Nothing (Just valueDate)+      setPricingEngine swap explicit+      npv swap >>= near 1e-6 price+      resettingLeg <- leg swap 1+      pricer <- CF.discountingFxResetPricer eur usd eurCurve usdCurve spot True (Just valueDate)+      CF.setFxResetLegPricer resettingLeg pricer+      CF.fixingDependencies resettingLeg >>= (`shouldSatisfy` (not . null))++  it "reprices instruments off MTM helper curves for all collateral, basis and reset flags" $ Context.keepingSettingsGc $+    if quantLibAtMost143 then pendingWith "MTM products require QuantLib 1.44" else do+      let today = fromGregorian 2013 9 6+          basisData = [(1, -0.00145), (2, -0.00205), (5, -0.00265)] :: [(Int, Double)]+      Context.setEvaluationDate (Just today)+      cal <- calendar TARGET+      dc <- dayCounter Actual365FixedStandard+      start <- advance cal today (2, Days) Following False+      eur <- currency EUR+      usd <- currency USD+      eurForecast <- simpleQuote 0.007 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+      usdForecast <- simpleQuote 0.015 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+      eurIndex <- IR.iborIndex IR.Euribor3M (Just eurForecast)+      usdIndex <- IR.iborIndex (IR.UsdLibor (3, Months)) (Just usdForecast)+      spot <- simpleQuote 1+      forM_ [(collateralBase, basisBase, resetBase) | collateralBase <- [False, True], basisBase <- [False, True], resetBase <- [False, True]] $ \(collateralBase, basisBase, resetBase) -> do+        let collateral = if collateralBase then eurForecast else usdForecast+        helpers <- forM basisData $ \(years, basis) -> do+          quote <- simpleQuote basis+          mtmCrossCurrencyBasisSwapRateHelper quote (years, Years) 2 cal Following False+            eurIndex usdIndex collateral collateralBase basisBase resetBase Nothing 0 Nothing 2 (Just cal) Nothing Nothing Nothing+        curve <- piecewiseYieldCurve (ReferenceDate today) (NE.fromList helpers) dc []+          (Iterative Discount LogLinear defaultIterativeBootstrapOpts) True+        let eurDiscount = if collateralBase then eurForecast else curve+            usdDiscount = if collateralBase then curve else usdForecast+        engine <- discountingMtmCrossCurrencyBasisSwapEngine usd usdDiscount eur eurDiscount spot Nothing Nothing Nothing Nothing+        forM_ basisData $ \(years, basis) -> do+          sch <- schedule (Just start) (addGregorianYearsClip (fromIntegral years) start) (3, Months) cal Following Following Backward False Nothing Nothing+          instrument <- mtmCrossCurrencyBasisSwapWithOptions PayFxBaseCurrency 1 eur sch eurIndex (if basisBase then basis else 0) 1+            1 usd sch usdIndex (if basisBase then 0 else basis) 1 resetBase+            defaultMtmCrossCurrencyBasisSwapOpts { mtmFxResetFixingDays = 2, mtmFxResetFixingCalendar = Just cal }+          setPricingEngine instrument engine+          npv instrument >>= near 1e-8 0++  it "wires overnight observation, payment and stub options into native legs" $ Context.keepingSettingsGc $ do+    let today = fromGregorian 2026 5 27+        start = fromGregorian 2026 5 29+        end = fromGregorian 2026 8 28+    Context.setEvaluationDate (Just today)+    cal <- calendar NewZealandWellington+    dc <- dayCounter Actual365FixedStandard+    usd <- currency USD+    nzd <- currency NZD+    usdCurve <- simpleQuote 0.015 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+    shortCurve <- simpleQuote 0.02 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+    nzdCurve <- simpleQuote 0.04 >>= \q -> flatForward (ReferenceDate today) q dc Continuous Annual+    sofr <- IR.overnightIborIndex IR.Sofr (Just usdCurve)+    short <- IR.iborIndex (IR.Ibor "Bkbm" (2, Months) 0 nzd cal ModifiedFollowing False dc) (Just shortCurve)+    long <- IR.iborIndex (IR.Ibor "Bkbm" (3, Months) 0 nzd cal ModifiedFollowing False dc) (Just nzdCurve)+    sch <- schedule (Just start) end (3, Months) cal ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing+    spot <- simpleQuote 1.5+    let options = defaultMtmCrossCurrencyBasisSwapOpts+          { mtmFxBasePaymentLag = 2, mtmFxQuotePaymentLag = 3+          , mtmFxBasePaymentConvention = ModifiedFollowing+          , mtmFxBaseCompoundSpread = True+          , mtmFxBaseObservation = OvernightObservation (Just 1) 1 True+          , mtmUseIndexedCoupons = Just True+          , mtmFxQuoteStubIndexSelection = Just (CF.InterpolatedStubIndexes (short NE.:| [long])) }+        makeSwap spread = mtmCrossCurrencyBasisSwapWithOptions PayFxBaseCurrency 1000000 usd sch sofr spread 1+          1500000 nzd sch long 0 1 False options+    if quantLibAtMost143 then makeSwap 0.001 `shouldThrow` unsupportedQuantLib144 "mtmCrossCurrencyBasisSwap"+    else do+      instrument <- makeSwap 0.001+      engine <- discountingMtmCrossCurrencyBasisSwapEngine nzd nzdCurve usd usdCurve spot Nothing Nothing Nothing Nothing+      setPricingEngine instrument engine+      fairFxBaseSpread instrument >>= (`shouldSatisfy` (\parSpread -> not (isNaN parSpread || isInfinite parSpread)))+      baseLeg <- leg instrument 0+      baseFlows <- CF.cashFlows baseLeg Nothing Nothing+      payment <- advance cal end (2, Days) ModifiedFollowing False+      map (\(day, _, _) -> day) baseFlows `shouldSatisfy` elem payment+      discounted <- forM baseFlows $ \(day, cashAmount, _) -> do+        df <- discount usdCurve (DatePoint day) False+        pure (cashAmount * df)+      inCcyLegNpv instrument 0 >>= near 1e-6 (-sum discounted)+      quoteLeg <- leg instrument 1+      dependencies <- CF.fixingDependencies quoteLeg+      names <- mapM Index.name [short, long]+      forM_ names $ \name -> map fst dependencies `shouldSatisfy` elem name
test/hspec/QuantLib/Spec/Instrument/Option.hs view
@@ -1,15 +1,6 @@ {-# LANGUAGE OverloadedLists #-}--- Golden-value tests for the exotic single-/multi-asset options bound--- alongside their analytic engines: 'simpleChooserOption', 'softBarrierOption',--- 'twoAssetCorrelationOption' reproduce cached NPVs from QuantLib's own--- test-suite (chooseroption.cpp, softbarrieroption.cpp,--- twoassetcorrelationoption.cpp). 'writerExtensibleOption' has no upstream--- test-suite fixture, so it's checked instead against an independent--- Monte Carlo simulation of its own payoff definition (see CLAUDE.md's--- TARF-style self-consistency precedent) -- exact lognormal (GBM) path--- simulation under the same flat-rate/flat-vol process, entirely--- self-contained (no 'random' package dependency: a fixed-seed splitmix-style--- LCG plus Box-Muller, both defined below).+-- Golden option values use QuantLib fixtures; writer-extensible payoff behavior uses+-- an independent, fixed-seed Monte Carlo simulation below. module QuantLib.Spec.Instrument.Option (spec) where  import Prelude hiding(iterate, tail, drop)@@ -112,6 +103,24 @@  spec :: Spec spec = do+  describe "VanillaOption implied volatility" $+    it "accepts a BlackProcess directly" $+      Context.keepingSettingsGc $ do+        evalDate <- today+        Context.setEvaluationDate (Just evalDate)+        dc <- dayCounter (Actual360 False)+        cal <- calendar Null+        spot <- simpleQuote 100.0+        riskFree <- simpleQuote 0.05 >>= \q -> flatForward (ReferenceDate evalDate) q dc Continuous Annual+        vol <- simpleQuote 0.20 >>= \q -> blackConstantVol (CalendarReferenceDate evalDate) cal q dc+        process <- blackProcess spot riskFree vol EulerDiscretization False+        engine <- analyticEuropeanEngine process Nothing+        option <- vanillaOption (PlainVanilla (PlainVanillaPayoff Call 100.0)) (europeanIn 180 evalDate)+        setPricingEngine option engine+        price <- npv option+        result <- impliedVolatility option price process [] 1e-6 1000 1e-6 4.0+        result `shouldSatisfy` closePrec 0.20 1e-6+   describe "SimpleChooserOption" $     -- cached reference from QuantLib test-suite/chooseroption.cpp::testAnalyticSimpleChooserEngine     -- (Haug, "Complete Guide to Option Pricing Formulas", pp.39-40).@@ -141,15 +150,8 @@         v `shouldSatisfy` closePrec 6.0508 1e-4    describe "SoftBarrierOption" $ do-    -- cached reference from QuantLib test-suite/softbarrieroption.cpp::testSoftBarrierHaug-    -- (Haug 2nd ed., p.166; first DownOut/Call row). Pinned to the upstream test's own-    -- literal evaluation date (8 August 2025), not a dynamic 'today': AnalyticSoftBarrierEngine-    -- (a 2025 upstream addition) turns out to price differently for different evaluation dates-    -- even at identical time-to-maturity T -- confirmed independently against a standalone C++-    -- program linked against the same installed QuantLib 1.43 (evalDate 2020-01-01/2025-08-08/-    -- 2026-08-22 with T pinned to exactly 0.5y each gave 3.79624/3.80752/3.78492 respectively).-    -- This looks like a genuine date-arithmetic quirk in the new upstream engine, not a-    -- hasquant marshalling bug; matching the test-suite's own fixture date is the correct fix.+    -- Haug's DownOut/Call reference in QuantLib test-suite/softbarrieroption.cpp uses+    -- 8 August 2025; this engine's price depends on the evaluation date.     it "reproduces Haug's soft barrier option value" $       Context.keepingSettingsGc $ do         let evalDate = 8 `august` 2025
test/hspec/QuantLib/Spec/Instrument/Swap.hs view
@@ -6,10 +6,11 @@ -- both legs built from the same index/schedule/nominal/spread, matching discount curves, and -- spotFX=1, the pay and receive legs must have equal in-currency NPV, so the swap's total NPV -- (and, for the basis swap, its fair pay/rec spreads) must come out at zero.-{-# LANGUAGE OverloadedLists #-}+{-# LANGUAGE OverloadedLists, LambdaCase #-}  module QuantLib.Spec.Instrument.Swap (spec) where +import Control.Monad(forM_, when) import Test.Hspec  import qualified QuantLib.Context as Context@@ -22,12 +23,13 @@ import QuantLib.Quote import QuantLib.TermStructure.Yield import QuantLib.CashFlow(RateAveragingType(..))+import qualified QuantLib.CashFlow as CF import QuantLib.Instrument import QuantLib.Instrument.Bond(fixedRateBond, asBond, settlementDate) import QuantLib.Instrument.Swap import QuantLib.PricingEngine -import QuantLib.Spec.Helpers(closePrec)+import QuantLib.Spec.Helpers(closePrec, quantLibAtMost143, unsupportedQuantLib144)  -- |test-suite/swap.cpp's CommonVars: a Euribor6M-referencing Payer VanillaSwap fixture -- -- nominal 100, fixed leg Annual/Unadjusted/Thirty360(BondBasis), floating leg@@ -59,6 +61,67 @@  spec :: Spec spec = do+  describe "QuantLib 1.44 swap arguments" $ do+    it "rounds overnight coupons on 1.44 and refuses rounding on 1.43" $ Context.keepingSettingsGc $ do+      let today' = 2 `january` 2024; start = 4 `january` 2024; end = 4 `january` 2025+      Context.setEvaluationDate (Just today')+      cal <- calendar TARGET+      dc <- dayCounter (Actual360 False)+      q <- simpleQuote 0.03456789+      curve <- flatForward (ReferenceDate today') q dc Continuous Annual+      idx <- IR.overnightIborIndex IR.Sofr (Just curve)+      sch <- schedule (Just start) end (1, Years) cal ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing+      let make = overnightIndexedSwap Payer 100 sch 0.03 dc idx 0 0 ModifiedFollowing cal+            False AveragingCompound defaultOvernightObservation+      plain <- make Nothing >>= (`leg` 1) >>= \l -> CF.cashFlows l Nothing Nothing+      let amounts = map (\(_, a, _) -> a)+      if quantLibAtMost143 then make (Just 3) `shouldThrow` unsupportedQuantLib144 "overnightIndexedSwap"+      else do+        rounded <- make (Just 3) >>= (`leg` 1) >>= \l -> CF.cashFlows l Nothing Nothing+        accrualEnd <- adjust cal end ModifiedFollowing+        accrual <- yearFraction dc start accrualEnd Nothing Nothing+        let expected = fromIntegral (round ((case amounts plain of [a] -> a; _ -> error "expected one overnight coupon") / (100*accrual) * 1000) :: Int) / 1000 * 100 * accrual+        amounts rounded `shouldSatisfy` (\xs -> length xs == 1 && all (closePrec expected 1e-10) xs)++    it "applies nonstandard swap payment lag on 1.44" $ Context.keepingSettingsGc $ do+      let today' = 2 `january` 2024; start = 4 `january` 2024; end = 4 `january` 2025+      Context.setEvaluationDate (Just today')+      cal <- calendar TARGET+      dc <- dayCounter (Actual360 False)+      q <- simpleQuote 0.03+      curve <- flatForward (ReferenceDate today') q dc Continuous Annual+      idx <- IR.iborIndex IR.Euribor6M (Just curve)+      fixed <- schedule (Just start) end (1, Years) cal ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing+      floating <- schedule (Just start) end (6, Months) cal ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing+      let scalar lag = nonstandardSwap Payer [100] [100,100] fixed [0.03] dc floating idx 1 0 dc False False Nothing lag (Just cal)+          vector lag = nonstandardSwapFromGearingsAndSpreads Payer [100] [100,100] fixed [0.03] dc floating idx [1,1] [0,0] dc False False Nothing lag (Just cal)+      if quantLibAtMost143+        then do+          scalar 3 `shouldThrow` unsupportedQuantLib144 "nonstandardSwap"+          vector 3 `shouldThrow` unsupportedQuantLib144 "nonstandardSwapFromGearingsAndSpreads"+        else do+          payment <- adjust cal end ModifiedFollowing+          expected <- advance cal payment (3, Days) ModifiedFollowing False+          swaps <- sequence ([scalar 3, vector 3] :: [IO NonstandardSwap])+          forM_ swaps $ \swp -> do+            flows <- leg swp 0 >>= \l -> CF.cashFlows l Nothing Nothing+            map (\(d,_,_) -> d) flows `shouldBe` [expected]++    it "rejects undefined fair rates for zero nominal" $ Context.keepingSettingsGc $ do+      let today' = 2 `january` 2024; start = 4 `january` 2024; end = 4 `january` 2025+      Context.setEvaluationDate (Just today')+      cal <- calendar TARGET+      dc <- dayCounter (Actual360 False)+      q <- simpleQuote 0.03+      curve <- flatForward (ReferenceDate today') q dc Continuous Annual+      idx <- IR.iborIndex IR.Euribor6M (Just curve)+      sch <- schedule (Just start) end (6, Months) cal ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing+      swp <- vanillaSwap Payer 0 sch 0.03 dc sch idx 0 dc Nothing Nothing+      engine <- discountingSwapEngine curve Nothing Nothing Nothing+      setPricingEngine swp engine+      fairRate swp `shouldThrow` (\case Context.CPlusPlusException _ -> True; _ -> False)+      fairSpread swp `shouldThrow` (\case Context.CPlusPlusException _ -> True; _ -> False)+   describe "VanillaSwap" $ do     it "testCachedValue: 10Y swap NPV reproduces swap.cpp's cached value (either at-par or\        \ index-fixing coupon pricing, since hasquant has no binding to select between them)" $@@ -157,17 +220,26 @@         -- first guess, then rebuild at that rate and confirm the rebuilt swap reprices to zero.         guess <- constNotionalCrossCurrencyFixedVsFloatingSwap Payer 100 usd sched 0.03 legDC           ModifiedFollowing 0 cal 100 eur sched usdLibor3m 0 ModifiedFollowing 0 cal-          False False defaultOvernightObservation AveragingCompound+          False False defaultOvernightObservation AveragingCompound Nothing Nothing         setPricingEngine guess engine         fair <- fairRate guess          priced <- constNotionalCrossCurrencyFixedVsFloatingSwap Payer 100 usd sched fair legDC           ModifiedFollowing 0 cal 100 eur sched usdLibor3m 0 ModifiedFollowing 0 cal-          False False defaultOvernightObservation AveragingCompound+          False False defaultOvernightObservation AveragingCompound Nothing Nothing         setPricingEngine priced engine         pricedNPV <- npv priced         pricedNPV `shouldSatisfy` closePrec 0 1e-6 +        when quantLibAtMost143 $ do+          constNotionalCrossCurrencyBasisSwap 100 usd sched usdLibor3m 0 1 100 eur sched usdLibor3m 0 1+            defaultConstNotionalCrossCurrencyBasisSwapOpts { cccbsPaymentLagOnNotionalExchanges = True }+            `shouldThrow` unsupportedQuantLib144 "constNotionalCrossCurrencyBasisSwap"+          constNotionalCrossCurrencyFixedVsFloatingSwap Payer 100 usd sched fair legDC+            ModifiedFollowing 0 cal 100 eur sched usdLibor3m 0 ModifiedFollowing 0 cal+            False False defaultOvernightObservation AveragingCompound (Just True) Nothing+            `shouldThrow` unsupportedQuantLib144 "constNotionalCrossCurrencyFixedVsFloatingSwap"+   -- Ported from test-suite/assetswap.cpp::testConsistency's par-asset-swap portion (the   -- NpvDate-sensitivity half of that test, and the market/non-par asset-swap cases from later   -- in the same file, are left as follow-up work). The float schedule is rebuilt from the@@ -196,19 +268,19 @@         eng <- discountingSwapEngine ts Nothing Nothing Nothing         let obs = defaultOvernightObservation         flatSwap <- overnightIndexedSwap Payer 100 sch 0.05 fixedDC ois 0.0 0 Following cal-          False AveragingCompound obs+          False AveragingCompound obs Nothing         setPricingEngine flatSwap eng         flatNpv <- npv flatSwap         periods <- length <$> dates sch         perPeriod <- overnightIndexedSwapFromNominals Payer (replicate (periods - 1) 100) sch 0.05-          fixedDC ois 0.0 0 Following cal False AveragingCompound obs+          fixedDC ois 0.0 0 Following cal False AveragingCompound obs Nothing         setPricingEngine perPeriod eng         perPeriodNpv <- npv perPeriod         perPeriodNpv `shouldSatisfy` closePrec flatNpv 1.0e-12         -- and the observation record is actually threaded through this wrapper, not dropped         observed <- overnightIndexedSwapFromNominals Payer (replicate (periods - 1) 100) sch 0.05           fixedDC ois 0.0 0 Following cal False AveragingCompound-          obs{lockoutDays = 2}+          obs{lockoutDays = 2} Nothing         setPricingEngine observed eng         observedNpv <- npv observed         observedNpv `shouldNotSatisfy` closePrec perPeriodNpv 1.0e-12
test/hspec/QuantLib/Spec/InterestRateAndCashFlow.hs view
@@ -7,7 +7,8 @@ import Test.QuickCheck((==>))  import Control.Exception(bracket_)-import Control.Monad(forM_)+import Control.Monad(forM_, (>=>))+import Data.List(isInfixOf, nub) import qualified Data.List.NonEmpty as NE import Data.Maybe(fromMaybe) import Data.Time.Calendar@@ -31,6 +32,7 @@   ,expectedShortfall, gaussianExpectedShortfall   ) import qualified QuantLib.Index as IndexAnalysis(covariance, correlation)+import qualified QuantLib.Index as Index(name) import QuantLib.Index.InterestRate(iborIndex, IborConstructor(..), liborSwapIndex, LiborSwapIndexType(..), swapSpreadIndex, forecastFixing   ,fixingDate, valueDate, maturityDate, historicalRatesAnalysis, overnightIborIndex, OvernightIborIndexType(..), bmaIndex) import qualified QuantLib.Index.InterestRate as Ibor(fixingDays, dayCounter)@@ -47,10 +49,30 @@ import qualified QuantLib.PricingEngine as PE import QuantLib.Math -import QuantLib.Spec.Helpers(ValidDay(..), closePrec, listCloseRel)+import QuantLib.Spec.Helpers(ValidDay(..), closePrec, listCloseRel, quantLibAtMost143, unsupportedQuantLib144)  spec :: Day -> Spec spec evalDate = do+    describe "IBOR stub selection" $ do+      it "uses component fixing histories, and needs QuantLib 1.44" $ keepingSettingsGc $ do+        setEvaluationDate (Just (fromGregorian 2024 1 2))+        cal <- calendar TARGET+        dc <- dayCounter (Actual360 False)+        q <- Quote.simpleQuote 0.03+        curve <- flatForward (SettlementDays 0 cal) q dc IR.Continuous Annual+        base <- iborIndex Euribor6M (Just curve)+        short <- iborIndex Euribor1M (Just curve)+        long <- iborIndex Euribor3M (Just curve)+        sch <- schedule (Just (fromGregorian 2024 1 4)) (fromGregorian 2024 9 4)+          (6, Months) cal ModifiedFollowing ModifiedFollowing Backward False Nothing Nothing+        let makeLeg = CF.iborLegWithOptions sch base [100] dc ModifiedFollowing [2] [1] [0] [] [] False False+              CF.defaultIborLegOpts { CF.ilgUseIndexedCoupons = Just True, CF.ilgStubIndexSelection = Just (InterpolatedStubIndexes [short, long]) }+        if quantLibAtMost143 then makeLeg `shouldThrow` unsupportedQuantLib144 "iborLegWithOptions"+        else do+          deps <- makeLeg >>= CF.fixingDependencies+          names <- mapM Index.name [base, short, long]+          nub (map fst deps) `shouldMatchList` names+     describe "Interest rate" $ do       let cases :: [(Double, IR.Compounding, Frequency, Double, IR.Compounding, Frequency, Double, Int)]           cases = [ (0.0800, IR.Compounded,        Quarterly,   1.00, IR.Continuous,            Annual, 0.0792, 4),@@ -68,21 +90,7 @@                     (0.0700, IR.Compounded,        Bimonthly,  1.0/6,     IR.Simple,            Annual, 0.0700, 4),                     (0.0800,     IR.Simple,           Annual,  1.0/6, IR.Compounded,         Bimonthly, 0.0800, 4),                     (0.0900, IR.Compounded,          Monthly, 1.0/12,     IR.Simple,            Annual, 0.0900, 4),-                    (0.1000,     IR.Simple,           Annual, 1.0/12, IR.Compounded,           Monthly, 0.1000, 4), (0.0300, IR.SimpleThenCompounded,       Semiannual,   0.25,               IR.Simple,            Annual, 0.0300, 4),-                    (0.0300, IR.SimpleThenCompounded,       Semiannual,   0.25,               IR.Simple,        Semiannual, 0.0300, 4),-                    (0.0300, IR.SimpleThenCompounded,       Semiannual,   0.25,               IR.Simple,         Quarterly, 0.0300, 4),-                    (0.0300, IR.SimpleThenCompounded,       Semiannual,   0.50,               IR.Simple,            Annual, 0.0300, 4),-                    (0.0300, IR.SimpleThenCompounded,       Semiannual,   0.50,               IR.Simple,        Semiannual, 0.0300, 4),-                    (0.0300, IR.SimpleThenCompounded,       Semiannual,   0.75,           IR.Compounded,        Semiannual, 0.0300, 4),-                    (0.0400,               IR.Simple,       Semiannual,   0.25, IR.SimpleThenCompounded,         Quarterly, 0.0400, 4),-                    (0.0400,               IR.Simple,       Semiannual,   0.25, IR.SimpleThenCompounded,        Semiannual, 0.0400, 4),-                    (0.0400,               IR.Simple,       Semiannual,   0.25, IR.SimpleThenCompounded,            Annual, 0.0400, 4),-                    (0.0400,           IR.Compounded,        Quarterly,   0.50, IR.SimpleThenCompounded,         Quarterly, 0.0400, 4),-                    (0.0400,               IR.Simple,       Semiannual,   0.50, IR.SimpleThenCompounded,        Semiannual, 0.0400, 4),-                    (0.0400,               IR.Simple,       Semiannual,   0.50, IR.SimpleThenCompounded,            Annual, 0.0400, 4),-                    (0.0400,           IR.Compounded,        Quarterly,   0.75, IR.SimpleThenCompounded,         Quarterly, 0.0400, 4),-                    (0.0400,           IR.Compounded,       Semiannual,   0.75, IR.SimpleThenCompounded,        Semiannual, 0.0400, 4),-                    (0.0400,               IR.Simple,       Semiannual,   0.75, IR.SimpleThenCompounded,            Annual, 0.0400, 4)]+                    (0.1000,     IR.Simple,           Annual, 1.0/12, IR.Compounded,           Monthly, 0.1000, 4)]        let testCase :: (Double, IR.Compounding, Frequency, Double, IR.Compounding, Frequency, Double, Int) -> IO ()           testCase (r, comp, freq, t, comp2, freq2, expected, prec) = do@@ -110,6 +118,51 @@       it "bulk test for conversions" $ do         Context.keepingSettingsGc $ mapM_ testCase cases +      it "discount-factor rate derivatives agree with finite differences" $ do+        dc <- dayCounter Actual365FixedStandard+        forM_ ([IR.Simple, IR.Continuous, IR.Compounded] :: [IR.Compounding]) $ \comp -> do+          let r = 0.03; t = 2.5; h = 1e-4+          ir <- IR.interestRate r dc comp Semiannual+          if quantLibAtMost143 then do+            IR.discountFactorFirstDerivative ir t `shouldThrow` unsupportedQuantLib144 "discountFactorFirstDerivative"+            IR.discountFactorSecondDerivative ir t `shouldThrow` unsupportedQuantLib144 "discountFactorSecondDerivative"+          else do+            minus <- IR.interestRate (r-h) dc comp Semiannual >>= (`IR.discountFactor` IR.AccrualAtTime t)+            center <- IR.discountFactor ir (IR.AccrualAtTime t)+            plus <- IR.interestRate (r+h) dc comp Semiannual >>= (`IR.discountFactor` IR.AccrualAtTime t)+            first <- IR.discountFactorFirstDerivative ir t+            second <- IR.discountFactorSecondDerivative ir t+            first `shouldSatisfy` closePrec ((plus-minus)/(2*h)) 1e-6+            second `shouldSatisfy` closePrec ((plus-2*center+minus)/(h*h)) 1e-5++      describe "mixed compounding restrictions" $ do+        let d1 = fromGregorian 2024 1 1+            d2 = addDays 360 d1+            compoundings :: [IR.Compounding]+            compoundings = [IR.SimpleThenCompounded, IR.CompoundedThenSimple]+            periods :: [(String, IR.AccrualPeriod)]+            periods =+              [ ("time", IR.AccrualAtTime 1.0)+              , ("dates", IR.AccrualBetween d1 d2 (Just d1) (Just d2))+              ]+            unsupported (CPlusPlusException message) =+              "not supported for direct calculations" `isInfixOf` message+            unsupported _ = False+        forM_ compoundings $ \comp ->+          forM_ periods $ \(coordinate, accrual) ->+            it ("rejects " ++ show comp ++ " direct calculations with " ++ coordinate) $ do+              dc <- dayCounter (Actual360 False)+              let equivalent = case accrual of+                    IR.AccrualAtTime t -> IR.EquivalentAtTime t+                    IR.AccrualBetween start end rs re -> IR.EquivalentBetween dc start end rs re+              mixed <- IR.interestRate 0.03 dc comp Semiannual+              simple <- IR.interestRate 0.03 dc IR.Simple Annual+              IR.compoundFactor mixed accrual `shouldThrow` unsupported+              IR.discountFactor mixed accrual `shouldThrow` unsupported+              IR.equivalentRate mixed IR.Simple Annual equivalent `shouldThrow` unsupported+              IR.equivalentRate simple comp Semiannual equivalent `shouldThrow` unsupported+              IR.impliedRate simple 1.03 dc comp Semiannual accrual `shouldThrow` unsupported+       -- ActualActual(ISMA) is the case where the reference period actually matters: over an       -- irregular period it year-fractions against [refStart, refEnd], not [d1, d2].       it "honours an explicit ISMA reference period" $ do@@ -1857,6 +1910,139 @@           n <- Instr.npv cms           n `shouldSatisfy` not . isNaN +    -- Dependency extraction: which fixings a leg needs, read off the leg rather than listed by+    -- hand. QuantLib has no requiredFixings() query, so CF.fixingDependencies walks the cash+    -- flows itself; these check it against the dates a caller would have computed the long way.+    describe "Fixing dependencies" $ do+      it "reads an Ibor leg's fixings off the leg, one per coupon, under the index's own name" $+        Context.keepingSettingsGc $ do+          let start = 11 `april` 2013+          Context.setEvaluationDate (Just start)+          cal <- calendar TARGET+          a360 <- dayCounter (Actual360 False)+          t360 <- dayCounter Thirty360BondBasis+          q <- Quote.simpleQuote 0.03 >>= Quote.asQuote+          curve <- flatForward (SettlementDays 0 cal) q a360 IR.Continuous Annual+          idx <- iborIndex Euribor6M (Just curve)+          floatSch <- schedule (Just start) (addGregorianYearsClip 5 start) (6, Months) cal+            ModifiedFollowing ModifiedFollowing Forward False Nothing Nothing+          fixedSch <- schedule (Just start) (addGregorianYearsClip 5 start) (1, Years) cal+            Unadjusted Unadjusted Forward False Nothing Nothing+          floatLeg <- CF.iborLeg floatSch idx (NE.fromList [1000000]) a360 ModifiedFollowing [] [] [] [] [] False False+          deps <- CF.fixingDependencies floatLeg+          idxName <- Index.name idx+          idxName `shouldBe` "Euribor6M Actual/360"+          map fst deps `shouldBe` replicate 10 idxName+          -- Each key is the index's own fixing date for that coupon's accrual start -- how a+          -- caller would have had to work it out by hand, coupon by coupon.+          starts <- CF.toCouponLeg floatLeg >>= CF.couponAccrualStartDates+          byHand <- mapM (fixingDate idx) starts+          map snd deps `shouldBe` byHand++          -- A fixed leg carries no index, so it contributes nothing rather than failing.+          fixedRate <- IR.interestRate 0.03 t360 IR.Simple Annual+          nullCal <- calendar Null+          fixedLeg <- CF.fixedRateLeg fixedSch (NE.fromList [1000000]) (NE.fromList [fixedRate]) Unadjusted t360 nullCal+          CF.fixingDependencies fixedLeg `shouldReturn` []++          -- Through the instrument: both legs of the swap, which is the whole dependency.+          swp <- Swap.vanillaSwap Swap.Payer 1000000 fixedSch 0.03 t360 floatSch idx 0 a360 Nothing Nothing+          n <- Swap.numberOfLegs swp+          n `shouldBe` 2+          swapDeps <- concat <$> mapM (Swap.leg swp >=> CF.fixingDependencies) ([0 .. n - 1] :: [Word])+          map fst swapDeps `shouldBe` map fst deps+          map snd swapDeps `shouldBe` map snd deps++      it "reads every averaged date of an overnight coupon, not just one" $+        Context.keepingSettingsGc $ do+          let start = 11 `april` 2013+          Context.setEvaluationDate (Just start)+          cal <- calendar TARGET+          a360 <- dayCounter (Actual360 False)+          q <- Quote.simpleQuote 0.03 >>= Quote.asQuote+          curve <- flatForward (SettlementDays 0 cal) q a360 IR.Continuous Annual+          on <- overnightIborIndex Eonia (Just curve)+          sch <- schedule (Just start) (addGregorianMonthsClip 3 start) (3, Months) cal+            ModifiedFollowing ModifiedFollowing Forward False Nothing Nothing+          onLeg <- CF.overnightLeg sch on (NE.fromList [1000000]) a360 ModifiedFollowing [] []+          deps <- CF.fixingDependencies onLeg+          onName <- Index.name on+          map fst deps `shouldBe` replicate (length deps) onName+          -- One key per averaged business day, not the single date FloatingRateCoupon would give.+          length deps `shouldSatisfy` (> 50)+          all (uncurry (<)) (zip (map snd deps) (drop 1 (map snd deps))) `shouldBe` True++      it "visits decorated CMS-spread coupons and retains generic spread-index expansion" $+        Context.keepingSettingsGc $ do+          let today' = 2 `january` 2024+              accrualStart = 4 `january` 2024+              paymentDate = 4 `january` 2025+              baseDate = 3 `january` 2024+          Context.setEvaluationDate (Just today')+          cal <- calendar TARGET+          dc <- dayCounter (Actual360 False)+          q <- Quote.simpleQuote 0.03+          curve <- flatForward (SettlementDays 0 cal) q dc IR.Continuous Annual+          cms10y <- liborSwapIndex EurLiborSwapIsdaFixA (10, Years) (Just curve) (Just curve)+          cms2y <- liborSwapIndex EurLiborSwapIsdaFixA (2, Years) (Just curve) (Just curve)+          spread <- swapSpreadIndex "dependency-spread" cms10y cms2y 1.0 (-1.0)+          name10y <- Index.name cms10y+          name2y <- Index.name cms2y++          decorated <- CF.cappedFlooredCmsSpreadCoupon paymentDate 100.0 accrualStart+            paymentDate 2 spread 1.0 0.0 (Just 0.05) Nothing Nothing Nothing dc False+            Nothing Preceding+          decoratedFlow <- CF.asCashFlow decorated+          decoratedLeg <- CF.cashFlowLeg [decoratedFlow]+          decoratedDate <- fixingDate cms10y accrualStart+          CF.fixingDependencies decoratedLeg `shouldReturn`+            [(name10y, decoratedDate), (name2y, decoratedDate)]++          indexed <- CF.indexedCashFlow 100.0 spread baseDate accrualStart paymentDate False+          indexedFlow <- CF.asCashFlow indexed+          indexedLeg <- CF.cashFlowLeg [indexedFlow]+          CF.fixingDependencies indexedLeg `shouldReturn`+            [(name10y, accrualStart), (name2y, accrualStart),+             (name10y, baseDate), (name2y, baseDate)]++      it "reads inflation cash flows at the period starts QuantLib's CPI fixings read" $+        Context.keepingSettingsGc $ do+          let base = 15 `march` 2023+              start = 15 `june` 2023+              end = 15 `june` 2024+          Context.setEvaluationDate (Just (15 `january` 2025))+          rpi <- Inflation.zeroInflationIndex Inflation.UKRPI+          rpiName <- Index.name rpi+          dc <- dayCounter (Actual360 False)+          let keys = map (rpiName,)+          -- CPI::laggedFixing reads the period start of the date less the lag, and under Linear+          -- the next period's start; a coupon given its base CPI reads no base+          forM_ ([(Swap.CPIFlat, [1 `march` 2024]), (Swap.CPILinear, [1 `march` 2024, 1 `april` 2024])] :: [(Swap.CPIInterpolationType, [Day])]) $ \(interp, expected) -> do+            given <- CF.cpiCoupon 100.0 end 100.0 start end rpi (3, Months) interp dc 0.01 Nothing Nothing Nothing+            (CF.asCashFlow given >>= \f -> CF.cashFlowLeg [f] >>= CF.fixingDependencies) `shouldReturn` keys expected+          -- from a base date, the base too: at the base date's period start (CPICoupon::indexRatio+          -- reads it at baseDate + lag, through the lag)+          fromBase <- CF.cpiCouponFromBaseDate base end 100.0 start end rpi (3, Months) Swap.CPILinear dc 0.01 Nothing Nothing Nothing+          (CF.asCashFlow fromBase >>= \f -> CF.cashFlowLeg [f] >>= CF.fixingDependencies)+            `shouldReturn` keys [1 `march` 2024, 1 `april` 2024, 1 `march` 2023, 1 `april` 2023]+          -- a CPI cash flow's base reads at the base date itself, with no lag+          cpi <- CF.cpiCashFlow 100.0 rpi (Just base) Nothing end (3, Months) Swap.CPIFlat end False+          (CF.asCashFlow cpi >>= \f -> CF.cashFlowLeg [f] >>= CF.fixingDependencies) `shouldReturn` keys [1 `march` 2024, 1 `march` 2023]+          cpiGiven <- CF.cpiCashFlow 100.0 rpi (Just base) (Just 250.0) end (3, Months) Swap.CPIFlat end False+          (CF.asCashFlow cpiGiven >>= \f -> CF.cashFlowLeg [f] >>= CF.fixingDependencies) `shouldReturn` keys [1 `march` 2024]+          -- a zero-coupon inflation swap's flow: its start and end through the lag+          zero <- CF.zeroInflationCashFlow 100.0 rpi Swap.CPILinear start end (3, Months) end False+          (CF.asCashFlow zero >>= \f -> CF.cashFlowLeg [f] >>= CF.fixingDependencies)+            `shouldReturn` keys [1 `march` 2023, 1 `april` 2023, 1 `march` 2024, 1 `april` 2024]+          -- a ratio YoY index reads its zero index a year apart; a quoted one its own fixings+          ratio <- Inflation.yoyInflationIndexFromZero rpi Nothing+          ratioCoupon <- CF.yoyInflationCoupon end 100.0 start end 0 ratio (3, Months) Swap.CPIFlat dc 1.0 0.0 Nothing Nothing+          (CF.asCashFlow ratioCoupon >>= \f -> CF.cashFlowLeg [f] >>= CF.fixingDependencies) `shouldReturn` keys [1 `march` 2024, 1 `march` 2023]+          quoted <- Inflation.yoyInflationIndex Inflation.YYUKRPI+          quotedName <- Index.name quoted+          quotedCoupon <- CF.yoyInflationCoupon end 100.0 start end 0 quoted (3, Months) Swap.CPIFlat dc 1.0 0.0 Nothing Nothing+          (CF.asCashFlow quotedCoupon >>= \f -> CF.cashFlowLeg [f] >>= CF.fixingDependencies) `shouldReturn` [(quotedName, 1 `march` 2024)]+     describe "Index fixings" $ do       it "calculates convention-aware fixing, value, and maturity dates" $         Context.keepingSettingsGc $ do@@ -1959,6 +2145,7 @@            d0 <- advance cal startDate (1, Days) Following False           ds <- genDates n d0+          Context.setEvaluationDate (Just (addDays 1 (last ds)))           forM_ (zip [0 ..] ds) $ \(k, d) -> addFixing idx d (fixingAt k) False            let rels = [fixingAt k / fixingAt (k - 1) - 1 | k <- [1 .. n]]
+ test/hspec/QuantLib/Spec/Method.hs view
@@ -0,0 +1,45 @@+-- Longstaff-Schwartz regression split into fit and evaluate: stored coefficients must reproduce+-- the combined calls bit for bit, the one-column scalar basis included. States stay inside (-1, 1),+-- where Chebyshev's weighted basis is defined.+module QuantLib.Spec.Method (spec) where++import Control.Exception (evaluate, try, SomeException)+import Control.Monad (forM_)+import Data.Either (isLeft)+import qualified Data.Vector.Storable as V+import GHC.Float (castDoubleToWord64)+import Test.Hspec++import QuantLib.Math+import QuantLib.Method++spec :: Spec+spec = describe "Longstaff-Schwartz fit and evaluate (QuantLib.Method)" $ do+  it "reproduces the combined regression bit for bit" $+    forM_ [(p, o, d) | p <- [Monomial, Laguerre, Hermite, Legendre, Chebyshev], o <- [1, 2, 3], d <- [1, 2, 3]] $ \(p, o, d) -> do+      let fitStates = states d fitRows 0.6180339887+          evalStates = states d evalRows 0.4142135623+          targets = V.fromList [target (row d 0.6180339887 i) | i <- [0 .. fitRows - 1]]+      coefficients <- lsmFit p o (matrix d fitRows fitStates) targets+      split <- lsmEvaluate p o coefficients (matrix d evalRows evalStates)+      combined <- if d == 1+        then lsmRegress p o (V.fromList fitStates) targets (V.fromList evalStates)+        else lsmRegressMulti p o (matrix d fitRows fitStates) targets (matrix d evalRows evalStates)+      (p, o, d, V.length coefficients) `shouldBe` (p, o, d, fromIntegral (lsmBasisSize d o))+      (p, o, d, bits split) `shouldBe` (p, o, d, bits combined)+  it "refuses coefficients that do not fit the basis" $ do+    coefficients <- lsmFit Monomial 2 (matrix 2 fitRows (states 2 fitRows 0.6180339887))+      (V.fromList [target (row 2 0.6180339887 i) | i <- [0 .. fitRows - 1]])+    result <- try (lsmEvaluate Monomial 2 (V.init coefficients) (matrix 2 evalRows (states 2 evalRows 0.4142135623)) >>= evaluate)+    isLeft (result :: Either SomeException RealVector) `shouldBe` True+  it "names its build" $+    lsmEvaluatorIdentity `shouldContain` "QuantLib"+  where+    fitRows = 40+    evalRows = 7+    bits = map castDoubleToWord64 . V.toList+    target xs = sum (map (exp . negate) xs) + product xs+    row :: Word -> Double -> Word -> [Double]+    row d step i = [1.6 * snd (properFraction (fromIntegral (i + 1) * step * fromIntegral k) :: (Int, Double)) - 0.8 | k <- [1 .. d]]+    states d n step = concat [row d step i | i <- [0 .. n - 1]]+    matrix d n xs = either error id (realMatrixFromVector n d (V.fromList xs))
test/hspec/QuantLib/Spec/Model.hs view
@@ -13,31 +13,41 @@  import Test.Hspec import qualified Data.Vector.Storable as V-import Data.Time.Calendar(addGregorianYearsClip, fromGregorian, addDays)+import Data.Time.Calendar(Day, addGregorianYearsClip, addGregorianMonthsClip, fromGregorian, addDays) import Data.List.NonEmpty(NonEmpty(..), fromList)  import qualified QuantLib.Context as Context import QuantLib.Time.Calendar import QuantLib.Time.Date(september) import QuantLib.Time.Schedule-import QuantLib.InterestRate(Compounding(..))+import QuantLib.InterestRate(Compounding(..), VolatilityType(ShiftedLognormal)) import QuantLib.Quote+import QuantLib.TermStructure(timeFromReference) import QuantLib.TermStructure.Yield import qualified QuantLib.Index.InterestRate as IR import QuantLib.Instrument import QuantLib.Instrument.Option(EuropeanExercise(..))-import QuantLib.Instrument.Swap(fairRate, fixedLegBps, vanillaSwap, swaption, SwapType(..))+import QuantLib.Instrument.Swap(fairRate, fixedLegBps, vanillaSwap, makeVanillaSwap, swaption, SwapType(..)+  , overnightIndexedSwap, nonstandardSwapFromVanilla, nonstandardSwaption, overnightLegNpv+  , HasFloatingLeg(floatingLegNpv)) import QuantLib.Model hiding(setPricingEngine, value, discount) import qualified QuantLib.Model as Model import qualified QuantLib.Process as Process-import QuantLib.Math(Interpolation(..))+import qualified QuantLib.TermStructure.Volatility as Vol+import QuantLib.Math(Interpolation(..), EndCriteria(..), OptimizationMethod(..), matrixData)+import QuantLib.CashFlow(RateAveragingType(AveragingCompound))+import qualified QuantLib.CashFlow as CF+import Control.Monad(forM, forM_, unless)+import QuantLib.Index(fixingCalendar) import QuantLib.PricingEngine -import QuantLib.Spec.Helpers(closePrec, listClose)+import QuantLib.Spec.Helpers(closePrec, listClose, quantLibAtMost143, unsupportedQuantLib144)  spec :: Spec spec = do   gaussian1dSpec+  gaussian1dOisSwaptionSpec+  gsrReversionSpec   affineModelSpec   garch11Spec   garmanKlassSpec@@ -45,7 +55,26 @@  gaussian1dSpec :: Spec gaussian1dSpec =-  describe "Gaussian1dModel" $+  describe "Gaussian1dModel" $ do+    it "compounds an overnight coupon against the fitted curve" $ Context.keepingSettingsGc $ do+      let today' = fromGregorian 2024 1 2; start = fromGregorian 2024 1 4; end = fromGregorian 2024 4 4+      Context.setEvaluationDate (Just today')+      dc <- dayCounter (Actual360 False)+      q <- simpleQuote 0.03+      curve <- flatForward (ReferenceDate today') q dc Continuous Annual+      vol <- simpleQuote 0.01+      rev <- simpleQuote 0.01+      model <- gsr curve vol [] rev 60 >>= asGaussian1dModel+      idx <- IR.overnightIborIndex IR.Sofr (Just curve)+      coupon <- CF.overnightIndexedCoupon end 100 start end idx 1 0 Nothing Nothing dc False+        AveragingCompound 0 0 False False Nothing Nothing Nothing Nothing+      if quantLibAtMost143 then+        gaussian1dCompoundedRate model coupon Nothing 0 Nothing `shouldThrow` unsupportedQuantLib144 "gaussian1dCompoundedRate"+      else do+        expected <- CF.rate coupon+        calculated <- gaussian1dCompoundedRate model coupon Nothing 0 Nothing+        calculated `shouldSatisfy` closePrec expected 1e-8+     it "reproduces the fitted curve's own discount factors, forward rate, and fair swap rate at y=0" $       Context.keepingSettingsGc $ do         cal <- calendar TARGET@@ -112,6 +141,264 @@         proc1D <- stateProcess model         proc1D `seq` return () +    -- A Black engine on the surface must reprice the model's own ATM swaption.+    it "gaussian1dSwaptionVolatility reprices the model's swaption under a Black engine" $+      Context.keepingSettingsGc $ do+        cal <- calendar TARGET+        originalEvalDate <- Context.evaluationDate+        evalDate <- adjust cal originalEvalDate Following+        Context.setEvaluationDate (Just evalDate)+        settlement <- advance cal evalDate (2, Days) Following False+        dc <- dayCounter Actual365FixedStandard+        flatQ <- simpleQuote 0.03+        ts <- flatForward (ReferenceDate settlement) flatQ dc Continuous Annual+        volQuote <- simpleQuote 0.01+        reversionQuote <- simpleQuote 0.01+        gsrModel <- gsr ts volQuote [] reversionQuote 60.0+        model <- asGaussian1dModel gsrModel+        swapBase <- IR.liborSwapIndex IR.EuriborSwapIsdaFixA (10, Years) (Just ts) (Just ts)+        euribor6m <- IR.iborIndex IR.Euribor6M (Just ts)+        thirty360 <- dayCounter Thirty360BondBasis+        -- the swap index's own underlying starts two business days after its fixing date+        startDate <- adjust cal (addGregorianYearsClip 5 settlement) Following+        fixingDate <- advance cal startDate (-2, Days) Following False+        strike <- gaussian1dSwapRate model fixingDate (10, Years) Nothing 0 (Just swapBase)+        underlying <- makeVanillaSwap (10, Years) euribor6m strike (5, Years) (Just 2) (1, Years) thirty360+          Nothing Nothing Nothing Nothing Nothing Nothing+        swpn <- swaption underlying (European (EuropeanExercise fixingDate)) Physical PhysicalOTC+        gaussian1dSwaptionEngine model 64 7.0 True False (Just ts) None >>= setPricingEngine swpn+        modelNpv <- npv swpn+        surface <- Vol.gaussian1dSwaptionVolatility cal ModifiedFollowing swapBase model dc+        blackSwaptionEngineFromVolatilityStructure ts surface >>= setPricingEngine swpn+        blackNpv <- npv swpn+        -- The Black engine queries by time, which the surface maps back to a solved date and a+        -- whole-month tenor before inverting a model price.+        blackNpv `shouldSatisfy` closePrec modelNpv (5.0e-4 * modelNpv)++-- Piecewise reversions: gsr.cpp's testGsrModel equivalence of one reversion and n+1 equal ones,+-- and a recovery check for 'calibrateReversionsIterative' alternating with the volatility fit.+-- gsr.cpp's testSofrSwaptionPaymentLag and testSofrSwaptionObservationShiftNormalization.+gaussian1dOisSwaptionSpec :: Spec+gaussian1dOisSwaptionSpec =+  describe "Gaussian1d swaptions on an OvernightIndexedSwap" $ do+    it "agree across the standard, Jamshidian and nonstandard engines with a payment lag" $+      Context.keepingSettingsGc $ do+        (curve, sofr, cal, dc, model) <- sofrSetup 0.025 0.01+        expiry <- adjust cal (addGregorianYearsClip 3 today) Following+        start <- advance cal expiry (2, Days) Following False+        end <- advance cal start (5, Years) Following False+        sch <- schedule (Just start) end (1, Years) cal ModifiedFollowing ModifiedFollowing Forward False Nothing Nothing+        discounting <- discountingSwapEngine curve Nothing Nothing Nothing+        let ois rate = overnightIndexedSwap Payer 1 sch rate dc sofr 0 2 Following cal False+              AveragingCompound defaultOvernightObservation Nothing+        probe <- ois 0+        setPricingEngine probe discounting+        swap <- fairRate probe >>= ois+        setPricingEngine swap discounting+        swapNpv <- npv swap+        swapNpv `shouldSatisfy` closePrec 0 1e-12+        onNpv <- overnightLegNpv swap+        floatingLegNpv swap >>= (`shouldSatisfy` closePrec onNpv 1e-12)+        let exercise = European (EuropeanExercise expiry)+        if quantLibAtMost143 then do+          swaption swap exercise Physical PhysicalOTC+            `shouldThrow` unsupportedQuantLib144 "swaption on OvernightIndexedSwap"+          nonstandardSwapFromVanilla swap `shouldThrow` unsupportedQuantLib144 "nonstandardSwapFromVanilla"+        else do+          swpn <- swaption swap exercise Physical PhysicalOTC+          gaussian1dSwaptionEngine model 128 8 True False Nothing None >>= setPricingEngine swpn+          gaussian <- npv swpn+          gaussian1dJamshidianSwaptionEngine model >>= setPricingEngine swpn+          jamshidian <- npv swpn+          jamshidian `shouldSatisfy` closePrec gaussian (2e-3 * gaussian)+          nonstandard <- nonstandardSwapFromVanilla swap+          setPricingEngine nonstandard discounting+          nonstandardNpv <- npv nonstandard+          nonstandardNpv `shouldSatisfy` closePrec swapNpv 1e-12+          nsSwpn <- nonstandardSwaption nonstandard exercise Physical PhysicalOTC+          gaussian1dNonstandardSwaptionEngine model 128 8 True False (Nothing :: Maybe Quote) (Just curve) None+            >>= setPricingEngine nsSwpn+          nonstandardPrice <- npv nsSwpn+          nonstandardPrice `shouldSatisfy` closePrec gaussian (2e-3 * gaussian)++    it "keeps put-call parity with a lookback under observation shift" $+      Context.keepingSettingsGc $ do+        (curve, sofr, cal, _, model) <- sofrSetup 0.02 0.015+        fixedDc <- dayCounter (Actual360 False)+        engine <- gaussian1dSwaptionEngine model 128 8 True False Nothing None+        discounting <- discountingSwapEngine curve Nothing Nothing Nothing+        let shifted = OvernightObservation (Just 5) 0 True+            ois typ s e = do+              sch <- schedule (Just s) e (3, Months) cal ModifiedFollowing ModifiedFollowing Forward False Nothing Nothing+              overnightIndexedSwap typ 1 sch 0.03 fixedDc sofr 0 0 Following cal False AveragingCompound shifted Nothing+        unless quantLibAtMost143 $ forM_ [26, 39 .. 117] $ \weeks -> do+          s <- advance cal today (weeks, Weeks) Following False+          e <- advance cal s (3, Months) Following False+          ex <- advance cal s (-3, Weeks) Following False+          forward <- ois Payer s e+          setPricingEngine forward discounting+          reference <- npv forward+          let price typ = do+                swpn <- ois typ s e >>= \u -> swaption u (European (EuropeanExercise ex)) Physical PhysicalOTC+                setPricingEngine swpn engine+                npv swpn+          parity <- (-) <$> price Payer <*> price Receiver+          parity `shouldSatisfy` closePrec reference 1e-5+  where+    today = fromGregorian 2025 6 30+    sofrSetup r0 slope = do+      Context.setEvaluationDate (Just today)+      dc <- dayCounter Actual365FixedStandard+      sofrCal <- IR.overnightIborIndex IR.Sofr Nothing >>= fixingCalendar+      let pillars = (today, r0) :| [ (addGregorianYearsClip i today, r0 + slope * (1 - exp (-fromIntegral i / 3)))+                                  | i <- [1 .. 12] ]+      curve <- interpolatedZeroCurve pillars dc sofrCal ([] :: [(Day, Quote)]) Linear+      sofr <- IR.overnightIborIndex IR.Sofr (Just curve)+      vol <- simpleQuote 0.008+      rev <- simpleQuote 0.03+      model <- gsr curve vol [] rev 12 >>= asGaussian1dModel+      pure (curve, sofr, sofrCal, dc, model)++gsrReversionSpec :: Spec+gsrReversionSpec =+  describe "Gsr reversions" $ do+    it "prices n+1 equal piecewise reversions as one constant reversion" $+      Context.keepingSettingsGc $ do+        (settlement, ts) <- flatCurve+        let stepDates = [addDays (182 * i) settlement | i <- [1 .. 59]]+        volQuote <- simpleQuote 0.01+        reversionQuote <- simpleQuote 0.01+        constant <- gsr ts volQuote [] reversionQuote 50.0 >>= asGaussian1dModel+        piecewiseModel <- gsrWithReversions ts (volQuote, reversionQuote)+          [(d, (volQuote, reversionQuote)) | d <- stepDates] 50.0+        reversions piecewiseModel >>= (`shouldBe` replicate 60 0.01)+        piecewise <- asGaussian1dModel piecewiseModel+        forM_ [(w, t, y) | w <- [1, 5, 20], t <- [2, 10, 30], t > w, y <- [-2, 0, 1.5]] $ \(w, t, y) -> do+          let refDate = addGregorianYearsClip w settlement+              maturity = addGregorianYearsClip t settlement+          a <- gaussian1dZerobond constant maturity (Just refDate) y Nothing+          b <- gaussian1dZerobond piecewise maturity (Just refDate) y Nothing+          b `shouldSatisfy` closePrec a 1.0e-8++    -- The rest of testGsrModel: the state is standardized through the GSR state process, and the+    -- Hull-White short rate adds the flat 3% instantaneous forward to it.+    it "prices zero bonds as the Hull-White model with the same constant reversion and volatility" $+      Context.keepingSettingsGc $ do+        (settlement, ts) <- flatCurve+        volQuote <- simpleQuote 0.01+        reversionQuote <- simpleQuote 0.01+        constant <- gsr ts volQuote [] reversionQuote 50.0+        piecewise <- gsrWithReversions ts (volQuote, reversionQuote)+          [(addGregorianMonthsClip (6 * i) settlement, (volQuote, reversionQuote)) | i <- [1 .. 59]] 50.0+        hwAffine <- hullWhite ts 0.01 0.01 >>= asAffineModel+        let horizon = addDays (50 * 365) settlement+        forM_ [constant, piecewise] $ \gsrModel -> do+          model <- asGaussian1dModel gsrModel+          sp <- stateProcess model >>= Process.asStochasticProcess+          forM_ [37, 3689, 10994, 16473] $ \wDays -> do+            let wDate = addDays wDays settlement+                tDates = takeWhile (< horizon)+                  [addDays (wDays + 37 + round (912.5 * fromIntegral k :: Double)) settlement | k <- [0 :: Int ..]]+            w <- timeFromReference ts wDate+            [e] <- Process.expectation sp 0 [0] w+            [sd] <- matrixData <$> Process.stdDeviation sp 0 [0] w+            forM_ tDates $ \tDate -> do+              t <- timeFromReference ts tDate+              forM_ [-0.10 + 0.01 * fromIntegral k | k <- [0 .. 20 :: Int]] $ \xw -> do+                gsrBond <- gaussian1dZerobond model tDate (Just wDate) ((xw - e) / sd) Nothing+                hwBond <- discountBond hwAffine w t [xw + 0.03]+                gsrBond `shouldSatisfy` closePrec hwBond 1.0e-8++    it "refuses to fit more reversions than the model has" $+      Context.keepingSettingsGc $ do+        (settlement, ts) <- flatCurve+        volQuote <- simpleQuote 0.01+        reversionQuote <- simpleQuote 0.01+        model <- gsr ts volQuote [] reversionQuote 60.0+        helpers <- mkHelpers settlement ts [(1, 5), (2, 5)]+        engine <- asGaussian1dModel model >>= \m -> gaussian1dSwaptionEngine m 64 7.0 True False (Just ts) None+        forM_ (map fst helpers) (`Model.setPricingEngine` engine)+        calibrateReversionsIterative model (map fst helpers) lm lmCriteria Nothing [] `shouldThrow` anyException++    it "setParams moves a model to the given parameters and reprices what is priced on it" $+      Context.keepingSettingsGc $ do+        (settlement, ts) <- flatCurve+        let fiveYears = addGregorianYearsClip 5 settlement+            gsrOn v0 r0 v1 r1 = do+              qs <- mapM simpleQuote [v0, r0, v1, r1]+              case qs of+                [qv0, qr0, qv1, qr1] -> gsrWithReversions ts (qv0, qr0) [(fiveYears, (qv1, qr1))] 60.0+                _ -> error "four quotes"+            helperOn model = do+              [(h, _)] <- mkHelpers settlement ts [(1, 5)]+              engine <- asGaussian1dModel model >>= \m -> gaussian1dSwaptionEngine m 64 7.0 True False (Just ts) None+              Model.setPricingEngine h engine+              pure h+        truth <- gsrOn 0.008 0.02 0.012 0.05+        wanted <- params truth+        expected <- helperOn truth >>= modelValue+        model <- gsrOn 0.01 0.01 0.01 0.01+        h <- helperOn model+        initial <- modelValue h+        initial `shouldNotBe` expected+        setParams model wanted+        params model `shouldReturn` wanted+        volatilities model `shouldReturn` [0.008, 0.012]+        modelValue h `shouldReturn` expected+        -- Upstream writes parameters before checking the size, so either mismatch must not reach it.+        forM_ [drop 1 wanted, wanted ++ [0.3]] $ \wrong -> do+          setParams model (map (* 2) wrong) `shouldThrow` anyException+          params model `shouldReturn` wanted+          modelValue h `shouldReturn` expected++    -- Reversion i is fitted to a swaption starting inside piece i, whose swap spans it. The+    -- forward-measure numeraire couples the pieces, so the passes repeat.+    it "fits piecewise reversions to their own swaptions and holds the volatilities" $+      Context.keepingSettingsGc $ do+        (settlement, ts) <- flatCurve+        let fiveYears = addGregorianYearsClip 5 settlement+        helpers <- mkHelpers settlement ts [(1, 5), (5, 25)]+        vol0 <- simpleQuote 0.008+        vol1 <- simpleQuote 0.012+        rev0 <- simpleQuote 0.02+        rev1 <- simpleQuote 0.05+        truth <- gsrWithReversions ts (vol0, rev0) [(fiveYears, (vol1, rev1))] 60.0+        trueEngine <- asGaussian1dModel truth >>= \m -> gaussian1dSwaptionEngine m 64 7.0 True False (Just ts) None+        forM_ helpers $ \(h, q) -> do+          Model.setPricingEngine h trueEngine+          price <- modelValue h+          impliedVolatility h price 1.0e-12 1000 0.001 3.0 >>= setValue q+        guess0 <- simpleQuote 0.01+        guess1 <- simpleQuote 0.01+        model <- gsrWithReversions ts (vol0, guess0) [(fiveYears, (vol1, guess1))] 60.0+        engine <- asGaussian1dModel model >>= \m -> gaussian1dSwaptionEngine m 64 7.0 True False (Just ts) None+        forM_ helpers $ \(h, _) -> Model.setPricingEngine h engine+        forM_ [1 .. 4 :: Int] $ \_ -> calibrateReversionsIterative model (map fst helpers) lm lmCriteria Nothing []+        reversions model >>= (`shouldSatisfy` listClose id [0.02, 0.05] 1.0e-5)+        volatilities model >>= (`shouldBe` [0.008, 0.012])+  where+    flatCurve = do+      cal <- calendar TARGET+      originalEvalDate <- Context.evaluationDate+      evalDate <- adjust cal originalEvalDate Following+      Context.setEvaluationDate (Just evalDate)+      settlement <- advance cal evalDate (2, Days) Following False+      dc <- dayCounter Actual365FixedStandard+      flatQ <- simpleQuote 0.03+      ts <- flatForward (ReferenceDate settlement) flatQ dc Continuous Annual+      pure (settlement, ts)+    mkHelpers settlement ts spans = do+      euribor6m <- IR.iborIndex IR.Euribor6M (Just ts)+      thirty360 <- dayCounter Thirty360BondBasis+      act360 <- dayCounter (Actual360 False)+      forM spans $ \(e, end) -> do+        q <- simpleQuote 0.2+        h <- swaptionHelper (SpanDates (addGregorianYearsClip e settlement) (addGregorianYearsClip end settlement)) q+          euribor6m (1, Years) thirty360 act360 ts RelativePriceError Nothing 1 ShiftedLognormal 0 Nothing AveragingCompound+        pure (h, q)+    lm = LevenbergMarquardt 1.0e-8 1.0e-8 1.0e-8 False+    lmCriteria = EndCriteria 1000 10 1.0e-8 1.0e-8 1.0e-8+ affineModelSpec :: Spec affineModelSpec =   describe "AffineModel" $ do@@ -251,8 +538,8 @@   it "reproduces garch.cpp::testCalculation's calculated series" $ do     g <- garch11 0.2 0.3 0.4     let day0 = fromGregorian 1962 7 6-        days = [addDays i day0 | i <- [1 .. 10]]-        series = fromList (zip days (replicate 10 0.1))+        sampleDays = [addDays i day0 | i <- [1 .. 10]]+        series = fromList (zip sampleDays (replicate 10 0.1))     result <- calculate g series     let expected =           [ 0.452769, 0.513323, 0.530141, 0.5350841, 0.536558@@ -262,7 +549,7 @@         -- input point has nothing to forecast from, so it's dropped, and one extra point is         -- extrapolated one step past the input series' last date (garch.cpp's         -- Garch11::calculate, not this binding's marshalling).-        outputDays = map (addDays 1) days+        outputDays = map (addDays 1) sampleDays     map fst result `shouldBe` outputDays     map snd result `shouldSatisfy` listClose id expected 1.0e-6 @@ -306,7 +593,7 @@ garmanKlassSpec :: Spec garmanKlassSpec = describe "GarmanKlass family" $ do   it "garmanKlassSimpleSigma matches ln(close\\/open)^2, scaled by yearFraction" $ do-    result <- garmanKlassSimpleSigma yearFraction bars+    result <- garmanKlassSimpleSigma dt bars     map fst result `shouldBe` [day1, day2]     case result of       (r0:r1:_) -> do@@ -315,25 +602,25 @@       _ -> expectationFailure "expected at least two bars"    it "parkinsonSigma matches the high-low estimator" $ do-    result <- parkinsonSigma yearFraction bars+    result <- parkinsonSigma dt bars     case result of       (_:r1:_) -> r1 `shouldSatisfy` (\(_, v) -> closePrec (parkinsonSigma' o2 h2 l2) 1.0e-9 v)       _ -> expectationFailure "expected at least two bars"    it "garmanKlassSigma4 matches its published high-low\\/close-open coefficients" $ do-    result <- garmanKlassSigma4 yearFraction bars+    result <- garmanKlassSigma4 dt bars     case result of       (_:r1:_) -> r1 `shouldSatisfy` (\(_, v) -> closePrec (sigma4Formula o2 c2 h2 l2) 1.0e-9 v)       _ -> expectationFailure "expected at least two bars"    it "garmanKlassSigma5 matches its published high-low\\/close-open coefficients" $ do-    result <- garmanKlassSigma5 yearFraction bars+    result <- garmanKlassSigma5 dt bars     case result of       (_:r1:_) -> r1 `shouldSatisfy` (\(_, v) -> closePrec (sigma5Formula o2 c2 h2 l2) 1.0e-9 v)       _ -> expectationFailure "expected at least two bars"    it "garmanKlassSigma1 blends simpleSigma with the overnight jump, dropping the first bar" $ do-    result <- garmanKlassSigma1 yearFraction marketOpenFraction bars+    result <- garmanKlassSigma1 dt marketOpenFraction bars     map fst result `shouldBe` [day2]     let simpleBase = log (c2 / o2) ** 2         expected = openCloseBlend marketOpenFraction 0.5 simpleBase@@ -342,7 +629,7 @@       [] -> expectationFailure "expected at least one bar"    it "garmanKlassSigma3 blends parkinsonSigma with the overnight jump, dropping the first bar" $ do-    result <- garmanKlassSigma3 yearFraction marketOpenFraction bars+    result <- garmanKlassSigma3 dt marketOpenFraction bars     let parkinsonBase = (log (h2 / o2) - log (l2 / o2)) ** 2 / (4 * log 2)         expected = openCloseBlend marketOpenFraction 0.17 parkinsonBase     case result of@@ -350,7 +637,7 @@       [] -> expectationFailure "expected at least one bar"    it "garmanKlassSigma6 blends garmanKlassSigma4 with the overnight jump, dropping the first bar" $ do-    result <- garmanKlassSigma6 yearFraction marketOpenFraction bars+    result <- garmanKlassSigma6 dt marketOpenFraction bars     let sigma4Base =           let u = log (h2 / o2); d = log (l2 / o2); cc = log (c2 / o2)           in 0.511 * (u - d) ** 2 - 0.019 * (cc * (u + d) - 2 * u * d) - 0.383 * cc * cc@@ -364,19 +651,19 @@     (o1, c1, h1, l1) = (100.0, 102.0, 103.0, 99.0)     (o2, c2, h2, l2) = (101.0, 105.0, 106.0, 100.0)     bars = (day1, o1, c1, h1, l1) :| [(day2, o2, c2, h2, l2)]-    yearFraction = 1.0 / 252.0+    dt = 1.0 / 252.0     marketOpenFraction = 0.5 :: Double -    simpleSigma o c = sqrt (abs (log (c / o) ** 2) / yearFraction)-    parkinsonSigma' o h l = sqrt (abs ((log (h / o) - log (l / o)) ** 2 / (4 * log 2)) / yearFraction)+    simpleSigma o c = sqrt (abs (log (c / o) ** 2) / dt)+    parkinsonSigma' o h l = sqrt (abs ((log (h / o) - log (l / o)) ** 2 / (4 * log 2)) / dt)     sigma4Formula o c h l =       let u = log (h / o); d = log (l / o); cc = log (c / o)-      in sqrt (abs (0.511 * (u - d) ** 2 - 0.019 * (cc * (u + d) - 2 * u * d) - 0.383 * cc * cc) / yearFraction)+      in sqrt (abs (0.511 * (u - d) ** 2 - 0.019 * (cc * (u + d) - 2 * u * d) - 0.383 * cc * cc) / dt)     sigma5Formula o c h l =       let u = log (h / o); d = log (l / o); cc = log (c / o)-      in sqrt (abs (0.5 * (u - d) ** 2 - (2 * log 2 - 1) * cc * cc) / yearFraction)+      in sqrt (abs (0.5 * (u - d) ** 2 - (2 * log 2 - 1) * cc * cc) / dt)     -- jump = ln(cur.open) - ln(prev.close); a is the per-variant blend weight (0.5/0.17/0.012).-    openCloseBlend f a base = sqrt ((a * jump ** 2 / f + (1 - a) * base / (1 - f)) / yearFraction)+    openCloseBlend f a base = sqrt ((a * jump ** 2 / f + (1 - a) * base / (1 - f)) / dt)       where jump = log o2 - log c1  -- ConstantEstimator: hand-computed over a 5-point series with windowSize=3@@ -386,22 +673,22 @@ constantAndLocalEstimatorSpec = describe "ConstantEstimator and SimpleLocalEstimator" $ do   it "constantVolatilityEstimator matches the windowed sample-variance formula" $ do     let day0 = fromGregorian 2021 1 1-        days = [addDays i day0 | i <- [0 .. 4]]+        sampleDays = [addDays i day0 | i <- [0 .. 4]]         vals = [1.0, 2.0, 3.0, 2.0, 1.0]-        series = fromList (zip days vals)+        series = fromList (zip sampleDays vals)         windowed ws = sqrt (sum (map (** 2) ws) / n - sum ws ** 2 / n / (n + 1))           where n = fromIntegral (length ws)     result <- constantVolatilityEstimator 3 series-    map fst result `shouldBe` drop 3 days+    map fst result `shouldBe` drop 3 sampleDays     map snd result `shouldSatisfy` listClose id [windowed [1, 2, 3], windowed [2, 3, 2]] 1.0e-9    it "simpleLocalVolatilityEstimator matches |ln(p_i\\/p_{i-1})| \\/ sqrt(yearFraction)" $ do     let day0 = fromGregorian 2021 1 1-        days = [addDays i day0 | i <- [0 .. 2]]+        sampleDays = [addDays i day0 | i <- [0 .. 2]]         prices = [100.0, 105.0, 110.0]-        series = fromList (zip days prices)-        yearFraction = 1.0 / 252.0-        expected = [abs (log (p1 / p0)) / sqrt yearFraction | (p0, p1) <- zip prices (drop 1 prices)]-    result <- simpleLocalVolatilityEstimator yearFraction series-    map fst result `shouldBe` drop 1 days+        series = fromList (zip sampleDays prices)+        dt = 1.0 / 252.0+        expected = [abs (log (p1 / p0)) / sqrt dt | (p0, p1) <- zip prices (drop 1 prices)]+    result <- simpleLocalVolatilityEstimator dt series+    map fst result `shouldBe` drop 1 sampleDays     map snd result `shouldSatisfy` listClose id expected 1.0e-9
+ test/hspec/QuantLib/Spec/Model/RoughHeston.hs view
@@ -0,0 +1,135 @@+{-# LANGUAGE TupleSections #-}+module QuantLib.Spec.Model.RoughHeston (spec) where++import Control.Monad(forM, forM_)+import Data.Complex(Complex((:+)), magnitude)+import Data.List.NonEmpty(NonEmpty(..))+import Data.Time.Calendar(Day, fromGregorian, addDays)+import Test.Hspec+import qualified QuantLib.Context as Context+import QuantLib.Time.Calendar+import QuantLib.Time.Schedule+import QuantLib.InterestRate(Compounding(..))+import QuantLib.Quote+import QuantLib.TermStructure(Reference(..), TermPoint(..), timeFromReference)+import QuantLib.TermStructure.Yield(flatForward, discount)+import QuantLib.Process(hestonProcess, HestonProcessDiscretization(..))+import qualified QuantLib.Model as Model+import QuantLib.Model(RoughHestonModel, roughHestonModel)+import QuantLib.Instrument(npv, setPricingEngine)+import QuantLib.Instrument.Option+import QuantLib.PricingEngine+import QuantLib.Math(OptimizationMethod(..), EndCriteria(..))+import QuantLib.Spec.Helpers(quantLibAtMost143, unsupportedQuantLib144)++fixtureDate :: Day+fixtureDate = fromGregorian 2026 7 2++fixture :: Double -> IO (RoughHestonModel, SimpleQuote)+fixture hurst = do+  Context.setEvaluationDate (Just fixtureDate)+  dc <- dayCounter Actual365FixedStandard+  r <- simpleQuote 0.03 >>= \q -> flatForward (ReferenceDate fixtureDate) q dc Continuous Annual+  q <- simpleQuote 0 >>= \v -> flatForward (ReferenceDate fixtureDate) v dc Continuous Annual+  spot <- simpleQuote 100+  process <- hestonProcess r (Just q) spot 0.04 0.3 0.04 0.4 (-0.7) QuadraticExponentialMartingale+  model <- roughHestonModel process hurst+  pure (model, spot)++near :: Double -> Double -> Double -> Expectation+near tolerance expected actual = abs (actual - expected) `shouldSatisfy` (< tolerance)++spec :: Spec+spec = describe "Rough Heston 1.44" $+  if quantLibAtMost143 then+    it "reports the required version before constructing the model" $ Context.keepingSettingsGc $+      fixture 0.1 `shouldThrow` unsupportedQuantLib144 "roughHestonModel"+  else do+    it "matches upstream independent reference prices" $ Context.keepingSettingsGc $ do+      (model, _) <- fixture 0.1+      engine <- analyticRoughHestonEngine model 128 512 AdamsPredictorCorrector+      forM_ [(0.25, 75, 25.762400), (0.25, 100, 3.793313), (1, 100, 8.336634), (2, 130, 1.285820)] $ \(t,k,expected) ->+        roughHestonPriceVanillaPayoff engine (PlainVanillaPayoff Call k) (TimePoint t) >>= near 5e-4 expected++    it "prices through the engine family and preserves date/time semantics" $ Context.keepingSettingsGc $ do+      (model, _) <- fixture 0.1+      engine <- analyticRoughHestonEngine model 128 256 AdamsPredictorCorrector+      let maturity = addDays 365 fixtureDate+          payoff = PlainVanillaPayoff Call 100+      option <- vanillaOption (PlainVanilla payoff) (European (EuropeanExercise maturity))+      setPricingEngine option engine+      expected <- npv option+      roughHestonPriceVanillaPayoff engine payoff (DatePoint maturity) >>= near 1e-8 expected+      roughHestonPriceVanillaPayoff engine payoff (TimePoint 1) >>= near 1e-8 expected+      process <- Model.roughHestonProcess model+      -- The process's risk-free curve uses the same day counter as direct date pricing.+      Model.roughHestonHurst model `shouldReturn` 0.1+      Model.params model >>= \ps -> length ps `shouldBe` 6+      engineAsBase <- asPricingEngine engine+      setPricingEngine option engineAsBase+      npv option >>= near 1e-8 expected+      hm <- Model.hestonModel process+      analyticHestonEngine hm (IntegrationOrder 128) >>= setPricingEngine option+      hestonPrice <- npv option+      (classical, _) <- fixture 0.5+      classicalEngine <- analyticRoughHestonEngine classical 128 512 AdamsPredictorCorrector+      roughHestonPriceVanillaPayoff classicalEngine payoff (DatePoint maturity) >>= near 5e-4 hestonPrice++    it "supports all approximations, complex analytics and observer updates" $ Context.keepingSettingsGc $ do+      (model, spot) <- fixture 0.1+      engines <- mapM (analyticRoughHestonEngine model 128 512) [AdamsPredictorCorrector, Pade, Lifted 40]+      forM_ engines $ \engine -> do+        roughHestonCharacteristicFunction engine (0 :+ 0) 1 >>= \z -> magnitude (z - 1) `shouldSatisfy` (< 1e-10)+        phi <- roughHestonCharacteristicFunction engine (1.2 :+ (-0.5)) 1+        logPhi <- roughHestonLogCharacteristicFunction engine (1.2 :+ (-0.5)) 1+        magnitude (phi - exp logPhi) `shouldSatisfy` (< 1e-10)+        roughHestonRiccatiSolution engine (0 :+ 0) 1 >>= \z -> magnitude z `shouldSatisfy` (< 1e-10)+        p <- roughHestonPriceVanillaPayoff engine (PlainVanillaPayoff Call 100) (TimePoint 1)+        near 0.4 8.336634 p+        roughHestonNumberOfEvaluations engine >>= (`shouldSatisfy` (> 0))+      case engines of+        engine:_ -> do+          priceBefore <- roughHestonPriceVanillaPayoff engine (PlainVanillaPayoff Call 100) (TimePoint 1)+          _ <- setValue spot 110+          priceAfter <- roughHestonPriceVanillaPayoff engine (PlainVanillaPayoff Call 100) (TimePoint 1)+          priceAfter `shouldSatisfy` (> priceBefore)+          Model.setParams model [0.05, 0.4, 0.3, -0.6, 0.03, 0.2]+          Model.roughHestonTheta model `shouldReturn` 0.05+          Model.roughHestonHurst model `shouldReturn` 0.2+          changed <- roughHestonPriceVanillaPayoff engine (PlainVanillaPayoff Call 100) (TimePoint 1)+          changed `shouldSatisfy` (\p -> abs (p - priceAfter) > 1e-4)+        [] -> expectationFailure "missing approximation engines"++    it "honours Fourier integration controls and rejects invalid configurations" $ Context.keepingSettingsGc $ do+      (model, _) <- fixture 0.1+      engine <- analyticRoughHestonEngineWithIntegration model (FourierGaussLobatto 1e-8 1e-8 10000 False) 256 1e-25 (-0.5) AdamsPredictorCorrector+      roughHestonPriceVanillaPayoff engine (PlainVanillaPayoff Call 100) (TimePoint 1) >>= near 5e-4 8.336634+      analyticRoughHestonEngine model 128 0 AdamsPredictorCorrector `shouldThrow` anyException+      analyticRoughHestonEngine model 128 256 (Lifted 0) `shouldThrow` anyException+      analyticRoughHestonEngineWithIntegration model (FourierGaussLaguerre 128) 256 1e-25 0 Pade `shouldThrow` anyException++    it "calibrates Hurst and regenerates model state" $ Context.keepingSettingsGc $ do+      (model, _) <- fixture 0.12+      dc <- dayCounter Actual365FixedStandard+      r <- simpleQuote 0.03 >>= \q -> flatForward (ReferenceDate fixtureDate) q dc Continuous Annual+      q <- simpleQuote 0 >>= \v -> flatForward (ReferenceDate fixtureDate) v dc Continuous Annual+      spot <- simpleQuote 100+      cal <- calendar Null+      truth <- analyticRoughHestonEngine model 64 256 Pade+      helpers <- forM [3, 6, 12] $ \months -> do+        maturity <- advance cal fixtureDate (months, Months) Unadjusted False+        t <- timeFromReference r maturity+        df <- discount r (DatePoint maturity) False+        let fwd = 100 / df+        price <- roughHestonPriceVanillaPayoff truth (PlainVanillaPayoff Call 100) (DatePoint maturity)+        stddev <- blackImpliedStdDev Call 100 fwd price df 0 0.2 1e-10 100+        vol <- simpleQuote (stddev / sqrt t)+        Model.hestonModelHelper (fromIntegral months, Months) cal spot 100 vol r q Model.ImpliedVolError+      Model.setParams model [0.04, 0.3, 0.4, -0.7, 0.04, 0.2]+      engine <- analyticRoughHestonEngine model 64 256 Pade+      forM_ helpers $ \helper -> Model.setPricingEngine helper engine+      case helpers of+        h:hs -> Model.calibrate model ((h,1) :| map (,1) hs)+          (LevenbergMarquardt 1e-8 1e-8 1e-8 False) (EndCriteria 100 20 1e-8 1e-8 1e-8) Nothing [True,True,True,True,True,False]+        [] -> expectationFailure "missing calibration helpers"+      Model.roughHestonHurst model >>= near 1e-4 0.12
test/hspec/QuantLib/Spec/PricingEngine.hs view
@@ -1,9 +1,5 @@--- Coverage for 'QuantLib.PricingEngine' entry points ported from proven-correct--- @test/smoke/*.hs@ scripts that were never wired into @stack test --coverage@ (see--- CLAUDE.md: coverage is only measured over @test\/hspec\/**@ + @test\/example\/**@).--- Each block below preserves the source smoke script's own reasoning in its header--- comment; only the assertion style changed (SmokeCheck's checkClose/checkEq/checkWith,--- which 'error' on failure, become hspec 'shouldSatisfy'/'shouldBe').+{-# LANGUAGE LambdaCase #-}+-- Pricing-engine behavior and numerical reference checks. module QuantLib.Spec.PricingEngine (spec) where  import Control.Monad(forM, forM_, when)@@ -31,10 +27,10 @@ import QuantLib.Instrument.CapFloor(cap) import QuantLib.Instrument.Swap(varianceSwap, vanillaSwap, floatingLeg, SwapType(..)) import QuantLib.Process hiding(thetaAt)-import QuantLib.Model hiding(setPricingEngine, value, discount)+import QuantLib.Model hiding(setPricingEngine, value, discount, impliedVolatility) import QuantLib.Math(RngTrait(..), StatisticsTrait(..), PolynomialType(..), BinomialTree(..), FdmScheme(..), boxedRealMatrix, ComplexLogFormula(..)   ,SobolDirectionIntegers(..), realMatrixRows, realMatrixColumns, realMatrixData)-import QuantLib.Method(fdmBlackScholesMesher, fdmMesherComposite, fdmMesherLocations)+import QuantLib.Method(fdmBlackScholesMesher, fdmMesherComposite, fdmMesherLocations, fdmRollback) import QuantLib.PricingEngine hiding(alpha, delta, gamma, theta) import qualified QuantLib.PricingEngine as Calc @@ -56,6 +52,44 @@  spec :: Spec spec = do+  describe "custom payoff compatibility" $+    it "rejects non-striked payoffs in both FD vanilla engines" $ Context.keepingSettingsGc $ do+      let fixtureDate = 23 `october` 2025+      Context.setEvaluationDate (Just fixtureDate)+      dc <- dayCounter Actual365FixedStandard+      cal <- calendar TARGET+      s0 <- simpleQuote 100+      r <- simpleQuote 0.03+      q <- simpleQuote 0.01+      vol <- simpleQuote 0.2+      rTS <- flatForward (ReferenceDate fixtureDate) r dc Continuous Annual+      qTS <- flatForward (ReferenceDate fixtureDate) q dc Continuous Annual+      volTS <- blackConstantVol (CalendarReferenceDate fixtureDate) cal vol dc+      process <- blackScholesMertonProcess s0 qTS rTS volTS EulerDiscretization False+      hp <- hestonProcess rTS (Just qTS) s0 0.04 1.5 0.04 0.3 (-0.5) QuadraticExponentialMartingale+      hm <- hestonModel hp+      bs <- fdBlackScholesVanillaEngine process [] 10 20 0 Douglas False 0 CashDividendSpot+      hs <- fdHestonVanillaEngine hm [] 10 20 10 0 Hundsdorfer Nothing 1+      payoff <- withCustomPayoff "custom" "non-striked" (max 0 . subtract 100) pure+      forM_ [bs, hs] $ \engine -> do+        opt <- oneAssetOption payoff (European (EuropeanExercise (addDays 365 fixtureDate)))+        setPricingEngine opt engine+        npv opt `shouldThrow` (\case+          Context.CPlusPlusException message -> message == "finite-difference vanilla engine requires a striked payoff"+          _ -> False)++  describe "fdmRollback callbacks" $+    it "rejects a result whose length differs from its input instead of padding or truncating" $ do+      let grid = V.fromList [1, 2, 3, 4]+          zero :: (Double, Double) -> V.Vector Double -> V.Vector Double+          zero _ = V.map (const 0)+          roll op condition =+            fdmRollback 1 op (const zero) (\_ _ _ -> id) (Just condition) V.empty Douglas grid 1 0 1 0+      roll zero (const id) `shouldReturn` grid+      forM_ [(V.drop 1, 3), (V.take 2, 2), (const V.empty, 0), (flip V.snoc 99, 5)] $ \(f, n) -> do+        roll zero (const f) `shouldThrow` (== Context.CallbackResultLength 4 n)+        roll (const f) (const id) `shouldThrow` (== Context.CallbackResultLength 4 n)+   -- Leans on invariants that hold for any   -- correct implementation of the Black-76/Bachelier formula (value = discount*(forward*alpha   -- + x*beta), with alpha/beta's *derivatives* independent of Call-vs-Put) rather than@@ -236,12 +270,8 @@         bDn <- bachelierBlackFormula Call k fwd (sd - h) df         bd `shouldSatisfy` closePrec ((bUp - bDn) / (2 * h)) (1e-6 * max 1 (abs bd)) -    -- The pre-existing iterative solver, which had no coverage either. Its cheap closed-form-    -- sibling is the Brenner-Subrahmanyan\/Feinstein ATM formula extended by Corrado-Miller, so-    -- it is only accurate near the money: measured across this fixture it is within 0.005 vol-    -- over strikes 80..125 and degrades to ~0.18 at strike 300. The assertion is split-    -- accordingly rather than pinned to one invented tolerance -- in the wings it only has to-    -- stay a usable finite seed for the exact solver, which is all upstream uses it for.+    -- The closed-form approximation is accurate near the money; in the wings it only needs+    -- to remain a finite seed for the iterative solver.     it "blackImpliedStdDev inverts blackFormula, and blackImpliedStdDevApproximation is accurate\        \ near the money and a finite seed in the wings" $       forM_ strikes $ \k -> forM_ types $ \t -> do@@ -417,6 +447,19 @@         volAtAtm2 <- smileSectionVolatility volNormal forward         volAtAtm1 `shouldNotBe` volAtAtm2 +    it "minStrike/maxStrike bracket the strike range and vega (the Black-vol sensitivity of\+       \ the option price) is positive and linear in the discount factor" $+      Context.keepingSettingsGc $ do+        section <- sabrSmileSection expiry forward alpha_ beta_ nu rho_ shift ShiftedLognormal+        lo <- minStrike section+        hi <- maxStrike section+        lo `shouldSatisfy` (< forward)+        hi `shouldSatisfy` (> forward)+        vFull <- smileSectionVega section forward 1.0+        vHalf <- smileSectionVega section forward 0.5+        vFull `shouldSatisfy` (> 0)+        vHalf `shouldSatisfy` closePrec (vFull * 0.5) 1.0e-10+     it "SabrSmileSection/NoArbSabrSmileSection Date- and Time-based ctors agree, and NoArb\        \ differs from the plain SabrSmileSection" $       Context.keepingSettingsGc $ do@@ -588,6 +631,47 @@           z <- smileSectionOptionPrice zabr k Call 1.0           z `shouldSatisfy` closePrec c0 tol +  -- ZabrInterpolatedSmileSection has no upstream test-suite fixture of its own either -- same+  -- round-trip shape as SviInterpolatedSmileSection/NoArbSabrInterpolatedSmileSection above:+  -- generate vols at known ZABR parameters via the already-bound zabrSmileSection, feed them back+  -- in as quotes, and require calibration to reproduce them closely. Also exercises gamma (the+  -- one getter with no Sabr/NoArbSabr/Svi analogue) and the tag-carrying handle behind it (see+  -- ZabrInterpolatedSmileSectionHandle in cbits/qlTermStructureAux.h) surviving a full round trip.+  describe "ZabrInterpolatedSmileSection" $+    it "calibrates back to the generating ZABR parameters, including gamma, through the\+       \ AsSmileSection upcast" $+      Context.keepingSettingsGc $ do+        let forward = 0.03; alpha_ = 0.08; beta_ = 0.70; nu = 0.20; rho_ = -0.30; gamma_ = 0.85+            strikes = [0.01, 0.02, 0.03, 0.04, 0.05, 0.06]+        refDate <- today+        Context.setEvaluationDate (Just refDate)+        optionDate <- addPeriod refDate (round (5.0 * 365 :: Double) :: Int, Days)+        act365 <- dayCounter Actual365FixedStandard+        generating <- zabrSmileSection ZabrShortMaturityLognormal (RateAtDate optionDate act365)+          forward alpha_ beta_ nu rho_ gamma_ [] 5+        refVols <- mapM (smileSectionVolatility generating) strikes+        atmVol <- smileSectionVolatility generating forward++        forwardQuote <- simpleQuote forward+        atmVolQ <- simpleQuote atmVol+        refVolQuotes <- mapM simpleQuote refVols+        interp <- zabrInterpolatedSmileSection ZabrShortMaturityLognormal optionDate forwardQuote+          (fromList $ zip strikes refVolQuotes) False atmVolQ alpha_ beta_ nu rho_ gamma_+          False False False False False True Nothing Nothing act365+        rms <- zabrInterpolatedRmsError interp+        maxErr <- zabrInterpolatedMaxError interp+        rms `shouldSatisfy` (< 1e-6)+        maxErr `shouldSatisfy` (< 1e-6)+        calibratedGamma <- zabrInterpolatedGamma interp+        calibratedGamma `shouldSatisfy` closePrec gamma_ 1e-4++        -- the upcast escape hatch: volatility through the generic SmileSection interface (only+        -- reachable this way now that the concrete type has no smileSectionVolatility of its own).+        genericSection <- zabrInterpolatedAsSmileSection interp+        forM_ (zip strikes refVols) $ \(k, expected) -> do+          got <- smileSectionVolatility genericSection k+          got `shouldSatisfy` closePrec expected 1e-6+   -- Verify that the StatisticsTrait axis reaches each Monte Carlo engine's   -- second template parameter. Nothing in the type system catches a StatisticsTrait value   -- being silently ignored (a copy-paste slip could alias all four cases to the same@@ -1392,6 +1476,48 @@           v <- npv optInst           v `shouldSatisfy` closePrec expected 1.0e-4 +  -- Ported from hybridhestonhullwhiteprocess.cpp's testBsmHullWhiteEngine: the engine's price+  -- maps to a flat Black vol under which the plain analytic engine reproduces price and greeks.+  describe "AnalyticBSMHullWhiteEngine" $+    it "reproduces testBsmHullWhiteEngine's implied volatilities across equity/short-rate correlations" $+      Context.keepingSettingsGc $ do+        let today' = 15 `january` 2024+            maturity = addGregorianYearsClip 20 today'+            tol = 1.0e-8+        Context.setEvaluationDate (Just today')+        dc <- dayCounter Actual365FixedStandard+        cal <- calendar Null+        spotQ <- simpleQuote 100+        qTS <- simpleQuote 0.04 >>= \q -> flatForward (ReferenceDate today') q dc Continuous Annual+        rTS <- simpleQuote 0.0525 >>= \q -> flatForward (ReferenceDate today') q dc Continuous Annual+        let flatVolProcess v = do+              volTS <- simpleQuote v >>= \q -> blackConstantVol (CalendarReferenceDate today') cal q dc+              blackScholesMertonProcess spotQ qTS rTS volTS EulerDiscretization False+        process <- flatVolProcess 0.25+        hw <- hullWhite rTS 0.00883 0.00526+        qDisc <- discount qTS (DatePoint maturity) False+        rDisc <- discount rTS (DatePoint maturity) False+        let payoff = PlainVanilla (PlainVanillaPayoff Call (100 * qDisc / rDisc))+            exercise = European (EuropeanExercise maturity)+        forM_ [ (-0.75, 0.217064577), (-0.25, 0.243995801), (0.0, 0.256402830)+              , (0.25, 0.268236596), (0.75, 0.290461343) ] $ \(corr, expectedVol) -> do+          option <- vanillaOption payoff exercise+          analyticBsmHullWhiteEngine corr process hw >>= setPricingEngine option+          optionNpv <- npv option+          bsProcess <- flatVolProcess expectedVol+          comp <- vanillaOption payoff exercise+          analyticEuropeanEngine bsProcess Nothing >>= setPricingEngine comp+          impliedVolatility comp optionNpv bsProcess [] 1.0e-10 100 1.0e-7 4.0+            >>= (`shouldSatisfy` closePrec expectedVol tol)+          npv comp >>= (`shouldSatisfy` closePrec optionNpv (tol * optionNpv))+          option' <- asOneAssetOption option+          comp' <- asOneAssetOption comp+          optionDelta <- delta option'+          delta comp' >>= (`shouldSatisfy` closePrec optionDelta tol)+          forM_ [gamma, theta] $ \greek -> do+            expected <- greek option'+            greek comp' >>= (`shouldSatisfy` closePrec expected (tol * optionNpv))+   -- Ported from quantooption.cpp's testFDMQuantoHelper, testPDEOptionValues, and   -- testAmericanQuantoOption: the FDM-side building blocks (FdmQuantoHelper's own quanto drift   -- adjustment, and the FdmBlackScholesMesher grid it feeds into) and the FD-vs-analytic /@@ -1662,7 +1788,8 @@         capletExpiries <- CF.toCouponLeg floatLeg >>= CF.couponAccrualStartDates         capletVolQ <- simpleQuote 0.20         capletVol <- constantOptionletVolatility (CalendarSettlementDays 0) cal ModifiedFollowing capletVolQ dc365 ShiftedLognormal 0.0-        markovCaplet <- markovFunctionalCaplet ts 0.01 0.01 [] capletVol (fromList capletExpiries) euribor6m 16+        capletVolHandle <- relinkableOptionletVolatilityStructure (Just capletVol)+        markovCaplet <- markovFunctionalCaplet ts 0.01 0.01 [] capletVolHandle (fromList capletExpiries) euribor6m 16         markovCapletModel <- asGaussian1dModel markovCaplet         blackEngine <- blackCapFloorEngineFromVolatilityStructure ts capletVol         setPricingEngine capfl blackEngine@@ -1957,12 +2084,10 @@          p1 <- blackProcess spot1 rTS volTS EulerDiscretization False         p2 <- blackProcess spot2 rTS volTS EulerDiscretization False-        gp1 <- asGeneralizedBlackScholesProcess p1-        gp2 <- asGeneralizedBlackScholesProcess p2          opt <- basketOption (Spread (plainVanillaPayoff (PlainVanillaPayoff Call strike))) (European (EuropeanExercise maturity)) -        fd2d <- fd2dBlackScholesVanillaEngine gp1 gp2 rho_ 100 100 50 0 Hundsdorfer False (-1.0e10)+        fd2d <- fd2dBlackScholesVanillaEngine p1 p2 rho_ 100 100 50 0 Hundsdorfer False (-1.0e10)         setPricingEngine opt fd2d         calculatedDelta <- delta opt         calculatedGamma <- gamma opt
test/hspec/QuantLib/Spec/Process.hs view
@@ -17,11 +17,8 @@ -- "G2ForwardProcess" and "HybridHestonHullWhiteProcess" describe blocks below. 'QuantLib.Model' -- also binds 'G2'\'s @dynamics()@ (as 'g2Dynamics', returning the new 'ShortRateDynamics' type) -- and its @shortRate@ method, closing the last holdout -- all 8 of upstream's g2process.cpp--- cases are now ported. Of test-suite/hybridhestonhullwhiteprocess.cpp's 10 cases,--- 'testAnalyticHestonHullWhitePricing' is ported here (an MC-vs-analytic cross-check with the--- short-rate leg decorrelated) and 'testZeroBondPricing' as--- "QuantLib.Example.HestonHullWhiteMC"; the rest still need bindings this module doesn't have--- (a bound 'FdmHestonHullWhiteVanillaEngine', ...) and are left as a further follow-up.+-- cases are now ported. 'testH1HWPricingEngine' checks the H1-HW approximation here;+-- 'testAnalyticHestonHullWhitePricing' and 'testZeroBondPricing' have separate MC and example coverage. -- 'QuantLib.Process.numeraire' and the Hull-White process getters -- ('alpha'\/'bFunction'\/'mFunction') are -- checked here against closed forms, and 'stdDeviation'\/'covariance'\/'apply'\/'evolve'@@ -32,18 +29,20 @@ import Test.Hspec import qualified Data.Vector.Storable as V import Data.Time.Calendar(addDays)+import Data.List(isInfixOf) import Data.List.NonEmpty(fromList)+import Control.Exception(try)  import qualified QuantLib.Context as Context-import QuantLib.Time.Date(today, addPeriod, september)+import QuantLib.Time.Date(today, addPeriod, january, july, september) import QuantLib.Time.Schedule(dayCounter, yearFraction, DayCounterConstructor(..), Frequency(..), TimeUnit(..)) import QuantLib.InterestRate(Compounding(..), VolatilityType(..), rate) import QuantLib.Quote(simpleQuote, setValue) import QuantLib.TermStructure.Yield(Reference(..), TermPoint(..), flatForward, forwardRateBetweenTimes, discount, YieldTermStructure, interpolatedZeroCurve) import QuantLib.Instrument(npv, setPricingEngine)-import QuantLib.Instrument.Option(europeanOption, StrikedPayoff(PlainVanilla), PlainVanillaPayoff(..), OptionType(..), Exercise(European), EuropeanExercise(..))+import QuantLib.Instrument.Option(europeanOption, impliedVolatility, StrikedPayoff(PlainVanilla), PlainVanillaPayoff(..), OptionType(..), Exercise(European), EuropeanExercise(..)) import qualified QuantLib.Process as Process-import QuantLib.Process(hestonProcess, pdf, batesProcess, gjrGarchProcess, HestonProcessDiscretization(..), GJRGARCHProcessDiscretization(..)+import QuantLib.Process(blackScholesMertonProcess, hestonProcess, pdf, batesProcess, gjrGarchProcess, HestonProcessDiscretization(..), GJRGARCHProcessDiscretization(..), ProcessDiscretization(EulerDiscretization)  , g2Process, g2ForwardProcess, phi, setForwardMeasureTime, factors, drift, diffusion, expectation, initialValues, hullWhiteProcess, hullWhiteForwardProcess, hybridHestonHullWhiteProcess, HybridHestonHullWhiteProcessDiscretization(..)  , liborForwardModelProcess, cashFlows  , accrualTimes@@ -54,17 +53,18 @@ import QuantLib.Model(hullWhite, g2, g2Dynamics, shortRate  , hestonModel, batesModel, gjrGarchModel  , liborForwardModel, liborForwardModelS0, asAffineModel, lfmHullWhiteParameterization, lfmHullWhiteCovariance, setCovarParam, LmVolatilityModel(..), LmCorrelationModel(..)- , discountBond)-import QuantLib.PricingEngine(analyticHestonHullWhiteEngine, mcHestonHullWhiteEngine- , analyticHestonEngine, IntegrationControl(..), batesEngine, analyticGjrGarchEngine, mcEuropeanGjrGarchEngine, blackFormula, analyticCapFloorEngine)-import QuantLib.Method(pathGenerator, next, asset)-import QuantLib.Math(RngTrait(..), StatisticsTrait(..), timeGrid, Interpolation(..), boxedRealMatrix, realMatrixFromVector, matrixRows, matrixColumns, matrixData, realMatrixData)-import Control.Monad(replicateM, zipWithM_, foldM_)+ , discountBond, setParams)+import qualified QuantLib.Model as Model+import QuantLib.PricingEngine(analyticH1HwEngine, H1HwMean(..), analyticHestonHullWhiteEngine, mcHestonHullWhiteEngine, fdHestonHullWhiteVanillaEngine+ , analyticHestonEngine, analyticBsmHullWhiteEngine, IntegrationControl(..), batesEngine, analyticGjrGarchEngine, mcEuropeanGjrGarchEngine, blackFormula, analyticCapFloorEngine)+import QuantLib.Method(pathGenerator, next, asset, gaussianRsg, nextSequence, pathGeneratorSequence)+import QuantLib.Math(EndCriteria(..), OptimizationMethod(..), FdmScheme(Hundsdorfer), RngTrait(..), StatisticsTrait(..), timeGrid, Interpolation(..), boxedRealMatrix, realMatrixFromVector, matrixRows, matrixColumns, matrixData, realMatrixData)+import Control.Monad(replicateM, forM_, zipWithM_, foldM_, unless, (>=>)) import QuantLib.Instrument.CapFloor(cap) import QuantLib.Time.Calendar(adjust, advance, calendar, BusinessDayConvention(..), CalendarConstructor(..)) import QuantLib.Index.InterestRate(iborIndex, IborConstructor(..)) import qualified QuantLib.Index.InterestRate as Ibor(fixingDays)-import qualified QuantLib.TermStructure.Volatility as Vol(capletVarianceCurve)+import qualified QuantLib.TermStructure.Volatility as Vol(CalendarReference(..), capletVarianceCurve, blackConstantVol)  import QuantLib.Spec.Helpers(closePrec) @@ -126,13 +126,8 @@             r = 0.03             q = 0.01             v0 = 0.04-            -- t = 0.5 lands HestonProcess::pdf's Cornish-Fisher upper-bound-            -- estimate (ql/processes/hestonprocess.cpp: cornishFisherEps, a 4th-order finite-            -- difference of the CIR characteristic function divided by d^4 = 1e-8) in a-            -- numerically fragile spot: reproduced in raw C++ against the installed QuantLib, it-            -- returns NaN there on Linux/gcc and Windows but a plausible value on macOS/clang ---            -- an upstream platform-sensitivity, not a hasquant binding bug. t = 1.0 sits on a-            -- stable plateau confirmed by a parameter sweep across both platforms.+            -- t = 0.5 makes QuantLib's HestonProcess::pdf numerically unstable on some+            -- platforms; t = 1.0 is stable across them.             t = 1.0         rQ <- simpleQuote r         qQ <- simpleQuote q@@ -363,6 +358,14 @@         let horizon = 5.0; steps = 50 :: Word; nPaths = 4000 :: Int         tg <- timeGrid horizon steps         pg <- pathGenerator PseudoRandom process tg 42 (nf * steps) False+        pathGeneratorSequence pg `shouldThrow` anyException+        source <- gaussianRsg PseudoRandom (nf * steps) 42+        tracePg <- pathGenerator PseudoRandom process tg 42 (nf * steps) False+        _ <- next tracePg+        firstDraw <- pathGeneratorSequence tracePg+        expectedDraw <- nextSequence source+        firstDraw `shouldBe` expectedDraw+        pathGeneratorSequence tracePg `shouldReturn` firstDraw         paths <- replicateM nPaths (next pg >>= \sp -> mapM (fmap V.toList . asset sp) [0, 1])         let sumR = foldr1 (zipWith (+)) [zipWith (+) r0 r1 | [r0, r1] <- paths]             meanR = map (/ fromIntegral nPaths) sumR@@ -622,7 +625,244 @@       kEvolved <- evolve klugeProcess 0.0 kx0 0.1 (replicate (fromIntegral kf) 0.1)       length kEvolved `shouldBe` length kx0 -  describe "HybridHestonHullWhiteProcess (AnalyticHestonHullWhiteEngine vs. MCHestonHullWhiteEngine)" $ do+  describe "Heston/Hull-White pricing engines" $ do+    -- Ported from test-suite/hybridhestonhullwhiteprocess.cpp::testH1HWPricingEngine.+    it "H1-HW reproduces the published implied-volatility fixture" $+      Context.keepingSettingsGc $ do+        let refDate = 15 `july` 2012+            exerciseDate = 13 `july` 2022+            expected =+              [ (0.3, [0.267503, 0.235742, 0.228223, 0.223461, 0.217855])+              , (0.6, [0.263626, 0.211625, 0.199907, 0.193502, 0.190025])+              ]+            strikes = [40.0, 80.0, 100.0, 120.0, 180.0]+        Context.setEvaluationDate (Just refDate)+        dc <- dayCounter Actual365FixedStandard+        rQ <- simpleQuote 0.02+        rTS <- flatForward (ReferenceDate refDate) rQ dc Continuous Annual+        qQ <- simpleQuote 0.0+        qTS <- flatForward (ReferenceDate refDate) qQ dc Continuous Annual+        s0 <- simpleQuote 100.0+        hullWhiteModel <- hullWhite rTS 0.01 0.01+        volQ <- simpleQuote 0.20+        nullCal <- calendar Null+        volTS <- Vol.blackConstantVol (Vol.CalendarReferenceDate refDate) nullCal volQ dc+        bsm <- blackScholesMertonProcess s0 qTS rTS volTS EulerDiscretization False+        forM_ expected $ \(sigma, expectedVols) -> do+          heston <- hestonProcess rTS (Just qTS) s0 0.05 0.3 0.05 sigma (-0.30) QuadraticExponentialMartingale+          model <- hestonModel heston+          engine <- analyticH1HwEngine model hullWhiteModel 0.6 (IntegrationOrder 144) FittedExponentialMean+          forM_ (zip strikes expectedVols) $ \(strike, expectedVol) -> do+            option <- europeanOption (PlainVanilla (PlainVanillaPayoff Call strike)) (European (EuropeanExercise exerciseDate))+            setPricingEngine option engine+            value <- npv option+            impliedVolatility option value bsm [] 1.0e-8 100 1.0e-4 10.0+              >>= (`shouldSatisfy` closePrec expectedVol 1.0e-4)++        heston <- hestonProcess rTS (Just qTS) s0 0.05 0.3 0.05 0.3 (-0.30) QuadraticExponentialMartingale+        model <- hestonModel heston+        toleranceEngine <- analyticH1HwEngine model hullWhiteModel 0.6 (IntegrationTolerance 1.0e-8 1000) FittedExponentialMean+        option <- europeanOption (PlainVanilla (PlainVanillaPayoff Call 100.0)) (European (EuropeanExercise exerciseDate))+        setPricingEngine option toleranceEngine+        value <- npv option+        impliedVolatility option value bsm [] 1.0e-8 100 1.0e-4 10.0+          >>= (`shouldSatisfy` closePrec 0.228223 1.0e-4)++        -- where QuantLib's fitted mean holds, the exact one moves the published vols by less than+        -- half a point; against finite differences neither is consistently closer+        exact <- analyticH1HwEngine model hullWhiteModel 0.6 (IntegrationOrder 144) (ExactMean 64)+        forM_ (zip strikes [0.267503, 0.235742, 0.228223, 0.223461, 0.217855]) $ \(strike, publishedVol) -> do+          o <- europeanOption (PlainVanilla (PlainVanillaPayoff Call strike)) (European (EuropeanExercise exerciseDate))+          setPricingEngine o exact+          v <- npv o+          impliedVolatility o v bsm [] 1.0e-8 100 1.0e-4 10.0 >>= \vol -> abs (vol - publishedVol) `shouldSatisfy` (< 5.0e-3)++    -- Nonmonotone expectations can invalidate the fitted mean. Exact remains finite in the sweep+    -- and reduces to analytic Heston-Hull-White when the equity/rate cross term vanishes.+    describe "H1-HW with the exact mean" $ do+      let refDate = 2 `january` 2026+          sweep = [ (0.04, 1.5, 0.05, 0.4, -0.6), (0.06, 1.0, 0.03, 0.6, -0.3), (0.04, 1.0, 0.05, 0.4, -0.6)+                  , (0.05, 0.3, 0.05, 0.5, -0.3), (0.04, 3.0, 0.04, 0.2, -0.5), (1.0e-4, 1.5, 0.05, 0.4, -0.6) ]+          options = [(d, k) | d <- [182, 365, 730], k <- [90, 100, 110 :: Double]]+          option (d, k) = europeanOption (PlainVanilla (PlainVanillaPayoff (if k < 100 then Put else Call) k)) (European (EuropeanExercise (addDays d refDate)))+          market k' = Context.keepingSettingsGc $ do+            Context.setEvaluationDate (Just refDate)+            dc <- dayCounter Actual365FixedStandard+            rTS <- simpleQuote 0.02 >>= \q -> flatForward (ReferenceDate refDate) q dc Continuous Annual+            qTS <- simpleQuote 0.0 >>= \q -> flatForward (ReferenceDate refDate) q dc Continuous Annual+            s0 <- simpleQuote 100.0+            hw <- hullWhite rTS 0.05 0.03+            hwp <- hullWhiteProcess rTS 0.05 0.03+            let modelOf (v0, kappa, theta, sigma, rho) = hestonProcess rTS (Just qTS) s0 v0 kappa theta sigma rho QuadraticExponentialMartingale >>= hestonModel+            k' modelOf hw hwp+          finite x = not (isNaN x || isInfinite x)+          fittedFailure :: IntegrationControl -> IO Double -> Expectation+          fittedFailure control action = do+            result <- try action+            case result of+              Right x -> x `shouldSatisfy` isNaN+              Left (Context.CPlusPlusException message) -> case control of+                -- Legacy adaptive integration cannot subdivide an interval with a NaN integrand.+                IntegrationTolerance _ _ | message == "Interval contains no more machine number" -> pure ()+                _ -> do+                  message `shouldSatisfy` isInfixOf "fitted approximation of E[sqrt(v)]"+                  message `shouldSatisfy` isInfixOf "VarianceRootMean::Exact"+              Left other -> expectationFailure $ "unexpected fitted-mean exception: " ++ show other+          limitMarket checks = Context.keepingSettingsGc $ do+            Context.setEvaluationDate (Just refDate)+            dc <- dayCounter Actual365FixedStandard+            rTS <- simpleQuote 0.02 >>= \q -> flatForward (ReferenceDate refDate) q dc Continuous Annual+            qTS <- simpleQuote 0.0 >>= \q -> flatForward (ReferenceDate refDate) q dc Continuous Annual+            s0 <- simpleQuote 100.0+            nullCal <- calendar Null+            volTS <- simpleQuote 0.2 >>= \q -> Vol.blackConstantVol (Vol.CalendarReferenceDate refDate) nullCal q dc+            bsm <- blackScholesMertonProcess s0 qTS rTS volTS EulerDiscretization False+            let check kappa sigma a = do+                  hw <- hullWhite rTS a 0.03+                  m <- hestonProcess rTS (Just qTS) s0 0.04 kappa 0.04 sigma (-0.6) QuadraticExponentialMartingale >>= hestonModel+                  o <- option (730, 100)+                  reference <- analyticBsmHullWhiteEngine 0.6 bsm hw+                  setPricingEngine o reference+                  expected <- npv o+                  forM_ [IntegrationOrder 144, IntegrationTolerance 1.0e-6 10000] $ \control -> do+                    exact <- analyticH1HwEngine m hw 0.6 control (ExactMean 64)+                    setPricingEngine o exact+                    actual <- npv o+                    actual `shouldSatisfy` finite+                    actual `shouldSatisfy` closePrec expected (1.0e-6 * abs expected)+            checks check+      it "approaches BSM-Hull-White at small variance volatility" $ limitMarket $ \check ->+        forM_ [1.0e-5, 1.0e-6, 1.0e-7, 1.0e-8] $ \sigma -> check 100 sigma 0.05+      it "preserves the small Hull-White mean-reversion limit" $ limitMarket $ \check ->+        forM_ [1.0e-8, 1.0e-12, 1.0e-18] $ \a -> check 1.5 1.0e-5 a+      it "refreshes its cached integral when either model changes" $ market $ \modelOf hw _ -> do+        m <- modelOf (0.04, 1.5, 0.05, 0.4, -0.6)+        reused <- analyticH1HwEngine m hw 0.6 (IntegrationOrder 144) (ExactMean 64)+        o <- option (730, 100)+        setPricingEngine o reused+        initial <- npv o+        let check previous = do+              actual <- npv o+              actual `shouldSatisfy` finite+              abs (actual - previous) `shouldSatisfy` (> 1.0e-6)+              fresh <- analyticH1HwEngine m hw 0.6 (IntegrationOrder 144) (ExactMean 64)+              setPricingEngine o fresh+              expected <- npv o+              actual `shouldSatisfy` closePrec expected 1.0e-12+              setPricingEngine o reused+              pure actual+        setParams m [0.06, 1.2, 0.3, -0.5, 0.035]+        changed <- check initial+        setParams hw [0.08, 0.025]+        _ <- check changed+        pure ()+      it "handles nonmonotone fitted-mean failures" $ market $ \modelOf hw _ -> do+        fixture <- modelOf (0.04, 1.5, 0.05, 0.4, -0.6)+        forM_ [IntegrationOrder 144, IntegrationTolerance 1.0e-8 1000] $ \control -> do+          fitted <- analyticH1HwEngine fixture hw 0.6 control FittedExponentialMean+          forM_ options $ \o' -> do+            o <- option o'+            setPricingEngine o fitted+            fittedFailure control (npv o)+      it "handles a zero fitted decay rate in both constructors" $ market $ \modelOf hw _ -> do+        m <- modelOf (0.02568918717646957, 1.0, 0.04, 0.3, -0.6)+        o <- option (730, 100)+        forM_ [IntegrationOrder 144, IntegrationTolerance 1.0e-6 10000] $ \control -> do+          fitted <- analyticH1HwEngine m hw 0.6 control FittedExponentialMean+          setPricingEngine o fitted+          fittedFailure control (npv o)+          exact <- analyticH1HwEngine m hw 0.6 control (ExactMean 64)+          setPricingEngine o exact+          npv o >>= (`shouldSatisfy` finite)+      it "produces finite Exact prices across the variance-parameter sweep" $ market $ \modelOf hw _ ->+        forM_ sweep $ \p -> do+          m <- modelOf p+          exact <- analyticH1HwEngine m hw 0.6 (IntegrationOrder 144) (ExactMean 64)+          tolerant <- analyticH1HwEngine m hw 0.6 (IntegrationTolerance 1.0e-8 1000) (ExactMean 64)+          forM_ options $ \o' -> do+            o <- option o'+            setPricingEngine o exact+            x <- npv o+            x `shouldSatisfy` finite+            setPricingEngine o tolerant+            npv o >>= (`shouldSatisfy` closePrec x 1.0e-6)+      it "converges as the exact-mean quadrature order increases" $ market $ \modelOf hw _ -> do+        let fixtures = [ ((0.04, 1.5, 0.05, 0.4, -0.6), 730, 1.0e-6)+                       , ((1.0e-4, 1.5, 0.05, 0.4, -0.6), 730, 1.0e-6)+                       , ((0.05, 0.3, 0.05, 0.6, -0.6), 3650, 1.0e-6)+                       , ((1.0e-4, 100.0, 0.05, 0.4, -0.6), 10950, 5.0e-6) ]+        forM_ fixtures $ \(parameters, days, tolerance) -> do+          m <- modelOf parameters+          o <- option (days, 100)+          let price order = do+                engine <- analyticH1HwEngine m hw 0.6 (IntegrationOrder 144) (ExactMean order)+                setPricingEngine o engine+                npv o+          reference <- price 512+          reference `shouldSatisfy` finite+          reference `shouldSatisfy` (> 0)+          forM_ [(64, tolerance), (128, tolerance), (256, 1.0e-7)] $ \(order, relativeTolerance) -> do+            actual <- price order+            unless (finite actual && closePrec reference (relativeTolerance * abs reference) actual) $+              expectationFailure $ "exact-mean quadrature has not converged: parameters=" ++ show parameters+                ++ ", days=" ++ show days ++ ", orders=" ++ show (order, 512 :: Word)+                ++ ", prices=" ++ show (actual, reference) ++ ", relative tolerance=" ++ show relativeTolerance+      it "uncorrelated, is the analytic Heston-Hull-White price" $ market $ \modelOf hw _ -> forM_ sweep $ \p -> do+        m <- modelOf p+        exact <- analyticH1HwEngine m hw 0.0 (IntegrationOrder 144) (ExactMean 64)+        analytic <- analyticHestonHullWhiteEngine m hw (IntegrationOrder 144)+        forM_ options $ \o' -> do+          o <- option o'+          setPricingEngine o analytic+          a <- npv o+          setPricingEngine o exact+          npv o >>= (`shouldSatisfy` closePrec a 1.0e-12)+      -- the H1-HW approximation, measured against finite differences: at most 0.92% on these options+      it "is within 1.5% of the finite-difference Heston-Hull-White price (LONG)" $ market $ \modelOf hw hwp -> do+        m <- modelOf (0.04, 1.5, 0.05, 0.4, -0.6)+        exact <- analyticH1HwEngine m hw 0.6 (IntegrationOrder 144) (ExactMean 64)+        fd <- fdHestonHullWhiteVanillaEngine m hwp [] 0.6 100 200 60 30 0 True Hundsdorfer+        forM_ [(182, 90), (365, 100), (730, 110)] $ \o' -> do+          o <- option o'+          setPricingEngine o fd+          y <- npv o+          setPricingEngine o exact+          x <- npv o+          abs (x - y) / y `shouldSatisfy` (< 1.5e-2)+      it "refuses a negative equity-rate correlation" $ market $ \modelOf hw _ -> do+        m <- modelOf (0.04, 1.5, 0.05, 0.4, -0.6)+        forM_ [IntegrationOrder 144, IntegrationTolerance 1.0e-8 1000] $ \control ->+          forM_ [FittedExponentialMean, ExactMean 64] $ \mean ->+            analyticH1HwEngine m hw (-0.1) control mean `shouldThrow` anyException+      -- Quotes generated where the fitted mean is NaN; calibration from elsewhere recovers the model.+      it "calibrates a Heston model back to its own exact-mean H1-HW prices" $ Context.keepingSettingsGc $ do+        Context.setEvaluationDate (Just refDate)+        dc <- dayCounter Actual365FixedStandard+        rTS <- simpleQuote 0.02 >>= \q -> flatForward (ReferenceDate refDate) q dc Continuous Annual+        qTS <- simpleQuote 0.0 >>= \q -> flatForward (ReferenceDate refDate) q dc Continuous Annual+        s0 <- simpleQuote 100.0+        nullCal <- calendar Null+        hw <- hullWhite rTS 0.05 0.03+        let modelOf (v0, kappa, theta, sigma, rho) = hestonProcess rTS (Just qTS) s0 v0 kappa theta sigma rho QuadraticExponentialMartingale >>= hestonModel+            truth = [0.05, 1.5, 0.4, -0.6, 0.04]+        truthModel <- modelOf (0.04, 1.5, 0.05, 0.4, -0.6)+        truthEngine <- analyticH1HwEngine truthModel hw 0.6 (IntegrationOrder 144) (ExactMean 64)+        helpers <- sequence+          [ do vol <- simpleQuote 0.2+               helper <- Model.hestonModelHelper (months, Months) nullCal s0 strike vol rTS qTS Model.ImpliedVolError+               Model.setPricingEngine helper truthEngine+               price <- Model.modelValue helper+               _ <- Model.impliedVolatility helper price 1.0e-12 1000 0.01 2.0 >>= setValue vol+               pure helper+          | months <- [6, 12, 24], strike <- [90, 100, 110] ]+        fitted <- modelOf (0.06, 1.0, 0.04, 0.3, -0.3)+        fitEngine <- analyticH1HwEngine fitted hw 0.6 (IntegrationOrder 144) (ExactMean 64)+        forM_ helpers (`Model.setPricingEngine` fitEngine)+        Model.calibrate fitted (fromList (map (, 1) helpers)) (LevenbergMarquardt 1.0e-8 1.0e-8 1.0e-8 False)+          (EndCriteria 400 40 1.0e-8 1.0e-8 1.0e-8) Nothing []+        Model.params fitted >>= zipWithM_ (\expected actual -> actual `shouldSatisfy` closePrec expected (1.0e-3 * abs expected)) truth+        forM_ helpers (Model.calibrationError >=> (`shouldSatisfy` ((< 1.0e-6) . abs)))+     -- ported from test-suite/hybridhestonhullwhiteprocess.cpp::testAnalyticHestonHullWhitePricing:     -- with the equity/short-rate correlation set to 0, an MC price on the joint     -- Heston/Hull-White process must reproduce the semi-analytic AnalyticHestonHullWhiteEngine
test/hspec/QuantLib/Spec/TermStructure.hs view
@@ -1,7 +1,9 @@-{-# LANGUAGE ScopedTypeVariables, OverloadedLists #-}+{-# LANGUAGE ScopedTypeVariables, OverloadedLists, LambdaCase #-} module QuantLib.Spec.TermStructure (spec) where -import Control.Monad(replicateM, forM_)+import Control.Exception(throwIO, IOException)+import Data.IORef+import Control.Monad(replicateM, forM_, when, zipWithM, (>=>))  import Test.Hspec hiding(before, after) import Test.Hspec.QuickCheck(prop)@@ -10,6 +12,7 @@  import Data.Time.Calendar import Data.Maybe(catMaybes)+import Data.List(isInfixOf, nub) import Data.List.NonEmpty(NonEmpty, fromList) import qualified Data.Vector.Storable as V @@ -21,8 +24,10 @@ import qualified QuantLib.Quote as Quote import QuantLib.TermStructure.Yield import QuantLib.TermStructure hiding(maxDate)+import qualified QuantLib.TermStructure as TS import QuantLib.Math import QuantLib.Index(addFixing)+import qualified QuantLib.Index as Index(name) import QuantLib.Index.InterestRate(iborIndex, IborConstructor(..), overnightIborIndex, OvernightIborIndexType(Sofr), liborSwapIndex, LiborSwapIndexType(EurLiborSwapIsdaFixA)) import QuantLib.Model(hullWhite, extendedCoxIngersollRoss, discountBond, asAffineModel, hestonModel, params) import QuantLib.Currency(currency, Ccy(..))@@ -38,10 +43,103 @@ import qualified QuantLib.TermStructure.Volatility as Vol import QuantLib.PricingEngine(discountingSwapEngine, analyticEuropeanEngine, blackSwaptionEngineFromVolatilityStructure, blackCapFloorEngineFromVolatilityStructure, bachelierSwaptionEngineFromVolatilityStructure, bachelierCapFloorEngineFromVolatilityStructure, bjerksundStenslandApproximationEngine, analyticHestonEngine, IntegrationControl(..), fdHestonVanillaEngine) -import QuantLib.Spec.Helpers(areClose, closePrec)+import QuantLib.Spec.Helpers(areClose, closePrec, quantLibAtMost143, unsupportedQuantLib144)  spec :: Spec spec = do+    describe "QuantLib 1.44 curves and helpers" $ do+      it "moves the implied reference date and preserves discount ratios" $ Context.keepingSettingsGc $ do+        let today' = fromGregorian 2024 1 2+        Context.setEvaluationDate (Just today')+        cal <- calendar TARGET+        dc <- dayCounter Actual365FixedStandard+        q <- Quote.simpleQuote 0.03+        base <- flatForward (ReferenceDate today') q dc IR.Continuous Annual+        if quantLibAtMost143 then+          impliedTermStructureMoving base 2 cal `shouldThrow` unsupportedQuantLib144 "impliedTermStructureMoving"+        else do+          moved <- impliedTermStructureMoving base 2 cal+          ref <- advance cal today' (2, Days) Following False+          TS.referenceDate moved `shouldReturn` ref+          let maturity = addGregorianYearsClip 1 ref+          df <- discount base (DatePoint maturity) False+          refDf <- discount base (DatePoint ref) False+          discount moved (DatePoint maturity) False >>= (`shouldSatisfy` closePrec (df/refDf) 1e-10)+          Context.setEvaluationDate (Just (addDays 1 today'))+          next <- advance cal (addDays 1 today') (2, Days) Following False+          TS.referenceDate moved `shouldReturn` next++      it "reprices overnight basis and funding helpers" $ Context.keepingSettingsGc $ do+        let today' = fromGregorian 2024 1 2+        Context.setEvaluationDate (Just today')+        cal <- calendar TARGET+        dc <- dayCounter (Actual360 False)+        q <- Quote.simpleQuote 0.03+        basis <- Quote.simpleQuote 0.001+        base <- flatForward (ReferenceDate today') q dc IR.Continuous Annual+        on <- overnightIborIndex Sofr (Just base)+        other <- overnightIborIndex Sofr Nothing+        let basisHelper = overnightOvernightBasisSwapRateHelper basis (1, Years) 2 cal ModifiedFollowing False+              on other (Just base) False 2 Quarterly AveragingCompound AveragingCompound False Backward+            funding terms = overnightIndexedFundingRateHelper terms basis cal ModifiedFollowing False on+              (3, Months) dc 2 False Backward LastRelevantDate Nothing+        if quantLibAtMost143 then do+          basisHelper `shouldThrow` unsupportedQuantLib144 "overnightOvernightBasisSwapRateHelper"+          funding (FundingTenor 2 (1, Years)) `shouldThrow` unsupportedQuantLib144 "overnightIndexedFundingRateHelper"+          funding (FundingBetweenDates (addDays 2 today') (addGregorianYearsClip 1 today'))+            `shouldThrow` unsupportedQuantLib144 "overnightIndexedFundingRateHelper"+        else do+          bh <- basisHelper+          fh <- funding (FundingTenor 2 (1, Years))+          start <- advance cal today' (2, Days) Following False+          end <- advance cal start (1, Years) ModifiedFollowing False+          dated <- funding (FundingBetweenDates start end)+          forM_ ([bh, fh, dated] :: [RateHelper]) $ \helper -> do+            curve <- piecewiseYieldCurve (ReferenceDate today') [helper] dc []+              (Iterative Discount LogLinear defaultIterativeBootstrapOpts) False+            discount curve (TimePoint 0.5) False >>= (`shouldSatisfy` (\df -> df > 0 && df < 1))+            impliedQuote helper >>= (`shouldSatisfy` closePrec 0.001 1e-9)+            deps <- rateHelperFixingDependencies helper+            deps `shouldSatisfy` maybe False (not . null)++      it "owns initial-guess callbacks and supplies previous bootstrap data" $ Context.keepingSettingsGc $ do+        Context.setEvaluationDate (Just (fromGregorian 2024 1 2))+        cal <- calendar TARGET+        dc <- dayCounter (Actual360 False)+        q <- Quote.simpleQuote 0.03+        helpers <- mapM (\n -> depositRateHelper q (DepositTenor (n, Months) 0 cal ModifiedFollowing False dc)) [3, 6]+        calls <- newIORef ([] :: [(Int, Int)])+        let guess times previous = do+              modifyIORef' calls (++ [(V.length times, V.length previous)])+              pure (V.map (\t -> exp (-0.03*t)) (V.drop 1 times))+        curve <- piecewiseYieldCurve (SettlementDays 0 cal) (fromList helpers) dc []+          (GlobalDiscountLogLinear 1e-12 [] (Just guess)) False+        Context.collectGarbage+        discount curve (TimePoint 0.2) False >>= (`shouldSatisfy` (> 0))+        _ <- Quote.setValue q 0.04+        discount curve (TimePoint 0.2) False >>= (`shouldSatisfy` (> 0))+        seen <- readIORef calls+        seen `shouldBe` if quantLibAtMost143 then [] else [(3,0), (3,3)]++      it "transports callback exceptions and rejects wrong initial-guess lengths" $ Context.keepingSettingsGc $ do+        Context.setEvaluationDate (Just (fromGregorian 2024 1 2))+        cal <- calendar TARGET+        dc <- dayCounter (Actual360 False)+        q <- Quote.simpleQuote 0.03+        helper <- depositRateHelper q (DepositTenor (6, Months) 0 cal ModifiedFollowing False dc)+        let runGuess guess = piecewiseYieldCurve (SettlementDays 0 cal) [helper] dc []+              (GlobalDiscountLogLinear 1e-12 [] (Just guess)) False+              >>= \curve -> discount curve (TimePoint 0.2) False+            marker (e :: IOException) = show e == "user error (initial guess failed)"+            wrongLength (Context.CallbackResultLength expected actual) = expected == 1 && actual == 0+            wrongLength _ = False+        if quantLibAtMost143 then do+          runGuess (\_ _ -> throwIO (userError "initial guess failed")) >>= (`shouldSatisfy` (> 0))+          runGuess (\_ _ -> pure V.empty) >>= (`shouldSatisfy` (> 0))+        else do+          runGuess (\_ _ -> throwIO (userError "initial guess failed")) `shouldThrow` marker+          runGuess (\_ _ -> pure V.empty) `shouldThrow` wrongLength+     describe "Quote value" $ do       prop "quote value" $         \val ->@@ -73,7 +171,7 @@             deposits <- mapM               (\(n, u, r) -> do                 q <- Quote.simpleQuote (r/100)-                depositRateHelper q (n, u) settlementDays cal ModifiedFollowing True actual360dc)+                depositRateHelper q (DepositTenor (n, u) settlementDays cal ModifiedFollowing True actual360dc))               depositData             ccy <- currency EUR             thirty360dc <- dayCounter Thirty360BondBasis@@ -81,8 +179,8 @@             swaps <- mapM               (\(n, u, r) -> do                 q <- Quote.simpleQuote (r/100)-                swapRateHelperFromConventions q (n, u) cal Annual Unadjusted thirty360dc index Nothing (0, Days) Nothing-                  Nothing LastRelevantDate Nothing False Nothing Nothing Nothing >>= asRateHelper)+                swapRateHelper q (SwapRateTenor (n, u) cal Annual Unadjusted thirty360dc index (0, Days) Nothing Nothing) Nothing Nothing+                  LastRelevantDate Nothing False Nothing Nothing >>= asRateHelper)               swapData              ts <- piecewiseYieldCurve (ReferenceDate settlement) (fromList (deposits ++ swaps)) actual360dc [] (Iterative Discount LogLinear defaultIterativeBootstrapOpts) False@@ -277,6 +375,122 @@            spreadedD1 `shouldSatisfy` closePrec (baseD1 * spreadDf1) 1.0e-8 +      -- Ports upstream termstructures.cpp's spreaded-forward interpolation tests: between spread+      -- nodes the instantaneous forward is the base forward plus the interpolated spread.+      it "piecewise forward-spreaded term structure interpolates instantaneous forward spreads" $+        Context.keepingSettingsGc $ do+          (cal, _settlementDays, ts) <- setup+          todayD <- Context.evaluationDate+          let businessDays n = advance cal todayD (n, Days) Following False+              instFwd curve t = IR.rate <$> forwardRateBetweenTimes curve t t IR.Continuous NoFrequency True+          q2 <- Quote.simpleQuote 0.02+          q3 <- Quote.simpleQuote 0.03+          q4 <- Quote.simpleQuote 0.04++          d100 <- businessDays 100+          d150 <- businessDays 150+          d120 <- businessDays 120+          t100 <- timeFromReference ts d100+          t150 <- timeFromReference ts d150+          t120 <- timeFromReference ts d120+          linear <- piecewiseForwardSpreadedTermStructure ts (fromList [(d100, q2), (d150, q3)]) Linear+          base120 <- instFwd ts t120+          instFwd linear t120 >>= (`shouldSatisfy` closePrec (base120 + (0.03 - 0.02) / (t150 - t100) * (t120 - t100) + 0.02) 1.0e-9)++          d75 <- businessDays 75+          d260 <- businessDays 260+          t100' <- timeFromReference ts d100+          forwardFlat <- piecewiseForwardSpreadedTermStructure ts (fromList [(d75, q2), (d260, q3)]) ForwardFlat+          base100 <- instFwd ts t100'+          instFwd forwardFlat t100' >>= (`shouldSatisfy` closePrec (base100 + 0.02) 1.0e-9)++          d200 <- businessDays 200+          d300 <- businessDays 300+          d110 <- businessDays 110+          t110 <- timeFromReference ts d110+          backwardFlat <- piecewiseForwardSpreadedTermStructure ts (fromList [(d100, q2), (d200, q3), (d300, q4)]) BackwardFlat+          base110 <- instFwd ts t110+          instFwd backwardFlat t110 >>= (`shouldSatisfy` closePrec (base110 + 0.03) 1.0e-9)++          piecewiseForwardSpreadedTermStructure ts (fromList [(d100, q2), (d150, q3)]) LogLinear `shouldThrow` anyException++      -- Mirrors upstream piecewiseyieldcurve.cpp's testPiecewiseSpreadYieldCurve: fewer swaps+      -- bootstrapped as a spread over the base curve reprice, and the forward spread stays flat+      -- past the base curve's max date.+      it "piecewise spread yield curve reprices its instruments over the base curve" $+        Context.keepingSettingsGc $ do+          (cal, settlementDays, ts) <- setup+          setExtrapolation ts True+          refDate <- referenceDate ts+          actual360dc <- dayCounter (Actual360 False)+          thirty360dc <- dayCounter Thirty360BondBasis+          ccy <- currency EUR+          index <- iborIndex (Ibor "spread3m" (3, Months) settlementDays ccy cal ModifiedFollowing False actual360dc) Nothing+          let swapData = [(1, 4.44), (3, 4.55), (6, 4.81), (9, 5.01), (15, 5.25), (30, 5.36)] :: [(Int, Double)]+              mkHelpers = mapM (\(n, r) -> do+                q <- Quote.simpleQuote (r / 100)+                h <- swapRateHelper q (SwapRateTenor (n, Years) cal Annual Unadjusted thirty360dc index (0, Days) Nothing Nothing) Nothing Nothing+                  LastRelevantDate Nothing False Nothing Nothing >>= asRateHelper+                pure (h, r / 100)) swapData+              repricing bootstrap = do+                hs <- mkHelpers+                curve <- piecewiseSpreadYieldCurve ts (fromList (map fst hs)) bootstrap True+                _ <- discount curve (DatePoint (addGregorianYearsClip 1 refDate)) True+                mapM_ (\(h, r) -> impliedQuote h >>= (`shouldSatisfy` closePrec r 1.0e-8)) hs+                pure curve+              flatFwd curve t1 t2 = IR.rate <$> forwardRateBetweenTimes curve t1 t2 IR.Continuous NoFrequency True+          logLinear <- repricing (SpreadIterative LogLinear defaultIterativeBootstrapOpts)+          _ <- repricing (SpreadIterative Linear defaultIterativeBootstrapOpts)+          _ <- repricing (SpreadGlobalLogLinear 1.0e-10 [] Nothing)++          curveMax <- TS.maxDate logLinear+          baseMax <- TS.maxDate ts+          curveMax `shouldBe` baseMax+          tMax <- timeFromReference ts curveMax+          maxT <- TS.maxTime logLinear+          maxT `shouldSatisfy` closePrec tMax 1.0e-12+          before <- (-) <$> flatFwd logLinear (tMax - 1) tMax <*> flatFwd ts (tMax - 1) tMax+          after <- (-) <$> flatFwd logLinear tMax (tMax + 1) <*> flatFwd ts tMax (tMax + 1)+          after `shouldSatisfy` closePrec before 1.0e-9++      -- A par rate read on a curve the helper did not bootstrap: the helpers' own quotes play no+      -- part, and helpers bootstrapped at those rates read them back on the rebuilt curve.+      it "impliedQuoteOn reads par rates on any curve" $+        Context.keepingSettingsGc $ do+          (cal, settlementDays, ts) <- setup+          refDate <- referenceDate ts+          actual360dc <- dayCounter (Actual360 False)+          thirty360dc <- dayCounter Thirty360BondBasis+          ccy <- currency EUR+          index <- iborIndex (Ibor "par3m" (3, Months) settlementDays ccy cal ModifiedFollowing False actual360dc) Nothing+          let tenors = [1, 3, 6, 9, 15, 30] :: [Int]+              helperAt r n = do+                q <- Quote.simpleQuote r+                swapRateHelper q (SwapRateTenor (n, Years) cal Annual Unadjusted thirty360dc index (0, Days) Nothing Nothing) Nothing Nothing+                  LastRelevantDate Nothing False Nothing Nothing >>= asRateHelper+          pars <- mapM (helperAt 0 >=> (`impliedQuoteOn` ts)) tenors+          rebuiltHelpers <- zipWithM helperAt pars tenors+          rebuilt <- piecewiseYieldCurve (ReferenceDate refDate) (fromList rebuiltHelpers) actual360dc [] (Iterative Discount LogLinear defaultIterativeBootstrapOpts) True+          forM_ (zip tenors pars) $ \(n, r) -> do+            r `shouldSatisfy` (\x -> x > 0.04 && x < 0.07)+            fresh <- helperAt 0 n+            impliedQuoteOn fresh rebuilt >>= (`shouldSatisfy` closePrec r 1.0e-10)++      it "interpolated simple zero curve reproduces its simply-compounded node rates" $+        Context.keepingSettingsGc $ do+          let refDate = 15 `january` 2024+              nodes = [(refDate, 0.02), (addGregorianYearsClip 1 refDate, 0.021), (addGregorianYearsClip 2 refDate, 0.022), (addGregorianYearsClip 5 refDate, 0.025)] :: [(Day, Double)]+          Context.setEvaluationDate (Just refDate)+          cal <- Calendar.calendar TARGET+          dc <- dayCounter Actual365FixedStandard+          curve <- interpolatedSimpleZeroCurve (fromList nodes) dc cal [] Linear+          forM_ (drop 1 nodes) $ \(d, r) -> do+            z <- IR.rate <$> zeroRate curve (RateAtDate d dc) IR.Simple Annual False+            z `shouldSatisfy` closePrec r 1.0e-10+            t <- timeFromReference curve d+            df <- discount curve (DatePoint d) False+            df `shouldSatisfy` closePrec (1 / (1 + r * t)) 1.0e-12+     -- The three rate helpers below build their instrument internally rather than taking     -- one, so these accessors are the only way to reach it. Checking the instrument's own     -- maturity against the tenor the helper was given is what catches an accessor wired to@@ -292,13 +506,13 @@           q <- Quote.simpleQuote 0.03            ois <- overnightIborIndex Sofr Nothing-          oisSwap <- oisRateHelper 2 (1, Years) (0, Days) q ois Nothing >>= helperInstrument+          oisSwap <- oisRateHelper (OisTenor 2 (1, Years) (0, Days)) q ois Nothing >>= helperInstrument           (Swap.asSwap oisSwap >>= Swap.maturityDate) `shouldReturn` Just (4 `january` 2025)            ccy <- currency EUR           ibor <- iborIndex (Ibor "dummy" (6, Months) 2 ccy cal ModifiedFollowing False actual360dc) Nothing-          vanilla <- swapRateHelperFromConventions q (5, Years) cal Annual Unadjusted thirty360dc ibor Nothing (0, Days) Nothing-            Nothing LastRelevantDate Nothing False Nothing Nothing Nothing >>= helperInstrument+          vanilla <- swapRateHelper q (SwapRateTenor (5, Years) cal Annual Unadjusted thirty360dc ibor (0, Days) Nothing Nothing) Nothing Nothing+            LastRelevantDate Nothing False Nothing Nothing >>= helperInstrument           (Swap.asSwap vanilla >>= Swap.maturityDate) `shouldReturn` Just (4 `january` 2029)            bondMaturity <- advance cal (2 `january` 2024) (5, Years) Unadjusted False@@ -309,35 +523,253 @@                     >>= helperInstrument           Bond.maturityDate bond `shouldReturn` Just bondMaturity +    -- Which fixings a bootstrapped curve reads from the store. The curve itself cannot say:+    -- PiecewiseYieldCurve is a template with no instruments accessor and an Observer does not+    -- expose what it registered with, so the question is asked of the helpers one at a time and+    -- rateHelperFixingDependencies walks each helper's underlying instrument.+    describe "rate helper fixing dependencies" $ do+      it "reads a swap helper's fixings off its underlying swap" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          thirty360dc <- dayCounter Thirty360BondBasis+          q <- Quote.simpleQuote 0.03+          ibor <- iborIndex Euribor6M Nothing+          name <- Index.name ibor+          (Just deps) <- swapRateHelper q (SwapRateTenor (5, Years) cal Annual Unadjusted thirty360dc ibor (0, Days) Nothing Nothing) Nothing Nothing+            LastRelevantDate Nothing False Nothing Nothing+            >>= asRateHelper >>= rateHelperFixingDependencies+          -- One key per semi-annual coupon, named as QuantLib's fixing store names it, and the+          -- first of them is today: a spot-starting helper's first coupon fixes on the+          -- evaluation date, which is the fixing a shifted scenario has to supply.+          map fst deps `shouldBe` replicate 10 name+          take 1 (map snd deps) `shouldBe` [2 `january` 2024]++      it "reports none for the helpers that read no stored fixing" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          actual360dc <- dayCounter (Actual360 False)+          q <- Quote.simpleQuote 0.03+          ibor <- iborIndex Euribor6M Nothing+          -- A relative-date deposit or FRA helper's convention form builds a "no-fix" index, and+          -- its index form fixes today or later, which it forecasts rather than reads, so an empty+          -- list is the answer here and not a gap in the walk.+          (depositRateHelper q (DepositTenor (6, Months) 2 cal ModifiedFollowing True actual360dc)+            >>= rateHelperFixingDependencies) `shouldReturn` Just []+          (fraRateHelper q (FraMonthsFromIndex 3 ibor) LastRelevantDate Nothing True+            >>= rateHelperFixingDependencies) `shouldReturn` Just []+          -- A futures helper prices off the curve and an FX swap helper off spot and the collateral+          -- curve. Each has its own case, because an unknown helper now answers Nothing.+          (futuresRateHelper q (FuturesMonths (17 `january` 2024) 3 cal ModifiedFollowing True actual360dc) Nothing IMM+            >>= asRateHelper >>= rateHelperFixingDependencies) `shouldReturn` Just []+          actual365dc <- dayCounter Actual365FixedStandard+          curve <- flatForward (SettlementDays 0 cal) q actual365dc IR.Continuous Annual+          spot <- Quote.simpleQuote 1.1+          (fxSwapRateHelper q spot (FxSwapTenor (1, Years) 2 cal ModifiedFollowing False cal) True curve+            >>= rateHelperFixingDependencies) `shouldReturn` Just []++      it "reports a fixed-date deposit's or indexed FRA's fixing only once it has passed" $+        Context.keepingSettingsGc $ do+          q <- Quote.simpleQuote 0.03+          ibor <- iborIndex Euribor6M Nothing+          name <- Index.name ibor+          -- Euribor6M fixes two TARGET days before its value date: the FRA starting on the 17th+          -- fixes on the 15th, the date the deposit is given.+          let fixing = 15 `january` 2024+          depo <- depositRateHelper q (DepositOnFixingDate fixing ibor)+          fra <- fraRateHelper q (FraBetweenDates (17 `january` 2024) (17 `july` 2024) ibor) LastRelevantDate Nothing True+          fraOffCurve <- fraRateHelper q (FraBetweenDates (17 `january` 2024) (17 `july` 2024) ibor) LastRelevantDate Nothing False+          let depsOn d h = Context.setEvaluationDate (Just d) >> rateHelperFixingDependencies h+          forM_ ([depo, fra] :: [RateHelper]) $ \h -> do+            depsOn (12 `january` 2024) h `shouldReturn` Just []+            -- On the fixing date itself fixing(d, true) still forecasts.+            depsOn fixing h `shouldReturn` Just []+            depsOn (16 `january` 2024) h `shouldReturn` Just [(name, fixing)]+          -- Without an indexed coupon the FRA prices off the curve and reads no fixing at all.+          depsOn (16 `january` 2024) fraOffCurve `shouldReturn` Just []++      it "reports one key per averaged business day for an OIS helper" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          q <- Quote.simpleQuote 0.03+          ois <- overnightIborIndex Sofr Nothing+          (Just deps) <- oisRateHelper (OisTenor 2 (1, Years) (0, Days)) q ois Nothing+            >>= asRateHelper >>= rateHelperFixingDependencies+          -- The overnight leg of a 1Y OIS is one annual coupon: a hand-written list would carry+          -- one date, where the coupon reads a fixing on every business day it compounds over.+          length deps `shouldSatisfy` (> 200)++      it "reports both legs' indexes for a basis swap helper" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          actual365dc <- dayCounter Actual365FixedStandard+          q <- Quote.simpleQuote 0.03+          curve <- flatForward (SettlementDays 0 cal) q actual365dc IR.Continuous Annual+          i3 <- iborIndex Euribor3M (Just curve)+          i6 <- iborIndex Euribor6M (Just curve)+          names <- mapM Index.name [i3, i6]+          basis <- Quote.simpleQuote 0.001+          (Just deps) <- iborIborBasisSwapRateHelper basis (2, Years) 2 cal ModifiedFollowing False i3 i6 curve True Nothing Backward 0 Nothing Nothing+            >>= rateHelperFixingDependencies+          -- A basis swap is two floating legs, so both indexes are dependencies; a walk that+          -- stopped at the helper's "own" index would report half of what the curve reads.+          nub (map fst deps) `shouldMatchList` names++      it "reads a cross-currency helper's legs through its protected members" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          actual365dc <- dayCounter Actual365FixedStandard+          thirty360dc <- dayCounter Thirty360BondBasis+          q <- Quote.simpleQuote 0.03+          curve <- flatForward (SettlementDays 0 cal) q actual365dc IR.Continuous Annual+          i3 <- iborIndex Euribor3M (Just curve)+          i6 <- iborIndex Euribor6M (Just curve)+          names <- mapM Index.name [i3, i6]+          basis <- Quote.simpleQuote 0.001+          (Just basisDeps) <- constNotionalCrossCurrencyBasisSwapRateHelper basis (2, Years) 2 cal ModifiedFollowing False+            i3 i6 curve True True Nothing 0 Nothing Nothing False Nothing Nothing >>= rateHelperFixingDependencies+          nub (map fst basisDeps) `shouldMatchList` names+          (Just mtmDeps) <- mtmCrossCurrencyBasisSwapRateHelper basis (2, Years) 2 cal ModifiedFollowing False+            i3 i6 curve True True True Nothing 0 Nothing 0 Nothing Nothing Nothing Nothing >>= rateHelperFixingDependencies+          nub (map fst mtmDeps) `shouldMatchList` names+          (Just fixedDeps) <- constNotionalCrossCurrencySwapRateHelper q (2, Years) 2 cal ModifiedFollowing False+            Annual thirty360dc i6 curve True 0 Nothing Nothing Nothing >>= rateHelperFixingDependencies+          nub (map fst fixedDeps) `shouldBe` drop 1 names++      it "refuses non-default QuantLib 1.44 helper arguments on 1.43" $+        if not quantLibAtMost143 then pendingWith "1.44 accepts these arguments" else Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          actual365dc <- dayCounter Actual365FixedStandard+          thirty360dc <- dayCounter Thirty360BondBasis+          q <- Quote.simpleQuote 0.03+          curve <- flatForward (SettlementDays 0 cal) q actual365dc IR.Continuous Annual+          i3 <- iborIndex Euribor3M (Just curve)+          i6 <- iborIndex Euribor6M (Just curve)+          sofr <- overnightIborIndex Sofr (Just curve)+          basis <- Quote.simpleQuote 0.001+          iborIborBasisSwapRateHelper basis (2, Years) 2 cal ModifiedFollowing False i3 i6 curve True Nothing Backward 1 Nothing Nothing+            `shouldThrow` unsupportedQuantLib144 "iborIborBasisSwapRateHelper"+          overnightIborBasisSwapRateHelper basis (2, Years) 2 cal ModifiedFollowing False sofr i3 (Just curve)+            False 0 Nothing Nothing Backward AveragingCompound True False Nothing+            `shouldThrow` unsupportedQuantLib144 "overnightIborBasisSwapRateHelper"+          constNotionalCrossCurrencyBasisSwapRateHelper basis (2, Years) 2 cal ModifiedFollowing False+            i3 i6 curve True True Nothing 0 Nothing Nothing True Nothing Nothing+            `shouldThrow` unsupportedQuantLib144 "constNotionalCrossCurrencyBasisSwapRateHelper"+          mtmCrossCurrencyBasisSwapRateHelper basis (2, Years) 2 cal ModifiedFollowing False+            i3 i6 curve True True True Nothing 0 Nothing 2 (Just cal) Nothing Nothing Nothing+            `shouldThrow` unsupportedQuantLib144 "mtmCrossCurrencyBasisSwapRateHelper"+          constNotionalCrossCurrencySwapRateHelper q (2, Years) 2 cal ModifiedFollowing False+            Annual thirty360dc i6 curve True 0 Nothing (Just Quarterly) Nothing+            `shouldThrow` unsupportedQuantLib144 "constNotionalCrossCurrencySwapRateHelper"+          oisRateHelperWithOptions (OisTenor 2 (1, Years) (0, Days)) q sofr Nothing+            defaultOisRateHelperOpts { oisFixedDayCount = Just thirty360dc }+            `shouldThrow` unsupportedQuantLib144 "oisRateHelperWithOptions"++      it "reports a started overnight-index futures contract's fixings up to the evaluation date" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          price <- Quote.simpleQuote 94.8+          (sofrFutureRateHelper price QuantLib.Time.Date.March 2024 Quarterly Nothing LastRelevantDate Nothing+            >>= rateHelperFixingDependencies) `shouldReturn` Just []+          started <- sofrFutureRateHelper price QuantLib.Time.Date.December 2023 Quarterly Nothing+            LastRelevantDate Nothing >>= rateHelperFixingDependencies+          -- QuantLib <= 1.43 keeps the future private, so "cannot see it" is the only honest answer.+          let sofrDates = map (`december` 2023) [20, 21, 22, 26, 27, 28, 29] ++ [2 `january` 2024]+          started `shouldBe` if quantLibAtMost143 then Nothing else Just [("SOFRON Actual/360", d) | d <- sofrDates]++      it "re-dates with the evaluation date" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          thirty360dc <- dayCounter Thirty360BondBasis+          q <- Quote.simpleQuote 0.03+          ibor <- iborIndex Euribor6M Nothing+          h <- swapRateHelper q (SwapRateTenor (5, Years) cal Annual Unadjusted thirty360dc ibor (0, Days) Nothing Nothing) Nothing Nothing+            LastRelevantDate Nothing False Nothing Nothing >>= asRateHelper+          (Just before') <- rateHelperFixingDependencies h+          -- A relative-date helper re-initialises its schedule when the evaluation date moves, so+          -- the keys must be read under the date whose fixings are being asked about.+          (Just after') <- do+            Context.setEvaluationDate (Just (1 `july` 2024))+            rateHelperFixingDependencies h+          take 1 (map snd after') `shouldBe` [1 `july` 2024]+          map snd after' `shouldSatisfy` (/= map snd before')++      it "keeps a fixed-date swap helper's first fixing when the evaluation date moves past it" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          thirty360dc <- dayCounter Thirty360BondBasis+          q <- Quote.simpleQuote 0.03+          ibor <- iborIndex Euribor6M Nothing+          name <- Index.name ibor+          h <- swapRateHelper q (SwapRateBetweenDates (4 `january` 2024) (4 `january` 2029) cal Annual Unadjusted thirty360dc ibor Nothing)+            Nothing Nothing LastRelevantDate Nothing False Nothing Nothing >>= asRateHelper+          (Just before') <- rateHelperFixingDependencies h+          (Just after') <- do+            Context.setEvaluationDate (Just (1 `july` 2024))+            rateHelperFixingDependencies h+          -- The dates are the helper's own: the first coupon fixed on 2 January, now past and+          -- read from the store, and nothing moved with the evaluation date.+          map fst after' `shouldBe` replicate 10 name+          take 1 (map snd after') `shouldBe` [2 `january` 2024]+          after' `shouldBe` before'+     -- Drop Haskell's OptimizationMethod reference and collect before querying the curve. The     -- fitting method and its clone must retain shared ownership for the curve's full lifetime.-    describe "fitted bond discount curve fitting methods" $+    describe "fitted bond discount curve fitting methods" $ do+      let buildFitted reference = do+            Context.setEvaluationDate (Just (2 `january` 2024))+            cal <- calendar Null+            thirty360dc <- dayCounter Thirty360BondBasis+            helpers <- mapM+              (\(tenor, coupon) -> do+                maturity <- advance cal (2 `january` 2024) tenor Unadjusted False+                sch <- schedule (Just (2 `january` 2024)) maturity (1, Years) cal Unadjusted Unadjusted+                         Backward False Nothing Nothing+                price <- Quote.simpleQuote 100.0+                fixedRateBondHelper price 3 100.0 sch [coupon] thirty360dc Following 100.0 Nothing)+              [((2, Years), 0.03), ((5, Years), 0.035), ((10, Years), 0.04)]+            let optMethod = Simplex 0.1+            fittedBondDiscountCurve reference (fromList helpers) thirty360dc+              (ExponentialSplines True [] [] 0.0 1.0e6 9 Nothing Nothing (Just optMethod))+              1.0e-10 10000 [] 1.0 False+       it "keeps a caller-supplied OptimizationMethod alive past Haskell's own GC" $         Context.keepingSettingsGc $ do           Context.setEvaluationDate (Just (2 `january` 2024))           cal <- calendar Null-          thirty360dc <- dayCounter Thirty360BondBasis-          helpers <- mapM-            (\(tenor, coupon) -> do-              maturity <- advance cal (2 `january` 2024) tenor Unadjusted False-              sch <- schedule (Just (2 `january` 2024)) maturity (1, Years) cal Unadjusted Unadjusted-                       Backward False Nothing Nothing-              price <- Quote.simpleQuote 100.0-              fixedRateBondHelper price 3 100.0 sch [coupon] thirty360dc Following 100.0 Nothing)-            [((2, Years), 0.03), ((5, Years), 0.035), ((10, Years), 0.04)]-          let build reference = do-                let optMethod = Simplex 0.1-                fittedBondDiscountCurve reference (fromList helpers) thirty360dc-                  (ExponentialSplines True [] [] 0.0 1.0e6 9 Nothing Nothing (Just optMethod))-                  1.0e-10 10000 [] 1.0 False           fixedReference <- advance cal (2 `january` 2024) (3, Days) Following False-          movingCurve <- build (SettlementDays 3 cal)-          fixedCurve <- build (ReferenceDate fixedReference)+          movingCurve <- buildFitted (SettlementDays 3 cal)+          fixedCurve <- buildFitted (ReferenceDate fixedReference)           movingDiscount <- discount movingCurve (DatePoint (5 `january` 2029)) False           fixedDiscount <- discount fixedCurve (DatePoint (5 `january` 2029)) False           movingDiscount `shouldSatisfy` (\x -> x > 0 && x < 1)           fixedDiscount `shouldSatisfy` closePrec movingDiscount 1.0e-6 +      it "FittingMethod inspectors report the calibration result consistently" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar Null+          curve <- buildFitted (SettlementDays 3 cal)+          n <- fittingMethodSize curve+          n `shouldBe` 9+          sol <- fittingMethodSolution curve+          V.length sol `shouldBe` 9+          minCost <- minimumCostValue curve+          minCost `shouldSatisfy` (>= 0)+          iters <- numberOfIterations curve+          iters `shouldSatisfy` (>= 0)+          err <- fittingMethodErrorCode curve+          err `shouldNotBe` EndNone+          -- constrainAtZero = True above pins the fitted discount factor at t=0 to 1.+          d0 <- fittingMethodDiscount curve (V.toList sol) 0.0+          d0 `shouldSatisfy` closePrec 1.0 1.0e-8+     -- No upstream test-suite fixture exists for FxSwapRateHelper (unlike the other rate     -- helpers ported elsewhere in this file), so this is a self-consistency check instead of     -- a cached-value comparison: bootstrapping a curve from a single FxSwapRateHelper pillar@@ -345,7 +777,7 @@     -- fwdPoint quote it was built from -- that is the definition of a successful bootstrap     -- (RateHelper::quoteError() = quote_->value() - impliedQuote(), driven to ~0 by the     -- solver), not something specific to FX swaps.-    describe "fx swap rate helper" $+    describe "fx swap rate helper" $ do       it "bootstrapped curve reprices the helper's own forward points" $         Context.keepingSettingsGc $ do           Context.setEvaluationDate (Just (2 `january` 2024))@@ -358,8 +790,8 @@           collateralCurve <- flatForward (SettlementDays fixingDays cal) collRate actual360dc IR.Continuous Annual           spotFx <- Quote.simpleQuote 1.10           fwdPoint <- Quote.simpleQuote 0.0025-          rh <- fxSwapRateHelper fwdPoint spotFx (1, Years) fixingDays cal ModifiedFollowing False-                  True collateralCurve tradingCal+          rh <- fxSwapRateHelper fwdPoint spotFx (FxSwapTenor (1, Years) fixingDays cal ModifiedFollowing False tradingCal)+                  True collateralCurve           ts <- piecewiseYieldCurve (ReferenceDate settlement) [rh] actual360dc [] (Iterative Discount LogLinear defaultIterativeBootstrapOpts) False           -- PiecewiseYieldCurve is a lazy QuantLib object: bootstrapping (and the           -- setTermStructure call on each helper) only runs on first calculation, not on@@ -369,6 +801,26 @@           fwdVal <- Quote.value fwdPoint           implied `shouldSatisfy` closePrec fwdVal 1.0e-8 +      it "FxSwapBetweenDates agrees with the FxSwapTenor landing on the same dates" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          tradingCal <- calendar Null+          actual360dc <- dayCounter (Actual360 False)+          settlement <- advance cal (2 `january` 2024) (2, Days) Following False+          maturity <- advance cal settlement (1, Years) ModifiedFollowing False+          collRate <- Quote.simpleQuote 0.03+          collateralCurve <- flatForward (SettlementDays 2 cal) collRate actual360dc IR.Continuous Annual+          spotFx <- Quote.simpleQuote 1.10+          fwdPoint <- Quote.simpleQuote 0.0025+          let discountOn terms = do+                rh <- fxSwapRateHelper fwdPoint spotFx terms True collateralCurve+                ts <- piecewiseYieldCurve (ReferenceDate settlement) [rh] actual360dc [] (Iterative Discount LogLinear defaultIterativeBootstrapOpts) False+                discount ts (DatePoint (2 `july` 2024)) True+          tenor <- discountOn (FxSwapTenor (1, Years) 2 cal ModifiedFollowing False tradingCal)+          dated <- discountOn (FxSwapBetweenDates settlement maturity)+          dated `shouldSatisfy` closePrec tenor 1.0e-12+     -- Adapted from upstream's multipleresetsswap.cpp testRateHelper (a flat-rate quote at 1Y/2Y/3Y     -- bootstraps a curve under which each helper's fair rate matches the input). hasquant doesn't     -- bind MultipleResetsSwap itself (the helper needs no accessor for it -- see the "don't mirror@@ -546,6 +998,69 @@           monthsIdx `shouldSatisfy` closePrec explicit 1.0e-12           periodIdx `shouldSatisfy` closePrec explicit 1.0e-12 +      -- The fixed-date and IMM forms, against the relative form that lands on the same dates on+      -- 2 January 2024: spot is the 4th, so the deposit from the index fixes on the 2nd and the+      -- 3M FRA 3M forward runs from 4 April to 4 July.+      it "the fixed-date and IMM variants agree with the relative forms on the same dates" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          ccy <- currency EUR+          actual360dc <- dayCounter (Actual360 False)+          euribor3m <- iborIndex (Ibor "euribor3m" (3, Months) 2 ccy cal ModifiedFollowing False actual360dc) Nothing+          q <- Quote.simpleQuote 0.03+          let discountOn rh = do+                ts <- piecewiseYieldCurve (ReferenceDate (2 `january` 2024)) ([rh] :: NonEmpty RateHelper) actual360dc []+                  (Iterative Discount LogLinear defaultIterativeBootstrapOpts) False+                discount ts (DatePoint (2 `july` 2024)) True+              fraDiscount indexed terms = fraRateHelper q terms LastRelevantDate Nothing indexed >>= discountOn+          relativeDepo <- depositRateHelper q (DepositFromIndex euribor3m) >>= discountOn+          fixedDepo <- depositRateHelper q (DepositOnFixingDate (2 `january` 2024) euribor3m) >>= discountOn+          fixedDepo `shouldSatisfy` closePrec relativeDepo 1.0e-12+          relativeFra <- fraDiscount True (FraPeriodFromIndex (3, Months) euribor3m)+          fixedFra <- fraDiscount True (FraBetweenDates (4 `april` 2024) (4 `july` 2024) euribor3m)+          fixedFra `shouldSatisfy` closePrec relativeFra 1.0e-12+          -- The IMM form starts and ends on the first and second main-cycle IMM dates after spot,+          -- found the way QuantLib's nthImmDate finds them. Without an indexed coupon the FRA ends+          -- on the second, not one index tenor after the first.+          imm1 <- nextImmDate (4 `january` 2024) True+          imm2 <- nextImmDate imm1 True+          immFra <- fraDiscount False (FraImmOffsets 1 2 euribor3m)+          datedFra <- fraDiscount False (FraBetweenDates imm1 imm2 euribor3m)+          immFra `shouldSatisfy` closePrec datedFra 1.0e-12++    describe "swap rate helper terms" $ do+      -- On 2 January 2024 spot is the 4th, so a 5Y swap from spot and the swap between 4 January+      -- 2024 and 4 January 2029 are the same swap.+      it "SwapRateBetweenDates agrees with the SwapRateTenor landing on the same dates" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          cal <- calendar TARGET+          thirty360dc <- dayCounter Thirty360BondBasis+          actual360dc <- dayCounter (Actual360 False)+          q <- Quote.simpleQuote 0.03+          ibor <- iborIndex Euribor6M Nothing+          let priced terms = do+                rh <- swapRateHelper q terms Nothing Nothing LastRelevantDate Nothing False Nothing Nothing >>= asRateHelper+                ts <- piecewiseYieldCurve (ReferenceDate (2 `january` 2024)) ([rh] :: NonEmpty RateHelper) actual360dc []+                  (Iterative Discount LogLinear defaultIterativeBootstrapOpts) False+                discount ts (DatePoint (2 `january` 2027)) True+          tenor <- priced (SwapRateTenor (5, Years) cal Annual Unadjusted thirty360dc ibor (0, Days) Nothing Nothing)+          dated <- priced (SwapRateBetweenDates (4 `january` 2024) (4 `january` 2029) cal Annual Unadjusted thirty360dc ibor Nothing)+          dated `shouldSatisfy` closePrec tenor 1.0e-12++      it "SwapRateFromIndex bootstraps a curve that reprices its own quote" $+        Context.keepingSettingsGc $ do+          Context.setEvaluationDate (Just (2 `january` 2024))+          actual360dc <- dayCounter (Actual360 False)+          q <- Quote.simpleQuote 0.03+          idx <- liborSwapIndex EurLiborSwapIsdaFixA (5, Years) (Nothing :: Maybe YieldTermStructure) (Nothing :: Maybe YieldTermStructure)+          rh <- swapRateHelper q (SwapRateFromIndex idx (0, Days)) Nothing Nothing LastRelevantDate Nothing False Nothing Nothing >>= asRateHelper+          ts <- piecewiseYieldCurve (ReferenceDate (2 `january` 2024)) ([rh] :: NonEmpty RateHelper) actual360dc []+            (Iterative Discount LogLinear defaultIterativeBootstrapOpts) False+          _ <- discount ts (DatePoint (2 `january` 2027)) True+          impliedQuote rh >>= (`shouldSatisfy` closePrec 0.03 1.0e-8)+     describe "sofr future rate helper" $ do       it "bootstrapped curve reprices the helper's own futures price" $         Context.keepingSettingsGc $ do@@ -750,6 +1265,18 @@           npvAfter <- npv swpn           abs (npvAfter - npvBefore) `shouldSatisfy` (> 0.5) +      it "optionDateFromTenor matches Calendar.advance under the structure's own calendar/convention" $+        Context.keepingSettingsGc $ do+          let refDate = 11 `december` 2012+          Context.setEvaluationDate (Just refDate)+          cal <- Calendar.calendar TARGET+          dc <- dayCounter Actual365FixedStandard+          volQ <- Quote.simpleQuote 0.20+          vol0 <- Vol.constantSwaptionVolatility (Vol.CalendarReferenceDate refDate) cal ModifiedFollowing volQ dc IR.ShiftedLognormal 0+          got <- Vol.optionDateFromTenor vol0 (6, Months)+          expected <- advance cal refDate (6, Months) ModifiedFollowing False+          got `shouldBe` expected+       -- A relinkable optionlet vol surface propagates the same way: an engine built on it       -- keeps tracking whatever surface the handle currently points at, so relinking reprices       -- the cap without rebuilding the engine. Mirrors the swaption vol case above.@@ -810,7 +1337,10 @@           capVolSurface <- Vol.capFloorTermVolSurface (Vol.CalendarSettlementDays 0) cal Following             [(n, Years) | n <- [1 .. 10]] [0.02, 0.05, 0.08] volMatrix dc           strippedVol <- Vol.optionletStripper capVolSurface idx Nothing 1.0e-6 100-            (Just discountH) IR.ShiftedLognormal 0 False Nothing+            (Just discountH) IR.ShiftedLognormal 0 False Nothing 0+          when quantLibAtMost143 $+            Vol.optionletStripper capVolSurface idx Nothing 1.0e-6 100 (Just discountH) IR.ShiftedLognormal 0 False Nothing 2+              `shouldThrow` unsupportedQuantLib144 "optionletStripper"           strippedEng <- blackCapFloorEngineFromVolatilityStructure discountH strippedVol           setPricingEngine capfl strippedEng           priceStripped <- npv capfl@@ -936,9 +1466,9 @@           capVolCurve <- Vol.capFloorTermVolCurve (Vol.CalendarSettlementDays 0) cal Following (fromList $ zipWith (\(n, u) q -> (n, u, q)) tenors curveVolQs) dc            stripper1 <- Vol.optionletStripper capVolSurface idx Nothing 1.0e-6 100-            (Just discountH) IR.ShiftedLognormal 0 False Nothing+            (Just discountH) IR.ShiftedLognormal 0 False Nothing 0           stripper2 <- Vol.optionletStripperWithAtm capVolSurface idx Nothing 1.0e-6 100-            (Just discountH) IR.ShiftedLognormal 0 False Nothing capVolCurve+            (Just discountH) IR.ShiftedLognormal 0 False Nothing capVolCurve 0           vol2 <- Vol.asOptionletVolatilityStructure stripper2            eng1 <- blackCapFloorEngineFromVolatilityStructure discountH stripper1@@ -1153,22 +1683,25 @@             q <- Quote.simpleQuote 0.03             b <- Quote.simpleQuote 0.0020             helpers3mFra <- mapM (\i -> fraRateHelper q (FraMonths i (i + 3) 2 cal ModifiedFollowing True euriborDC) LastRelevantDate Nothing False) [1 .. 9]-            helpers3mBasis <- mapM (\i -> iborIborBasisSwapRateHelper b (i, Years) 2 cal ModifiedFollowing True euribor3m euribor6m discountCurve True) [2 .. 10]-            helpers6mBasis <- mapM (\i -> iborIborBasisSwapRateHelper b (i * 6, Months) 2 cal ModifiedFollowing True euribor3m euribor6m discountCurve False) [1 .. 3]-            helpers6mSwap <- mapM (\i -> swapRateHelperFromConventions q (i, Years) cal Annual Following thirty360 euribor6m Nothing (0, Days) (Just discountCurve)-                                            Nothing LastRelevantDate Nothing False Nothing Nothing Nothing) [2 .. 10]-              >>= mapM asRateHelper -- swapRateHelperFromConventions returns the concrete SwapRateHelper; upcast to the generic RateHelper the other helpers already are, so the list below is homogeneous+            helpers3mBasis <- mapM (\i -> iborIborBasisSwapRateHelper b (i, Years) 2 cal ModifiedFollowing True euribor3m euribor6m discountCurve True Nothing Backward 0 Nothing Nothing) [2 .. 10]+            helpers6mBasis <- mapM (\i -> iborIborBasisSwapRateHelper b (i * 6, Months) 2 cal ModifiedFollowing True euribor3m euribor6m discountCurve False Nothing Backward 0 Nothing Nothing) [1 .. 3]+            helpers6mSwap <- mapM (\i -> swapRateHelper q (SwapRateTenor (i, Years) cal Annual Following thirty360 euribor6m (0, Days) Nothing Nothing) Nothing (Just discountCurve)+                                            LastRelevantDate Nothing False Nothing Nothing) [2 .. 10]+              >>= mapM asRateHelper -- swapRateHelper returns the concrete SwapRateHelper; upcast to the generic RateHelper the other helpers already are, so the list below is homogeneous             -- helpers3m/helpers6m each reference the *other* curve's not-yet-bootstrapped             -- internal handle (via euribor3m/euribor6m) -- this is exactly the cycle a plain             -- piecewiseYieldCurve (SettlementDays with IterativeBootstrap) can't resolve.             ptr3m <- piecewiseYieldCurve (SettlementDays 0 cal) (fromList (helpers3mFra ++ helpers3mBasis)) euriborDC []-              (GlobalDiscountLogLinear 1.0e-10 []) False+              (GlobalDiscountLogLinear 1.0e-10 [] Nothing) False             ptr6m <- piecewiseYieldCurve (SettlementDays 0 cal) (fromList (helpers6mBasis ++ helpers6mSwap)) euriborDC []-              (GlobalDiscountLogLinear 1.0e-10 []) False+              (GlobalDiscountLogLinear 1.0e-10 [] Nothing) False             mc <- multiCurve 1.0e-10             curve3m <- addBootstrappedCurve mc intcurve3m ptr3m             curve6m <- addBootstrappedCurve mc intcurve6m ptr6m-            pure (cal, settleFix, euriborDC, thirty360, euribor3m, euribor6m, q, b, discountCurve, curve3m, curve6m)+            -- Pricing indexes must own the external handles; internal handles do not retain the cycle.+            pricing3m <- iborIndex Euribor3M (Just curve3m)+            pricing6m <- iborIndex Euribor6M (Just curve6m)+            pure (cal, settleFix, euriborDC, thirty360, pricing3m, pricing6m, q, b, discountCurve, curve3m, curve6m)        it "FRA-implied forward rates match the input quote once the 3m/6m curves are bootstrapped together" $         Context.keepingSettingsGc $ do@@ -1237,16 +1770,17 @@             b <- Quote.simpleQuote (-0.01)             -- these helpers discount off intcurveois, which is not yet linked to anything --             -- it is itself a spread over the curve being bootstrapped from these very helpers.-            helpers3m <- mapM (\i -> swapRateHelperFromConventions q (i, Years) cal Annual Following thirty360 euribor3m Nothing (0, Days) (Just intcurveois)-                                        Nothing LastRelevantDate Nothing False Nothing Nothing Nothing+            helpers3m <- mapM (\i -> swapRateHelper q (SwapRateTenor (i, Years) cal Annual Following thirty360 euribor3m (0, Days) Nothing Nothing) Nothing (Just intcurveois)+                                        LastRelevantDate Nothing False Nothing Nothing                                       >>= asRateHelper) [1 .. 10 :: Int]             ptr3m <- piecewiseYieldCurve (SettlementDays 0 cal) (fromList helpers3m) euriborDC []-              (GlobalDiscountLogLinear 1.0e-10 []) False+              (GlobalDiscountLogLinear 1.0e-10 [] Nothing) False             mc <- multiCurve 1.0e-10             curve3m <- addBootstrappedCurve mc intcurve3m ptr3m             ptrois <- zeroSpreadedTermStructure intcurve3m b IR.Continuous NoFrequency             curveois <- addNonBootstrappedCurve mc intcurveois ptrois-            pure (thirty360, euribor3m, q, b, curveois, curve3m)+            pricing3m <- iborIndex Euribor3M (Just curve3m)+            pure (thirty360, pricing3m, q, b, curveois, curve3m)        it "a fixed spread over a bootstrapped curve reprices to that spread" $         Context.keepingSettingsGc $ do@@ -1284,13 +1818,13 @@           -- weight on each pins where the (otherwise underdetermined) curve lands.           q1 <- Quote.simpleQuote 0.01           q2 <- Quote.simpleQuote 0.02-          h1 <- depositRateHelper q1 (6, Months) 2 cal ModifiedFollowing True euriborDC-          h2 <- depositRateHelper q2 (6, Months) 2 cal ModifiedFollowing True euriborDC+          h1 <- depositRateHelper q1 (DepositTenor (6, Months) 2 cal ModifiedFollowing True euriborDC)+          h2 <- depositRateHelper q2 (DepositTenor (6, Months) 2 cal ModifiedFollowing True euriborDC)           let helpers = [h1, h2]           curveMostlyQ2 <- piecewiseYieldCurve (SettlementDays 0 cal) helpers euriborDC []-            (GlobalDiscountLogLinear 1.0e-10 [0.1, 0.9]) False+            (GlobalDiscountLogLinear 1.0e-10 [0.1, 0.9] Nothing) False           curveMostlyQ1 <- piecewiseYieldCurve (SettlementDays 0 cal) helpers euriborDC []-            (GlobalDiscountLogLinear 1.0e-10 [0.9, 0.1]) False+            (GlobalDiscountLogLinear 1.0e-10 [0.9, 0.1] Nothing) False           settleFix <- advance cal curveToday (2, Days) Following False           pillar <- advance cal settleFix (6, Months) ModifiedFollowing True           d1 <- discount curveMostlyQ1 (DatePoint pillar) False@@ -1298,36 +1832,20 @@           -- higher weight on the higher rate (q2) means a lower discount factor at the pillar           d2 `shouldSatisfy` (< d1) -      -- SimpleZeroYield x Linear is upstream QuantLib-SWIG's only bound GlobalBootstrap-      -- combination (GlobalLinearSimpleZeroCurve); Discount x LogLinear is the combination-      -- hasquant already had. Both must reprice the same input instruments to the same-      -- discount factors *at the pillar dates* (bootstrap forces an exact fit regardless of-      -- trait/interpolator), which is what distinguishes "a genuinely different CurveType" from-      -- "the enum case aliased and dispatched to the same one" -- see also-      -- smoke/CheckSimpleZeroYield.hs, which checks the complementary property (the two curves-      -- *disagree* between pillars, since that's where the interpolation differs).-      ---      -- Uses deposit helpers (not FRAs, like the instrumentWeights test above), deliberately:-      -- each DepositRateHelper's equation only involves the common curve-start point and its own-      -- maturity, never another helper's pillar, so the bootstrap is well-determined pillar by-      -- pillar with no dependence on inter-pillar interpolation shape. A first attempt with FRA-      -- helpers here (start dates 1m/2m/3m falling before the first 4m pillar) failed: those-      -- FRAs' *start* discount factors are themselves interpolated, and Discount/LogLinear vs.-      -- SimpleZeroYield/Linear extrapolate that sub-pillar region differently, so the two curves'-      -- solved pillar values genuinely disagreed -- not a test bug, but the wrong instrument-      -- choice for isolating "same pillars" from "same interpolation".+      -- Deposit helpers isolate pillar values from interpolation between pillars, so both+      -- curve types must reprice them to the same discounts at maturity.       it "SimpleZeroYield GlobalBootstrap curve reprices to the same pillar discount factors as Discount" $         Context.keepingSettingsGc $ do           Context.setEvaluationDate (Just curveToday)           cal <- Calendar.calendar TARGET           euriborDC <- dayCounter (Actual360 False)           q <- Quote.simpleQuote 0.03-          helpersDiscount <- mapM (\i -> depositRateHelper q (i, Months) 2 cal ModifiedFollowing True euriborDC) [1 .. 5 :: Int]-          helpersZero <- mapM (\i -> depositRateHelper q (i, Months) 2 cal ModifiedFollowing True euriborDC) [1 .. 5 :: Int]+          helpersDiscount <- mapM (\i -> depositRateHelper q (DepositTenor (i, Months) 2 cal ModifiedFollowing True euriborDC)) [1 .. 5 :: Int]+          helpersZero <- mapM (\i -> depositRateHelper q (DepositTenor (i, Months) 2 cal ModifiedFollowing True euriborDC)) [1 .. 5 :: Int]           discountCurve <- piecewiseYieldCurve (SettlementDays 0 cal) (fromList helpersDiscount) euriborDC []-            (GlobalDiscountLogLinear 1.0e-10 []) False+            (GlobalDiscountLogLinear 1.0e-10 [] Nothing) False           zeroCurve <- piecewiseYieldCurve (SettlementDays 0 cal) (fromList helpersZero) euriborDC []-            (GlobalSimpleZeroLinear 1.0e-10 []) False+            (GlobalSimpleZeroLinear 1.0e-10 [] Nothing) False           settleFix <- advance cal curveToday (2, Days) Following False           mapM_ (\i -> do               pillar <- advance cal settleFix (i, Months) ModifiedFollowing True@@ -1344,8 +1862,8 @@           cal <- Calendar.calendar TARGET           euriborDC <- dayCounter (Actual360 False)           q <- Quote.simpleQuote 0.03-          helpersDiscount <- mapM (\i -> depositRateHelper q (i, Months) 2 cal ModifiedFollowing True euriborDC) [1 .. 5 :: Int]-          helpersZero <- mapM (\i -> depositRateHelper q (i, Months) 2 cal ModifiedFollowing True euriborDC) [1 .. 5 :: Int]+          helpersDiscount <- mapM (\i -> depositRateHelper q (DepositTenor (i, Months) 2 cal ModifiedFollowing True euriborDC)) [1 .. 5 :: Int]+          helpersZero <- mapM (\i -> depositRateHelper q (DepositTenor (i, Months) 2 cal ModifiedFollowing True euriborDC)) [1 .. 5 :: Int]           discountCurve <- piecewiseYieldCurve (SettlementDays 0 cal) (fromList helpersDiscount) euriborDC []             (Iterative Discount Linear defaultIterativeBootstrapOpts) False           zeroCurve <- piecewiseYieldCurve (SettlementDays 0 cal) (fromList helpersZero) euriborDC []@@ -1358,23 +1876,7 @@               dZero `shouldSatisfy` closePrec dDiscount tolerance             ) ([1 .. 5] :: [Int]) -      -- GlobalBootstrap's functor-callback constructor (upstream QuantLib-SWIG's canned-      -- AdditionalErrors/AdditionalDates), bound only for SimpleZeroYield x Linear -- the same-      -- combination its GlobalLinearSimpleZeroCurve demonstrates. testGlobalBootstrap-      -- (piecewiseyieldcurve.cpp) is not ported: its cached-      -- expected values are for that test's own bespoke error formula's fixed point, not a-      -- property derivable independently here.-      ---      -- A first version of this test compared two curves whose additionalHelpers "agreed" vs.-      -- "disagreed" with the primary instruments, expecting a measurably different fit -- that-      -- failed (0.0 difference): with additionalHelpers reusing the primary instruments' own-      -- dates, AdditionalErrors' formula is evaluated on quotes the primary curve already fully-      -- determines, so it imposes no new constraint and the fit is identical either way. That's-      -- a real property of the canned formula (over-determined/degenerate when additionalHelpers-      -- duplicates the primary grid), not a bug -- but the wrong property to test here. Testing-      -- what the plan actually called for instead: additionalHelpers/additionalDates are present-      -- and satisfied without breaking the primary instruments' own fit (each deposit still-      -- reprices to its own input quote via the standard simple-compounding relation).+      -- Additional helpers and dates must preserve each deposit's fitted quote.       it "GlobalBootstrapFull reprices its own instruments correctly with additionalHelpers/additionalDates present" $         Context.keepingSettingsGc $ do           Context.setEvaluationDate (Just curveToday)@@ -1383,25 +1885,15 @@           settleFix <- advance cal curveToday (2, Days) Following False           q <- Quote.simpleQuote 0.03           qVal <- Quote.value q-          helpers <- fromList <$> mapM (\i -> depositRateHelper q (i, Months) 2 cal ModifiedFollowing True euriborDC) [1 .. 5 :: Int]-          -- Deliberately *not* coincident with the primary monthly pillars above (45/75/105-          -- days sit between the 1m/2m/3m/4m pillars): reusing the same dates as additionalDates-          -- gave GlobalBootstrap two unknowns pinned to the same time, which visibly perturbed-          -- the first three pillars' solved values (a first version of this test hit that).+          helpers <- fromList <$> mapM (\i -> depositRateHelper q (DepositTenor (i, Months) 2 cal ModifiedFollowing True euriborDC)) [1 .. 5 :: Int]+          -- Keep extra dates between pillars so GlobalBootstrap has distinct unknowns.           extraDates <- mapM (\d -> advance cal settleFix (d, Days) ModifiedFollowing True) [45, 75, 105 :: Int]-          -- settl=2, matching the deposit helpers' own fixingDays: otherwise the curve's-          -- reference date is curveToday rather than settleFix, and the simple-compounding-          -- relation below (which is anchored at settleFix, the deposits' own start) picks up a-          -- spurious 2-day discounting gap -- confirmed by comparing against a settl=0 curve,-          -- whose discount() came out identical to a plain (non-functor) curve but consistently-          -- off from the hand-computed expectation.+          -- Match the helpers' two-day settlement so their start date anchors the discount.           curve <- piecewiseYieldCurve (SettlementDays 2 cal) helpers euriborDC []-            (GlobalSimpleZeroLinearFull helpers extraDates 1.0e-10) False+            (GlobalSimpleZeroLinearFull helpers extraDates 1.0e-10 [] Nothing) False           mapM_ (\i -> do               pillar <- advance cal settleFix (i, Months) ModifiedFollowing True-              -- Actual360's own year fraction: no dedicated QuantLib.yearFraction binding-              -- exists (CLAUDE.md's "bind few inspectors" rule), and diffDays/360 reproduces it-              -- exactly since Actual360 is a plain actual-days-over-360 day counter.+              -- Actual360's year fraction is actual days divided by 360.               let tau = fromIntegral (diffDays pillar settleFix) / 360 :: Double               df <- discount curve (DatePoint pillar) False               -- simple-compounding deposit relation: df = 1 / (1 + qVal * tau)@@ -1426,7 +1918,7 @@           settleFix <- advance cal curveToday (2, Days) Following False           q <- Quote.simpleQuote 0.03           qVal <- Quote.value q-          helpers <- fromList <$> mapM (\i -> depositRateHelper q (i, Months) 2 cal ModifiedFollowing True euriborDC) [1 .. 5 :: Int]+          helpers <- fromList <$> mapM (\i -> depositRateHelper q (DepositTenor (i, Months) 2 cal ModifiedFollowing True euriborDC)) [1 .. 5 :: Int]           curve <- piecewiseYieldCurve (SettlementDays 2 cal) helpers euriborDC []             (Local LForwardRate 2 True 1.0e-10 0.3 0.7 True) False           mapM_ (\i -> do@@ -1446,7 +1938,7 @@           settleFix <- advance cal curveToday (2, Days) Following False           q <- Quote.simpleQuote 0.03           qVal <- Quote.value q-          helpers <- fromList <$> mapM (\i -> depositRateHelper q (i, Months) 2 cal ModifiedFollowing True euriborDC) [1 .. 5 :: Int]+          helpers <- fromList <$> mapM (\i -> depositRateHelper q (DepositTenor (i, Months) 2 cal ModifiedFollowing True euriborDC)) [1 .. 5 :: Int]           -- additionalDates for GlobalSimpleZeroLinearFull below: deliberately not coincident           -- with the primary monthly pillars, same reasoning as the GlobalBootstrapFull test above.           extraDates <- mapM (\d -> advance cal settleFix (d, Days) ModifiedFollowing True) [45, 75, 105 :: Int]@@ -1458,18 +1950,15 @@                 ) ([1 .. 5] :: [Int])               checkReference reference = do                 piecewiseYieldCurve reference helpers euriborDC [] (Iterative ForwardRate Linear defaultIterativeBootstrapOpts) False >>= checkCurve-                piecewiseYieldCurve reference helpers euriborDC [] (GlobalDiscountLogLinear 1.0e-10 []) False >>= checkCurve-                piecewiseYieldCurve reference helpers euriborDC [] (GlobalSimpleZeroLinear 1.0e-10 []) False >>= checkCurve-                piecewiseYieldCurve reference helpers euriborDC [] (GlobalSimpleZeroLinearFull helpers extraDates 1.0e-10) False >>= checkCurve-                piecewiseYieldCurve reference helpers euriborDC [] (GlobalForwardRateLinear 1.0e-10 []) False >>= checkCurve-                piecewiseYieldCurve reference helpers euriborDC [] (GlobalZeroYieldLinear 1.0e-10 []) False >>= checkCurve+                piecewiseYieldCurve reference helpers euriborDC [] (GlobalDiscountLogLinear 1.0e-10 [] Nothing) False >>= checkCurve+                piecewiseYieldCurve reference helpers euriborDC [] (GlobalSimpleZeroLinear 1.0e-10 [] Nothing) False >>= checkCurve+                piecewiseYieldCurve reference helpers euriborDC [] (GlobalSimpleZeroLinearFull helpers extraDates 1.0e-10 [] Nothing) False >>= checkCurve+                piecewiseYieldCurve reference helpers euriborDC [] (GlobalForwardRateLinear 1.0e-10 [] Nothing) False >>= checkCurve+                piecewiseYieldCurve reference helpers euriborDC [] (GlobalZeroYieldLinear 1.0e-10 [] Nothing) False >>= checkCurve                 piecewiseYieldCurve reference helpers euriborDC [] (Local LForwardRate 2 True 1.0e-10 0.3 0.7 True) False >>= checkCurve           mapM_ checkReference ([ReferenceDate settleFix, SettlementDays 2 cal] :: [Reference]) -      -- issue #15: GlobalBootstrap widened to ForwardRate/Linear and ZeroYield/Linear, the other-      -- two IterativeBootstrap traits paired with the cheapest interpolator. Same-      -- reprices-its-own-instruments property as the SimpleZeroYield GlobalBootstrap test above,-      -- through the common piecewiseYieldCurve dispatcher.+      -- ForwardRate/Linear and ZeroYield/Linear must also reprice their input instruments.       it "ForwardRate/ZeroYield GlobalBootstrap curves reprice to the same pillar discount factors as Discount" $         Context.keepingSettingsGc $ do           Context.setEvaluationDate (Just curveToday)@@ -1477,13 +1966,13 @@           euriborDC <- dayCounter (Actual360 False)           settleFix <- advance cal curveToday (2, Days) Following False           q <- Quote.simpleQuote 0.03-          helpers <- fromList <$> mapM (\i -> depositRateHelper q (i, Months) 2 cal ModifiedFollowing True euriborDC) [1 .. 5 :: Int]+          helpers <- fromList <$> mapM (\i -> depositRateHelper q (DepositTenor (i, Months) 2 cal ModifiedFollowing True euriborDC)) [1 .. 5 :: Int]           discountCurve <- piecewiseYieldCurve (SettlementDays 0 cal) helpers euriborDC []-            (GlobalDiscountLogLinear 1.0e-10 []) False+            (GlobalDiscountLogLinear 1.0e-10 [] Nothing) False           forwardCurve <- piecewiseYieldCurve (SettlementDays 0 cal) helpers euriborDC []-            (GlobalForwardRateLinear 1.0e-10 []) False+            (GlobalForwardRateLinear 1.0e-10 [] Nothing) False           zeroCurve <- piecewiseYieldCurve (SettlementDays 0 cal) helpers euriborDC []-            (GlobalZeroYieldLinear 1.0e-10 []) False+            (GlobalZeroYieldLinear 1.0e-10 [] Nothing) False           mapM_ (\i -> do               pillar <- advance cal settleFix (i, Months) ModifiedFollowing True               dfDiscount <- discount discountCurve (DatePoint pillar) False@@ -1577,6 +2066,29 @@           npvFlat <- mkNpv flat           npvPiecewise `shouldSatisfy` closePrec npvFlat tolerance +    describe "extended Black variance surface" $+      it "rejects QuantLib <= 1.43 before entering its out-of-bounds implementation" $+        Context.keepingSettingsGc $ do+          let refDate = 15 `january` 2024+          Context.setEvaluationDate (Just refDate)+          d1 <- addPeriod refDate (1, Years)+          d2 <- addPeriod refDate (2, Years)+          cal <- Calendar.calendar TARGET+          dc <- dayCounter Actual365FixedStandard+          quotes <- mapM Quote.simpleQuote [0.20, 0.21, 0.22, 0.23]+          let vols = either error id $ objectMatrix 2 2 quotes+              construct = Vol.extendedBlackVarianceSurface refDate cal [d1, d2] [90, 110] vols dc+                Vol.ExtendedBlackVarianceSurfaceConstantExtrapolation+                Vol.ExtendedBlackVarianceSurfaceConstantExtrapolation+          if quantLibAtMost143+            then construct `shouldThrow` \case+              Context.CPlusPlusException message ->+                "implementation accesses the volatility grid out of bounds" `isInfixOf` message+              _ -> False+            else do+              surface <- construct+              Vol.blackVol surface (DatePoint d1) 90 False `shouldReturn` 0.20+     -- BlackVolatilitySurfaceDelta: cached fixture ported from upstream's     -- testBlackVolSurfaceDeltaNonConstantVol (test-suite/blackvolsurfacedelta.cpp), which     -- exercises blackVolSmile directly -- the one binding-specific getter this class adds over@@ -1862,8 +2374,13 @@                     swapIndexBase shortSwapIndexBase False parametersGuess                     -- beta fixed: 3 strikeSpreads can't identify 4 free SABR params                     -- ("less functions than available variables"), so pin beta at the guess.-                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing+                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing False           v <- Vol.swaptionVolatility cube (Vol.OptionDate (10 `december` 2013)) (Vol.SwapTenor (2, Years)) 0.03 False+          when quantLibAtMost143 $+            Vol.sabrSwaptionVolatilityCube atmVol optionTenors swapTenors strikeSpreads volSpreads+              swapIndexBase shortSwapIndexBase False parametersGuess+              False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing True+              `shouldThrow` unsupportedQuantLib144 "sabrSwaptionVolatilityCube"           -- SABR calibration is a least-squares fit, not exact recovery, so this is deliberately a           -- much looser tolerance than the exact-grid-recovery checks above -- don't tighten it.           abs (v - flatVol) `shouldSatisfy` (< 1.0e-2)@@ -1882,7 +2399,7 @@                     -- ConstantSwaptionVolatility, as this fixture's atmVol is -- it would need a                     -- discrete grid structure (e.g. swaptionVolatilityMatrix) instead. Exercising                     -- that path is out of scope for this shape/sanity test.-                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing+                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing False           -- trigger calibration (lazy -- see the shim comment on qlSabrSwaptionVolatilityCube)           _ <- Vol.swaptionVolatility cube (Vol.OptionDate (10 `december` 2013)) (Vol.SwapTenor (2, Years)) 0.03 False           let n = fromIntegral (length optionTenors * length swapTenors)@@ -1916,7 +2433,7 @@                     swapIndexBase shortSwapIndexBase False parametersGuess                     -- beta fixed: 3 strikeSpreads can't identify 4 free SABR params                     -- ("less functions than available variables"), so pin beta at the guess.-                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing+                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing False           k <- Vol.atmStrike cube (Vol.AtmStrikeTenor (1, Years)) (2 :: Word, Years)           k `shouldSatisfy` (\x -> x > -0.05 && x < 0.20)           kAtDate <- Vol.atmStrike cube (Vol.AtmStrikeDate (10 `december` 2013)) (2 :: Word, Years)@@ -1933,7 +2450,7 @@             Vol.sabrSwaptionVolatilityCube atmVol optionTenors swapTenors strikeSpreads volSpreads               swapIndexBase shortSwapIndexBase False parametersGuess               False True False False False Nothing Nothing False 50 False 0.0001-              (Just endCriteria) (Just optMethod)+              (Just endCriteria) (Just optMethod) False           k <- Vol.atmStrike cube (Vol.AtmStrikeTenor (1, Years)) (2 :: Word, Years)           k `shouldSatisfy` (\x -> x > -0.05 && x < 0.20)       -- NoArbSabrSwaptionVolatilityCube is the same XabrSwaptionVolatilityCube construction one@@ -1949,7 +2466,7 @@                     swapIndexBase shortSwapIndexBase False parametersGuess                     -- beta fixed: 3 strikeSpreads can't identify 4 free SABR params                     -- ("less functions than available variables"), so pin beta at the guess.-                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing+                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing False           v <- Vol.swaptionVolatility cube (Vol.OptionDate (10 `december` 2013)) (Vol.SwapTenor (2, Years)) 0.03 False           -- least-squares fit, not exact recovery -- same looser tolerance as the SABR cube check.           abs (v - flatVol) `shouldSatisfy` (< 1.0e-2)@@ -1959,11 +2476,31 @@           (_, _, atmVol, swapIndexBase, shortSwapIndexBase, volSpreads, parametersGuess) <- mkFixture           cube <- Vol.noArbSabrSwaptionVolatilityCube atmVol optionTenors swapTenors strikeSpreads volSpreads                     swapIndexBase shortSwapIndexBase False parametersGuess-                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing+                    False True False False False Nothing Nothing False 50 False 0.0001 Nothing Nothing False           k <- Vol.atmStrike cube (Vol.AtmStrikeTenor (1, Years)) (2 :: Word, Years)           k `shouldSatisfy` (\x -> x > -0.05 && x < 0.20)           kAtDate <- Vol.atmStrike cube (Vol.AtmStrikeDate (10 `december` 2013)) (2 :: Word, Years)           kAtDate `shouldSatisfy` (\x -> x > -0.05 && x < 0.20)++      -- The same fixture with a fifth (gamma) guess column; gamma = 1 approximates SABR, and beta+      -- and gamma stay fixed because three strikes cannot identify five parameters.+      it "zabrSwaptionVolatilityCube reprices close to its own flat ATM input and reports ZABR nodes" $+        Context.keepingSettingsGc $ do+          (_, _, atmVol, swapIndexBase, shortSwapIndexBase, volSpreads, _) <- mkFixture+          let nodeCount = length optionTenors * length swapTenors+          guessQuotes <- concat <$> replicateM nodeCount (mapM Quote.simpleQuote ([0.03, 0.5, 0.3, 0.0, 1.0] :: [Double]))+          let parametersGuess = either error id $ objectMatrix (fromIntegral nodeCount) 5 guessQuotes+          cube <- Vol.zabrSwaptionVolatilityCube atmVol optionTenors swapTenors strikeSpreads volSpreads+                    swapIndexBase shortSwapIndexBase False parametersGuess+                    False True False False True False Nothing Nothing False 50 False 0.0001 Nothing Nothing False+          v <- Vol.swaptionVolatility cube (Vol.OptionDate (10 `december` 2013)) (Vol.SwapTenor (2, Years)) 0.03 False+          abs (v - flatVol) `shouldSatisfy` (< 1.0e-2)+          sparse <- Vol.zabrSparseParameters cube+          realMatrixRows sparse `shouldBe` fromIntegral nodeCount+          -- 2 metadata columns + 5 ZABR params + forward/error/maxError/endCriteria+          realMatrixColumns sparse `shouldBe` 11+          k <- Vol.atmStrike cube (Vol.AtmStrikeTenor (1, Years)) (2 :: Word, Years)+          k `shouldSatisfy` (\x -> x > -0.05 && x < 0.20)        it "interpolatedSwaptionVolatilityCube reprices close to its own flat ATM input at zero spread" $         Context.keepingSettingsGc $ do
+ test/hspec/QuantLib/Spec/TermStructure/Inflation.hs view
@@ -0,0 +1,184 @@+-- Interpolated zero inflation curves and construction-time price seasonality. Expected+-- seasonal rates follow MultiplicativePriceSeasonality::seasonalityCorrection on a flat curve.+module QuantLib.Spec.TermStructure.Inflation (spec) where++import Control.Monad(forM_)+import Data.List.NonEmpty(fromList)+import Data.Time.Calendar(Day, fromGregorian, addGregorianMonthsClip, diffDays)+import Test.Hspec++import qualified QuantLib.Context as Context+import QuantLib.Currency(currency, Ccy(GBP))+import QuantLib.Index(addFixing)+import QuantLib.Index.Inflation(customRegion, customZeroInflationIndex, customYoyInflationIndex)+import qualified QuantLib.InterestRate as IR+import QuantLib.Math(Interpolation(..), Approximation(..))+import QuantLib.Quote(simpleQuote)+import QuantLib.TermStructure.Inflation+import QuantLib.TermStructure.Yield(PillarChoice(..), Reference(..), flatForward)+import QuantLib.Time.Calendar+import QuantLib.Time.Schedule++import QuantLib.Spec.Helpers(closePrec)++baseDate :: Day+baseDate = fromGregorian 2020 1 1++monthly :: Integer -> Day+monthly k = addGregorianMonthsClip k baseDate++-- A zero inflation curve bootstrapped from 2Y and 10Y zero-coupon swaps on a custom monthly+-- index with a linear fixing history, the swaps' dates given by 'period' from the evaluation date+-- and each maturity. Returns the curve's zero rate a year out.+zeroCouponCurveRate :: Day -> (Day -> Day -> InflationSwapPeriod) -> CPIInterpolationType -> IO Double+zeroCouponCurveRate evalDate period interp = do+  gbp <- currency GBP+  r <- customRegion "InflationSwapHelper Test" "ISHT"+  cal <- calendar Null+  dc <- dayCounter Actual365FixedStandard+  zii0 <- customZeroInflationIndex "ISHT Zero" r False Monthly (1, Months) gbp Nothing+  fixingDates <- mapM (\n -> advance cal evalDate (n, Months) Unadjusted False) [-96 .. 12 :: Int]+  forM_ (zip [1 :: Double ..] fixingDates) $ \(i, d) -> addFixing zii0 d (100.0 + i * 0.1) False+  helpers <- mapM (\(n, rate) -> do+      m <- advance cal evalDate (n, Years) Unadjusted False+      q <- simpleQuote rate+      zeroCouponInflationSwapHelper q (2, Months) (period evalDate m) cal Unadjusted dc zii0 interp LastRelevantDate Nothing)+    [(2, 0.03), (10, 0.025) :: (Int, Double)]+  baseDate' <- advance cal evalDate (-2, Months) Unadjusted False+  curve <- piecewiseZeroInflationCurve evalDate baseDate' Monthly dc (fromList helpers) Nothing Linear+  zeroRate curve (addGregorianMonthsClip 12 evalDate) False++-- The same for a year-on-year curve from 2Y and 5Y swaps discounted on a flat nominal curve,+-- returning its year-on-year rate a year out.+yearOnYearCurveRate :: Day -> (Day -> Day -> InflationSwapPeriod) -> IO Double+yearOnYearCurveRate evalDate period = do+  gbp <- currency GBP+  r <- customRegion "InflationSwapHelper Test" "ISHT"+  cal <- calendar Null+  dc <- dayCounter Actual365FixedStandard+  yii0 <- customYoyInflationIndex "ISHT YoY" r False Monthly (1, Months) gbp Nothing+  fixingDates <- mapM (\n -> advance cal evalDate (n, Months) Unadjusted False) [-96 .. 12 :: Int]+  forM_ (zip [1 :: Double ..] fixingDates) $ \(i, d) -> addFixing yii0 d (0.03 + i * 0.0001) False+  nominalQ <- simpleQuote 0.02+  nominalCurve <- flatForward (ReferenceDate evalDate) nominalQ dc IR.Continuous Annual+  helpers <- mapM (\(n, rate) -> do+      m <- advance cal evalDate (n, Years) Unadjusted False+      q <- simpleQuote rate+      yearOnYearInflationSwapHelper q (3, Months) (period evalDate m) cal Unadjusted dc yii0 CPIFlat nominalCurve LastRelevantDate Nothing)+    [(2, 0.03), (5, 0.028) :: (Int, Double)]+  baseDate' <- advance cal evalDate (-2, Months) Unadjusted False+  curve <- piecewiseYoyInflationCurve evalDate baseDate' 0.03 Monthly dc (fromList helpers) Nothing Linear+  yoyRate curve (addGregorianMonthsClip 12 evalDate) False++spec :: Spec+spec = do+ describe "zero-coupon inflation swap helpers" $ do+  -- Mid-month, so a linearly interpolated CPI differs from the month's flat fixing.+  let evalDate = fromGregorian 2024 1 15++  it "InflationSwapBetweenDates from the evaluation date matches InflationSwapToMaturity" $ Context.keepingSettingsGc $ do+    Context.setEvaluationDate (Just evalDate)+    -- Flat observation: the dated form takes its pillar's interpolation weight from the start date+    -- rather than the maturity, which only matters when the observation is interpolated.+    toMaturity <- zeroCouponCurveRate evalDate (const InflationSwapToMaturity) CPIFlat+    betweenDates <- zeroCouponCurveRate evalDate InflationSwapBetweenDates CPIFlat+    betweenDates `shouldSatisfy` closePrec toMaturity 1.0e-12++  it "a year-on-year InflationSwapBetweenDates from the evaluation date matches InflationSwapToMaturity" $ Context.keepingSettingsGc $ do+    Context.setEvaluationDate (Just evalDate)+    toMaturity <- yearOnYearCurveRate evalDate (const InflationSwapToMaturity)+    betweenDates <- yearOnYearCurveRate evalDate InflationSwapBetweenDates+    betweenDates `shouldSatisfy` closePrec toMaturity 1.0e-12++  it "a zero-coupon helper reads its swap rate on a curve it did not bootstrap" $ Context.keepingSettingsGc $ do+    Context.setEvaluationDate (Just evalDate)+    gbp <- currency GBP+    r <- customRegion "InflationSwapHelper Test" "ISHT"+    cal <- calendar Null+    dc <- dayCounter Actual365FixedStandard+    zii0 <- customZeroInflationIndex "ISHT Zero" r False Monthly (1, Months) gbp Nothing+    fixingDates <- mapM (\n -> advance cal evalDate (n, Months) Unadjusted False) [-96 .. 12 :: Int]+    forM_ (zip [1 :: Double ..] fixingDates) $ \(i, d) -> addFixing zii0 d (100.0 + i * 0.1) False+    let quotes = [(2, 0.03), (10, 0.025)] :: [(Int, Double)]+        helperAt rate n = do+          m <- advance cal evalDate (n, Years) Unadjusted False+          q <- simpleQuote rate+          zeroCouponInflationSwapHelper q (2, Months) (InflationSwapToMaturity m) cal Unadjusted dc zii0 CPIFlat LastRelevantDate Nothing+    helpers <- mapM (\(n, rate) -> helperAt rate n) quotes+    baseDate' <- advance cal evalDate (-2, Months) Unadjusted False+    curve <- piecewiseZeroInflationCurve evalDate baseDate' Monthly dc (fromList helpers) Nothing Linear+    forM_ quotes $ \(n, rate) -> do+      fresh <- helperAt 0 n+      zeroCouponInflationSwapImpliedQuoteOn fresh curve >>= (`shouldSatisfy` closePrec rate 1.0e-8)++  it "a year-on-year helper reads its swap rate on a curve it did not bootstrap" $ Context.keepingSettingsGc $ do+    Context.setEvaluationDate (Just evalDate)+    gbp <- currency GBP+    r <- customRegion "InflationSwapHelper Test" "ISHT"+    cal <- calendar Null+    dc <- dayCounter Actual365FixedStandard+    yii0 <- customYoyInflationIndex "ISHT YoY" r False Monthly (1, Months) gbp Nothing+    fixingDates <- mapM (\n -> advance cal evalDate (n, Months) Unadjusted False) [-96 .. 12 :: Int]+    forM_ (zip [1 :: Double ..] fixingDates) $ \(i, d) -> addFixing yii0 d (0.03 + i * 0.0001) False+    nominalQ <- simpleQuote 0.02+    nominalCurve <- flatForward (ReferenceDate evalDate) nominalQ dc IR.Continuous Annual+    let quotes = [(2, 0.03), (5, 0.028)] :: [(Int, Double)]+        helperAt rate n = do+          m <- advance cal evalDate (n, Years) Unadjusted False+          q <- simpleQuote rate+          yearOnYearInflationSwapHelper q (3, Months) (InflationSwapToMaturity m) cal Unadjusted dc yii0 CPIFlat nominalCurve LastRelevantDate Nothing+    helpers <- mapM (\(n, rate) -> helperAt rate n) quotes+    baseDate' <- advance cal evalDate (-2, Months) Unadjusted False+    curve <- piecewiseYoyInflationCurve evalDate baseDate' 0.03 Monthly dc (fromList helpers) Nothing Linear+    forM_ quotes $ \(n, rate) -> do+      fresh <- helperAt 0 n+      yearOnYearInflationSwapImpliedQuoteOn fresh curve >>= (`shouldSatisfy` closePrec rate 1.0e-8)++  -- The shim once mapped the interpolation with `== 0 ? Flat : Linear`, but CPIFlat is 1, so every+  -- helper interpolated linearly and these two curves were the same.+  it "honours flat against linear observation interpolation" $ Context.keepingSettingsGc $ do+    Context.setEvaluationDate (Just evalDate)+    flat <- zeroCouponCurveRate evalDate (const InflationSwapToMaturity) CPIFlat+    linear <- zeroCouponCurveRate evalDate (const InflationSwapToMaturity) CPILinear+    abs (flat - linear) `shouldSatisfy` (> 1.0e-6)++ describe "zero inflation term structures" $ do+  it "interpolatedZeroInflationCurve reproduces its node rates" $ Context.keepingSettingsGc $ do+    Context.setEvaluationDate (Just baseDate)+    dc <- dayCounter Actual365FixedStandard+    let nodes = [(baseDate, 0.010), (monthly 12, 0.015), (monthly 36, 0.020), (monthly 120, 0.025)]+    forM_ [Linear, Cubic Kruger] $ \i -> do+      curve <- interpolatedZeroInflationCurve baseDate (fromList nodes) Monthly dc Nothing i+      forM_ (drop 1 nodes) $ \(d, r) -> zeroRate curve d False >>= (`shouldSatisfy` closePrec r 1.0e-10)++  it "applies multiplicative price seasonality normalized to the curve's base date" $ Context.keepingSettingsGc $ do+    Context.setEvaluationDate (Just baseDate)+    dc <- dayCounter Actual365FixedStandard+    let flatRate = 0.02+        nodes = [(baseDate, flatRate), (monthly 120, flatRate)]+        factors = [1.0, 1.01, 1.02, 1.015, 1.005, 0.995, 0.99, 0.985, 0.99, 1.0, 1.005, 1.01] :: [Double]+        curveWith s = interpolatedZeroInflationCurve baseDate (fromList nodes) Monthly dc s Linear+    plain <- curveWith Nothing+    unit <- curveWith (Just (MultiplicativePriceSeasonality baseDate Monthly (replicate 12 1.0)))+    seasonal <- curveWith (Just (MultiplicativePriceSeasonality baseDate Monthly factors))+    forM_ [1 .. 11 :: Int] $ \k -> do+      let d = monthly (fromIntegral k)+          t = fromIntegral (diffDays d baseDate) / 365+          -- factors !! 0 is 1, so the base-date normalization is the factor itself+          expected = (1 + flatRate) * (factors !! k) ** (1 / t) - 1+      r <- zeroRate plain d False+      r `shouldSatisfy` closePrec flatRate 1.0e-12+      zeroRate unit d False >>= (`shouldSatisfy` closePrec r 1.0e-12)+      zeroRate seasonal d False >>= (`shouldSatisfy` closePrec expected 1.0e-10)++    kerkhof <- curveWith (Just (KerkhofSeasonality baseDate factors))+    rk <- zeroRate kerkhof (monthly 5) False+    abs (rk - flatRate) `shouldSatisfy` (> 1.0e-6)++  it "rejects multi-year seasonality inconsistent at whole years from the base date" $ Context.keepingSettingsGc $ do+    Context.setEvaluationDate (Just baseDate)+    dc <- dayCounter Actual365FixedStandard+    let nodes = [(baseDate, 0.02), (monthly 120, 0.02)]+        factors = replicate 12 1.0 ++ replicate 12 1.1+    interpolatedZeroInflationCurve baseDate (fromList nodes) Monthly dc+      (Just (MultiplicativePriceSeasonality baseDate Monthly factors)) Linear `shouldThrow` anyException
test/hspec/QuantLib/Spec/TermStructure/InflationVolatility.hs view
@@ -96,18 +96,8 @@ realGrid :: Word -> Word -> V.Vector Double -> RealMatrix realGrid rows cols = either error id . realMatrixFromVector rows cols --- |Vol slices at the surface's base date plus 1\/3 years, across the 11-strike union of--- 'cStrikesEU'\/'fStrikesEU'. NOT upstream's own cached @volATyear1@\/@volATyear3@ (those are--- @{0.0129, 0.0094, ...}@\/@{0.0080, 0.0058, ...}@) -- those values are stale against the--- QuantLib 1.43 actually installed here, off by several times this test's tolerance. Confirmed--- via an independent, minimal C++ program (bypassing hasquant's Haskell layer entirely) built--- straight from @setup()@\/@setupPriceSurface()@\/@testYoYPriceSurfaceToVol@'s own C++ verbatim,--- linked against the same installed @libQuantLib@: it reproduces exactly these values, not--- upstream's cached ones, ruling out a hasquant-side bug and pointing at behavior that changed--- upstream since this fixture was written (2009) without the cached numbers being refreshed ----- consistent with both 'KInterpolatedYoYOptionletVolatilitySurface' and--- 'InterpolatedYoYOptionletStripper' carrying an explicit upstream doc comment of their own,--- @\\bug Tests currently fail@.+-- |Vol slices at the surface's base date plus 1\/3 years across the union of+-- 'cStrikesEU'\/'fStrikesEU'. QuantLib 1.43 yields these values from the upstream fixture. volATyear1, volATyear3 :: [Double] volATyear1 = [0.0135064, 0.0098650, 0.0087791, 0.0077453, 0.0067549, 0.0060420, 0.0043860, 0.0048649, 0.0056425, 0.0067729, 0.0103381] volATyear3 = [0.0085961, 0.0062788, 0.0055840, 0.0049221, 0.0042875, 0.0038286, 0.0027751, 0.0030795, 0.0035763, 0.0042978, 0.0065660]@@ -131,7 +121,7 @@   baseDate <- advance cal eval (-1, Months) Unadjusted False   capStartDate <- advance cal eval (-2, Months) ModifiedFollowing False   yoyDates <- (baseDate :) <$> mapM (\n -> advance cal capStartDate (n, Years) ModifiedFollowing False) [1 .. length yoyEURrates - 1]-  yoyEU <- interpolatedYoyInflationCurve eval (fromList (zip yoyDates yoyEURrates)) Monthly dc Linear+  yoyEU <- interpolatedYoyInflationCurve eval (fromList (zip yoyDates yoyEURrates)) Monthly dc Nothing Linear    zii <- zeroInflationIndex EUHICP   yoyIndexEU <- yoyInflationIndexFromZero zii (Just yoyEU)@@ -155,8 +145,8 @@     capStartDate <- advance cal eval (-2, Months) ModifiedFollowing False     yoyDates <- (baseDate :) <$> mapM (\n -> advance cal capStartDate (n, Years) ModifiedFollowing False) [1 .. length yoyEURrates - 1]     let mid = addDays 180 (yoyDates !! 1)-    yoyLinear <- interpolatedYoyInflationCurve eval (fromList (zip yoyDates yoyEURrates)) Monthly dc Linear-    yoyCubic <- interpolatedYoyInflationCurve eval (fromList (zip yoyDates yoyEURrates)) Monthly dc (Cubic Kruger)+    yoyLinear <- interpolatedYoyInflationCurve eval (fromList (zip yoyDates yoyEURrates)) Monthly dc Nothing Linear+    yoyCubic <- interpolatedYoyInflationCurve eval (fromList (zip yoyDates yoyEURrates)) Monthly dc Nothing (Cubic Kruger)     rLinear <- yoyRate yoyLinear mid True     rCubic <- yoyRate yoyCubic mid True     -- both interpolators agree at the nodes themselves; a mid-node query is where a genuinely@@ -218,7 +208,7 @@     baseDate <- advance cal eval (-1, Months) Unadjusted False     capStartDate <- advance cal eval (-2, Months) ModifiedFollowing False     yoyDates <- (baseDate :) <$> mapM (\n -> advance cal capStartDate (n, Years) ModifiedFollowing False) [1 .. length yoyEURrates - 1]-    yoyEU <- interpolatedYoyInflationCurve eval (fromList (zip yoyDates yoyEURrates)) Monthly dc Linear+    yoyEU <- interpolatedYoyInflationCurve eval (fromList (zip yoyDates yoyEURrates)) Monthly dc Nothing Linear     zii <- zeroInflationIndex EUHICP     yoyIndexEU <- yoyInflationIndexFromZero zii (Just yoyEU) @@ -232,12 +222,8 @@   -- construction/sanity check only, same reasoning as the spot-checks above. LogCubic is   -- deliberately not exercised: it can't back this template at all (see the comment on the   -- LogCubic case in qlInflationVol.cpp's dispatchKInterpolatedYoYOptionletVolatilitySurface).-  -- Cubic/LogLinear are also skipped here: this fixture's sparse (3-maturity) per-strike vol-  -- bootstrap (PiecewiseYoYOptionletVolatilityCurve, one per strike, see initialize() in-  -- interpolatedyoyoptionletstripper.hpp) fails to converge under Cubic's default-constructed-  -- Kruger derivative estimate with so few points ("root not bracketed") -- a real numerical-  -- fragility of the bootstrap with this data, not a hasquant bug. BackwardFlat has no derivative-  -- estimation so it bootstraps fine and still exercises a genuinely different interpolator.+  -- This sparse fixture does not converge under Cubic; BackwardFlat exercises another+  -- interpolator without derivative estimation.   it "kInterpolatedYoyOptionletVolatilitySurfaceUnitDisplacedBlack: a non-Linear interpolation builds and queries" $ Context.keepingSettingsGc $ do     (_, cal, dc, nominalEUR, yoyIndexEU, priceSurfEU) <- setup 
test/main/QuantLib/MainTest.hs view
@@ -11,8 +11,10 @@ import qualified QuantLib.Spec.CurrencyAndDayCounter as CurrencyAndDayCounter import qualified QuantLib.Spec.Commodity as Commodity import qualified QuantLib.Spec.InterestRateAndCashFlow as InterestRateAndCashFlow+import qualified QuantLib.Spec.CashFlow.FxReset as FxReset import qualified QuantLib.Spec.TermStructure as TermStructure import qualified QuantLib.Spec.TermStructure.Commodity as TermStructureCommodity+import qualified QuantLib.Spec.TermStructure.Inflation as TermStructureInflation import qualified QuantLib.Spec.TermStructure.InflationVolatility as TermStructureInflationVolatility import qualified QuantLib.Spec.Index.Commodity as IndexCommodity import qualified QuantLib.Spec.Index.Inflation as IndexInflation@@ -26,8 +28,11 @@ import qualified QuantLib.Spec.Instrument.InflationCapFloor as InstrumentInflationCapFloor import qualified QuantLib.Spec.Instrument.Option as InstrumentOption import qualified QuantLib.Spec.Instrument.Swap as InstrumentSwap+import qualified QuantLib.Spec.Instrument.MtmCrossCurrency as MtmCrossCurrency import qualified QuantLib.Spec.Matrix as Matrix+import qualified QuantLib.Spec.Method as Method import qualified QuantLib.Spec.Model as Model+import qualified QuantLib.Spec.Model.RoughHeston as RoughHeston import qualified QuantLib.Spec.PricingEngine as PricingEngine import qualified QuantLib.Spec.Process as Process import qualified QuantLib.Spec.Quote as Quote@@ -49,8 +54,10 @@     CurrencyAndDayCounter.spec     Commodity.spec     InterestRateAndCashFlow.spec evalDate+    FxReset.spec     TermStructure.spec     TermStructureCommodity.spec+    TermStructureInflation.spec     TermStructureInflationVolatility.spec     IndexCommodity.spec     IndexInflation.spec@@ -64,8 +71,11 @@     InstrumentInflationCapFloor.spec     InstrumentOption.spec     InstrumentSwap.spec+    MtmCrossCurrency.spec     Matrix.spec+    Method.spec     Model.spec+    RoughHeston.spec     PricingEngine.spec     Process.spec     Quote.spec
tools/ql-methods-1.43.txt view
@@ -141,7 +141,7 @@ |x|ql/cashflows/conundrumpricer.hpp|Real NumericHaganPricer::refineIntegration(Real integralValue, const ConundrumIntegrand & integrand) const; |v|ql/cashflows/conundrumpricer.hpp|AnalyticHaganPricer::AnalyticHaganPricer(const Handle<SwaptionVolatilityStructure> & swaptionVol, GFunctionFactory::YieldCurveModel modelOfYieldCurve, const Handle<Quote> & meanReversion); |x|ql/cashflows/coupon.hpp|Coupon::Coupon(const Date & paymentDate, Real nominal, const Date & accrualStartDate, const Date & accrualEndDate, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const Date & exCouponDate = Date());-|x|ql/cashflows/coupon.hpp|Real Coupon::nominal() const;+|v|ql/cashflows/coupon.hpp|Real Coupon::nominal() const; |x|ql/cashflows/coupon.hpp|const Date & Coupon::accrualStartDate() const; |x|ql/cashflows/coupon.hpp|const Date & Coupon::accrualEndDate() const; |x|ql/cashflows/coupon.hpp|const Date & Coupon::referencePeriodStart() const;@@ -326,9 +326,9 @@ | |ql/cashflows/fixedratecoupon.hpp|void accept(AcyclicVisitor & v); |v|ql/cashflows/floatingratecoupon.hpp|FloatingRateCoupon::FloatingRateCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<InterestRateIndex> & index, Real gearing = 1.0, Spread spread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), DayCounter dayCounter = DayCounter(), bool isInArrears = false, const Date & exCouponDate = Date(), BusinessDayConvention fixingConvention = Preceding); |v|ql/cashflows/floatingratecoupon.hpp|Real FloatingRateCoupon::price(const Handle<YieldTermStructure> & discountingCurve) const;-|x|ql/cashflows/floatingratecoupon.hpp|const ext::shared_ptr<InterestRateIndex> & FloatingRateCoupon::index() const;+|v|ql/cashflows/floatingratecoupon.hpp|const ext::shared_ptr<InterestRateIndex> & FloatingRateCoupon::index() const; |x|ql/cashflows/floatingratecoupon.hpp|Natural FloatingRateCoupon::fixingDays() const;-|x|ql/cashflows/floatingratecoupon.hpp|Date FloatingRateCoupon::fixingDate() const;+|v|ql/cashflows/floatingratecoupon.hpp|Date FloatingRateCoupon::fixingDate() const; |x|ql/cashflows/floatingratecoupon.hpp|Real FloatingRateCoupon::gearing() const; |x|ql/cashflows/floatingratecoupon.hpp|Spread FloatingRateCoupon::spread() const; |x|ql/cashflows/floatingratecoupon.hpp|Rate FloatingRateCoupon::indexFixing() const;@@ -877,10 +877,10 @@ | |ql/experimental/basismodels/tenoroptionletvts.hpp|Real CorrelationStructure::operator()(const Time & start1, const Time & start2) const; | |ql/experimental/basismodels/tenoroptionletvts.hpp|TwoParameterCorrelation::TwoParameterCorrelation(ext::shared_ptr<Interpolation> rhoInf, ext::shared_ptr<Interpolation> beta); | |ql/experimental/basismodels/tenoroptionletvts.hpp|TenorOptionletVTS::TenorOptionletVTS(const Handle<OptionletVolatilityStructure> & baseVTS, ext::shared_ptr<IborIndex> baseIndex, ext::shared_ptr<IborIndex> targIndex, ext::shared_ptr<CorrelationStructure> correlation);-| |ql/experimental/basismodels/tenorswaptionvts.hpp|TenorSwaptionSmileSection::TenorSwaptionSmileSection(const TenorSwaptionVTS & volTS, Time optionTime, Time swapLength);-| |ql/experimental/basismodels/tenorswaptionvts.hpp|Real TenorSwaptionSmileSection::minStrike() const;-| |ql/experimental/basismodels/tenorswaptionvts.hpp|Real TenorSwaptionSmileSection::maxStrike() const;-| |ql/experimental/basismodels/tenorswaptionvts.hpp|Real TenorSwaptionSmileSection::atmLevel() const;+|x|ql/experimental/basismodels/tenorswaptionvts.hpp|TenorSwaptionSmileSection::TenorSwaptionSmileSection(const TenorSwaptionVTS & volTS, Time optionTime, Time swapLength);+|x|ql/experimental/basismodels/tenorswaptionvts.hpp|Real TenorSwaptionSmileSection::minStrike() const;+|x|ql/experimental/basismodels/tenorswaptionvts.hpp|Real TenorSwaptionSmileSection::maxStrike() const;+|x|ql/experimental/basismodels/tenorswaptionvts.hpp|Real TenorSwaptionSmileSection::atmLevel() const; | |ql/experimental/basismodels/tenorswaptionvts.hpp|TenorSwaptionVTS::TenorSwaptionVTS(const Handle<SwaptionVolatilityStructure> & baseVTS, Handle<YieldTermStructure> discountCurve, ext::shared_ptr<IborIndex> baseIndex, ext::shared_ptr<IborIndex> targIndex, const Period & baseFixedFreq, const Period & targFixedFreq, DayCounter baseFixedDC, DayCounter targFixedDC); |v|ql/experimental/callablebonds/blackcallablebondengine.hpp|BlackCallableFixedRateBondEngine::BlackCallableFixedRateBondEngine(const Handle<Quote> & fwdYieldVol, Handle<YieldTermStructure> discountCurve); |v|ql/experimental/callablebonds/blackcallablebondengine.hpp|BlackCallableFixedRateBondEngine::BlackCallableFixedRateBondEngine(Handle<CallableBondVolatilityStructure> yieldVolStructure, Handle<YieldTermStructure> discountCurve);@@ -903,8 +903,8 @@ |v|ql/experimental/callablebonds/callablebondconstantvol.hpp|CallableBondConstantVolatility::CallableBondConstantVolatility(Natural settlementDays, const Calendar &, Handle<Quote> volatility, DayCounter dayCounter); | |ql/experimental/callablebonds/callablebondconstantvol.hpp|const Period & maxBondTenor() const; | |ql/experimental/callablebonds/callablebondconstantvol.hpp|Time maxBondLength() const;-| |ql/experimental/callablebonds/callablebondconstantvol.hpp|Real minStrike() const;-| |ql/experimental/callablebonds/callablebondconstantvol.hpp|Real maxStrike() const;+|x|ql/experimental/callablebonds/callablebondconstantvol.hpp|Real minStrike() const;+|x|ql/experimental/callablebonds/callablebondconstantvol.hpp|Real maxStrike() const; | |ql/experimental/callablebonds/callablebondvolstructure.hpp|CallableBondVolatilityStructure::CallableBondVolatilityStructure(const DayCounter & dc = DayCounter(), BusinessDayConvention bdc = Following); | |ql/experimental/callablebonds/callablebondvolstructure.hpp|CallableBondVolatilityStructure::CallableBondVolatilityStructure(const Date & referenceDate, const Calendar & calendar = Calendar(), const DayCounter & dc = DayCounter(), BusinessDayConvention bdc = Following); | |ql/experimental/callablebonds/callablebondvolstructure.hpp|CallableBondVolatilityStructure::CallableBondVolatilityStructure(Natural settlementDays, const Calendar &, const DayCounter & dc = DayCounter(), BusinessDayConvention bdc = Following);@@ -1334,7 +1334,7 @@ | |ql/experimental/credit/binomiallossmodel.hpp|std::map<Real, Probability> lossDistribution(const Date & d) const; | |ql/experimental/credit/binomiallossmodel.hpp|Real percentile(const Date & d, Real perc) const; | |ql/experimental/credit/binomiallossmodel.hpp|Real expectedShortfall(const Date & d, Real perctl) const;-| |ql/experimental/credit/blackcdsoptionengine.hpp|BlackCdsOptionEngine::BlackCdsOptionEngine(Handle<DefaultProbabilityTermStructure>, Real recoveryRate, Handle<YieldTermStructure> termStructure, Handle<Quote> vol);+|v|ql/experimental/credit/blackcdsoptionengine.hpp|BlackCdsOptionEngine::BlackCdsOptionEngine(Handle<DefaultProbabilityTermStructure>, Real recoveryRate, Handle<YieldTermStructure> termStructure, Handle<Quote> vol); |x|ql/experimental/credit/blackcdsoptionengine.hpp|void BlackCdsOptionEngine::calculate() const; |x|ql/experimental/credit/blackcdsoptionengine.hpp|Handle<YieldTermStructure> BlackCdsOptionEngine::termStructure(); |x|ql/experimental/credit/blackcdsoptionengine.hpp|Handle<Quote> BlackCdsOptionEngine::volatility();@@ -1475,29 +1475,29 @@ |x|ql/experimental/credit/integralcdoengine.hpp|void IntegralCDOEngine::calculate() const; |v|ql/experimental/credit/integralntdengine.hpp|IntegralNtdEngine::IntegralNtdEngine(const Period & integrationStep, Handle<YieldTermStructure> discountCurve); |x|ql/experimental/credit/integralntdengine.hpp|void IntegralNtdEngine::calculate() const;-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve::InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>(), const Interpolator & interpolator = Interpolator());-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve::InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & calendar, const Interpolator & interpolator);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve::InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Interpolator & interpolator);+|v|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve::InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>(), const Interpolator & interpolator = Interpolator());+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve::InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve::InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Interpolator & interpolator); | |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|const std::vector<Time> & InterpolatedAffineHazardRateCurve::times() const; |x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|const std::vector<Date> & InterpolatedAffineHazardRateCurve::dates() const; | |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|const std::vector<Real> & InterpolatedAffineHazardRateCurve::data() const; | |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|const std::vector<Rate> & InterpolatedAffineHazardRateCurve::hazardRates() const; | |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedAffineHazardRateCurve::nodes() const;-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static Date AffineHazardRate::initialDate(const DefaultProbabilityTermStructure * c);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static Real AffineHazardRate::initialValue(const DefaultProbabilityTermStructure *);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static void AffineHazardRate::updateGuess(std::vector<Real> & data, Real rate, Size i);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static Size AffineHazardRate::maxIterations();-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Date maxDate() const;-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Real hazardRateImpl(Time t) const;-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Probability survivalProbabilityImpl(Time t) const;-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Probability conditionalSurvivalProbabilityImpl(Time tFwd, Time tTarget, Real yVal) const;-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & calendar, const T & interpolator);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const T & interpolator);-| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|void initialize();+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static Date AffineHazardRate::initialDate(const DefaultProbabilityTermStructure * c);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static Real AffineHazardRate::initialValue(const DefaultProbabilityTermStructure *);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static void AffineHazardRate::updateGuess(std::vector<Real> & data, Real rate, Size i);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static Size AffineHazardRate::maxIterations();+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Date maxDate() const;+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Real hazardRateImpl(Time t) const;+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Probability survivalProbabilityImpl(Time t) const;+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Probability conditionalSurvivalProbabilityImpl(Time tFwd, Time tTarget, Real yVal) const;+|?|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|?|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|?|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & calendar, const T & interpolator);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const T & interpolator);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|void initialize(); |v|ql/experimental/credit/issuer.hpp|Issuer::Issuer(std::vector<key_curve_pair> probabilities = std::vector<key_curve_pair>(), DefaultEventSet events = DefaultEventSet()); | |ql/experimental/credit/issuer.hpp|Issuer::Issuer(const std::vector<std::vector<ext::shared_ptr<DefaultType>>> & eventTypes, const std::vector<Currency> & currencies, const std::vector<Seniority> & seniorities, const std::vector<Handle<DefaultProbabilityTermStructure>> & curves, DefaultEventSet events = DefaultEventSet()); | |ql/experimental/credit/issuer.hpp|const Handle<DefaultProbabilityTermStructure> & Issuer::defaultProbability(const DefaultProbKey & key) const;@@ -1554,14 +1554,14 @@ | |ql/experimental/credit/nthtodefault.hpp|arguments::arguments(); | |ql/experimental/credit/nthtodefault.hpp|void arguments::validate() const; | |ql/experimental/credit/nthtodefault.hpp|void results::reset();-| |ql/experimental/credit/onefactoraffinesurvival.hpp|OneFactorAffineSurvivalStructure::OneFactorAffineSurvivalStructure(ext::shared_ptr<OneFactorAffineModel> model, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>());-| |ql/experimental/credit/onefactoraffinesurvival.hpp|OneFactorAffineSurvivalStructure::OneFactorAffineSurvivalStructure(ext::shared_ptr<OneFactorAffineModel> model, const Date & referenceDate, const Calendar & cal = Calendar(), const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>());-| |ql/experimental/credit/onefactoraffinesurvival.hpp|OneFactorAffineSurvivalStructure::OneFactorAffineSurvivalStructure(ext::shared_ptr<OneFactorAffineModel> model, Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>());-| |ql/experimental/credit/onefactoraffinesurvival.hpp|Probability OneFactorAffineSurvivalStructure::conditionalSurvivalProbability(const Date & dFwd, const Date & dTgt, Real yVal, bool extrapolate = false) const;-| |ql/experimental/credit/onefactoraffinesurvival.hpp|Probability OneFactorAffineSurvivalStructure::conditionalSurvivalProbability(Time tFwd, Time tgt, Real yVal, bool extrapolate = false) const;-| |ql/experimental/credit/onefactoraffinesurvival.hpp|Probability survivalProbabilityImpl(Time t) const;-| |ql/experimental/credit/onefactoraffinesurvival.hpp|Probability conditionalSurvivalProbabilityImpl(Time tFwd, Time tgt, Real yVal) const;-| |ql/experimental/credit/onefactoraffinesurvival.hpp|Real defaultDensityImpl(Time t) const;+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|OneFactorAffineSurvivalStructure::OneFactorAffineSurvivalStructure(ext::shared_ptr<OneFactorAffineModel> model, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>());+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|OneFactorAffineSurvivalStructure::OneFactorAffineSurvivalStructure(ext::shared_ptr<OneFactorAffineModel> model, const Date & referenceDate, const Calendar & cal = Calendar(), const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>());+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|OneFactorAffineSurvivalStructure::OneFactorAffineSurvivalStructure(ext::shared_ptr<OneFactorAffineModel> model, Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>());+|v|ql/experimental/credit/onefactoraffinesurvival.hpp|Probability OneFactorAffineSurvivalStructure::conditionalSurvivalProbability(const Date & dFwd, const Date & dTgt, Real yVal, bool extrapolate = false) const;+|v|ql/experimental/credit/onefactoraffinesurvival.hpp|Probability OneFactorAffineSurvivalStructure::conditionalSurvivalProbability(Time tFwd, Time tgt, Real yVal, bool extrapolate = false) const;+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|Probability survivalProbabilityImpl(Time t) const;+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|Probability conditionalSurvivalProbabilityImpl(Time tFwd, Time tgt, Real yVal) const;+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|Real defaultDensityImpl(Time t) const; | |ql/experimental/credit/onefactorcopula.hpp|OneFactorCopula::OneFactorCopula(Handle<Quote> correlation, Real maximum = 5.0, Size integrationSteps = 50, Real minimum = - 5.0); | |ql/experimental/credit/onefactorcopula.hpp|Real OneFactorCopula::density(Real m) const; | |ql/experimental/credit/onefactorcopula.hpp|Real OneFactorCopula::cumulativeZ(Real z) const;@@ -2366,11 +2366,11 @@ |v|ql/experimental/termstructures/basisswapratehelpers.hpp|IborIborBasisSwapRateHelper::IborIborBasisSwapRateHelper(const Handle<Quote> & basis, const Period & tenor, Natural settlementDays, Calendar calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<IborIndex> & baseIndex, const ext::shared_ptr<IborIndex> & otherIndex, Handle<YieldTermStructure> discountHandle, bool bootstrapBaseCurve); |x|ql/experimental/termstructures/basisswapratehelpers.hpp|Real IborIborBasisSwapRateHelper::impliedQuote() const; |x|ql/experimental/termstructures/basisswapratehelpers.hpp|void IborIborBasisSwapRateHelper::accept(AcyclicVisitor &);-|x|ql/experimental/termstructures/basisswapratehelpers.hpp|ext::shared_ptr<Swap> IborIborBasisSwapRateHelper::swap() const;+|v|ql/experimental/termstructures/basisswapratehelpers.hpp|ext::shared_ptr<Swap> IborIborBasisSwapRateHelper::swap() const; |v|ql/experimental/termstructures/basisswapratehelpers.hpp|OvernightIborBasisSwapRateHelper::OvernightIborBasisSwapRateHelper(const Handle<Quote> & basis, const Period & tenor, Natural settlementDays, Calendar calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<OvernightIndex> & baseIndex, const ext::shared_ptr<IborIndex> & otherIndex, Handle<YieldTermStructure> discountHandle = Handle<YieldTermStructure>()); |x|ql/experimental/termstructures/basisswapratehelpers.hpp|Real OvernightIborBasisSwapRateHelper::impliedQuote() const; |x|ql/experimental/termstructures/basisswapratehelpers.hpp|void OvernightIborBasisSwapRateHelper::accept(AcyclicVisitor &);-|x|ql/experimental/termstructures/basisswapratehelpers.hpp|ext::shared_ptr<Swap> OvernightIborBasisSwapRateHelper::swap() const;+|v|ql/experimental/termstructures/basisswapratehelpers.hpp|ext::shared_ptr<Swap> OvernightIborBasisSwapRateHelper::swap() const; | |ql/experimental/termstructures/crosscurrencyratehelpers.hpp|void CrossCurrencySwapRateHelperBase::setTermStructure(YieldTermStructure * t); |v|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|ConstNotionalCrossCurrencyBasisSwapRateHelper::ConstNotionalCrossCurrencyBasisSwapRateHelper(const Handle<Quote> & basis, const Period & tenor, Natural fixingDays, const Calendar & calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<IborIndex> & baseCurrencyIndex, const ext::shared_ptr<IborIndex> & quoteCurrencyIndex, const Handle<YieldTermStructure> & collateralCurve, bool isFxBaseCurrencyCollateralCurrency, bool isBasisOnFxBaseCurrencyLeg, ext::optional<Frequency> paymentFrequency = ext::nullopt, Integer paymentLag = 0, ext::optional<Frequency> quoteCurrencyPaymentFrequency = ext::nullopt); |x|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|Real ConstNotionalCrossCurrencyBasisSwapRateHelper::impliedQuote() const;@@ -2426,8 +2426,8 @@ |v|ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Date> & AbcdAtmVolCurve::optionDates() const; |v|ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Time> & AbcdAtmVolCurve::optionTimes() const; | |ql/experimental/volatility/abcdatmvolcurve.hpp|Date maxDate() const;-| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real minStrike() const;-| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real maxStrike() const;+|x|ql/experimental/volatility/abcdatmvolcurve.hpp|Real minStrike() const;+|x|ql/experimental/volatility/abcdatmvolcurve.hpp|Real maxStrike() const; | |ql/experimental/volatility/abcdatmvolcurve.hpp|Real atmVarianceImpl(Time t) const; | |ql/experimental/volatility/abcdatmvolcurve.hpp|Volatility atmVolImpl(Time t) const; | |ql/experimental/volatility/blackatmvolcurve.hpp|BlackAtmVolCurve::BlackAtmVolCurve(BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());@@ -2456,13 +2456,13 @@ | |ql/experimental/volatility/equityfxvolsurface.hpp|Volatility EquityFXVolSurface::atmForwardVol(Time time1, Time time2, bool extrapolate = false) const; | |ql/experimental/volatility/equityfxvolsurface.hpp|Real EquityFXVolSurface::atmForwardVariance(const Date & date1, const Date & date2, bool extrapolate = false) const; | |ql/experimental/volatility/equityfxvolsurface.hpp|Real EquityFXVolSurface::atmForwardVariance(Time time1, Time time2, bool extrapolate = false) const;-| |ql/experimental/volatility/extendedblackvariancecurve.hpp|ExtendedBlackVarianceCurve::ExtendedBlackVarianceCurve(const Date & referenceDate, const std::vector<Date> & dates, std::vector<Handle<Quote>> volatilities, DayCounter dayCounter, bool forceMonotoneVariance = true);-| |ql/experimental/volatility/extendedblackvariancecurve.hpp|Date maxDate() const;-| |ql/experimental/volatility/extendedblackvariancecurve.hpp|Real minStrike() const;-| |ql/experimental/volatility/extendedblackvariancecurve.hpp|Real maxStrike() const;-| |ql/experimental/volatility/extendedblackvariancecurve.hpp|void accept(AcyclicVisitor & v);-| |ql/experimental/volatility/extendedblackvariancesurface.hpp|ExtendedBlackVarianceSurface::ExtendedBlackVarianceSurface(const Date & referenceDate, const Calendar & calendar, const std::vector<Date> & dates, std::vector<Real> strikes, const std::vector<Handle<Quote>> & volatilities, DayCounter dayCounter, Extrapolation lowerExtrapolation = InterpolatorDefaultExtrapolation, Extrapolation upperExtrapolation = InterpolatorDefaultExtrapolation);-| |ql/experimental/volatility/extendedblackvariancesurface.hpp|void accept(AcyclicVisitor & v);+|v|ql/experimental/volatility/extendedblackvariancecurve.hpp|ExtendedBlackVarianceCurve::ExtendedBlackVarianceCurve(const Date & referenceDate, const std::vector<Date> & dates, std::vector<Handle<Quote>> volatilities, DayCounter dayCounter, bool forceMonotoneVariance = true);+|x|ql/experimental/volatility/extendedblackvariancecurve.hpp|Date maxDate() const;+|x|ql/experimental/volatility/extendedblackvariancecurve.hpp|Real minStrike() const;+|x|ql/experimental/volatility/extendedblackvariancecurve.hpp|Real maxStrike() const;+|x|ql/experimental/volatility/extendedblackvariancecurve.hpp|void accept(AcyclicVisitor & v);+|v|ql/experimental/volatility/extendedblackvariancesurface.hpp|ExtendedBlackVarianceSurface::ExtendedBlackVarianceSurface(const Date & referenceDate, const Calendar & calendar, const std::vector<Date> & dates, std::vector<Real> strikes, const std::vector<Handle<Quote>> & volatilities, DayCounter dayCounter, Extrapolation lowerExtrapolation = InterpolatorDefaultExtrapolation, Extrapolation upperExtrapolation = InterpolatorDefaultExtrapolation);+|x|ql/experimental/volatility/extendedblackvariancesurface.hpp|void accept(AcyclicVisitor & v); | |ql/experimental/volatility/interestratevolsurface.hpp|InterestRateVolSurface::InterestRateVolSurface(ext::shared_ptr<InterestRateIndex>, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter()); | |ql/experimental/volatility/interestratevolsurface.hpp|InterestRateVolSurface::InterestRateVolSurface(ext::shared_ptr<InterestRateIndex>, const Date & referenceDate, const Calendar & cal = Calendar(), BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter()); | |ql/experimental/volatility/interestratevolsurface.hpp|InterestRateVolSurface::InterestRateVolSurface(ext::shared_ptr<InterestRateIndex>, Natural settlementDays, const Calendar &, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());@@ -2492,8 +2492,8 @@ |v|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|EndCriteria::Type NoArbSabrInterpolatedSmileSection::endCriteria() const; | |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|void update(); | |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real volatilityImpl(Rate strike) const;-| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real minStrike() const;-| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real maxStrike() const;+|x|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real minStrike() const;+|x|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real maxStrike() const; | |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real atmLevel() const; |x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Size NoArbSabrSpecs::dimension(); |x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrSpecs::eps();@@ -2529,10 +2529,10 @@ | |ql/experimental/volatility/sabrvolsurface.hpp|const Date & referenceDate() const; |?|ql/experimental/volatility/sabrvolsurface.hpp|Calendar calendar() const; | |ql/experimental/volatility/sabrvolsurface.hpp|Natural settlementDays() const;-| |ql/experimental/volatility/sabrvolsurface.hpp|Real minStrike() const;-| |ql/experimental/volatility/sabrvolsurface.hpp|Real maxStrike() const;+|x|ql/experimental/volatility/sabrvolsurface.hpp|Real minStrike() const;+|x|ql/experimental/volatility/sabrvolsurface.hpp|Real maxStrike() const; |v|ql/experimental/volatility/sabrvolsurface.hpp|std::vector<Volatility> volatilitySpreads(const Period & p) const;-| |ql/experimental/volatility/sabrvoltermstructure.hpp|SABRVolTermStructure::SABRVolTermStructure(Real alpha, Real beta, Real gamma, Real rho, Real s0, Real r, const Date & referenceDate, const DayCounter & dc);+|v|ql/experimental/volatility/sabrvoltermstructure.hpp|SABRVolTermStructure::SABRVolTermStructure(Real alpha, Real beta, Real gamma, Real rho, Real s0, Real r, const Date & referenceDate, const DayCounter & dc); |v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|SviInterpolatedSmileSection::SviInterpolatedSmileSection(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real a, Real b, Real sigma, Real rho, Real m, bool aIsFixed, bool bIsFixed, bool sigmaIsFixed, bool rhoIsFixed, bool mIsFixed, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed()); |x|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|SviInterpolatedSmileSection::SviInterpolatedSmileSection(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & vols, Real a, Real b, Real sigma, Real rho, Real m, bool isAFixed, bool isBFixed, bool isSigmaFixed, bool isRhoFixed, bool isMFixed, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed()); |v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real SviInterpolatedSmileSection::a() const;@@ -2545,8 +2545,8 @@ |v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|EndCriteria::Type SviInterpolatedSmileSection::endCriteria() const; | |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|void update(); | |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real volatilityImpl(Rate strike) const;-| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real minStrike() const;-| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real maxStrike() const;+|x|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real minStrike() const;+|x|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real maxStrike() const; | |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real atmLevel() const; |x|ql/experimental/volatility/sviinterpolation.hpp|void checkSviParameters(const Real a, const Real b, const Real sigma, const Real rho, const Real m, const Time tte); |x|ql/experimental/volatility/sviinterpolation.hpp|Real sviTotalVariance(const Real a, const Real b, const Real sigma, const Real rho, const Real m, const Real k);@@ -3347,32 +3347,32 @@ | |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withTradeDate(Date); | |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withCashSettlementDays(Natural); | |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withPricingEngine(const ext::shared_ptr<PricingEngine> &);-| |ql/instruments/makecms.hpp|MakeCms::MakeCms(const Period & swapTenor, const ext::shared_ptr<SwapIndex> & swapIndex, const ext::shared_ptr<IborIndex> & iborIndex, Spread iborSpread = 0.0, const Period & forwardStart = 0 * Days);-| |ql/instruments/makecms.hpp|MakeCms::MakeCms(const Period & swapTenor, const ext::shared_ptr<SwapIndex> & swapIndex, Spread iborSpread = 0.0, const Period & forwardStart = 0 * Days);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::receiveCms(bool flag = true);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withNominal(Real n);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withEffectiveDate(const Date &);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegTenor(const Period & t);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegCalendar(const Calendar & cal);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegConvention(BusinessDayConvention bdc);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegTerminationDateConvention(BusinessDayConvention);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegRule(DateGeneration::Rule r);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegEndOfMonth(bool flag = true);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegFirstDate(const Date & d);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegNextToLastDate(const Date & d);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegDayCount(const DayCounter & dc);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegTenor(const Period & t);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegCalendar(const Calendar & cal);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegConvention(BusinessDayConvention bdc);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegTerminationDateConvention(BusinessDayConvention bdc);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegRule(DateGeneration::Rule r);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegEndOfMonth(bool flag = true);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegFirstDate(const Date & d);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegNextToLastDate(const Date & d);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegDayCount(const DayCounter & dc);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withAtmSpread(bool flag = true);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withDiscountingTermStructure(const Handle<YieldTermStructure> & discountingTermStructure);-| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsCouponPricer(const ext::shared_ptr<CmsCouponPricer> & couponPricer);+|v|ql/instruments/makecms.hpp|MakeCms::MakeCms(const Period & swapTenor, const ext::shared_ptr<SwapIndex> & swapIndex, const ext::shared_ptr<IborIndex> & iborIndex, Spread iborSpread = 0.0, const Period & forwardStart = 0 * Days);+|x|ql/instruments/makecms.hpp|MakeCms::MakeCms(const Period & swapTenor, const ext::shared_ptr<SwapIndex> & swapIndex, Spread iborSpread = 0.0, const Period & forwardStart = 0 * Days);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::receiveCms(bool flag = true);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withNominal(Real n);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withEffectiveDate(const Date &);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegTenor(const Period & t);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegCalendar(const Calendar & cal);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegConvention(BusinessDayConvention bdc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegTerminationDateConvention(BusinessDayConvention);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegRule(DateGeneration::Rule r);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegEndOfMonth(bool flag = true);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegFirstDate(const Date & d);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegNextToLastDate(const Date & d);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegDayCount(const DayCounter & dc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegTenor(const Period & t);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegCalendar(const Calendar & cal);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegConvention(BusinessDayConvention bdc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegTerminationDateConvention(BusinessDayConvention bdc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegRule(DateGeneration::Rule r);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegEndOfMonth(bool flag = true);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegFirstDate(const Date & d);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegNextToLastDate(const Date & d);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegDayCount(const DayCounter & dc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withAtmSpread(bool flag = true);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withDiscountingTermStructure(const Handle<YieldTermStructure> & discountingTermStructure);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsCouponPricer(const ext::shared_ptr<CmsCouponPricer> & couponPricer); | |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap::MakeMultipleResetsSwap(const Period & tenor, const ext::shared_ptr<IborIndex> & iborIndex, Size resetsPerCoupon); | |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::receiveFixed(bool flag = true); | |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withType(Swap::Type type);@@ -3629,7 +3629,7 @@ | |ql/instruments/stock.hpp|Stock::Stock(Handle<Quote> quote); |v|ql/instruments/swap.hpp|Swap::Swap(const Leg & firstLeg, const Leg & secondLeg); |v|ql/instruments/swap.hpp|Swap::Swap(const std::vector<Leg> & legs, const std::vector<bool> & payer);-|x|ql/instruments/swap.hpp|Size Swap::numberOfLegs() const;+|v|ql/instruments/swap.hpp|Size Swap::numberOfLegs() const; |x|ql/instruments/swap.hpp|const std::vector<Leg> & Swap::legs() const; |v|ql/instruments/swap.hpp|Date Swap::startDate() const; |v|ql/instruments/swap.hpp|Date Swap::maturityDate() const;@@ -6324,7 +6324,7 @@ | |ql/models/model.hpp|EndCriteria::Type CalibratedModel::endCriteria() const; | |ql/models/model.hpp|const Array & CalibratedModel::problemValues() const; |v|ql/models/model.hpp|Array CalibratedModel::params() const;-| |ql/models/model.hpp|void CalibratedModel::setParams(const Array & params);+|v|ql/models/model.hpp|void CalibratedModel::setParams(const Array & params); | |ql/models/model.hpp|Integer CalibratedModel::functionEvaluation() const; | |ql/models/model.hpp|ShortRateModel::ShortRateModel(Size nArguments); | |ql/models/model.hpp|ext::shared_ptr<Lattice> ShortRateModel::tree(const TimeGrid &) const;@@ -6408,17 +6408,17 @@ |x|ql/models/shortrate/onefactormodels/gsr.hpp|Gsr::Gsr(const Handle<YieldTermStructure> & termStructure, std::vector<Date> volstepdates, const std::vector<Real> & volatilities, Real reversion, Real T = 60.0); |x|ql/models/shortrate/onefactormodels/gsr.hpp|Gsr::Gsr(const Handle<YieldTermStructure> & termStructure, std::vector<Date> volstepdates, const std::vector<Real> & volatilities, const std::vector<Real> & reversions, Real T = 60.0); |v|ql/models/shortrate/onefactormodels/gsr.hpp|Gsr::Gsr(const Handle<YieldTermStructure> & termStructure, std::vector<Date> volstepdates, std::vector<Handle<Quote>> volatilities, const Handle<Quote> & reversion, Real T = 60.0);-|x|ql/models/shortrate/onefactormodels/gsr.hpp|Gsr::Gsr(const Handle<YieldTermStructure> & termStructure, std::vector<Date> volstepdates, std::vector<Handle<Quote>> volatilities, std::vector<Handle<Quote>> reversions, Real T = 60.0);+|v|ql/models/shortrate/onefactormodels/gsr.hpp|Gsr::Gsr(const Handle<YieldTermStructure> & termStructure, std::vector<Date> volstepdates, std::vector<Handle<Quote>> volatilities, std::vector<Handle<Quote>> reversions, Real T = 60.0); |x|ql/models/shortrate/onefactormodels/gsr.hpp|Real Gsr::numeraireTime() const; |x|ql/models/shortrate/onefactormodels/gsr.hpp|void Gsr::numeraireTime(Real T);-|x|ql/models/shortrate/onefactormodels/gsr.hpp|const Array & Gsr::reversion() const;+|v|ql/models/shortrate/onefactormodels/gsr.hpp|const Array & Gsr::reversion() const; |v|ql/models/shortrate/onefactormodels/gsr.hpp|const Array & Gsr::volatility() const; |x|ql/models/shortrate/onefactormodels/gsr.hpp|std::vector<bool> Gsr::FixedReversions(); |x|ql/models/shortrate/onefactormodels/gsr.hpp|std::vector<bool> Gsr::FixedVolatilities(); |v|ql/models/shortrate/onefactormodels/gsr.hpp|std::vector<bool> Gsr::MoveVolatility(Size i); |v|ql/models/shortrate/onefactormodels/gsr.hpp|std::vector<bool> Gsr::MoveReversion(Size i); |v|ql/models/shortrate/onefactormodels/gsr.hpp|void Gsr::calibrateVolatilitiesIterative(const std::vector<ext::shared_ptr<BlackCalibrationHelper>> & helpers, OptimizationMethod & method, const EndCriteria & endCriteria, const Constraint & constraint = Constraint(), const std::vector<Real> & weights = std::vector<Real>());-|x|ql/models/shortrate/onefactormodels/gsr.hpp|void Gsr::calibrateReversionsIterative(const std::vector<ext::shared_ptr<BlackCalibrationHelper>> & helpers, OptimizationMethod & method, const EndCriteria & endCriteria, const Constraint & constraint = Constraint(), const std::vector<Real> & weights = std::vector<Real>());+|v|ql/models/shortrate/onefactormodels/gsr.hpp|void Gsr::calibrateReversionsIterative(const std::vector<ext::shared_ptr<BlackCalibrationHelper>> & helpers, OptimizationMethod & method, const EndCriteria & endCriteria, const Constraint & constraint = Constraint(), const std::vector<Real> & weights = std::vector<Real>()); | |ql/models/shortrate/onefactormodels/gsr.hpp|VolatilityObserver::VolatilityObserver(Gsr * p); | |ql/models/shortrate/onefactormodels/gsr.hpp|ReversionObserver::ReversionObserver(Gsr * p); | |ql/models/shortrate/onefactormodels/gsr.hpp|void numeraireTime(const Real T);@@ -7400,8 +7400,8 @@ |x|ql/pricingengines/vanilla/analyticeuropeanvasicekengine.hpp|void AnalyticBlackVasicekEngine::calculate() const; |v|ql/pricingengines/vanilla/analyticgjrgarchengine.hpp|AnalyticGJRGARCHEngine::AnalyticGJRGARCHEngine(const ext::shared_ptr<GJRGARCHModel> & model); |x|ql/pricingengines/vanilla/analyticgjrgarchengine.hpp|void AnalyticGJRGARCHEngine::calculate() const;-| |ql/pricingengines/vanilla/analytich1hwengine.hpp|AnalyticH1HWEngine::AnalyticH1HWEngine(const ext::shared_ptr<HestonModel> & model, const ext::shared_ptr<HullWhite> & hullWhiteModel, Real rhoSr, Size integrationOrder = 144);-| |ql/pricingengines/vanilla/analytich1hwengine.hpp|AnalyticH1HWEngine::AnalyticH1HWEngine(const ext::shared_ptr<HestonModel> & model, const ext::shared_ptr<HullWhite> & hullWhiteModel, Real rhoSr, Real relTolerance, Size maxEvaluations);+|v|ql/pricingengines/vanilla/analytich1hwengine.hpp|AnalyticH1HWEngine::AnalyticH1HWEngine(const ext::shared_ptr<HestonModel> & model, const ext::shared_ptr<HullWhite> & hullWhiteModel, Real rhoSr, Size integrationOrder = 144);+|v|ql/pricingengines/vanilla/analytich1hwengine.hpp|AnalyticH1HWEngine::AnalyticH1HWEngine(const ext::shared_ptr<HestonModel> & model, const ext::shared_ptr<HullWhite> & hullWhiteModel, Real rhoSr, Real relTolerance, Size maxEvaluations); |v|ql/pricingengines/vanilla/analytichestonengine.hpp|AnalyticHestonEngine::AnalyticHestonEngine(const ext::shared_ptr<HestonModel> & model, Real relTolerance, Size maxEvaluations); |v|ql/pricingengines/vanilla/analytichestonengine.hpp|AnalyticHestonEngine::AnalyticHestonEngine(const ext::shared_ptr<HestonModel> & model, Size integrationOrder = 144); |u|ql/pricingengines/vanilla/analytichestonengine.hpp|AnalyticHestonEngine::AnalyticHestonEngine(const ext::shared_ptr<HestonModel> & model, ComplexLogFormula cpxLog, const Integration & itg, Real andersenPiterbargEpsilon = 1e-25, Real alpha = - 0.5);@@ -7956,7 +7956,7 @@ |x|ql/termstructure.hpp|DayCounter TermStructure::dayCounter() const; |v|ql/termstructure.hpp|Time TermStructure::timeFromReference(const Date & date) const; |v|ql/termstructure.hpp|Date TermStructure::maxDate() const;-| |ql/termstructure.hpp|Time TermStructure::maxTime() const;+|v|ql/termstructure.hpp|Time TermStructure::maxTime() const; |v|ql/termstructure.hpp|const Date & TermStructure::referenceDate() const; |x|ql/termstructure.hpp|Calendar TermStructure::calendar() const; | |ql/termstructure.hpp|Natural TermStructure::settlementDays() const;@@ -8016,12 +8016,12 @@ | |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|Date maxDate() const; | |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|Real defaultDensityImpl(Time t) const; | |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|Probability survivalProbabilityImpl(Time t) const;-|?|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);-|?|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const T & interpolator); | |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|void initialize(const DayCounter & dayCounter); |v|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve::InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { }); |x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve::InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);@@ -8034,12 +8034,12 @@ | |ql/termstructures/credit/interpolatedhazardratecurve.hpp|Date maxDate() const; | |ql/termstructures/credit/interpolatedhazardratecurve.hpp|Real hazardRateImpl(Time t) const; | |ql/termstructures/credit/interpolatedhazardratecurve.hpp|Probability survivalProbabilityImpl(Time t) const;-|?|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);-|?|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const T & interpolator); | |ql/termstructures/credit/interpolatedhazardratecurve.hpp|void initialize(); |v|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve::InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { }); |x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve::InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);@@ -8052,12 +8052,12 @@ | |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|Date maxDate() const; | |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|Probability survivalProbabilityImpl(Time t) const; | |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|Real defaultDensityImpl(Time t) const;-|?|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);-|?|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const T & interpolator); | |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|void initialize(); |v|ql/termstructures/credit/piecewisedefaultcurve.hpp|PiecewiseDefaultCurve::PiecewiseDefaultCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & i = { }, bootstrap_type bootstrap = { }); |x|ql/termstructures/credit/piecewisedefaultcurve.hpp|PiecewiseDefaultCurve::PiecewiseDefaultCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, const std::vector<ext::shared_ptr<typename Traits::helper>> & instruments, const DayCounter & dayCounter, const Interpolator & i, const bootstrap_type & bootstrap = bootstrap_type());@@ -8141,13 +8141,13 @@ | |ql/termstructures/globalbootstrap.hpp|void setCostFunctionArgument(const Array & x) const; | |ql/termstructures/globalbootstrapvars.hpp|SimpleQuoteVariables::SimpleQuoteVariables(std::vector<ext::shared_ptr<SimpleQuote>> quotes, std::vector<Real> initialGuesses = { }, std::vector<Real> lowerBounds = { }); |v|ql/termstructures/inflation/inflationhelpers.hpp|ZeroCouponInflationSwapHelper::ZeroCouponInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & maturity, Calendar calendar, BusinessDayConvention paymentConvention, const DayCounter & dayCounter, const ext::shared_ptr<ZeroInflationIndex> & zii, CPI::InterpolationType observationInterpolation, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());-|u|ql/termstructures/inflation/inflationhelpers.hpp|ZeroCouponInflationSwapHelper::ZeroCouponInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & startDate, const Date & endDate, Calendar calendar, BusinessDayConvention paymentConvention, const DayCounter & dayCounter, const ext::shared_ptr<ZeroInflationIndex> & zii, CPI::InterpolationType observationInterpolation, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());+|v|ql/termstructures/inflation/inflationhelpers.hpp|ZeroCouponInflationSwapHelper::ZeroCouponInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & startDate, const Date & endDate, Calendar calendar, BusinessDayConvention paymentConvention, const DayCounter & dayCounter, const ext::shared_ptr<ZeroInflationIndex> & zii, CPI::InterpolationType observationInterpolation, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date()); |v|ql/termstructures/inflation/inflationhelpers.hpp|ZeroCouponInflationSwapHelper::ZeroCouponInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & maturity, Calendar calendar, BusinessDayConvention paymentConvention, DayCounter dayCounter, const ext::shared_ptr<ZeroInflationIndex> & zii, CPI::InterpolationType observationInterpolation, Handle<YieldTermStructure> nominalTermStructure); |x|ql/termstructures/inflation/inflationhelpers.hpp|void ZeroCouponInflationSwapHelper::setTermStructure(ZeroInflationTermStructure *); |x|ql/termstructures/inflation/inflationhelpers.hpp|Real ZeroCouponInflationSwapHelper::impliedQuote() const; |v|ql/termstructures/inflation/inflationhelpers.hpp|ext::shared_ptr<ZeroCouponInflationSwap> ZeroCouponInflationSwapHelper::swap() const; |v|ql/termstructures/inflation/inflationhelpers.hpp|YearOnYearInflationSwapHelper::YearOnYearInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & maturity, Calendar calendar, BusinessDayConvention paymentConvention, DayCounter dayCounter, const ext::shared_ptr<YoYInflationIndex> & yii, CPI::InterpolationType interpolation, Handle<YieldTermStructure> nominalTermStructure, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());-|u|ql/termstructures/inflation/inflationhelpers.hpp|YearOnYearInflationSwapHelper::YearOnYearInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & startDate, const Date & endDate, Calendar calendar, BusinessDayConvention paymentConvention, DayCounter dayCounter, const ext::shared_ptr<YoYInflationIndex> & yii, CPI::InterpolationType interpolation, Handle<YieldTermStructure> nominalTermStructure, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());+|v|ql/termstructures/inflation/inflationhelpers.hpp|YearOnYearInflationSwapHelper::YearOnYearInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & startDate, const Date & endDate, Calendar calendar, BusinessDayConvention paymentConvention, DayCounter dayCounter, const ext::shared_ptr<YoYInflationIndex> & yii, CPI::InterpolationType interpolation, Handle<YieldTermStructure> nominalTermStructure, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date()); |x|ql/termstructures/inflation/inflationhelpers.hpp|void YearOnYearInflationSwapHelper::setTermStructure(YoYInflationTermStructure *); |x|ql/termstructures/inflation/inflationhelpers.hpp|Real YearOnYearInflationSwapHelper::impliedQuote() const; |v|ql/termstructures/inflation/inflationhelpers.hpp|ext::shared_ptr<YearOnYearInflationSwap> YearOnYearInflationSwapHelper::swap() const;@@ -8159,7 +8159,7 @@ | |ql/termstructures/inflation/inflationtraits.hpp|static Rate YoYInflationTraits::initialValue(const YoYInflationTermStructure * t); | |ql/termstructures/inflation/inflationtraits.hpp|static void YoYInflationTraits::updateGuess(std::vector<Rate> & data, Rate level, Size i); | |ql/termstructures/inflation/inflationtraits.hpp|static Size YoYInflationTraits::maxIterations();-|u|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|InterpolatedYoYInflationCurve::InterpolatedYoYInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { }, const Interpolator & interpolator = Interpolator());+|v|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|InterpolatedYoYInflationCurve::InterpolatedYoYInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { }, const Interpolator & interpolator = Interpolator()); |x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|const std::vector<Date> & InterpolatedYoYInflationCurve::dates() const; |x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|const std::vector<Time> & InterpolatedYoYInflationCurve::times() const; |x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|const std::vector<Real> & InterpolatedYoYInflationCurve::data() const;@@ -8169,17 +8169,17 @@ |x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|InterpolatedYoYInflationCurve<Interpolator>(const Date & referenceDate, Date baseDate, Rate baseYoYRate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality, const Interpolator & interpolator); | |ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|Date maxDate() const; |x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|Rate yoyRateImpl(Time t) const;-| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|InterpolatedZeroInflationCurve::InterpolatedZeroInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { }, const Interpolator & interpolator = Interpolator());+|v|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|InterpolatedZeroInflationCurve::InterpolatedZeroInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { }, const Interpolator & interpolator = Interpolator()); |x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Date> & InterpolatedZeroInflationCurve::dates() const;-| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Time> & InterpolatedZeroInflationCurve::times() const;-| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Real> & InterpolatedZeroInflationCurve::data() const;-| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Rate> & InterpolatedZeroInflationCurve::rates() const;-| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|std::vector<std::pair<Date, Rate>> InterpolatedZeroInflationCurve::nodes() const;-| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|InterpolatedZeroInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality, const Interpolator & interpolator);-| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|InterpolatedZeroInflationCurve<Interpolator>(const Date & referenceDate, Date baseDate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality, const Interpolator & interpolator);-| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|Date maxDate() const;-| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|Rate zeroRateImpl(Time t) const;-|?|ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|PiecewiseYoYInflationCurve::PiecewiseYoYInflationCurve<Interpolator, Bootstrap, Traits>(const Date & referenceDate, Date baseDate, Rate baseYoYRate, Frequency frequency, const DayCounter & dayCounter, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const ext::shared_ptr<Seasonality> & seasonality = { }, Real accuracy = 1.0e-12, const Interpolator & i = Interpolator());+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Time> & InterpolatedZeroInflationCurve::times() const;+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Real> & InterpolatedZeroInflationCurve::data() const;+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Rate> & InterpolatedZeroInflationCurve::rates() const;+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|std::vector<std::pair<Date, Rate>> InterpolatedZeroInflationCurve::nodes() const;+|v|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|InterpolatedZeroInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality, const Interpolator & interpolator);+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|InterpolatedZeroInflationCurve<Interpolator>(const Date & referenceDate, Date baseDate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality, const Interpolator & interpolator);+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|Date maxDate() const;+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|Rate zeroRateImpl(Time t) const;+|u|ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|PiecewiseYoYInflationCurve::PiecewiseYoYInflationCurve<Interpolator, Bootstrap, Traits>(const Date & referenceDate, Date baseDate, Rate baseYoYRate, Frequency frequency, const DayCounter & dayCounter, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const ext::shared_ptr<Seasonality> & seasonality = { }, Real accuracy = 1.0e-12, const Interpolator & i = Interpolator()); | |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|Date maxDate() const; | |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|const std::vector<Time> & times() const; | |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|const std::vector<Date> & dates() const;@@ -8188,7 +8188,7 @@ | |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|void performCalculations() const; | |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|Rate yoyRateImpl(Time t) const; | |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|void update();-|?|ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|PiecewiseZeroInflationCurve::PiecewiseZeroInflationCurve<Interpolator, Bootstrap, Traits>(const Date & referenceDate, Date baseDate, Frequency frequency, const DayCounter & dayCounter, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const ext::shared_ptr<Seasonality> & seasonality = { }, Real accuracy = 1.0e-14, const Interpolator & i = Interpolator());+|u|ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|PiecewiseZeroInflationCurve::PiecewiseZeroInflationCurve<Interpolator, Bootstrap, Traits>(const Date & referenceDate, Date baseDate, Frequency frequency, const DayCounter & dayCounter, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const ext::shared_ptr<Seasonality> & seasonality = { }, Real accuracy = 1.0e-14, const Interpolator & i = Interpolator()); |?|ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|PiecewiseZeroInflationCurve::PiecewiseZeroInflationCurve<Interpolator, Bootstrap, Traits>(const Date & referenceDate, BaseDateFunc baseDateFunc, Frequency frequency, const DayCounter & dayCounter, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const ext::shared_ptr<Seasonality> & seasonality = { }, Real accuracy = 1.0e-14, const Interpolator & i = Interpolator()); | |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|Date baseDate() const; | |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|Date maxDate() const;@@ -8199,17 +8199,17 @@ | |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|void performCalculations() const; | |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|Rate zeroRateImpl(Time t) const; | |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|void update();-| |ql/termstructures/inflation/seasonality.hpp|Rate Seasonality::correctZeroRate(const Date & d, Rate r, const InflationTermStructure & iTS) const;-| |ql/termstructures/inflation/seasonality.hpp|Rate Seasonality::correctYoYRate(const Date & d, Rate r, const InflationTermStructure & iTS) const;-| |ql/termstructures/inflation/seasonality.hpp|bool Seasonality::isConsistent(const InflationTermStructure & iTS) const;-| |ql/termstructures/inflation/seasonality.hpp|MultiplicativePriceSeasonality::MultiplicativePriceSeasonality();-| |ql/termstructures/inflation/seasonality.hpp|MultiplicativePriceSeasonality::MultiplicativePriceSeasonality(const Date & seasonalityBaseDate, Frequency frequency, const std::vector<Rate> & seasonalityFactors);-| |ql/termstructures/inflation/seasonality.hpp|void MultiplicativePriceSeasonality::set(const Date & seasonalityBaseDate, Frequency frequency, const std::vector<Rate> & seasonalityFactors);-| |ql/termstructures/inflation/seasonality.hpp|Date MultiplicativePriceSeasonality::seasonalityBaseDate() const;-| |ql/termstructures/inflation/seasonality.hpp|Frequency MultiplicativePriceSeasonality::frequency() const;-| |ql/termstructures/inflation/seasonality.hpp|std::vector<Rate> MultiplicativePriceSeasonality::seasonalityFactors() const;+|x|ql/termstructures/inflation/seasonality.hpp|Rate Seasonality::correctZeroRate(const Date & d, Rate r, const InflationTermStructure & iTS) const;+|x|ql/termstructures/inflation/seasonality.hpp|Rate Seasonality::correctYoYRate(const Date & d, Rate r, const InflationTermStructure & iTS) const;+|x|ql/termstructures/inflation/seasonality.hpp|bool Seasonality::isConsistent(const InflationTermStructure & iTS) const;+|x|ql/termstructures/inflation/seasonality.hpp|MultiplicativePriceSeasonality::MultiplicativePriceSeasonality();+|v|ql/termstructures/inflation/seasonality.hpp|MultiplicativePriceSeasonality::MultiplicativePriceSeasonality(const Date & seasonalityBaseDate, Frequency frequency, const std::vector<Rate> & seasonalityFactors);+|x|ql/termstructures/inflation/seasonality.hpp|void MultiplicativePriceSeasonality::set(const Date & seasonalityBaseDate, Frequency frequency, const std::vector<Rate> & seasonalityFactors);+|x|ql/termstructures/inflation/seasonality.hpp|Date MultiplicativePriceSeasonality::seasonalityBaseDate() const;+|x|ql/termstructures/inflation/seasonality.hpp|Frequency MultiplicativePriceSeasonality::frequency() const;+|x|ql/termstructures/inflation/seasonality.hpp|std::vector<Rate> MultiplicativePriceSeasonality::seasonalityFactors() const; | |ql/termstructures/inflation/seasonality.hpp|Rate MultiplicativePriceSeasonality::seasonalityFactor(const Date & d) const;-| |ql/termstructures/inflation/seasonality.hpp|KerkhofSeasonality::KerkhofSeasonality(const Date & seasonalityBaseDate, const std::vector<Rate> & seasonalityFactors);+|v|ql/termstructures/inflation/seasonality.hpp|KerkhofSeasonality::KerkhofSeasonality(const Date & seasonalityBaseDate, const std::vector<Rate> & seasonalityFactors); | |ql/termstructures/inflationtermstructure.hpp|InflationTermStructure::InflationTermStructure(Date baseDate, Frequency frequency, const DayCounter & dayCounter = DayCounter(), ext::shared_ptr<Seasonality> seasonality = { }, Rate baseRate = Null<Rate>()); | |ql/termstructures/inflationtermstructure.hpp|InflationTermStructure::InflationTermStructure(const Date & referenceDate, Date baseDate, Frequency frequency, const DayCounter & dayCounter = DayCounter(), ext::shared_ptr<Seasonality> seasonality = { }, Rate baseRate = Null<Rate>()); | |ql/termstructures/inflationtermstructure.hpp|InflationTermStructure::InflationTermStructure(Natural settlementDays, const Calendar & calendar, Date baseDate, Frequency frequency, const DayCounter & dayCounter = DayCounter(), ext::shared_ptr<Seasonality> seasonality = { }, Rate baseRate = Null<Rate>());@@ -8299,16 +8299,16 @@ |v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(const Date & settlementDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Handle<Quote>> & vols, const DayCounter & dc = Actual365Fixed()); |v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(const Date & settlementDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Volatility> & vols, const DayCounter & dc = Actual365Fixed()); |v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(Natural settlementDays, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Volatility> & vols, const DayCounter & dc = Actual365Fixed());-|?|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(CapFloorTermVolCurve &&);-|?|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(const CapFloorTermVolCurve &);+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(CapFloorTermVolCurve &&);+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(const CapFloorTermVolCurve &); |x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve & CapFloorTermVolCurve::operator=(CapFloorTermVolCurve &&); |x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve & CapFloorTermVolCurve::operator=(const CapFloorTermVolCurve &); |x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|const std::vector<Period> & CapFloorTermVolCurve::optionTenors() const; |v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|const std::vector<Date> & CapFloorTermVolCurve::optionDates() const; |v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|const std::vector<Time> & CapFloorTermVolCurve::optionTimes() const; | |ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Date maxDate() const;-| |ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Real minStrike() const;-| |ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Real maxStrike() const; | |ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Volatility volatilityImpl(Time t, Rate) const; |v|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|CapFloorTermVolSurface::CapFloorTermVolSurface(Natural settlementDays, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Rate> & strikes, const std::vector<std::vector<Handle<Quote>>> &, const DayCounter & dc = Actual365Fixed()); |v|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|CapFloorTermVolSurface::CapFloorTermVolSurface(const Date & settlementDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Rate> & strikes, const std::vector<std::vector<Handle<Quote>>> &, const DayCounter & dc = Actual365Fixed());@@ -8319,16 +8319,16 @@ |v|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Time> & CapFloorTermVolSurface::optionTimes() const; |x|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Rate> & CapFloorTermVolSurface::strikes() const; | |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Date maxDate() const;-| |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Real minStrike() const;-| |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Real maxStrike() const; | |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Volatility volatilityImpl(Time t, Rate strike) const; |v|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|ConstantCapFloorTermVolatility::ConstantCapFloorTermVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Handle<Quote> volatility, const DayCounter & dc); |v|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|ConstantCapFloorTermVolatility::ConstantCapFloorTermVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Handle<Quote> volatility, const DayCounter & dc); |x|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|ConstantCapFloorTermVolatility::ConstantCapFloorTermVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc); |x|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|ConstantCapFloorTermVolatility::ConstantCapFloorTermVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc); | |ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|Date maxDate() const;-| |ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|Real minStrike() const;-| |ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|Real maxStrike() const; |v|ql/termstructures/volatility/equityfx/andreasenhugelocalvoladapter.hpp|AndreasenHugeLocalVolAdapter::AndreasenHugeLocalVolAdapter(ext::shared_ptr<AndreasenHugeVolatilityInterpl> localVol); |v|ql/termstructures/volatility/equityfx/andreasenhugevolatilityadapter.hpp|AndreasenHugeVolatilityAdapter::AndreasenHugeVolatilityAdapter(ext::shared_ptr<AndreasenHugeVolatilityInterpl> volInterpl, Real eps = 1e-6); |v|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|AndreasenHugeVolatilityInterpl::AndreasenHugeVolatilityInterpl(const CalibrationSet & calibrationSet, Handle<Quote> spot, Handle<YieldTermStructure> rTS, Handle<YieldTermStructure> qTS, InterpolationType interpolationType = CubicSpline, CalibrationType calibrationType = Call, Size nGridPoints = 500, Real minStrike = Null<Real>(), Real maxStrike = Null<Real>(), ext::shared_ptr<OptimizationMethod> optimizationMethod = ext::make_shared<LevenbergMarquardt>(), const EndCriteria & endCriteria = EndCriteria(500, 100, 1e-12, 1e-10, 1e-10));@@ -8349,14 +8349,14 @@ |x|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol(Natural settlementDays, const Calendar & cal, Volatility volatility, const DayCounter & dc); |v|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol(Natural settlementDays, const Calendar & cal, Handle<Quote> volatility, const DayCounter & dc); | |ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Date maxDate() const;-| |ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Real minStrike() const;-| |ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Real maxStrike() const; | |ql/termstructures/volatility/equityfx/blackconstantvol.hpp|void accept(AcyclicVisitor & v); | |ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Volatility blackVolImpl(Time, Real) const; |?|ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|BlackVarianceCurve::BlackVarianceCurve(const Date & referenceDate, const std::vector<Date> & dates, const std::vector<Volatility> & blackVolCurve, DayCounter dayCounter, bool forceMonotoneVariance = true, BlackVolTimeExtrapolation::Type timeExtrapolationType = BlackVolTimeExtrapolation::FlatVolatility); | |ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|Date maxDate() const;-| |ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|Real minStrike() const;-| |ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|Real maxStrike() const; | |ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|void accept(AcyclicVisitor & v); |v|ql/termstructures/volatility/equityfx/blackvariancesurface.hpp|BlackVarianceSurface::BlackVarianceSurface(const Date & referenceDate, const Calendar & cal, const std::vector<Date> & dates, std::vector<Real> strikes, const Matrix & blackVolMatrix, DayCounter dayCounter, Extrapolation lowerExtrapolation = InterpolatorDefaultExtrapolation, Extrapolation upperExtrapolation = InterpolatorDefaultExtrapolation); | |ql/termstructures/volatility/equityfx/blackvariancesurface.hpp|void accept(AcyclicVisitor & v);@@ -8405,8 +8405,8 @@ |v|ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|ImpliedVolTermStructure::ImpliedVolTermStructure(Handle<BlackVolTermStructure> origTS, const Date & referenceDate); |v|ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|ImpliedVolTermStructure(Handle<BlackVolTermStructure> originalTS, const Date & referenceDate); | |ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Date maxDate() const;-| |ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Real minStrike() const;-| |ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Real maxStrike() const; | |ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|void accept(AcyclicVisitor & v); | |ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Real blackVarianceImpl(Time t, Real strike) const; |x|ql/termstructures/volatility/equityfx/localconstantvol.hpp|LocalConstantVol::LocalConstantVol(const Date & referenceDate, Volatility volatility, DayCounter dayCounter);@@ -8435,12 +8435,12 @@ |v|ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|static ext::shared_ptr<PiecewiseBlackVarianceSurface> PiecewiseBlackVarianceSurface::makeFromGrid(const Date & referenceDate, const std::vector<Date> & dates, const std::vector<Real> & strikes, const Matrix & blackVols, const DayCounter & dc = DayCounter()); |?|ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|DayCounter dayCounter() const; | |ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|Date maxDate() const;-| |ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|Real minStrike() const;-| |ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|Real maxStrike() const; |v|ql/termstructures/volatility/flatsmilesection.hpp|FlatSmileSection::FlatSmileSection(const Date & d, Volatility vol, const DayCounter & dc, const Date & referenceDate = Date(), Real atmLevel = Null<Rate>(), VolatilityType type = ShiftedLognormal, Real shift = 0.0); |x|ql/termstructures/volatility/flatsmilesection.hpp|FlatSmileSection::FlatSmileSection(Time exerciseTime, Volatility vol, const DayCounter & dc, Real atmLevel = Null<Rate>(), VolatilityType type = ShiftedLognormal, Real shift = 0.0);-| |ql/termstructures/volatility/flatsmilesection.hpp|Real minStrike() const;-| |ql/termstructures/volatility/flatsmilesection.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/flatsmilesection.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/flatsmilesection.hpp|Real maxStrike() const; | |ql/termstructures/volatility/flatsmilesection.hpp|Real atmLevel() const; | |ql/termstructures/volatility/flatsmilesection.hpp|Volatility volatilityImpl(Rate) const; | |ql/termstructures/volatility/gaussian1dsmilesection.hpp|Gaussian1dSmileSection::Gaussian1dSmileSection(const Date & fixingDate, ext::shared_ptr<SwapIndex> swapIndex, const ext::shared_ptr<Gaussian1dModel> & model, const DayCounter & dc, const ext::shared_ptr<Gaussian1dSwaptionEngine> & swaptionEngine = ext::shared_ptr<Gaussian1dSwaptionEngine>());@@ -8505,8 +8505,8 @@ | |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|CapletVarianceCurve(const Date & referenceDate, const std::vector<Date> & dates, const std::vector<Volatility> & capletVolCurve, const DayCounter & dayCounter, VolatilityType type, Real displacement); |?|ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|DayCounter dayCounter() const; | |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Date maxDate() const;-| |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Real minStrike() const;-| |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Real maxStrike() const; | |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|ext::shared_ptr<SmileSection> smileSectionImpl(Time t) const; | |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Volatility volatilityImpl(Time t, Rate r) const; | |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|VolatilityType volatilityType() const;@@ -8516,8 +8516,8 @@ |x|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|ConstantOptionletVolatility::ConstantOptionletVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real displacement = 0.0); |x|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|ConstantOptionletVolatility::ConstantOptionletVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real displacement = 0.0); | |ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Date maxDate() const;-| |ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Real minStrike() const;-| |ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Real maxStrike() const; | |ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|VolatilityType volatilityType() const; | |ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Real displacement() const; | |ql/termstructures/volatility/optionlet/optionletstripper.hpp|const std::vector<Period> & OptionletStripper::optionletFixingTenors() const;@@ -8571,8 +8571,8 @@ |?|ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Calendar calendar() const; | |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Natural settlementDays() const; | |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|BusinessDayConvention businessDayConvention() const;-| |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Rate minStrike() const;-| |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Rate maxStrike() const;+|x|ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Rate minStrike() const;+|x|ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Rate maxStrike() const; | |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|VolatilityType volatilityType() const; | |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Real displacement() const; | |ql/termstructures/volatility/optionlet/strippedoptionlet.hpp|StrippedOptionlet::StrippedOptionlet(Natural settlementDays, const Calendar & calendar, BusinessDayConvention bdc, ext::shared_ptr<IborIndex> iborIndex, const std::vector<Date> & optionletDates, const std::vector<Rate> & strikes, std::vector<std::vector<Handle<Quote>>>, DayCounter dc, VolatilityType type = ShiftedLognormal, Real displacement = 0.0);@@ -8613,8 +8613,8 @@ |v|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|EndCriteria::Type SabrInterpolatedSmileSection::endCriteria() const; | |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|void update(); | |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real volatilityImpl(Rate strike) const;-| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real minStrike() const;-| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real maxStrike() const; | |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real atmLevel() const; |v|ql/termstructures/volatility/sabrsmilesection.hpp|SabrSmileSection::SabrSmileSection(Time timeToExpiry, Rate forward, const std::vector<Real> & sabrParameters, Real shift = 0.0, VolatilityType volatilityType = VolatilityType::ShiftedLognormal); |v|ql/termstructures/volatility/sabrsmilesection.hpp|SabrSmileSection::SabrSmileSection(const Date & d, Rate forward, const std::vector<Real> & sabrParameters, const Date & referenceDate = Date(), const DayCounter & dc = Actual365Fixed(), Real shift = 0.0, VolatilityType volatilityType = VolatilityType::ShiftedLognormal);@@ -8625,8 +8625,8 @@ | |ql/termstructures/volatility/smilesection.hpp|SmileSection::SmileSection(const Date & d, DayCounter dc = DayCounter(), const Date & referenceDate = Date(), VolatilityType type = ShiftedLognormal, Rate shift = 0.0); | |ql/termstructures/volatility/smilesection.hpp|SmileSection::SmileSection(Time exerciseTime, DayCounter dc = DayCounter(), VolatilityType type = ShiftedLognormal, Rate shift = 0.0); | |ql/termstructures/volatility/smilesection.hpp|SmileSection::SmileSection();-| |ql/termstructures/volatility/smilesection.hpp|Real SmileSection::minStrike() const;-| |ql/termstructures/volatility/smilesection.hpp|Real SmileSection::maxStrike() const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::minStrike() const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::maxStrike() const; |v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::variance(Rate strike) const; |v|ql/termstructures/volatility/smilesection.hpp|Volatility SmileSection::volatility(Rate strike) const; |v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::atmLevel() const;@@ -8638,7 +8638,7 @@ |x|ql/termstructures/volatility/smilesection.hpp|const DayCounter & SmileSection::dayCounter() const; |v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::optionPrice(Rate strike, Option::Type type = Option::Call, Real discount = 1.0) const; |v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::digitalOptionPrice(Rate strike, Option::Type type = Option::Call, Real discount = 1.0, Real gap = 1.0e-5) const;-| |ql/termstructures/volatility/smilesection.hpp|Real SmileSection::vega(Rate strike, Real discount = 1.0) const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::vega(Rate strike, Real discount = 1.0) const; |v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::density(Rate strike, Real discount = 1.0, Real gap = 1.0E-4) const; | |ql/termstructures/volatility/smilesection.hpp|Volatility SmileSection::volatility(Rate strike, VolatilityType type, Real shift = 0.0) const; | |ql/termstructures/volatility/smilesection.hpp|Real varianceImpl(Rate strike) const;@@ -8650,8 +8650,8 @@ | |ql/termstructures/volatility/smilesectionutils.hpp|const std::vector<Real> & SmileSectionUtils::callPrices() const; | |ql/termstructures/volatility/smilesectionutils.hpp|Real SmileSectionUtils::atmLevel() const; |v|ql/termstructures/volatility/spreadedsmilesection.hpp|SpreadedSmileSection::SpreadedSmileSection(ext::shared_ptr<SmileSection>, Handle<Quote> spread);-| |ql/termstructures/volatility/spreadedsmilesection.hpp|Real minStrike() const;-| |ql/termstructures/volatility/spreadedsmilesection.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/spreadedsmilesection.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/spreadedsmilesection.hpp|Real maxStrike() const; | |ql/termstructures/volatility/spreadedsmilesection.hpp|Real atmLevel() const; | |ql/termstructures/volatility/spreadedsmilesection.hpp|const Date & exerciseDate() const; | |ql/termstructures/volatility/spreadedsmilesection.hpp|Time exerciseTime() const;@@ -8682,10 +8682,10 @@ | |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|static Real CmsMarketCalibration::betaTransformDirect(Real y); | |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|static Real CmsMarketCalibration::reversionTransformInverse(Real reversion); | |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|static Real CmsMarketCalibration::reversionTransformDirect(Real y);-| |ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|Gaussian1dSwaptionVolatility::Gaussian1dSwaptionVolatility(const Calendar & cal, BusinessDayConvention bdc, ext::shared_ptr<SwapIndex> indexBase, const ext::shared_ptr<Gaussian1dModel> & model, const DayCounter & dc, ext::shared_ptr<Gaussian1dSwaptionEngine> swaptionEngine = ext::shared_ptr<Gaussian1dSwaptionEngine>());-| |ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|DateHelper::DateHelper(const TermStructure & ts, const Time t);-| |ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|Real DateHelper::operator()(Real date) const;-| |ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|Real DateHelper::derivative(Real date) const;+|u|ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|Gaussian1dSwaptionVolatility::Gaussian1dSwaptionVolatility(const Calendar & cal, BusinessDayConvention bdc, ext::shared_ptr<SwapIndex> indexBase, const ext::shared_ptr<Gaussian1dModel> & model, const DayCounter & dc, ext::shared_ptr<Gaussian1dSwaptionEngine> swaptionEngine = ext::shared_ptr<Gaussian1dSwaptionEngine>());+|x|ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|DateHelper::DateHelper(const TermStructure & ts, const Time t);+|x|ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|Real DateHelper::operator()(Real date) const;+|x|ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|Real DateHelper::derivative(Real date) const; |v|ql/termstructures/volatility/swaption/interpolatedswaptionvolatilitycube.hpp|InterpolatedSwaptionVolatilityCube::InterpolatedSwaptionVolatilityCube(const Handle<SwaptionVolatilityStructure> & atmVolStructure, const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const std::vector<Spread> & strikeSpreads, const std::vector<std::vector<Handle<Quote>>> & volSpreads, const ext::shared_ptr<SwapIndex> & swapIndexBase, const ext::shared_ptr<SwapIndex> & shortSwapIndexBase, bool vegaWeightedSmileFit); |v|ql/termstructures/volatility/swaption/interpolatedswaptionvolatilitycube.hpp|const Matrix & InterpolatedSwaptionVolatilityCube::volSpreads(Size i) const; | |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|static Real XabrModelTraits::extractGamma(const ext::shared_ptr<typename Model::Interpolation> &);@@ -8740,8 +8740,8 @@ | |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|const Date & referenceDate() const; |?|ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Calendar calendar() const; | |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Natural settlementDays() const;-| |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Rate minStrike() const;-| |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Rate maxStrike() const;+|x|ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Rate minStrike() const;+|x|ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Rate maxStrike() const; | |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|const Period & maxSwapTenor() const; | |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Real shiftImpl(Time optionTime, Time swapLength) const; | |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|VolatilityType volatilityType() const;@@ -8750,8 +8750,8 @@ |x|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|ConstantSwaptionVolatility::ConstantSwaptionVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real shift = 0.0); |x|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|ConstantSwaptionVolatility::ConstantSwaptionVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real shift = 0.0); | |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Date maxDate() const;-| |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Real minStrike() const;-| |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Real maxStrike() const; | |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|const Period & maxSwapTenor() const; | |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|VolatilityType volatilityType() const; | |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Real shiftImpl(Time optionTime, Time swapLength) const;@@ -8789,8 +8789,8 @@ |v|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|std::pair<Size, Size> SwaptionVolatilityMatrix::locate(const Date & optionDate, const Period & swapTenor) const; | |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|std::pair<Size, Size> SwaptionVolatilityMatrix::locate(Time optionTime, Time swapLength) const; | |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Date maxDate() const;-| |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Rate minStrike() const;-| |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Rate maxStrike() const;+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Rate minStrike() const;+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Rate maxStrike() const; | |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|const Period & maxSwapTenor() const; | |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Volatility volatilityImpl(Time optionTime, Time swapLength, Rate) const; | |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|VolatilityType volatilityType() const;@@ -8855,8 +8855,8 @@ | |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility volatilityImpl(const Date & optionDate, const Period & swapTenor, Rate strike) const; | |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shiftImpl(const Date & optionDate, const Period & swapTenor) const; | |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shiftImpl(Time, Time) const;-| |ql/termstructures/volatility/swaption/zabrswaptionvolatilitycube.hpp|static Real extractGamma(const ext::shared_ptr<typename Model::Interpolation> & interp);-| |ql/termstructures/volatility/swaption/zabrswaptionvolatilitycube.hpp|static ext::shared_ptr<typename Model::SmileSection> createSmileSection(Time optionTime, Real forward, const std::vector<Real> & params, Real shift, VolatilityType);+|x|ql/termstructures/volatility/swaption/zabrswaptionvolatilitycube.hpp|static Real extractGamma(const ext::shared_ptr<typename Model::Interpolation> & interp);+|x|ql/termstructures/volatility/swaption/zabrswaptionvolatilitycube.hpp|static ext::shared_ptr<typename Model::SmileSection> createSmileSection(Time optionTime, Real forward, const std::vector<Real> & params, Real shift, VolatilityType); | |ql/termstructures/volatility/volatilitytype.hpp|std::ostream & operator<<(std::ostream & out, const VolatilityType & t); | |ql/termstructures/volatility/zabr.hpp|ZabrModel::ZabrModel(Real expiryTime, Real forward, Real alpha, Real beta, Real nu, Real rho, Real gamma); | |ql/termstructures/volatility/zabr.hpp|Real ZabrModel::localVolatility(Real f) const;@@ -8875,23 +8875,23 @@ | |ql/termstructures/volatility/zabr.hpp|Real ZabrModel::nu() const; |x|ql/termstructures/volatility/zabr.hpp|Real ZabrModel::rho() const; |x|ql/termstructures/volatility/zabr.hpp|Real ZabrModel::gamma() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection::ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool isGammaFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection::ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & vols, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool isGammaFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::alpha() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::beta() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::nu() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::rho() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::gamma() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::rmsError() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::maxError() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|EndCriteria::Type ZabrInterpolatedSmileSection::endCriteria() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection::ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool isGammaFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection::ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & vols, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool isGammaFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::alpha() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::beta() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::nu() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::rho() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::gamma() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::rmsError() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::maxError() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|EndCriteria::Type ZabrInterpolatedSmileSection::endCriteria() const; | |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|void update(); | |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real volatilityImpl(Rate strike) const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real minStrike() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real maxStrike() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real atmLevel() const;-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed, bool isBetaFixed, bool isNuFixed, bool isRhoFixed, bool isGammaFixed, bool vegaWeighted, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<OptimizationMethod> method, const DayCounter & dc);-| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed, bool isBetaFixed, bool isNuFixed, bool isRhoFixed, bool isGammaFixed, bool vegaWeighted, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<OptimizationMethod> method, const DayCounter & dc);+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real atmLevel() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed, bool isBetaFixed, bool isNuFixed, bool isRhoFixed, bool isGammaFixed, bool vegaWeighted, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<OptimizationMethod> method, const DayCounter & dc);+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed, bool isBetaFixed, bool isNuFixed, bool isRhoFixed, bool isGammaFixed, bool vegaWeighted, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<OptimizationMethod> method, const DayCounter & dc); | |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|void createInterpolation() const; | |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|void performCalculations() const; | |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real varianceImpl(Real strike) const;@@ -8924,10 +8924,10 @@ | |ql/termstructures/voltermstructure.hpp|VolatilityTermStructure::VolatilityTermStructure(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc = DayCounter()); | |ql/termstructures/voltermstructure.hpp|VolatilityTermStructure::VolatilityTermStructure(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc = DayCounter()); |x|ql/termstructures/voltermstructure.hpp|BusinessDayConvention VolatilityTermStructure::businessDayConvention() const;-| |ql/termstructures/voltermstructure.hpp|Date VolatilityTermStructure::optionDateFromTenor(const Period &) const;+|v|ql/termstructures/voltermstructure.hpp|Date VolatilityTermStructure::optionDateFromTenor(const Period &) const; |v|ql/termstructures/voltermstructure.hpp|Rate VolatilityTermStructure::minStrike() const; |v|ql/termstructures/voltermstructure.hpp|Rate VolatilityTermStructure::maxStrike() const;-| |ql/termstructures/voltermstructure.hpp|Date optionDateFromTenor(const Period & p) const;+|v|ql/termstructures/voltermstructure.hpp|Date optionDateFromTenor(const Period & p) const; |v|ql/termstructures/yield/bondhelpers.hpp|BondHelper::BondHelper(const Handle<Quote> & price, const ext::shared_ptr<Bond> & bond, Bond::Price::Type priceType = Bond::Price::Clean); |x|ql/termstructures/yield/bondhelpers.hpp|Real BondHelper::impliedQuote() const; |x|ql/termstructures/yield/bondhelpers.hpp|void BondHelper::setTermStructure(YieldTermStructure *);@@ -8963,9 +8963,9 @@ | |ql/termstructures/yield/compositezeroyieldstructure.hpp|Time maxTime() const; | |ql/termstructures/yield/compositezeroyieldstructure.hpp|void update(); | |ql/termstructures/yield/compositezeroyieldstructure.hpp|Rate zeroYieldImpl(Time t) const;-|?|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve::InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & dfs, const DayCounter & dayCounter, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });-|?|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve::InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & dfs, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);-|?|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve::InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & dfs, const DayCounter & dayCounter, const Interpolator & interpolator);+|v|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve::InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & dfs, const DayCounter & dayCounter, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve::InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & dfs, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve::InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & dfs, const DayCounter & dayCounter, const Interpolator & interpolator); | |ql/termstructures/yield/discountcurve.hpp|const std::vector<Time> & InterpolatedDiscountCurve::times() const; |x|ql/termstructures/yield/discountcurve.hpp|const std::vector<Date> & InterpolatedDiscountCurve::dates() const; | |ql/termstructures/yield/discountcurve.hpp|const std::vector<Real> & InterpolatedDiscountCurve::data() const;@@ -8973,33 +8973,33 @@ | |ql/termstructures/yield/discountcurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedDiscountCurve::nodes() const; | |ql/termstructures/yield/discountcurve.hpp|Date maxDate() const; | |ql/termstructures/yield/discountcurve.hpp|DiscountFactor discountImpl(Time t) const;-|?|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);-|?|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & discounts, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & discounts, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);-|?|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & discounts, const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & discounts, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & discounts, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & discounts, const DayCounter & dayCounter, const T & interpolator); | |ql/termstructures/yield/discountcurve.hpp|void initialize(); |v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(Natural settlementDays, const Calendar & calendar, std::vector<ext::shared_ptr<BondHelper>> bonds, const DayCounter & dayCounter, const FittingMethod & fittingMethod, Real accuracy = 1.0e-10, Size maxEvaluations = 10000, Array guess = Array(), Real simplexLambda = 1.0, Size maxStationaryStateIterations = 100);-|?|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(const Date & referenceDate, std::vector<ext::shared_ptr<BondHelper>> bonds, const DayCounter & dayCounter, const FittingMethod & fittingMethod, Real accuracy = 1.0e-10, Size maxEvaluations = 10000, Array guess = Array(), Real simplexLambda = 1.0, Size maxStationaryStateIterations = 100);-|?|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(Natural settlementDays, const Calendar & calendar, const FittingMethod & fittingMethod, Array parameters, Date maxDate, const DayCounter & dayCounter);-|?|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(const Date & referenceDate, const FittingMethod & fittingMethod, Array parameters, Date maxDate, const DayCounter & dayCounter);+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(const Date & referenceDate, std::vector<ext::shared_ptr<BondHelper>> bonds, const DayCounter & dayCounter, const FittingMethod & fittingMethod, Real accuracy = 1.0e-10, Size maxEvaluations = 10000, Array guess = Array(), Real simplexLambda = 1.0, Size maxStationaryStateIterations = 100);+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(Natural settlementDays, const Calendar & calendar, const FittingMethod & fittingMethod, Array parameters, Date maxDate, const DayCounter & dayCounter);+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(const Date & referenceDate, const FittingMethod & fittingMethod, Array parameters, Date maxDate, const DayCounter & dayCounter); |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Size FittedBondDiscountCurve::numberOfBonds() const; |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Date FittedBondDiscountCurve::maxDate() const; |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|const FittingMethod & FittedBondDiscountCurve::fitResults() const; |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|void FittedBondDiscountCurve::resetGuess(const Array & guess);-| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Size FittingMethod::size() const;-| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array FittingMethod::solution() const;-| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Integer FittingMethod::numberOfIterations() const;-| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Real FittingMethod::minimumCostValue() const;-| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|EndCriteria::Type FittingMethod::errorCode() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Size FittingMethod::size() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array FittingMethod::solution() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Integer FittingMethod::numberOfIterations() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Real FittingMethod::minimumCostValue() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|EndCriteria::Type FittingMethod::errorCode() const; | |ql/termstructures/yield/fittedbonddiscountcurve.hpp|std::unique_ptr<FittingMethod> FittingMethod::clone() const; |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|bool FittingMethod::constrainAtZero() const; |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array FittingMethod::weights() const; |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array FittingMethod::l2() const; |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|ext::shared_ptr<OptimizationMethod> FittingMethod::optimizationMethod() const; |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|const Constraint & FittingMethod::constraint() const;-| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|DiscountFactor FittingMethod::discount(const Array & x, Time t) const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|DiscountFactor FittingMethod::discount(const Array & x, Time t) const; |x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|const FittedBondDiscountCurve::FittingMethod & fitResults() const; | |ql/termstructures/yield/fittedbonddiscountcurve.hpp|void update(); | |ql/termstructures/yield/fittedbonddiscountcurve.hpp|void setup();@@ -9013,9 +9013,9 @@ | |ql/termstructures/yield/flatforward.hpp|void update(); | |ql/termstructures/yield/flatforward.hpp|DiscountFactor discountImpl(Time t) const; | |ql/termstructures/yield/flatforward.hpp|void performCalculations() const;-|?|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve::InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });-|?|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve::InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);-|?|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve::InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Interpolator & interpolator);+|v|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve::InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve::InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve::InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Interpolator & interpolator); | |ql/termstructures/yield/forwardcurve.hpp|const std::vector<Time> & InterpolatedForwardCurve::times() const; |x|ql/termstructures/yield/forwardcurve.hpp|const std::vector<Date> & InterpolatedForwardCurve::dates() const; | |ql/termstructures/yield/forwardcurve.hpp|const std::vector<Real> & InterpolatedForwardCurve::data() const;@@ -9023,12 +9023,12 @@ | |ql/termstructures/yield/forwardcurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedForwardCurve::nodes() const; | |ql/termstructures/yield/forwardcurve.hpp|Date maxDate() const; | |ql/termstructures/yield/forwardcurve.hpp|Rate zeroYieldImpl(Time t) const;-|?|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);-|?|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);-|?|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const T & interpolator); | |ql/termstructures/yield/forwardcurve.hpp|void initialize(); |v|ql/termstructures/yield/forwardspreadedtermstructure.hpp|ForwardSpreadedTermStructure::ForwardSpreadedTermStructure(Handle<YieldTermStructure>, Handle<Quote> spread); |v|ql/termstructures/yield/forwardspreadedtermstructure.hpp|ForwardSpreadedTermStructure(Handle<YieldTermStructure> h, Handle<Quote> spread);@@ -9051,23 +9051,23 @@ | |ql/termstructures/yield/impliedtermstructure.hpp|Date maxDate() const; | |ql/termstructures/yield/impliedtermstructure.hpp|void update(); | |ql/termstructures/yield/impliedtermstructure.hpp|DiscountFactor discountImpl(Time t) const;-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve::InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve::InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve::InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Interpolator & interpolator);-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Time> & InterpolatedSimpleZeroCurve::times() const;+|v|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve::InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve::InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve::InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Interpolator & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Time> & InterpolatedSimpleZeroCurve::times() const; |x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Date> & InterpolatedSimpleZeroCurve::dates() const;-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Real> & InterpolatedSimpleZeroCurve::data() const;-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Rate> & InterpolatedSimpleZeroCurve::zeroRates() const;-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedSimpleZeroCurve::nodes() const;-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|Date maxDate() const;-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|DiscountFactor discountImpl(Time t) const;-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const T & interpolator);-| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|void initialize();+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Real> & InterpolatedSimpleZeroCurve::data() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Rate> & InterpolatedSimpleZeroCurve::zeroRates() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedSimpleZeroCurve::nodes() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|Date maxDate() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|DiscountFactor discountImpl(Time t) const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|void initialize(); |v|ql/termstructures/yield/multipleresetsswaphelper.hpp|MultipleResetsSwapRateHelper::MultipleResetsSwapRateHelper(Natural settlementDays, const Period & tenor, const std::variant<Rate, Handle<Quote>> & fixedRate, const ext::shared_ptr<IborIndex> & iborIndex, Size resetsPerCoupon, Handle<YieldTermStructure> discountingCurve = { }, RateAveraging::Type averagingMethod = RateAveraging::Compound, Spread spread = 0.0, Frequency fixedFrequency = NoFrequency, const DayCounter & fixedDayCount = DayCounter(), BusinessDayConvention fixedConvention = ModifiedFollowing); |x|ql/termstructures/yield/multipleresetsswaphelper.hpp|Real MultipleResetsSwapRateHelper::impliedQuote() const; |x|ql/termstructures/yield/multipleresetsswaphelper.hpp|void MultipleResetsSwapRateHelper::setTermStructure(YieldTermStructure *);@@ -9099,21 +9099,21 @@ |x|ql/termstructures/yield/overnightindexfutureratehelper.hpp|void OvernightIndexFutureRateHelper::accept(AcyclicVisitor &); |v|ql/termstructures/yield/overnightindexfutureratehelper.hpp|Real OvernightIndexFutureRateHelper::convexityAdjustment() const; |v|ql/termstructures/yield/overnightindexfutureratehelper.hpp|SofrFutureRateHelper::SofrFutureRateHelper(const std::variant<Rate, Handle<Quote>> & price, Month referenceMonth, Year referenceYear, Frequency referenceFreq, const std::variant<Rate, Handle<Quote>> & convexityAdjustment = 0.0, Pillar::Choice pillar = Pillar::LastRelevantDate, const Date & customPillarDate = Date());-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure::InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Interpolator factory = Interpolator());-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure::InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, const DayCounter & dc, Interpolator factory = Interpolator());-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, T factory);-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, const DayCounter & dc, T factory);+|v|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure::InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Interpolator factory = Interpolator());+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure::InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, const DayCounter & dc, Interpolator factory = Interpolator());+|v|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, T factory);+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, const DayCounter & dc, T factory); |?|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|DayCounter dayCounter() const; |?|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Calendar calendar() const;-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Natural settlementDays() const;-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|const Date & referenceDate() const;-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Date maxDate() const;-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Rate zeroYieldImpl(Time t) const;-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Spread calcSpread(Time t) const;-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Spread calcSpreadPrimitive(Time t) const;-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|void update();-| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|void updateInterpolation();-| |ql/termstructures/yield/piecewisespreadyieldcurve.hpp|PiecewiseSpreadYieldCurve::PiecewiseSpreadYieldCurve<Traits, Interpolator, Bootstrap>(Handle<YieldTermStructure> baseCurve, std::vector<ext::shared_ptr<typename traits_type::helper>> instruments, const Interpolator & i = { }, typename base_curve::bootstrap_type bootstrap = { });+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Natural settlementDays() const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|const Date & referenceDate() const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Date maxDate() const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Rate zeroYieldImpl(Time t) const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Spread calcSpread(Time t) const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Spread calcSpreadPrimitive(Time t) const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|void update();+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|void updateInterpolation();+|v|ql/termstructures/yield/piecewisespreadyieldcurve.hpp|PiecewiseSpreadYieldCurve::PiecewiseSpreadYieldCurve<Traits, Interpolator, Bootstrap>(Handle<YieldTermStructure> baseCurve, std::vector<ext::shared_ptr<typename traits_type::helper>> instruments, const Interpolator & i = { }, typename base_curve::bootstrap_type bootstrap = { }); |?|ql/termstructures/yield/piecewiseyieldcurve.hpp|PiecewiseYieldCurve::PiecewiseYieldCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & i = { }, bootstrap_type bootstrap = { }); |?|ql/termstructures/yield/piecewiseyieldcurve.hpp|PiecewiseYieldCurve::PiecewiseYieldCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, const Interpolator & i, bootstrap_type bootstrap = { }); |?|ql/termstructures/yield/piecewiseyieldcurve.hpp|PiecewiseYieldCurve::PiecewiseYieldCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, bootstrap_type bootstrap);@@ -9128,19 +9128,19 @@ | |ql/termstructures/yield/piecewiseyieldcurve.hpp|void update(); | |ql/termstructures/yield/piecewiseyieldcurve.hpp|DiscountFactor discountImpl(Time t) const; | |ql/termstructures/yield/piecewiseyieldcurve.hpp|void performCalculations() const;-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure::InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp = Continuous, Frequency freq = NoFrequency, Interpolator factory = Interpolator());-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure::InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp, Frequency freq, const DayCounter & dc, Interpolator factory = Interpolator());-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp, Frequency freq, T factory);-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp, Frequency freq, const DayCounter & dc, T factory);+|v|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure::InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp = Continuous, Frequency freq = NoFrequency, Interpolator factory = Interpolator());+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure::InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp, Frequency freq, const DayCounter & dc, Interpolator factory = Interpolator());+|v|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp, Frequency freq, T factory);+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp, Frequency freq, const DayCounter & dc, T factory); |?|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|DayCounter dayCounter() const; |?|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Calendar calendar() const;-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Natural settlementDays() const;-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|const Date & referenceDate() const;-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Date maxDate() const;-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Rate zeroYieldImpl(Time t) const;-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Spread calcSpread(Time t) const;-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|void update();-| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|void updateInterpolation();+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Natural settlementDays() const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|const Date & referenceDate() const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Date maxDate() const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Rate zeroYieldImpl(Time t) const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Spread calcSpread(Time t) const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|void update();+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|void updateInterpolation(); |v|ql/termstructures/yield/quantotermstructure.hpp|QuantoTermStructure::QuantoTermStructure(const Handle<YieldTermStructure> & underlyingDividendTS, Handle<YieldTermStructure> riskFreeTS, Handle<YieldTermStructure> foreignRiskFreeTS, Handle<BlackVolTermStructure> underlyingBlackVolTS, Real strike, Handle<BlackVolTermStructure> exchRateBlackVolTS, Real exchRateATMlevel, Real underlyingExchRateCorrelation); |?|ql/termstructures/yield/quantotermstructure.hpp|DayCounter dayCounter() const; |?|ql/termstructures/yield/quantotermstructure.hpp|Calendar calendar() const;@@ -9164,14 +9164,14 @@ |v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Natural monthsToStart, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true); |v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Period periodToStart, Natural lengthInMonths, Natural fixingDays, const Calendar & calendar, BusinessDayConvention convention, bool endOfMonth, const DayCounter & dayCounter, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true); |v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Period periodToStart, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);-|x|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Natural immOffsetStart, Natural immOffsetEnd, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);-|x|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Date startDate, Date endDate, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);+|v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Natural immOffsetStart, Natural immOffsetEnd, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);+|v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Date startDate, Date endDate, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true); |x|ql/termstructures/yield/ratehelpers.hpp|Real FraRateHelper::impliedQuote() const; |x|ql/termstructures/yield/ratehelpers.hpp|void FraRateHelper::setTermStructure(YieldTermStructure *); |x|ql/termstructures/yield/ratehelpers.hpp|void FraRateHelper::accept(AcyclicVisitor &); |v|ql/termstructures/yield/ratehelpers.hpp|SwapRateHelper::SwapRateHelper(const std::variant<Rate, Handle<Quote>> & rate, const ext::shared_ptr<SwapIndex> & swapIndex, Handle<Quote> spread = { }, const Period & fwdStart = 0 * Days, Handle<YieldTermStructure> discountingCurve = { }, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool endOfMonth = false, const ext::optional<bool> & useIndexedCoupons = ext::nullopt, const ext::shared_ptr<FloatingRateCouponPricer> & couponPricer = { }); |v|ql/termstructures/yield/ratehelpers.hpp|SwapRateHelper::SwapRateHelper(const std::variant<Rate, Handle<Quote>> & rate, const Period & tenor, Calendar calendar, Frequency fixedFrequency, BusinessDayConvention fixedConvention, DayCounter fixedDayCount, const ext::shared_ptr<IborIndex> & iborIndex, Handle<Quote> spread = { }, const Period & fwdStart = 0 * Days, Handle<YieldTermStructure> discountingCurve = { }, Natural settlementDays = Null<Natural>(), Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool endOfMonth = false, const ext::optional<bool> & useIndexedCoupons = ext::nullopt, const ext::optional<BusinessDayConvention> & floatConvention = ext::nullopt, const ext::shared_ptr<FloatingRateCouponPricer> & couponPricer = { });-|x|ql/termstructures/yield/ratehelpers.hpp|SwapRateHelper::SwapRateHelper(const std::variant<Rate, Handle<Quote>> & rate, const Date & startDate, const Date & endDate, Calendar calendar, Frequency fixedFrequency, BusinessDayConvention fixedConvention, DayCounter fixedDayCount, const ext::shared_ptr<IborIndex> & iborIndex, Handle<Quote> spread = { }, Handle<YieldTermStructure> discountingCurve = { }, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool endOfMonth = false, const ext::optional<bool> & useIndexedCoupons = ext::nullopt, const ext::optional<BusinessDayConvention> & floatConvention = ext::nullopt, const ext::shared_ptr<FloatingRateCouponPricer> & couponPricer = { });+|v|ql/termstructures/yield/ratehelpers.hpp|SwapRateHelper::SwapRateHelper(const std::variant<Rate, Handle<Quote>> & rate, const Date & startDate, const Date & endDate, Calendar calendar, Frequency fixedFrequency, BusinessDayConvention fixedConvention, DayCounter fixedDayCount, const ext::shared_ptr<IborIndex> & iborIndex, Handle<Quote> spread = { }, Handle<YieldTermStructure> discountingCurve = { }, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool endOfMonth = false, const ext::optional<bool> & useIndexedCoupons = ext::nullopt, const ext::optional<BusinessDayConvention> & floatConvention = ext::nullopt, const ext::shared_ptr<FloatingRateCouponPricer> & couponPricer = { }); |x|ql/termstructures/yield/ratehelpers.hpp|Real SwapRateHelper::impliedQuote() const; |x|ql/termstructures/yield/ratehelpers.hpp|void SwapRateHelper::setTermStructure(YieldTermStructure *); |x|ql/termstructures/yield/ratehelpers.hpp|Spread SwapRateHelper::spread() const;@@ -9223,9 +9223,9 @@ | |ql/termstructures/yield/ultimateforwardtermstructure.hpp|void update(); | |ql/termstructures/yield/ultimateforwardtermstructure.hpp|Rate applyRounding(Rate r, Time t) const; | |ql/termstructures/yield/ultimateforwardtermstructure.hpp|Rate zeroYieldImpl(Time t) const;-|?|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve::InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { }, Compounding compounding = Continuous, Frequency frequency = Annual);-|?|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve::InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator, Compounding compounding = Continuous, Frequency frequency = Annual);-|?|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve::InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Interpolator & interpolator, Compounding compounding = Continuous, Frequency frequency = Annual);+|u|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve::InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { }, Compounding compounding = Continuous, Frequency frequency = Annual);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve::InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator, Compounding compounding = Continuous, Frequency frequency = Annual);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve::InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Interpolator & interpolator, Compounding compounding = Continuous, Frequency frequency = Annual); | |ql/termstructures/yield/zerocurve.hpp|const std::vector<Time> & InterpolatedZeroCurve::times() const; |x|ql/termstructures/yield/zerocurve.hpp|const std::vector<Date> & InterpolatedZeroCurve::dates() const; | |ql/termstructures/yield/zerocurve.hpp|const std::vector<Real> & InterpolatedZeroCurve::data() const;@@ -9233,12 +9233,12 @@ | |ql/termstructures/yield/zerocurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedZeroCurve::nodes() const; | |ql/termstructures/yield/zerocurve.hpp|Date maxDate() const; | |ql/termstructures/yield/zerocurve.hpp|Rate zeroYieldImpl(Time t) const;-|?|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);-|?|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);-|?|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator, Compounding compounding, Frequency frequency);-|?|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator, Compounding compounding, Frequency frequency);-|?|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const T & interpolator, Compounding compounding, Frequency frequency);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|u|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator, Compounding compounding, Frequency frequency);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator, Compounding compounding, Frequency frequency);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const T & interpolator, Compounding compounding, Frequency frequency); | |ql/termstructures/yield/zerocurve.hpp|void initialize(const Compounding & compounding, const Frequency & frequency); |v|ql/termstructures/yield/zerospreadedtermstructure.hpp|ZeroSpreadedTermStructure::ZeroSpreadedTermStructure(Handle<YieldTermStructure>, Handle<Quote> spread, Compounding comp = Continuous, Frequency freq = NoFrequency); |x|ql/termstructures/yield/zerospreadedtermstructure.hpp|ZeroSpreadedTermStructure::ZeroSpreadedTermStructure(Handle<YieldTermStructure>, Handle<Quote> spread, Compounding comp, Frequency freq, const DayCounter & dc);
+ tools/ql-methods-1.44.txt view
@@ -0,0 +1,10793 @@+|v|ql/cashflow.hpp|Real CashFlow::amount() const;+| |ql/cashflow.hpp|Date CashFlow::exCouponDate() const;+| |ql/cashflow.hpp|bool CashFlow::tradingExCoupon(const Date & refDate = Date()) const;+|v|ql/cashflow.hpp|ext::shared_ptr<Coupon> CashFlow::coupon_cast(const ext::shared_ptr<CashFlow> &);+| |ql/cashflow.hpp|bool earlier_than::operator()(const CashFlow & c1, const CashFlow & c2) const;+|v|ql/cashflows/averagebmacoupon.hpp|AverageBMACoupon::AverageBMACoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, const ext::shared_ptr<BMAIndex> & index, Real gearing = 1.0, Spread spread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter());+|v|ql/cashflows/averagebmacoupon.hpp|std::vector<Date> AverageBMACoupon::fixingDates() const;+|v|ql/cashflows/averagebmacoupon.hpp|std::vector<Rate> AverageBMACoupon::indexFixings() const;+|?|ql/cashflows/averagebmacoupon.hpp|AverageBMALeg::AverageBMALeg(Schedule schedule, ext::shared_ptr<BMAIndex> index);+| |ql/cashflows/averagebmacoupon.hpp|AverageBMALeg & AverageBMALeg::withNotionals(Real notional);+| |ql/cashflows/averagebmacoupon.hpp|AverageBMALeg & AverageBMALeg::withNotionals(const std::vector<Real> & notionals);+| |ql/cashflows/averagebmacoupon.hpp|AverageBMALeg & AverageBMALeg::withPaymentDayCounter(const DayCounter &);+| |ql/cashflows/averagebmacoupon.hpp|AverageBMALeg & AverageBMALeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/cashflows/averagebmacoupon.hpp|AverageBMALeg & AverageBMALeg::withGearings(Real gearing);+| |ql/cashflows/averagebmacoupon.hpp|AverageBMALeg & AverageBMALeg::withGearings(const std::vector<Real> & gearings);+| |ql/cashflows/averagebmacoupon.hpp|AverageBMALeg & AverageBMALeg::withSpreads(Spread spread);+| |ql/cashflows/averagebmacoupon.hpp|AverageBMALeg & AverageBMALeg::withSpreads(const std::vector<Spread> & spreads);+|v|ql/cashflows/blackovernightindexedcouponpricer.hpp|BlackCompoundingOvernightIndexedCouponPricer::BlackCompoundingOvernightIndexedCouponPricer(Handle<OptionletVolatilityStructure> v = Handle<OptionletVolatilityStructure>(), bool effectiveVolatilityInput = false);+|v|ql/cashflows/blackovernightindexedcouponpricer.hpp|BlackAveragingOvernightIndexedCouponPricer::BlackAveragingOvernightIndexedCouponPricer(Handle<OptionletVolatilityStructure> v = Handle<OptionletVolatilityStructure>(), bool effectiveVolatilityInput = false);+|v|ql/cashflows/capflooredcoupon.hpp|CappedFlooredCoupon::CappedFlooredCoupon(const ext::shared_ptr<FloatingRateCoupon> & underlying, Rate cap = Null<Rate>(), Rate floor = Null<Rate>());+|x|ql/cashflows/capflooredcoupon.hpp|Rate CappedFlooredCoupon::cap() const;+|x|ql/cashflows/capflooredcoupon.hpp|Rate CappedFlooredCoupon::floor() const;+|x|ql/cashflows/capflooredcoupon.hpp|Rate CappedFlooredCoupon::effectiveCap() const;+|x|ql/cashflows/capflooredcoupon.hpp|Rate CappedFlooredCoupon::effectiveFloor() const;+|x|ql/cashflows/capflooredcoupon.hpp|bool CappedFlooredCoupon::isCapped() const;+|x|ql/cashflows/capflooredcoupon.hpp|bool CappedFlooredCoupon::isFloored() const;+|x|ql/cashflows/capflooredcoupon.hpp|ext::shared_ptr<FloatingRateCoupon> CappedFlooredCoupon::underlying();+|v|ql/cashflows/capflooredcoupon.hpp|CappedFlooredIborCoupon::CappedFlooredIborCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<IborIndex> & index, Real gearing = 1.0, Spread spread = 0.0, Rate cap = Null<Rate>(), Rate floor = Null<Rate>(), const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter(), bool isInArrears = false, const Date & exCouponDate = Date(), BusinessDayConvention fixingConvention = Preceding);+|v|ql/cashflows/capflooredcoupon.hpp|CappedFlooredCmsCoupon::CappedFlooredCmsCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<SwapIndex> & index, Real gearing = 1.0, Spread spread = 0.0, const Rate cap = Null<Rate>(), const Rate floor = Null<Rate>(), const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter(), bool isInArrears = false, const Date & exCouponDate = Date(), BusinessDayConvention fixingConvention = Preceding);+|x|ql/cashflows/capflooredinflationcoupon.hpp|CappedFlooredYoYInflationCoupon::CappedFlooredYoYInflationCoupon(const ext::shared_ptr<YoYInflationCoupon> & underlying, Rate cap = Null<Rate>(), Rate floor = Null<Rate>());+|x|ql/cashflows/capflooredinflationcoupon.hpp|CappedFlooredYoYInflationCoupon::CappedFlooredYoYInflationCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<YoYInflationIndex> & index, const Period & observationLag, const CPI::InterpolationType interpolation, const DayCounter & dayCounter, Real gearing = 1.0, Spread spread = 0.0, const Rate cap = Null<Rate>(), const Rate floor = Null<Rate>(), const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date());+|x|ql/cashflows/capflooredinflationcoupon.hpp|Rate CappedFlooredYoYInflationCoupon::cap() const;+|x|ql/cashflows/capflooredinflationcoupon.hpp|Rate CappedFlooredYoYInflationCoupon::floor() const;+|x|ql/cashflows/capflooredinflationcoupon.hpp|Rate CappedFlooredYoYInflationCoupon::effectiveCap() const;+|x|ql/cashflows/capflooredinflationcoupon.hpp|Rate CappedFlooredYoYInflationCoupon::effectiveFloor() const;+|x|ql/cashflows/capflooredinflationcoupon.hpp|Rate CappedFlooredYoYInflationCoupon::underlyingRate() const;+|x|ql/cashflows/capflooredinflationcoupon.hpp|bool CappedFlooredYoYInflationCoupon::isCapped() const;+|x|ql/cashflows/capflooredinflationcoupon.hpp|bool CappedFlooredYoYInflationCoupon::isFloored() const;+|x|ql/cashflows/capflooredinflationcoupon.hpp|void CappedFlooredYoYInflationCoupon::setPricer(const ext::shared_ptr<YoYInflationCouponPricer> &);+| |ql/cashflows/cashflows.hpp|IrrFinder::IrrFinder(const Leg & leg, Real npv, DayCounter dayCounter, Compounding comp, Frequency freq, const std::optional<bool> & includeSettlementDateFlows, Date settlementDate, Date npvDate);+| |ql/cashflows/cashflows.hpp|Real IrrFinder::operator()(Rate y) const;+| |ql/cashflows/cashflows.hpp|Real IrrFinder::derivative(Rate y) const;+| |ql/cashflows/cashflows.hpp|CashFlows::CashFlows();+| |ql/cashflows/cashflows.hpp|CashFlows::CashFlows(CashFlows &&);+| |ql/cashflows/cashflows.hpp|CashFlows::CashFlows(const CashFlows &);+| |ql/cashflows/cashflows.hpp|CashFlows & CashFlows::operator=(CashFlows &&);+| |ql/cashflows/cashflows.hpp|CashFlows & CashFlows::operator=(const CashFlows &);+| |ql/cashflows/cashflows.hpp|static Date CashFlows::startDate(const Leg & leg);+|v|ql/cashflows/cashflows.hpp|static Date CashFlows::maturityDate(const Leg & leg);+|v|ql/cashflows/cashflows.hpp|static bool CashFlows::isExpired(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+| |ql/cashflows/cashflows.hpp|static Leg::const_reverse_iterator CashFlows::previousCashFlow(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+| |ql/cashflows/cashflows.hpp|static Leg::const_iterator CashFlows::nextCashFlow(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Date CashFlows::previousCashFlowDate(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Date CashFlows::nextCashFlowDate(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::previousCashFlowAmount(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::nextCashFlowAmount(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Rate CashFlows::previousCouponRate(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Rate CashFlows::nextCouponRate(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::nominal(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Date CashFlows::accrualStartDate(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Date CashFlows::accrualEndDate(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Date CashFlows::referencePeriodStart(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Date CashFlows::referencePeriodEnd(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Time CashFlows::accrualPeriod(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Date::serial_type CashFlows::accrualDays(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Time CashFlows::accruedPeriod(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Date::serial_type CashFlows::accruedDays(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::accruedAmount(const Leg & leg, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::npv(const Leg & leg, const YieldTermStructure & discountCurve, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::bps(const Leg & leg, const YieldTermStructure & discountCurve, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|?|ql/cashflows/cashflows.hpp|static std::pair<Real, Real> CashFlows::npvbps(const Leg & leg, const YieldTermStructure & discountCurve, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|v|ql/cashflows/cashflows.hpp|static Rate CashFlows::atmRate(const Leg & leg, const YieldTermStructure & discountCurve, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date(), Real npv = Null<Real>());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::npv(const Leg & leg, const InterestRate & yield, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|x|ql/cashflows/cashflows.hpp|static Real CashFlows::npv(const Leg & leg, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::bps(const Leg & leg, const InterestRate & yield, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|x|ql/cashflows/cashflows.hpp|static Real CashFlows::bps(const Leg & leg, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|v|ql/cashflows/cashflows.hpp|static Rate CashFlows::yield(const Leg & leg, Real npv, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date(), Real accuracy = 1.0e-10, Size maxIterations = 100, Rate guess = 0.05);+|v|ql/cashflows/cashflows.hpp|static Time CashFlows::duration(const Leg & leg, const InterestRate & yield, Duration::Type type, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|x|ql/cashflows/cashflows.hpp|static Time CashFlows::duration(const Leg & leg, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Duration::Type type, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::convexity(const Leg & leg, const InterestRate & yield, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|x|ql/cashflows/cashflows.hpp|static Real CashFlows::convexity(const Leg & leg, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::basisPointValue(const Leg & leg, const InterestRate & yield, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|x|ql/cashflows/cashflows.hpp|static Real CashFlows::basisPointValue(const Leg & leg, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::yieldValueBasisPoint(const Leg & leg, const InterestRate & yield, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|x|ql/cashflows/cashflows.hpp|static Real CashFlows::yieldValueBasisPoint(const Leg & leg, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|v|ql/cashflows/cashflows.hpp|static Real CashFlows::npv(const Leg & leg, const ext::shared_ptr<YieldTermStructure> & discount, Spread zSpread, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|x|ql/cashflows/cashflows.hpp|static Real CashFlows::npv(const Leg & leg, const ext::shared_ptr<YieldTermStructure> & discount, Spread zSpread, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|v|ql/cashflows/cashflows.hpp|static Spread CashFlows::zSpread(const Leg & leg, Real npv, const ext::shared_ptr<YieldTermStructure> &, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date(), Real accuracy = 1.0e-10, Size maxIterations = 100, Rate guess = 0.0);+|x|ql/cashflows/cashflows.hpp|static Spread CashFlows::zSpread(const Leg & leg, Real npv, const ext::shared_ptr<YieldTermStructure> &, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date(), Real accuracy = 1.0e-10, Size maxIterations = 100, Rate guess = 0.0);+| |ql/cashflows/cashflowvectors.hpp|Rate effectiveFixedRate(const std::vector<Spread> & spreads, const std::vector<Rate> & caps, const std::vector<Rate> & floors, Size i);+| |ql/cashflows/cashflowvectors.hpp|bool noOption(const std::vector<Rate> & caps, const std::vector<Rate> & floors, Size i);+|v|ql/cashflows/cmscoupon.hpp|CmsCoupon::CmsCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<SwapIndex> & index, Real gearing = 1.0, Spread spread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter(), bool isInArrears = false, const Date & exCouponDate = Date(), BusinessDayConvention fixingConvention = Preceding);+|x|ql/cashflows/cmscoupon.hpp|const ext::shared_ptr<SwapIndex> & CmsCoupon::swapIndex() const;+|?|ql/cashflows/cmscoupon.hpp|CmsLeg::CmsLeg(Schedule schedule, ext::shared_ptr<SwapIndex> swapIndex);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withNotionals(Real notional);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withNotionals(const std::vector<Real> & notionals);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withPaymentDayCounter(const DayCounter &);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withFixingDays(Natural fixingDays);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withFixingDays(const std::vector<Natural> & fixingDays);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withGearings(Real gearing);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withGearings(const std::vector<Real> & gearings);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withSpreads(Spread spread);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withSpreads(const std::vector<Spread> & spreads);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withCaps(Rate cap);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withCaps(const std::vector<Rate> & caps);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withFloors(Rate floor);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withFloors(const std::vector<Rate> & floors);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::inArrears(bool flag = true);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withZeroPayments(bool flag = true);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withFixingConvention(BusinessDayConvention);+| |ql/cashflows/cmscoupon.hpp|CmsLeg & CmsLeg::withExCouponPeriod(const Period &, const Calendar &, BusinessDayConvention, bool endOfMonth);+| |ql/cashflows/conundrumpricer.hpp|Real VanillaOptionPricer::operator()(Real strike, Option::Type optionType, Real deflator) const;+| |ql/cashflows/conundrumpricer.hpp|MarketQuotedOptionPricer::MarketQuotedOptionPricer(Rate forwardValue, Date expiryDate, const Period & swapTenor, const ext::shared_ptr<SwaptionVolatilityStructure> & volatilityStructure);+| |ql/cashflows/conundrumpricer.hpp|Real GFunction::operator()(Real x);+| |ql/cashflows/conundrumpricer.hpp|Real GFunction::firstDerivative(Real x);+| |ql/cashflows/conundrumpricer.hpp|Real GFunction::secondDerivative(Real x);+| |ql/cashflows/conundrumpricer.hpp|GFunctionFactory::GFunctionFactory();+| |ql/cashflows/conundrumpricer.hpp|static ext::shared_ptr<GFunction> GFunctionFactory::newGFunctionStandard(Size q, Real delta, Size swapLength);+| |ql/cashflows/conundrumpricer.hpp|static ext::shared_ptr<GFunction> GFunctionFactory::newGFunctionExactYield(const CmsCoupon & coupon);+| |ql/cashflows/conundrumpricer.hpp|static ext::shared_ptr<GFunction> GFunctionFactory::newGFunctionWithShifts(const CmsCoupon & coupon, const Handle<Quote> & meanReversion);+| |ql/cashflows/conundrumpricer.hpp|GFunctionStandard::GFunctionStandard(Size q, Real delta, Size swapLength);+| |ql/cashflows/conundrumpricer.hpp|GFunctionExactYield::GFunctionExactYield(const CmsCoupon & coupon);+| |ql/cashflows/conundrumpricer.hpp|ObjectiveFunction::ObjectiveFunction(const GFunctionWithShifts & o, const Real Rs);+| |ql/cashflows/conundrumpricer.hpp|Real ObjectiveFunction::operator()(const Real & x) const;+| |ql/cashflows/conundrumpricer.hpp|Real ObjectiveFunction::derivative(const Real & x) const;+| |ql/cashflows/conundrumpricer.hpp|void ObjectiveFunction::setSwapRateValue(Real x);+|x|ql/cashflows/conundrumpricer.hpp|const GFunctionWithShifts & ObjectiveFunction::gFunctionWithShifts() const;+| |ql/cashflows/conundrumpricer.hpp|GFunctionWithShifts::GFunctionWithShifts(const CmsCoupon & coupon, Handle<Quote> meanReversion);+| |ql/cashflows/conundrumpricer.hpp|std::ostream & operator<<(std::ostream & out, GFunctionFactory::YieldCurveModel type);+|v|ql/cashflows/conundrumpricer.hpp|NumericHaganPricer::NumericHaganPricer(const Handle<SwaptionVolatilityStructure> & swaptionVol, GFunctionFactory::YieldCurveModel modelOfYieldCurve, const Handle<Quote> & meanReversion, Rate lowerLimit = 0.0, Rate upperLimit = 1.0, Real precision = 1.0e-6, Real hardUpperLimit = QL_MAX_REAL);+|x|ql/cashflows/conundrumpricer.hpp|Real NumericHaganPricer::upperLimit() const;+|x|ql/cashflows/conundrumpricer.hpp|Real NumericHaganPricer::lowerLimit() const;+|x|ql/cashflows/conundrumpricer.hpp|Real NumericHaganPricer::stdDeviations() const;+| |ql/cashflows/conundrumpricer.hpp|Real Function::operator()(Real x) const;+| |ql/cashflows/conundrumpricer.hpp|ConundrumIntegrand::ConundrumIntegrand(ext::shared_ptr<VanillaOptionPricer> o, const ext::shared_ptr<YieldTermStructure> & rateCurve, ext::shared_ptr<GFunction> gFunction, Date fixingDate, Date paymentDate, Real annuity, Real forwardValue, Real strike, Option::Type optionType);+|x|ql/cashflows/conundrumpricer.hpp|Real NumericHaganPricer::integrate(Real a, Real b, const ConundrumIntegrand & Integrand) const;+|x|ql/cashflows/conundrumpricer.hpp|Real NumericHaganPricer::optionletPrice(Option::Type optionType, Rate strike) const;+|x|ql/cashflows/conundrumpricer.hpp|Real NumericHaganPricer::resetUpperLimit(Real stdDeviationsForUpperLimit) const;+|x|ql/cashflows/conundrumpricer.hpp|Real NumericHaganPricer::resetLowerLimit(Real stdDeviationsForLowerLimit) const;+|x|ql/cashflows/conundrumpricer.hpp|Real NumericHaganPricer::refineIntegration(Real integralValue, const ConundrumIntegrand & integrand) const;+|v|ql/cashflows/conundrumpricer.hpp|AnalyticHaganPricer::AnalyticHaganPricer(const Handle<SwaptionVolatilityStructure> & swaptionVol, GFunctionFactory::YieldCurveModel modelOfYieldCurve, const Handle<Quote> & meanReversion);+|x|ql/cashflows/coupon.hpp|Coupon::Coupon(const Date & paymentDate, Real nominal, const Date & accrualStartDate, const Date & accrualEndDate, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const Date & exCouponDate = Date());+|v|ql/cashflows/coupon.hpp|Real Coupon::nominal() const;+|x|ql/cashflows/coupon.hpp|const Date & Coupon::accrualStartDate() const;+|x|ql/cashflows/coupon.hpp|const Date & Coupon::accrualEndDate() const;+|x|ql/cashflows/coupon.hpp|const Date & Coupon::referencePeriodStart() const;+|x|ql/cashflows/coupon.hpp|const Date & Coupon::referencePeriodEnd() const;+|x|ql/cashflows/coupon.hpp|Time Coupon::accrualPeriod() const;+|x|ql/cashflows/coupon.hpp|Date::serial_type Coupon::accrualDays() const;+|v|ql/cashflows/coupon.hpp|Rate Coupon::rate() const;+|x|ql/cashflows/coupon.hpp|DayCounter Coupon::dayCounter() const;+|x|ql/cashflows/coupon.hpp|Time Coupon::accruedPeriod(const Date &) const;+|x|ql/cashflows/coupon.hpp|Date::serial_type Coupon::accruedDays(const Date &) const;+|v|ql/cashflows/coupon.hpp|Real Coupon::accruedAmount(const Date &) const;+| |ql/cashflows/coupon.hpp|ext::shared_ptr<Coupon> coupon_cast(const ext::shared_ptr<CashFlow> & cf);+|v|ql/cashflows/couponpricer.hpp|Real FloatingRateCouponPricer::swapletPrice() const;+|v|ql/cashflows/couponpricer.hpp|Rate FloatingRateCouponPricer::swapletRate() const;+|v|ql/cashflows/couponpricer.hpp|Real FloatingRateCouponPricer::capletPrice(Rate effectiveCap) const;+|v|ql/cashflows/couponpricer.hpp|Rate FloatingRateCouponPricer::capletRate(Rate effectiveCap) const;+|v|ql/cashflows/couponpricer.hpp|Real FloatingRateCouponPricer::floorletPrice(Rate effectiveFloor) const;+|v|ql/cashflows/couponpricer.hpp|Rate FloatingRateCouponPricer::floorletRate(Rate effectiveFloor) const;+| |ql/cashflows/couponpricer.hpp|void FloatingRateCouponPricer::initialize(const FloatingRateCoupon & coupon);+|x|ql/cashflows/couponpricer.hpp|IborCouponPricer::IborCouponPricer(Handle<OptionletVolatilityStructure> v = Handle<OptionletVolatilityStructure>(), std::optional<bool> useIndexedCoupon = std::nullopt);+|x|ql/cashflows/couponpricer.hpp|bool IborCouponPricer::useIndexedCoupon() const;+|x|ql/cashflows/couponpricer.hpp|void IborCouponPricer::setCapletVolatility(const Handle<OptionletVolatilityStructure> & v = Handle<OptionletVolatilityStructure>());+|x|ql/cashflows/couponpricer.hpp|void IborCouponPricer::initializeCachedData(const IborCoupon & coupon) const;+|v|ql/cashflows/couponpricer.hpp|BlackIborCouponPricer::BlackIborCouponPricer(const Handle<OptionletVolatilityStructure> & v = Handle<OptionletVolatilityStructure>(), const TimingAdjustment timingAdjustment = Black76, Handle<Quote> correlation = Handle<Quote>(ext::shared_ptr<Quote>(new SimpleQuote(1.0))), const std::optional<bool> useIndexedCoupon = std::nullopt);+|x|ql/cashflows/couponpricer.hpp|CmsCouponPricer::CmsCouponPricer(Handle<SwaptionVolatilityStructure> v = Handle<SwaptionVolatilityStructure>());+|x|ql/cashflows/couponpricer.hpp|void CmsCouponPricer::setSwaptionVolatility(const Handle<SwaptionVolatilityStructure> & v = Handle<SwaptionVolatilityStructure>());+| |ql/cashflows/couponpricer.hpp|Real MeanRevertingPricer::meanReversion() const;+| |ql/cashflows/couponpricer.hpp|void MeanRevertingPricer::setMeanReversion(const Handle<Quote> &);+|v|ql/cashflows/couponpricer.hpp|void setCouponPricer(const Leg & leg, const ext::shared_ptr<FloatingRateCouponPricer> &);+|v|ql/cashflows/couponpricer.hpp|void setCouponPricers(const Leg & leg, const std::vector<ext::shared_ptr<FloatingRateCouponPricer>> &);+| |ql/cashflows/couponpricer.hpp|void setCouponPricers(const Leg & leg, const ext::shared_ptr<FloatingRateCouponPricer> &, const ext::shared_ptr<FloatingRateCouponPricer> &);+| |ql/cashflows/couponpricer.hpp|void setCouponPricers(const Leg & leg, const ext::shared_ptr<FloatingRateCouponPricer> &, const ext::shared_ptr<FloatingRateCouponPricer> &, const ext::shared_ptr<FloatingRateCouponPricer> &);+| |ql/cashflows/couponpricer.hpp|void setCouponPricers(const Leg & leg, const ext::shared_ptr<FloatingRateCouponPricer> &, const ext::shared_ptr<FloatingRateCouponPricer> &, const ext::shared_ptr<FloatingRateCouponPricer> &, const ext::shared_ptr<FloatingRateCouponPricer> &);+|v|ql/cashflows/cpicoupon.hpp|CPICoupon::CPICoupon(Real baseCPI, const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, const ext::shared_ptr<ZeroInflationIndex> & index, const Period & observationLag, CPI::InterpolationType observationInterpolation, const DayCounter & dayCounter, Real fixedRate, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const Date & exCouponDate = Date());+|v|ql/cashflows/cpicoupon.hpp|CPICoupon::CPICoupon(const Date & baseDate, const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, const ext::shared_ptr<ZeroInflationIndex> & index, const Period & observationLag, CPI::InterpolationType observationInterpolation, const DayCounter & dayCounter, Real fixedRate, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const Date & exCouponDate = Date());+|v|ql/cashflows/cpicoupon.hpp|CPICoupon::CPICoupon(Real baseCPI, const Date & baseDate, const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, const ext::shared_ptr<ZeroInflationIndex> & index, const Period & observationLag, CPI::InterpolationType observationInterpolation, const DayCounter & dayCounter, Real fixedRate, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const Date & exCouponDate = Date());+|x|ql/cashflows/cpicoupon.hpp|Real CPICoupon::fixedRate() const;+|x|ql/cashflows/cpicoupon.hpp|Rate CPICoupon::baseCPI() const;+|x|ql/cashflows/cpicoupon.hpp|Date CPICoupon::baseDate() const;+|x|ql/cashflows/cpicoupon.hpp|CPI::InterpolationType CPICoupon::observationInterpolation() const;+|x|ql/cashflows/cpicoupon.hpp|ext::shared_ptr<ZeroInflationIndex> CPICoupon::cpiIndex() const;+|v|ql/cashflows/cpicoupon.hpp|Rate CPICoupon::indexRatio(Date d) const;+|x|ql/cashflows/cpicoupon.hpp|Rate CPICoupon::adjustedIndexGrowth() const;+|v|ql/cashflows/cpicoupon.hpp|CPICashFlow::CPICashFlow(Real notional, const ext::shared_ptr<ZeroInflationIndex> & index, const Date & baseDate, Real baseFixing, const Date & observationDate, const Period & observationLag, CPI::InterpolationType interpolation, const Date & paymentDate, bool growthOnly = false);+|x|ql/cashflows/cpicoupon.hpp|Date CPICashFlow::observationDate() const;+|x|ql/cashflows/cpicoupon.hpp|Period CPICashFlow::observationLag() const;+|x|ql/cashflows/cpicoupon.hpp|CPI::InterpolationType CPICashFlow::interpolation() const;+|x|ql/cashflows/cpicoupon.hpp|Frequency CPICashFlow::frequency() const;+|x|ql/cashflows/cpicoupon.hpp|ext::shared_ptr<ZeroInflationIndex> CPICashFlow::cpiIndex() const;+|v|ql/cashflows/cpicoupon.hpp|CPILeg::CPILeg(Schedule schedule, ext::shared_ptr<ZeroInflationIndex> index, Real baseCPI, const Period & observationLag);+|x|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withNotionals(Real notional);+|v|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withNotionals(const std::vector<Real> & notionals);+|x|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withFixedRates(Real fixedRate);+|v|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withFixedRates(const std::vector<Real> & fixedRates);+|v|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withPaymentDayCounter(const DayCounter &);+|v|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withPaymentAdjustment(BusinessDayConvention);+|v|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withPaymentCalendar(const Calendar &);+|v|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withObservationInterpolation(CPI::InterpolationType);+|v|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withSubtractInflationNominal(bool);+|x|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withCaps(Rate cap);+|x|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withCaps(const std::vector<Rate> & caps);+|x|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withFloors(Rate floor);+|x|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withFloors(const std::vector<Rate> & floors);+|x|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withExCouponPeriod(const Period &, const Calendar &, BusinessDayConvention, bool endOfMonth = false);+|x|ql/cashflows/cpicoupon.hpp|CPILeg & CPILeg::withBaseDate(const Date & baseDate);+| |ql/cashflows/cpicoupon.hpp|Rate indexFixing() const;+|v|ql/cashflows/cpicouponpricer.hpp|CPICouponPricer::CPICouponPricer(Handle<YieldTermStructure> nominalTermStructure = Handle<YieldTermStructure>());+|v|ql/cashflows/cpicouponpricer.hpp|CPICouponPricer::CPICouponPricer(Handle<CPIVolatilitySurface> capletVol, Handle<YieldTermStructure> nominalTermStructure = Handle<YieldTermStructure>());+|x|ql/cashflows/cpicouponpricer.hpp|Handle<CPIVolatilitySurface> CPICouponPricer::capletVolatility() const;+|x|ql/cashflows/cpicouponpricer.hpp|Handle<YieldTermStructure> CPICouponPricer::nominalTermStructure() const;+|x|ql/cashflows/cpicouponpricer.hpp|void CPICouponPricer::setCapletVolatility(const Handle<CPIVolatilitySurface> & capletVol);+|x|ql/cashflows/cpicouponpricer.hpp|Rate CPICouponPricer::accruedRate(Date settlementDate) const;+|v|ql/cashflows/digitalcmscoupon.hpp|DigitalCmsCoupon::DigitalCmsCoupon(const ext::shared_ptr<CmsCoupon> & underlying, Rate callStrike = Null<Rate>(), Position::Type callPosition = Position::Long, bool isCallATMIncluded = false, Rate callDigitalPayoff = Null<Rate>(), Rate putStrike = Null<Rate>(), Position::Type putPosition = Position::Long, bool isPutATMIncluded = false, Rate putDigitalPayoff = Null<Rate>(), const ext::shared_ptr<DigitalReplication> & replication = { }, bool nakedOption = false);+|v|ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg::DigitalCmsLeg(Schedule schedule, ext::shared_ptr<SwapIndex> index);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withNotionals(Real notional);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withNotionals(const std::vector<Real> & notionals);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withPaymentDayCounter(const DayCounter &);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withFixingDays(Natural fixingDays);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withFixingDays(const std::vector<Natural> & fixingDays);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withGearings(Real gearing);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withGearings(const std::vector<Real> & gearings);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withSpreads(Spread spread);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withSpreads(const std::vector<Spread> & spreads);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::inArrears(bool flag = true);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withCallStrikes(Rate strike);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withCallStrikes(const std::vector<Rate> & strikes);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withLongCallOption(Position::Type);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withCallATM(bool flag = true);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withCallPayoffs(Rate payoff);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withCallPayoffs(const std::vector<Rate> & payoffs);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withPutStrikes(Rate strike);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withPutStrikes(const std::vector<Rate> & strikes);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withLongPutOption(Position::Type);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withPutATM(bool flag = true);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withPutPayoffs(Rate payoff);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withPutPayoffs(const std::vector<Rate> & payoffs);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withReplication(const ext::shared_ptr<DigitalReplication> &);+| |ql/cashflows/digitalcmscoupon.hpp|DigitalCmsLeg & DigitalCmsLeg::withNakedOption(bool nakedOption = true);+|v|ql/cashflows/digitalcoupon.hpp|DigitalCoupon::DigitalCoupon(const ext::shared_ptr<FloatingRateCoupon> & underlying, Rate callStrike = Null<Rate>(), Position::Type callPosition = Position::Long, bool isCallITMIncluded = false, Rate callDigitalPayoff = Null<Rate>(), Rate putStrike = Null<Rate>(), Position::Type putPosition = Position::Long, bool isPutITMIncluded = false, Rate putDigitalPayoff = Null<Rate>(), ext::shared_ptr<DigitalReplication> replication = { }, bool nakedOption = false);+|x|ql/cashflows/digitalcoupon.hpp|void DigitalCoupon::deepUpdate();+|x|ql/cashflows/digitalcoupon.hpp|void DigitalCoupon::performCalculations() const;+|v|ql/cashflows/digitalcoupon.hpp|Rate DigitalCoupon::rate() const;+|v|ql/cashflows/digitalcoupon.hpp|Rate DigitalCoupon::convexityAdjustment() const;+|x|ql/cashflows/digitalcoupon.hpp|Rate DigitalCoupon::callStrike() const;+|x|ql/cashflows/digitalcoupon.hpp|Rate DigitalCoupon::putStrike() const;+|x|ql/cashflows/digitalcoupon.hpp|Rate DigitalCoupon::callDigitalPayoff() const;+|x|ql/cashflows/digitalcoupon.hpp|Rate DigitalCoupon::putDigitalPayoff() const;+|x|ql/cashflows/digitalcoupon.hpp|bool DigitalCoupon::hasPut() const;+|x|ql/cashflows/digitalcoupon.hpp|bool DigitalCoupon::hasCall() const;+|x|ql/cashflows/digitalcoupon.hpp|bool DigitalCoupon::hasCollar() const;+|x|ql/cashflows/digitalcoupon.hpp|bool DigitalCoupon::isLongPut() const;+|x|ql/cashflows/digitalcoupon.hpp|bool DigitalCoupon::isLongCall() const;+|x|ql/cashflows/digitalcoupon.hpp|ext::shared_ptr<FloatingRateCoupon> DigitalCoupon::underlying() const;+|v|ql/cashflows/digitalcoupon.hpp|Rate DigitalCoupon::callOptionRate() const;+|v|ql/cashflows/digitalcoupon.hpp|Rate DigitalCoupon::putOptionRate() const;+|x|ql/cashflows/digitalcoupon.hpp|void DigitalCoupon::accept(AcyclicVisitor &);+|x|ql/cashflows/digitalcoupon.hpp|void DigitalCoupon::setPricer(const ext::shared_ptr<FloatingRateCouponPricer> & pricer);+|v|ql/cashflows/digitaliborcoupon.hpp|DigitalIborCoupon::DigitalIborCoupon(const ext::shared_ptr<IborCoupon> & underlying, Rate callStrike = Null<Rate>(), Position::Type callPosition = Position::Long, bool isCallATMIncluded = false, Rate callDigitalPayoff = Null<Rate>(), Rate putStrike = Null<Rate>(), Position::Type putPosition = Position::Long, bool isPutATMIncluded = false, Rate putDigitalPayoff = Null<Rate>(), const ext::shared_ptr<DigitalReplication> & replication = { }, bool nakedOption = false);+|v|ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg::DigitalIborLeg(Schedule schedule, ext::shared_ptr<IborIndex> index);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withNotionals(Real notional);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withNotionals(const std::vector<Real> & notionals);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withPaymentDayCounter(const DayCounter &);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withFixingDays(Natural fixingDays);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withFixingDays(const std::vector<Natural> & fixingDays);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withGearings(Real gearing);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withGearings(const std::vector<Real> & gearings);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withSpreads(Spread spread);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withSpreads(const std::vector<Spread> & spreads);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::inArrears(bool flag = true);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withCallStrikes(Rate strike);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withCallStrikes(const std::vector<Rate> & strikes);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withLongCallOption(Position::Type);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withCallATM(bool flag = true);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withCallPayoffs(Rate payoff);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withCallPayoffs(const std::vector<Rate> & payoffs);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withPutStrikes(Rate strike);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withPutStrikes(const std::vector<Rate> & strikes);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withLongPutOption(Position::Type);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withPutATM(bool flag = true);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withPutPayoffs(Rate payoff);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withPutPayoffs(const std::vector<Rate> & payoffs);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withReplication(const ext::shared_ptr<DigitalReplication> &);+| |ql/cashflows/digitaliborcoupon.hpp|DigitalIborLeg & DigitalIborLeg::withNakedOption(bool nakedOption = true);+|x|ql/cashflows/dividend.hpp|Dividend::Dividend(const Date & date);+|x|ql/cashflows/dividend.hpp|Real Dividend::amount(Real underlying) const;+|v|ql/cashflows/dividend.hpp|FixedDividend::FixedDividend(Real amount, const Date & date);+|v|ql/cashflows/dividend.hpp|FractionalDividend::FractionalDividend(Real rate, const Date & date);+|v|ql/cashflows/dividend.hpp|FractionalDividend::FractionalDividend(Real rate, Real nominal, const Date & date);+|x|ql/cashflows/dividend.hpp|Real FractionalDividend::rate() const;+|x|ql/cashflows/dividend.hpp|Real FractionalDividend::nominal() const;+| |ql/cashflows/dividend.hpp|std::vector<ext::shared_ptr<Dividend>> DividendVector(const std::vector<Date> & dividendDates, const std::vector<Real> & dividends);+| |ql/cashflows/duration.hpp|std::ostream & operator<<(std::ostream &, Duration::Type);+|v|ql/cashflows/equitycashflow.hpp|EquityCashFlow::EquityCashFlow(Real notional, ext::shared_ptr<EquityIndex> index, const Date & baseDate, const Date & fixingDate, const Date & paymentDate, bool growthOnly = true);+|v|ql/cashflows/equitycashflow.hpp|void EquityCashFlow::setPricer(const ext::shared_ptr<EquityCashFlowPricer> &);+|x|ql/cashflows/equitycashflow.hpp|const ext::shared_ptr<EquityCashFlowPricer> & EquityCashFlow::pricer() const;+| |ql/cashflows/equitycashflow.hpp|void accept(AcyclicVisitor & v);+|v|ql/cashflows/equitycashflow.hpp|void setCouponPricer(const Leg & leg, const ext::shared_ptr<EquityCashFlowPricer> &);+|x|ql/cashflows/equitycashflow.hpp|EquityCashFlowPricer::EquityCashFlowPricer();+|x|ql/cashflows/equitycashflow.hpp|Real EquityCashFlowPricer::price() const;+|x|ql/cashflows/equitycashflow.hpp|void EquityCashFlowPricer::initialize(const EquityCashFlow &);+|v|ql/cashflows/equitycashflow.hpp|EquityQuantoCashFlowPricer::EquityQuantoCashFlowPricer(Handle<YieldTermStructure> quantoCurrencyTermStructure, Handle<BlackVolTermStructure> equityVolatility, Handle<BlackVolTermStructure> fxVolatility, Handle<Quote> correlation);+|v|ql/cashflows/fixedratecoupon.hpp|FixedRateCoupon::FixedRateCoupon(const Date & paymentDate, Real nominal, Rate rate, const DayCounter & dayCounter, const Date & accrualStartDate, const Date & accrualEndDate, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const Date & exCouponDate = Date());+|x|ql/cashflows/fixedratecoupon.hpp|FixedRateCoupon::FixedRateCoupon(const Date & paymentDate, Real nominal, InterestRate interestRate, const Date & accrualStartDate, const Date & accrualEndDate, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const Date & exCouponDate = Date());+|v|ql/cashflows/fixedratecoupon.hpp|InterestRate FixedRateCoupon::interestRate() const;+|?|ql/cashflows/fixedratecoupon.hpp|FixedRateLeg::FixedRateLeg(Schedule schedule);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withNotionals(Real);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withNotionals(const std::vector<Real> &);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withCouponRates(Rate, const DayCounter & paymentDayCounter, Compounding comp = Simple, Frequency freq = Annual);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withCouponRates(const std::vector<Rate> &, const DayCounter & paymentDayCounter, Compounding comp = Simple, Frequency freq = Annual);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withCouponRates(const InterestRate &);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withCouponRates(const std::vector<InterestRate> &);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withFirstPeriodDayCounter(const DayCounter &);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withLastPeriodDayCounter(const DayCounter &);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withPaymentCalendar(const Calendar &);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withPaymentLag(Integer lag);+| |ql/cashflows/fixedratecoupon.hpp|FixedRateLeg & FixedRateLeg::withExCouponPeriod(const Period &, const Calendar &, BusinessDayConvention, bool endOfMonth = false);+| |ql/cashflows/fixedratecoupon.hpp|void accept(AcyclicVisitor & v);+|v|ql/cashflows/floatingratecoupon.hpp|FloatingRateCoupon::FloatingRateCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<InterestRateIndex> & index, Real gearing = 1.0, Spread spread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), DayCounter dayCounter = DayCounter(), bool isInArrears = false, const Date & exCouponDate = Date(), BusinessDayConvention fixingConvention = Preceding);+|v|ql/cashflows/floatingratecoupon.hpp|Real FloatingRateCoupon::price(const Handle<YieldTermStructure> & discountingCurve) const;+|v|ql/cashflows/floatingratecoupon.hpp|const ext::shared_ptr<InterestRateIndex> & FloatingRateCoupon::index() const;+|x|ql/cashflows/floatingratecoupon.hpp|Natural FloatingRateCoupon::fixingDays() const;+|v|ql/cashflows/floatingratecoupon.hpp|Date FloatingRateCoupon::fixingDate() const;+|x|ql/cashflows/floatingratecoupon.hpp|Real FloatingRateCoupon::gearing() const;+|x|ql/cashflows/floatingratecoupon.hpp|Spread FloatingRateCoupon::spread() const;+|x|ql/cashflows/floatingratecoupon.hpp|Rate FloatingRateCoupon::indexFixing() const;+|v|ql/cashflows/floatingratecoupon.hpp|Rate FloatingRateCoupon::convexityAdjustment() const;+|x|ql/cashflows/floatingratecoupon.hpp|Rate FloatingRateCoupon::adjustedFixing() const;+|x|ql/cashflows/floatingratecoupon.hpp|bool FloatingRateCoupon::isInArrears() const;+|x|ql/cashflows/floatingratecoupon.hpp|BusinessDayConvention FloatingRateCoupon::fixingConvention() const;+|v|ql/cashflows/floatingratecoupon.hpp|void FloatingRateCoupon::setPricer(const ext::shared_ptr<FloatingRateCouponPricer> &);+|x|ql/cashflows/floatingratecoupon.hpp|ext::shared_ptr<FloatingRateCouponPricer> FloatingRateCoupon::pricer() const;+| |ql/cashflows/floatingratecoupon.hpp|Rate convexityAdjustmentImpl(Rate fixing) const;+| |ql/cashflows/floatingratecoupon.hpp|void accept(AcyclicVisitor & v);+|v|ql/cashflows/iborcoupon.hpp|IborCoupon::IborCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<IborIndex> & index, Real gearing = 1.0, Spread spread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter(), bool isInArrears = false, const Date & exCouponDate = Date(), BusinessDayConvention fixingConvention = Preceding);+|x|ql/cashflows/iborcoupon.hpp|const ext::shared_ptr<IborIndex> & IborCoupon::iborIndex() const;+|x|ql/cashflows/iborcoupon.hpp|bool IborCoupon::hasFixed() const;+|x|ql/cashflows/iborcoupon.hpp|const Date & IborCoupon::fixingValueDate() const;+|x|ql/cashflows/iborcoupon.hpp|const Date & IborCoupon::fixingMaturityDate() const;+|x|ql/cashflows/iborcoupon.hpp|const Date & IborCoupon::fixingEndDate() const;+|x|ql/cashflows/iborcoupon.hpp|Time IborCoupon::spanningTimeIndexMaturity() const;+|x|ql/cashflows/iborcoupon.hpp|Time IborCoupon::spanningTime() const;+|x|ql/cashflows/iborcoupon.hpp|Settings::Settings();+|x|ql/cashflows/iborcoupon.hpp|void Settings::createAtParCoupons();+|x|ql/cashflows/iborcoupon.hpp|void Settings::createIndexedCoupons();+|x|ql/cashflows/iborcoupon.hpp|bool Settings::usingAtParCoupons() const;+|?|ql/cashflows/iborcoupon.hpp|IborLeg::IborLeg(Schedule schedule, ext::shared_ptr<IborIndex> index);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withNotionals(Real notional);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withNotionals(const std::vector<Real> & notionals);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withPaymentDayCounter(const DayCounter &);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withPaymentLag(Integer lag);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withPaymentCalendar(const Calendar &);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withFixingDays(Natural fixingDays);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withFixingDays(const std::vector<Natural> & fixingDays);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withGearings(Real gearing);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withGearings(const std::vector<Real> & gearings);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withSpreads(Spread spread);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withSpreads(const std::vector<Spread> & spreads);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withCaps(Rate cap);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withCaps(const std::vector<Rate> & caps);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withFloors(Rate floor);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withFloors(const std::vector<Rate> & floors);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::inArrears(bool flag = true);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withZeroPayments(bool flag = true);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withExCouponPeriod(const Period &, const Calendar &, BusinessDayConvention, bool endOfMonth = false);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withFixingConvention(BusinessDayConvention);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withIndexedCoupons(std::optional<bool> b = true);+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withAtParCoupons(bool b = true);+|v|ql/cashflows/indexedcashflow.hpp|IndexedCashFlow::IndexedCashFlow(Real notional, ext::shared_ptr<Index> index, const Date & baseDate, const Date & fixingDate, const Date & paymentDate, bool growthOnly = false);+|x|ql/cashflows/indexedcashflow.hpp|Real IndexedCashFlow::notional() const;+|x|ql/cashflows/indexedcashflow.hpp|Date IndexedCashFlow::baseDate() const;+|x|ql/cashflows/indexedcashflow.hpp|Date IndexedCashFlow::fixingDate() const;+|x|ql/cashflows/indexedcashflow.hpp|ext::shared_ptr<Index> IndexedCashFlow::index() const;+|x|ql/cashflows/indexedcashflow.hpp|bool IndexedCashFlow::growthOnly() const;+|v|ql/cashflows/indexedcashflow.hpp|Real IndexedCashFlow::baseFixing() const;+|v|ql/cashflows/indexedcashflow.hpp|Real IndexedCashFlow::indexFixing() const;+| |ql/cashflows/indexedcashflow.hpp|void accept(AcyclicVisitor & v);+|x|ql/cashflows/inflationcoupon.hpp|InflationCoupon::InflationCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, ext::shared_ptr<InflationIndex> index, const Period & observationLag, DayCounter dayCounter, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const Date & exCouponDate = Date());+|x|ql/cashflows/inflationcoupon.hpp|Real InflationCoupon::price(const Handle<YieldTermStructure> & discountingCurve) const;+|x|ql/cashflows/inflationcoupon.hpp|const ext::shared_ptr<InflationIndex> & InflationCoupon::index() const;+|x|ql/cashflows/inflationcoupon.hpp|Period InflationCoupon::observationLag() const;+|x|ql/cashflows/inflationcoupon.hpp|Natural InflationCoupon::fixingDays() const;+|x|ql/cashflows/inflationcoupon.hpp|Date InflationCoupon::fixingDate() const;+|x|ql/cashflows/inflationcoupon.hpp|Rate InflationCoupon::indexFixing() const;+|x|ql/cashflows/inflationcoupon.hpp|void InflationCoupon::setPricer(const ext::shared_ptr<InflationCouponPricer> &);+|x|ql/cashflows/inflationcoupon.hpp|ext::shared_ptr<InflationCouponPricer> InflationCoupon::pricer() const;+| |ql/cashflows/inflationcoupon.hpp|void accept(AcyclicVisitor & v);+|x|ql/cashflows/inflationcouponpricer.hpp|InflationCouponPricer::InflationCouponPricer();+|x|ql/cashflows/inflationcouponpricer.hpp|Real InflationCouponPricer::swapletPrice() const;+|x|ql/cashflows/inflationcouponpricer.hpp|Rate InflationCouponPricer::swapletRate() const;+|x|ql/cashflows/inflationcouponpricer.hpp|Real InflationCouponPricer::capletPrice(Rate effectiveCap) const;+|x|ql/cashflows/inflationcouponpricer.hpp|Rate InflationCouponPricer::capletRate(Rate effectiveCap) const;+|x|ql/cashflows/inflationcouponpricer.hpp|Real InflationCouponPricer::floorletPrice(Rate effectiveFloor) const;+|x|ql/cashflows/inflationcouponpricer.hpp|Rate InflationCouponPricer::floorletRate(Rate effectiveFloor) const;+|x|ql/cashflows/inflationcouponpricer.hpp|void InflationCouponPricer::initialize(const InflationCoupon &);+|v|ql/cashflows/inflationcouponpricer.hpp|void setCouponPricer(const Leg & leg, const ext::shared_ptr<InflationCouponPricer> &);+|x|ql/cashflows/inflationcouponpricer.hpp|YoYInflationCouponPricer::YoYInflationCouponPricer();+|x|ql/cashflows/inflationcouponpricer.hpp|YoYInflationCouponPricer::YoYInflationCouponPricer(Handle<YieldTermStructure> nominalTermStructure);+|x|ql/cashflows/inflationcouponpricer.hpp|YoYInflationCouponPricer::YoYInflationCouponPricer(Handle<YoYOptionletVolatilitySurface> capletVol, Handle<YieldTermStructure> nominalTermStructure);+|x|ql/cashflows/inflationcouponpricer.hpp|Handle<YoYOptionletVolatilitySurface> YoYInflationCouponPricer::capletVolatility() const;+|x|ql/cashflows/inflationcouponpricer.hpp|Handle<YieldTermStructure> YoYInflationCouponPricer::nominalTermStructure() const;+|x|ql/cashflows/inflationcouponpricer.hpp|void YoYInflationCouponPricer::setCapletVolatility(const Handle<YoYOptionletVolatilitySurface> & capletVol);+|x|ql/cashflows/inflationcouponpricer.hpp|BlackYoYInflationCouponPricer::BlackYoYInflationCouponPricer();+|x|ql/cashflows/inflationcouponpricer.hpp|BlackYoYInflationCouponPricer::BlackYoYInflationCouponPricer(const Handle<YieldTermStructure> & nominalTermStructure);+|v|ql/cashflows/inflationcouponpricer.hpp|BlackYoYInflationCouponPricer::BlackYoYInflationCouponPricer(const Handle<YoYOptionletVolatilitySurface> & capletVol, const Handle<YieldTermStructure> & nominalTermStructure);+|x|ql/cashflows/inflationcouponpricer.hpp|UnitDisplacedBlackYoYInflationCouponPricer::UnitDisplacedBlackYoYInflationCouponPricer();+|x|ql/cashflows/inflationcouponpricer.hpp|UnitDisplacedBlackYoYInflationCouponPricer::UnitDisplacedBlackYoYInflationCouponPricer(const Handle<YieldTermStructure> & nominalTermStructure);+|v|ql/cashflows/inflationcouponpricer.hpp|UnitDisplacedBlackYoYInflationCouponPricer::UnitDisplacedBlackYoYInflationCouponPricer(const Handle<YoYOptionletVolatilitySurface> & capletVol, const Handle<YieldTermStructure> & nominalTermStructure);+|x|ql/cashflows/inflationcouponpricer.hpp|BachelierYoYInflationCouponPricer::BachelierYoYInflationCouponPricer();+|x|ql/cashflows/inflationcouponpricer.hpp|BachelierYoYInflationCouponPricer::BachelierYoYInflationCouponPricer(const Handle<YieldTermStructure> & nominalTermStructure);+|v|ql/cashflows/inflationcouponpricer.hpp|BachelierYoYInflationCouponPricer::BachelierYoYInflationCouponPricer(const Handle<YoYOptionletVolatilitySurface> & capletVol, const Handle<YieldTermStructure> & nominalTermStructure);+|v|ql/cashflows/lineartsrpricer.hpp|Settings::Settings();+|v|ql/cashflows/lineartsrpricer.hpp|Settings & Settings::withRateBound(const Real lowerRateBound = defaultLowerBound, const Real upperRateBound = defaultUpperBound);+|v|ql/cashflows/lineartsrpricer.hpp|Settings & Settings::withVegaRatio(const Real vegaRatio = 0.01);+|v|ql/cashflows/lineartsrpricer.hpp|Settings & Settings::withVegaRatio(const Real vegaRatio, const Real lowerRateBound, const Real upperRateBound);+|v|ql/cashflows/lineartsrpricer.hpp|Settings & Settings::withPriceThreshold(const Real priceThreshold = 1.0E-8);+|v|ql/cashflows/lineartsrpricer.hpp|Settings & Settings::withPriceThreshold(const Real priceThreshold, const Real lowerRateBound, const Real upperRateBound);+|v|ql/cashflows/lineartsrpricer.hpp|Settings & Settings::withBSStdDevs(const Real stdDevs = 3.0);+|v|ql/cashflows/lineartsrpricer.hpp|Settings & Settings::withBSStdDevs(const Real stdDevs, const Real lowerRateBound, const Real upperRateBound);+|v|ql/cashflows/lineartsrpricer.hpp|LinearTsrPricer::LinearTsrPricer(const Handle<SwaptionVolatilityStructure> & swaptionVol, Handle<Quote> meanReversion, Handle<YieldTermStructure> couponDiscountCurve = Handle<YieldTermStructure>(), const Settings & settings = Settings(), ext::shared_ptr<Integrator> integrator = ext::shared_ptr<Integrator>());+| |ql/cashflows/lineartsrpricer.hpp|VegaRatioHelper::VegaRatioHelper(const SmileSection * section, const Real targetVega);+| |ql/cashflows/lineartsrpricer.hpp|Real VegaRatioHelper::operator()(Real strike) const;+|x|ql/cashflows/lineartsrpricer.hpp|PriceHelper::PriceHelper(const SmileSection * section, const Option::Type type, const Real targetPrice);+|x|ql/cashflows/lineartsrpricer.hpp|Real PriceHelper::operator()(Real strike) const;+|v|ql/cashflows/multipleresetscoupon.hpp|MultipleResetsCoupon::MultipleResetsCoupon(const Date & paymentDate, Real nominal, const Schedule & resetSchedule, Natural fixingDays, const ext::shared_ptr<IborIndex> & index, Real gearing = 1.0, Rate couponSpread = 0.0, Rate rateSpread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter(), const Date & exCouponDate = Date());+|v|ql/cashflows/multipleresetscoupon.hpp|const std::vector<Date> & MultipleResetsCoupon::fixingDates() const;+|x|ql/cashflows/multipleresetscoupon.hpp|const std::vector<Time> & MultipleResetsCoupon::dt() const;+|x|ql/cashflows/multipleresetscoupon.hpp|const std::vector<Date> & MultipleResetsCoupon::valueDates() const;+|x|ql/cashflows/multipleresetscoupon.hpp|Spread MultipleResetsCoupon::rateSpread() const;+| |ql/cashflows/multipleresetscoupon.hpp|Rate MultipleResetsPricer::swapletPrice() const;+|v|ql/cashflows/multipleresetscoupon.hpp|Real MultipleResetsPricer::capletPrice(Rate effectiveCap) const;+|v|ql/cashflows/multipleresetscoupon.hpp|Rate MultipleResetsPricer::capletRate(Rate effectiveCap) const;+|v|ql/cashflows/multipleresetscoupon.hpp|Real MultipleResetsPricer::floorletPrice(Rate effectiveFloor) const;+|v|ql/cashflows/multipleresetscoupon.hpp|Rate MultipleResetsPricer::floorletRate(Rate effectiveFloor) const;+| |ql/cashflows/multipleresetscoupon.hpp|void MultipleResetsPricer::initialize(const FloatingRateCoupon & coupon);+| |ql/cashflows/multipleresetscoupon.hpp|Real AveragingMultipleResetsPricer::swapletRate() const;+| |ql/cashflows/multipleresetscoupon.hpp|Real CompoundingMultipleResetsPricer::swapletRate() const;+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg::MultipleResetsLeg(Schedule fullResetSchedule, ext::shared_ptr<IborIndex> index, Size resetsPerCoupon);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withNotionals(Real notional);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withNotionals(const std::vector<Real> & notionals);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withPaymentDayCounter(const DayCounter &);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withPaymentCalendar(const Calendar &);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withPaymentLag(Integer lag);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withFixingDays(Natural fixingDays);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withFixingDays(const std::vector<Natural> & fixingDays);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withGearings(Real gearing);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withGearings(const std::vector<Real> & gearings);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withCouponSpreads(Spread spread);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withCouponSpreads(const std::vector<Spread> & spreads);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withRateSpreads(Spread spread);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withRateSpreads(const std::vector<Spread> & spreads);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withExCouponPeriod(const Period &, const Calendar &, BusinessDayConvention, bool endOfMonth = false);+| |ql/cashflows/multipleresetscoupon.hpp|MultipleResetsLeg & MultipleResetsLeg::withAveragingMethod(RateAveraging::Type averagingMethod);+|v|ql/cashflows/overnightindexedcoupon.hpp|OvernightIndexedCoupon::OvernightIndexedCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, const ext::shared_ptr<OvernightIndex> & overnightIndex, Real gearing = 1.0, Spread spread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter(), bool telescopicValueDates = false, RateAveraging::Type averagingMethod = RateAveraging::Compound, Natural lookbackDays = Null<Natural>(), Natural lockoutDays = 0, bool applyObservationShift = false, bool compoundSpread = false, const Date & rateComputationStartDate = Date(), const Date & rateComputationEndDate = Date(), const Date & exCouponDate = Date(), const std::optional<Integer> & roundingPrecision = std::nullopt);+|v|ql/cashflows/overnightindexedcoupon.hpp|const std::vector<Date> & OvernightIndexedCoupon::fixingDates() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|const std::vector<Time> & OvernightIndexedCoupon::dt() const;+|v|ql/cashflows/overnightindexedcoupon.hpp|const std::vector<Rate> & OvernightIndexedCoupon::indexFixings() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|const std::vector<Date> & OvernightIndexedCoupon::valueDates() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|const std::vector<Date> & OvernightIndexedCoupon::interestDates() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|RateAveraging::Type OvernightIndexedCoupon::averagingMethod() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|Natural OvernightIndexedCoupon::lockoutDays() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|bool OvernightIndexedCoupon::applyObservationShift() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|bool OvernightIndexedCoupon::compoundSpreadDaily() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|Real OvernightIndexedCoupon::effectiveSpread() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|Real OvernightIndexedCoupon::effectiveIndexFixing() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|const Date & OvernightIndexedCoupon::rateComputationStartDate() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|const Date & OvernightIndexedCoupon::rateComputationEndDate() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|bool OvernightIndexedCoupon::canApplyTelescopicFormula() const;+|v|ql/cashflows/overnightindexedcoupon.hpp|CappedFlooredOvernightIndexedCoupon::CappedFlooredOvernightIndexedCoupon(const ext::shared_ptr<OvernightIndexedCoupon> & underlying, Real cap = Null<Real>(), Real floor = Null<Real>(), bool nakedOption = false, bool dailyCapFloor = false);+|x|ql/cashflows/overnightindexedcoupon.hpp|Rate CappedFlooredOvernightIndexedCoupon::cap() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|Rate CappedFlooredOvernightIndexedCoupon::floor() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|Rate CappedFlooredOvernightIndexedCoupon::effectiveCap() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|Rate CappedFlooredOvernightIndexedCoupon::effectiveFloor() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|Real CappedFlooredOvernightIndexedCoupon::effectiveCapletVolatility() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|Real CappedFlooredOvernightIndexedCoupon::effectiveFloorletVolatility() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|bool CappedFlooredOvernightIndexedCoupon::isCapped() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|bool CappedFlooredOvernightIndexedCoupon::isFloored() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|ext::shared_ptr<OvernightIndexedCoupon> CappedFlooredOvernightIndexedCoupon::underlying() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|bool CappedFlooredOvernightIndexedCoupon::nakedOption() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|bool CappedFlooredOvernightIndexedCoupon::dailyCapFloor() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|bool CappedFlooredOvernightIndexedCoupon::compoundSpreadDaily() const;+|x|ql/cashflows/overnightindexedcoupon.hpp|RateAveraging::Type CappedFlooredOvernightIndexedCoupon::averagingMethod() const;+|?|ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg::OvernightLeg(Schedule schedule, const ext::shared_ptr<OvernightIndex> & overnightIndex);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withNotionals(Real notional);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withNotionals(const std::vector<Real> & notionals);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withPaymentDayCounter(const DayCounter &);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withPaymentCalendar(const Calendar &);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withPaymentLag(Integer lag);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withGearings(Real gearing);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withGearings(const std::vector<Real> & gearings);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withSpreads(Spread spread);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withSpreads(const std::vector<Spread> & spreads);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withTelescopicValueDates(bool telescopicValueDates);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withAveragingMethod(RateAveraging::Type averagingMethod);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withLookbackDays(Natural lookbackDays);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withLockoutDays(Natural lockoutDays);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withObservationShift(bool applyObservationShift = true);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::compoundingSpreadDaily(bool compoundSpreadDaily = true);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withRoundingPrecision(Integer roundingPrecision);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withCaps(Rate cap);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withCaps(const std::vector<Rate> & caps);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withFloors(Rate floor);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withFloors(const std::vector<Rate> & floors);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withNakedOption(bool nakedOption);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withDailyCapFloor(bool dailyCapFloor = true);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::inArrears(bool inArrears);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withLastRecentPeriod(const std::optional<Period> & lastRecentPeriod);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withLastRecentPeriodCalendar(const Calendar & lastRecentPeriodCalendar);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withPaymentDates(const std::vector<Date> & paymentDates);+| |ql/cashflows/overnightindexedcoupon.hpp|OvernightLeg & OvernightLeg::withCouponPricer(const ext::shared_ptr<OvernightIndexedCouponPricer> & couponPricer);+|x|ql/cashflows/overnightindexedcouponpricer.hpp|OvernightIndexedCouponPricer::OvernightIndexedCouponPricer(Handle<OptionletVolatilityStructure> v = Handle<OptionletVolatilityStructure>(), bool effectiveVolatilityInput = false);+|x|ql/cashflows/overnightindexedcouponpricer.hpp|void OvernightIndexedCouponPricer::initialize(const FloatingRateCoupon & coupon);+|x|ql/cashflows/overnightindexedcouponpricer.hpp|void OvernightIndexedCouponPricer::setCapletVolatility(const Handle<OptionletVolatilityStructure> & v = Handle<OptionletVolatilityStructure>());+|x|ql/cashflows/overnightindexedcouponpricer.hpp|void OvernightIndexedCouponPricer::setEffectiveVolatilityInput(const bool effectiveVolatilityInput);+|x|ql/cashflows/overnightindexedcouponpricer.hpp|bool OvernightIndexedCouponPricer::effectiveVolatilityInput() const;+|x|ql/cashflows/overnightindexedcouponpricer.hpp|Real OvernightIndexedCouponPricer::effectiveCapletVolatility() const;+|x|ql/cashflows/overnightindexedcouponpricer.hpp|Real OvernightIndexedCouponPricer::effectiveFloorletVolatility() const;+|x|ql/cashflows/overnightindexedcouponpricer.hpp|Rate OvernightIndexedCouponPricer::capletRate(Rate effectiveCap, bool dailyCapFloor) const;+|x|ql/cashflows/overnightindexedcouponpricer.hpp|Rate OvernightIndexedCouponPricer::floorletRate(Rate effectiveCap, bool dailyCapFloor) const;+|x|ql/cashflows/overnightindexedcouponpricer.hpp|Rate OvernightIndexedCouponPricer::averageRate(const Date & date) const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|CompoundingOvernightIndexedCouponPricer::CompoundingOvernightIndexedCouponPricer(Handle<OptionletVolatilityStructure> v = Handle<OptionletVolatilityStructure>(), bool effectiveVolatilityInput = false);+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Rate CompoundingOvernightIndexedCouponPricer::swapletRate() const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Real CompoundingOvernightIndexedCouponPricer::swapletPrice() const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Real CompoundingOvernightIndexedCouponPricer::capletPrice(Rate) const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Rate CompoundingOvernightIndexedCouponPricer::capletRate(Rate) const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Real CompoundingOvernightIndexedCouponPricer::floorletPrice(Rate) const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Rate CompoundingOvernightIndexedCouponPricer::floorletRate(Rate) const;+| |ql/cashflows/overnightindexedcouponpricer.hpp|Rate CompoundingOvernightIndexedCouponPricer::effectiveSpread() const;+| |ql/cashflows/overnightindexedcouponpricer.hpp|Rate CompoundingOvernightIndexedCouponPricer::effectiveIndexFixing() const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|ArithmeticAveragedOvernightIndexedCouponPricer::ArithmeticAveragedOvernightIndexedCouponPricer(Real meanReversion = 0.03, Real volatility = 0.00, bool byApprox = false, Handle<OptionletVolatilityStructure> v = Handle<OptionletVolatilityStructure>(), const bool effectiveVolatilityInput = false);+|x|ql/cashflows/overnightindexedcouponpricer.hpp|ArithmeticAveragedOvernightIndexedCouponPricer::ArithmeticAveragedOvernightIndexedCouponPricer(bool byApprox);+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Rate ArithmeticAveragedOvernightIndexedCouponPricer::swapletRate() const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Real ArithmeticAveragedOvernightIndexedCouponPricer::swapletPrice() const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Real ArithmeticAveragedOvernightIndexedCouponPricer::capletPrice(Rate) const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Rate ArithmeticAveragedOvernightIndexedCouponPricer::capletRate(Rate) const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Real ArithmeticAveragedOvernightIndexedCouponPricer::floorletPrice(Rate) const;+|v|ql/cashflows/overnightindexedcouponpricer.hpp|Rate ArithmeticAveragedOvernightIndexedCouponPricer::floorletRate(Rate) const;+|v|ql/cashflows/rangeaccrual.hpp|RangeAccrualFloatersCoupon::RangeAccrualFloatersCoupon(const Date & paymentDate, Real nominal, const ext::shared_ptr<IborIndex> & index, const Date & startDate, const Date & endDate, Natural fixingDays, const DayCounter & dayCounter, Real gearing, Rate spread, const Date & refPeriodStart, const Date & refPeriodEnd, Schedule observationsSchedule, Real lowerTrigger, Real upperTrigger);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualFloatersCoupon::RangeAccrualFloatersCoupon(const Date & paymentDate, Real nominal, const ext::shared_ptr<IborIndex> & index, const Date & startDate, const Date & endDate, Natural fixingDays, const DayCounter & dayCounter, Real gearing, Rate spread, const Date & refPeriodStart, const Date & refPeriodEnd, const ext::shared_ptr<Schedule> & observationsSchedule, Real lowerTrigger, Real upperTrigger);+|x|ql/cashflows/rangeaccrual.hpp|Real RangeAccrualFloatersCoupon::startTime() const;+|x|ql/cashflows/rangeaccrual.hpp|Real RangeAccrualFloatersCoupon::endTime() const;+|x|ql/cashflows/rangeaccrual.hpp|Real RangeAccrualFloatersCoupon::lowerTrigger() const;+|x|ql/cashflows/rangeaccrual.hpp|Real RangeAccrualFloatersCoupon::upperTrigger() const;+|x|ql/cashflows/rangeaccrual.hpp|Size RangeAccrualFloatersCoupon::observationsNo() const;+|x|ql/cashflows/rangeaccrual.hpp|const std::vector<Date> & RangeAccrualFloatersCoupon::observationDates() const;+|x|ql/cashflows/rangeaccrual.hpp|const std::vector<Real> & RangeAccrualFloatersCoupon::observationTimes() const;+|x|ql/cashflows/rangeaccrual.hpp|const Schedule & RangeAccrualFloatersCoupon::observationSchedule() const;+|x|ql/cashflows/rangeaccrual.hpp|ext::shared_ptr<Schedule> RangeAccrualFloatersCoupon::observationsSchedule() const;+|v|ql/cashflows/rangeaccrual.hpp|Real RangeAccrualFloatersCoupon::priceWithoutOptionality(const Handle<YieldTermStructure> & discountCurve) const;+|v|ql/cashflows/rangeaccrual.hpp|Rate RangeAccrualPricer::swapletRate() const;+|v|ql/cashflows/rangeaccrual.hpp|Real RangeAccrualPricer::capletPrice(Rate effectiveCap) const;+|v|ql/cashflows/rangeaccrual.hpp|Rate RangeAccrualPricer::capletRate(Rate effectiveCap) const;+|v|ql/cashflows/rangeaccrual.hpp|Real RangeAccrualPricer::floorletPrice(Rate effectiveFloor) const;+|v|ql/cashflows/rangeaccrual.hpp|Rate RangeAccrualPricer::floorletRate(Rate effectiveFloor) const;+| |ql/cashflows/rangeaccrual.hpp|void RangeAccrualPricer::initialize(const FloatingRateCoupon & coupon);+|v|ql/cashflows/rangeaccrual.hpp|RangeAccrualPricerByBgm::RangeAccrualPricerByBgm(Real correlation, ext::shared_ptr<SmileSection> smilesOnExpiry, ext::shared_ptr<SmileSection> smilesOnPayment, bool withSmile, bool byCallSpread);+|v|ql/cashflows/rangeaccrual.hpp|Real RangeAccrualPricerByBgm::swapletPrice() const;+|?|ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg::RangeAccrualLeg(Schedule schedule, ext::shared_ptr<IborIndex> index);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withNotionals(Real notional);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withNotionals(const std::vector<Real> & notionals);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withPaymentDayCounter(const DayCounter &);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withFixingDays(Natural fixingDays);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withFixingDays(const std::vector<Natural> & fixingDays);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withGearings(Real gearing);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withGearings(const std::vector<Real> & gearings);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withSpreads(Spread spread);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withSpreads(const std::vector<Spread> & spreads);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withLowerTriggers(Rate trigger);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withLowerTriggers(const std::vector<Rate> & triggers);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withUpperTriggers(Rate trigger);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withUpperTriggers(const std::vector<Rate> & triggers);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withObservationTenor(const Period &);+| |ql/cashflows/rangeaccrual.hpp|RangeAccrualLeg & RangeAccrualLeg::withObservationConvention(BusinessDayConvention);+| |ql/cashflows/replication.hpp|std::ostream & operator<<(std::ostream &, Replication::Type);+|v|ql/cashflows/replication.hpp|DigitalReplication::DigitalReplication(Replication::Type t = Replication::Central, Real gap = 1e-4);+|x|ql/cashflows/replication.hpp|Replication::Type DigitalReplication::replicationType() const;+|x|ql/cashflows/replication.hpp|Real DigitalReplication::gap() const;+|v|ql/cashflows/simplecashflow.hpp|SimpleCashFlow::SimpleCashFlow(Real amount, const Date & date);+|v|ql/cashflows/simplecashflow.hpp|Redemption::Redemption(Real amount, const Date & date);+|v|ql/cashflows/simplecashflow.hpp|AmortizingPayment::AmortizingPayment(Real amount, const Date & date);+|x|ql/cashflows/simplecashflow.hpp|void accept(AcyclicVisitor & v);+|x|ql/cashflows/timebasket.hpp|TimeBasket::TimeBasket();+|x|ql/cashflows/timebasket.hpp|TimeBasket::TimeBasket(const std::vector<Date> & dates, const std::vector<Real> & values);+|x|ql/cashflows/timebasket.hpp|bool TimeBasket::hasDate(const Date &) const;+|x|ql/cashflows/timebasket.hpp|TimeBasket & TimeBasket::operator+=(const TimeBasket & other);+|x|ql/cashflows/timebasket.hpp|TimeBasket & TimeBasket::operator-=(const TimeBasket & other);+|x|ql/cashflows/timebasket.hpp|TimeBasket TimeBasket::rebin(const std::vector<Date> & buckets) const;+| |ql/cashflows/timebasket.hpp|bool hasDate(const Date & d) const;+| |ql/cashflows/timebasket.hpp|TimeBasket & operator+=(const TimeBasket & other);+| |ql/cashflows/timebasket.hpp|TimeBasket & operator-=(const TimeBasket & other);+|v|ql/cashflows/yoyinflationcoupon.hpp|YoYInflationCoupon::YoYInflationCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<YoYInflationIndex> & index, const Period & observationLag, CPI::InterpolationType interpolation, const DayCounter & dayCounter, Real gearing = 1.0, Spread spread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date());+|x|ql/cashflows/yoyinflationcoupon.hpp|Real YoYInflationCoupon::gearing() const;+|x|ql/cashflows/yoyinflationcoupon.hpp|Spread YoYInflationCoupon::spread() const;+|v|ql/cashflows/yoyinflationcoupon.hpp|Rate YoYInflationCoupon::adjustedFixing() const;+|x|ql/cashflows/yoyinflationcoupon.hpp|const ext::shared_ptr<YoYInflationIndex> & YoYInflationCoupon::yoyIndex() const;+|x|ql/cashflows/yoyinflationcoupon.hpp|CPI::InterpolationType YoYInflationCoupon::interpolation() const;+|v|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg::yoyInflationLeg(Schedule schedule, Calendar cal, ext::shared_ptr<YoYInflationIndex> index, const Period & observationLag, CPI::InterpolationType interpolation);+|x|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withNotionals(Real notional);+|v|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withNotionals(const std::vector<Real> & notionals);+|v|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withPaymentDayCounter(const DayCounter &);+|v|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withPaymentAdjustment(BusinessDayConvention);+|x|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withFixingDays(Natural fixingDays);+|v|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withFixingDays(const std::vector<Natural> & fixingDays);+|x|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withGearings(Real gearing);+|v|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withGearings(const std::vector<Real> & gearings);+|x|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withSpreads(Spread spread);+|v|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withSpreads(const std::vector<Spread> & spreads);+|x|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withCaps(Rate cap);+|v|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withCaps(const std::vector<Rate> & caps);+|x|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withFloors(Rate floor);+|v|ql/cashflows/yoyinflationcoupon.hpp|yoyInflationLeg & yoyInflationLeg::withFloors(const std::vector<Rate> & floors);+|v|ql/cashflows/zeroinflationcashflow.hpp|ZeroInflationCashFlow::ZeroInflationCashFlow(Real notional, const ext::shared_ptr<ZeroInflationIndex> & index, CPI::InterpolationType observationInterpolation, const Date & startDate, const Date & endDate, const Period & observationLag, const Date & paymentDate, bool growthOnly = false);+|x|ql/cashflows/zeroinflationcashflow.hpp|ext::shared_ptr<ZeroInflationIndex> ZeroInflationCashFlow::zeroInflationIndex() const;+|x|ql/cashflows/zeroinflationcashflow.hpp|CPI::InterpolationType ZeroInflationCashFlow::observationInterpolation() const;+| |ql/compounding.hpp|std::ostream & operator<<(std::ostream & out, const Compounding & compounding);+|v|ql/currencies/africa.hpp|AOACurrency::AOACurrency();+|v|ql/currencies/africa.hpp|BWPCurrency::BWPCurrency();+|v|ql/currencies/africa.hpp|EGPCurrency::EGPCurrency();+|v|ql/currencies/africa.hpp|ETBCurrency::ETBCurrency();+|v|ql/currencies/africa.hpp|GHSCurrency::GHSCurrency();+|v|ql/currencies/africa.hpp|KESCurrency::KESCurrency();+|v|ql/currencies/africa.hpp|MADCurrency::MADCurrency();+|v|ql/currencies/africa.hpp|MURCurrency::MURCurrency();+|v|ql/currencies/africa.hpp|NGNCurrency::NGNCurrency();+|v|ql/currencies/africa.hpp|TNDCurrency::TNDCurrency();+|v|ql/currencies/africa.hpp|UGXCurrency::UGXCurrency();+|v|ql/currencies/africa.hpp|XOFCurrency::XOFCurrency();+|v|ql/currencies/africa.hpp|ZARCurrency::ZARCurrency();+|v|ql/currencies/africa.hpp|ZMWCurrency::ZMWCurrency();+|v|ql/currencies/america.hpp|ARSCurrency::ARSCurrency();+|v|ql/currencies/america.hpp|BRLCurrency::BRLCurrency();+|v|ql/currencies/america.hpp|CADCurrency::CADCurrency();+|v|ql/currencies/america.hpp|CLPCurrency::CLPCurrency();+|v|ql/currencies/america.hpp|COPCurrency::COPCurrency();+|v|ql/currencies/america.hpp|MXNCurrency::MXNCurrency();+|v|ql/currencies/america.hpp|PENCurrency::PENCurrency();+|v|ql/currencies/america.hpp|PEICurrency::PEICurrency();+|v|ql/currencies/america.hpp|PEHCurrency::PEHCurrency();+|v|ql/currencies/america.hpp|TTDCurrency::TTDCurrency();+|v|ql/currencies/america.hpp|USDCurrency::USDCurrency();+|v|ql/currencies/america.hpp|VEBCurrency::VEBCurrency();+|v|ql/currencies/america.hpp|MXVCurrency::MXVCurrency();+|v|ql/currencies/america.hpp|COUCurrency::COUCurrency();+|v|ql/currencies/america.hpp|CLFCurrency::CLFCurrency();+|v|ql/currencies/america.hpp|UYUCurrency::UYUCurrency();+|v|ql/currencies/asia.hpp|BDTCurrency::BDTCurrency();+|v|ql/currencies/asia.hpp|CNYCurrency::CNYCurrency();+|v|ql/currencies/asia.hpp|HKDCurrency::HKDCurrency();+|v|ql/currencies/asia.hpp|IDRCurrency::IDRCurrency();+|v|ql/currencies/asia.hpp|ILSCurrency::ILSCurrency();+|v|ql/currencies/asia.hpp|INRCurrency::INRCurrency();+|v|ql/currencies/asia.hpp|IQDCurrency::IQDCurrency();+|v|ql/currencies/asia.hpp|IRRCurrency::IRRCurrency();+|v|ql/currencies/asia.hpp|JPYCurrency::JPYCurrency();+|v|ql/currencies/asia.hpp|KRWCurrency::KRWCurrency();+|v|ql/currencies/asia.hpp|KWDCurrency::KWDCurrency();+|v|ql/currencies/asia.hpp|KZTCurrency::KZTCurrency();+|v|ql/currencies/asia.hpp|MYRCurrency::MYRCurrency();+|v|ql/currencies/asia.hpp|NPRCurrency::NPRCurrency();+|v|ql/currencies/asia.hpp|PKRCurrency::PKRCurrency();+|v|ql/currencies/asia.hpp|SARCurrency::SARCurrency();+|v|ql/currencies/asia.hpp|SGDCurrency::SGDCurrency();+|v|ql/currencies/asia.hpp|THBCurrency::THBCurrency();+|v|ql/currencies/asia.hpp|TWDCurrency::TWDCurrency();+|v|ql/currencies/asia.hpp|VNDCurrency::VNDCurrency();+|v|ql/currencies/asia.hpp|QARCurrency::QARCurrency();+|v|ql/currencies/asia.hpp|BHDCurrency::BHDCurrency();+|v|ql/currencies/asia.hpp|OMRCurrency::OMRCurrency();+|v|ql/currencies/asia.hpp|JODCurrency::JODCurrency();+|v|ql/currencies/asia.hpp|AEDCurrency::AEDCurrency();+|v|ql/currencies/asia.hpp|PHPCurrency::PHPCurrency();+|v|ql/currencies/asia.hpp|CNHCurrency::CNHCurrency();+|v|ql/currencies/asia.hpp|LKRCurrency::LKRCurrency();+|v|ql/currencies/asia.hpp|UZSCurrency::UZSCurrency();+|v|ql/currencies/crypto.hpp|BTCCurrency::BTCCurrency();+|v|ql/currencies/crypto.hpp|ETHCurrency::ETHCurrency();+|v|ql/currencies/crypto.hpp|ETCCurrency::ETCCurrency();+|v|ql/currencies/crypto.hpp|BCHCurrency::BCHCurrency();+|v|ql/currencies/crypto.hpp|XRPCurrency::XRPCurrency();+|v|ql/currencies/crypto.hpp|LTCCurrency::LTCCurrency();+|v|ql/currencies/crypto.hpp|DASHCurrency::DASHCurrency();+|v|ql/currencies/crypto.hpp|ZECCurrency::ZECCurrency();+|v|ql/currencies/europe.hpp|BGLCurrency::BGLCurrency();+|v|ql/currencies/europe.hpp|BGNCurrency::BGNCurrency();+|v|ql/currencies/europe.hpp|BYRCurrency::BYRCurrency();+|v|ql/currencies/europe.hpp|CHFCurrency::CHFCurrency();+|v|ql/currencies/europe.hpp|CZKCurrency::CZKCurrency();+|v|ql/currencies/europe.hpp|DKKCurrency::DKKCurrency();+|v|ql/currencies/europe.hpp|EEKCurrency::EEKCurrency();+|v|ql/currencies/europe.hpp|EURCurrency::EURCurrency();+|v|ql/currencies/europe.hpp|GBPCurrency::GBPCurrency();+|v|ql/currencies/europe.hpp|GELCurrency::GELCurrency();+|v|ql/currencies/europe.hpp|HUFCurrency::HUFCurrency();+|v|ql/currencies/europe.hpp|ISKCurrency::ISKCurrency();+|v|ql/currencies/europe.hpp|LTLCurrency::LTLCurrency();+|v|ql/currencies/europe.hpp|LVLCurrency::LVLCurrency();+|v|ql/currencies/europe.hpp|MKDCurrency::MKDCurrency();+|v|ql/currencies/europe.hpp|NOKCurrency::NOKCurrency();+|v|ql/currencies/europe.hpp|PLNCurrency::PLNCurrency();+|v|ql/currencies/europe.hpp|ROLCurrency::ROLCurrency();+|v|ql/currencies/europe.hpp|RONCurrency::RONCurrency();+|v|ql/currencies/europe.hpp|RSDCurrency::RSDCurrency();+|v|ql/currencies/europe.hpp|RUBCurrency::RUBCurrency();+|v|ql/currencies/europe.hpp|SEKCurrency::SEKCurrency();+|v|ql/currencies/europe.hpp|SITCurrency::SITCurrency();+|v|ql/currencies/europe.hpp|TRLCurrency::TRLCurrency();+|v|ql/currencies/europe.hpp|TRYCurrency::TRYCurrency();+|v|ql/currencies/europe.hpp|UAHCurrency::UAHCurrency();+|v|ql/currencies/europe.hpp|ATSCurrency::ATSCurrency();+|v|ql/currencies/europe.hpp|BEFCurrency::BEFCurrency();+|v|ql/currencies/europe.hpp|CYPCurrency::CYPCurrency();+|v|ql/currencies/europe.hpp|DEMCurrency::DEMCurrency();+|v|ql/currencies/europe.hpp|ESPCurrency::ESPCurrency();+|v|ql/currencies/europe.hpp|FIMCurrency::FIMCurrency();+|v|ql/currencies/europe.hpp|FRFCurrency::FRFCurrency();+|v|ql/currencies/europe.hpp|GRDCurrency::GRDCurrency();+|v|ql/currencies/europe.hpp|HRKCurrency::HRKCurrency();+|v|ql/currencies/europe.hpp|IEPCurrency::IEPCurrency();+|v|ql/currencies/europe.hpp|ITLCurrency::ITLCurrency();+|v|ql/currencies/europe.hpp|LUFCurrency::LUFCurrency();+|v|ql/currencies/europe.hpp|MTLCurrency::MTLCurrency();+|v|ql/currencies/europe.hpp|NLGCurrency::NLGCurrency();+|v|ql/currencies/europe.hpp|PTECurrency::PTECurrency();+|v|ql/currencies/europe.hpp|SKKCurrency::SKKCurrency();+|v|ql/currencies/exchangeratemanager.hpp|void ExchangeRateManager::add(const ExchangeRate &, const Date & startDate = Date::minDate(), const Date & endDate = Date::maxDate());+|v|ql/currencies/exchangeratemanager.hpp|ExchangeRate ExchangeRateManager::lookup(const Currency & source, const Currency & target, Date date = Date(), ExchangeRate::Type type = ExchangeRate::Derived) const;+|v|ql/currencies/exchangeratemanager.hpp|void ExchangeRateManager::clear();+|x|ql/currencies/exchangeratemanager.hpp|Entry::Entry();+|x|ql/currencies/exchangeratemanager.hpp|Entry::Entry(ExchangeRate rate, const Date & start, const Date & end);+|v|ql/currencies/oceania.hpp|AUDCurrency::AUDCurrency();+|v|ql/currencies/oceania.hpp|NZDCurrency::NZDCurrency();+|?|ql/currency.hpp|Currency::Currency();+|u|ql/currency.hpp|Currency::Currency(const std::string & name, const std::string & code, Integer numericCode, const std::string & symbol, const std::string & fractionSymbol, Integer fractionsPerUnit, const Rounding & rounding, const Currency & triangulationCurrency = Currency(), const std::set<std::string> & minorUnitCodes = { });+|v|ql/currency.hpp|const std::string & Currency::name() const;+|v|ql/currency.hpp|const std::string & Currency::code() const;+|v|ql/currency.hpp|Integer Currency::numericCode() const;+|v|ql/currency.hpp|const std::string & Currency::symbol() const;+|v|ql/currency.hpp|const std::string & Currency::fractionSymbol() const;+|v|ql/currency.hpp|Integer Currency::fractionsPerUnit() const;+|x|ql/currency.hpp|const Rounding & Currency::rounding() const;+|x|ql/currency.hpp|bool Currency::empty() const;+|x|ql/currency.hpp|const Currency & Currency::triangulationCurrency() const;+|x|ql/currency.hpp|const std::set<std::string> & Currency::minorUnitCodes() const;+| |ql/currency.hpp|Data::Data(std::string name, std::string code, Integer numericCode, std::string symbol, std::string fractionSymbol, Integer fractionsPerUnit, const Rounding & rounding, Currency triangulationCurrency = Currency(), std::set<std::string> minorUnitCodes = { });+| |ql/currency.hpp|bool operator==(const Currency &, const Currency &);+| |ql/currency.hpp|bool operator!=(const Currency &, const Currency &);+| |ql/currency.hpp|std::ostream & operator<<(std::ostream &, const Currency &);+| |ql/currency.hpp|void checkNonEmpty() const;+| |ql/currency.hpp|bool operator==(const Currency & c1, const Currency & c2);+| |ql/currency.hpp|bool operator!=(const Currency & c1, const Currency & c2);+| |ql/discretizedasset.hpp|DiscretizedAsset::DiscretizedAsset();+| |ql/discretizedasset.hpp|Time DiscretizedAsset::time() const;+| |ql/discretizedasset.hpp|Time & DiscretizedAsset::time();+| |ql/discretizedasset.hpp|const Array & DiscretizedAsset::values() const;+| |ql/discretizedasset.hpp|Array & DiscretizedAsset::values();+| |ql/discretizedasset.hpp|const ext::shared_ptr<Lattice> & DiscretizedAsset::method() const;+| |ql/discretizedasset.hpp|void DiscretizedAsset::initialize(const ext::shared_ptr<Lattice> &, Time t);+| |ql/discretizedasset.hpp|void DiscretizedAsset::rollback(Time to);+| |ql/discretizedasset.hpp|void DiscretizedAsset::partialRollback(Time to);+| |ql/discretizedasset.hpp|Real DiscretizedAsset::presentValue();+| |ql/discretizedasset.hpp|void DiscretizedAsset::reset(Size size);+| |ql/discretizedasset.hpp|void DiscretizedAsset::preAdjustValues();+| |ql/discretizedasset.hpp|void DiscretizedAsset::postAdjustValues();+| |ql/discretizedasset.hpp|void DiscretizedAsset::adjustValues();+| |ql/discretizedasset.hpp|std::vector<Time> DiscretizedAsset::mandatoryTimes() const;+| |ql/discretizedasset.hpp|DiscretizedDiscountBond::DiscretizedDiscountBond();+| |ql/discretizedasset.hpp|DiscretizedOption::DiscretizedOption(ext::shared_ptr<DiscretizedAsset> underlying, Exercise::Type exerciseType, std::vector<Time> exerciseTimes);+| |ql/discretizedasset.hpp|void initialize(const ext::shared_ptr<Lattice> & method, Time t);+| |ql/discretizedasset.hpp|bool isOnTime(Time t) const;+| |ql/discretizedasset.hpp|void applyExerciseCondition();+| |ql/errors.hpp|Error::Error(const std::string & file, long line, const std::string & functionName, const std::string & message = "");+|v|ql/event.hpp|Date Event::date() const;+| |ql/event.hpp|bool Event::hasOccurred(const Date & refDate = Date(), std::optional<bool> includeRefDate = std::nullopt) const;+| |ql/event.hpp|void Event::accept(AcyclicVisitor &);+| |ql/event.hpp|simple_event::simple_event(const Date & date);+|x|ql/exchangerate.hpp|ExchangeRate::ExchangeRate();+|v|ql/exchangerate.hpp|ExchangeRate::ExchangeRate(Currency source, Currency target, Decimal rate);+|x|ql/exchangerate.hpp|const Currency & ExchangeRate::source() const;+|x|ql/exchangerate.hpp|const Currency & ExchangeRate::target() const;+|v|ql/exchangerate.hpp|Type ExchangeRate::type() const;+|v|ql/exchangerate.hpp|Decimal ExchangeRate::rate() const;+|u|ql/exchangerate.hpp|Money ExchangeRate::exchange(const Money & amount) const;+|v|ql/exchangerate.hpp|static ExchangeRate ExchangeRate::chain(const ExchangeRate & r1, const ExchangeRate & r2);+|v|ql/exchangerate.hpp|ExchangeRate::Type type() const;+|v|ql/exercise.hpp|Exercise::Exercise(Type type);+|x|ql/exercise.hpp|Type Exercise::type() const;+|x|ql/exercise.hpp|Date Exercise::date(Size index) const;+|x|ql/exercise.hpp|Date Exercise::dateAt(Size index) const;+|x|ql/exercise.hpp|const std::vector<Date> & Exercise::dates() const;+|x|ql/exercise.hpp|Date Exercise::lastDate() const;+|v|ql/exercise.hpp|EarlyExercise::EarlyExercise(Type type, bool payoffAtExpiry = false);+|x|ql/exercise.hpp|bool EarlyExercise::payoffAtExpiry() const;+|v|ql/exercise.hpp|AmericanExercise::AmericanExercise(const Date & earliestDate, const Date & latestDate, bool payoffAtExpiry = false);+|v|ql/exercise.hpp|AmericanExercise::AmericanExercise(const Date & latestDate, bool payoffAtExpiry = false);+|?|ql/exercise.hpp|BermudanExercise::BermudanExercise(const std::vector<Date> & dates, bool payoffAtExpiry = false);+|v|ql/exercise.hpp|EuropeanExercise::EuropeanExercise(const Date & date);+|v|ql/experimental/asian/analytic_cont_geom_av_price_heston.hpp|AnalyticContinuousGeometricAveragePriceAsianHestonEngine::AnalyticContinuousGeometricAveragePriceAsianHestonEngine(ext::shared_ptr<HestonProcess> process, Size summationCutoff = 50, Real xiRightLimit = 100.0);+|x|ql/experimental/asian/analytic_cont_geom_av_price_heston.hpp|void AnalyticContinuousGeometricAveragePriceAsianHestonEngine::calculate() const;+| |ql/experimental/asian/analytic_cont_geom_av_price_heston.hpp|std::complex<Real> AnalyticContinuousGeometricAveragePriceAsianHestonEngine::Phi(const std::complex<Real> & s, const std::complex<Real> & w, Real T, Real t = 0.0, Size cutoff = 50) const;+|v|ql/experimental/asian/analytic_discr_geom_av_price_heston.hpp|AnalyticDiscreteGeometricAveragePriceAsianHestonEngine::AnalyticDiscreteGeometricAveragePriceAsianHestonEngine(ext::shared_ptr<HestonProcess> process, Real xiRightLimit = 100.0);+|x|ql/experimental/asian/analytic_discr_geom_av_price_heston.hpp|void AnalyticDiscreteGeometricAveragePriceAsianHestonEngine::calculate() const;+| |ql/experimental/asian/analytic_discr_geom_av_price_heston.hpp|std::complex<Real> AnalyticDiscreteGeometricAveragePriceAsianHestonEngine::Phi(std::complex<Real> s, std::complex<Real> w, Time t, Time T, Size kStar, const std::vector<Time> & t_n, const std::vector<Time> & tauK) const;+|v|ql/experimental/barrieroption/binomialdoublebarrierengine.hpp|BinomialDoubleBarrierEngine::BinomialDoubleBarrierEngine<T, D>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps);+|x|ql/experimental/barrieroption/binomialdoublebarrierengine.hpp|void BinomialDoubleBarrierEngine::calculate() const;+| |ql/experimental/barrieroption/discretizeddoublebarrieroption.hpp|DiscretizedDoubleBarrierOption::DiscretizedDoubleBarrierOption(const DoubleBarrierOption::arguments &, const StochasticProcess & process, const TimeGrid & grid = TimeGrid());+| |ql/experimental/barrieroption/discretizeddoublebarrieroption.hpp|const Array & DiscretizedDoubleBarrierOption::vanilla() const;+|x|ql/experimental/barrieroption/discretizeddoublebarrieroption.hpp|const DoubleBarrierOption::arguments & DiscretizedDoubleBarrierOption::arguments() const;+| |ql/experimental/barrieroption/discretizeddoublebarrieroption.hpp|void DiscretizedDoubleBarrierOption::checkBarrier(Array & optvalues, const Array & grid) const;+| |ql/experimental/barrieroption/discretizeddoublebarrieroption.hpp|DiscretizedDermanKaniDoubleBarrierOption::DiscretizedDermanKaniDoubleBarrierOption(const DoubleBarrierOption::arguments &, const StochasticProcess & process, const TimeGrid & grid = TimeGrid());+|v|ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MCDoubleBarrierEngine::MCDoubleBarrierEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antithetic, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/experimental/barrieroption/mcdoublebarrierengine.hpp|void MCDoubleBarrierEngine::calculate() const;+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine::MakeMCDoubleBarrierEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess>);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & MakeMCDoubleBarrierEngine::withSteps(Size steps);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & MakeMCDoubleBarrierEngine::withStepsPerYear(Size steps);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & MakeMCDoubleBarrierEngine::withBrownianBridge(bool b = true);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & MakeMCDoubleBarrierEngine::withAntitheticVariate(bool b = true);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & MakeMCDoubleBarrierEngine::withSamples(Size samples);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & MakeMCDoubleBarrierEngine::withAbsoluteTolerance(Real tolerance);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & MakeMCDoubleBarrierEngine::withMaxSamples(Size samples);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & MakeMCDoubleBarrierEngine::withSeed(BigNatural seed);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|DoubleBarrierPathPricer::DoubleBarrierPathPricer(DoubleBarrier::Type barrierType, Real barrierLow, Real barrieHigh, Real rebate, Option::Type type, Real strike, std::vector<DiscountFactor> discounts);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|Real DoubleBarrierPathPricer::operator()(const Path & path) const;+|v|ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MCDoubleBarrierEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|?|ql/experimental/barrieroption/mcdoublebarrierengine.hpp|TimeGrid timeGrid() const;+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|ext::shared_ptr<typename MCDoubleBarrierEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & withAntitheticVariate(bool b);+| |ql/experimental/barrieroption/perturbativebarrieroptionengine.hpp|PerturbativeBarrierOptionEngine::PerturbativeBarrierOptionEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, Natural order = 1, bool zeroGamma = false, Size npoint = 1000, Size npoint2 = 100);+|x|ql/experimental/barrieroption/perturbativebarrieroptionengine.hpp|void PerturbativeBarrierOptionEngine::calculate() const;+|v|ql/experimental/barrieroption/quantodoublebarrieroption.hpp|QuantoDoubleBarrierOption::QuantoDoubleBarrierOption(DoubleBarrier::Type barrierType, Real barrier_lo, Real barrier_hi, Real rebate, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|v|ql/experimental/barrieroption/quantodoublebarrieroption.hpp|Real QuantoDoubleBarrierOption::qvega() const;+|v|ql/experimental/barrieroption/quantodoublebarrieroption.hpp|Real QuantoDoubleBarrierOption::qrho() const;+|v|ql/experimental/barrieroption/quantodoublebarrieroption.hpp|Real QuantoDoubleBarrierOption::qlambda() const;+| |ql/experimental/barrieroption/suowangdoublebarrierengine.hpp|SuoWangDoubleBarrierEngine::SuoWangDoubleBarrierEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, int series = 5);+|x|ql/experimental/barrieroption/suowangdoublebarrierengine.hpp|void SuoWangDoubleBarrierEngine::calculate() const;+|v|ql/experimental/barrieroption/vannavolgabarrierengine.hpp|VannaVolgaBarrierEngine::VannaVolgaBarrierEngine(Handle<DeltaVolQuote> atmVol, Handle<DeltaVolQuote> vol25Put, Handle<DeltaVolQuote> vol25Call, Handle<Quote> spotFX, Handle<YieldTermStructure> domesticTS, Handle<YieldTermStructure> foreignTS, bool adaptVanDelta = false, Real bsPriceWithSmile = 0.0);+|x|ql/experimental/barrieroption/vannavolgabarrierengine.hpp|void VannaVolgaBarrierEngine::calculate() const;+|v|ql/experimental/barrieroption/vannavolgadoublebarrierengine.hpp|VannaVolgaDoubleBarrierEngine::VannaVolgaDoubleBarrierEngine<DoubleBarrierEngine>(Handle<DeltaVolQuote> atmVol, Handle<DeltaVolQuote> vol25Put, Handle<DeltaVolQuote> vol25Call, Handle<Quote> spotFX, Handle<YieldTermStructure> domesticTS, Handle<YieldTermStructure> foreignTS, const bool adaptVanDelta = false, const Real bsPriceWithSmile = 0.0, int series = 5);+|x|ql/experimental/barrieroption/vannavolgadoublebarrierengine.hpp|void VannaVolgaDoubleBarrierEngine::calculate() const;+| |ql/experimental/barrieroption/vannavolgainterpolation.hpp|VannaVolga::VannaVolga(Real spot, DiscountFactor dDiscount, DiscountFactor fDiscount, Time T);+| |ql/experimental/barrieroption/vannavolgainterpolation.hpp|VannaVolgaInterpolationImpl::VannaVolgaInterpolationImpl<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, Real spot, DiscountFactor dDiscount, DiscountFactor fDiscount, Time T);+| |ql/experimental/barrieroption/vannavolgainterpolation.hpp|void VannaVolgaInterpolationImpl::update();+| |ql/experimental/barrieroption/vannavolgainterpolation.hpp|Real VannaVolgaInterpolationImpl::value(Real k) const;+| |ql/experimental/barrieroption/vannavolgainterpolation.hpp|Real VannaVolgaInterpolationImpl::primitive(Real) const;+| |ql/experimental/barrieroption/vannavolgainterpolation.hpp|Real VannaVolgaInterpolationImpl::derivative(Real) const;+| |ql/experimental/barrieroption/vannavolgainterpolation.hpp|Real VannaVolgaInterpolationImpl::secondDerivative(Real) const;+| |ql/experimental/basismodels/swaptioncfs.hpp|const Leg & IborLegCashFlows::floatLeg() const;+| |ql/experimental/basismodels/swaptioncfs.hpp|const std::vector<Real> & IborLegCashFlows::floatTimes() const;+| |ql/experimental/basismodels/swaptioncfs.hpp|const std::vector<Real> & IborLegCashFlows::floatWeights() const;+| |ql/experimental/basismodels/swaptioncfs.hpp|IborLegCashFlows::IborLegCashFlows(const Leg & iborLeg, const Handle<YieldTermStructure> & discountCurve, bool contTenorSpread = true);+| |ql/experimental/basismodels/swaptioncfs.hpp|IborLegCashFlows::IborLegCashFlows();+| |ql/experimental/basismodels/swaptioncfs.hpp|SwapCashFlows::SwapCashFlows(const ext::shared_ptr<FixedVsFloatingSwap> & swap, const Handle<YieldTermStructure> & discountCurve, bool contTenorSpread = true);+| |ql/experimental/basismodels/swaptioncfs.hpp|SwapCashFlows::SwapCashFlows();+| |ql/experimental/basismodels/swaptioncfs.hpp|const Leg & SwapCashFlows::fixedLeg() const;+| |ql/experimental/basismodels/swaptioncfs.hpp|const std::vector<Real> & SwapCashFlows::fixedTimes() const;+| |ql/experimental/basismodels/swaptioncfs.hpp|const std::vector<Real> & SwapCashFlows::fixedWeights() const;+| |ql/experimental/basismodels/swaptioncfs.hpp|const std::vector<Real> & SwapCashFlows::annuityWeights() const;+| |ql/experimental/basismodels/swaptioncfs.hpp|SwaptionCashFlows::SwaptionCashFlows(const ext::shared_ptr<Swaption> & swaption, const Handle<YieldTermStructure> & discountCurve, bool contTenorSpread = true);+| |ql/experimental/basismodels/swaptioncfs.hpp|SwaptionCashFlows::SwaptionCashFlows();+|x|ql/experimental/basismodels/swaptioncfs.hpp|ext::shared_ptr<Swaption> SwaptionCashFlows::swaption() const;+| |ql/experimental/basismodels/swaptioncfs.hpp|const std::vector<Real> & SwaptionCashFlows::exerciseTimes() const;+| |ql/experimental/basismodels/tenoroptionletvts.hpp|TenorOptionletSmileSection::TenorOptionletSmileSection(const TenorOptionletVTS & volTS, Time optionTime);+| |ql/experimental/basismodels/tenoroptionletvts.hpp|Real CorrelationStructure::operator()(const Time & start1, const Time & start2) const;+| |ql/experimental/basismodels/tenoroptionletvts.hpp|TwoParameterCorrelation::TwoParameterCorrelation(ext::shared_ptr<Interpolation> rhoInf, ext::shared_ptr<Interpolation> beta);+| |ql/experimental/basismodels/tenoroptionletvts.hpp|TenorOptionletVTS::TenorOptionletVTS(const Handle<OptionletVolatilityStructure> & baseVTS, ext::shared_ptr<IborIndex> baseIndex, ext::shared_ptr<IborIndex> targIndex, ext::shared_ptr<CorrelationStructure> correlation);+|x|ql/experimental/basismodels/tenorswaptionvts.hpp|TenorSwaptionSmileSection::TenorSwaptionSmileSection(const TenorSwaptionVTS & volTS, Time optionTime, Time swapLength);+|x|ql/experimental/basismodels/tenorswaptionvts.hpp|Real TenorSwaptionSmileSection::minStrike() const;+|x|ql/experimental/basismodels/tenorswaptionvts.hpp|Real TenorSwaptionSmileSection::maxStrike() const;+|x|ql/experimental/basismodels/tenorswaptionvts.hpp|Real TenorSwaptionSmileSection::atmLevel() const;+| |ql/experimental/basismodels/tenorswaptionvts.hpp|TenorSwaptionVTS::TenorSwaptionVTS(const Handle<SwaptionVolatilityStructure> & baseVTS, Handle<YieldTermStructure> discountCurve, ext::shared_ptr<IborIndex> baseIndex, ext::shared_ptr<IborIndex> targIndex, const Period & baseFixedFreq, const Period & targFixedFreq, DayCounter baseFixedDC, DayCounter targFixedDC);+|v|ql/experimental/callablebonds/blackcallablebondengine.hpp|BlackCallableFixedRateBondEngine::BlackCallableFixedRateBondEngine(const Handle<Quote> & fwdYieldVol, Handle<YieldTermStructure> discountCurve);+|v|ql/experimental/callablebonds/blackcallablebondengine.hpp|BlackCallableFixedRateBondEngine::BlackCallableFixedRateBondEngine(Handle<CallableBondVolatilityStructure> yieldVolStructure, Handle<YieldTermStructure> discountCurve);+|x|ql/experimental/callablebonds/blackcallablebondengine.hpp|void BlackCallableFixedRateBondEngine::calculate() const;+|v|ql/experimental/callablebonds/blackcallablebondengine.hpp|BlackCallableZeroCouponBondEngine::BlackCallableZeroCouponBondEngine(const Handle<Quote> & fwdYieldVol, const Handle<YieldTermStructure> & discountCurve);+|v|ql/experimental/callablebonds/blackcallablebondengine.hpp|BlackCallableZeroCouponBondEngine::BlackCallableZeroCouponBondEngine(const Handle<CallableBondVolatilityStructure> & yieldVolStructure, const Handle<YieldTermStructure> & discountCurve);+|x|ql/experimental/callablebonds/callablebond.hpp|const CallabilitySchedule & CallableBond::callability() const;+| |ql/experimental/callablebonds/callablebond.hpp|Volatility CallableBond::impliedVolatility(const Bond::Price & targetPrice, const Handle<YieldTermStructure> & discountCurve, Real accuracy, Size maxEvaluations, Volatility minVol, Volatility maxVol) const;+| |ql/experimental/callablebonds/callablebond.hpp|Spread CallableBond::OAS(Real cleanPrice, const Handle<YieldTermStructure> & engineTS, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date(), Real accuracy = 1.0e-10, Size maxIterations = 100, Rate guess = 0.0);+| |ql/experimental/callablebonds/callablebond.hpp|Real CallableBond::cleanPriceOAS(Real oas, const Handle<YieldTermStructure> & engineTS, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date());+| |ql/experimental/callablebonds/callablebond.hpp|Real CallableBond::effectiveDuration(Real oas, const Handle<YieldTermStructure> & engineTS, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Real bump = 2e-4);+| |ql/experimental/callablebonds/callablebond.hpp|Real CallableBond::effectiveConvexity(Real oas, const Handle<YieldTermStructure> & engineTS, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Real bump = 2e-4);+| |ql/experimental/callablebonds/callablebond.hpp|arguments::arguments();+| |ql/experimental/callablebonds/callablebond.hpp|void arguments::validate() const;+|v|ql/experimental/callablebonds/callablebond.hpp|CallableFixedRateBond::CallableFixedRateBond(Natural settlementDays, Real faceAmount, Schedule schedule, const std::vector<Rate> & coupons, const DayCounter & accrualDayCounter, BusinessDayConvention paymentConvention = Following, Real redemption = 100.0, const Date & issueDate = Date(), const CallabilitySchedule & putCallSchedule = { }, const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false);+|v|ql/experimental/callablebonds/callablebond.hpp|CallableZeroCouponBond::CallableZeroCouponBond(Natural settlementDays, Real faceAmount, const Calendar & calendar, const Date & maturityDate, const DayCounter & dayCounter, BusinessDayConvention paymentConvention = Following, Real redemption = 100.0, const Date & issueDate = Date(), const CallabilitySchedule & putCallSchedule = { });+|x|ql/experimental/callablebonds/callablebondconstantvol.hpp|CallableBondConstantVolatility::CallableBondConstantVolatility(const Date & referenceDate, Volatility volatility, DayCounter dayCounter);+|v|ql/experimental/callablebonds/callablebondconstantvol.hpp|CallableBondConstantVolatility::CallableBondConstantVolatility(const Date & referenceDate, Handle<Quote> volatility, DayCounter dayCounter);+|x|ql/experimental/callablebonds/callablebondconstantvol.hpp|CallableBondConstantVolatility::CallableBondConstantVolatility(Natural settlementDays, const Calendar &, Volatility volatility, DayCounter dayCounter);+|v|ql/experimental/callablebonds/callablebondconstantvol.hpp|CallableBondConstantVolatility::CallableBondConstantVolatility(Natural settlementDays, const Calendar &, Handle<Quote> volatility, DayCounter dayCounter);+| |ql/experimental/callablebonds/callablebondconstantvol.hpp|const Period & maxBondTenor() const;+| |ql/experimental/callablebonds/callablebondconstantvol.hpp|Time maxBondLength() const;+|x|ql/experimental/callablebonds/callablebondconstantvol.hpp|Real minStrike() const;+|x|ql/experimental/callablebonds/callablebondconstantvol.hpp|Real maxStrike() const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|CallableBondVolatilityStructure::CallableBondVolatilityStructure(const DayCounter & dc = DayCounter(), BusinessDayConvention bdc = Following);+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|CallableBondVolatilityStructure::CallableBondVolatilityStructure(const Date & referenceDate, const Calendar & calendar = Calendar(), const DayCounter & dc = DayCounter(), BusinessDayConvention bdc = Following);+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|CallableBondVolatilityStructure::CallableBondVolatilityStructure(Natural settlementDays, const Calendar &, const DayCounter & dc = DayCounter(), BusinessDayConvention bdc = Following);+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|Volatility CallableBondVolatilityStructure::volatility(Time optionTime, Time bondLength, Rate strike, bool extrapolate = false) const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|Real CallableBondVolatilityStructure::blackVariance(Time optionTime, Time bondLength, Rate strike, bool extrapolate = false) const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|Volatility CallableBondVolatilityStructure::volatility(const Date & optionDate, const Period & bondTenor, Rate strike, bool extrapolate = false) const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|Real CallableBondVolatilityStructure::blackVariance(const Date & optionDate, const Period & bondTenor, Rate strike, bool extrapolate = false) const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|ext::shared_ptr<SmileSection> CallableBondVolatilityStructure::smileSection(const Date & optionDate, const Period & bondTenor) const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|Volatility CallableBondVolatilityStructure::volatility(const Period & optionTenor, const Period & bondTenor, Rate strike, bool extrapolate = false) const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|Real CallableBondVolatilityStructure::blackVariance(const Period & optionTenor, const Period & bondTenor, Rate strike, bool extrapolate = false) const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|ext::shared_ptr<SmileSection> CallableBondVolatilityStructure::smileSection(const Period & optionTenor, const Period & bondTenor) const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|const Period & CallableBondVolatilityStructure::maxBondTenor() const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|Time CallableBondVolatilityStructure::maxBondLength() const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|Rate CallableBondVolatilityStructure::minStrike() const;+|v|ql/experimental/callablebonds/callablebondvolstructure.hpp|Rate CallableBondVolatilityStructure::maxStrike() const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|std::pair<Time, Time> CallableBondVolatilityStructure::convertDates(const Date & optionDate, const Period & bondTenor) const;+|x|ql/experimental/callablebonds/callablebondvolstructure.hpp|BusinessDayConvention CallableBondVolatilityStructure::businessDayConvention() const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|Date CallableBondVolatilityStructure::optionDateFromTenor(const Period & optionTenor) const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|Volatility volatility(Time optionTime, Time bondLength, Rate strike, bool extrapolate) const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|Real blackVariance(Time optionTime, Time bondLength, Rate strike, bool extrapolate) const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|Volatility volatility(const Date & optionDate, const Period & bondTenor, Rate strike, bool extrapolate) const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|Real blackVariance(const Date & optionDate, const Period & bondTenor, Rate strike, bool extrapolate) const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|Volatility volatility(const Period & optionTenor, const Period & bondTenor, Rate strike, bool extrapolate) const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|Real blackVariance(const Period & optionTenor, const Period & bondTenor, Rate strike, bool extrapolate) const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|void checkRange(Time optionTime, Time bondLength, Rate k, bool extrapolate) const;+| |ql/experimental/callablebonds/discretizedcallablefixedratebond.hpp|DiscretizedCallableFixedRateBond::DiscretizedCallableFixedRateBond(const CallableBond::arguments &, const Handle<YieldTermStructure> & termStructure);+|v|ql/experimental/callablebonds/treecallablebondengine.hpp|TreeCallableFixedRateBondEngine::TreeCallableFixedRateBondEngine(const ext::shared_ptr<ShortRateModel> &, Size timeSteps, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|v|ql/experimental/callablebonds/treecallablebondengine.hpp|TreeCallableFixedRateBondEngine::TreeCallableFixedRateBondEngine(const ext::shared_ptr<ShortRateModel> &, const TimeGrid & timeGrid, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|x|ql/experimental/callablebonds/treecallablebondengine.hpp|void TreeCallableFixedRateBondEngine::calculate() const;+|v|ql/experimental/callablebonds/treecallablebondengine.hpp|TreeCallableZeroCouponBondEngine::TreeCallableZeroCouponBondEngine(const ext::shared_ptr<ShortRateModel> & model, const Size timeSteps, const Handle<YieldTermStructure> & termStructure = Handle<YieldTermStructure>());+|v|ql/experimental/callablebonds/treecallablebondengine.hpp|TreeCallableZeroCouponBondEngine::TreeCallableZeroCouponBondEngine(const ext::shared_ptr<ShortRateModel> & model, const TimeGrid & timeGrid, const Handle<YieldTermStructure> & termStructure = Handle<YieldTermStructure>());+| |ql/experimental/catbonds/catbond.hpp|CatBond::CatBond(Natural settlementDays, const Calendar & calendar, const Date & issueDate, ext::shared_ptr<NotionalRisk> notionalRisk);+| |ql/experimental/catbonds/catbond.hpp|Real CatBond::lossProbability() const;+| |ql/experimental/catbonds/catbond.hpp|Real CatBond::expectedLoss() const;+| |ql/experimental/catbonds/catbond.hpp|Real CatBond::exhaustionProbability() const;+| |ql/experimental/catbonds/catbond.hpp|void arguments::validate() const;+| |ql/experimental/catbonds/catbond.hpp|FloatingCatBond::FloatingCatBond(Natural settlementDays, Real faceAmount, Schedule schedule, const ext::shared_ptr<IborIndex> & iborIndex, const DayCounter & accrualDayCounter, const ext::shared_ptr<NotionalRisk> & notionalRisk, BusinessDayConvention paymentConvention = Following, Natural fixingDays = Null<Natural>(), const std::vector<Real> & gearings = std::vector<Real>(1, 1.0), const std::vector<Spread> & spreads = std::vector<Spread>(1, 0.0), const std::vector<Rate> & caps = std::vector<Rate>(), const std::vector<Rate> & floors = std::vector<Rate>(), bool inArrears = false, Real redemption = 100.0, const Date & issueDate = Date());+| |ql/experimental/catbonds/catbond.hpp|FloatingCatBond::FloatingCatBond(Natural settlementDays, Real faceAmount, const Date & startDate, const Date & maturityDate, Frequency couponFrequency, const Calendar & calendar, const ext::shared_ptr<IborIndex> & iborIndex, const DayCounter & accrualDayCounter, const ext::shared_ptr<NotionalRisk> & notionalRisk, BusinessDayConvention accrualConvention = Following, BusinessDayConvention paymentConvention = Following, Natural fixingDays = Null<Natural>(), const std::vector<Real> & gearings = std::vector<Real>(1, 1.0), const std::vector<Spread> & spreads = std::vector<Spread>(1, 0.0), const std::vector<Rate> & caps = std::vector<Rate>(), const std::vector<Rate> & floors = std::vector<Rate>(), bool inArrears = false, Real redemption = 100.0, const Date & issueDate = Date(), const Date & stubDate = Date(), DateGeneration::Rule rule = DateGeneration::Backward, bool endOfMonth = false);+| |ql/experimental/catbonds/catrisk.hpp|CatSimulation::CatSimulation(Date start, Date end);+| |ql/experimental/catbonds/catrisk.hpp|bool CatSimulation::nextPath(std::vector<std::pair<Date, Real>> & path);+| |ql/experimental/catbonds/catrisk.hpp|ext::shared_ptr<CatSimulation> CatRisk::newSimulation(const Date & start, const Date & end) const;+| |ql/experimental/catbonds/catrisk.hpp|EventSetSimulation::EventSetSimulation(ext::shared_ptr<std::vector<std::pair<Date, Real>>> events, Date eventsStart, Date eventsEnd, Date start, Date end);+| |ql/experimental/catbonds/catrisk.hpp|EventSet::EventSet(ext::shared_ptr<std::vector<std::pair<Date, Real>>> events, Date eventsStart, Date eventsEnd);+| |ql/experimental/catbonds/catrisk.hpp|BetaRiskSimulation::BetaRiskSimulation(Date start, Date end, Real maxLoss, Real lambda, Real alpha, Real beta);+| |ql/experimental/catbonds/catrisk.hpp|Real BetaRiskSimulation::generateBeta();+| |ql/experimental/catbonds/catrisk.hpp|BetaRisk::BetaRisk(Real maxLoss, Real years, Real mean, Real stdDev);+| |ql/experimental/catbonds/montecarlocatbondengine.hpp|MonteCarloCatBondEngine::MonteCarloCatBondEngine(ext::shared_ptr<CatRisk> catRisk, Handle<YieldTermStructure> discountCurve = Handle<YieldTermStructure>(), const std::optional<bool> & includeSettlementDateFlows = std::nullopt);+|x|ql/experimental/catbonds/montecarlocatbondengine.hpp|void MonteCarloCatBondEngine::calculate() const;+| |ql/experimental/catbonds/riskynotional.hpp|Date EventPaymentOffset::paymentDate(const Date & eventDate);+| |ql/experimental/catbonds/riskynotional.hpp|NotionalPath::NotionalPath();+| |ql/experimental/catbonds/riskynotional.hpp|Rate NotionalPath::notionalRate(const Date & date) const;+| |ql/experimental/catbonds/riskynotional.hpp|void NotionalPath::reset();+| |ql/experimental/catbonds/riskynotional.hpp|void NotionalPath::addReduction(const Date & date, Rate newRate);+| |ql/experimental/catbonds/riskynotional.hpp|Real NotionalPath::loss();+| |ql/experimental/catbonds/riskynotional.hpp|NotionalRisk::NotionalRisk(ext::shared_ptr<EventPaymentOffset> paymentOffset);+| |ql/experimental/catbonds/riskynotional.hpp|void NotionalRisk::updatePath(const std::vector<std::pair<Date, Real>> & events, NotionalPath & path) const;+| |ql/experimental/catbonds/riskynotional.hpp|DigitalNotionalRisk::DigitalNotionalRisk(const ext::shared_ptr<EventPaymentOffset> & paymentOffset, Real threshold);+| |ql/experimental/catbonds/riskynotional.hpp|ProportionalNotionalRisk::ProportionalNotionalRisk(const ext::shared_ptr<EventPaymentOffset> & paymentOffset, Real attachement, Real exhaustion);+|x|ql/experimental/commodities/commodity.hpp|std::ostream & operator<<(std::ostream & out, const SecondaryCostAmounts & secondaryCostAmounts);+|x|ql/experimental/commodities/commodity.hpp|PricingError::PricingError(Level errorLevel, std::string error, std::string detail);+|x|ql/experimental/commodities/commodity.hpp|std::ostream & operator<<(std::ostream & out, const PricingError & error);+|x|ql/experimental/commodities/commodity.hpp|std::ostream & operator<<(std::ostream & out, const PricingErrors & errors);+|x|ql/experimental/commodities/commodity.hpp|Commodity::Commodity(ext::shared_ptr<SecondaryCosts> secondaryCosts);+|x|ql/experimental/commodities/commodity.hpp|const ext::shared_ptr<SecondaryCosts> & Commodity::secondaryCosts() const;+|v|ql/experimental/commodities/commodity.hpp|const SecondaryCostAmounts & Commodity::secondaryCostAmounts() const;+|v|ql/experimental/commodities/commodity.hpp|const PricingErrors & Commodity::pricingErrors() const;+|v|ql/experimental/commodities/commodity.hpp|void Commodity::addPricingError(PricingError::Level errorLevel, const std::string & error, const std::string & detail = "") const;+|x|ql/experimental/commodities/commoditycashflow.hpp|CommodityCashFlow::CommodityCashFlow(const Date & date, Money discountedAmount, Money undiscountedAmount, Money discountedPaymentAmount, Money undiscountedPaymentAmount, Real discountFactor, Real paymentDiscountFactor, bool finalized);+|x|ql/experimental/commodities/commoditycashflow.hpp|const Currency & CommodityCashFlow::currency() const;+|v|ql/experimental/commodities/commoditycashflow.hpp|const Money & CommodityCashFlow::discountedAmount() const;+|v|ql/experimental/commodities/commoditycashflow.hpp|const Money & CommodityCashFlow::undiscountedAmount() const;+|v|ql/experimental/commodities/commoditycashflow.hpp|const Money & CommodityCashFlow::discountedPaymentAmount() const;+|v|ql/experimental/commodities/commoditycashflow.hpp|const Money & CommodityCashFlow::undiscountedPaymentAmount() const;+|v|ql/experimental/commodities/commoditycashflow.hpp|Real CommodityCashFlow::discountFactor() const;+|v|ql/experimental/commodities/commoditycashflow.hpp|Real CommodityCashFlow::paymentDiscountFactor() const;+|v|ql/experimental/commodities/commoditycashflow.hpp|bool CommodityCashFlow::finalized() const;+|x|ql/experimental/commodities/commoditycashflow.hpp|std::ostream & operator<<(std::ostream & out, const CommodityCashFlows & cashFlows);+|v|ql/experimental/commodities/commoditycurve.hpp|CommodityCurve::CommodityCurve(std::string name, CommodityType commodityType, Currency currency, UnitOfMeasure unitOfMeasure, const Calendar & calendar, const std::vector<Date> & dates, std::vector<Real> prices, const DayCounter & dayCounter = Actual365Fixed());+|x|ql/experimental/commodities/commoditycurve.hpp|CommodityCurve::CommodityCurve(std::string name, CommodityType commodityType, Currency currency, UnitOfMeasure unitOfMeasure, const Calendar & calendar, const DayCounter & dayCounter = Actual365Fixed());+|v|ql/experimental/commodities/commoditycurve.hpp|const std::string & CommodityCurve::name() const;+|v|ql/experimental/commodities/commoditycurve.hpp|const CommodityType & CommodityCurve::commodityType() const;+|v|ql/experimental/commodities/commoditycurve.hpp|const UnitOfMeasure & CommodityCurve::unitOfMeasure() const;+|v|ql/experimental/commodities/commoditycurve.hpp|const Currency & CommodityCurve::currency() const;+|x|ql/experimental/commodities/commoditycurve.hpp|const std::vector<Time> & CommodityCurve::times() const;+|v|ql/experimental/commodities/commoditycurve.hpp|const std::vector<Date> & CommodityCurve::dates() const;+|v|ql/experimental/commodities/commoditycurve.hpp|const std::vector<Real> & CommodityCurve::prices() const;+|x|ql/experimental/commodities/commoditycurve.hpp|std::vector<std::pair<Date, Real>> CommodityCurve::nodes() const;+|v|ql/experimental/commodities/commoditycurve.hpp|bool CommodityCurve::empty() const;+|x|ql/experimental/commodities/commoditycurve.hpp|void CommodityCurve::setPrices(std::map<Date, Real> & prices);+|v|ql/experimental/commodities/commoditycurve.hpp|void CommodityCurve::setBasisOfCurve(const ext::shared_ptr<CommodityCurve> & basisOfCurve);+|v|ql/experimental/commodities/commoditycurve.hpp|Real CommodityCurve::price(const Date & d, const ext::shared_ptr<ExchangeContracts> & exchangeContracts, Integer nearbyOffset) const;+|v|ql/experimental/commodities/commoditycurve.hpp|Real CommodityCurve::basisOfPrice(const Date & d) const;+|v|ql/experimental/commodities/commoditycurve.hpp|Date CommodityCurve::underlyingPriceDate(const Date & date, const ext::shared_ptr<ExchangeContracts> & exchangeContracts, Integer nearbyOffset) const;+|v|ql/experimental/commodities/commoditycurve.hpp|const ext::shared_ptr<CommodityCurve> & CommodityCurve::basisOfCurve() const;+|x|ql/experimental/commodities/commoditycurve.hpp|std::ostream & CommodityCurve::operator<<(std::ostream & out, const CommodityCurve & curve);+|x|ql/experimental/commodities/commoditycurve.hpp|bool operator==(const CommodityCurve & c1, const CommodityCurve & c2);+|v|ql/experimental/commodities/commoditycurve.hpp|Date maxDate() const;+|x|ql/experimental/commodities/commoditycurve.hpp|Real basisOfPriceImpl(Time t) const;+|x|ql/experimental/commodities/commoditycurve.hpp|Real priceImpl(Time t) const;+|v|ql/experimental/commodities/commodityindex.hpp|CommodityIndex::CommodityIndex(std::string name, CommodityType commodityType, Currency currency, UnitOfMeasure unitOfMeasure, Calendar calendar, Real lotQuantity, ext::shared_ptr<CommodityCurve> forwardCurve, ext::shared_ptr<ExchangeContracts> exchangeContracts, int nearbyOffset);+|x|ql/experimental/commodities/commodityindex.hpp|const CommodityType & CommodityIndex::commodityType() const;+|x|ql/experimental/commodities/commodityindex.hpp|const Currency & CommodityIndex::currency() const;+|x|ql/experimental/commodities/commodityindex.hpp|const UnitOfMeasure & CommodityIndex::unitOfMeasure() const;+|x|ql/experimental/commodities/commodityindex.hpp|const ext::shared_ptr<CommodityCurve> & CommodityIndex::forwardCurve() const;+|x|ql/experimental/commodities/commodityindex.hpp|Real CommodityIndex::lotQuantity() const;+|v|ql/experimental/commodities/commodityindex.hpp|Real CommodityIndex::forwardPrice(const Date & date) const;+|v|ql/experimental/commodities/commodityindex.hpp|Date CommodityIndex::lastQuoteDate() const;+|v|ql/experimental/commodities/commodityindex.hpp|bool CommodityIndex::empty() const;+|x|ql/experimental/commodities/commodityindex.hpp|bool CommodityIndex::forwardCurveEmpty() const;+|x|ql/experimental/commodities/commodityindex.hpp|std::ostream & CommodityIndex::operator<<(std::ostream &, const CommodityIndex &);+|x|ql/experimental/commodities/commodityindex.hpp|bool operator==(const CommodityIndex & i1, const CommodityIndex & i2);+|x|ql/experimental/commodities/commodityindex.hpp|void update();+|v|ql/experimental/commodities/commodityindex.hpp|std::string name() const;+|v|ql/experimental/commodities/commodityindex.hpp|Calendar fixingCalendar() const;+|v|ql/experimental/commodities/commodityindex.hpp|bool isValidFixingDate(const Date & fixingDate) const;+|v|ql/experimental/commodities/commodityindex.hpp|Real fixing(const Date & date, bool) const;+|x|ql/experimental/commodities/commoditypricinghelpers.hpp|CommodityPricingHelper::CommodityPricingHelper();+|x|ql/experimental/commodities/commoditypricinghelpers.hpp|static Real CommodityPricingHelper::calculateFxConversionFactor(const Currency & fromCurrency, const Currency & toCurrency, const Date & evaluationDate);+|x|ql/experimental/commodities/commoditypricinghelpers.hpp|static Real CommodityPricingHelper::calculateUomConversionFactor(const CommodityType & commodityType, const UnitOfMeasure & fromUnitOfMeasure, const UnitOfMeasure & toUnitOfMeasure);+|x|ql/experimental/commodities/commoditypricinghelpers.hpp|static Real CommodityPricingHelper::calculateUnitCost(const CommodityType & commodityType, const CommodityUnitCost & unitCost, const Currency & baseCurrency, const UnitOfMeasure & baseUnitOfMeasure, const Date & evaluationDate);+|v|ql/experimental/commodities/commoditypricinghelpers.hpp|static void CommodityPricingHelper::createPricingPeriods(Date startDate, Date endDate, const Quantity & quantity, EnergyCommodity::DeliverySchedule deliverySchedule, EnergyCommodity::QuantityPeriodicity qtyPeriodicity, const PaymentTerm & paymentTerm, PricingPeriods & pricingPeriods);+|v|ql/experimental/commodities/commoditysettings.hpp|Currency & CommoditySettings::currency();+|v|ql/experimental/commodities/commoditysettings.hpp|UnitOfMeasure & CommoditySettings::unitOfMeasure();+|x|ql/experimental/commodities/commoditytype.hpp|CommodityType::CommodityType();+|v|ql/experimental/commodities/commoditytype.hpp|const std::string & CommodityType::code() const;+|v|ql/experimental/commodities/commoditytype.hpp|const std::string & CommodityType::name() const;+|v|ql/experimental/commodities/commoditytype.hpp|bool CommodityType::empty() const;+|x|ql/experimental/commodities/commoditytype.hpp|Data::Data(std::string name, std::string code);+|v|ql/experimental/commodities/commoditytype.hpp|bool operator==(const CommodityType &, const CommodityType &);+|v|ql/experimental/commodities/commoditytype.hpp|bool operator!=(const CommodityType &, const CommodityType &);+|x|ql/experimental/commodities/commoditytype.hpp|std::ostream & operator<<(std::ostream &, const CommodityType &);+|v|ql/experimental/commodities/commoditytype.hpp|NullCommodityType::NullCommodityType();+|v|ql/experimental/commodities/commoditytype.hpp|bool operator==(const CommodityType & c1, const CommodityType & c2);+|v|ql/experimental/commodities/commoditytype.hpp|bool operator!=(const CommodityType & c1, const CommodityType & c2);+| |ql/experimental/commodities/commodityunitcost.hpp|CommodityUnitCost::CommodityUnitCost();+| |ql/experimental/commodities/commodityunitcost.hpp|CommodityUnitCost::CommodityUnitCost(Money amount, UnitOfMeasure unitOfMeasure);+|x|ql/experimental/commodities/commodityunitcost.hpp|const Money & CommodityUnitCost::amount() const;+|x|ql/experimental/commodities/commodityunitcost.hpp|const UnitOfMeasure & CommodityUnitCost::unitOfMeasure() const;+| |ql/experimental/commodities/commodityunitcost.hpp|std::ostream & operator<<(std::ostream & out, const CommodityUnitCost & unitCost);+|x|ql/experimental/commodities/dateinterval.hpp|std::ostream & DateInterval::operator<<(std::ostream &, const DateInterval &);+|x|ql/experimental/commodities/dateinterval.hpp|DateInterval::DateInterval();+| |ql/experimental/commodities/dateinterval.hpp|DateInterval::DateInterval(const Date & startDate, const Date & endDate);+|x|ql/experimental/commodities/dateinterval.hpp|const Date & DateInterval::startDate() const;+|x|ql/experimental/commodities/dateinterval.hpp|const Date & DateInterval::endDate() const;+|v|ql/experimental/commodities/dateinterval.hpp|bool DateInterval::isDateBetween(Date date, bool includeFirst = true, bool includeLast = true) const;+|v|ql/experimental/commodities/dateinterval.hpp|DateInterval DateInterval::intersection(const DateInterval & di) const;+|x|ql/experimental/commodities/dateinterval.hpp|bool DateInterval::operator==(const DateInterval & rhs) const;+|x|ql/experimental/commodities/dateinterval.hpp|bool DateInterval::operator!=(const DateInterval & rhs) const;+|v|ql/experimental/commodities/energybasisswap.hpp|EnergyBasisSwap::EnergyBasisSwap(const Calendar & calendar, ext::shared_ptr<CommodityIndex> spreadIndex, ext::shared_ptr<CommodityIndex> payIndex, ext::shared_ptr<CommodityIndex> receiveIndex, bool spreadToPayLeg, const Currency & payCurrency, const Currency & receiveCurrency, const PricingPeriods & pricingPeriods, CommodityUnitCost basis, const CommodityType & commodityType, const ext::shared_ptr<SecondaryCosts> & secondaryCosts, Handle<YieldTermStructure> payLegTermStructure, Handle<YieldTermStructure> receiveLegTermStructure, Handle<YieldTermStructure> discountTermStructure);+|x|ql/experimental/commodities/energybasisswap.hpp|const ext::shared_ptr<CommodityIndex> & EnergyBasisSwap::payIndex() const;+|x|ql/experimental/commodities/energybasisswap.hpp|const ext::shared_ptr<CommodityIndex> & EnergyBasisSwap::receiveIndex() const;+|x|ql/experimental/commodities/energybasisswap.hpp|const CommodityUnitCost & EnergyBasisSwap::basis() const;+|x|ql/experimental/commodities/energycommodity.hpp|EnergyDailyPosition::EnergyDailyPosition();+|x|ql/experimental/commodities/energycommodity.hpp|EnergyDailyPosition::EnergyDailyPosition(const Date & date, Real payLegPrice, Real receiveLegPrice, bool unrealized);+|x|ql/experimental/commodities/energycommodity.hpp|std::ostream & operator<<(std::ostream & out, const EnergyDailyPositions & dailyPositions);+|x|ql/experimental/commodities/energycommodity.hpp|EnergyCommodity::EnergyCommodity(CommodityType commodityType, const ext::shared_ptr<SecondaryCosts> & secondaryCosts);+|v|ql/experimental/commodities/energycommodity.hpp|Quantity EnergyCommodity::quantity() const;+|x|ql/experimental/commodities/energycommodity.hpp|const CommodityType & EnergyCommodity::commodityType() const;+|x|ql/experimental/commodities/energycommodity.hpp|void arguments::validate() const;+|x|ql/experimental/commodities/energycommodity.hpp|void results::reset();+|v|ql/experimental/commodities/energyfuture.hpp|EnergyFuture::EnergyFuture(Integer buySell, Quantity quantity, CommodityUnitCost tradePrice, ext::shared_ptr<CommodityIndex> index, const CommodityType & commodityType, const ext::shared_ptr<SecondaryCosts> & secondaryCosts);+|x|ql/experimental/commodities/energyfuture.hpp|const CommodityUnitCost & EnergyFuture::tradePrice() const;+|x|ql/experimental/commodities/energyfuture.hpp|ext::shared_ptr<CommodityIndex> EnergyFuture::index() const;+|x|ql/experimental/commodities/energyswap.hpp|EnergySwap::EnergySwap(Calendar calendar, Currency payCurrency, Currency receiveCurrency, PricingPeriods pricingPeriods, const CommodityType & commodityType, const ext::shared_ptr<SecondaryCosts> & secondaryCosts);+|x|ql/experimental/commodities/energyswap.hpp|const Calendar & EnergySwap::calendar() const;+|x|ql/experimental/commodities/energyswap.hpp|const Currency & EnergySwap::payCurrency() const;+|x|ql/experimental/commodities/energyswap.hpp|const Currency & EnergySwap::receiveCurrency() const;+|x|ql/experimental/commodities/energyswap.hpp|const PricingPeriods & EnergySwap::pricingPeriods() const;+|v|ql/experimental/commodities/energyswap.hpp|const EnergyDailyPositions & EnergySwap::dailyPositions() const;+|v|ql/experimental/commodities/energyswap.hpp|const CommodityCashFlows & EnergySwap::paymentCashFlows() const;+|v|ql/experimental/commodities/energyvanillaswap.hpp|EnergyVanillaSwap::EnergyVanillaSwap(bool payer, const Calendar & calendar, Money fixedPrice, UnitOfMeasure fixedPriceUnitOfMeasure, ext::shared_ptr<CommodityIndex> index, const Currency & payCurrency, const Currency & receiveCurrency, const PricingPeriods & pricingPeriods, const CommodityType & commodityType, const ext::shared_ptr<SecondaryCosts> & secondaryCosts, Handle<YieldTermStructure> payLegTermStructure, Handle<YieldTermStructure> receiveLegTermStructure, Handle<YieldTermStructure> discountTermStructure);+|x|ql/experimental/commodities/energyvanillaswap.hpp|Integer EnergyVanillaSwap::payReceive() const;+|x|ql/experimental/commodities/energyvanillaswap.hpp|const Money & EnergyVanillaSwap::fixedPrice() const;+|x|ql/experimental/commodities/energyvanillaswap.hpp|const UnitOfMeasure & EnergyVanillaSwap::fixedPriceUnitOfMeasure() const;+|x|ql/experimental/commodities/energyvanillaswap.hpp|const ext::shared_ptr<CommodityIndex> & EnergyVanillaSwap::index() const;+| |ql/experimental/commodities/exchangecontract.hpp|ExchangeContract::ExchangeContract();+| |ql/experimental/commodities/exchangecontract.hpp|ExchangeContract::ExchangeContract(std::string code, Date expirationDate, Date underlyingStartDate, Date underlyingEndDate);+|x|ql/experimental/commodities/exchangecontract.hpp|const std::string & ExchangeContract::code() const;+|x|ql/experimental/commodities/exchangecontract.hpp|const Date & ExchangeContract::expirationDate() const;+|x|ql/experimental/commodities/exchangecontract.hpp|const Date & ExchangeContract::underlyingStartDate() const;+|x|ql/experimental/commodities/exchangecontract.hpp|const Date & ExchangeContract::underlyingEndDate() const;+|x|ql/experimental/commodities/paymentterm.hpp|PaymentTerm::PaymentTerm();+|v|ql/experimental/commodities/paymentterm.hpp|PaymentTerm::PaymentTerm(const std::string & name, EventType eventType, Integer offsetDays, const Calendar & calendar);+|v|ql/experimental/commodities/paymentterm.hpp|const std::string & PaymentTerm::name() const;+|v|ql/experimental/commodities/paymentterm.hpp|EventType PaymentTerm::eventType() const;+|v|ql/experimental/commodities/paymentterm.hpp|Integer PaymentTerm::offsetDays() const;+|v|ql/experimental/commodities/paymentterm.hpp|const Calendar & PaymentTerm::calendar() const;+|v|ql/experimental/commodities/paymentterm.hpp|bool PaymentTerm::empty() const;+|v|ql/experimental/commodities/paymentterm.hpp|Date PaymentTerm::getPaymentDate(const Date & date) const;+|x|ql/experimental/commodities/paymentterm.hpp|Data::Data(std::string name, EventType eventType, Integer offsetDays, Calendar calendar);+|v|ql/experimental/commodities/paymentterm.hpp|bool operator==(const PaymentTerm &, const PaymentTerm &);+|v|ql/experimental/commodities/paymentterm.hpp|bool operator!=(const PaymentTerm &, const PaymentTerm &);+|x|ql/experimental/commodities/paymentterm.hpp|std::ostream & operator<<(std::ostream &, const PaymentTerm &);+|x|ql/experimental/commodities/paymentterm.hpp|Data(std::string name, PaymentTerm::EventType eventType, Integer offsetDays, Calendar calendar);+|v|ql/experimental/commodities/paymentterm.hpp|PaymentTerm::EventType eventType() const;+|v|ql/experimental/commodities/paymentterm.hpp|bool operator==(const PaymentTerm & c1, const PaymentTerm & c2);+|v|ql/experimental/commodities/paymentterm.hpp|bool operator!=(const PaymentTerm & c1, const PaymentTerm & c2);+|v|ql/experimental/commodities/petroleumunitsofmeasure.hpp|BarrelUnitOfMeasure::BarrelUnitOfMeasure();+|v|ql/experimental/commodities/petroleumunitsofmeasure.hpp|MTUnitOfMeasure::MTUnitOfMeasure();+|v|ql/experimental/commodities/petroleumunitsofmeasure.hpp|MBUnitOfMeasure::MBUnitOfMeasure();+|v|ql/experimental/commodities/petroleumunitsofmeasure.hpp|GallonUnitOfMeasure::GallonUnitOfMeasure();+|v|ql/experimental/commodities/petroleumunitsofmeasure.hpp|LitreUnitOfMeasure::LitreUnitOfMeasure();+|v|ql/experimental/commodities/petroleumunitsofmeasure.hpp|KilolitreUnitOfMeasure::KilolitreUnitOfMeasure();+|v|ql/experimental/commodities/petroleumunitsofmeasure.hpp|TokyoKilolitreUnitOfMeasure::TokyoKilolitreUnitOfMeasure();+|v|ql/experimental/commodities/pricingperiod.hpp|PricingPeriod::PricingPeriod(const Date & startDate, const Date & endDate, const Date & paymentDate, Quantity quantity);+|x|ql/experimental/commodities/pricingperiod.hpp|const Date & PricingPeriod::paymentDate() const;+|x|ql/experimental/commodities/pricingperiod.hpp|const Quantity & PricingPeriod::quantity() const;+|x|ql/experimental/commodities/quantity.hpp|Quantity::Quantity();+| |ql/experimental/commodities/quantity.hpp|Quantity::Quantity(CommodityType commodityType, UnitOfMeasure unitOfMeasure, Real amount);+|x|ql/experimental/commodities/quantity.hpp|const CommodityType & Quantity::commodityType() const;+|x|ql/experimental/commodities/quantity.hpp|const UnitOfMeasure & Quantity::unitOfMeasure() const;+|x|ql/experimental/commodities/quantity.hpp|Real Quantity::amount() const;+|v|ql/experimental/commodities/quantity.hpp|Quantity Quantity::rounded() const;+|x|ql/experimental/commodities/quantity.hpp|Quantity Quantity::operator+() const;+|x|ql/experimental/commodities/quantity.hpp|Quantity Quantity::operator-() const;+|x|ql/experimental/commodities/quantity.hpp|Quantity & Quantity::operator+=(const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|Quantity & Quantity::operator-=(const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|Quantity & Quantity::operator*=(Real);+|x|ql/experimental/commodities/quantity.hpp|Quantity & Quantity::operator/=(Real);+|x|ql/experimental/commodities/quantity.hpp|std::ostream & Quantity::operator<<(std::ostream &, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator+(const Quantity &, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator-(const Quantity &, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator*(const Quantity &, Real);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator*(Real, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator/(const Quantity &, Real);+|x|ql/experimental/commodities/quantity.hpp|Real operator/(const Quantity &, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|bool operator==(const Quantity &, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|bool operator!=(const Quantity &, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|bool operator<(const Quantity &, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|bool operator<=(const Quantity &, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|bool operator>(const Quantity &, const Quantity &);+|x|ql/experimental/commodities/quantity.hpp|bool operator>=(const Quantity &, const Quantity &);+|v|ql/experimental/commodities/quantity.hpp|bool close(const Quantity &, const Quantity &, Size n = 42);+|v|ql/experimental/commodities/quantity.hpp|bool close_enough(const Quantity &, const Quantity &, Size n = 42);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator+() const;+|x|ql/experimental/commodities/quantity.hpp|Quantity operator-() const;+|x|ql/experimental/commodities/quantity.hpp|Quantity & operator*=(Real x);+|x|ql/experimental/commodities/quantity.hpp|Quantity & operator/=(Real x);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator+(const Quantity & m1, const Quantity & m2);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator-(const Quantity & m1, const Quantity & m2);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator*(const Quantity & m, Real x);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator*(Real x, const Quantity & m);+|x|ql/experimental/commodities/quantity.hpp|Quantity operator/(const Quantity & m, Real x);+|x|ql/experimental/commodities/quantity.hpp|bool operator!=(const Quantity & m1, const Quantity & m2);+|x|ql/experimental/commodities/quantity.hpp|bool operator>(const Quantity & m1, const Quantity & m2);+|x|ql/experimental/commodities/quantity.hpp|bool operator>=(const Quantity & m1, const Quantity & m2);+|x|ql/experimental/commodities/unitofmeasure.hpp|UnitOfMeasure::UnitOfMeasure();+|v|ql/experimental/commodities/unitofmeasure.hpp|UnitOfMeasure::UnitOfMeasure(const std::string & name, const std::string & code, Type unitType);+|v|ql/experimental/commodities/unitofmeasure.hpp|const std::string & UnitOfMeasure::name() const;+|v|ql/experimental/commodities/unitofmeasure.hpp|const std::string & UnitOfMeasure::code() const;+|v|ql/experimental/commodities/unitofmeasure.hpp|Type UnitOfMeasure::unitType() const;+|v|ql/experimental/commodities/unitofmeasure.hpp|bool UnitOfMeasure::empty() const;+|x|ql/experimental/commodities/unitofmeasure.hpp|const Rounding & UnitOfMeasure::rounding() const;+|x|ql/experimental/commodities/unitofmeasure.hpp|const UnitOfMeasure & UnitOfMeasure::triangulationUnitOfMeasure() const;+|x|ql/experimental/commodities/unitofmeasure.hpp|Data::Data(std::string name, std::string code, UnitOfMeasure::Type unitType, UnitOfMeasure triangulationUnitOfMeasure = UnitOfMeasure(), const Rounding & rounding = Rounding(0));+|v|ql/experimental/commodities/unitofmeasure.hpp|bool operator==(const UnitOfMeasure &, const UnitOfMeasure &);+|v|ql/experimental/commodities/unitofmeasure.hpp|bool operator!=(const UnitOfMeasure &, const UnitOfMeasure &);+|x|ql/experimental/commodities/unitofmeasure.hpp|std::ostream & operator<<(std::ostream &, const UnitOfMeasure &);+|v|ql/experimental/commodities/unitofmeasure.hpp|UnitOfMeasure::Type unitType() const;+|v|ql/experimental/commodities/unitofmeasure.hpp|bool operator==(const UnitOfMeasure & c1, const UnitOfMeasure & c2);+|v|ql/experimental/commodities/unitofmeasure.hpp|bool operator!=(const UnitOfMeasure & c1, const UnitOfMeasure & c2);+|v|ql/experimental/commodities/unitofmeasure.hpp|LotUnitOfMeasure::LotUnitOfMeasure();+|x|ql/experimental/commodities/unitofmeasureconversion.hpp|UnitOfMeasureConversion::UnitOfMeasureConversion();+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|UnitOfMeasureConversion::UnitOfMeasureConversion(const CommodityType & commodityType, const UnitOfMeasure & source, const UnitOfMeasure & target, Real conversionFactor);+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|const UnitOfMeasure & UnitOfMeasureConversion::source() const;+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|const UnitOfMeasure & UnitOfMeasureConversion::target() const;+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|const CommodityType & UnitOfMeasureConversion::commodityType() const;+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|Type UnitOfMeasureConversion::type() const;+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|Real UnitOfMeasureConversion::conversionFactor() const;+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|const std::string & UnitOfMeasureConversion::code() const;+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|Quantity UnitOfMeasureConversion::convert(const Quantity & quantity) const;+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|static UnitOfMeasureConversion UnitOfMeasureConversion::chain(const UnitOfMeasureConversion & r1, const UnitOfMeasureConversion & r2);+|x|ql/experimental/commodities/unitofmeasureconversion.hpp|Data::Data(const CommodityType & commodityType, const UnitOfMeasure & source, const UnitOfMeasure & target, Real conversionFactor, Type type);+|x|ql/experimental/commodities/unitofmeasureconversion.hpp|Data::Data(const UnitOfMeasureConversion & r1, const UnitOfMeasureConversion & r2);+|v|ql/experimental/commodities/unitofmeasureconversion.hpp|UnitOfMeasureConversion::Type type() const;+|v|ql/experimental/commodities/unitofmeasureconversionmanager.hpp|UnitOfMeasureConversion UnitOfMeasureConversionManager::lookup(const CommodityType & commodityType, const UnitOfMeasure &, const UnitOfMeasure &, UnitOfMeasureConversion::Type type = UnitOfMeasureConversion::Derived) const;+|v|ql/experimental/commodities/unitofmeasureconversionmanager.hpp|void UnitOfMeasureConversionManager::add(const UnitOfMeasureConversion &);+|v|ql/experimental/commodities/unitofmeasureconversionmanager.hpp|void UnitOfMeasureConversionManager::clear();+|v|ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadCoupon::CmsSpreadCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<SwapSpreadIndex> & index, Real gearing = 1.0, Spread spread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter(), bool isInArrears = false, const Date & exCouponDate = Date(), BusinessDayConvention fixingConvention = Preceding);+|x|ql/experimental/coupons/cmsspreadcoupon.hpp|const ext::shared_ptr<SwapSpreadIndex> & CmsSpreadCoupon::swapSpreadIndex() const;+|x|ql/experimental/coupons/cmsspreadcoupon.hpp|void CmsSpreadCoupon::accept(AcyclicVisitor &);+|v|ql/experimental/coupons/cmsspreadcoupon.hpp|CappedFlooredCmsSpreadCoupon::CappedFlooredCmsSpreadCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const ext::shared_ptr<SwapSpreadIndex> & index, Real gearing = 1.0, Spread spread = 0.0, const Rate cap = Null<Rate>(), const Rate floor = Null<Rate>(), const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter(), bool isInArrears = false, const Date & exCouponDate = Date(), BusinessDayConvention fixingConvention = Preceding);+|v|ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg::CmsSpreadLeg(Schedule schedule, ext::shared_ptr<SwapSpreadIndex> swapSpreadIndex);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withNotionals(Real notional);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withNotionals(const std::vector<Real> & notionals);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withPaymentDayCounter(const DayCounter &);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withFixingDays(Natural fixingDays);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withFixingDays(const std::vector<Natural> & fixingDays);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withGearings(Real gearing);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withGearings(const std::vector<Real> & gearings);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withSpreads(Spread spread);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withSpreads(const std::vector<Spread> & spreads);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withCaps(Rate cap);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withCaps(const std::vector<Rate> & caps);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withFloors(Rate floor);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withFloors(const std::vector<Rate> & floors);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::inArrears(bool flag = true);+| |ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadLeg & CmsSpreadLeg::withZeroPayments(bool flag = true);+|x|ql/experimental/coupons/cmsspreadcoupon.hpp|CmsSpreadCouponPricer::CmsSpreadCouponPricer(Handle<Quote> correlation = Handle<Quote>());+|x|ql/experimental/coupons/cmsspreadcoupon.hpp|void CmsSpreadCouponPricer::setCorrelation(const Handle<Quote> & correlation = Handle<Quote>());+|v|ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadCoupon::DigitalCmsSpreadCoupon(const ext::shared_ptr<CmsSpreadCoupon> & underlying, Rate callStrike = Null<Rate>(), Position::Type callPosition = Position::Long, bool isCallATMIncluded = false, Rate callDigitalPayoff = Null<Rate>(), Rate putStrike = Null<Rate>(), Position::Type putPosition = Position::Long, bool isPutATMIncluded = false, Rate putDigitalPayoff = Null<Rate>(), const ext::shared_ptr<DigitalReplication> & replication = { }, bool nakedOption = false);+|v|ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg::DigitalCmsSpreadLeg(Schedule schedule, ext::shared_ptr<SwapSpreadIndex> index);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withNotionals(Real notional);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withNotionals(const std::vector<Real> & notionals);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withPaymentDayCounter(const DayCounter &);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withPaymentAdjustment(BusinessDayConvention);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withFixingDays(Natural fixingDays);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withFixingDays(const std::vector<Natural> & fixingDays);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withGearings(Real gearing);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withGearings(const std::vector<Real> & gearings);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withSpreads(Spread spread);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withSpreads(const std::vector<Spread> & spreads);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::inArrears(bool flag = true);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withCallStrikes(Rate strike);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withCallStrikes(const std::vector<Rate> & strikes);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withLongCallOption(Position::Type);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withCallATM(bool flag = true);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withCallPayoffs(Rate payoff);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withCallPayoffs(const std::vector<Rate> & payoffs);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withPutStrikes(Rate strike);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withPutStrikes(const std::vector<Rate> & strikes);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withLongPutOption(Position::Type);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withPutATM(bool flag = true);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withPutPayoffs(Rate payoff);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withPutPayoffs(const std::vector<Rate> & payoffs);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withReplication(const ext::shared_ptr<DigitalReplication> &);+| |ql/experimental/coupons/digitalcmsspreadcoupon.hpp|DigitalCmsSpreadLeg & DigitalCmsSpreadLeg::withNakedOption(bool nakedOption = true);+|v|ql/experimental/coupons/lognormalcmsspreadpricer.hpp|LognormalCmsSpreadPricer::LognormalCmsSpreadPricer(const ext::shared_ptr<CmsCouponPricer> & cmsPricer, const Handle<Quote> & correlation, Handle<YieldTermStructure> couponDiscountCurve = Handle<YieldTermStructure>(), Size IntegrationPoints = 16, const std::optional<VolatilityType> & volatilityType = std::nullopt, Real shift1 = Null<Real>(), Real shift2 = Null<Real>());+| |ql/experimental/coupons/proxyibor.hpp|ProxyIbor::ProxyIbor(const std::string & familyName, const Period & tenor, Natural settlementDays, const Currency & currency, const Calendar & fixingCalendar, BusinessDayConvention convention, bool endOfMonth, const DayCounter & dayCounter, Handle<Quote> gearing, ext::shared_ptr<IborIndex> iborIndex, Handle<Quote> spread);+| |ql/experimental/coupons/proxyibor.hpp|Rate forecastFixing(const Date & fixingDate) const;+|v|ql/experimental/coupons/quantocouponpricer.hpp|BlackIborQuantoCouponPricer::BlackIborQuantoCouponPricer(Handle<BlackVolTermStructure> fxRateBlackVolatility, Handle<Quote> underlyingFxCorrelation, const Handle<OptionletVolatilityStructure> & capletVolatility);+|v|ql/experimental/coupons/strippedcapflooredcoupon.hpp|StrippedCappedFlooredCoupon::StrippedCappedFlooredCoupon(const ext::shared_ptr<CappedFlooredCoupon> & underlying);+|v|ql/experimental/coupons/strippedcapflooredcoupon.hpp|Rate StrippedCappedFlooredCoupon::cap() const;+|v|ql/experimental/coupons/strippedcapflooredcoupon.hpp|Rate StrippedCappedFlooredCoupon::floor() const;+|v|ql/experimental/coupons/strippedcapflooredcoupon.hpp|Rate StrippedCappedFlooredCoupon::effectiveCap() const;+|v|ql/experimental/coupons/strippedcapflooredcoupon.hpp|Rate StrippedCappedFlooredCoupon::effectiveFloor() const;+|v|ql/experimental/coupons/strippedcapflooredcoupon.hpp|bool StrippedCappedFlooredCoupon::isCap() const;+|v|ql/experimental/coupons/strippedcapflooredcoupon.hpp|bool StrippedCappedFlooredCoupon::isFloor() const;+|v|ql/experimental/coupons/strippedcapflooredcoupon.hpp|bool StrippedCappedFlooredCoupon::isCollar() const;+|x|ql/experimental/coupons/strippedcapflooredcoupon.hpp|ext::shared_ptr<CappedFlooredCoupon> StrippedCappedFlooredCoupon::underlying();+| |ql/experimental/coupons/strippedcapflooredcoupon.hpp|StrippedCappedFlooredCouponLeg::StrippedCappedFlooredCouponLeg(Leg underlyingLeg);+|v|ql/experimental/coupons/swapspreadindex.hpp|SwapSpreadIndex::SwapSpreadIndex(const std::string & familyName, const ext::shared_ptr<SwapIndex> & swapIndex1, ext::shared_ptr<SwapIndex> swapIndex2, Real gearing1 = 1.0, Real gearing2 = - 1.0);+|x|ql/experimental/coupons/swapspreadindex.hpp|ext::shared_ptr<SwapIndex> SwapSpreadIndex::swapIndex1();+|x|ql/experimental/coupons/swapspreadindex.hpp|ext::shared_ptr<SwapIndex> SwapSpreadIndex::swapIndex2();+|x|ql/experimental/coupons/swapspreadindex.hpp|Real SwapSpreadIndex::gearing1() const;+|x|ql/experimental/coupons/swapspreadindex.hpp|Real SwapSpreadIndex::gearing2() const;+|x|ql/experimental/coupons/swapspreadindex.hpp|Rate forecastFixing(const Date & fixingDate) const;+|x|ql/experimental/coupons/swapspreadindex.hpp|Rate pastFixing(const Date & fixingDate) const;+| |ql/experimental/credit/basecorrelationlossmodel.hpp|BaseCorrelationLossModel::BaseCorrelationLossModel<BaseModel_T, Corr2DInt_T>(const Handle<BaseCorrelationTermStructure<Corr2DInt_T>> & correlTS, std::vector<Real> recoveries, const initTraits & traits = initTraits());+| |ql/experimental/credit/basecorrelationlossmodel.hpp|Real expectedTrancheLoss(const Date & d) const;+| |ql/experimental/credit/basecorrelationlossmodel.hpp|void setupModels() const;+| |ql/experimental/credit/basecorrelationstructure.hpp|BaseCorrelationTermStructure::BaseCorrelationTermStructure<Interpolator2D_T>(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, const std::vector<Period> & tenors, const std::vector<Real> & lossLevel, const std::vector<std::vector<Handle<Quote>>> & correls, const DayCounter & dc = DayCounter());+| |ql/experimental/credit/basecorrelationstructure.hpp|Real BaseCorrelationTermStructure::ImplicitCorrelation(Real, Real);+| |ql/experimental/credit/basecorrelationstructure.hpp|void BaseCorrelationTermStructure::checkTrancheTenors() const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void BaseCorrelationTermStructure::checkLosses() const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void BaseCorrelationTermStructure::initializeTrancheTimes() const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void BaseCorrelationTermStructure::checkInputs(Size volRows, Size volsColumns) const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void BaseCorrelationTermStructure::registerWithMarketData();+| |ql/experimental/credit/basecorrelationstructure.hpp|void BaseCorrelationTermStructure::updateMatrix() const;+| |ql/experimental/credit/basecorrelationstructure.hpp|Real BaseCorrelationTermStructure::correlation(const Date & d, Real lossLevel, bool extrapolate = false) const;+| |ql/experimental/credit/basecorrelationstructure.hpp|Real BaseCorrelationTermStructure::correlation(Time t, Real lossLevel, bool extrapolate = false) const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void update();+| |ql/experimental/credit/basket.hpp|Basket::Basket();+|v|ql/experimental/credit/basket.hpp|Basket::Basket(const Date & refDate, const std::vector<std::string> & names, std::vector<Real> notionals, ext::shared_ptr<Pool> pool, Real attachmentRatio = 0.0, Real detachmentRatio = 1.0, ext::shared_ptr<Claim> claim = ext::shared_ptr<Claim>(new FaceValueClaim()));+| |ql/experimental/credit/basket.hpp|void Basket::computeBasket() const;+| |ql/experimental/credit/basket.hpp|Size Basket::size() const;+| |ql/experimental/credit/basket.hpp|const std::vector<std::string> & Basket::names() const;+|x|ql/experimental/credit/basket.hpp|const std::vector<Real> & Basket::notionals() const;+|v|ql/experimental/credit/basket.hpp|Real Basket::notional() const;+| |ql/experimental/credit/basket.hpp|Real Basket::exposure(const std::string & name, const Date & = Date()) const;+|x|ql/experimental/credit/basket.hpp|const ext::shared_ptr<Pool> & Basket::pool() const;+| |ql/experimental/credit/basket.hpp|std::vector<DefaultProbKey> Basket::defaultKeys() const;+|x|ql/experimental/credit/basket.hpp|const Date & Basket::refDate() const;+|x|ql/experimental/credit/basket.hpp|Real Basket::attachmentRatio() const;+|x|ql/experimental/credit/basket.hpp|Real Basket::detachmentRatio() const;+| |ql/experimental/credit/basket.hpp|Real Basket::basketNotional() const;+| |ql/experimental/credit/basket.hpp|Real Basket::trancheNotional() const;+| |ql/experimental/credit/basket.hpp|Real Basket::attachmentAmount() const;+| |ql/experimental/credit/basket.hpp|Real Basket::detachmentAmount() const;+|x|ql/experimental/credit/basket.hpp|ext::shared_ptr<Claim> Basket::claim() const;+| |ql/experimental/credit/basket.hpp|std::vector<Probability> Basket::probabilities(const Date & d) const;+| |ql/experimental/credit/basket.hpp|Real Basket::settledLoss() const;+| |ql/experimental/credit/basket.hpp|Real Basket::settledLoss(const Date &) const;+| |ql/experimental/credit/basket.hpp|Real Basket::cumulatedLoss() const;+| |ql/experimental/credit/basket.hpp|Real Basket::cumulatedLoss(const Date &) const;+| |ql/experimental/credit/basket.hpp|Real Basket::remainingNotional() const;+|v|ql/experimental/credit/basket.hpp|Real Basket::remainingNotional(const Date &) const;+| |ql/experimental/credit/basket.hpp|const std::vector<Real> & Basket::remainingNotionals() const;+| |ql/experimental/credit/basket.hpp|std::vector<Real> Basket::remainingNotionals(const Date &) const;+| |ql/experimental/credit/basket.hpp|const std::vector<std::string> & Basket::remainingNames() const;+| |ql/experimental/credit/basket.hpp|std::vector<std::string> Basket::remainingNames(const Date &) const;+| |ql/experimental/credit/basket.hpp|const std::vector<DefaultProbKey> & Basket::remainingDefaultKeys() const;+| |ql/experimental/credit/basket.hpp|std::vector<DefaultProbKey> Basket::remainingDefaultKeys(const Date &) const;+| |ql/experimental/credit/basket.hpp|Size Basket::remainingSize() const;+| |ql/experimental/credit/basket.hpp|Size Basket::remainingSize(const Date &) const;+| |ql/experimental/credit/basket.hpp|std::vector<Probability> Basket::remainingProbabilities(const Date & d) const;+| |ql/experimental/credit/basket.hpp|Real Basket::remainingAttachmentAmount() const;+| |ql/experimental/credit/basket.hpp|Real Basket::remainingAttachmentAmount(const Date & endDate) const;+| |ql/experimental/credit/basket.hpp|Real Basket::remainingDetachmentAmount() const;+| |ql/experimental/credit/basket.hpp|Real Basket::remainingDetachmentAmount(const Date & endDate) const;+| |ql/experimental/credit/basket.hpp|Real Basket::remainingTrancheNotional() const;+| |ql/experimental/credit/basket.hpp|Real Basket::remainingTrancheNotional(const Date & endDate) const;+| |ql/experimental/credit/basket.hpp|const std::vector<Size> & Basket::liveList() const;+| |ql/experimental/credit/basket.hpp|std::vector<Size> Basket::liveList(const Date &) const;+|u|ql/experimental/credit/basket.hpp|void Basket::setLossModel(const ext::shared_ptr<DefaultLossModel> & lossModel);+|v|ql/experimental/credit/basket.hpp|Real Basket::expectedTrancheLoss(const Date & d) const;+|v|ql/experimental/credit/basket.hpp|Probability Basket::probOverLoss(const Date & d, Real lossFraction) const;+|v|ql/experimental/credit/basket.hpp|Real Basket::percentile(const Date & d, Probability prob) const;+|v|ql/experimental/credit/basket.hpp|Real Basket::expectedShortfall(const Date & d, Probability prob) const;+| |ql/experimental/credit/basket.hpp|std::vector<Real> Basket::splitVaRLevel(const Date & date, Real loss) const;+| |ql/experimental/credit/basket.hpp|std::map<Real, Probability> Basket::lossDistribution(const Date &) const;+| |ql/experimental/credit/basket.hpp|Real Basket::densityTrancheLoss(const Date & d, Real lossFraction) const;+|v|ql/experimental/credit/basket.hpp|Real Basket::defaultCorrelation(const Date & d, Size iName, Size jName) const;+| |ql/experimental/credit/basket.hpp|std::vector<Probability> Basket::probsBeingNthEvent(Size n, const Date & d) const;+|v|ql/experimental/credit/basket.hpp|Probability Basket::probAtLeastNEvents(Size n, const Date & d) const;+|v|ql/experimental/credit/basket.hpp|Real Basket::recoveryRate(const Date & d, Size iName) const;+| |ql/experimental/credit/binomiallossmodel.hpp|BinomialLossModel::BinomialLossModel<LLM>(ext::shared_ptr<LLM> copula);+| |ql/experimental/credit/binomiallossmodel.hpp|std::vector<Real> lossProbability(const Date & date, const std::vector<Real> & bsktNots, const std::vector<Real> & uncondDefProbInv, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/binomiallossmodel.hpp|Real averageLoss(const Date & d, const std::vector<Real> & reminingNots, const std::vector<Real> & mktFctrs) const;+| |ql/experimental/credit/binomiallossmodel.hpp|std::vector<Real> lossPoints(const Date & d) const;+| |ql/experimental/credit/binomiallossmodel.hpp|Real condTrancheLoss(const Date & d, const std::vector<Real> & lossVals, const std::vector<Real> & bsktNots, const std::vector<Real> & uncondDefProbsInv, const std::vector<Real> & mkf) const;+| |ql/experimental/credit/binomiallossmodel.hpp|Real expectedTrancheLoss(const Date & d) const;+| |ql/experimental/credit/binomiallossmodel.hpp|std::map<Real, Probability> lossDistribution(const Date & d) const;+| |ql/experimental/credit/binomiallossmodel.hpp|Real percentile(const Date & d, Real perc) const;+| |ql/experimental/credit/binomiallossmodel.hpp|Real expectedShortfall(const Date & d, Real perctl) const;+|v|ql/experimental/credit/blackcdsoptionengine.hpp|BlackCdsOptionEngine::BlackCdsOptionEngine(Handle<DefaultProbabilityTermStructure>, Real recoveryRate, Handle<YieldTermStructure> termStructure, Handle<Quote> vol);+|x|ql/experimental/credit/blackcdsoptionengine.hpp|void BlackCdsOptionEngine::calculate() const;+|x|ql/experimental/credit/blackcdsoptionengine.hpp|Handle<YieldTermStructure> BlackCdsOptionEngine::termStructure();+|x|ql/experimental/credit/blackcdsoptionengine.hpp|Handle<Quote> BlackCdsOptionEngine::volatility();+| |ql/experimental/credit/cdo.hpp|CDO::CDO(Real attachment, Real detachment, std::vector<Real> nominals, const std::vector<Handle<DefaultProbabilityTermStructure>> & basket, Handle<OneFactorCopula> copula, bool protectionSeller, Schedule premiumSchedule, Rate premiumRate, DayCounter dayCounter, Rate recoveryRate, Rate upfrontPremiumRate, Handle<YieldTermStructure> yieldTS, Size nBuckets, const Period & integrationStep = Period(10, Years));+| |ql/experimental/credit/cdo.hpp|Real CDO::nominal() const;+| |ql/experimental/credit/cdo.hpp|Real CDO::lgd() const;+|x|ql/experimental/credit/cdo.hpp|Real CDO::attachment() const;+|x|ql/experimental/credit/cdo.hpp|Real CDO::detachment() const;+|x|ql/experimental/credit/cdo.hpp|std::vector<Real> CDO::nominals();+| |ql/experimental/credit/cdo.hpp|Size CDO::size();+| |ql/experimental/credit/cdo.hpp|Rate CDO::fairPremium() const;+| |ql/experimental/credit/cdo.hpp|Rate CDO::premiumValue() const;+| |ql/experimental/credit/cdo.hpp|Rate CDO::protectionValue() const;+| |ql/experimental/credit/cdo.hpp|Size CDO::error() const;+|v|ql/experimental/credit/cdsoption.hpp|CdsOption::CdsOption(const ext::shared_ptr<CreditDefaultSwap> & swap, const ext::shared_ptr<Exercise> & exercise, bool knocksOut = true);+|v|ql/experimental/credit/cdsoption.hpp|const ext::shared_ptr<CreditDefaultSwap> & CdsOption::underlyingSwap() const;+|v|ql/experimental/credit/cdsoption.hpp|Rate CdsOption::atmRate() const;+|v|ql/experimental/credit/cdsoption.hpp|Real CdsOption::riskyAnnuity() const;+|v|ql/experimental/credit/cdsoption.hpp|Volatility CdsOption::impliedVolatility(Real price, const Handle<YieldTermStructure> & termStructure, const Handle<DefaultProbabilityTermStructure> &, Real recoveryRate, Real accuracy = 1.e-4, Size maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0) const;+| |ql/experimental/credit/cdsoption.hpp|arguments::arguments();+| |ql/experimental/credit/cdsoption.hpp|void arguments::validate() const;+| |ql/experimental/credit/cdsoption.hpp|void results::reset();+| |ql/experimental/credit/constantlosslatentmodel.hpp|ConstantLossLatentmodel::ConstantLossLatentmodel<copulaPolicy>(const std::vector<std::vector<Real>> & factorWeights, const std::vector<Real> & recoveries, LatentModelIntegrationType::LatentModelIntegrationType integralType, const initTraits & ini = initTraits());+| |ql/experimental/credit/constantlosslatentmodel.hpp|ConstantLossLatentmodel::ConstantLossLatentmodel<copulaPolicy>(const Handle<Quote> & mktCorrel, const std::vector<Real> & recoveries, LatentModelIntegrationType::LatentModelIntegrationType integralType, Size nVariables, const initTraits & ini = initTraits());+| |ql/experimental/credit/constantlosslatentmodel.hpp|Real ConstantLossLatentmodel::conditionalRecovery(const Date & d, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/constantlosslatentmodel.hpp|Real ConstantLossLatentmodel::conditionalRecovery(Probability uncondDefP, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/constantlosslatentmodel.hpp|Real ConstantLossLatentmodel::conditionalRecoveryInvP(Real invUncondDefP, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/constantlosslatentmodel.hpp|Real ConstantLossLatentmodel::conditionalRecovery(Real latentVarSample, Size iName, const Date & d) const;+|x|ql/experimental/credit/constantlosslatentmodel.hpp|const std::vector<Real> & ConstantLossLatentmodel::recoveries() const;+| |ql/experimental/credit/constantlosslatentmodel.hpp|Real ConstantLossLatentmodel::expectedRecovery(const Date & d, Size iName, const DefaultProbKey & defKeys) const;+| |ql/experimental/credit/constantlosslatentmodel.hpp|ConstantLossModel::ConstantLossModel<copulaPolicy>(const std::vector<std::vector<Real>> & factorWeights, const std::vector<Real> & recoveries, LatentModelIntegrationType::LatentModelIntegrationType integralType, const typename copulaPolicy::initTraits & ini = copulaPolicy::initTraits());+|v|ql/experimental/credit/constantlosslatentmodel.hpp|ConstantLossModel::ConstantLossModel<copulaPolicy>(const Handle<Quote> & mktCorrel, const std::vector<Real> & recoveries, LatentModelIntegrationType::LatentModelIntegrationType integralType, Size nVariables, const typename copulaPolicy::initTraits & ini = copulaPolicy::initTraits());+| |ql/experimental/credit/correlationstructure.hpp|CorrelationTermStructure::CorrelationTermStructure(const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/experimental/credit/correlationstructure.hpp|CorrelationTermStructure::CorrelationTermStructure(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/experimental/credit/correlationstructure.hpp|CorrelationTermStructure::CorrelationTermStructure(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+|x|ql/experimental/credit/correlationstructure.hpp|BusinessDayConvention CorrelationTermStructure::businessDayConvention() const;+| |ql/experimental/credit/correlationstructure.hpp|Date CorrelationTermStructure::dateFromTenor(const Period &) const;+| |ql/experimental/credit/correlationstructure.hpp|Size CorrelationTermStructure::correlationSize() const;+| |ql/experimental/credit/correlationstructure.hpp|Date dateFromTenor(const Period & p) const;+| |ql/experimental/credit/defaultevent.hpp|Real DefaultSettlement::recoveryRate(Seniority sen) const;+| |ql/experimental/credit/defaultevent.hpp|DefaultEvent::DefaultEvent(const Date & creditEventDate, const DefaultType & atomicEvType, Currency curr, Seniority bondsSen, const Date & settleDate = Date(), const std::map<Seniority, Real> & recoveryRates = rate_map());+| |ql/experimental/credit/defaultevent.hpp|DefaultEvent::DefaultEvent(const Date & creditEventDate, const DefaultType & atomicEvType, Currency curr, Seniority bondsSen, const Date & settleDate, Real recoveryRate);+| |ql/experimental/credit/defaultevent.hpp|bool DefaultEvent::isRestructuring() const;+| |ql/experimental/credit/defaultevent.hpp|bool DefaultEvent::isDefault() const;+| |ql/experimental/credit/defaultevent.hpp|bool DefaultEvent::hasSettled() const;+| |ql/experimental/credit/defaultevent.hpp|const DefaultSettlement & DefaultEvent::settlement() const;+|x|ql/experimental/credit/defaultevent.hpp|const DefaultType & DefaultEvent::defaultType() const;+|x|ql/experimental/credit/defaultevent.hpp|const Currency & DefaultEvent::currency() const;+|x|ql/experimental/credit/defaultevent.hpp|Seniority DefaultEvent::eventSeniority() const;+| |ql/experimental/credit/defaultevent.hpp|Real DefaultEvent::recoveryRate(Seniority seniority) const;+| |ql/experimental/credit/defaultevent.hpp|bool DefaultEvent::matchesEventType(const ext::shared_ptr<DefaultType> & contractEvType) const;+| |ql/experimental/credit/defaultevent.hpp|bool DefaultEvent::matchesDefaultKey(const DefaultProbKey & contractKey) const;+| |ql/experimental/credit/defaultevent.hpp|bool operator==(const DefaultEvent & lhs, const DefaultEvent & rhs);+| |ql/experimental/credit/defaultevent.hpp|bool operator!=(const DefaultEvent & lhs, const DefaultEvent & rhs);+| |ql/experimental/credit/defaultevent.hpp|bool earlier_than::operator()(const DefaultEvent & e1, const DefaultEvent & e2) const;+| |ql/experimental/credit/defaultevent.hpp|FailureToPayEvent::FailureToPayEvent(const Date & creditEventDate, const Currency & curr, Seniority bondsSen, Real defaultedAmount, const Date & settleDate, const std::map<Seniority, Real> & recoveryRates);+| |ql/experimental/credit/defaultevent.hpp|FailureToPayEvent::FailureToPayEvent(const Date & creditEventDate, const Currency & curr, Seniority bondsSen, Real defaultedAmount, const Date & settleDate, Real recoveryRates);+|x|ql/experimental/credit/defaultevent.hpp|Real FailureToPayEvent::amountDefaulted() const;+| |ql/experimental/credit/defaultevent.hpp|BankruptcyEvent::BankruptcyEvent(const Date & creditEventDate, const Currency & curr, Seniority bondsSen, const Date & settleDate, const std::map<Seniority, Real> & recoveryRates);+| |ql/experimental/credit/defaultevent.hpp|BankruptcyEvent::BankruptcyEvent(const Date & creditEventDate, const Currency & curr, Seniority bondsSen, const Date & settleDate, Real recoveryRates);+| |ql/experimental/credit/defaultprobabilitykey.hpp|DefaultProbKey::DefaultProbKey();+| |ql/experimental/credit/defaultprobabilitykey.hpp|DefaultProbKey::DefaultProbKey(std::vector<ext::shared_ptr<DefaultType>> eventTypes, Currency cur, Seniority sen);+|x|ql/experimental/credit/defaultprobabilitykey.hpp|const Currency & DefaultProbKey::currency() const;+|x|ql/experimental/credit/defaultprobabilitykey.hpp|Seniority DefaultProbKey::seniority() const;+|x|ql/experimental/credit/defaultprobabilitykey.hpp|const std::vector<ext::shared_ptr<DefaultType>> & DefaultProbKey::eventTypes() const;+| |ql/experimental/credit/defaultprobabilitykey.hpp|Size DefaultProbKey::size() const;+| |ql/experimental/credit/defaultprobabilitykey.hpp|bool operator==(const DefaultProbKey & lhs, const DefaultProbKey & rhs);+|v|ql/experimental/credit/defaultprobabilitykey.hpp|NorthAmericaCorpDefaultKey::NorthAmericaCorpDefaultKey(const Currency & currency, Seniority sen, Period graceFailureToPay = Period(30, Days), Real amountFailure = 1.e6, Restructuring::Type resType = Restructuring::CR);+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|DefaultLatentModel::DefaultLatentModel<copulaPolicy>(const std::vector<std::vector<Real>> & factorWeights, LatentModelIntegrationType::LatentModelIntegrationType integralType, const initTraits & ini = initTraits());+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|DefaultLatentModel::DefaultLatentModel<copulaPolicy>(const Handle<Quote> & mktCorrel, Size nVariables, LatentModelIntegrationType::LatentModelIntegrationType integralType, const initTraits & ini = initTraits());+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|void DefaultLatentModel::resetBasket(const ext::shared_ptr<Basket> & basket) const;+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|Probability DefaultLatentModel::conditionalDefaultProbability(Probability prob, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|Probability DefaultLatentModel::conditionalDefaultProbabilityInvP(Real invCumYProb, Size iName, const std::vector<Real> & m) const;+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|Probability DefaultLatentModel::probOfDefault(Size iName, const Date & d) const;+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|Real DefaultLatentModel::defaultCorrelation(const Date & d, Size iNamei, Size iNamej) const;+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|Probability DefaultLatentModel::probAtLeastNEvents(Size n, const Date & date) const;+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|Real conditionalProbAtLeastNEvents(Size n, const Date & date, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/defaulttype.hpp|DefaultType::DefaultType(AtomicDefault::Type defType = AtomicDefault::Bankruptcy, Restructuring::Type restType = Restructuring::XR);+|x|ql/experimental/credit/defaulttype.hpp|AtomicDefault::Type DefaultType::defaultType() const;+|x|ql/experimental/credit/defaulttype.hpp|Restructuring::Type DefaultType::restructuringType() const;+| |ql/experimental/credit/defaulttype.hpp|bool DefaultType::isRestructuring() const;+| |ql/experimental/credit/defaulttype.hpp|bool DefaultType::containsDefaultType(AtomicDefault::Type defType) const;+| |ql/experimental/credit/defaulttype.hpp|bool DefaultType::containsRestructuringType(Restructuring::Type resType) const;+| |ql/experimental/credit/defaulttype.hpp|bool operator==(const DefaultType & lhs, const DefaultType & rhs);+| |ql/experimental/credit/defaulttype.hpp|FailureToPay::FailureToPay(const Period & grace, Real amount = 1.e+6);+|x|ql/experimental/credit/defaulttype.hpp|Real FailureToPay::amountRequired() const;+|x|ql/experimental/credit/defaulttype.hpp|const Period & FailureToPay::gracePeriod() const;+| |ql/experimental/credit/distribution.hpp|Distribution::Distribution(int nBuckets, Real xmin, Real xmax);+| |ql/experimental/credit/distribution.hpp|Distribution::Distribution();+| |ql/experimental/credit/distribution.hpp|void Distribution::add(Real value);+| |ql/experimental/credit/distribution.hpp|void Distribution::addDensity(int bucket, Real value);+| |ql/experimental/credit/distribution.hpp|void Distribution::addAverage(int bucket, Real value);+| |ql/experimental/credit/distribution.hpp|void Distribution::normalize();+| |ql/experimental/credit/distribution.hpp|Size Distribution::size() const;+| |ql/experimental/credit/distribution.hpp|Real Distribution::x(Size k);+| |ql/experimental/credit/distribution.hpp|std::vector<Real> & Distribution::x();+| |ql/experimental/credit/distribution.hpp|Real Distribution::dx(Size k);+| |ql/experimental/credit/distribution.hpp|std::vector<Real> & Distribution::dx();+| |ql/experimental/credit/distribution.hpp|Real Distribution::dx(Real x);+| |ql/experimental/credit/distribution.hpp|Real Distribution::density(Size k);+| |ql/experimental/credit/distribution.hpp|Real Distribution::cumulative(Size k);+| |ql/experimental/credit/distribution.hpp|Real Distribution::excess(Size k);+| |ql/experimental/credit/distribution.hpp|Real Distribution::cumulativeExcess(Size k);+| |ql/experimental/credit/distribution.hpp|Real Distribution::average(Size k);+| |ql/experimental/credit/distribution.hpp|Real Distribution::confidenceLevel(Real quantil);+| |ql/experimental/credit/distribution.hpp|Real Distribution::cumulativeDensity(Real x);+| |ql/experimental/credit/distribution.hpp|Real Distribution::cumulativeExcessProbability(Real a, Real b);+| |ql/experimental/credit/distribution.hpp|Real Distribution::expectedValue();+| |ql/experimental/credit/distribution.hpp|Real Distribution::trancheExpectedValue(Real a, Real d);+| |ql/experimental/credit/distribution.hpp|void Distribution::tranche(Real attachmentPoint, Real detachmentPoint);+| |ql/experimental/credit/distribution.hpp|int Distribution::locate(Real x);+| |ql/experimental/credit/distribution.hpp|Real Distribution::expectedShortfall(Real percValue);+| |ql/experimental/credit/distribution.hpp|static Distribution ManipulateDistribution::convolve(const Distribution & d1, const Distribution & d2);+|v|ql/experimental/credit/factorspreadedhazardratecurve.hpp|FactorSpreadedHazardRateCurve::FactorSpreadedHazardRateCurve(Handle<DefaultProbabilityTermStructure> originalCurve, Handle<Quote> spread);+|v|ql/experimental/credit/factorspreadedhazardratecurve.hpp|FactorSpreadedHazardRateCurve(Handle<DefaultProbabilityTermStructure> h, Handle<Quote> spread);+|?|ql/experimental/credit/factorspreadedhazardratecurve.hpp|DayCounter dayCounter() const;+|?|ql/experimental/credit/factorspreadedhazardratecurve.hpp|Calendar calendar() const;+| |ql/experimental/credit/factorspreadedhazardratecurve.hpp|const Date & referenceDate() const;+| |ql/experimental/credit/factorspreadedhazardratecurve.hpp|Date maxDate() const;+| |ql/experimental/credit/factorspreadedhazardratecurve.hpp|Time maxTime() const;+| |ql/experimental/credit/factorspreadedhazardratecurve.hpp|Real hazardRateImpl(Time t) const;+|x|ql/experimental/credit/gaussianlhplossmodel.hpp|GaussianLHPLossModel::GaussianLHPLossModel(const Handle<Quote> & correlQuote, const std::vector<Handle<RecoveryRateQuote>> & quotes);+|x|ql/experimental/credit/gaussianlhplossmodel.hpp|GaussianLHPLossModel::GaussianLHPLossModel(Real correlation, const std::vector<Real> & recoveries);+|v|ql/experimental/credit/gaussianlhplossmodel.hpp|GaussianLHPLossModel::GaussianLHPLossModel(const Handle<Quote> & correlQuote, const std::vector<Real> & recoveries);+|x|ql/experimental/credit/gaussianlhplossmodel.hpp|void GaussianLHPLossModel::update();+| |ql/experimental/credit/homogeneouspooldef.hpp|HomogeneousPoolLossModel::HomogeneousPoolLossModel<copulaPolicy>(const ext::shared_ptr<ConstantLossLatentmodel<copulaPolicy>> & copula, Size nBuckets, Real max = 5., Real min = - 5., Size nSteps = 50);+| |ql/experimental/credit/homogeneouspooldef.hpp|Real HomogeneousPoolLossModel::expectedShortfall(const Date & d, Probability percentile) const;+| |ql/experimental/credit/homogeneouspooldef.hpp|void resetModel();+| |ql/experimental/credit/homogeneouspooldef.hpp|Distribution lossDistrib(const Date & d) const;+| |ql/experimental/credit/inhomogeneouspooldef.hpp|InhomogeneousPoolLossModel::InhomogeneousPoolLossModel<copulaPolicy>(const ext::shared_ptr<ConstantLossLatentmodel<copulaPolicy>> & copula, Size nBuckets, Real max = 5., Real min = - 5., Size nSteps = 50);+| |ql/experimental/credit/inhomogeneouspooldef.hpp|Real InhomogeneousPoolLossModel::expectedShortfall(const Date & d, Probability percentile) const;+| |ql/experimental/credit/inhomogeneouspooldef.hpp|void resetModel();+| |ql/experimental/credit/inhomogeneouspooldef.hpp|Distribution lossDistrib(const Date & d) const;+|v|ql/experimental/credit/integralcdoengine.hpp|IntegralCDOEngine::IntegralCDOEngine(Handle<YieldTermStructure> discountCurve, Period stepSize = 3 * Months);+|x|ql/experimental/credit/integralcdoengine.hpp|void IntegralCDOEngine::calculate() const;+|v|ql/experimental/credit/integralntdengine.hpp|IntegralNtdEngine::IntegralNtdEngine(const Period & integrationStep, Handle<YieldTermStructure> discountCurve);+|x|ql/experimental/credit/integralntdengine.hpp|void IntegralNtdEngine::calculate() const;+|v|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve::InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>(), const Interpolator & interpolator = Interpolator());+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve::InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve::InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Interpolator & interpolator);+| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|const std::vector<Time> & InterpolatedAffineHazardRateCurve::times() const;+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|const std::vector<Date> & InterpolatedAffineHazardRateCurve::dates() const;+| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|const std::vector<Real> & InterpolatedAffineHazardRateCurve::data() const;+| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|const std::vector<Rate> & InterpolatedAffineHazardRateCurve::hazardRates() const;+| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedAffineHazardRateCurve::nodes() const;+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static Date AffineHazardRate::initialDate(const DefaultProbabilityTermStructure * c);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static Real AffineHazardRate::initialValue(const DefaultProbabilityTermStructure *);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static void AffineHazardRate::updateGuess(std::vector<Real> & data, Real rate, Size i);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|static Size AffineHazardRate::maxIterations();+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Date maxDate() const;+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Real hazardRateImpl(Time t) const;+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Probability survivalProbabilityImpl(Time t) const;+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|Probability conditionalSurvivalProbabilityImpl(Time tFwd, Time tTarget, Real yVal) const;+|?|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|?|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|?|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Calendar & calendar, const T & interpolator);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|InterpolatedAffineHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const T & interpolator);+|x|ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|void initialize();+|v|ql/experimental/credit/issuer.hpp|Issuer::Issuer(std::vector<key_curve_pair> probabilities = std::vector<key_curve_pair>(), DefaultEventSet events = DefaultEventSet());+| |ql/experimental/credit/issuer.hpp|Issuer::Issuer(const std::vector<std::vector<ext::shared_ptr<DefaultType>>> & eventTypes, const std::vector<Currency> & currencies, const std::vector<Seniority> & seniorities, const std::vector<Handle<DefaultProbabilityTermStructure>> & curves, DefaultEventSet events = DefaultEventSet());+| |ql/experimental/credit/issuer.hpp|const Handle<DefaultProbabilityTermStructure> & Issuer::defaultProbability(const DefaultProbKey & key) const;+| |ql/experimental/credit/issuer.hpp|ext::shared_ptr<DefaultEvent> Issuer::defaultedBetween(const Date & start, const Date & end, const DefaultProbKey & key, bool includeRefDate = false) const;+| |ql/experimental/credit/issuer.hpp|std::vector<ext::shared_ptr<DefaultEvent>> Issuer::defaultsBetween(const Date & start, const Date & end, const DefaultProbKey & contractKey, bool includeRefDate) const;+| |ql/experimental/credit/loss.hpp|Loss::Loss(Real t = 0.0, Real a = 0.0);+| |ql/experimental/credit/loss.hpp|bool operator<(const Loss & l1, const Loss & l2);+| |ql/experimental/credit/loss.hpp|bool operator>(const Loss & l1, const Loss & l2);+| |ql/experimental/credit/loss.hpp|bool operator==(const Loss & l1, const Loss & l2);+| |ql/experimental/credit/loss.hpp|bool operator!=(const Loss & l1, const Loss & l2);+| |ql/experimental/credit/lossdistribution.hpp|LossDist::LossDist();+| |ql/experimental/credit/lossdistribution.hpp|Distribution LossDist::operator()(const std::vector<Real> & volumes, const std::vector<Real> & probabilities) const;+| |ql/experimental/credit/lossdistribution.hpp|Size LossDist::buckets() const;+| |ql/experimental/credit/lossdistribution.hpp|Real LossDist::maximum() const;+| |ql/experimental/credit/lossdistribution.hpp|static Real LossDist::binomialProbabilityOfNEvents(int n, std::vector<Real> & p);+| |ql/experimental/credit/lossdistribution.hpp|static Real LossDist::binomialProbabilityOfAtLeastNEvents(int n, std::vector<Real> & p);+| |ql/experimental/credit/lossdistribution.hpp|static std::vector<Real> LossDist::probabilityOfNEvents(std::vector<Real> & p);+| |ql/experimental/credit/lossdistribution.hpp|static Real LossDist::probabilityOfNEvents(int n, std::vector<Real> & p);+| |ql/experimental/credit/lossdistribution.hpp|static Real LossDist::probabilityOfAtLeastNEvents(int n, std::vector<Real> & p);+| |ql/experimental/credit/lossdistribution.hpp|ProbabilityOfNEvents::ProbabilityOfNEvents(int n);+| |ql/experimental/credit/lossdistribution.hpp|Real ProbabilityOfNEvents::operator()(std::vector<Real> p) const;+| |ql/experimental/credit/lossdistribution.hpp|ProbabilityOfAtLeastNEvents::ProbabilityOfAtLeastNEvents(int n);+| |ql/experimental/credit/lossdistribution.hpp|Real ProbabilityOfAtLeastNEvents::operator()(std::vector<Real> p) const;+| |ql/experimental/credit/lossdistribution.hpp|BinomialProbabilityOfAtLeastNEvents::BinomialProbabilityOfAtLeastNEvents(int n);+| |ql/experimental/credit/lossdistribution.hpp|Real BinomialProbabilityOfAtLeastNEvents::operator()(std::vector<Real> p) const;+| |ql/experimental/credit/lossdistribution.hpp|LossDistBinomial::LossDistBinomial(Size nBuckets, Real maximum);+| |ql/experimental/credit/lossdistribution.hpp|Distribution LossDistBinomial::operator()(Size n, Real volume, Real probability) const;+| |ql/experimental/credit/lossdistribution.hpp|Real LossDistBinomial::volume() const;+| |ql/experimental/credit/lossdistribution.hpp|Size LossDistBinomial::size() const;+| |ql/experimental/credit/lossdistribution.hpp|std::vector<Real> LossDistBinomial::probability() const;+| |ql/experimental/credit/lossdistribution.hpp|std::vector<Real> LossDistBinomial::excessProbability() const;+| |ql/experimental/credit/lossdistribution.hpp|LossDistHomogeneous::LossDistHomogeneous(Size nBuckets, Real maximum);+| |ql/experimental/credit/lossdistribution.hpp|Distribution LossDistHomogeneous::operator()(Real volume, const std::vector<Real> & probabilities) const;+| |ql/experimental/credit/lossdistribution.hpp|Size LossDistHomogeneous::size() const;+| |ql/experimental/credit/lossdistribution.hpp|Real LossDistHomogeneous::volume() const;+| |ql/experimental/credit/lossdistribution.hpp|std::vector<Real> LossDistHomogeneous::probability() const;+| |ql/experimental/credit/lossdistribution.hpp|std::vector<Real> LossDistHomogeneous::excessProbability() const;+| |ql/experimental/credit/lossdistribution.hpp|LossDistBucketing::LossDistBucketing(Size nBuckets, Real maximum, Real epsilon = 1e-6);+| |ql/experimental/credit/lossdistribution.hpp|LossDistMonteCarlo::LossDistMonteCarlo(Size nBuckets, Real maximum, Size simulations, long seed = 42, Real epsilon = 1e-6);+|v|ql/experimental/credit/midpointcdoengine.hpp|MidPointCDOEngine::MidPointCDOEngine(Handle<YieldTermStructure> discountCurve);+|x|ql/experimental/credit/midpointcdoengine.hpp|void MidPointCDOEngine::calculate() const;+|v|ql/experimental/credit/nthtodefault.hpp|NthToDefault::NthToDefault(const ext::shared_ptr<Basket> & basket, Size n, Protection::Side side, Schedule premiumSchedule, Rate upfrontRate, Rate premiumRate, const DayCounter & dayCounter, Real nominal, bool settlePremiumAccrual);+|x|ql/experimental/credit/nthtodefault.hpp|Rate NthToDefault::premium() const;+|x|ql/experimental/credit/nthtodefault.hpp|Real NthToDefault::nominal() const;+|x|ql/experimental/credit/nthtodefault.hpp|DayCounter NthToDefault::dayCounter() const;+|x|ql/experimental/credit/nthtodefault.hpp|Protection::Side NthToDefault::side() const;+|x|ql/experimental/credit/nthtodefault.hpp|Size NthToDefault::rank() const;+|x|ql/experimental/credit/nthtodefault.hpp|Size NthToDefault::basketSize() const;+|x|ql/experimental/credit/nthtodefault.hpp|const Date & NthToDefault::maturity() const;+|x|ql/experimental/credit/nthtodefault.hpp|const ext::shared_ptr<Basket> & NthToDefault::basket() const;+|v|ql/experimental/credit/nthtodefault.hpp|Rate NthToDefault::fairPremium() const;+| |ql/experimental/credit/nthtodefault.hpp|Real NthToDefault::premiumLegNPV() const;+| |ql/experimental/credit/nthtodefault.hpp|Real NthToDefault::protectionLegNPV() const;+| |ql/experimental/credit/nthtodefault.hpp|arguments::arguments();+| |ql/experimental/credit/nthtodefault.hpp|void arguments::validate() const;+| |ql/experimental/credit/nthtodefault.hpp|void results::reset();+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|OneFactorAffineSurvivalStructure::OneFactorAffineSurvivalStructure(ext::shared_ptr<OneFactorAffineModel> model, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>());+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|OneFactorAffineSurvivalStructure::OneFactorAffineSurvivalStructure(ext::shared_ptr<OneFactorAffineModel> model, const Date & referenceDate, const Calendar & cal = Calendar(), const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>());+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|OneFactorAffineSurvivalStructure::OneFactorAffineSurvivalStructure(ext::shared_ptr<OneFactorAffineModel> model, Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = std::vector<Handle<Quote>>(), const std::vector<Date> & jumpDates = std::vector<Date>());+|v|ql/experimental/credit/onefactoraffinesurvival.hpp|Probability OneFactorAffineSurvivalStructure::conditionalSurvivalProbability(const Date & dFwd, const Date & dTgt, Real yVal, bool extrapolate = false) const;+|v|ql/experimental/credit/onefactoraffinesurvival.hpp|Probability OneFactorAffineSurvivalStructure::conditionalSurvivalProbability(Time tFwd, Time tgt, Real yVal, bool extrapolate = false) const;+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|Probability survivalProbabilityImpl(Time t) const;+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|Probability conditionalSurvivalProbabilityImpl(Time tFwd, Time tgt, Real yVal) const;+|x|ql/experimental/credit/onefactoraffinesurvival.hpp|Real defaultDensityImpl(Time t) const;+| |ql/experimental/credit/onefactorcopula.hpp|OneFactorCopula::OneFactorCopula(Handle<Quote> correlation, Real maximum = 5.0, Size integrationSteps = 50, Real minimum = - 5.0);+| |ql/experimental/credit/onefactorcopula.hpp|Real OneFactorCopula::density(Real m) const;+| |ql/experimental/credit/onefactorcopula.hpp|Real OneFactorCopula::cumulativeZ(Real z) const;+| |ql/experimental/credit/onefactorcopula.hpp|Real OneFactorCopula::cumulativeY(Real y) const;+| |ql/experimental/credit/onefactorcopula.hpp|Real OneFactorCopula::inverseCumulativeY(Real p) const;+| |ql/experimental/credit/onefactorcopula.hpp|Real OneFactorCopula::correlation() const;+| |ql/experimental/credit/onefactorcopula.hpp|Real OneFactorCopula::conditionalProbability(Real prob, Real m) const;+| |ql/experimental/credit/onefactorcopula.hpp|std::vector<Real> OneFactorCopula::conditionalProbability(const std::vector<Real> & prob, Real m) const;+| |ql/experimental/credit/onefactorcopula.hpp|Real OneFactorCopula::integral(Real p) const;+| |ql/experimental/credit/onefactorcopula.hpp|int OneFactorCopula::checkMoments(Real tolerance) const;+| |ql/experimental/credit/onefactorcopula.hpp|Size steps() const;+| |ql/experimental/credit/onefactorcopula.hpp|Real dm(Size) const;+| |ql/experimental/credit/onefactorcopula.hpp|Real m(Size i) const;+| |ql/experimental/credit/onefactorcopula.hpp|Real densitydm(Size i) const;+| |ql/experimental/credit/onefactorgaussiancopula.hpp|OneFactorGaussianCopula::OneFactorGaussianCopula(const Handle<Quote> & correlation, Real maximum = 5, Size integrationSteps = 50);+| |ql/experimental/credit/onefactorgaussiancopula.hpp|Real OneFactorGaussianCopula::testCumulativeY(Real y) const;+| |ql/experimental/credit/onefactorgaussiancopula.hpp|Real density(Real m) const;+| |ql/experimental/credit/onefactorgaussiancopula.hpp|Real cumulativeZ(Real z) const;+| |ql/experimental/credit/onefactorgaussiancopula.hpp|Real cumulativeY(Real y) const;+| |ql/experimental/credit/onefactorgaussiancopula.hpp|Real inverseCumulativeY(Real p) const;+| |ql/experimental/credit/onefactorstudentcopula.hpp|OneFactorStudentCopula::OneFactorStudentCopula(const Handle<Quote> & correlation, int nz, int nm, Real maximum = 10, Size integrationSteps = 200);+| |ql/experimental/credit/onefactorstudentcopula.hpp|Real density(Real m) const;+| |ql/experimental/credit/onefactorstudentcopula.hpp|Real cumulativeZ(Real z) const;+| |ql/experimental/credit/onefactorstudentcopula.hpp|OneFactorGaussianStudentCopula::OneFactorGaussianStudentCopula(const Handle<Quote> & correlation, int nz, Real maximum = 10, Size integrationSteps = 200);+| |ql/experimental/credit/onefactorstudentcopula.hpp|OneFactorStudentGaussianCopula::OneFactorStudentGaussianCopula(const Handle<Quote> & correlation, int nm, Real maximum = 10, Size integrationSteps = 200);+|u|ql/experimental/credit/pool.hpp|Pool::Pool();+| |ql/experimental/credit/pool.hpp|Size Pool::size() const;+| |ql/experimental/credit/pool.hpp|void Pool::clear();+| |ql/experimental/credit/pool.hpp|bool Pool::has(const std::string & name) const;+|u|ql/experimental/credit/pool.hpp|void Pool::add(const std::string & name, const Issuer & issuer, const DefaultProbKey & contractTrigger = NorthAmericaCorpDefaultKey(Currency(), SeniorSec, Period(), 1.));+| |ql/experimental/credit/pool.hpp|const Issuer & Pool::get(const std::string & name) const;+| |ql/experimental/credit/pool.hpp|const DefaultProbKey & Pool::defaultKey(const std::string & name) const;+| |ql/experimental/credit/pool.hpp|void Pool::setTime(const std::string & name, Real time);+| |ql/experimental/credit/pool.hpp|Real Pool::getTime(const std::string & name) const;+| |ql/experimental/credit/pool.hpp|const std::vector<std::string> & Pool::names() const;+| |ql/experimental/credit/pool.hpp|std::vector<DefaultProbKey> Pool::defaultKeys() const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|Probability probAtLeastNEvents(Size n, const Date & d) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|std::vector<Probability> probsBeingNthEvent(Size n, const Date & d) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|Real defaultCorrelation(const Date & d, Size iName, Size jName) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|Real expectedTrancheLoss(const Date & d) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|std::pair<Real, Real> expectedTrancheLossInterval(const Date & d, Probability confidencePerc) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|std::map<Real, Probability> lossDistribution(const Date & d) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|Histogram computeHistogram(const Date & d) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|Real expectedShortfall(const Date & d, Real percent) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|Real percentile(const Date & d, Real perc) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|std::tuple<Real, Real, Real> percentileAndInterval(const Date & d, Real percentile) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|std::vector<Real> splitVaRLevel(const Date & date, Real loss) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|std::vector<std::vector<Real>> splitVaRAndError(const Date & date, Real loss, Probability confInterval) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|Root::Root(const Handle<DefaultProbabilityTermStructure> & dts, Real pd);+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|Real Root::operator()(Real t) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|simEvent<RandomDefaultLM<copulaPolicy, USNG>>(unsigned int n, unsigned int d);+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|bool operator<(const simEvent<RandomDefaultLM<copulaPolicy, USNG>> & evt) const;+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|RandomDefaultLM::RandomDefaultLM<type-parameter-0-0, type-parameter-0-1>(const ext::shared_ptr<DefaultLatentModel<copulaPolicy>> & model, const std::vector<Real> & recoveries = std::vector<Real>(), Size nSims = 0, Real accuracy = 1.e-6, BigNatural seed = 2863311530UL);+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|RandomDefaultLM::RandomDefaultLM<type-parameter-0-0, type-parameter-0-1>(const ext::shared_ptr<ConstantLossLatentmodel<copulaPolicy>> & model, Size nSims = 0, Real accuracy = 1.e-6, BigNatural seed = 2863311530UL);+| |ql/experimental/credit/randomdefaultlatentmodel.hpp|void nextSample(const std::vector<Real> & values) const;+| |ql/experimental/credit/randomdefaultmodel.hpp|RandomDefaultModel::RandomDefaultModel(const ext::shared_ptr<Pool> & pool, const std::vector<DefaultProbKey> & defaultKeys);+| |ql/experimental/credit/randomdefaultmodel.hpp|void RandomDefaultModel::nextSequence(Real tmax = QL_MAX_REAL);+| |ql/experimental/credit/randomdefaultmodel.hpp|void RandomDefaultModel::reset();+| |ql/experimental/credit/randomdefaultmodel.hpp|GaussianRandomDefaultModel::GaussianRandomDefaultModel(const ext::shared_ptr<Pool> & pool, const std::vector<DefaultProbKey> & defaultKeys, const Handle<OneFactorCopula> & copula, Real accuracy, long seed);+| |ql/experimental/credit/randomlosslatentmodel.hpp|simEvent<RandomLossLM<copulaPolicy, USNG>>(unsigned int n, unsigned int d, Real r);+| |ql/experimental/credit/randomlosslatentmodel.hpp|bool operator<(const simEvent<RandomLossLM<copulaPolicy, USNG>> & evt) const;+| |ql/experimental/credit/randomlosslatentmodel.hpp|Real recovery() const;+| |ql/experimental/credit/randomlosslatentmodel.hpp|RandomLossLM::RandomLossLM<type-parameter-0-0, type-parameter-0-1>(const ext::shared_ptr<SpotRecoveryLatentModel<copulaPolicy>> & copula, Size nSims = 0, Real accuracy = 1.e-6, BigNatural seed = 2863311530UL);+| |ql/experimental/credit/randomlosslatentmodel.hpp|void nextSample(const std::vector<Real> & values) const;+| |ql/experimental/credit/recoveryratemodel.hpp|Real RecoveryRateModel::recoveryValue(const Date & defaultDate, const DefaultProbKey & defaultKey = DefaultProbKey()) const;+| |ql/experimental/credit/recoveryratemodel.hpp|bool RecoveryRateModel::appliesToSeniority(Seniority) const;+| |ql/experimental/credit/recoveryratemodel.hpp|ConstantRecoveryModel::ConstantRecoveryModel(const Handle<RecoveryRateQuote> & quote);+| |ql/experimental/credit/recoveryratemodel.hpp|ConstantRecoveryModel::ConstantRecoveryModel(Real recovery, Seniority sen = NoSeniority);+| |ql/experimental/credit/recoveryratequote.hpp|std::map<Seniority, Real> RecoveryRateQuote::makeIsdaConvMap();+| |ql/experimental/credit/recoveryratequote.hpp|static Real RecoveryRateQuote::conventionalRecovery(Seniority sen);+| |ql/experimental/credit/recoveryratequote.hpp|RecoveryRateQuote::RecoveryRateQuote(Real value = Null<Real>(), Seniority seniority = NoSeniority);+| |ql/experimental/credit/recoveryratequote.hpp|Seniority RecoveryRateQuote::seniority() const;+| |ql/experimental/credit/recoveryratequote.hpp|Real RecoveryRateQuote::setValue(Real value = Null<Real>());+| |ql/experimental/credit/recoveryratequote.hpp|void RecoveryRateQuote::reset();+| |ql/experimental/credit/recoveryratequote.hpp|Real value() const;+| |ql/experimental/credit/recoveryratequote.hpp|bool isValid() const;+| |ql/experimental/credit/recursivelossmodel.hpp|RecursiveLossModel::RecursiveLossModel<copulaPolicy>(const ext::shared_ptr<ConstantLossLatentmodel<copulaPolicy>> & m, Size nbuckets = 1);+| |ql/experimental/credit/recursivelossmodel.hpp|std::vector<Real> RecursiveLossModel::lossProbability(const Date & date) const;+| |ql/experimental/credit/recursivelossmodel.hpp|Real expectedTrancheLoss(const Date & date) const;+| |ql/experimental/credit/recursivelossmodel.hpp|void resetModel();+| |ql/experimental/credit/recursivelossmodel.hpp|std::map<Real, Probability> lossDistribution(const Date & d) const;+| |ql/experimental/credit/recursivelossmodel.hpp|Real percentile(const Date & d, Real percentile) const;+| |ql/experimental/credit/recursivelossmodel.hpp|Real expectedShortfall(const Date & d, Real perctl) const;+| |ql/experimental/credit/recursivelossmodel.hpp|std::map<Real, Probability> conditionalLossDistrib(const std::vector<Probability> & pDefDate, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/recursivelossmodel.hpp|std::map<Real, Probability> conditionalLossDistribInvP(const std::vector<Real> & invpDefDate, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/recursivelossmodel.hpp|Real expectedConditionalLoss(const std::vector<Probability> & pDefDate, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/recursivelossmodel.hpp|Real expectedConditionalLossInvP(const std::vector<Real> & invPDefDate, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/recursivelossmodel.hpp|std::vector<Real> conditionalLossProb(const std::vector<Probability> & pDefDate, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/riskyassetswap.hpp|RiskyAssetSwap::RiskyAssetSwap(bool fixedPayer, Real nominal, Schedule fixedSchedule, Schedule floatSchedule, DayCounter fixedDayCounter, DayCounter floatDayCounter, Rate spread, Rate recoveryRate_, Handle<YieldTermStructure> yieldTS, Handle<DefaultProbabilityTermStructure> defaultTS, Rate coupon = Null<Rate>());+| |ql/experimental/credit/riskyassetswap.hpp|Real RiskyAssetSwap::fairSpread();+| |ql/experimental/credit/riskyassetswap.hpp|Real RiskyAssetSwap::floatAnnuity() const;+|x|ql/experimental/credit/riskyassetswap.hpp|Real RiskyAssetSwap::nominal() const;+|x|ql/experimental/credit/riskyassetswap.hpp|Rate RiskyAssetSwap::spread() const;+|x|ql/experimental/credit/riskyassetswap.hpp|bool RiskyAssetSwap::fixedPayer() const;+| |ql/experimental/credit/riskyassetswap.hpp|AssetSwapHelper::AssetSwapHelper(const Handle<Quote> & spread, const Period & tenor, Natural settlementDays, Calendar calendar, const Period & fixedPeriod, BusinessDayConvention fixedConvention, DayCounter fixedDayCount, const Period & floatPeriod, BusinessDayConvention floatConvention, DayCounter floatDayCount, Real recoveryRate, const RelinkableHandle<YieldTermStructure> & yieldTS, const Period & integrationStepSize = Period());+| |ql/experimental/credit/riskyassetswap.hpp|Real AssetSwapHelper::impliedQuote() const;+| |ql/experimental/credit/riskyassetswap.hpp|void AssetSwapHelper::setTermStructure(DefaultProbabilityTermStructure *);+| |ql/experimental/credit/riskyassetswapoption.hpp|RiskyAssetSwapOption::RiskyAssetSwapOption(ext::shared_ptr<RiskyAssetSwap> asw, const Date & expiry, Rate marketSpread, Volatility spreadVolatility);+| |ql/experimental/credit/saddlepointlossmodel.hpp|SaddlePointLossModel::SaddlePointLossModel<CP>(const ext::shared_ptr<ConstantLossLatentmodel<CP>> & m);+| |ql/experimental/credit/saddlepointlossmodel.hpp|SaddleObjectiveFunction::SaddleObjectiveFunction(const SaddlePointLossModel<CP> & me, const Real target, const std::vector<Real> & invUncondProbs, const std::vector<Real> & mktFactor);+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real SaddleObjectiveFunction::operator()(const Real x) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real SaddleObjectiveFunction::derivative(Real x) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|SaddlePercObjFunction::SaddlePercObjFunction(const SaddlePointLossModel<CP> & me, const Real target, const Date & date);+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real SaddlePercObjFunction::operator()(const Real x) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real SaddlePointLossModel::percentile(const Date & d, Probability percentile) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Probability SaddlePointLossModel::probOverPortfLoss(const Date & d, Real loss) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Probability SaddlePointLossModel::probDensity(const Date & d, Real loss) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real SaddlePointLossModel::expectedShortfall(const Date & d, Probability percentile) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumulantGenerating(const Date & date, Real s) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumGen1stDerivative(const Date & date, Real s) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumGen2ndDerivative(const Date & date, Real s) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumGen3rdDerivative(const Date & date, Real s) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumGen4thDerivative(const Date & date, Real s) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Probability probOverLoss(const Date & d, Real trancheLossFract) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real expectedTrancheLoss(const Date & d) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|std::vector<Real> splitVaRLevel(const Date & date, Real s) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumulantGeneratingCond(const std::vector<Real> & invUncondProbs, Real lossFraction, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumGen1stDerivativeCond(const std::vector<Real> & invUncondProbs, Real saddle, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumGen2ndDerivativeCond(const std::vector<Real> & invUncondProbs, Real saddle, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumGen3rdDerivativeCond(const std::vector<Real> & invUncondProbs, Real saddle, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real CumGen4thDerivativeCond(const std::vector<Real> & invUncondProbs, Real saddle, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|std::tuple<Real, Real, Real, Real> CumGen0234DerivCond(const std::vector<Real> & invUncondProbs, Real saddle, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|std::tuple<Real, Real> CumGen02DerivCond(const std::vector<Real> & invUncondProbs, Real saddle, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real findSaddle(const std::vector<Real> & invUncondPs, Real lossLevel, const std::vector<Real> & mktFactor, Real accuracy, Natural maxEvaluations) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Probability probOverLossCond(const std::vector<Real> & invUncondPs, Real trancheLossFract, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|std::map<Real, Probability> lossDistribution(const Date & d) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Probability probOverLossPortfCond(const std::vector<Real> & invUncondProbs, Real loss, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Probability probOverLossPortfCond1stOrder(const std::vector<Real> & invUncondPs, Real loss, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Probability probDensityCond(const std::vector<Real> & invUncondPs, Real loss, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|std::vector<Real> splitLossCond(const std::vector<Real> & invUncondProbs, Real loss, std::vector<Real> mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real conditionalExpectedLoss(const std::vector<Real> & invUncondProbs, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real conditionalExpectedTrancheLoss(const std::vector<Real> & invUncondProbs, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|std::vector<Real> expectedShortfallSplitCond(const std::vector<Real> & invUncondProbs, Real lossPerc, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real expectedShortfallTrancheCond(const std::vector<Real> & invUncondProbs, Real lossPerc, Probability percentile, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real expectedShortfallFullPortfolioCond(const std::vector<Real> & invUncondProbs, Real lossPerc, const std::vector<Real> & mktFactor) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real expectedShortfall(const Date & d, Probability percProb) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|SpotRecoveryLatentModel::SpotRecoveryLatentModel<copulaPolicy>(const std::vector<std::vector<Real>> & factorWeights, const std::vector<Real> & recoveries, Real modelA, LatentModelIntegrationType::LatentModelIntegrationType integralType, const initTraits & ini = initTraits());+| |ql/experimental/credit/spotlosslatentmodel.hpp|void SpotRecoveryLatentModel::resetBasket(const ext::shared_ptr<Basket> & basket) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Probability SpotRecoveryLatentModel::conditionalDefaultProbability(const Date & date, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Probability SpotRecoveryLatentModel::conditionalDefaultProbability(Probability prob, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Probability SpotRecoveryLatentModel::conditionalDefaultProbabilityInvP(Real invCumYProb, Size iName, const std::vector<Real> & m) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real SpotRecoveryLatentModel::expCondRecovery(const Date & d, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real SpotRecoveryLatentModel::expCondRecoveryP(Real uncondDefP, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real SpotRecoveryLatentModel::expCondRecoveryInvPinvRR(Real invUncondDefP, Real invUncondRR, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real SpotRecoveryLatentModel::conditionalRecovery(Real latentVarSample, Size iName, const Date & d) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real SpotRecoveryLatentModel::latentRRVarValue(const std::vector<Real> & allFactors, Size iName) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real SpotRecoveryLatentModel::conditionalExpLossRR(const Date & d, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real SpotRecoveryLatentModel::conditionalExpLossRRInv(Real invP, Real invRR, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real SpotRecoveryLatentModel::expectedLoss(const Date & d, Size iName) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|SpotRecoveryLatentModel<copulaPolicy>(const std::vector<std::vector<Real>> & factorWeights, const std::vector<Real> & recoveries, Real modelA, LatentModelIntegrationType::LatentModelIntegrationType integralType, const typename CP::initTraits & ini);+|v|ql/experimental/credit/spreadedhazardratecurve.hpp|SpreadedHazardRateCurve::SpreadedHazardRateCurve(Handle<DefaultProbabilityTermStructure> originalCurve, Handle<Quote> spread);+|v|ql/experimental/credit/spreadedhazardratecurve.hpp|SpreadedHazardRateCurve(Handle<DefaultProbabilityTermStructure> h, Handle<Quote> spread);+|?|ql/experimental/credit/spreadedhazardratecurve.hpp|DayCounter dayCounter() const;+|?|ql/experimental/credit/spreadedhazardratecurve.hpp|Calendar calendar() const;+| |ql/experimental/credit/spreadedhazardratecurve.hpp|const Date & referenceDate() const;+| |ql/experimental/credit/spreadedhazardratecurve.hpp|Date maxDate() const;+| |ql/experimental/credit/spreadedhazardratecurve.hpp|Time maxTime() const;+| |ql/experimental/credit/spreadedhazardratecurve.hpp|Real hazardRateImpl(Time t) const;+|v|ql/experimental/credit/syntheticcdo.hpp|SyntheticCDO::SyntheticCDO(const ext::shared_ptr<Basket> & basket, Protection::Side side, Schedule schedule, Rate upfrontRate, Rate runningRate, const DayCounter & dayCounter, BusinessDayConvention paymentConvention, std::optional<Real> notional = std::nullopt);+|x|ql/experimental/credit/syntheticcdo.hpp|const ext::shared_ptr<Basket> & SyntheticCDO::basket() const;+|v|ql/experimental/credit/syntheticcdo.hpp|Rate SyntheticCDO::fairPremium() const;+|v|ql/experimental/credit/syntheticcdo.hpp|Rate SyntheticCDO::fairUpfrontPremium() const;+|v|ql/experimental/credit/syntheticcdo.hpp|Rate SyntheticCDO::premiumValue() const;+|v|ql/experimental/credit/syntheticcdo.hpp|Rate SyntheticCDO::protectionValue() const;+|v|ql/experimental/credit/syntheticcdo.hpp|Real SyntheticCDO::premiumLegNPV() const;+|v|ql/experimental/credit/syntheticcdo.hpp|Real SyntheticCDO::protectionLegNPV() const;+|v|ql/experimental/credit/syntheticcdo.hpp|Real SyntheticCDO::remainingNotional() const;+|x|ql/experimental/credit/syntheticcdo.hpp|Real SyntheticCDO::leverageFactor() const;+| |ql/experimental/credit/syntheticcdo.hpp|const Date & SyntheticCDO::maturity() const;+|v|ql/experimental/credit/syntheticcdo.hpp|Real SyntheticCDO::implicitCorrelation(const std::vector<Real> & recoveries, const Handle<YieldTermStructure> & discountCurve, Real targetNPV = 0., Real accuracy = 1.0e-3) const;+| |ql/experimental/credit/syntheticcdo.hpp|std::vector<Real> SyntheticCDO::expectedTrancheLoss() const;+| |ql/experimental/credit/syntheticcdo.hpp|Size SyntheticCDO::error() const;+| |ql/experimental/credit/syntheticcdo.hpp|arguments::arguments();+| |ql/experimental/credit/syntheticcdo.hpp|void arguments::validate() const;+| |ql/experimental/credit/syntheticcdo.hpp|void results::reset();+|v|ql/experimental/exoticoptions/continuousarithmeticasianvecerengine.hpp|ContinuousArithmeticAsianVecerEngine::ContinuousArithmeticAsianVecerEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Handle<Quote> currentAverage, Date startDate, Size timeSteps = 100, Size assetSteps = 100, Real z_min = - 1.0, Real z_max = 1.0);+|x|ql/experimental/exoticoptions/continuousarithmeticasianvecerengine.hpp|void ContinuousArithmeticAsianVecerEngine::calculate() const;+|v|ql/experimental/exoticoptions/everestoption.hpp|EverestOption::EverestOption(Real notional, Rate guarantee, const ext::shared_ptr<Exercise> &);+|v|ql/experimental/exoticoptions/everestoption.hpp|Rate EverestOption::yield() const;+| |ql/experimental/exoticoptions/everestoption.hpp|arguments::arguments();+| |ql/experimental/exoticoptions/everestoption.hpp|void arguments::validate() const;+| |ql/experimental/exoticoptions/everestoption.hpp|void results::reset();+|?|ql/experimental/exoticoptions/himalayaoption.hpp|HimalayaOption::HimalayaOption(const std::vector<Date> & fixingDates, Real strike);+| |ql/experimental/exoticoptions/himalayaoption.hpp|void arguments::validate() const;+|v|ql/experimental/exoticoptions/mceverestengine.hpp|MCEverestEngine::MCEverestEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/experimental/exoticoptions/mceverestengine.hpp|void MCEverestEngine::calculate() const;+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine::MakeMCEverestEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & MakeMCEverestEngine::withSteps(Size steps);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & MakeMCEverestEngine::withStepsPerYear(Size steps);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & MakeMCEverestEngine::withBrownianBridge(bool b = true);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & MakeMCEverestEngine::withAntitheticVariate(bool b = true);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & MakeMCEverestEngine::withSamples(Size samples);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & MakeMCEverestEngine::withAbsoluteTolerance(Real tolerance);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & MakeMCEverestEngine::withMaxSamples(Size samples);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & MakeMCEverestEngine::withSeed(BigNatural seed);+| |ql/experimental/exoticoptions/mceverestengine.hpp|EverestMultiPathPricer::EverestMultiPathPricer(Real notional, Rate guarantee, DiscountFactor discount);+| |ql/experimental/exoticoptions/mceverestengine.hpp|Real EverestMultiPathPricer::operator()(const MultiPath & multiPath) const;+| |ql/experimental/exoticoptions/mceverestengine.hpp|MCEverestEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> processes, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|?|ql/experimental/exoticoptions/mceverestengine.hpp|TimeGrid timeGrid() const;+| |ql/experimental/exoticoptions/mceverestengine.hpp|DiscountFactor endDiscount() const;+| |ql/experimental/exoticoptions/mceverestengine.hpp|ext::shared_ptr<typename MCEverestEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> process);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & withAntitheticVariate(bool b);+|?|ql/experimental/exoticoptions/mchimalayaengine.hpp|MCHimalayaEngine::MCHimalayaEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/experimental/exoticoptions/mchimalayaengine.hpp|void MCHimalayaEngine::calculate() const;+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine::MakeMCHimalayaEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & MakeMCHimalayaEngine::withBrownianBridge(bool b = true);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & MakeMCHimalayaEngine::withAntitheticVariate(bool b = true);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & MakeMCHimalayaEngine::withSamples(Size samples);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & MakeMCHimalayaEngine::withAbsoluteTolerance(Real tolerance);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & MakeMCHimalayaEngine::withMaxSamples(Size samples);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & MakeMCHimalayaEngine::withSeed(BigNatural seed);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|HimalayaMultiPathPricer::HimalayaMultiPathPricer(ext::shared_ptr<Payoff> payoff, DiscountFactor discount);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|Real HimalayaMultiPathPricer::operator()(const MultiPath & multiPath) const;+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MCHimalayaEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> processes, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|?|ql/experimental/exoticoptions/mchimalayaengine.hpp|TimeGrid timeGrid() const;+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|ext::shared_ptr<typename MCHimalayaEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> process);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & withAntitheticVariate(bool b);+|?|ql/experimental/exoticoptions/mcpagodaengine.hpp|MCPagodaEngine::MCPagodaEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/experimental/exoticoptions/mcpagodaengine.hpp|void MCPagodaEngine::calculate() const;+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine::MakeMCPagodaEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & MakeMCPagodaEngine::withBrownianBridge(bool b = true);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & MakeMCPagodaEngine::withAntitheticVariate(bool b = true);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & MakeMCPagodaEngine::withSamples(Size samples);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & MakeMCPagodaEngine::withAbsoluteTolerance(Real tolerance);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & MakeMCPagodaEngine::withMaxSamples(Size samples);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & MakeMCPagodaEngine::withSeed(BigNatural seed);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|PagodaMultiPathPricer::PagodaMultiPathPricer(Real roof, Real fraction, DiscountFactor discount);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|Real PagodaMultiPathPricer::operator()(const MultiPath & multiPath) const;+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MCPagodaEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> processes, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|?|ql/experimental/exoticoptions/mcpagodaengine.hpp|TimeGrid timeGrid() const;+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|ext::shared_ptr<typename MCPagodaEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> process);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & withAntitheticVariate(bool b);+|?|ql/experimental/exoticoptions/pagodaoption.hpp|PagodaOption::PagodaOption(const std::vector<Date> & fixingDates, Real roof, Real fraction);+| |ql/experimental/exoticoptions/pagodaoption.hpp|arguments::arguments();+| |ql/experimental/exoticoptions/pagodaoption.hpp|void arguments::validate() const;+| |ql/experimental/finitedifferences/dynprogvppintrinsicvalueengine.hpp|DynProgVPPIntrinsicValueEngine::DynProgVPPIntrinsicValueEngine(std::vector<Real> fuelPrices, std::vector<Real> powerPrices, Real fuelCostAddon, ext::shared_ptr<YieldTermStructure> rTS);+|x|ql/experimental/finitedifferences/dynprogvppintrinsicvalueengine.hpp|void DynProgVPPIntrinsicValueEngine::calculate() const;+| |ql/experimental/finitedifferences/fdextoujumpvanillaengine.hpp|FdExtOUJumpVanillaEngine::FdExtOUJumpVanillaEngine(ext::shared_ptr<ExtOUWithJumpsProcess> p, ext::shared_ptr<YieldTermStructure> rTS, Size tGrid = 50, Size xGrid = 200, Size yGrid = 50, ext::shared_ptr<Shape> shape = ext::shared_ptr<Shape>(), const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|x|ql/experimental/finitedifferences/fdextoujumpvanillaengine.hpp|void FdExtOUJumpVanillaEngine::calculate() const;+| |ql/experimental/finitedifferences/fdklugeextouspreadengine.hpp|FdKlugeExtOUSpreadEngine::FdKlugeExtOUSpreadEngine(ext::shared_ptr<KlugeExtOUProcess> klugeOUProcess, ext::shared_ptr<YieldTermStructure> rTS, Size tGrid = 25, Size xGrid = 50, Size yGrid = 10, Size uGrid = 25, ext::shared_ptr<GasShape> gasShape = ext::shared_ptr<GasShape>(), ext::shared_ptr<PowerShape> powerShape = ext::shared_ptr<PowerShape>(), const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|x|ql/experimental/finitedifferences/fdklugeextouspreadengine.hpp|void FdKlugeExtOUSpreadEngine::calculate() const;+| |ql/experimental/finitedifferences/fdmdupire1dop.hpp|FdmDupire1dOp::FdmDupire1dOp(const ext::shared_ptr<FdmMesher> & mesher, const Array & localVolatility);+| |ql/experimental/finitedifferences/fdmdupire1dop.hpp|Array FdmDupire1dOp::apply(const Array & r) const;+| |ql/experimental/finitedifferences/fdmexpextouinnervaluecalculator.hpp|FdmExpExtOUInnerValueCalculator::FdmExpExtOUInnerValueCalculator(ext::shared_ptr<Payoff> payoff, ext::shared_ptr<FdmMesher> mesher, ext::shared_ptr<Shape> shape = ext::shared_ptr<Shape>(), Size direction = 0);+| |ql/experimental/finitedifferences/fdmextendedornsteinuhlenbeckop.hpp|FdmExtendedOrnsteinUhlenbeckOp::FdmExtendedOrnsteinUhlenbeckOp(const ext::shared_ptr<FdmMesher> & mesher, ext::shared_ptr<ExtendedOrnsteinUhlenbeckProcess> p, ext::shared_ptr<YieldTermStructure> rTS, FdmBoundaryConditionSet bcSet, Size direction = 0);+| |ql/experimental/finitedifferences/fdmextendedornsteinuhlenbeckop.hpp|Array FdmExtendedOrnsteinUhlenbeckOp::apply(const Array & r) const;+| |ql/experimental/finitedifferences/fdmextoujumpmodelinnervalue.hpp|FdmExtOUJumpModelInnerValue::FdmExtOUJumpModelInnerValue(ext::shared_ptr<Payoff> payoff, ext::shared_ptr<FdmMesher> mesher, ext::shared_ptr<Shape> shape = ext::shared_ptr<Shape>());+| |ql/experimental/finitedifferences/fdmextoujumpop.hpp|FdmExtOUJumpOp::FdmExtOUJumpOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<ExtOUWithJumpsProcess> & process, const ext::shared_ptr<YieldTermStructure> & rTS, const FdmBoundaryConditionSet & bcSet, Size integroIntegrationOrder);+| |ql/experimental/finitedifferences/fdmextoujumpop.hpp|Array FdmExtOUJumpOp::apply(const Array & r) const;+| |ql/experimental/finitedifferences/fdmextoujumpsolver.hpp|FdmExtOUJumpSolver::FdmExtOUJumpSolver(Handle<ExtOUWithJumpsProcess> process, ext::shared_ptr<YieldTermStructure> rTS, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+| |ql/experimental/finitedifferences/fdmextoujumpsolver.hpp|Real FdmExtOUJumpSolver::valueAt(Real x, Real y) const;+| |ql/experimental/finitedifferences/fdmklugeextouop.hpp|FdmKlugeExtOUOp::FdmKlugeExtOUOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<KlugeExtOUProcess> & klugeOUProcess, const ext::shared_ptr<YieldTermStructure> & rTS, const FdmBoundaryConditionSet & bcSet, Size integroIntegrationOrder);+| |ql/experimental/finitedifferences/fdmklugeextouop.hpp|Array FdmKlugeExtOUOp::apply(const Array & r) const;+| |ql/experimental/finitedifferences/fdmklugeextousolver.hpp|FdmKlugeExtOUSolver::FdmKlugeExtOUSolver<N>(Handle<KlugeExtOUProcess> klugeOUProcess, ext::shared_ptr<YieldTermStructure> rTS, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+| |ql/experimental/finitedifferences/fdmklugeextousolver.hpp|Real FdmKlugeExtOUSolver::valueAt(const std::vector<Real> & x) const;+| |ql/experimental/finitedifferences/fdmsimple2dextousolver.hpp|FdmSimple2dExtOUSolver::FdmSimple2dExtOUSolver(const Handle<ExtendedOrnsteinUhlenbeckProcess> & process, ext::shared_ptr<YieldTermStructure> rTS, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+| |ql/experimental/finitedifferences/fdmsimple2dextousolver.hpp|Real FdmSimple2dExtOUSolver::valueAt(Real x, Real y) const;+| |ql/experimental/finitedifferences/fdmsimple3dextoujumpsolver.hpp|FdmSimple3dExtOUJumpSolver::FdmSimple3dExtOUJumpSolver(const Handle<ExtOUWithJumpsProcess> & process, ext::shared_ptr<YieldTermStructure> rTS, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+| |ql/experimental/finitedifferences/fdmsimple3dextoujumpsolver.hpp|Real FdmSimple3dExtOUJumpSolver::valueAt(Real x, Real y, Real z) const;+| |ql/experimental/finitedifferences/fdmspreadpayoffinnervalue.hpp|FdmSpreadPayoffInnerValue::FdmSpreadPayoffInnerValue(ext::shared_ptr<BasketPayoff> payoff, ext::shared_ptr<FdmInnerValueCalculator> calc1, ext::shared_ptr<FdmInnerValueCalculator> calc2);+| |ql/experimental/finitedifferences/fdmvppstartlimitstepcondition.hpp|FdmVPPStartLimitStepCondition::FdmVPPStartLimitStepCondition(const FdmVPPStepConditionParams & params, Size nStarts, const FdmVPPStepConditionMesher & mesh, const ext::shared_ptr<FdmInnerValueCalculator> & gasPrice, const ext::shared_ptr<FdmInnerValueCalculator> & sparkSpreadPrice);+| |ql/experimental/finitedifferences/fdmvppstartlimitstepcondition.hpp|static Size FdmVPPStartLimitStepCondition::nStates(Size tMinUp, Size tMinDown, Size nStarts);+| |ql/experimental/finitedifferences/fdmvppstepcondition.hpp|FdmVPPStepCondition::FdmVPPStepCondition(const FdmVPPStepConditionParams & params, Size nStates, const FdmVPPStepConditionMesher & mesh, ext::shared_ptr<FdmInnerValueCalculator> gasPrice, ext::shared_ptr<FdmInnerValueCalculator> sparkSpreadPrice);+|x|ql/experimental/finitedifferences/fdmvppstepcondition.hpp|Size FdmVPPStepCondition::nStates() const;+| |ql/experimental/finitedifferences/fdmvppstepcondition.hpp|void FdmVPPStepCondition::applyTo(Array & a, Time t) const;+| |ql/experimental/finitedifferences/fdmvppstepcondition.hpp|Real FdmVPPStepCondition::maxValue(const Array & states) const;+| |ql/experimental/finitedifferences/fdmvppstepconditionfactory.hpp|FdmVPPStepConditionFactory::FdmVPPStepConditionFactory(VanillaVPPOption::arguments args);+| |ql/experimental/finitedifferences/fdmvppstepconditionfactory.hpp|ext::shared_ptr<Fdm1dMesher> FdmVPPStepConditionFactory::stateMesher() const;+| |ql/experimental/finitedifferences/fdmvppstepconditionfactory.hpp|ext::shared_ptr<FdmVPPStepCondition> FdmVPPStepConditionFactory::build(const FdmVPPStepConditionMesher & mesh, Real fuelCostAddon, const ext::shared_ptr<FdmInnerValueCalculator> & fuel, const ext::shared_ptr<FdmInnerValueCalculator> & spark) const;+| |ql/experimental/finitedifferences/fdmzabrop.hpp|FdmZabrUnderlyingPart::FdmZabrUnderlyingPart(const ext::shared_ptr<FdmMesher> & mesher, Real beta, Real nu, Real rho, Real gamma);+| |ql/experimental/finitedifferences/fdmzabrop.hpp|void FdmZabrUnderlyingPart::setTime(Time t1, Time t2);+| |ql/experimental/finitedifferences/fdmzabrop.hpp|const TripleBandLinearOp & FdmZabrUnderlyingPart::getMap() const;+| |ql/experimental/finitedifferences/fdmzabrop.hpp|FdmZabrVolatilityPart::FdmZabrVolatilityPart(const ext::shared_ptr<FdmMesher> & mesher, Real beta, Real nu, Real rho, Real gamma);+| |ql/experimental/finitedifferences/fdmzabrop.hpp|void FdmZabrVolatilityPart::setTime(Time t1, Time t2);+| |ql/experimental/finitedifferences/fdmzabrop.hpp|const TripleBandLinearOp & FdmZabrVolatilityPart::getMap() const;+| |ql/experimental/finitedifferences/fdmzabrop.hpp|FdmZabrOp::FdmZabrOp(const ext::shared_ptr<FdmMesher> & mesher, Real beta, Real nu, Real rho, Real gamma = 1.0);+| |ql/experimental/finitedifferences/fdmzabrop.hpp|Array FdmZabrOp::apply(const Array & r) const;+| |ql/experimental/finitedifferences/fdornsteinuhlenbeckvanillaengine.hpp|FdOrnsteinUhlenbeckVanillaEngine::FdOrnsteinUhlenbeckVanillaEngine(ext::shared_ptr<OrnsteinUhlenbeckProcess>, const ext::shared_ptr<YieldTermStructure> & rTS, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, Real epsilon = 0.0001, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+| |ql/experimental/finitedifferences/fdornsteinuhlenbeckvanillaengine.hpp|FdOrnsteinUhlenbeckVanillaEngine::FdOrnsteinUhlenbeckVanillaEngine(ext::shared_ptr<OrnsteinUhlenbeckProcess>, const ext::shared_ptr<YieldTermStructure> & rTS, DividendSchedule dividends, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, Real epsilon = 0.0001, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|x|ql/experimental/finitedifferences/fdornsteinuhlenbeckvanillaengine.hpp|void FdOrnsteinUhlenbeckVanillaEngine::calculate() const;+| |ql/experimental/finitedifferences/fdsimpleextoujumpswingengine.hpp|FdSimpleExtOUJumpSwingEngine::FdSimpleExtOUJumpSwingEngine(ext::shared_ptr<ExtOUWithJumpsProcess> p, ext::shared_ptr<YieldTermStructure> rTS, Size tGrid = 50, Size xGrid = 200, Size yGrid = 50, ext::shared_ptr<Shape> shape = ext::shared_ptr<Shape>(), const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|x|ql/experimental/finitedifferences/fdsimpleextoujumpswingengine.hpp|void FdSimpleExtOUJumpSwingEngine::calculate() const;+| |ql/experimental/finitedifferences/fdsimpleextoustorageengine.hpp|FdSimpleExtOUStorageEngine::FdSimpleExtOUStorageEngine(ext::shared_ptr<ExtendedOrnsteinUhlenbeckProcess> p, ext::shared_ptr<YieldTermStructure> rTS, Size tGrid = 50, Size xGrid = 100, Size yGrid = Null<Size>(), ext::shared_ptr<Shape> shape = ext::shared_ptr<Shape>(), const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|x|ql/experimental/finitedifferences/fdsimpleextoustorageengine.hpp|void FdSimpleExtOUStorageEngine::calculate() const;+| |ql/experimental/finitedifferences/fdsimpleklugeextouvppengine.hpp|FdSimpleKlugeExtOUVPPEngine::FdSimpleKlugeExtOUVPPEngine(ext::shared_ptr<KlugeExtOUProcess> process, ext::shared_ptr<YieldTermStructure> rTS, ext::shared_ptr<Shape> fuelShape, ext::shared_ptr<Shape> powerShape, Real fuelCostAddon, Size tGrid = 1, Size xGrid = 50, Size yGrid = 10, Size gGrid = 20, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|x|ql/experimental/finitedifferences/fdsimpleklugeextouvppengine.hpp|void FdSimpleKlugeExtOUVPPEngine::calculate() const;+|v|ql/experimental/finitedifferences/glued1dmesher.hpp|Glued1dMesher::Glued1dMesher(const Fdm1dMesher & leftMesher, const Fdm1dMesher & rightMesher);+| |ql/experimental/finitedifferences/vanillavppoption.hpp|VanillaVPPOption::VanillaVPPOption(Real heatRate, Real pMin, Real pMax, Size tMinUp, Size tMinDown, Real startUpFuel, Real startUpFixCost, const ext::shared_ptr<SwingExercise> & exercise, Size nStarts = Null<Size>(), Size nRunningHours = Null<Size>());+| |ql/experimental/finitedifferences/vanillavppoption.hpp|arguments::arguments();+| |ql/experimental/finitedifferences/vanillavppoption.hpp|void arguments::validate() const;+|v|ql/experimental/forward/analytichestonforwardeuropeanengine.hpp|AnalyticHestonForwardEuropeanEngine::AnalyticHestonForwardEuropeanEngine(ext::shared_ptr<HestonProcess> process, Size integrationOrder = 144);+|x|ql/experimental/forward/analytichestonforwardeuropeanengine.hpp|void AnalyticHestonForwardEuropeanEngine::calculate() const;+| |ql/experimental/forward/analytichestonforwardeuropeanengine.hpp|Real AnalyticHestonForwardEuropeanEngine::propagator(Time resetTime, Real varReset) const;+|x|ql/experimental/forward/analytichestonforwardeuropeanengine.hpp|ext::shared_ptr<AnalyticHestonEngine> AnalyticHestonForwardEuropeanEngine::forwardChF(Handle<Quote> & spotReset, Real varReset) const;+|v|ql/experimental/inflation/cpicapfloorengines.hpp|InterpolatingCPICapFloorEngine::InterpolatingCPICapFloorEngine(Handle<CPICapFloorTermPriceSurface>);+|x|ql/experimental/inflation/cpicapfloorengines.hpp|void InterpolatingCPICapFloorEngine::calculate() const;+|x|ql/experimental/inflation/cpicapfloorengines.hpp|std::string InterpolatingCPICapFloorEngine::name() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|CPICapFloorTermPriceSurface::CPICapFloorTermPriceSurface(Real nominal, Real baseRate, const Period & observationLag, const Calendar & cal, const BusinessDayConvention & bdc, const DayCounter & dc, ext::shared_ptr<ZeroInflationIndex> zii, CPI::InterpolationType interpolationType, Handle<YieldTermStructure> yts, const std::vector<Rate> & cStrikes, const std::vector<Rate> & fStrikes, const std::vector<Period> & cfMaturities, const Matrix & cPrice, const Matrix & fPrice);+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Period CPICapFloorTermPriceSurface::observationLag() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Frequency CPICapFloorTermPriceSurface::frequency() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Date CPICapFloorTermPriceSurface::baseDate() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Rate CPICapFloorTermPriceSurface::baseRate() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real CPICapFloorTermPriceSurface::nominal() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|BusinessDayConvention CPICapFloorTermPriceSurface::businessDayConvention() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|ext::shared_ptr<ZeroInflationIndex> CPICapFloorTermPriceSurface::zeroInflationIndex() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Rate CPICapFloorTermPriceSurface::atmRate(Date maturity) const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real CPICapFloorTermPriceSurface::price(const Period & d, Rate k) const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real CPICapFloorTermPriceSurface::capPrice(const Period & d, Rate k) const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real CPICapFloorTermPriceSurface::floorPrice(const Period & d, Rate k) const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real CPICapFloorTermPriceSurface::price(const Date & d, Rate k) const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real CPICapFloorTermPriceSurface::capPrice(const Date & d, Rate k) const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real CPICapFloorTermPriceSurface::floorPrice(const Date & d, Rate k) const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|std::vector<Rate> CPICapFloorTermPriceSurface::strikes() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|std::vector<Rate> CPICapFloorTermPriceSurface::capStrikes() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|std::vector<Rate> CPICapFloorTermPriceSurface::floorStrikes() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|std::vector<Period> CPICapFloorTermPriceSurface::maturities() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|const Matrix & CPICapFloorTermPriceSurface::capPrices() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|const Matrix & CPICapFloorTermPriceSurface::floorPrices() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Rate CPICapFloorTermPriceSurface::minStrike() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Rate CPICapFloorTermPriceSurface::maxStrike() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Date CPICapFloorTermPriceSurface::minDate() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Date CPICapFloorTermPriceSurface::cpiOptionDateFromTenor(const Period & p) const;+|v|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|InterpolatedCPICapFloorTermPriceSurface::InterpolatedCPICapFloorTermPriceSurface<Interpolator2D>(Real nominal, Rate startRate, const Period & observationLag, const Calendar & cal, const BusinessDayConvention & bdc, const DayCounter & dc, const ext::shared_ptr<ZeroInflationIndex> & zii, CPI::InterpolationType interpolationType, const Handle<YieldTermStructure> & yts, const std::vector<Rate> & cStrikes, const std::vector<Rate> & fStrikes, const std::vector<Period> & cfMaturities, const Matrix & cPrice, const Matrix & fPrice, const Interpolator2D & interpolator2d = Interpolator2D());+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|void InterpolatedCPICapFloorTermPriceSurface::performCalculations() const;+|x|ql/experimental/inflation/cpicapfloortermpricesurface.hpp|InterpolatedCPICapFloorTermPriceSurface<Interpolator2D>(Real nominal, Rate startRate, const Period & observationLag, const Calendar & cal, const BusinessDayConvention & bdc, const DayCounter & dc, const ext::shared_ptr<ZeroInflationIndex> & zii, CPI::InterpolationType interpolationType, const Handle<YieldTermStructure> & yts, const std::vector<Rate> & cStrikes, const std::vector<Rate> & fStrikes, const std::vector<Period> & cfMaturities, const Matrix & cPrice, const Matrix & fPrice, const Interpolator2D & interpolator2d);+| |ql/experimental/inflation/genericindexes.hpp|GenericRegion::GenericRegion();+| |ql/experimental/inflation/genericindexes.hpp|GenericCPI::GenericCPI(Frequency frequency, bool revised, const Period & lag, const Currency & ccy, const Handle<ZeroInflationTermStructure> & ts = { });+| |ql/experimental/inflation/genericindexes.hpp|YYGenericCPI::YYGenericCPI(Frequency frequency, bool revised, const Period & lag, const Currency & ccy, const Handle<YoYInflationTermStructure> & ts = { });+| |ql/experimental/inflation/interpolatedyoyoptionletstripper.hpp|ObjectiveFunction::ObjectiveFunction(YoYInflationCapFloor::Type type, Real slope, Rate K, Period & lag, Natural fixingDays, const ext::shared_ptr<YoYInflationIndex> & anIndex, const ext::shared_ptr<YoYCapFloorTermPriceSurface> &, ext::shared_ptr<YoYInflationCapFloorEngine> p, Real priceToMatch);+| |ql/experimental/inflation/interpolatedyoyoptionletstripper.hpp|Real ObjectiveFunction::operator()(Volatility guess) const;+| |ql/experimental/inflation/interpolatedyoyoptionletstripper.hpp|ObjectiveFunction(YoYInflationCapFloor::Type type, Real slope, Rate K, Period & lag, Natural fixingDays, const ext::shared_ptr<YoYInflationIndex> & anIndex, const ext::shared_ptr<YoYCapFloorTermPriceSurface> & surf, ext::shared_ptr<YoYInflationCapFloorEngine> p, Real priceToMatch);+|x|ql/experimental/inflation/interpolatedyoyoptionletstripper.hpp|void initialize(const ext::shared_ptr<YoYCapFloorTermPriceSurface> & s, const ext::shared_ptr<YoYInflationCapFloorEngine> & p, const Real slope) const;+|x|ql/experimental/inflation/interpolatedyoyoptionletstripper.hpp|std::pair<std::vector<Rate>, std::vector<Volatility>> slice(const Date & d) const;+|v|ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|KInterpolatedYoYOptionletVolatilitySurface::KInterpolatedYoYOptionletVolatilitySurface<Interpolator1D>(Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc, const Period & lag, const ext::shared_ptr<YoYCapFloorTermPriceSurface> & capFloorPrices, ext::shared_ptr<YoYInflationCapFloorEngine> pricer, ext::shared_ptr<YoYOptionletStripper> yoyOptionletStripper, Real slope, const Interpolator1D & interpolator = Interpolator1D(), VolatilityType volType = ShiftedLognormal, Real displacement = 0.0);+|x|ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|Real KInterpolatedYoYOptionletVolatilitySurface::minStrike() const;+|x|ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|Real KInterpolatedYoYOptionletVolatilitySurface::maxStrike() const;+|x|ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|Date KInterpolatedYoYOptionletVolatilitySurface::maxDate() const;+|x|ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|std::pair<std::vector<Rate>, std::vector<Volatility>> KInterpolatedYoYOptionletVolatilitySurface::Dslice(const Date & d) const;+| |ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|KInterpolatedYoYOptionletVolatilitySurface<Interpolator1D>(const Natural settlementDays, const Calendar & cal, const BusinessDayConvention bdc, const DayCounter & dc, const Period & lag, const ext::shared_ptr<YoYCapFloorTermPriceSurface> & capFloorPrices, ext::shared_ptr<YoYInflationCapFloorEngine> pricer, ext::shared_ptr<YoYOptionletStripper> yoyOptionletStripper, const Real slope, const Interpolator1D & interpolator, VolatilityType volType, Real displacement);+|x|ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|void performCalculations() const;+|x|ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|Volatility volatilityImpl(const Date & d, Rate strike) const;+|x|ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|Volatility volatilityImpl(Time length, Rate strike) const;+|x|ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|void updateSlice(const Date & d) const;+| |ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|static Date YoYInflationVolatilityTraits::initialDate(const YoYOptionletVolatilitySurface * s);+| |ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|static Real YoYInflationVolatilityTraits::initialValue(const YoYOptionletVolatilitySurface * s);+| |ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|static void YoYInflationVolatilityTraits::updateGuess(std::vector<Real> & vols, Real level, Size i);+| |ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|static Size YoYInflationVolatilityTraits::maxIterations();+|x|ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|PiecewiseYoYOptionletVolatilityCurve::PiecewiseYoYOptionletVolatilityCurve<Interpolator, Bootstrap, Traits>(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc, const Period & lag, Frequency frequency, bool indexIsInterpolated, Rate minStrike, Rate maxStrike, Volatility baseYoYVolatility, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, Real accuracy = 1.0e-12, const Interpolator & interpolator = Interpolator());+|x|ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|Date baseDate() const;+|x|ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|Date maxDate() const;+|x|ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|const std::vector<Time> & times() const;+|x|ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|const std::vector<Date> & dates() const;+|x|ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|const std::vector<Real> & data() const;+|x|ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|std::vector<std::pair<Date, Real>> nodes() const;+|x|ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|void performCalculations() const;+|x|ql/experimental/inflation/piecewiseyoyoptionletvolatility.hpp|void update();+| |ql/experimental/inflation/polynomial2Dspline.hpp|Polynomial2DSplineImpl::Polynomial2DSplineImpl<I1, I2, M>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, const I2 & yEnd, const M & zData);+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|YoYCapFloorTermPriceSurface::YoYCapFloorTermPriceSurface(Natural fixingDays, const Period & yyLag, const ext::shared_ptr<YoYInflationIndex> & yii, CPI::InterpolationType interpolation, Handle<YieldTermStructure> nominal, const DayCounter & dc, const Calendar & cal, const BusinessDayConvention & bdc, const std::vector<Rate> & cStrikes, const std::vector<Rate> & fStrikes, const std::vector<Period> & cfMaturities, const Matrix & cPrice, const Matrix & fPrice);+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|bool YoYCapFloorTermPriceSurface::indexIsInterpolated() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Period YoYCapFloorTermPriceSurface::observationLag() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Frequency YoYCapFloorTermPriceSurface::frequency() const;+|v|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|std::pair<std::vector<Time>, std::vector<Rate>> YoYCapFloorTermPriceSurface::atmYoYSwapTimeRates() const;+|v|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|std::pair<std::vector<Date>, std::vector<Rate>> YoYCapFloorTermPriceSurface::atmYoYSwapDateRates() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|ext::shared_ptr<YoYInflationTermStructure> YoYCapFloorTermPriceSurface::YoYTS() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|ext::shared_ptr<YoYInflationIndex> YoYCapFloorTermPriceSurface::yoyIndex() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|BusinessDayConvention YoYCapFloorTermPriceSurface::businessDayConvention() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Natural YoYCapFloorTermPriceSurface::fixingDays() const;+|v|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Date YoYCapFloorTermPriceSurface::baseDate() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Real YoYCapFloorTermPriceSurface::price(const Date & d, Rate k) const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Real YoYCapFloorTermPriceSurface::capPrice(const Date & d, Rate k) const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Real YoYCapFloorTermPriceSurface::floorPrice(const Date & d, Rate k) const;+|v|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Rate YoYCapFloorTermPriceSurface::atmYoYSwapRate(const Date & d, bool extrapolate = true) const;+|v|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Rate YoYCapFloorTermPriceSurface::atmYoYRate(const Date & d, const Period & obsLag = Period(- 1, Days), bool extrapolate = true) const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Real YoYCapFloorTermPriceSurface::price(const Period & d, Rate k) const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Real YoYCapFloorTermPriceSurface::capPrice(const Period & d, Rate k) const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Real YoYCapFloorTermPriceSurface::floorPrice(const Period & d, Rate k) const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Rate YoYCapFloorTermPriceSurface::atmYoYSwapRate(const Period & d, bool extrapolate = true) const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Rate YoYCapFloorTermPriceSurface::atmYoYRate(const Period & d, const Period & obsLag = Period(- 1, Days), bool extrapolate = true) const;+|v|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|std::vector<Rate> YoYCapFloorTermPriceSurface::strikes() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|std::vector<Rate> YoYCapFloorTermPriceSurface::capStrikes() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|std::vector<Rate> YoYCapFloorTermPriceSurface::floorStrikes() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|std::vector<Period> YoYCapFloorTermPriceSurface::maturities() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Rate YoYCapFloorTermPriceSurface::minStrike() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Rate YoYCapFloorTermPriceSurface::maxStrike() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Date YoYCapFloorTermPriceSurface::minMaturity() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Date YoYCapFloorTermPriceSurface::maxMaturity() const;+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Date YoYCapFloorTermPriceSurface::yoyOptionDateFromTenor(const Period & p) const;+|v|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|InterpolatedYoYCapFloorTermPriceSurface::InterpolatedYoYCapFloorTermPriceSurface<Interpolator2D, Interpolator1D>(Natural fixingDays, const Period & yyLag, const ext::shared_ptr<YoYInflationIndex> & yii, CPI::InterpolationType interpolation, const Handle<YieldTermStructure> & nominal, const DayCounter & dc, const Calendar & cal, const BusinessDayConvention & bdc, const std::vector<Rate> & cStrikes, const std::vector<Rate> & fStrikes, const std::vector<Period> & cfMaturities, const Matrix & cPrice, const Matrix & fPrice, const Interpolator2D & interpolator2d = Interpolator2D(), const Interpolator1D & interpolator1d = Interpolator1D());+|x|ql/experimental/inflation/yoycapfloortermpricesurface.hpp|void InterpolatedYoYCapFloorTermPriceSurface::performCalculations() const;+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|ObjectiveFunction::ObjectiveFunction(Time t, const Interpolation2D &, const Interpolation2D &);+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Real ObjectiveFunction::operator()(Rate guess) const;+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|InterpolatedYoYCapFloorTermPriceSurface<Interpolator2D, Interpolator1D>(Natural fixingDays, const Period & yyLag, const ext::shared_ptr<YoYInflationIndex> & yii, CPI::InterpolationType interpolation, const Handle<YieldTermStructure> & nominal, const DayCounter & dc, const Calendar & cal, const BusinessDayConvention & bdc, const std::vector<Rate> & cStrikes, const std::vector<Rate> & fStrikes, const std::vector<Period> & cfMaturities, const Matrix & cPrice, const Matrix & fPrice, const I2D & interpolator2d, const I1D & interpolator1d);+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|void update();+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|ObjectiveFunction(const Time t, const Interpolation2D & a, const Interpolation2D & b);+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Rate price(const Date & d, const Rate k) const;+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Rate capPrice(const Date & d, const Rate k) const;+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Rate floorPrice(const Date & d, const Rate k) const;+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|void intersect() const;+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|void calculateYoYTermStructure() const;+| |ql/experimental/inflation/yoyinflationoptionletvolatilitystructure2.hpp|InterpolatedYoYOptionletVolatilityCurve::InterpolatedYoYOptionletVolatilityCurve<Interpolator1D>(Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc, const Period & lag, Frequency frequency, bool indexIsInterpolated, const std::vector<Date> & d, const std::vector<Volatility> & v, Rate minStrike, Rate maxStrike, const Interpolator1D & i = Interpolator1D());+| |ql/experimental/inflation/yoyinflationoptionletvolatilitystructure2.hpp|const std::vector<Time> & InterpolatedYoYOptionletVolatilityCurve::times() const;+|x|ql/experimental/inflation/yoyinflationoptionletvolatilitystructure2.hpp|const std::vector<Date> & InterpolatedYoYOptionletVolatilityCurve::dates() const;+| |ql/experimental/inflation/yoyinflationoptionletvolatilitystructure2.hpp|const std::vector<Real> & InterpolatedYoYOptionletVolatilityCurve::data() const;+| |ql/experimental/inflation/yoyinflationoptionletvolatilitystructure2.hpp|std::vector<std::pair<Date, Real>> InterpolatedYoYOptionletVolatilityCurve::nodes() const;+| |ql/experimental/inflation/yoyinflationoptionletvolatilitystructure2.hpp|InterpolatedYoYOptionletVolatilityCurve<Interpolator1D>(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc, const Period & lag, Frequency frequency, bool indexIsInterpolated, const std::vector<Date> & d, const std::vector<Volatility> & v, Rate minStrike, Rate maxStrike, const Interpolator1D & i);+| |ql/experimental/inflation/yoyinflationoptionletvolatilitystructure2.hpp|InterpolatedYoYOptionletVolatilityCurve<Interpolator1D>(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc, const Period & lag, Frequency frequency, bool indexIsInterpolated, Rate minStrike, Rate maxStrike, Volatility baseYoYVolatility, const Interpolator1D & i);+| |ql/experimental/inflation/yoyinflationoptionletvolatilitystructure2.hpp|Volatility volatilityImpl(const Time t, Rate) const;+|x|ql/experimental/inflation/yoyoptionlethelpers.hpp|YoYOptionletHelper::YoYOptionletHelper(const Handle<Quote> & price, Real notional, YoYInflationCapFloor::Type capFloorType, Period & lag, DayCounter yoyDayCounter, Calendar paymentCalendar, Natural fixingDays, ext::shared_ptr<YoYInflationIndex> index, CPI::InterpolationType interpolation, Rate strike, Size n, ext::shared_ptr<YoYInflationCapFloorEngine> pricer);+|x|ql/experimental/inflation/yoyoptionlethelpers.hpp|void YoYOptionletHelper::setTermStructure(YoYOptionletVolatilitySurface *);+|x|ql/experimental/inflation/yoyoptionlethelpers.hpp|Real YoYOptionletHelper::impliedQuote() const;+|x|ql/experimental/inflation/yoyoptionletstripper.hpp|void YoYOptionletStripper::initialize(const ext::shared_ptr<YoYCapFloorTermPriceSurface> &, const ext::shared_ptr<YoYInflationCapFloorEngine> &, Real slope) const;+|x|ql/experimental/inflation/yoyoptionletstripper.hpp|Rate YoYOptionletStripper::minStrike() const;+|x|ql/experimental/inflation/yoyoptionletstripper.hpp|Rate YoYOptionletStripper::maxStrike() const;+|x|ql/experimental/inflation/yoyoptionletstripper.hpp|std::vector<Rate> YoYOptionletStripper::strikes() const;+|x|ql/experimental/inflation/yoyoptionletstripper.hpp|std::pair<std::vector<Rate>, std::vector<Volatility>> YoYOptionletStripper::slice(const Date & d) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedBinomialTree::ExtendedBinomialTree<T>(const ext::shared_ptr<StochasticProcess1D> & process, Time end, Size steps);+| |ql/experimental/lattices/extendedbinomialtree.hpp|Size ExtendedBinomialTree::size(Size i) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|Size ExtendedBinomialTree::descendant(Size, Size index, Size branch) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedEqualProbabilitiesBinomialTree::ExtendedEqualProbabilitiesBinomialTree<T>(const ext::shared_ptr<StochasticProcess1D> & process, Time end, Size steps);+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedEqualProbabilitiesBinomialTree::underlying(Size i, Size index) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedEqualProbabilitiesBinomialTree::probability(Size, Size, Size) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedEqualJumpsBinomialTree::ExtendedEqualJumpsBinomialTree<T>(const ext::shared_ptr<StochasticProcess1D> & process, Time end, Size steps);+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedEqualJumpsBinomialTree::underlying(Size i, Size index) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedEqualJumpsBinomialTree::probability(Size i, Size, Size branch) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedJarrowRudd::ExtendedJarrowRudd(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedCoxRossRubinstein::ExtendedCoxRossRubinstein(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedAdditiveEQPBinomialTree::ExtendedAdditiveEQPBinomialTree(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedTrigeorgis::ExtendedTrigeorgis(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedTian::ExtendedTian(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedTian::underlying(Size i, Size index) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedTian::probability(Size, Size, Size branch) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedLeisenReimer::ExtendedLeisenReimer(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedLeisenReimer::underlying(Size i, Size index) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedLeisenReimer::probability(Size, Size, Size branch) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|ExtendedJoshi4::ExtendedJoshi4(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedJoshi4::underlying(Size i, Size index) const;+| |ql/experimental/lattices/extendedbinomialtree.hpp|Real ExtendedJoshi4::probability(Size, Size, Size branch) const;+| |ql/experimental/math/claytoncopularng.hpp|ClaytonCopulaRng::ClaytonCopulaRng<RNG>(const RNG & uniformGenerator, Real theta);+| |ql/experimental/math/claytoncopularng.hpp|sample_type ClaytonCopulaRng::next() const;+| |ql/experimental/math/claytoncopularng.hpp|ClaytonCopulaRng<RNG>(const RNG & ug, Real th);+| |ql/experimental/math/claytoncopularng.hpp|typename ClaytonCopulaRng<RNG>::sample_type next() const;+| |ql/experimental/math/convolvedstudentt.hpp|CumulativeBehrensFisher::CumulativeBehrensFisher(const std::vector<Integer> & degreesFreedom = std::vector<Integer>(), const std::vector<Real> & factors = std::vector<Real>());+|x|ql/experimental/math/convolvedstudentt.hpp|const std::vector<Integer> & CumulativeBehrensFisher::degreeFreedom() const;+|x|ql/experimental/math/convolvedstudentt.hpp|const std::vector<Real> & CumulativeBehrensFisher::factors() const;+| |ql/experimental/math/convolvedstudentt.hpp|Probability CumulativeBehrensFisher::operator()(Real x) const;+| |ql/experimental/math/convolvedstudentt.hpp|Probability CumulativeBehrensFisher::density(Real x) const;+| |ql/experimental/math/convolvedstudentt.hpp|InverseCumulativeBehrensFisher::InverseCumulativeBehrensFisher(const std::vector<Integer> & degreesFreedom = std::vector<Integer>(), const std::vector<Real> & factors = std::vector<Real>(), Real accuracy = 1.e-6);+| |ql/experimental/math/convolvedstudentt.hpp|Real InverseCumulativeBehrensFisher::operator()(Probability q) const;+| |ql/experimental/math/farliegumbelmorgensterncopularng.hpp|FarlieGumbelMorgensternCopulaRng::FarlieGumbelMorgensternCopulaRng<RNG>(const RNG & uniformGenerator, Real theta);+| |ql/experimental/math/farliegumbelmorgensterncopularng.hpp|sample_type FarlieGumbelMorgensternCopulaRng::next() const;+| |ql/experimental/math/farliegumbelmorgensterncopularng.hpp|FarlieGumbelMorgensternCopulaRng<RNG>(const RNG & ug, Real th);+| |ql/experimental/math/farliegumbelmorgensterncopularng.hpp|typename FarlieGumbelMorgensternCopulaRng<RNG>::sample_type next() const;+| |ql/experimental/math/fireflyalgorithm.hpp|FireflyAlgorithm::FireflyAlgorithm(Size M, ext::shared_ptr<Intensity> intensity, ext::shared_ptr<RandomWalk> randomWalk, Size Mde = 0, Real mutationFactor = 1.0, Real crossoverFactor = 0.5, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/fireflyalgorithm.hpp|void FireflyAlgorithm::startState(Problem & P, const EndCriteria & endCriteria);+| |ql/experimental/math/fireflyalgorithm.hpp|void Intensity::findBrightest();+| |ql/experimental/math/fireflyalgorithm.hpp|ExponentialIntensity::ExponentialIntensity(Real beta0, Real betaMin, Real gamma);+| |ql/experimental/math/fireflyalgorithm.hpp|InverseLawSquareIntensity::InverseLawSquareIntensity(Real beta0, Real betaMin);+| |ql/experimental/math/fireflyalgorithm.hpp|void RandomWalk::walk();+| |ql/experimental/math/fireflyalgorithm.hpp|DistributionRandomWalk::DistributionRandomWalk<Distribution>(Distribution dist, Real delta = 0.9, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/fireflyalgorithm.hpp|GaussianWalk::GaussianWalk(Real sigma, Real delta = 0.9, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/fireflyalgorithm.hpp|LevyFlightWalk::LevyFlightWalk(Real alpha, Real xm = 0.5, Real delta = 0.9, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/fireflyalgorithm.hpp|DecreasingGaussianWalk::DecreasingGaussianWalk(Real sigma, Real delta = 0.9, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/frankcopularng.hpp|FrankCopulaRng::FrankCopulaRng<RNG>(const RNG & uniformGenerator, Real theta);+| |ql/experimental/math/frankcopularng.hpp|sample_type FrankCopulaRng::next() const;+| |ql/experimental/math/frankcopularng.hpp|FrankCopulaRng<RNG>(const RNG & ug, Real th);+| |ql/experimental/math/frankcopularng.hpp|typename FrankCopulaRng<RNG>::sample_type next() const;+| |ql/experimental/math/gaussiancopulapolicy.hpp|GaussianCopulaPolicy::GaussianCopulaPolicy(const std::vector<std::vector<Real>> & factorWeights = std::vector<std::vector<Real>>(), const initTraits & dummy = int());+| |ql/experimental/math/gaussiancopulapolicy.hpp|Size GaussianCopulaPolicy::numFactors() const;+| |ql/experimental/math/gaussiancopulapolicy.hpp|initTraits GaussianCopulaPolicy::getInitTraits() const;+| |ql/experimental/math/gaussiancopulapolicy.hpp|Probability GaussianCopulaPolicy::cumulativeY(Real val, Size iVariable) const;+| |ql/experimental/math/gaussiancopulapolicy.hpp|Probability GaussianCopulaPolicy::cumulativeZ(Real z) const;+| |ql/experimental/math/gaussiancopulapolicy.hpp|Probability GaussianCopulaPolicy::density(const std::vector<Real> & m) const;+| |ql/experimental/math/gaussiancopulapolicy.hpp|Real GaussianCopulaPolicy::inverseCumulativeY(Probability p, Size iVariable) const;+| |ql/experimental/math/gaussiancopulapolicy.hpp|Real GaussianCopulaPolicy::inverseCumulativeZ(Probability p) const;+| |ql/experimental/math/gaussiancopulapolicy.hpp|Real GaussianCopulaPolicy::inverseCumulativeDensity(Probability p, Size iFactor) const;+| |ql/experimental/math/gaussiancopulapolicy.hpp|std::vector<Real> GaussianCopulaPolicy::allFactorCumulInverter(const std::vector<Real> & probs) const;+| |ql/experimental/math/gaussiannoncentralchisquaredpolynomial.hpp|GaussNonCentralChiSquaredPolynomial::GaussNonCentralChiSquaredPolynomial(Real nu, Real lambda);+| |ql/experimental/math/gaussiannoncentralchisquaredpolynomial.hpp|Real GaussNonCentralChiSquaredPolynomial::w(Real x) const;+| |ql/experimental/math/gaussiannoncentralchisquaredpolynomial.hpp|Real GaussNonCentralChiSquaredPolynomial::moment(Size i) const;+| |ql/experimental/math/hybridsimulatedannealing.hpp|HybridSimulatedAnnealing::HybridSimulatedAnnealing<Sampler, Probability, Temperature, Reannealing>(const Sampler & sampler, const Probability & probability, Temperature temperature, const Reannealing & reannealing = ReannealingTrivial(), Real startTemperature = 200.0, Real endTemperature = 0.01, Size reAnnealSteps = 50, ResetScheme resetScheme = ResetToBestPoint, Size resetSteps = 150, const ext::shared_ptr<OptimizationMethod> & localOptimizer = ext::make_shared<LevenbergMarquardt>(), LocalOptimizeScheme optimizeScheme = EveryBestPoint);+| |ql/experimental/math/hybridsimulatedannealing.hpp|EndCriteria::Type minimize(Problem & P, const EndCriteria & endCriteria);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|SamplerLogNormal::SamplerLogNormal(unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void SamplerLogNormal::operator()(Array & newPoint, const Array & currentPoint, const Array & temp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|SamplerGaussian::SamplerGaussian(unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void SamplerGaussian::operator()(Array & newPoint, const Array & currentPoint, const Array & temp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|SamplerRingGaussian::SamplerRingGaussian(Array lower, Array upper, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void SamplerRingGaussian::operator()(Array & newPoint, const Array & currentPoint, const Array & temp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|SamplerMirrorGaussian::SamplerMirrorGaussian(Array lower, Array upper, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void SamplerMirrorGaussian::operator()(Array & newPoint, const Array & currentPoint, const Array & temp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|SamplerCauchy::SamplerCauchy(unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void SamplerCauchy::operator()(Array & newPoint, const Array & currentPoint, const Array & temp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|SamplerVeryFastAnnealing::SamplerVeryFastAnnealing(Array lower, Array upper, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void SamplerVeryFastAnnealing::operator()(Array & newPoint, const Array & currentPoint, const Array & temp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|bool ProbabilityAlwaysDownhill::operator()(Real currentValue, Real newValue, const Array & temp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|ProbabilityBoltzmann::ProbabilityBoltzmann(unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|bool ProbabilityBoltzmann::operator()(Real currentValue, Real newValue, const Array & temp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|ProbabilityBoltzmannDownhill::ProbabilityBoltzmannDownhill(unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|bool ProbabilityBoltzmannDownhill::operator()(Real currentValue, Real newValue, const Array & temp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|TemperatureBoltzmann::TemperatureBoltzmann(Real initialTemp, Size dimension);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void TemperatureBoltzmann::operator()(Array & newTemp, const Array & currTemp, const Array & steps);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|TemperatureCauchy::TemperatureCauchy(Real initialTemp, Size dimension);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void TemperatureCauchy::operator()(Array & newTemp, const Array & currTemp, const Array & steps);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|TemperatureCauchy1D::TemperatureCauchy1D(Real initialTemp, Size dimension);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void TemperatureCauchy1D::operator()(Array & newTemp, const Array & currTemp, const Array & steps);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|TemperatureExponential::TemperatureExponential(Real initialTemp, Size dimension, Real power = 0.95);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void TemperatureExponential::operator()(Array & newTemp, const Array & currTemp, const Array & steps);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|TemperatureVeryFastAnnealing::TemperatureVeryFastAnnealing(Real initialTemp, Real finalTemp, Real maxSteps, Size dimension);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void TemperatureVeryFastAnnealing::operator()(Array & newTemp, const Array & currTemp, const Array & steps);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|ReannealingTrivial::ReannealingTrivial();+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void ReannealingTrivial::setProblem(Problem & P);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void ReannealingTrivial::operator()(Array & steps, const Array & currentPoint, Real aCurrentValue, const Array & currTemp);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|ReannealingFiniteDifferences::ReannealingFiniteDifferences(Real initialTemp, Size dimension, const Array & lower = Array(), const Array & upper = Array(), Real stepSize = 1e-7, Real minSize = 1e-10, Real functionTol = 1e-10);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void ReannealingFiniteDifferences::setProblem(Problem & P);+| |ql/experimental/math/hybridsimulatedannealingfunctors.hpp|void ReannealingFiniteDifferences::operator()(Array & steps, const Array & currentPoint, Real currentValue, const Array & currTemp);+| |ql/experimental/math/isotropicrandomwalk.hpp|IsotropicRandomWalk::IsotropicRandomWalk<Distribution, Engine>(Engine eng, Distribution dist, Size dim, Array weights = Array(), unsigned long seed = 0);+| |ql/experimental/math/isotropicrandomwalk.hpp|void IsotropicRandomWalk::setDimension(Size dim);+| |ql/experimental/math/isotropicrandomwalk.hpp|void IsotropicRandomWalk::setDimension(Size dim, const Array & weights);+| |ql/experimental/math/isotropicrandomwalk.hpp|void IsotropicRandomWalk::setDimension(Size dim, const Array & lowerBound, const Array & upperBound);+| |ql/experimental/math/laplaceinterpolation.hpp|LaplaceInterpolation::LaplaceInterpolation(std::function<Real (const std::vector<Size> &)> y, std::vector<std::vector<Real>> x, Real relTol = 1E-6, Size maxIterMultiplier = 10);+| |ql/experimental/math/laplaceinterpolation.hpp|Real LaplaceInterpolation::operator()(const std::vector<Size> & coordinates) const;+| |ql/experimental/math/laplaceinterpolation.hpp|void laplaceInterpolation(Matrix & A, const std::vector<Real> & x = { }, const std::vector<Real> & y = { }, Real relTol = 1E-6, Size maxIterMultiplier = 10);+| |ql/experimental/math/latentmodel.hpp|std::vector<Real> multiplyV::operator()(Real d, std::vector<Real> v);+| |ql/experimental/math/latentmodel.hpp|Real LMIntegration::integrate(const std::function<Real (const std::vector<Real> &)> & f) const;+| |ql/experimental/math/latentmodel.hpp|std::vector<Real> LMIntegration::integrateV(const std::function<std::vector<Real> (const std::vector<Real> &)> & f) const;+| |ql/experimental/math/latentmodel.hpp|IntegrationBase::IntegrationBase(Size dimension, Size order);+| |ql/experimental/math/latentmodel.hpp|IntegrationBase::IntegrationBase(const std::vector<ext::shared_ptr<Integrator>> & integrators, Real a, Real b);+| |ql/experimental/math/latentmodel.hpp|Probability LatentModel::cumulativeY(Real val, Size iVariable) const;+| |ql/experimental/math/latentmodel.hpp|Probability LatentModel::cumulativeZ(Real z) const;+| |ql/experimental/math/latentmodel.hpp|Probability LatentModel::density(const std::vector<Real> & m) const;+| |ql/experimental/math/latentmodel.hpp|Real LatentModel::inverseCumulativeDensity(Probability p, Size iFactor) const;+| |ql/experimental/math/latentmodel.hpp|Real LatentModel::inverseCumulativeY(Probability p, Size iVariable) const;+| |ql/experimental/math/latentmodel.hpp|Real LatentModel::inverseCumulativeZ(Probability p) const;+| |ql/experimental/math/latentmodel.hpp|std::vector<Real> LatentModel::allFactorCumulInverter(const std::vector<Real> & probs) const;+| |ql/experimental/math/latentmodel.hpp|Real LatentModel::latentVarValue(const std::vector<Real> & allFactors, Size iVar) const;+| |ql/experimental/math/latentmodel.hpp|const copulaType & LatentModel::copula() const;+| |ql/experimental/math/latentmodel.hpp|FactorSampler::FactorSampler<USNG, value-parameter-1-1>(const copulaType & copula, BigNatural seed = 0);+| |ql/experimental/math/latentmodel.hpp|const sample_type & FactorSampler::nextSequence() const;+| |ql/experimental/math/latentmodel.hpp|static ext::shared_ptr<LMIntegration> IntegrationFactory::createLMIntegration(Size dimension, LatentModelIntegrationType::LatentModelIntegrationType type = # ifndef QL_PATCH_SOLARIS LatentModelIntegrationType::GaussianQuadrature);+| |ql/experimental/math/latentmodel.hpp|Size LatentModel::size() const;+| |ql/experimental/math/latentmodel.hpp|Size LatentModel::numFactors() const;+| |ql/experimental/math/latentmodel.hpp|Size LatentModel::numTotalFactors() const;+| |ql/experimental/math/latentmodel.hpp|LatentModel::LatentModel<copulaPolicyImpl>(const std::vector<std::vector<Real>> & factorsWeights, const typename copulaType::initTraits & ini = typename copulaType::initTraits());+| |ql/experimental/math/latentmodel.hpp|LatentModel::LatentModel<copulaPolicyImpl>(const std::vector<Real> & factorsWeight, const typename copulaType::initTraits & ini = typename copulaType::initTraits());+| |ql/experimental/math/latentmodel.hpp|LatentModel::LatentModel<copulaPolicyImpl>(Real correlSqr, Size nVariables, const typename copulaType::initTraits & ini = typename copulaType::initTraits());+| |ql/experimental/math/latentmodel.hpp|LatentModel::LatentModel<copulaPolicyImpl>(const Handle<Quote> & singleFactorCorrel, Size nVariables, const typename copulaType::initTraits & ini = typename copulaType::initTraits());+| |ql/experimental/math/latentmodel.hpp|const std::vector<std::vector<Real>> & LatentModel::factorWeights() const;+| |ql/experimental/math/latentmodel.hpp|const std::vector<Real> & LatentModel::idiosyncFctrs() const;+| |ql/experimental/math/latentmodel.hpp|Real LatentModel::latentVariableCorrel(Size iVar1, Size iVar2) const;+| |ql/experimental/math/latentmodel.hpp|Real LatentModel::integratedExpectedValue(const std::function<Real (const std::vector<Real> &)> & f) const;+| |ql/experimental/math/latentmodel.hpp|std::vector<Real> LatentModel::integratedExpectedValueV(const std::function<std::vector<Real> (const std::vector<Real> &)> & f) const;+| |ql/experimental/math/latentmodel.hpp|LatentModel<copulaPolicyImpl>(const std::vector<std::vector<Real>> & factorWeights, const typename Impl::initTraits & ini);+| |ql/experimental/math/latentmodel.hpp|LatentModel<copulaPolicyImpl>(const std::vector<Real> & factorWeights, const typename Impl::initTraits & ini);+| |ql/experimental/math/latentmodel.hpp|LatentModel<copulaPolicyImpl>(const Real correlSqr, Size nVariables, const typename Impl::initTraits & ini);+| |ql/experimental/math/latentmodel.hpp|LatentModel<copulaPolicyImpl>(const Handle<Quote> & singleFactorCorrel, Size nVariables, const typename Impl::initTraits & ini);+| |ql/experimental/math/latentmodel.hpp|void update();+| |ql/experimental/math/latentmodel.hpp|FactorSampler<RandomSequenceGenerator<BoxMullerGaussianRng<URNG>>, dummy>(const GaussianCopulaPolicy & copula, BigNatural seed = 0);+| |ql/experimental/math/latentmodel.hpp|FactorSampler<RandomSequenceGenerator<PolarStudentTRng<URNG>>, dummy>(const TCopulaPolicy & copula, BigNatural seed = 0);+| |ql/experimental/math/levyflightdistribution.hpp|param_type::param_type(Real xm = 1.0, Real alpha = 1.0);+|x|ql/experimental/math/levyflightdistribution.hpp|Real param_type::xm() const;+|x|ql/experimental/math/levyflightdistribution.hpp|Real param_type::alpha() const;+| |ql/experimental/math/levyflightdistribution.hpp|LevyFlightDistribution::LevyFlightDistribution(Real xm = 1.0, Real alpha = 1.0);+| |ql/experimental/math/levyflightdistribution.hpp|LevyFlightDistribution::LevyFlightDistribution(const param_type & parm);+| |ql/experimental/math/levyflightdistribution.hpp|Real LevyFlightDistribution::xm() const;+| |ql/experimental/math/levyflightdistribution.hpp|Real LevyFlightDistribution::alpha() const;+| |ql/experimental/math/levyflightdistribution.hpp|Real LevyFlightDistribution::min() const;+| |ql/experimental/math/levyflightdistribution.hpp|Real LevyFlightDistribution::max() const;+| |ql/experimental/math/levyflightdistribution.hpp|param_type LevyFlightDistribution::param() const;+| |ql/experimental/math/levyflightdistribution.hpp|void LevyFlightDistribution::param(const param_type & parm);+| |ql/experimental/math/levyflightdistribution.hpp|void LevyFlightDistribution::reset();+| |ql/experimental/math/levyflightdistribution.hpp|Real LevyFlightDistribution::operator()(Real x) const;+| |ql/experimental/math/moorepenroseinverse.hpp|Matrix moorePenroseInverse(const Matrix & A, const Real tol = Null<Real>());+| |ql/experimental/math/multidimintegrator.hpp|MultidimIntegral::MultidimIntegral(const std::vector<ext::shared_ptr<Integrator>> & integrators);+| |ql/experimental/math/multidimintegrator.hpp|Real MultidimIntegral::operator()(const std::function<Real (const std::vector<Real> &)> & f, const std::vector<Real> & a, const std::vector<Real> & b) const;+| |ql/experimental/math/multidimintegrator.hpp|Real vectorBinder(const std::function<Real (const std::vector<Real> &)> & f, Real z, const std::vector<Real> & a, const std::vector<Real> & b) const;+| |ql/experimental/math/multidimintegrator.hpp|void spawnFcts() const;+| |ql/experimental/math/multidimquadrature.hpp|VectorIntegrator::VectorIntegrator(Size n, Real mu = 0.0);+| |ql/experimental/math/multidimquadrature.hpp|GaussianQuadMultidimIntegrator::GaussianQuadMultidimIntegrator(Size dimension, Size quadOrder, Real mu = 0.);+| |ql/experimental/math/multidimquadrature.hpp|Size GaussianQuadMultidimIntegrator::order() const;+| |ql/experimental/math/multidimquadrature.hpp|Real operator()(const std::function<Real (const std::vector<Real> &)> & f) const;+| |ql/experimental/math/multidimquadrature.hpp|Real integrate(const std::function<Real (const std::vector<Real> &)> & f) const;+| |ql/experimental/math/multidimquadrature.hpp|std::vector<Real> integrate(const std::function<std::vector<Real> (const std::vector<Real> &)> & f) const;+| |ql/experimental/math/multidimquadrature.hpp|Real scalarIntegrator(const std::function<Real (const std::vector<Real> &)> & f, const Real mFctr) const;+| |ql/experimental/math/multidimquadrature.hpp|std::vector<Real> vectorIntegratorVR(const std::function<std::vector<Real> (const std::vector<Real> &)> & f, const Real mFctr) const;+| |ql/experimental/math/multidimquadrature.hpp|void spawnFcts() const;+| |ql/experimental/math/particleswarmoptimization.hpp|ParticleSwarmOptimization::ParticleSwarmOptimization(Size M, ext::shared_ptr<Topology> topology, ext::shared_ptr<Inertia> inertia, Real c1 = 2.05, Real c2 = 2.05, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/particleswarmoptimization.hpp|ParticleSwarmOptimization::ParticleSwarmOptimization(Size M, ext::shared_ptr<Topology> topology, ext::shared_ptr<Inertia> inertia, Real omega, Real c1, Real c2, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/particleswarmoptimization.hpp|void ParticleSwarmOptimization::startState(Problem & P, const EndCriteria & endCriteria);+| |ql/experimental/math/particleswarmoptimization.hpp|void Inertia::setSize(Size M, Size N, Real c0, const EndCriteria & endCriteria);+| |ql/experimental/math/particleswarmoptimization.hpp|void Inertia::setValues();+| |ql/experimental/math/particleswarmoptimization.hpp|SimpleRandomInertia::SimpleRandomInertia(Real threshold = 0.5, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/particleswarmoptimization.hpp|DecreasingInertia::DecreasingInertia(Real threshold = 0.5);+| |ql/experimental/math/particleswarmoptimization.hpp|AdaptiveInertia::AdaptiveInertia(Real minInertia, Real maxInertia, Size sh = 5, Size sl = 2);+| |ql/experimental/math/particleswarmoptimization.hpp|LevyFlightInertia::LevyFlightInertia(Real alpha, Size threshold, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/particleswarmoptimization.hpp|void Topology::setSize(Size M);+| |ql/experimental/math/particleswarmoptimization.hpp|void Topology::findSocialBest();+| |ql/experimental/math/particleswarmoptimization.hpp|KNeighbors::KNeighbors(Size K = 1);+| |ql/experimental/math/particleswarmoptimization.hpp|ClubsTopology::ClubsTopology(Size defaultClubs, Size totalClubs, Size maxClubs, Size minClubs, Size resetIteration, unsigned long seed = SeedGenerator::instance().get());+| |ql/experimental/math/piecewiseintegral.hpp|PiecewiseIntegral::PiecewiseIntegral(ext::shared_ptr<Integrator> integrator, std::vector<Real> criticalPoints, bool avoidCriticalPoints = true);+| |ql/experimental/math/piecewiseintegral.hpp|Real integrate_h(const std::function<Real (Real)> & f, Real a, Real b) const;+| |ql/experimental/math/piecewiseintegral.hpp|Real integrate(const std::function<Real (Real)> & f, Real a, Real b) const;+| |ql/experimental/math/polarstudenttrng.hpp|PolarStudentTRng::PolarStudentTRng<URNG>(Real degFreedom, BigNatural seed = 0);+| |ql/experimental/math/polarstudenttrng.hpp|PolarStudentTRng::PolarStudentTRng<URNG>(Real degFreedom, const URNG & urng);+| |ql/experimental/math/polarstudenttrng.hpp|sample_type PolarStudentTRng::next() const;+| |ql/experimental/math/polarstudenttrng.hpp|typename PolarStudentTRng<URNG>::sample_type next() const;+| |ql/experimental/math/tcopulapolicy.hpp|TCopulaPolicy::TCopulaPolicy(const std::vector<std::vector<Real>> & factorWeights = std::vector<std::vector<Real>>(), const initTraits & vals = initTraits());+| |ql/experimental/math/tcopulapolicy.hpp|Size TCopulaPolicy::numFactors() const;+| |ql/experimental/math/tcopulapolicy.hpp|initTraits TCopulaPolicy::getInitTraits() const;+| |ql/experimental/math/tcopulapolicy.hpp|const std::vector<Real> & TCopulaPolicy::varianceFactors() const;+| |ql/experimental/math/tcopulapolicy.hpp|Probability TCopulaPolicy::cumulativeY(Real val, Size iVariable) const;+| |ql/experimental/math/tcopulapolicy.hpp|Probability TCopulaPolicy::cumulativeZ(Real z) const;+| |ql/experimental/math/tcopulapolicy.hpp|Probability TCopulaPolicy::density(const std::vector<Real> & m) const;+| |ql/experimental/math/tcopulapolicy.hpp|Real TCopulaPolicy::inverseCumulativeY(Probability p, Size iVariable) const;+| |ql/experimental/math/tcopulapolicy.hpp|Real TCopulaPolicy::inverseCumulativeZ(Probability p) const;+| |ql/experimental/math/tcopulapolicy.hpp|Real TCopulaPolicy::inverseCumulativeDensity(Probability p, Size iFactor) const;+| |ql/experimental/math/tcopulapolicy.hpp|std::vector<Real> TCopulaPolicy::allFactorCumulInverter(const std::vector<Real> & probs) const;+| |ql/experimental/math/zigguratrng.hpp|ZigguratRng::ZigguratRng(unsigned long seed = 0);+| |ql/experimental/math/zigguratrng.hpp|sample_type ZigguratRng::next() const;+| |ql/experimental/math/zigguratrng.hpp|static rsg_type Ziggurat::make_sequence_generator(Size dimension, BigNatural seed);+| |ql/experimental/mcbasket/adaptedpathpayoff.hpp|Size ValuationData::numberOfTimes() const;+| |ql/experimental/mcbasket/adaptedpathpayoff.hpp|Size ValuationData::numberOfAssets() const;+| |ql/experimental/mcbasket/adaptedpathpayoff.hpp|Real ValuationData::getAssetValue(Size time, Size asset);+| |ql/experimental/mcbasket/adaptedpathpayoff.hpp|const Handle<YieldTermStructure> & ValuationData::getYieldTermStructure(Size time);+| |ql/experimental/mcbasket/adaptedpathpayoff.hpp|void ValuationData::setPayoffValue(Size time, Real value);+| |ql/experimental/mcbasket/adaptedpathpayoff.hpp|void ValuationData::setExerciseData(Size time, Real exercise, Array & state);+| |ql/experimental/mcbasket/longstaffschwartzmultipathpricer.hpp|LongstaffSchwartzMultiPathPricer::LongstaffSchwartzMultiPathPricer(const ext::shared_ptr<PathPayoff> & payoff, const std::vector<Size> & timePositions, std::vector<Handle<YieldTermStructure>> forwardTermStructure, Array discounts, Size polynomialOrder, LsmBasisSystem::PolynomialType polynomialType);+| |ql/experimental/mcbasket/longstaffschwartzmultipathpricer.hpp|Real LongstaffSchwartzMultiPathPricer::operator()(const MultiPath & multiPath) const;+| |ql/experimental/mcbasket/longstaffschwartzmultipathpricer.hpp|void LongstaffSchwartzMultiPathPricer::calibrate();+| |ql/experimental/mcbasket/longstaffschwartzmultipathpricer.hpp|PathInfo::PathInfo(Size numberOfTimes);+| |ql/experimental/mcbasket/longstaffschwartzmultipathpricer.hpp|Size PathInfo::pathLength() const;+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MCAmericanPathEngine::MCAmericanPathEngine<RNG>(const ext::shared_ptr<StochasticProcessArray> &, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size nCalibrationSamples = Null<Size>());+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine::MakeMCAmericanPathEngine<RNG>(ext::shared_ptr<StochasticProcessArray>);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withSteps(Size steps);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withStepsPerYear(Size steps);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withBrownianBridge(bool b = true);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withAntitheticVariate(bool b = true);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withControlVariate(bool b = true);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withSamples(Size samples);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withAbsoluteTolerance(Real tolerance);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withMaxSamples(Size samples);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withSeed(BigNatural seed);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & MakeMCAmericanPathEngine::withCalibrationSamples(Size samples);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MCAmericanPathEngine<RNG>(const ext::shared_ptr<StochasticProcessArray> & processes, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size nCalibrationSamples);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|ext::shared_ptr<LongstaffSchwartzMultiPathPricer> lsmPathPricer() const;+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG>(ext::shared_ptr<StochasticProcessArray> process);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withBrownianBridge(bool brownianBridge);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withAntitheticVariate(bool b);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withControlVariate(bool b);+| |ql/experimental/mcbasket/mclongstaffschwartzpathengine.hpp|MCLongstaffSchwartzPathEngine::MCLongstaffSchwartzPathEngine<GenericEngine, MC, RNG, S>(ext::shared_ptr<StochasticProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size nCalibrationSamples = Null<Size>());+|x|ql/experimental/mcbasket/mclongstaffschwartzpathengine.hpp|void MCLongstaffSchwartzPathEngine::calculate() const;+| |ql/experimental/mcbasket/mclongstaffschwartzpathengine.hpp|MCLongstaffSchwartzPathEngine<GenericEngine, MC, RNG, S>(ext::shared_ptr<StochasticProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size nCalibrationSamples);+| |ql/experimental/mcbasket/mclongstaffschwartzpathengine.hpp|ext::shared_ptr<typename MCLongstaffSchwartzPathEngine<GenericEngine, MC, RNG, S>::path_pricer_type> pathPricer() const;+|?|ql/experimental/mcbasket/mclongstaffschwartzpathengine.hpp|TimeGrid timeGrid() const;+|?|ql/experimental/mcbasket/mclongstaffschwartzpathengine.hpp|ext::shared_ptr<typename MCLongstaffSchwartzPathEngine<GenericEngine, MC, RNG, S>::path_generator_type> pathGenerator() const;+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MCPathBasketEngine::MCPathBasketEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/experimental/mcbasket/mcpathbasketengine.hpp|void MCPathBasketEngine::calculate() const;+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|EuropeanPathMultiPathPricer::EuropeanPathMultiPathPricer(ext::shared_ptr<PathPayoff> & payoff, std::vector<Size> timePositions, std::vector<Handle<YieldTermStructure>> forwardTermStructures, Array discounts);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|Real EuropeanPathMultiPathPricer::operator()(const MultiPath & multiPath) const;+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MCPathBasketEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|?|ql/experimental/mcbasket/mcpathbasketengine.hpp|ext::shared_ptr<typename MCPathBasketEngine<RNG, S>::path_generator_type> pathGenerator() const;+|?|ql/experimental/mcbasket/mcpathbasketengine.hpp|TimeGrid timeGrid() const;+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|ext::shared_ptr<typename MCPathBasketEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine::MakeMCPathBasketEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & MakeMCPathBasketEngine::withSteps(Size steps);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & MakeMCPathBasketEngine::withStepsPerYear(Size steps);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & MakeMCPathBasketEngine::withBrownianBridge(bool b = true);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & MakeMCPathBasketEngine::withSamples(Size samples);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & MakeMCPathBasketEngine::withAbsoluteTolerance(Real tolerance);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & MakeMCPathBasketEngine::withMaxSamples(Size samples);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & MakeMCPathBasketEngine::withSeed(BigNatural seed);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & MakeMCPathBasketEngine::withAntitheticVariate(bool b = true);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & MakeMCPathBasketEngine::withControlVariate(bool b = true);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> process);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & withAntitheticVariate(bool b);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & withControlVariate(bool b);+| |ql/experimental/mcbasket/pathmultiassetoption.hpp|PathMultiAssetOption::PathMultiAssetOption(const ext::shared_ptr<PricingEngine> & engine = ext::shared_ptr<PricingEngine>());+| |ql/experimental/mcbasket/pathmultiassetoption.hpp|ext::shared_ptr<PathPayoff> PathMultiAssetOption::pathPayoff() const;+| |ql/experimental/mcbasket/pathmultiassetoption.hpp|std::vector<Date> PathMultiAssetOption::fixingDates() const;+| |ql/experimental/mcbasket/pathmultiassetoption.hpp|arguments::arguments();+| |ql/experimental/mcbasket/pathmultiassetoption.hpp|void arguments::validate() const;+| |ql/experimental/mcbasket/pathmultiassetoption.hpp|void results::reset();+| |ql/experimental/mcbasket/pathpayoff.hpp|std::string PathPayoff::name() const;+| |ql/experimental/mcbasket/pathpayoff.hpp|std::string PathPayoff::description() const;+| |ql/experimental/mcbasket/pathpayoff.hpp|void PathPayoff::value(const Matrix & path, const std::vector<Handle<YieldTermStructure>> & forwardTermStructures, Array & payments, Array & exercises, std::vector<Array> & states) const;+| |ql/experimental/mcbasket/pathpayoff.hpp|Size PathPayoff::basisSystemDimension() const;+| |ql/experimental/mcbasket/pathpayoff.hpp|void PathPayoff::accept(AcyclicVisitor &);+| |ql/experimental/mcbasket/pathpayoff.hpp|void accept(AcyclicVisitor & v);+| |ql/experimental/models/normalclvmodel.hpp|NormalCLVModel::NormalCLVModel(const ext::shared_ptr<GeneralizedBlackScholesProcess> & bsProcess, ext::shared_ptr<OrnsteinUhlenbeckProcess> ouProcess, const std::vector<Date> & maturityDates, Size lagrangeOrder, Real pMax = Null<Real>(), Real pMin = Null<Real>());+| |ql/experimental/models/normalclvmodel.hpp|Real NormalCLVModel::cdf(const Date & d, Real x) const;+| |ql/experimental/models/normalclvmodel.hpp|Real NormalCLVModel::invCDF(const Date & d, Real q) const;+| |ql/experimental/models/normalclvmodel.hpp|Array NormalCLVModel::collocationPointsX(const Date & d) const;+| |ql/experimental/models/normalclvmodel.hpp|Array NormalCLVModel::collocationPointsY(const Date & d) const;+| |ql/experimental/models/normalclvmodel.hpp|std::function<Real (Time, Real)> NormalCLVModel::g() const;+| |ql/experimental/models/normalclvmodel.hpp|MappingFunction::MappingFunction(const NormalCLVModel & model);+| |ql/experimental/models/normalclvmodel.hpp|Real MappingFunction::operator()(Time t, Real x) const;+| |ql/experimental/models/normalclvmodel.hpp|InterpolationData::InterpolationData(const NormalCLVModel & model);+| |ql/experimental/models/squarerootclvmodel.hpp|SquareRootCLVModel::SquareRootCLVModel(const ext::shared_ptr<GeneralizedBlackScholesProcess> & bsProcess, ext::shared_ptr<SquareRootProcess> sqrtProcess, std::vector<Date> maturityDates, Size lagrangeOrder, Real pMax = Null<Real>(), Real pMin = Null<Real>());+| |ql/experimental/models/squarerootclvmodel.hpp|Real SquareRootCLVModel::cdf(const Date & d, Real x) const;+| |ql/experimental/models/squarerootclvmodel.hpp|Real SquareRootCLVModel::invCDF(const Date & d, Real q) const;+| |ql/experimental/models/squarerootclvmodel.hpp|Array SquareRootCLVModel::collocationPointsX(const Date & d) const;+| |ql/experimental/models/squarerootclvmodel.hpp|Array SquareRootCLVModel::collocationPointsY(const Date & d) const;+| |ql/experimental/models/squarerootclvmodel.hpp|std::function<Real (Time, Real)> SquareRootCLVModel::g() const;+| |ql/experimental/models/squarerootclvmodel.hpp|MappingFunction::MappingFunction(const SquareRootCLVModel & model);+| |ql/experimental/models/squarerootclvmodel.hpp|Real MappingFunction::operator()(Time t, Real x) const;+|v|ql/experimental/processes/extendedblackscholesprocess.hpp|ExtendedBlackScholesMertonProcess::ExtendedBlackScholesMertonProcess(const Handle<Quote> & x0, const Handle<YieldTermStructure> & dividendTS, const Handle<YieldTermStructure> & riskFreeTS, const Handle<BlackVolTermStructure> & blackVolTS, const ext::shared_ptr<discretization> & d = ext::shared_ptr<discretization>(new EulerDiscretization), Discretization evolDisc = Milstein);+|v|ql/experimental/processes/extendedornsteinuhlenbeckprocess.hpp|ExtendedOrnsteinUhlenbeckProcess::ExtendedOrnsteinUhlenbeckProcess(Real speed, Volatility sigma, Real x0, std::function<Real (Real)> b, Discretization discretization = MidPoint, Real intEps = 1e-4);+|x|ql/experimental/processes/extendedornsteinuhlenbeckprocess.hpp|Real ExtendedOrnsteinUhlenbeckProcess::speed() const;+|x|ql/experimental/processes/extendedornsteinuhlenbeckprocess.hpp|Real ExtendedOrnsteinUhlenbeckProcess::volatility() const;+|v|ql/experimental/processes/extouwithjumpsprocess.hpp|ExtOUWithJumpsProcess::ExtOUWithJumpsProcess(ext::shared_ptr<ExtendedOrnsteinUhlenbeckProcess> process, Real Y0, Real beta, Real jumpIntensity, Real eta);+|x|ql/experimental/processes/extouwithjumpsprocess.hpp|ext::shared_ptr<ExtendedOrnsteinUhlenbeckProcess> ExtOUWithJumpsProcess::getExtendedOrnsteinUhlenbeckProcess() const;+|x|ql/experimental/processes/extouwithjumpsprocess.hpp|Real ExtOUWithJumpsProcess::beta() const;+|x|ql/experimental/processes/extouwithjumpsprocess.hpp|Real ExtOUWithJumpsProcess::eta() const;+|x|ql/experimental/processes/extouwithjumpsprocess.hpp|Real ExtOUWithJumpsProcess::jumpIntensity() const;+|v|ql/experimental/processes/gemanroncoroniprocess.hpp|GemanRoncoroniProcess::GemanRoncoroniProcess(Real x0, Real alpha, Real beta, Real gamma, Real delta, Real eps, Real zeta, Real d, Real k, Real tau, Real sig2, Real a, Real b, Real theta1, Real theta2, Real theta3, Real psi);+|x|ql/experimental/processes/gemanroncoroniprocess.hpp|Real GemanRoncoroniProcess::x0() const;+|x|ql/experimental/processes/gemanroncoroniprocess.hpp|Real GemanRoncoroniProcess::drift(Time t, Real x) const;+|x|ql/experimental/processes/gemanroncoroniprocess.hpp|Real GemanRoncoroniProcess::diffusion(Time t, Real x) const;+|x|ql/experimental/processes/gemanroncoroniprocess.hpp|Real GemanRoncoroniProcess::stdDeviation(Time t0, Real x0, Time dt) const;+|x|ql/experimental/processes/gemanroncoroniprocess.hpp|Real GemanRoncoroniProcess::evolve(Time t0, Real x0, Time dt, Real dw) const;+|x|ql/experimental/processes/gemanroncoroniprocess.hpp|Real GemanRoncoroniProcess::evolve(Time t0, Real x0, Time dt, Real dw, const Array & du) const;+|v|ql/experimental/processes/klugeextouprocess.hpp|KlugeExtOUProcess::KlugeExtOUProcess(Real rho, ext::shared_ptr<ExtOUWithJumpsProcess> kluge, ext::shared_ptr<ExtendedOrnsteinUhlenbeckProcess> extOU);+|x|ql/experimental/processes/klugeextouprocess.hpp|ext::shared_ptr<ExtOUWithJumpsProcess> KlugeExtOUProcess::getKlugeProcess() const;+|x|ql/experimental/processes/klugeextouprocess.hpp|ext::shared_ptr<ExtendedOrnsteinUhlenbeckProcess> KlugeExtOUProcess::getExtOUProcess() const;+|x|ql/experimental/processes/klugeextouprocess.hpp|Real KlugeExtOUProcess::rho() const;+|v|ql/experimental/processes/vegastressedblackscholesprocess.hpp|VegaStressedBlackScholesProcess::VegaStressedBlackScholesProcess(const Handle<Quote> & x0, const Handle<YieldTermStructure> & dividendTS, const Handle<YieldTermStructure> & riskFreeTS, const Handle<BlackVolTermStructure> & blackVolTS, Time lowerTimeBorderForStressTest = 0, Time upperTimeBorderForStressTest = 1000000, Real lowerAssetBorderForStressTest = 0, Real upperAssetBorderForStressTest = 1000000, Real stressLevel = 0, const ext::shared_ptr<discretization> & d = ext::shared_ptr<discretization>(new EulerDiscretization));+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|Real VegaStressedBlackScholesProcess::getLowerTimeBorderForStressTest() const;+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|void VegaStressedBlackScholesProcess::setLowerTimeBorderForStressTest(Time LTB);+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|Real VegaStressedBlackScholesProcess::getUpperTimeBorderForStressTest() const;+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|void VegaStressedBlackScholesProcess::setUpperTimeBorderForStressTest(Time UTB);+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|Real VegaStressedBlackScholesProcess::getLowerAssetBorderForStressTest() const;+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|void VegaStressedBlackScholesProcess::setLowerAssetBorderForStressTest(Real LAB);+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|Real VegaStressedBlackScholesProcess::getUpperAssetBorderForStressTest() const;+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|void VegaStressedBlackScholesProcess::setUpperAssetBorderForStressTest(Real UBA);+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|Real VegaStressedBlackScholesProcess::getStressLevel() const;+|x|ql/experimental/processes/vegastressedblackscholesprocess.hpp|void VegaStressedBlackScholesProcess::setStressLevel(Real SL);+| |ql/experimental/shortrate/generalizedhullwhite.hpp|void Impl::reset(const Interpolation & interp);+| |ql/experimental/shortrate/generalizedhullwhite.hpp|InterpolationParameter::InterpolationParameter(Size count, const Constraint & constraint = NoConstraint());+| |ql/experimental/shortrate/generalizedhullwhite.hpp|void InterpolationParameter::reset(const Interpolation & interp);+|?|ql/experimental/shortrate/generalizedhullwhite.hpp|GeneralizedHullWhite::GeneralizedHullWhite(const Handle<YieldTermStructure> & yieldtermStructure, const std::vector<Date> & speedstructure, const std::vector<Date> & volstructure, const std::vector<Real> & speed, const std::vector<Real> & vol, const std::function<Real (Real)> & f = { }, const std::function<Real (Real)> & fInverse = { });+|?|ql/experimental/shortrate/generalizedhullwhite.hpp|GeneralizedHullWhite::GeneralizedHullWhite(const Handle<YieldTermStructure> & yieldtermStructure, Real a = 0.1, Real sigma = 0.01);+| |ql/experimental/shortrate/generalizedhullwhite.hpp|ext::shared_ptr<ShortRateDynamics> GeneralizedHullWhite::HWdynamics() const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|std::vector<bool> GeneralizedHullWhite::fixedReversion() const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Real GeneralizedHullWhite::a() const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Real GeneralizedHullWhite::sigma() const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|std::function<Real (Time)> GeneralizedHullWhite::speed() const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|std::function<Real (Time)> GeneralizedHullWhite::vol() const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Dynamics::Dynamics(Parameter fitting, const std::function<Real (Time)> & alpha, const std::function<Real (Time)> & sigma, std::function<Real (Real)> f, std::function<Real (Real)> fInverse);+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Dynamics::Dynamics(Parameter fitting, Real a, Real sigma);+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Real identity::operator()(Real x) const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Impl::Impl(Handle<YieldTermStructure> termStructure, Real a, Real sigma);+| |ql/experimental/shortrate/generalizedhullwhite.hpp|FittingParameter::FittingParameter(const Handle<YieldTermStructure> & termStructure, Real a, Real sigma);+| |ql/experimental/shortrate/generalizedhullwhite.hpp|ext::shared_ptr<OneFactorModel::ShortRateDynamics> HWdynamics() const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|LinearFlatInterpolationImpl::LinearFlatInterpolationImpl<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin);+| |ql/experimental/shortrate/generalizedhullwhite.hpp|void LinearFlatInterpolationImpl::update();+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Real LinearFlatInterpolationImpl::value(Real x) const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Real LinearFlatInterpolationImpl::primitive(Real x) const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Real LinearFlatInterpolationImpl::derivative(Real x) const;+| |ql/experimental/shortrate/generalizedhullwhite.hpp|Real LinearFlatInterpolationImpl::secondDerivative(Real) const;+| |ql/experimental/shortrate/generalizedornsteinuhlenbeckprocess.hpp|GeneralizedOrnsteinUhlenbeckProcess::GeneralizedOrnsteinUhlenbeckProcess(std::function<Real (Time)> speed, std::function<Real (Time)> vol, Real x0 = 0.0, Real level = 0.0);+| |ql/experimental/shortrate/generalizedornsteinuhlenbeckprocess.hpp|Real GeneralizedOrnsteinUhlenbeckProcess::speed(Time t) const;+| |ql/experimental/shortrate/generalizedornsteinuhlenbeckprocess.hpp|Real GeneralizedOrnsteinUhlenbeckProcess::volatility(Time t) const;+|x|ql/experimental/shortrate/generalizedornsteinuhlenbeckprocess.hpp|Real GeneralizedOrnsteinUhlenbeckProcess::level() const;+|v|ql/experimental/swaptions/haganirregularswaptionengine.hpp|HaganIrregularSwaptionEngine::HaganIrregularSwaptionEngine(Handle<SwaptionVolatilityStructure>, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|x|ql/experimental/swaptions/haganirregularswaptionengine.hpp|void HaganIrregularSwaptionEngine::calculate() const;+| |ql/experimental/swaptions/haganirregularswaptionengine.hpp|Basket::Basket(ext::shared_ptr<IrregularSwap> swap, Handle<YieldTermStructure> termStructure, Handle<SwaptionVolatilityStructure> volatilityStructure);+| |ql/experimental/swaptions/haganirregularswaptionengine.hpp|Array Basket::compute(Rate lambda = 0.0) const;+| |ql/experimental/swaptions/haganirregularswaptionengine.hpp|Real Basket::operator()(Rate x) const;+| |ql/experimental/swaptions/haganirregularswaptionengine.hpp|ext::shared_ptr<VanillaSwap> Basket::component(Size i) const;+| |ql/experimental/swaptions/haganirregularswaptionengine.hpp|Array Basket::weights() const;+| |ql/experimental/swaptions/haganirregularswaptionengine.hpp|Real & Basket::lambda() const;+|x|ql/experimental/swaptions/haganirregularswaptionengine.hpp|ext::shared_ptr<IrregularSwap> Basket::swap() const;+| |ql/experimental/swaptions/haganirregularswaptionengine.hpp|Real HaganIrregularSwaptionEngine::HKPrice(Basket & basket, ext::shared_ptr<Exercise> & exercise) const;+| |ql/experimental/swaptions/haganirregularswaptionengine.hpp|Real HaganIrregularSwaptionEngine::LGMPrice(Basket & basket, ext::shared_ptr<Exercise> & exercise) const;+|v|ql/experimental/swaptions/irregularswap.hpp|IrregularSwap::IrregularSwap(Type type, const Leg & fixLeg, const Leg & floatLeg);+|x|ql/experimental/swaptions/irregularswap.hpp|Type IrregularSwap::type() const;+| |ql/experimental/swaptions/irregularswap.hpp|const Leg & IrregularSwap::fixedLeg() const;+| |ql/experimental/swaptions/irregularswap.hpp|const Leg & IrregularSwap::floatingLeg() const;+| |ql/experimental/swaptions/irregularswap.hpp|Real IrregularSwap::fixedLegBPS() const;+| |ql/experimental/swaptions/irregularswap.hpp|Real IrregularSwap::fixedLegNPV() const;+|v|ql/experimental/swaptions/irregularswap.hpp|Rate IrregularSwap::fairRate() const;+| |ql/experimental/swaptions/irregularswap.hpp|Real IrregularSwap::floatingLegBPS() const;+| |ql/experimental/swaptions/irregularswap.hpp|Real IrregularSwap::floatingLegNPV() const;+|v|ql/experimental/swaptions/irregularswap.hpp|Spread IrregularSwap::fairSpread() const;+| |ql/experimental/swaptions/irregularswap.hpp|arguments::arguments();+| |ql/experimental/swaptions/irregularswap.hpp|void arguments::validate() const;+| |ql/experimental/swaptions/irregularswap.hpp|void results::reset();+| |ql/experimental/swaptions/irregularswap.hpp|Swap::Type type() const;+| |ql/experimental/swaptions/irregularswaption.hpp|std::ostream & operator<<(std::ostream & out, IrregularSettlement::Type type);+|v|ql/experimental/swaptions/irregularswaption.hpp|IrregularSwaption::IrregularSwaption(ext::shared_ptr<IrregularSwap> swap, const ext::shared_ptr<Exercise> & exercise, IrregularSettlement::Type delivery = IrregularSettlement::Physical);+|x|ql/experimental/swaptions/irregularswaption.hpp|IrregularSettlement::Type IrregularSwaption::settlementType() const;+| |ql/experimental/swaptions/irregularswaption.hpp|Swap::Type IrregularSwaption::type() const;+|v|ql/experimental/swaptions/irregularswaption.hpp|const ext::shared_ptr<IrregularSwap> & IrregularSwaption::underlyingSwap() const;+| |ql/experimental/swaptions/irregularswaption.hpp|Volatility IrregularSwaption::impliedVolatility(Real price, const Handle<YieldTermStructure> & discountCurve, Volatility guess, Real accuracy = 1.0e-4, Natural maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0) const;+| |ql/experimental/swaptions/irregularswaption.hpp|arguments::arguments();+| |ql/experimental/swaptions/irregularswaption.hpp|void arguments::validate() const;+|v|ql/experimental/termstructures/basisswapratehelpers.hpp|IborIborBasisSwapRateHelper::IborIborBasisSwapRateHelper(const Handle<Quote> & basis, const Period & tenor, Natural settlementDays, Calendar calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<IborIndex> & baseIndex, const ext::shared_ptr<IborIndex> & otherIndex, Handle<YieldTermStructure> discountHandle, bool bootstrapBaseCurve, std::optional<bool> useIndexedCoupons = std::nullopt, DateGeneration::Rule rule = DateGeneration::Backward, Integer paymentLag = 0, StubIndexSelection baseStubIndexSelection = { }, StubIndexSelection otherStubIndexSelection = { });+|x|ql/experimental/termstructures/basisswapratehelpers.hpp|Real IborIborBasisSwapRateHelper::impliedQuote() const;+|x|ql/experimental/termstructures/basisswapratehelpers.hpp|void IborIborBasisSwapRateHelper::accept(AcyclicVisitor &);+|v|ql/experimental/termstructures/basisswapratehelpers.hpp|ext::shared_ptr<Swap> IborIborBasisSwapRateHelper::swap() const;+|v|ql/experimental/termstructures/basisswapratehelpers.hpp|OvernightIborBasisSwapRateHelper::OvernightIborBasisSwapRateHelper(const Handle<Quote> & basis, const Period & tenor, Natural settlementDays, Calendar calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<OvernightIndex> & baseIndex, const ext::shared_ptr<IborIndex> & otherIndex, Handle<YieldTermStructure> discountHandle = Handle<YieldTermStructure>(), bool bootstrapBaseCurve = false, Integer paymentLag = 0, std::optional<Frequency> overnightPaymentFrequency = std::nullopt, std::optional<bool> useIndexedCoupons = std::nullopt, DateGeneration::Rule rule = DateGeneration::Backward, RateAveraging::Type averagingMethod = RateAveraging::Compound, bool telescopicValueDates = false, bool basisOnIborLeg = false, StubIndexSelection iborStubIndexSelection = { });+|x|ql/experimental/termstructures/basisswapratehelpers.hpp|Real OvernightIborBasisSwapRateHelper::impliedQuote() const;+|x|ql/experimental/termstructures/basisswapratehelpers.hpp|void OvernightIborBasisSwapRateHelper::accept(AcyclicVisitor &);+|v|ql/experimental/termstructures/basisswapratehelpers.hpp|ext::shared_ptr<Swap> OvernightIborBasisSwapRateHelper::swap() const;+| |ql/experimental/termstructures/crosscurrencyratehelpers.hpp|void CrossCurrencySwapRateHelperBase::setTermStructure(YieldTermStructure * t);+|v|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|ConstNotionalCrossCurrencyBasisSwapRateHelper::ConstNotionalCrossCurrencyBasisSwapRateHelper(const Handle<Quote> & basis, const Period & tenor, Natural fixingDays, const Calendar & calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<IborIndex> & baseCurrencyIndex, const ext::shared_ptr<IborIndex> & quoteCurrencyIndex, const Handle<YieldTermStructure> & collateralCurve, bool isFxBaseCurrencyCollateralCurrency, bool isBasisOnFxBaseCurrencyLeg, std::optional<Frequency> paymentFrequency = std::nullopt, Integer paymentLag = 0, std::optional<Frequency> quoteCurrencyPaymentFrequency = std::nullopt, std::optional<bool> useIndexedCoupons = std::nullopt, bool paymentLagOnNotionalExchanges = false, StubIndexSelection baseStubIndexSelection = { }, StubIndexSelection quoteStubIndexSelection = { });+|x|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|Real ConstNotionalCrossCurrencyBasisSwapRateHelper::impliedQuote() const;+|x|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|void ConstNotionalCrossCurrencyBasisSwapRateHelper::accept(AcyclicVisitor &);+|v|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|MtMCrossCurrencyBasisSwapRateHelper::MtMCrossCurrencyBasisSwapRateHelper(const Handle<Quote> & basis, const Period & tenor, Natural fixingDays, const Calendar & calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<IborIndex> & baseCurrencyIndex, const ext::shared_ptr<IborIndex> & quoteCurrencyIndex, const Handle<YieldTermStructure> & collateralCurve, bool isFxBaseCurrencyCollateralCurrency, bool isBasisOnFxBaseCurrencyLeg, bool isFxBaseCurrencyLegResettable, std::optional<Frequency> paymentFrequency = std::nullopt, Integer paymentLag = 0, std::optional<Frequency> quoteCurrencyPaymentFrequency = std::nullopt, Natural fxResetFixingDays = 0, Calendar fxResetFixingCalendar = Calendar(), std::optional<bool> useIndexedCoupons = std::nullopt, StubIndexSelection baseStubIndexSelection = { }, StubIndexSelection quoteStubIndexSelection = { });+|x|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|Real MtMCrossCurrencyBasisSwapRateHelper::impliedQuote() const;+|x|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|void MtMCrossCurrencyBasisSwapRateHelper::accept(AcyclicVisitor &);+|v|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|ConstNotionalCrossCurrencySwapRateHelper::ConstNotionalCrossCurrencySwapRateHelper(const Handle<Quote> & fixedRate, const Period & tenor, Natural fixingDays, const Calendar & calendar, BusinessDayConvention convention, bool endOfMonth, Frequency fixedFrequency, DayCounter fixedDayCount, const ext::shared_ptr<IborIndex> & floatIndex, const Handle<YieldTermStructure> & collateralCurve, bool collateralOnFixedLeg, Integer paymentLag = 0, std::optional<bool> useIndexedCoupons = std::nullopt, std::optional<Frequency> floatPaymentFrequency = std::nullopt, StubIndexSelection floatStubIndexSelection = { });+|x|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|Real ConstNotionalCrossCurrencySwapRateHelper::impliedQuote() const;+|x|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|void ConstNotionalCrossCurrencySwapRateHelper::accept(AcyclicVisitor &);+|v|ql/experimental/variancegamma/analyticvariancegammaengine.hpp|VarianceGammaEngine::VarianceGammaEngine(ext::shared_ptr<VarianceGammaProcess>, Real absoluteError = 1e-5);+|x|ql/experimental/variancegamma/analyticvariancegammaengine.hpp|void VarianceGammaEngine::calculate() const;+| |ql/experimental/variancegamma/fftengine.hpp|FFTEngine::FFTEngine(ext::shared_ptr<StochasticProcess1D> process, Real logStrikeSpacing);+|x|ql/experimental/variancegamma/fftengine.hpp|void FFTEngine::calculate() const;+| |ql/experimental/variancegamma/fftengine.hpp|void FFTEngine::update();+| |ql/experimental/variancegamma/fftengine.hpp|void FFTEngine::precalculate(const std::vector<ext::shared_ptr<Instrument>> & optionList);+| |ql/experimental/variancegamma/fftengine.hpp|std::unique_ptr<FFTEngine> FFTEngine::clone() const;+|v|ql/experimental/variancegamma/fftvanillaengine.hpp|FFTVanillaEngine::FFTVanillaEngine(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Real logStrikeSpacing = 0.001);+| |ql/experimental/variancegamma/fftvariancegammaengine.hpp|FFTVarianceGammaEngine::FFTVarianceGammaEngine(const ext::shared_ptr<VarianceGammaProcess> & process, Real logStrikeSpacing = 0.001);+|v|ql/experimental/variancegamma/variancegammamodel.hpp|VarianceGammaModel::VarianceGammaModel(const ext::shared_ptr<VarianceGammaProcess> & process);+|x|ql/experimental/variancegamma/variancegammamodel.hpp|Real VarianceGammaModel::sigma() const;+|x|ql/experimental/variancegamma/variancegammamodel.hpp|Real VarianceGammaModel::nu() const;+|x|ql/experimental/variancegamma/variancegammamodel.hpp|Real VarianceGammaModel::theta() const;+|x|ql/experimental/variancegamma/variancegammamodel.hpp|ext::shared_ptr<VarianceGammaProcess> VarianceGammaModel::process() const;+|v|ql/experimental/variancegamma/variancegammaprocess.hpp|VarianceGammaProcess::VarianceGammaProcess(Handle<Quote> s0, Handle<YieldTermStructure> dividendYield, Handle<YieldTermStructure> riskFreeRate, Real sigma, Real nu, Real theta);+|x|ql/experimental/variancegamma/variancegammaprocess.hpp|Real VarianceGammaProcess::sigma() const;+|x|ql/experimental/variancegamma/variancegammaprocess.hpp|Real VarianceGammaProcess::nu() const;+|x|ql/experimental/variancegamma/variancegammaprocess.hpp|Real VarianceGammaProcess::theta() const;+|x|ql/experimental/variancegamma/variancegammaprocess.hpp|const Handle<Quote> & VarianceGammaProcess::s0() const;+|x|ql/experimental/variancegamma/variancegammaprocess.hpp|const Handle<YieldTermStructure> & VarianceGammaProcess::dividendYield() const;+|x|ql/experimental/variancegamma/variancegammaprocess.hpp|const Handle<YieldTermStructure> & VarianceGammaProcess::riskFreeRate() const;+|v|ql/experimental/varianceoption/integralhestonvarianceoptionengine.hpp|IntegralHestonVarianceOptionEngine::IntegralHestonVarianceOptionEngine(ext::shared_ptr<HestonProcess>);+|x|ql/experimental/varianceoption/integralhestonvarianceoptionengine.hpp|void IntegralHestonVarianceOptionEngine::calculate() const;+|v|ql/experimental/varianceoption/varianceoption.hpp|VarianceOption::VarianceOption(ext::shared_ptr<Payoff> payoff, Real notional, const Date & startDate, const Date & maturityDate);+|x|ql/experimental/varianceoption/varianceoption.hpp|Date VarianceOption::startDate() const;+|x|ql/experimental/varianceoption/varianceoption.hpp|Date VarianceOption::maturityDate() const;+|x|ql/experimental/varianceoption/varianceoption.hpp|Real VarianceOption::notional() const;+|x|ql/experimental/varianceoption/varianceoption.hpp|ext::shared_ptr<Payoff> VarianceOption::payoff() const;+| |ql/experimental/varianceoption/varianceoption.hpp|arguments::arguments();+| |ql/experimental/varianceoption/varianceoption.hpp|void arguments::validate() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|AbcdAtmVolCurve::AbcdAtmVolCurve(Natural settlementDays, const Calendar & cal, const std::vector<Period> & optionTenors, const std::vector<Handle<Quote>> & volsHandles, std::vector<bool> inclusionInInterpolationFlag = std::vector<bool>(1, true), BusinessDayConvention bdc = Following, const DayCounter & dc = Actual365Fixed());+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|std::vector<Real> AbcdAtmVolCurve::k() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|Real AbcdAtmVolCurve::k(Time t) const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|Real AbcdAtmVolCurve::a() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|Real AbcdAtmVolCurve::b() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|Real AbcdAtmVolCurve::c() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|Real AbcdAtmVolCurve::d() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|Real AbcdAtmVolCurve::rmsError() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|Real AbcdAtmVolCurve::maxError() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|EndCriteria::Type AbcdAtmVolCurve::endCriteria() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Period> & AbcdAtmVolCurve::optionTenors() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Period> & AbcdAtmVolCurve::optionTenorsInInterpolation() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Date> & AbcdAtmVolCurve::optionDates() const;+|v|ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Time> & AbcdAtmVolCurve::optionTimes() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Date maxDate() const;+|x|ql/experimental/volatility/abcdatmvolcurve.hpp|Real minStrike() const;+|x|ql/experimental/volatility/abcdatmvolcurve.hpp|Real maxStrike() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real atmVarianceImpl(Time t) const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Volatility atmVolImpl(Time t) const;+| |ql/experimental/volatility/blackatmvolcurve.hpp|BlackAtmVolCurve::BlackAtmVolCurve(BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/experimental/volatility/blackatmvolcurve.hpp|BlackAtmVolCurve::BlackAtmVolCurve(const Date & referenceDate, const Calendar & cal = Calendar(), BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/experimental/volatility/blackatmvolcurve.hpp|BlackAtmVolCurve::BlackAtmVolCurve(Natural settlementDays, const Calendar &, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+|v|ql/experimental/volatility/blackatmvolcurve.hpp|Volatility BlackAtmVolCurve::atmVol(const Period & optionTenor, bool extrapolate = false) const;+|v|ql/experimental/volatility/blackatmvolcurve.hpp|Volatility BlackAtmVolCurve::atmVol(const Date & maturity, bool extrapolate = false) const;+|v|ql/experimental/volatility/blackatmvolcurve.hpp|Volatility BlackAtmVolCurve::atmVol(Time maturity, bool extrapolate = false) const;+|v|ql/experimental/volatility/blackatmvolcurve.hpp|Real BlackAtmVolCurve::atmVariance(const Period & optionTenor, bool extrapolate = false) const;+|v|ql/experimental/volatility/blackatmvolcurve.hpp|Real BlackAtmVolCurve::atmVariance(const Date & maturity, bool extrapolate = false) const;+|v|ql/experimental/volatility/blackatmvolcurve.hpp|Real BlackAtmVolCurve::atmVariance(Time maturity, bool extrapolate = false) const;+| |ql/experimental/volatility/blackatmvolcurve.hpp|void BlackAtmVolCurve::accept(AcyclicVisitor &);+| |ql/experimental/volatility/blackvolsurface.hpp|BlackVolSurface::BlackVolSurface(BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/experimental/volatility/blackvolsurface.hpp|BlackVolSurface::BlackVolSurface(const Date & referenceDate, const Calendar & cal = Calendar(), BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/experimental/volatility/blackvolsurface.hpp|BlackVolSurface::BlackVolSurface(Natural settlementDays, const Calendar &, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+|v|ql/experimental/volatility/blackvolsurface.hpp|ext::shared_ptr<SmileSection> BlackVolSurface::smileSection(const Period &, bool extrapolate) const;+|v|ql/experimental/volatility/blackvolsurface.hpp|ext::shared_ptr<SmileSection> BlackVolSurface::smileSection(const Date &, bool extrapolate) const;+|v|ql/experimental/volatility/blackvolsurface.hpp|ext::shared_ptr<SmileSection> BlackVolSurface::smileSection(Time, bool extrapolate) const;+|v|ql/experimental/volatility/blackvolsurface.hpp|ext::shared_ptr<SmileSection> smileSection(const Period & p, bool extrapolate) const;+|v|ql/experimental/volatility/blackvolsurface.hpp|ext::shared_ptr<SmileSection> smileSection(const Date & d, bool extrapolate) const;+|v|ql/experimental/volatility/blackvolsurface.hpp|ext::shared_ptr<SmileSection> smileSection(Time t, bool extrapolate) const;+| |ql/experimental/volatility/equityfxvolsurface.hpp|EquityFXVolSurface::EquityFXVolSurface(BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/experimental/volatility/equityfxvolsurface.hpp|EquityFXVolSurface::EquityFXVolSurface(const Date & referenceDate, const Calendar & cal = Calendar(), BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/experimental/volatility/equityfxvolsurface.hpp|EquityFXVolSurface::EquityFXVolSurface(Natural settlementDays, const Calendar &, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/experimental/volatility/equityfxvolsurface.hpp|Volatility EquityFXVolSurface::atmForwardVol(const Date & date1, const Date & date2, bool extrapolate = false) const;+| |ql/experimental/volatility/equityfxvolsurface.hpp|Volatility EquityFXVolSurface::atmForwardVol(Time time1, Time time2, bool extrapolate = false) const;+| |ql/experimental/volatility/equityfxvolsurface.hpp|Real EquityFXVolSurface::atmForwardVariance(const Date & date1, const Date & date2, bool extrapolate = false) const;+| |ql/experimental/volatility/equityfxvolsurface.hpp|Real EquityFXVolSurface::atmForwardVariance(Time time1, Time time2, bool extrapolate = false) const;+|v|ql/experimental/volatility/extendedblackvariancecurve.hpp|ExtendedBlackVarianceCurve::ExtendedBlackVarianceCurve(const Date & referenceDate, const std::vector<Date> & dates, std::vector<Handle<Quote>> volatilities, DayCounter dayCounter, bool forceMonotoneVariance = true);+|x|ql/experimental/volatility/extendedblackvariancecurve.hpp|Date maxDate() const;+|x|ql/experimental/volatility/extendedblackvariancecurve.hpp|Real minStrike() const;+|x|ql/experimental/volatility/extendedblackvariancecurve.hpp|Real maxStrike() const;+|x|ql/experimental/volatility/extendedblackvariancecurve.hpp|void accept(AcyclicVisitor & v);+|v|ql/experimental/volatility/extendedblackvariancesurface.hpp|ExtendedBlackVarianceSurface::ExtendedBlackVarianceSurface(const Date & referenceDate, const Calendar & calendar, const std::vector<Date> & dates, std::vector<Real> strikes, const std::vector<Handle<Quote>> & volatilities, DayCounter dayCounter, Extrapolation lowerExtrapolation = InterpolatorDefaultExtrapolation, Extrapolation upperExtrapolation = InterpolatorDefaultExtrapolation);+|x|ql/experimental/volatility/extendedblackvariancesurface.hpp|void accept(AcyclicVisitor & v);+| |ql/experimental/volatility/interestratevolsurface.hpp|InterestRateVolSurface::InterestRateVolSurface(ext::shared_ptr<InterestRateIndex>, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/experimental/volatility/interestratevolsurface.hpp|InterestRateVolSurface::InterestRateVolSurface(ext::shared_ptr<InterestRateIndex>, const Date & referenceDate, const Calendar & cal = Calendar(), BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/experimental/volatility/interestratevolsurface.hpp|InterestRateVolSurface::InterestRateVolSurface(ext::shared_ptr<InterestRateIndex>, Natural settlementDays, const Calendar &, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+|x|ql/experimental/volatility/interestratevolsurface.hpp|const ext::shared_ptr<InterestRateIndex> & InterestRateVolSurface::index() const;+| |ql/experimental/volatility/noarbsabr.hpp|NoArbSabrModel::NoArbSabrModel(Real expiryTime, Real forward, Real alpha, Real beta, Real nu, Real rho);+| |ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::optionPrice(Real strike) const;+| |ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::digitalOptionPrice(Real strike) const;+| |ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::density(const Real strike) const;+|x|ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::forward() const;+| |ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::numericalForward() const;+|x|ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::expiryTime() const;+|x|ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::alpha() const;+|x|ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::beta() const;+|x|ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::nu() const;+|x|ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::rho() const;+| |ql/experimental/volatility/noarbsabr.hpp|Real NoArbSabrModel::absorptionProbability() const;+| |ql/experimental/volatility/noarbsabr.hpp|D0Interpolator::D0Interpolator(Real forward, Real expiryTime, Real alpha, Real beta, Real nu, Real rho);+| |ql/experimental/volatility/noarbsabr.hpp|Real D0Interpolator::operator()() const;+|v|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|NoArbSabrInterpolatedSmileSection::NoArbSabrInterpolatedSmileSection(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real alpha, Real beta, Real nu, Real rho, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());+|x|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|NoArbSabrInterpolatedSmileSection::NoArbSabrInterpolatedSmileSection(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & vols, Real alpha, Real beta, Real nu, Real rho, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());+|v|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real NoArbSabrInterpolatedSmileSection::alpha() const;+|v|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real NoArbSabrInterpolatedSmileSection::beta() const;+|v|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real NoArbSabrInterpolatedSmileSection::nu() const;+|v|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real NoArbSabrInterpolatedSmileSection::rho() const;+|v|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real NoArbSabrInterpolatedSmileSection::rmsError() const;+|v|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real NoArbSabrInterpolatedSmileSection::maxError() const;+|v|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|EndCriteria::Type NoArbSabrInterpolatedSmileSection::endCriteria() const;+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|void update();+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real volatilityImpl(Rate strike) const;+|x|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real minStrike() const;+|x|ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real maxStrike() const;+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real atmLevel() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Size NoArbSabrSpecs::dimension();+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrSpecs::eps();+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|void NoArbSabrSpecs::defaultValues(std::vector<Real> & params, std::vector<bool> & paramIsFixed, const Real & forward, const Real expiryTime, const std::vector<Real> & addParams);+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|void NoArbSabrSpecs::guess(Array & values, const std::vector<bool> & paramIsFixed, const Real & forward, const Real expiryTime, const std::vector<Real> & r, const std::vector<Real> &);+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Array NoArbSabrSpecs::inverse(const Array & y, const std::vector<bool> & paramIsFixed, const std::vector<Real> & params, const Real forward);+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Array NoArbSabrSpecs::direct(const Array & x, const std::vector<bool> & paramIsFixed, const std::vector<Real> & params, const Real forward);+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrSpecs::weight(const Real strike, const Real forward, const Real stdDev, const std::vector<Real> & addParams);+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|ext::shared_ptr<type> NoArbSabrSpecs::instance(const Time t, const Real & forward, const std::vector<Real> & params, const std::vector<Real> &);+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrInterpolation::expiry() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrInterpolation::forward() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrInterpolation::alpha() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrInterpolation::beta() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrInterpolation::nu() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrInterpolation::rho() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrInterpolation::rmsError() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|Real NoArbSabrInterpolation::maxError() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|const std::vector<Real> & NoArbSabrInterpolation::interpolationWeights() const;+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|EndCriteria::Type NoArbSabrInterpolation::endCriteria();+|x|ql/experimental/volatility/noarbsabrinterpolation.hpp|NoArbSabr::NoArbSabr(Time t, Real forward, Real alpha, Real beta, Real nu, Real rho, bool alphaIsFixed, bool betaIsFixed, bool nuIsFixed, bool rhoIsFixed, bool vegaWeighted = false, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> optMethod = ext::shared_ptr<OptimizationMethod>(), const Real errorAccept = 0.0020, const bool useMaxError = false, const Size maxGuesses = 50);+|v|ql/experimental/volatility/noarbsabrsmilesection.hpp|NoArbSabrSmileSection::NoArbSabrSmileSection(Time timeToExpiry, Rate forward, std::vector<Real> sabrParameters, Real shift = 0.0, VolatilityType volatilityType = VolatilityType::ShiftedLognormal);+|v|ql/experimental/volatility/noarbsabrsmilesection.hpp|NoArbSabrSmileSection::NoArbSabrSmileSection(const Date & d, Rate forward, std::vector<Real> sabrParameters, const DayCounter & dc = Actual365Fixed(), Real shift = 0.0, VolatilityType volatilityType = VolatilityType::ShiftedLognormal);+|x|ql/experimental/volatility/noarbsabrsmilesection.hpp|ext::shared_ptr<NoArbSabrModel> NoArbSabrSmileSection::model();+|x|ql/experimental/volatility/noarbsabrswaptionvolatilitycube.hpp|static Real XabrModelTraits::extractGamma(const ext::shared_ptr<NoArbSabrInterpolation> &);+|x|ql/experimental/volatility/noarbsabrswaptionvolatilitycube.hpp|static ext::shared_ptr<NoArbSabrSmileSection> XabrModelTraits::createSmileSection(Time optionTime, Real forward, const std::vector<Real> & params, Real shift, VolatilityType volatilityType);+|v|ql/experimental/volatility/sabrvolsurface.hpp|SabrVolSurface::SabrVolSurface(const ext::shared_ptr<InterestRateIndex> &, Handle<BlackAtmVolCurve>, const std::vector<Period> & optionTenors, std::vector<Spread> atmRateSpreads, std::vector<std::vector<Handle<Quote>>> volSpreads);+|v|ql/experimental/volatility/sabrvolsurface.hpp|const Handle<BlackAtmVolCurve> & SabrVolSurface::atmCurve() const;+|v|ql/experimental/volatility/sabrvolsurface.hpp|std::vector<Volatility> SabrVolSurface::volatilitySpreads(const Period &) const;+|v|ql/experimental/volatility/sabrvolsurface.hpp|std::vector<Volatility> SabrVolSurface::volatilitySpreads(const Date &) const;+|?|ql/experimental/volatility/sabrvolsurface.hpp|DayCounter dayCounter() const;+| |ql/experimental/volatility/sabrvolsurface.hpp|Date maxDate() const;+| |ql/experimental/volatility/sabrvolsurface.hpp|Time maxTime() const;+| |ql/experimental/volatility/sabrvolsurface.hpp|const Date & referenceDate() const;+|?|ql/experimental/volatility/sabrvolsurface.hpp|Calendar calendar() const;+| |ql/experimental/volatility/sabrvolsurface.hpp|Natural settlementDays() const;+|x|ql/experimental/volatility/sabrvolsurface.hpp|Real minStrike() const;+|x|ql/experimental/volatility/sabrvolsurface.hpp|Real maxStrike() const;+|v|ql/experimental/volatility/sabrvolsurface.hpp|std::vector<Volatility> volatilitySpreads(const Period & p) const;+|v|ql/experimental/volatility/sabrvoltermstructure.hpp|SABRVolTermStructure::SABRVolTermStructure(Real alpha, Real beta, Real gamma, Real rho, Real s0, Real r, const Date & referenceDate, const DayCounter & dc);+|v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|SviInterpolatedSmileSection::SviInterpolatedSmileSection(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real a, Real b, Real sigma, Real rho, Real m, bool aIsFixed, bool bIsFixed, bool sigmaIsFixed, bool rhoIsFixed, bool mIsFixed, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());+|x|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|SviInterpolatedSmileSection::SviInterpolatedSmileSection(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & vols, Real a, Real b, Real sigma, Real rho, Real m, bool isAFixed, bool isBFixed, bool isSigmaFixed, bool isRhoFixed, bool isMFixed, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());+|v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real SviInterpolatedSmileSection::a() const;+|v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real SviInterpolatedSmileSection::b() const;+|v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real SviInterpolatedSmileSection::sigma() const;+|v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real SviInterpolatedSmileSection::rho() const;+|v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real SviInterpolatedSmileSection::m() const;+|v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real SviInterpolatedSmileSection::rmsError() const;+|v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real SviInterpolatedSmileSection::maxError() const;+|v|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|EndCriteria::Type SviInterpolatedSmileSection::endCriteria() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|void update();+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real volatilityImpl(Rate strike) const;+|x|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real minStrike() const;+|x|ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real maxStrike() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real atmLevel() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|void checkSviParameters(const Real a, const Real b, const Real sigma, const Real rho, const Real m, const Time tte);+|x|ql/experimental/volatility/sviinterpolation.hpp|Real sviTotalVariance(const Real a, const Real b, const Real sigma, const Real rho, const Real m, const Real k);+|x|ql/experimental/volatility/sviinterpolation.hpp|Size SviSpecs::dimension();+|x|ql/experimental/volatility/sviinterpolation.hpp|void SviSpecs::defaultValues(std::vector<Real> & params, std::vector<bool> & paramIsFixed, const Real & forward, const Real expiryTime, const std::vector<Real> & addParams);+|x|ql/experimental/volatility/sviinterpolation.hpp|void SviSpecs::guess(Array & values, const std::vector<bool> & paramIsFixed, const Real & forward, const Real expiryTime, const std::vector<Real> & r, const std::vector<Real> & addParams);+|x|ql/experimental/volatility/sviinterpolation.hpp|Array SviSpecs::inverse(const Array & y, const std::vector<bool> &, const std::vector<Real> &, const Real);+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviSpecs::eps1();+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviSpecs::eps2();+|x|ql/experimental/volatility/sviinterpolation.hpp|Array SviSpecs::direct(const Array & x, const std::vector<bool> & paramIsFixed, const std::vector<Real> & params, const Real forward);+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviSpecs::weight(const Real strike, const Real forward, const Real stdDev, const std::vector<Real> & addParams);+|x|ql/experimental/volatility/sviinterpolation.hpp|ext::shared_ptr<type> SviSpecs::instance(const Time t, const Real & forward, const std::vector<Real> & params, const std::vector<Real> & addParams);+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviInterpolation::expiry() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviInterpolation::forward() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviInterpolation::a() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviInterpolation::b() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviInterpolation::sigma() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviInterpolation::rho() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviInterpolation::m() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviInterpolation::rmsError() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|Real SviInterpolation::maxError() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|const std::vector<Real> & SviInterpolation::interpolationWeights() const;+|x|ql/experimental/volatility/sviinterpolation.hpp|EndCriteria::Type SviInterpolation::endCriteria();+|x|ql/experimental/volatility/sviinterpolation.hpp|Svi::Svi(Time t, Real forward, Real a, Real b, Real sigma, Real rho, Real m, bool aIsFixed, bool bIsFixed, bool sigmaIsFixed, bool rhoIsFixed, bool mIsFixed, bool vegaWeighted = false, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> optMethod = ext::shared_ptr<OptimizationMethod>(), const Real errorAccept = 0.0020, const bool useMaxError = false, const Size maxGuesses = 50);+|x|ql/experimental/volatility/svismilesection.hpp|SviSmileSection::SviSmileSection(Time timeToExpiry, Rate forward, std::vector<Real> sviParameters);+|v|ql/experimental/volatility/svismilesection.hpp|SviSmileSection::SviSmileSection(const Date & d, Rate forward, std::vector<Real> sviParameters, const DayCounter & dc = Actual365Fixed());+| |ql/experimental/volatility/volcube.hpp|VolatilityCube::VolatilityCube(std::vector<Handle<InterestRateVolSurface>>, std::vector<Handle<AbcdAtmVolCurve>>);+| |ql/experimental/volatility/volcube.hpp|const Period & VolatilityCube::minIndexTenor() const;+| |ql/experimental/volatility/volcube.hpp|const Period & VolatilityCube::maxIndexTenor() const;+|x|ql/experimental/volatility/volcube.hpp|const std::vector<Handle<InterestRateVolSurface>> & VolatilityCube::surfaces() const;+|x|ql/experimental/volatility/volcube.hpp|const std::vector<Handle<AbcdAtmVolCurve>> & VolatilityCube::curves() const;+| |ql/handle.hpp|Link::Link(const ext::shared_ptr<T> & h, bool registerAsObserver);+| |ql/handle.hpp|Link::Link(ext::shared_ptr<T> && h, bool registerAsObserver);+| |ql/handle.hpp|void Link::linkTo(ext::shared_ptr<T>, bool registerAsObserver);+| |ql/handle.hpp|bool Link::empty() const;+| |ql/handle.hpp|const ext::shared_ptr<T> & Link::currentLink() const;+|v|ql/handle.hpp|Handle::Handle<T>();+|v|ql/handle.hpp|Handle::Handle<T>(const ext::shared_ptr<T> & p, bool registerAsObserver = true);+|x|ql/handle.hpp|Handle::Handle<T>(ext::shared_ptr<T> && p, bool registerAsObserver = true);+|x|ql/handle.hpp|const ext::shared_ptr<T> & Handle::currentLink() const;+|v|ql/handle.hpp|const ext::shared_ptr<T> & Handle::operator->() const;+|v|ql/handle.hpp|const ext::shared_ptr<T> & Handle::operator*() const;+|x|ql/handle.hpp|bool Handle::empty() const;+|v|ql/handle.hpp|RelinkableHandle::RelinkableHandle<T>();+|v|ql/handle.hpp|RelinkableHandle::RelinkableHandle<T>(const ext::shared_ptr<T> & p, bool registerAsObserver = true);+|x|ql/handle.hpp|RelinkableHandle::RelinkableHandle<T>(ext::shared_ptr<T> && p, bool registerAsObserver = true);+|v|ql/handle.hpp|void RelinkableHandle::linkTo(const ext::shared_ptr<T> & h, bool registerAsObserver = true);+|x|ql/handle.hpp|void RelinkableHandle::linkTo(ext::shared_ptr<T> && h, bool registerAsObserver = true);+|x|ql/handle.hpp|void RelinkableHandle::reset();+| |ql/handle.hpp|void linkTo(ext::shared_ptr<T> h, bool registerAsObserver);+| |ql/handle.hpp|const ext::shared_ptr<T> & operator->() const;+| |ql/handle.hpp|const ext::shared_ptr<T> & operator*() const;+| |ql/handle.hpp|RelinkableHandle<T>(const ext::shared_ptr<T> & p, bool registerAsObserver);+| |ql/handle.hpp|RelinkableHandle<T>(ext::shared_ptr<T> && p, bool registerAsObserver);+| |ql/handle.hpp|void linkTo(const ext::shared_ptr<T> & h, bool registerAsObserver);+| |ql/handle.hpp|void linkTo(ext::shared_ptr<T> && h, bool registerAsObserver);+|v|ql/index.hpp|std::string Index::name() const;+|v|ql/index.hpp|Calendar Index::fixingCalendar() const;+|v|ql/index.hpp|bool Index::isValidFixingDate(const Date & fixingDate) const;+|v|ql/index.hpp|bool Index::hasHistoricalFixing(const Date & fixingDate) const;+|v|ql/index.hpp|Real Index::fixing(const Date & fixingDate, bool forecastTodaysFixing = false) const;+| |ql/index.hpp|Real Index::pastFixing(const Date & fixingDate) const;+|v|ql/index.hpp|const TimeSeries<Real> & Index::timeSeries() const;+| |ql/index.hpp|bool Index::allowsNativeFixings();+|v|ql/index.hpp|void Index::addFixing(const Date & fixingDate, Real fixing, bool forceOverwrite = false);+| |ql/index.hpp|void Index::addFixings(const TimeSeries<Real> & t, bool forceOverwrite = false);+|v|ql/index.hpp|void Index::clearFixings();+| |ql/index.hpp|void update();+|v|ql/indexes/bmaindex.hpp|BMAIndex::BMAIndex(Handle<YieldTermStructure> h = { });+|v|ql/indexes/bmaindex.hpp|Schedule BMAIndex::fixingSchedule(const Date & start, const Date & end);+|v|ql/indexes/equityindex.hpp|EquityIndex::EquityIndex(std::string name, Calendar fixingCalendar, Currency currency, Handle<YieldTermStructure> interest = { }, Handle<YieldTermStructure> dividend = { }, Handle<Quote> spot = { });+|x|ql/indexes/equityindex.hpp|Currency EquityIndex::currency() const;+|x|ql/indexes/equityindex.hpp|Real EquityIndex::forecastFixing(const Date & fixingDate) const;+|x|ql/indexes/equityindex.hpp|ext::shared_ptr<EquityIndex> EquityIndex::clone(const Handle<YieldTermStructure> & interest, const Handle<YieldTermStructure> & dividend, const Handle<Quote> & spot) const;+| |ql/indexes/equityindex.hpp|bool isValidFixingDate(const Date & d) const;+|v|ql/indexes/ibor/aonia.hpp|Aonia::Aonia(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/audlibor.hpp|AUDLibor::AUDLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/bbsw.hpp|Bbsw::Bbsw(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bbsw.hpp|Bbsw1M::Bbsw1M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bbsw.hpp|Bbsw2M::Bbsw2M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bbsw.hpp|Bbsw3M::Bbsw3M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bbsw.hpp|Bbsw4M::Bbsw4M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bbsw.hpp|Bbsw5M::Bbsw5M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bbsw.hpp|Bbsw6M::Bbsw6M(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/bibor.hpp|Bibor::Bibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bibor.hpp|BiborSW::BiborSW(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bibor.hpp|Bibor1M::Bibor1M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bibor.hpp|Bibor2M::Bibor2M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bibor.hpp|Bibor3M::Bibor3M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bibor.hpp|Bibor6M::Bibor6M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bibor.hpp|Bibor1Y::Bibor1Y(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/bkbm.hpp|Bkbm::Bkbm(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bkbm.hpp|Bkbm1M::Bkbm1M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bkbm.hpp|Bkbm2M::Bkbm2M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bkbm.hpp|Bkbm3M::Bkbm3M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bkbm.hpp|Bkbm4M::Bkbm4M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bkbm.hpp|Bkbm5M::Bkbm5M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/bkbm.hpp|Bkbm6M::Bkbm6M(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/cadlibor.hpp|CADLibor::CADLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/cadlibor.hpp|CADLiborON::CADLiborON(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/cdi.hpp|Cdi::Cdi(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/cdor.hpp|Cdor::Cdor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/chflibor.hpp|CHFLibor::CHFLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/chflibor.hpp|DailyTenorCHFLibor::DailyTenorCHFLibor(Natural settlementDays, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/corra.hpp|Corra::Corra(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/custom.hpp|CustomIborIndex::CustomIborIndex(const std::string & familyName, const Period & tenor, Natural settlementDays, const Currency & currency, const Calendar & fixingCalendar, Calendar valueCalendar, Calendar maturityCalendar, BusinessDayConvention convention, bool endOfMonth, const DayCounter & dayCounter, const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/custom.hpp|Calendar CustomIborIndex::valueCalendar() const;+|x|ql/indexes/ibor/custom.hpp|Calendar CustomIborIndex::maturityCalendar() const;+|v|ql/indexes/ibor/destr.hpp|Destr::Destr(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/dkklibor.hpp|DKKLibor::DKKLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/eonia.hpp|Eonia::Eonia(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/estr.hpp|Estr::Estr(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/euribor.hpp|Euribor::Euribor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/euribor.hpp|Euribor365::Euribor365(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/euribor.hpp|Euribor1W::Euribor1W(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/euribor.hpp|Euribor1M::Euribor1M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/euribor.hpp|Euribor3M::Euribor3M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/euribor.hpp|Euribor6M::Euribor6M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/euribor.hpp|Euribor1Y::Euribor1Y(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/eurlibor.hpp|EURLibor::EURLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/eurlibor.hpp|DailyTenorEURLibor::DailyTenorEURLibor(Natural settlementDays, const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/eurlibor.hpp|EURLiborON::EURLiborON(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/eurlibor.hpp|EURLibor1M::EURLibor1M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/eurlibor.hpp|EURLibor3M::EURLibor3M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/eurlibor.hpp|EURLibor6M::EURLibor6M(const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/eurlibor.hpp|EURLibor1Y::EURLibor1Y(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/fedfunds.hpp|FedFunds::FedFunds(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/gbplibor.hpp|GBPLibor::GBPLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/gbplibor.hpp|DailyTenorGBPLibor::DailyTenorGBPLibor(Natural settlementDays, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/gbplibor.hpp|GBPLiborON::GBPLiborON(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/jibar.hpp|Jibar::Jibar(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/jpylibor.hpp|JPYLibor::JPYLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/jpylibor.hpp|DailyTenorJPYLibor::DailyTenorJPYLibor(Natural settlementDays, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/kofr.hpp|Kofr::Kofr(const Handle<YieldTermStructure> & h = { });+|?|ql/indexes/ibor/libor.hpp|Libor::Libor(const std::string & familyName, const Period & tenor, Natural settlementDays, const Currency & currency, const Calendar & financialCenterCalendar, const DayCounter & dayCounter, const Handle<YieldTermStructure> & h = { });+|x|ql/indexes/ibor/libor.hpp|Calendar Libor::jointCalendar() const;+|v|ql/indexes/ibor/libor.hpp|DailyTenorLibor::DailyTenorLibor(const std::string & familyName, Natural settlementDays, const Currency & currency, const Calendar & financialCenterCalendar, const DayCounter & dayCounter, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/mosprime.hpp|Mosprime::Mosprime(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/nibor.hpp|Nibor::Nibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/nzdlibor.hpp|NZDLibor::NZDLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/nzocr.hpp|Nzocr::Nzocr(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/pribor.hpp|Pribor::Pribor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/robor.hpp|Robor::Robor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/saron.hpp|Saron::Saron(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/seklibor.hpp|SEKLibor::SEKLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/shibor.hpp|Shibor::Shibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/shir.hpp|Shir::Shir(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/sofr.hpp|Sofr::Sofr(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/sonia.hpp|Sonia::Sonia(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/swestr.hpp|Swestr::Swestr(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/thbfix.hpp|THBFIX::THBFIX(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/tibor.hpp|Tibor::Tibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/tonar.hpp|Tonar::Tonar(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/trlibor.hpp|TRLibor::TRLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/usdlibor.hpp|USDLibor::USDLibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/usdlibor.hpp|DailyTenorUSDLibor::DailyTenorUSDLibor(Natural settlementDays, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/usdlibor.hpp|USDLiborON::USDLiborON(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/wibor.hpp|Wibor::Wibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/zaronia.hpp|Zaronia::Zaronia(const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/ibor/zibor.hpp|Zibor::Zibor(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|?|ql/indexes/iborindex.hpp|IborIndex::IborIndex(const std::string & familyName, const Period & tenor, Natural settlementDays, const Currency & currency, const Calendar & fixingCalendar, BusinessDayConvention convention, bool endOfMonth, const DayCounter & dayCounter, Handle<YieldTermStructure> h = { });+|v|ql/indexes/iborindex.hpp|BusinessDayConvention IborIndex::businessDayConvention() const;+|v|ql/indexes/iborindex.hpp|bool IborIndex::endOfMonth() const;+| |ql/indexes/iborindex.hpp|ext::shared_ptr<IborIndex> IborIndex::clone(const Handle<YieldTermStructure> & forwarding) const;+|v|ql/indexes/iborindex.hpp|OvernightIndex::OvernightIndex(const std::string & familyName, Natural settlementDays, const Currency & currency, const Calendar & fixingCalendar, const DayCounter & dayCounter, const Handle<YieldTermStructure> & h = { });+| |ql/indexes/iborindex.hpp|Rate forecastFixing(const Date & d1, const Date & d2, Time t) const;+|v|ql/indexes/indexmanager.hpp|std::vector<std::string> IndexManager::histories() const;+|v|ql/indexes/indexmanager.hpp|void IndexManager::clearHistories();+| |ql/indexes/indexmanager.hpp|bool CaseInsensitiveCompare::operator()(const std::string & s1, const std::string & s2) const;+|v|ql/indexes/inflation/aucpi.hpp|AUCPI::AUCPI(Frequency frequency, bool revised, const Handle<ZeroInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/aucpi.hpp|YYAUCPI::YYAUCPI(Frequency frequency, bool revised, const Handle<YoYInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/euhicp.hpp|EUHICP::EUHICP(const Handle<ZeroInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/euhicp.hpp|EUHICPXT::EUHICPXT(const Handle<ZeroInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/euhicp.hpp|YYEUHICP::YYEUHICP(const Handle<YoYInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/euhicp.hpp|YYEUHICPXT::YYEUHICPXT(const Handle<YoYInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/frhicp.hpp|FRHICP::FRHICP(const Handle<ZeroInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/frhicp.hpp|YYFRHICP::YYFRHICP(const Handle<YoYInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/ukhicp.hpp|UKHICP::UKHICP(const Handle<ZeroInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/ukrpi.hpp|UKRPI::UKRPI(const Handle<ZeroInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/ukrpi.hpp|YYUKRPI::YYUKRPI(const Handle<YoYInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/uscpi.hpp|USCPI::USCPI(const Handle<ZeroInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/uscpi.hpp|YYUSCPI::YYUSCPI(const Handle<YoYInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/zacpi.hpp|ZACPI::ZACPI(const Handle<ZeroInflationTermStructure> & ts = { });+|v|ql/indexes/inflation/zacpi.hpp|YYZACPI::YYZACPI(const Handle<YoYInflationTermStructure> & ts = { });+| |ql/indexes/inflationindex.hpp|static Real CPI::laggedFixing(const ext::shared_ptr<ZeroInflationIndex> & index, const Date & date, const Period & observationLag, InterpolationType interpolationType);+| |ql/indexes/inflationindex.hpp|static Real CPI::laggedYoYRate(const ext::shared_ptr<YoYInflationIndex> & index, const Date & date, const Period & observationLag, InterpolationType interpolationType);+| |ql/indexes/inflationindex.hpp|InflationIndex::InflationIndex(std::string familyName, Region region, bool revised, Frequency frequency, const Period & availabilitiyLag, Currency currency);+| |ql/indexes/inflationindex.hpp|void InflationIndex::addFixing(const Date & fixingDate, Rate fixing, bool forceOverwrite = false);+|x|ql/indexes/inflationindex.hpp|std::string InflationIndex::familyName() const;+|x|ql/indexes/inflationindex.hpp|Region InflationIndex::region() const;+|x|ql/indexes/inflationindex.hpp|bool InflationIndex::revised() const;+|x|ql/indexes/inflationindex.hpp|Frequency InflationIndex::frequency() const;+|x|ql/indexes/inflationindex.hpp|Period InflationIndex::availabilityLag() const;+|x|ql/indexes/inflationindex.hpp|Currency InflationIndex::currency() const;+|v|ql/indexes/inflationindex.hpp|ZeroInflationIndex::ZeroInflationIndex(const std::string & familyName, const Region & region, bool revised, Frequency frequency, const Period & availabilityLag, const Currency & currency, Handle<ZeroInflationTermStructure> ts = { });+|x|ql/indexes/inflationindex.hpp|Date ZeroInflationIndex::lastFixingDate() const;+|x|ql/indexes/inflationindex.hpp|ext::shared_ptr<ZeroInflationIndex> ZeroInflationIndex::clone(const Handle<ZeroInflationTermStructure> & h) const;+|v|ql/indexes/inflationindex.hpp|bool ZeroInflationIndex::needsForecast(const Date & fixingDate) const;+|v|ql/indexes/inflationindex.hpp|YoYInflationIndex::YoYInflationIndex(const ext::shared_ptr<ZeroInflationIndex> & underlyingIndex, Handle<YoYInflationTermStructure> ts = { });+|v|ql/indexes/inflationindex.hpp|YoYInflationIndex::YoYInflationIndex(const std::string & familyName, const Region & region, bool revised, Frequency frequency, const Period & availabilityLag, const Currency & currency, Handle<YoYInflationTermStructure> ts = { });+|x|ql/indexes/inflationindex.hpp|Date YoYInflationIndex::lastFixingDate() const;+|x|ql/indexes/inflationindex.hpp|bool YoYInflationIndex::interpolated() const;+|x|ql/indexes/inflationindex.hpp|bool YoYInflationIndex::ratio() const;+|x|ql/indexes/inflationindex.hpp|ext::shared_ptr<ZeroInflationIndex> YoYInflationIndex::underlyingIndex() const;+|x|ql/indexes/inflationindex.hpp|ext::shared_ptr<YoYInflationIndex> YoYInflationIndex::clone(const Handle<YoYInflationTermStructure> & h) const;+|v|ql/indexes/inflationindex.hpp|bool YoYInflationIndex::needsForecast(const Date & fixingDate) const;+| |ql/indexes/inflationindex.hpp|QuantLib::CPI::InterpolationType effectiveInterpolationType(const QuantLib::CPI::InterpolationType & type);+| |ql/indexes/inflationindex.hpp|QuantLib::CPI::InterpolationType effectiveInterpolationType(const QuantLib::CPI::InterpolationType & type, const ext::shared_ptr<YoYInflationIndex> & index);+| |ql/indexes/inflationindex.hpp|bool isInterpolated(const QuantLib::CPI::InterpolationType & type);+| |ql/indexes/inflationindex.hpp|bool isInterpolated(const QuantLib::CPI::InterpolationType & type, const ext::shared_ptr<YoYInflationIndex> & index);+| |ql/indexes/inflationindex.hpp|std::string name() const;+| |ql/indexes/interestrateindex.hpp|InterestRateIndex::InterestRateIndex(std::string familyName, const Period & tenor, Natural settlementDays, Currency currency, Calendar fixingCalendar, DayCounter dayCounter);+|x|ql/indexes/interestrateindex.hpp|std::string InterestRateIndex::familyName() const;+|x|ql/indexes/interestrateindex.hpp|Period InterestRateIndex::tenor() const;+|v|ql/indexes/interestrateindex.hpp|Natural InterestRateIndex::fixingDays() const;+|v|ql/indexes/interestrateindex.hpp|const Currency & InterestRateIndex::currency() const;+|v|ql/indexes/interestrateindex.hpp|const DayCounter & InterestRateIndex::dayCounter() const;+|v|ql/indexes/interestrateindex.hpp|Date InterestRateIndex::fixingDate(const Date & valueDate) const;+|v|ql/indexes/interestrateindex.hpp|Date InterestRateIndex::valueDate(const Date & fixingDate) const;+|v|ql/indexes/interestrateindex.hpp|Date InterestRateIndex::maturityDate(const Date & valueDate) const;+|v|ql/indexes/interestrateindex.hpp|Rate InterestRateIndex::forecastFixing(const Date & fixingDate) const;+| |ql/indexes/interestrateindex.hpp|std::string name() const;+| |ql/indexes/interestrateindex.hpp|Calendar fixingCalendar() const;+| |ql/indexes/interestrateindex.hpp|bool isValidFixingDate(const Date & d) const;+| |ql/indexes/region.hpp|const std::string & Region::name() const;+| |ql/indexes/region.hpp|const std::string & Region::code() const;+| |ql/indexes/region.hpp|Data::Data(std::string name, std::string code);+| |ql/indexes/region.hpp|bool operator==(const Region &, const Region &);+| |ql/indexes/region.hpp|bool operator!=(const Region &, const Region &);+|v|ql/indexes/region.hpp|CustomRegion::CustomRegion(const std::string & name, const std::string & code);+|v|ql/indexes/region.hpp|AustraliaRegion::AustraliaRegion();+|v|ql/indexes/region.hpp|EURegion::EURegion();+|v|ql/indexes/region.hpp|FranceRegion::FranceRegion();+|v|ql/indexes/region.hpp|UKRegion::UKRegion();+|v|ql/indexes/region.hpp|USRegion::USRegion();+|v|ql/indexes/region.hpp|ZARegion::ZARegion();+| |ql/indexes/region.hpp|bool operator==(const Region & r1, const Region & r2);+| |ql/indexes/region.hpp|bool operator!=(const Region & r1, const Region & r2);+|v|ql/indexes/swap/chfliborswap.hpp|ChfLiborSwapIsdaFix::ChfLiborSwapIsdaFix(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/chfliborswap.hpp|ChfLiborSwapIsdaFix::ChfLiborSwapIsdaFix(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/euriborswap.hpp|EuriborSwapIsdaFixA::EuriborSwapIsdaFixA(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/euriborswap.hpp|EuriborSwapIsdaFixA::EuriborSwapIsdaFixA(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/euriborswap.hpp|EuriborSwapIsdaFixB::EuriborSwapIsdaFixB(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/euriborswap.hpp|EuriborSwapIsdaFixB::EuriborSwapIsdaFixB(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/euriborswap.hpp|EuriborSwapIfrFix::EuriborSwapIfrFix(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/euriborswap.hpp|EuriborSwapIfrFix::EuriborSwapIfrFix(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/eurliborswap.hpp|EurLiborSwapIsdaFixA::EurLiborSwapIsdaFixA(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/eurliborswap.hpp|EurLiborSwapIsdaFixA::EurLiborSwapIsdaFixA(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/eurliborswap.hpp|EurLiborSwapIsdaFixB::EurLiborSwapIsdaFixB(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/eurliborswap.hpp|EurLiborSwapIsdaFixB::EurLiborSwapIsdaFixB(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/eurliborswap.hpp|EurLiborSwapIfrFix::EurLiborSwapIfrFix(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/eurliborswap.hpp|EurLiborSwapIfrFix::EurLiborSwapIfrFix(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/gbpliborswap.hpp|GbpLiborSwapIsdaFix::GbpLiborSwapIsdaFix(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/gbpliborswap.hpp|GbpLiborSwapIsdaFix::GbpLiborSwapIsdaFix(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/jpyliborswap.hpp|JpyLiborSwapIsdaFixAm::JpyLiborSwapIsdaFixAm(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/jpyliborswap.hpp|JpyLiborSwapIsdaFixAm::JpyLiborSwapIsdaFixAm(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/jpyliborswap.hpp|JpyLiborSwapIsdaFixPm::JpyLiborSwapIsdaFixPm(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/jpyliborswap.hpp|JpyLiborSwapIsdaFixPm::JpyLiborSwapIsdaFixPm(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/usdliborswap.hpp|UsdLiborSwapIsdaFixAm::UsdLiborSwapIsdaFixAm(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/usdliborswap.hpp|UsdLiborSwapIsdaFixAm::UsdLiborSwapIsdaFixAm(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|v|ql/indexes/swap/usdliborswap.hpp|UsdLiborSwapIsdaFixPm::UsdLiborSwapIsdaFixPm(const Period & tenor, const Handle<YieldTermStructure> & h = { });+|v|ql/indexes/swap/usdliborswap.hpp|UsdLiborSwapIsdaFixPm::UsdLiborSwapIsdaFixPm(const Period & tenor, const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting);+|?|ql/indexes/swapindex.hpp|SwapIndex::SwapIndex(const std::string & familyName, const Period & tenor, Natural settlementDays, const Currency & currency, const Calendar & fixingCalendar, const Period & fixedLegTenor, BusinessDayConvention fixedLegConvention, const DayCounter & fixedLegDayCounter, ext::shared_ptr<IborIndex> iborIndex);+|?|ql/indexes/swapindex.hpp|SwapIndex::SwapIndex(const std::string & familyName, const Period & tenor, Natural settlementDays, const Currency & currency, const Calendar & fixingCalendar, const Period & fixedLegTenor, BusinessDayConvention fixedLegConvention, const DayCounter & fixedLegDayCounter, ext::shared_ptr<IborIndex> iborIndex, Handle<YieldTermStructure> discountingTermStructure);+|x|ql/indexes/swapindex.hpp|Period SwapIndex::fixedLegTenor() const;+|x|ql/indexes/swapindex.hpp|BusinessDayConvention SwapIndex::fixedLegConvention() const;+|x|ql/indexes/swapindex.hpp|ext::shared_ptr<IborIndex> SwapIndex::iborIndex() const;+| |ql/indexes/swapindex.hpp|bool SwapIndex::exogenousDiscount() const;+|v|ql/indexes/swapindex.hpp|ext::shared_ptr<VanillaSwap> SwapIndex::underlyingSwap(const Date & fixingDate) const;+| |ql/indexes/swapindex.hpp|ext::shared_ptr<SwapIndex> SwapIndex::clone(const Handle<YieldTermStructure> & forwarding) const;+| |ql/indexes/swapindex.hpp|ext::shared_ptr<SwapIndex> SwapIndex::clone(const Handle<YieldTermStructure> & forwarding, const Handle<YieldTermStructure> & discounting) const;+| |ql/indexes/swapindex.hpp|ext::shared_ptr<SwapIndex> SwapIndex::clone(const Period & tenor) const;+|v|ql/indexes/swapindex.hpp|OvernightIndexedSwapIndex::OvernightIndexedSwapIndex(const std::string & familyName, const Period & tenor, Natural settlementDays, const Currency & currency, const ext::shared_ptr<OvernightIndex> & overnightIndex, bool telescopicValueDates = false, RateAveraging::Type averagingMethod = RateAveraging::Compound);+|x|ql/indexes/swapindex.hpp|ext::shared_ptr<OvernightIndex> OvernightIndexedSwapIndex::overnightIndex() const;+| |ql/instrument.hpp|Instrument::Instrument();+|v|ql/instrument.hpp|Real Instrument::NPV() const;+|v|ql/instrument.hpp|Real Instrument::errorEstimate() const;+|v|ql/instrument.hpp|const Date & Instrument::valuationDate() const;+| |ql/instrument.hpp|const ext::shared_ptr<PricingEngine> & Instrument::pricingEngine() const;+|v|ql/instrument.hpp|bool Instrument::isExpired() const;+|v|ql/instrument.hpp|void Instrument::setPricingEngine(const ext::shared_ptr<PricingEngine> &);+| |ql/instrument.hpp|void Instrument::setupArguments(PricingEngine::arguments *) const;+| |ql/instrument.hpp|void Instrument::fetchResults(const PricingEngine::results *) const;+| |ql/instrument.hpp|void results::reset();+| |ql/instrument.hpp|void calculate() const;+| |ql/instrument.hpp|void setupExpired() const;+| |ql/instrument.hpp|void performCalculations() const;+| |ql/instrument.hpp|void fetchResults(const PricingEngine::results * r) const;+|v|ql/instruments/asianoption.hpp|ContinuousAveragingAsianOption::ContinuousAveragingAsianOption(Average::Type averageType, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|u|ql/instruments/asianoption.hpp|ContinuousAveragingAsianOption::ContinuousAveragingAsianOption(Average::Type averageType, Date startDate, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|?|ql/instruments/asianoption.hpp|DiscreteAveragingAsianOption::DiscreteAveragingAsianOption(Average::Type averageType, Real runningAccumulator, Size pastFixings, std::vector<Date> fixingDates, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|?|ql/instruments/asianoption.hpp|DiscreteAveragingAsianOption::DiscreteAveragingAsianOption(Average::Type averageType, std::vector<Date> fixingDates, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise, std::vector<Real> allPastFixings = std::vector<Real>());+| |ql/instruments/asianoption.hpp|arguments::arguments();+| |ql/instruments/asianoption.hpp|void arguments::validate() const;+|v|ql/instruments/assetswap.hpp|AssetSwap::AssetSwap(bool payBondCoupon, ext::shared_ptr<Bond> bond, Real bondCleanPrice, const ext::shared_ptr<IborIndex> & iborIndex, Spread spread, Schedule floatSchedule = Schedule(), const DayCounter & floatingDayCount = DayCounter(), bool parAssetSwap = true, Real gearing = 1.0, Real nonParRepayment = Null<Real>(), Date dealMaturity = Date());+|v|ql/instruments/assetswap.hpp|Spread AssetSwap::fairSpread() const;+|v|ql/instruments/assetswap.hpp|Real AssetSwap::floatingLegBPS() const;+|v|ql/instruments/assetswap.hpp|Real AssetSwap::floatingLegNPV() const;+|v|ql/instruments/assetswap.hpp|Real AssetSwap::fairCleanPrice() const;+|v|ql/instruments/assetswap.hpp|Real AssetSwap::fairNonParRepayment() const;+|v|ql/instruments/assetswap.hpp|bool AssetSwap::parSwap() const;+|x|ql/instruments/assetswap.hpp|Spread AssetSwap::spread() const;+|v|ql/instruments/assetswap.hpp|Real AssetSwap::cleanPrice() const;+|v|ql/instruments/assetswap.hpp|Real AssetSwap::nonParRepayment() const;+|x|ql/instruments/assetswap.hpp|const ext::shared_ptr<Bond> & AssetSwap::bond() const;+|v|ql/instruments/assetswap.hpp|bool AssetSwap::payBondCoupon() const;+|v|ql/instruments/assetswap.hpp|const Leg & AssetSwap::bondLeg() const;+|v|ql/instruments/assetswap.hpp|const Leg & AssetSwap::floatingLeg() const;+| |ql/instruments/assetswap.hpp|arguments::arguments();+| |ql/instruments/assetswap.hpp|void arguments::validate() const;+| |ql/instruments/assetswap.hpp|void results::reset();+| |ql/instruments/averagetype.hpp|std::ostream & operator<<(std::ostream & out, Average::Type type);+|v|ql/instruments/barrieroption.hpp|BarrierOption::BarrierOption(Barrier::Type barrierType, Real barrier, Real rebate, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|v|ql/instruments/barrieroption.hpp|Volatility BarrierOption::impliedVolatility(Real price, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Real accuracy = 1.0e-4, Size maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0) const;+|v|ql/instruments/barrieroption.hpp|Volatility BarrierOption::impliedVolatility(Real price, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, const DividendSchedule & dividends, Real accuracy = 1.0e-4, Size maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0) const;+| |ql/instruments/barrieroption.hpp|arguments::arguments();+| |ql/instruments/barrieroption.hpp|void arguments::validate() const;+| |ql/instruments/barriertype.hpp|std::ostream & operator<<(std::ostream & out, Barrier::Type type);+| |ql/instruments/basketoption.hpp|BasketPayoff::BasketPayoff(ext::shared_ptr<Payoff> p);+| |ql/instruments/basketoption.hpp|Real BasketPayoff::operator()(const Array & a) const;+| |ql/instruments/basketoption.hpp|Real BasketPayoff::accumulate(const Array & a) const;+|x|ql/instruments/basketoption.hpp|ext::shared_ptr<Payoff> BasketPayoff::basePayoff();+|v|ql/instruments/basketoption.hpp|MinBasketPayoff::MinBasketPayoff(const ext::shared_ptr<Payoff> & p);+|v|ql/instruments/basketoption.hpp|MaxBasketPayoff::MaxBasketPayoff(const ext::shared_ptr<Payoff> & p);+|v|ql/instruments/basketoption.hpp|AverageBasketPayoff::AverageBasketPayoff(const ext::shared_ptr<Payoff> & p, Array weights);+|v|ql/instruments/basketoption.hpp|AverageBasketPayoff::AverageBasketPayoff(const ext::shared_ptr<Payoff> & p, Size n);+|x|ql/instruments/basketoption.hpp|const Array & AverageBasketPayoff::weights() const;+|v|ql/instruments/basketoption.hpp|SpreadBasketPayoff::SpreadBasketPayoff(const ext::shared_ptr<Payoff> & p);+|v|ql/instruments/basketoption.hpp|BasketOption::BasketOption(const ext::shared_ptr<BasketPayoff> &, const ext::shared_ptr<Exercise> &);+|v|ql/instruments/bmaswap.hpp|BMASwap::BMASwap(Type type, Real nominal, Schedule liborSchedule, Rate liborFraction, Rate liborSpread, const ext::shared_ptr<IborIndex> & liborIndex, const DayCounter & liborDayCount, Schedule bmaSchedule, const ext::shared_ptr<BMAIndex> & bmaIndex, const DayCounter & bmaDayCount);+|v|ql/instruments/bmaswap.hpp|Real BMASwap::liborFraction() const;+|x|ql/instruments/bmaswap.hpp|Spread BMASwap::liborSpread() const;+|x|ql/instruments/bmaswap.hpp|Real BMASwap::nominal() const;+|x|ql/instruments/bmaswap.hpp|Type BMASwap::type() const;+|v|ql/instruments/bmaswap.hpp|const Leg & BMASwap::bmaLeg() const;+|v|ql/instruments/bmaswap.hpp|const Leg & BMASwap::liborLeg() const;+|v|ql/instruments/bmaswap.hpp|Real BMASwap::liborLegBPS() const;+|v|ql/instruments/bmaswap.hpp|Real BMASwap::liborLegNPV() const;+|v|ql/instruments/bmaswap.hpp|Rate BMASwap::fairLiborFraction() const;+|v|ql/instruments/bmaswap.hpp|Spread BMASwap::fairLiborSpread() const;+|v|ql/instruments/bmaswap.hpp|Real BMASwap::bmaLegBPS() const;+|v|ql/instruments/bmaswap.hpp|Real BMASwap::bmaLegNPV() const;+| |ql/instruments/bond.hpp|Price::Price();+| |ql/instruments/bond.hpp|Price::Price(Real amount, Type type);+| |ql/instruments/bond.hpp|Real Price::amount() const;+| |ql/instruments/bond.hpp|Type Price::type() const;+| |ql/instruments/bond.hpp|bool Price::isValid() const;+|v|ql/instruments/bond.hpp|Bond::Bond(Natural settlementDays, Calendar calendar, const Date & issueDate = Date(), const Leg & coupons = Leg());+|x|ql/instruments/bond.hpp|Bond::Bond(Natural settlementDays, Calendar calendar, Real faceAmount, const Date & maturityDate, const Date & issueDate = Date(), const Leg & cashflows = Leg());+|x|ql/instruments/bond.hpp|Natural Bond::settlementDays() const;+|x|ql/instruments/bond.hpp|const Calendar & Bond::calendar() const;+|?|ql/instruments/bond.hpp|const std::vector<Real> & Bond::notionals() const;+|v|ql/instruments/bond.hpp|Real Bond::notional(Date d = Date()) const;+|v|ql/instruments/bond.hpp|const Leg & Bond::cashflows() const;+|v|ql/instruments/bond.hpp|const Leg & Bond::redemptions() const;+|x|ql/instruments/bond.hpp|const ext::shared_ptr<CashFlow> & Bond::redemption() const;+|v|ql/instruments/bond.hpp|Date Bond::startDate() const;+|v|ql/instruments/bond.hpp|Date Bond::maturityDate() const;+|x|ql/instruments/bond.hpp|Date Bond::issueDate() const;+|v|ql/instruments/bond.hpp|bool Bond::isTradable(Date d = Date()) const;+|v|ql/instruments/bond.hpp|Date Bond::settlementDate(Date d = Date()) const;+|v|ql/instruments/bond.hpp|Real Bond::cleanPrice() const;+|v|ql/instruments/bond.hpp|Real Bond::dirtyPrice() const;+|v|ql/instruments/bond.hpp|Real Bond::settlementValue() const;+|v|ql/instruments/bond.hpp|Rate Bond::yield(const DayCounter & dc, Compounding comp, Frequency freq, Real accuracy = 1.0e-8, Size maxEvaluations = 100, Real guess = 0.05, Bond::Price::Type priceType = Bond::Price::Clean) const;+|x|ql/instruments/bond.hpp|Real Bond::cleanPrice(Rate yield, const DayCounter & dc, Compounding comp, Frequency freq, Date settlementDate = Date()) const;+|v|ql/instruments/bond.hpp|Real Bond::dirtyPrice(Rate yield, const DayCounter & dc, Compounding comp, Frequency freq, Date settlementDate = Date()) const;+|v|ql/instruments/bond.hpp|Real Bond::settlementValue(Real cleanPrice) const;+|v|ql/instruments/bond.hpp|Rate Bond::yield(Bond::Price price, const DayCounter & dc, Compounding comp, Frequency freq, Date settlementDate = Date(), Real accuracy = 1.0e-8, Size maxEvaluations = 100, Real guess = 0.05) const;+|v|ql/instruments/bond.hpp|Real Bond::accruedAmount(Date d = Date()) const;+|v|ql/instruments/bond.hpp|Rate Bond::nextCouponRate(Date d = Date()) const;+|v|ql/instruments/bond.hpp|Rate Bond::previousCouponRate(Date d = Date()) const;+|v|ql/instruments/bond.hpp|Date Bond::nextCashFlowDate(Date d = Date()) const;+|v|ql/instruments/bond.hpp|Date Bond::previousCashFlowDate(Date d = Date()) const;+| |ql/instruments/bond.hpp|void arguments::validate() const;+| |ql/instruments/bond.hpp|void results::reset();+|v|ql/instruments/bondforward.hpp|BondForward::BondForward(const Date & valueDate, const Date & maturityDate, Position::Type type, Real strike, Natural settlementDays, const DayCounter & dayCounter, const Calendar & calendar, BusinessDayConvention businessDayConvention, const ext::shared_ptr<Bond> & bond, const Handle<YieldTermStructure> & discountCurve = Handle<YieldTermStructure>(), const Handle<YieldTermStructure> & incomeDiscountCurve = Handle<YieldTermStructure>());+|v|ql/instruments/bondforward.hpp|Real BondForward::forwardPrice() const;+|v|ql/instruments/bondforward.hpp|Real BondForward::cleanForwardPrice() const;+|v|ql/instruments/bonds/amortizingcmsratebond.hpp|AmortizingCmsRateBond::AmortizingCmsRateBond(Natural settlementDays, const std::vector<Real> & notionals, Schedule schedule, const ext::shared_ptr<SwapIndex> & index, const DayCounter & paymentDayCounter, BusinessDayConvention paymentConvention = Following, Natural fixingDays = Null<Natural>(), const std::vector<Real> & gearings = { 1.0 }, const std::vector<Spread> & spreads = { 0.0 }, const std::vector<Rate> & caps = { }, const std::vector<Rate> & floors = { }, bool inArrears = false, const Date & issueDate = Date(), const std::vector<Real> & redemptions = { 100.0 });+|v|ql/instruments/bonds/amortizingfixedratebond.hpp|AmortizingFixedRateBond::AmortizingFixedRateBond(Natural settlementDays, const std::vector<Real> & notionals, Schedule schedule, const std::vector<Rate> & coupons, const DayCounter & accrualDayCounter, BusinessDayConvention paymentConvention = Following, const Date & issueDate = Date(), const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false, const std::vector<Real> & redemptions = { 100.0 }, Integer paymentLag = 0);+|x|ql/instruments/bonds/amortizingfixedratebond.hpp|Frequency AmortizingFixedRateBond::frequency() const;+|x|ql/instruments/bonds/amortizingfixedratebond.hpp|const DayCounter & AmortizingFixedRateBond::dayCounter() const;+|v|ql/instruments/bonds/amortizingfixedratebond.hpp|Schedule sinkingSchedule(const Date & startDate, const Period & bondLength, const Frequency & frequency, const Calendar & paymentCalendar);+|v|ql/instruments/bonds/amortizingfixedratebond.hpp|std::vector<Real> sinkingNotionals(const Period & bondLength, const Frequency & frequency, Rate couponRate, Real initialNotional);+|v|ql/instruments/bonds/amortizingfloatingratebond.hpp|AmortizingFloatingRateBond::AmortizingFloatingRateBond(Natural settlementDays, const std::vector<Real> & notional, Schedule schedule, const ext::shared_ptr<IborIndex> & index, const DayCounter & accrualDayCounter, BusinessDayConvention paymentConvention = Following, Natural fixingDays = Null<Natural>(), const std::vector<Real> & gearings = { 1.0 }, const std::vector<Spread> & spreads = { 0.0 }, const std::vector<Rate> & caps = { }, const std::vector<Rate> & floors = { }, bool inArrears = false, const Date & issueDate = Date(), const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false, const std::vector<Real> & redemptions = { 100.0 }, Integer paymentLag = 0);+|x|ql/instruments/bonds/btp.hpp|CCTEU::CCTEU(const Date & maturityDate, Spread spread, const Handle<YieldTermStructure> & fwdCurve = Handle<YieldTermStructure>(), const Date & startDate = Date(), const Date & issueDate = Date());+|v|ql/instruments/bonds/btp.hpp|BTP::BTP(const Date & maturityDate, Rate fixedRate, const Date & startDate = Date(), const Date & issueDate = Date());+|v|ql/instruments/bonds/btp.hpp|BTP::BTP(const Date & maturityDate, Rate fixedRate, Real redemption, const Date & startDate = Date(), const Date & issueDate = Date());+|x|ql/instruments/bonds/btp.hpp|Rate BTP::yield(Real cleanPrice, Date settlementDate = Date(), Real accuracy = 1.0e-8, Size maxEvaluations = 100) const;+|v|ql/instruments/bonds/btp.hpp|RendistatoBasket::RendistatoBasket(const std::vector<ext::shared_ptr<BTP>> & btps, const std::vector<Real> & outstandings, std::vector<Handle<Quote>> cleanPriceQuotes);+|x|ql/instruments/bonds/btp.hpp|Size RendistatoBasket::size() const;+|x|ql/instruments/bonds/btp.hpp|const std::vector<ext::shared_ptr<BTP>> & RendistatoBasket::btps() const;+|x|ql/instruments/bonds/btp.hpp|const std::vector<Handle<Quote>> & RendistatoBasket::cleanPriceQuotes() const;+|x|ql/instruments/bonds/btp.hpp|const std::vector<Real> & RendistatoBasket::outstandings() const;+|x|ql/instruments/bonds/btp.hpp|const std::vector<Real> & RendistatoBasket::weights() const;+|x|ql/instruments/bonds/btp.hpp|Real RendistatoBasket::outstanding() const;+|v|ql/instruments/bonds/btp.hpp|RendistatoCalculator::RendistatoCalculator(ext::shared_ptr<RendistatoBasket> basket, ext::shared_ptr<Euribor> euriborIndex, Handle<YieldTermStructure> discountCurve);+|v|ql/instruments/bonds/btp.hpp|Rate RendistatoCalculator::yield() const;+|v|ql/instruments/bonds/btp.hpp|Time RendistatoCalculator::duration() const;+|v|ql/instruments/bonds/btp.hpp|const std::vector<Rate> & RendistatoCalculator::yields() const;+|v|ql/instruments/bonds/btp.hpp|const std::vector<Time> & RendistatoCalculator::durations() const;+|v|ql/instruments/bonds/btp.hpp|const std::vector<Time> & RendistatoCalculator::swapLengths() const;+|v|ql/instruments/bonds/btp.hpp|const std::vector<Rate> & RendistatoCalculator::swapRates() const;+|v|ql/instruments/bonds/btp.hpp|const std::vector<Rate> & RendistatoCalculator::swapYields() const;+|v|ql/instruments/bonds/btp.hpp|const std::vector<Time> & RendistatoCalculator::swapDurations() const;+|v|ql/instruments/bonds/btp.hpp|ext::shared_ptr<VanillaSwap> RendistatoCalculator::equivalentSwap() const;+|v|ql/instruments/bonds/btp.hpp|Rate RendistatoCalculator::equivalentSwapRate() const;+|v|ql/instruments/bonds/btp.hpp|Rate RendistatoCalculator::equivalentSwapYield() const;+|v|ql/instruments/bonds/btp.hpp|Time RendistatoCalculator::equivalentSwapDuration() const;+|v|ql/instruments/bonds/btp.hpp|Time RendistatoCalculator::equivalentSwapLength() const;+|v|ql/instruments/bonds/btp.hpp|Spread RendistatoCalculator::equivalentSwapSpread() const;+|v|ql/instruments/bonds/btp.hpp|RendistatoEquivalentSwapLengthQuote::RendistatoEquivalentSwapLengthQuote(ext::shared_ptr<RendistatoCalculator> r);+|v|ql/instruments/bonds/btp.hpp|RendistatoEquivalentSwapSpreadQuote::RendistatoEquivalentSwapSpreadQuote(ext::shared_ptr<RendistatoCalculator> r);+|u|ql/instruments/bonds/btp.hpp|Real accruedAmount(Date d) const;+|u|ql/instruments/bonds/btp.hpp|Real value() const;+|v|ql/instruments/bonds/cmsratebond.hpp|CmsRateBond::CmsRateBond(Natural settlementDays, Real faceAmount, Schedule schedule, const ext::shared_ptr<SwapIndex> & index, const DayCounter & paymentDayCounter, BusinessDayConvention paymentConvention = Following, Natural fixingDays = Null<Natural>(), const std::vector<Real> & gearings = { 1.0 }, const std::vector<Spread> & spreads = { 0.0 }, const std::vector<Rate> & caps = { }, const std::vector<Rate> & floors = { }, bool inArrears = false, Real redemption = 100.0, const Date & issueDate = Date());+|?|ql/instruments/bonds/convertiblebonds.hpp|SoftCallability::SoftCallability(const Bond::Price & price, const Date & date, Real trigger);+|x|ql/instruments/bonds/convertiblebonds.hpp|Real SoftCallability::trigger() const;+|x|ql/instruments/bonds/convertiblebonds.hpp|Real ConvertibleBond::conversionRatio() const;+|x|ql/instruments/bonds/convertiblebonds.hpp|const CallabilitySchedule & ConvertibleBond::callability() const;+|v|ql/instruments/bonds/convertiblebonds.hpp|ConvertibleZeroCouponBond::ConvertibleZeroCouponBond(const ext::shared_ptr<Exercise> & exercise, Real conversionRatio, const CallabilitySchedule & callability, const Date & issueDate, Natural settlementDays, const DayCounter & dayCounter, const Schedule & schedule, Real redemption = 100);+|v|ql/instruments/bonds/convertiblebonds.hpp|ConvertibleFixedCouponBond::ConvertibleFixedCouponBond(const ext::shared_ptr<Exercise> & exercise, Real conversionRatio, const CallabilitySchedule & callability, const Date & issueDate, Natural settlementDays, const std::vector<Rate> & coupons, const DayCounter & dayCounter, const Schedule & schedule, Real redemption = 100, const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false);+|v|ql/instruments/bonds/convertiblebonds.hpp|ConvertibleFloatingRateBond::ConvertibleFloatingRateBond(const ext::shared_ptr<Exercise> & exercise, Real conversionRatio, const CallabilitySchedule & callability, const Date & issueDate, Natural settlementDays, const ext::shared_ptr<IborIndex> & index, Natural fixingDays, const std::vector<Spread> & spreads, const DayCounter & dayCounter, const Schedule & schedule, Real redemption = 100, const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false);+| |ql/instruments/bonds/convertiblebonds.hpp|arguments::arguments();+| |ql/instruments/bonds/convertiblebonds.hpp|void arguments::validate() const;+|v|ql/instruments/bonds/cpibond.hpp|CPIBond::CPIBond(Natural settlementDays, Real faceAmount, Real baseCPI, const Period & observationLag, ext::shared_ptr<ZeroInflationIndex> cpiIndex, CPI::InterpolationType observationInterpolation, Schedule schedule, const std::vector<Rate> & coupons, const DayCounter & accrualDayCounter, BusinessDayConvention paymentConvention = ModifiedFollowing, const Date & issueDate = Date(), const Calendar & paymentCalendar = Calendar(), const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false);+|x|ql/instruments/bonds/cpibond.hpp|CPIBond::CPIBond(Natural settlementDays, Real faceAmount, bool growthOnly, Real baseCPI, const Period & observationLag, ext::shared_ptr<ZeroInflationIndex> cpiIndex, CPI::InterpolationType observationInterpolation, Schedule schedule, const std::vector<Rate> & coupons, const DayCounter & accrualDayCounter, BusinessDayConvention paymentConvention = ModifiedFollowing, const Date & issueDate = Date(), const Calendar & paymentCalendar = Calendar(), const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false);+|x|ql/instruments/bonds/cpibond.hpp|Frequency CPIBond::frequency() const;+|x|ql/instruments/bonds/cpibond.hpp|const DayCounter & CPIBond::dayCounter() const;+|x|ql/instruments/bonds/cpibond.hpp|bool CPIBond::growthOnly() const;+|x|ql/instruments/bonds/cpibond.hpp|Real CPIBond::baseCPI() const;+|x|ql/instruments/bonds/cpibond.hpp|Period CPIBond::observationLag() const;+|x|ql/instruments/bonds/cpibond.hpp|const ext::shared_ptr<ZeroInflationIndex> & CPIBond::cpiIndex() const;+|x|ql/instruments/bonds/cpibond.hpp|CPI::InterpolationType CPIBond::observationInterpolation() const;+|v|ql/instruments/bonds/fixedratebond.hpp|FixedRateBond::FixedRateBond(Natural settlementDays, Real faceAmount, Schedule schedule, const std::vector<Rate> & coupons, const DayCounter & accrualDayCounter, BusinessDayConvention paymentConvention = Following, Real redemption = 100.0, const Date & issueDate = Date(), const Calendar & paymentCalendar = Calendar(), const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false, const DayCounter & firstPeriodDayCounter = DayCounter());+|x|ql/instruments/bonds/fixedratebond.hpp|Frequency FixedRateBond::frequency() const;+|x|ql/instruments/bonds/fixedratebond.hpp|const DayCounter & FixedRateBond::dayCounter() const;+|x|ql/instruments/bonds/fixedratebond.hpp|const DayCounter & FixedRateBond::firstPeriodDayCounter() const;+|v|ql/instruments/bonds/floatingratebond.hpp|FloatingRateBond::FloatingRateBond(Natural settlementDays, Real faceAmount, Schedule schedule, const ext::shared_ptr<IborIndex> & iborIndex, const DayCounter & accrualDayCounter, BusinessDayConvention paymentConvention = Following, Natural fixingDays = Null<Natural>(), const std::vector<Real> & gearings = { 1.0 }, const std::vector<Spread> & spreads = { 0.0 }, const std::vector<Rate> & caps = { }, const std::vector<Rate> & floors = { }, bool inArrears = false, Real redemption = 100.0, const Date & issueDate = Date(), const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false, BusinessDayConvention fixingConvention = Preceding);+|v|ql/instruments/bonds/zerocouponbond.hpp|ZeroCouponBond::ZeroCouponBond(Natural settlementDays, const Calendar & calendar, Real faceAmount, const Date & maturityDate, BusinessDayConvention paymentConvention = Following, Real redemption = 100.0, const Date & issueDate = Date());+|?|ql/instruments/callabilityschedule.hpp|Callability::Callability(const Bond::Price & price, Type type, const Date & date);+| |ql/instruments/callabilityschedule.hpp|const Bond::Price & Callability::price() const;+|x|ql/instruments/callabilityschedule.hpp|Type Callability::type() const;+| |ql/instruments/callabilityschedule.hpp|void accept(AcyclicVisitor & v);+| |ql/instruments/capfloor.hpp|CapFloor::CapFloor(Type type, Leg floatingLeg, std::vector<Rate> capRates, std::vector<Rate> floorRates);+| |ql/instruments/capfloor.hpp|CapFloor::CapFloor(Type type, Leg floatingLeg, const std::vector<Rate> & strikes);+|x|ql/instruments/capfloor.hpp|Type CapFloor::type() const;+|x|ql/instruments/capfloor.hpp|const std::vector<Rate> & CapFloor::capRates() const;+|x|ql/instruments/capfloor.hpp|const std::vector<Rate> & CapFloor::floorRates() const;+|x|ql/instruments/capfloor.hpp|const Leg & CapFloor::floatingLeg() const;+| |ql/instruments/capfloor.hpp|Date CapFloor::startDate() const;+| |ql/instruments/capfloor.hpp|Date CapFloor::maturityDate() const;+| |ql/instruments/capfloor.hpp|ext::shared_ptr<FloatingRateCoupon> CapFloor::lastFloatingRateCoupon() const;+|v|ql/instruments/capfloor.hpp|ext::shared_ptr<CapFloor> CapFloor::optionlet(Size n) const;+|v|ql/instruments/capfloor.hpp|Rate CapFloor::atmRate(const YieldTermStructure & discountCurve) const;+|v|ql/instruments/capfloor.hpp|Volatility CapFloor::impliedVolatility(Real price, const Handle<YieldTermStructure> & disc, Volatility guess, Real accuracy = 1.0e-4, Natural maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0, VolatilityType type = ShiftedLognormal, Real displacement = 0.0) const;+|v|ql/instruments/capfloor.hpp|Cap::Cap(const Leg & floatingLeg, const std::vector<Rate> & exerciseRates);+|v|ql/instruments/capfloor.hpp|Floor::Floor(const Leg & floatingLeg, const std::vector<Rate> & exerciseRates);+|v|ql/instruments/capfloor.hpp|Collar::Collar(const Leg & floatingLeg, const std::vector<Rate> & capRates, const std::vector<Rate> & floorRates);+| |ql/instruments/capfloor.hpp|arguments::arguments();+| |ql/instruments/capfloor.hpp|void arguments::validate() const;+| |ql/instruments/capfloor.hpp|std::ostream & operator<<(std::ostream &, CapFloor::Type);+| |ql/instruments/claim.hpp|Real Claim::amount(const Date & defaultDate, Real notional, Real recoveryRate) const;+|v|ql/instruments/claim.hpp|FaceValueAccrualClaim::FaceValueAccrualClaim(const ext::shared_ptr<Bond> & referenceSecurity);+|?|ql/instruments/cliquetoption.hpp|CliquetOption::CliquetOption(const ext::shared_ptr<PercentageStrikePayoff> &, const ext::shared_ptr<EuropeanExercise> & maturity, std::vector<Date> resetDates);+| |ql/instruments/cliquetoption.hpp|arguments::arguments();+| |ql/instruments/cliquetoption.hpp|void arguments::validate() const;+|v|ql/instruments/complexchooseroption.hpp|ComplexChooserOption::ComplexChooserOption(Date choosingDate, Real strikeCall, Real strikePut, const ext::shared_ptr<Exercise> & exerciseCall, ext::shared_ptr<Exercise> exercisePut);+| |ql/instruments/complexchooseroption.hpp|void arguments::validate() const;+| |ql/instruments/compositeinstrument.hpp|void CompositeInstrument::add(const ext::shared_ptr<Instrument> & instrument, Real multiplier = 1.0);+| |ql/instruments/compositeinstrument.hpp|void CompositeInstrument::subtract(const ext::shared_ptr<Instrument> & instrument, Real multiplier = 1.0);+|v|ql/instruments/compoundoption.hpp|CompoundOption::CompoundOption(const ext::shared_ptr<StrikedTypePayoff> & motherPayoff, const ext::shared_ptr<Exercise> & motherExercise, ext::shared_ptr<StrikedTypePayoff> daughterPayoff, ext::shared_ptr<Exercise> daughterExercise);+| |ql/instruments/compoundoption.hpp|void arguments::validate() const;+|v|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|ConstNotionalCrossCurrencyBasisSwap::ConstNotionalCrossCurrencyBasisSwap(Real payNominal, Currency payCurrency, Schedule paySchedule, const ext::shared_ptr<IborIndex> & payIndex, Spread paySpread, Real payGearing, Real recNominal, Currency recCurrency, Schedule recSchedule, const ext::shared_ptr<IborIndex> & recIndex, Spread recSpread, Real recGearing, Integer payPaymentLag = 0, Integer recPaymentLag = 0, bool payCompoundSpread = false, Natural payLookbackDays = Null<Natural>(), bool payObservationShift = false, Natural payLockoutDays = 0, RateAveraging::Type payAveragingMethod = RateAveraging::Compound, bool recCompoundSpread = false, Natural recLookbackDays = Null<Natural>(), bool recObservationShift = false, Natural recLockoutDays = 0, RateAveraging::Type recAveragingMethod = RateAveraging::Compound, bool telescopicValueDates = false, std::optional<bool> useIndexedCoupons = std::nullopt, bool paymentLagOnNotionalExchanges = false, StubIndexSelection payStubIndexSelection = { }, StubIndexSelection recStubIndexSelection = { });+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|Real ConstNotionalCrossCurrencyBasisSwap::payNominal() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|const Currency & ConstNotionalCrossCurrencyBasisSwap::payCurrency() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|const Schedule & ConstNotionalCrossCurrencyBasisSwap::paySchedule() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|const ext::shared_ptr<IborIndex> & ConstNotionalCrossCurrencyBasisSwap::payIndex() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|Spread ConstNotionalCrossCurrencyBasisSwap::paySpread() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|Real ConstNotionalCrossCurrencyBasisSwap::payGearing() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|Real ConstNotionalCrossCurrencyBasisSwap::recNominal() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|const Currency & ConstNotionalCrossCurrencyBasisSwap::recCurrency() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|const Schedule & ConstNotionalCrossCurrencyBasisSwap::recSchedule() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|const ext::shared_ptr<IborIndex> & ConstNotionalCrossCurrencyBasisSwap::recIndex() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|Spread ConstNotionalCrossCurrencyBasisSwap::recSpread() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|Real ConstNotionalCrossCurrencyBasisSwap::recGearing() const;+|v|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|Spread ConstNotionalCrossCurrencyBasisSwap::fairPaySpread() const;+|v|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|Spread ConstNotionalCrossCurrencyBasisSwap::fairRecSpread() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|void arguments::validate() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|void results::reset();+|v|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|ConstNotionalCrossCurrencyFixedVsFloatingSwap::ConstNotionalCrossCurrencyFixedVsFloatingSwap(Type type, Real fixedNominal, Currency fixedCurrency, Schedule fixedSchedule, Rate fixedRate, DayCounter fixedDayCount, BusinessDayConvention fixedPaymentBdc, Natural fixedPaymentLag, const Calendar & fixedPaymentCalendar, Real floatNominal, Currency floatCurrency, Schedule floatSchedule, const ext::shared_ptr<IborIndex> & floatIndex, Spread floatSpread, BusinessDayConvention floatPaymentBdc, Natural floatPaymentLag, Calendar floatPaymentCalendar, bool telescopicValueDates = false, bool floatCompoundSpread = false, Natural floatLookbackDays = Null<Natural>(), bool floatObservationShift = false, Natural floatLockoutDays = 0, RateAveraging::Type floatAveragingMethod = RateAveraging::Compound, std::optional<bool> useIndexedCoupons = std::nullopt, StubIndexSelection floatStubIndexSelection = { });+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Type ConstNotionalCrossCurrencyFixedVsFloatingSwap::type() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Real ConstNotionalCrossCurrencyFixedVsFloatingSwap::fixedNominal() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|const Currency & ConstNotionalCrossCurrencyFixedVsFloatingSwap::fixedCurrency() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|const Schedule & ConstNotionalCrossCurrencyFixedVsFloatingSwap::fixedSchedule() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Rate ConstNotionalCrossCurrencyFixedVsFloatingSwap::fixedRate() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|const DayCounter & ConstNotionalCrossCurrencyFixedVsFloatingSwap::fixedDayCount() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|BusinessDayConvention ConstNotionalCrossCurrencyFixedVsFloatingSwap::fixedPaymentBdc() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Natural ConstNotionalCrossCurrencyFixedVsFloatingSwap::fixedPaymentLag() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|const Calendar & ConstNotionalCrossCurrencyFixedVsFloatingSwap::fixedPaymentCalendar() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Real ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatNominal() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|const Currency & ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatCurrency() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|const Schedule & ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatSchedule() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|const ext::shared_ptr<IborIndex> & ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatIndex() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Rate ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatSpread() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|BusinessDayConvention ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatPaymentBdc() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Natural ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatPaymentLag() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|const Calendar & ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatPaymentCalendar() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|bool ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatCompoundSpread() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Natural ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatLookbackDays() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Natural ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatLockoutDays() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|RateAveraging::Type ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatAveragingMethod() const;+|v|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Rate ConstNotionalCrossCurrencyFixedVsFloatingSwap::fairRate() const;+|v|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|Spread ConstNotionalCrossCurrencyFixedVsFloatingSwap::fairSpread() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|void arguments::validate() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|void results::reset();+|x|ql/instruments/constnotionalcrosscurrencyswap.hpp|void arguments::validate() const;+|x|ql/instruments/constnotionalcrosscurrencyswap.hpp|void results::reset();+|v|ql/instruments/cpicapfloor.hpp|CPICapFloor::CPICapFloor(Option::Type type, Real nominal, const Date & startDate, Real baseCPI, const Date & maturity, Calendar fixCalendar, BusinessDayConvention fixConvention, Calendar payCalendar, BusinessDayConvention payConvention, Rate strike, ext::shared_ptr<ZeroInflationIndex> inflationIndex, const Period & observationLag, CPI::InterpolationType observationInterpolation = CPI::Flat);+|x|ql/instruments/cpicapfloor.hpp|Option::Type CPICapFloor::type() const;+|x|ql/instruments/cpicapfloor.hpp|Real CPICapFloor::nominal() const;+|x|ql/instruments/cpicapfloor.hpp|Rate CPICapFloor::strike() const;+|x|ql/instruments/cpicapfloor.hpp|Date CPICapFloor::fixingDate() const;+|x|ql/instruments/cpicapfloor.hpp|Date CPICapFloor::payDate() const;+|x|ql/instruments/cpicapfloor.hpp|const ext::shared_ptr<ZeroInflationIndex> & CPICapFloor::index() const;+|x|ql/instruments/cpicapfloor.hpp|Period CPICapFloor::observationLag() const;+| |ql/instruments/cpicapfloor.hpp|void arguments::validate() const;+|v|ql/instruments/cpiswap.hpp|CPISwap::CPISwap(Type type, Real nominal, bool subtractInflationNominal, Spread spread, DayCounter floatDayCount, Schedule floatSchedule, const BusinessDayConvention & floatRoll, Natural fixingDays, ext::shared_ptr<IborIndex> floatIndex, Rate fixedRate, Real baseCPI, DayCounter fixedDayCount, Schedule fixedSchedule, const BusinessDayConvention & fixedRoll, const Period & observationLag, ext::shared_ptr<ZeroInflationIndex> fixedIndex, CPI::InterpolationType observationInterpolation = CPI::Flat, Real inflationNominal = Null<Real>());+|v|ql/instruments/cpiswap.hpp|Real CPISwap::floatLegNPV() const;+|v|ql/instruments/cpiswap.hpp|Spread CPISwap::fairSpread() const;+|v|ql/instruments/cpiswap.hpp|Real CPISwap::fixedLegNPV() const;+|v|ql/instruments/cpiswap.hpp|Rate CPISwap::fairRate() const;+|x|ql/instruments/cpiswap.hpp|Type CPISwap::type() const;+|x|ql/instruments/cpiswap.hpp|Real CPISwap::nominal() const;+|x|ql/instruments/cpiswap.hpp|bool CPISwap::subtractInflationNominal() const;+|x|ql/instruments/cpiswap.hpp|Spread CPISwap::spread() const;+|x|ql/instruments/cpiswap.hpp|const DayCounter & CPISwap::floatDayCount() const;+|x|ql/instruments/cpiswap.hpp|const Schedule & CPISwap::floatSchedule() const;+|x|ql/instruments/cpiswap.hpp|const BusinessDayConvention & CPISwap::floatPaymentRoll() const;+|x|ql/instruments/cpiswap.hpp|Natural CPISwap::fixingDays() const;+|x|ql/instruments/cpiswap.hpp|const ext::shared_ptr<IborIndex> & CPISwap::floatIndex() const;+|x|ql/instruments/cpiswap.hpp|Rate CPISwap::fixedRate() const;+|x|ql/instruments/cpiswap.hpp|Real CPISwap::baseCPI() const;+|x|ql/instruments/cpiswap.hpp|const DayCounter & CPISwap::fixedDayCount() const;+|x|ql/instruments/cpiswap.hpp|const Schedule & CPISwap::fixedSchedule() const;+|x|ql/instruments/cpiswap.hpp|const BusinessDayConvention & CPISwap::fixedPaymentRoll() const;+|x|ql/instruments/cpiswap.hpp|Period CPISwap::observationLag() const;+|x|ql/instruments/cpiswap.hpp|const ext::shared_ptr<ZeroInflationIndex> & CPISwap::fixedIndex() const;+|x|ql/instruments/cpiswap.hpp|CPI::InterpolationType CPISwap::observationInterpolation() const;+|x|ql/instruments/cpiswap.hpp|Real CPISwap::inflationNominal() const;+|x|ql/instruments/cpiswap.hpp|const Leg & CPISwap::cpiLeg() const;+|x|ql/instruments/cpiswap.hpp|const Leg & CPISwap::floatLeg() const;+| |ql/instruments/cpiswap.hpp|arguments::arguments();+| |ql/instruments/cpiswap.hpp|void arguments::validate() const;+| |ql/instruments/cpiswap.hpp|void results::reset();+| |ql/instruments/cpiswap.hpp|Swap::Type type() const;+|v|ql/instruments/creditdefaultswap.hpp|CreditDefaultSwap::CreditDefaultSwap(Protection::Side side, Real notional, Rate spread, const Schedule & schedule, BusinessDayConvention paymentConvention, const DayCounter & dayCounter, bool settlesAccrual = true, bool paysAtDefaultTime = true, const Date & protectionStart = Date(), ext::shared_ptr<Claim> = ext::shared_ptr<Claim>(), const DayCounter & lastPeriodDayCounter = DayCounter(), bool rebatesAccrual = true, const Date & tradeDate = Date(), Natural cashSettlementDays = 3);+|v|ql/instruments/creditdefaultswap.hpp|CreditDefaultSwap::CreditDefaultSwap(Protection::Side side, Real notional, Rate upfront, Rate spread, const Schedule & schedule, BusinessDayConvention paymentConvention, const DayCounter & dayCounter, bool settlesAccrual = true, bool paysAtDefaultTime = true, const Date & protectionStart = Date(), const Date & upfrontDate = Date(), ext::shared_ptr<Claim> = ext::shared_ptr<Claim>(), const DayCounter & lastPeriodDayCounter = DayCounter(), bool rebatesAccrual = true, const Date & tradeDate = Date(), Natural cashSettlementDays = 3);+|x|ql/instruments/creditdefaultswap.hpp|Protection::Side CreditDefaultSwap::side() const;+|x|ql/instruments/creditdefaultswap.hpp|Real CreditDefaultSwap::notional() const;+|x|ql/instruments/creditdefaultswap.hpp|Rate CreditDefaultSwap::runningSpread() const;+|x|ql/instruments/creditdefaultswap.hpp|std::optional<Rate> CreditDefaultSwap::upfront() const;+|x|ql/instruments/creditdefaultswap.hpp|bool CreditDefaultSwap::settlesAccrual() const;+|x|ql/instruments/creditdefaultswap.hpp|bool CreditDefaultSwap::paysAtDefaultTime() const;+|v|ql/instruments/creditdefaultswap.hpp|const Leg & CreditDefaultSwap::coupons() const;+|x|ql/instruments/creditdefaultswap.hpp|const Date & CreditDefaultSwap::protectionStartDate() const;+|x|ql/instruments/creditdefaultswap.hpp|const Date & CreditDefaultSwap::protectionEndDate() const;+|x|ql/instruments/creditdefaultswap.hpp|bool CreditDefaultSwap::rebatesAccrual() const;+|x|ql/instruments/creditdefaultswap.hpp|const ext::shared_ptr<SimpleCashFlow> & CreditDefaultSwap::upfrontPayment() const;+|x|ql/instruments/creditdefaultswap.hpp|const ext::shared_ptr<SimpleCashFlow> & CreditDefaultSwap::accrualRebate() const;+|x|ql/instruments/creditdefaultswap.hpp|const Date & CreditDefaultSwap::tradeDate() const;+|x|ql/instruments/creditdefaultswap.hpp|Natural CreditDefaultSwap::cashSettlementDays() const;+|v|ql/instruments/creditdefaultswap.hpp|Rate CreditDefaultSwap::fairUpfront() const;+|v|ql/instruments/creditdefaultswap.hpp|Rate CreditDefaultSwap::fairSpread() const;+|v|ql/instruments/creditdefaultswap.hpp|Real CreditDefaultSwap::couponLegBPS() const;+|v|ql/instruments/creditdefaultswap.hpp|Real CreditDefaultSwap::upfrontBPS() const;+|v|ql/instruments/creditdefaultswap.hpp|Real CreditDefaultSwap::couponLegNPV() const;+|v|ql/instruments/creditdefaultswap.hpp|Real CreditDefaultSwap::defaultLegNPV() const;+|v|ql/instruments/creditdefaultswap.hpp|Real CreditDefaultSwap::upfrontNPV() const;+|v|ql/instruments/creditdefaultswap.hpp|Real CreditDefaultSwap::accrualRebateNPV() const;+|v|ql/instruments/creditdefaultswap.hpp|Rate CreditDefaultSwap::impliedHazardRate(Real targetNPV, const Handle<YieldTermStructure> & discountCurve, const DayCounter & dayCounter, Real recoveryRate = 0.4, Real accuracy = 1.0e-8, PricingModel model = Midpoint) const;+|v|ql/instruments/creditdefaultswap.hpp|Rate CreditDefaultSwap::conventionalSpread(Real conventionalRecovery, const Handle<YieldTermStructure> & discountCurve, const DayCounter & dayCounter, PricingModel model = Midpoint) const;+| |ql/instruments/creditdefaultswap.hpp|arguments::arguments();+| |ql/instruments/creditdefaultswap.hpp|void arguments::validate() const;+| |ql/instruments/creditdefaultswap.hpp|void results::reset();+| |ql/instruments/creditdefaultswap.hpp|Date cdsMaturity(const Date & tradeDate, const Period & tenor, DateGeneration::Rule rule);+|v|ql/instruments/doublebarrieroption.hpp|DoubleBarrierOption::DoubleBarrierOption(DoubleBarrier::Type barrierType, Real barrier_lo, Real barrier_hi, Real rebate, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|v|ql/instruments/doublebarrieroption.hpp|Volatility DoubleBarrierOption::impliedVolatility(Real price, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Real accuracy = 1.0e-4, Size maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0) const;+| |ql/instruments/doublebarrieroption.hpp|arguments::arguments();+| |ql/instruments/doublebarrieroption.hpp|void arguments::validate() const;+| |ql/instruments/doublebarriertype.hpp|std::ostream & operator<<(std::ostream & out, DoubleBarrier::Type type);+|v|ql/instruments/equitytotalreturnswap.hpp|EquityTotalReturnSwap::EquityTotalReturnSwap(Type type, Real nominal, Schedule schedule, ext::shared_ptr<EquityIndex> equityIndex, const ext::shared_ptr<IborIndex> & interestRateIndex, DayCounter dayCounter, Rate margin, Real gearing = 1.0, Calendar paymentCalendar = Calendar(), BusinessDayConvention paymentConvention = Unadjusted, Natural paymentDelay = 0);+|v|ql/instruments/equitytotalreturnswap.hpp|EquityTotalReturnSwap::EquityTotalReturnSwap(Type type, Real nominal, Schedule schedule, ext::shared_ptr<EquityIndex> equityIndex, const ext::shared_ptr<OvernightIndex> & interestRateIndex, DayCounter dayCounter, Rate margin, Real gearing = 1.0, Calendar paymentCalendar = Calendar(), BusinessDayConvention paymentConvention = Unadjusted, Natural paymentDelay = 0);+|x|ql/instruments/equitytotalreturnswap.hpp|Type EquityTotalReturnSwap::type() const;+|x|ql/instruments/equitytotalreturnswap.hpp|Real EquityTotalReturnSwap::nominal() const;+|x|ql/instruments/equitytotalreturnswap.hpp|const ext::shared_ptr<EquityIndex> & EquityTotalReturnSwap::equityIndex() const;+|x|ql/instruments/equitytotalreturnswap.hpp|const ext::shared_ptr<InterestRateIndex> & EquityTotalReturnSwap::interestRateIndex() const;+|x|ql/instruments/equitytotalreturnswap.hpp|const Schedule & EquityTotalReturnSwap::schedule() const;+|x|ql/instruments/equitytotalreturnswap.hpp|const DayCounter & EquityTotalReturnSwap::dayCounter() const;+|x|ql/instruments/equitytotalreturnswap.hpp|Rate EquityTotalReturnSwap::margin() const;+|x|ql/instruments/equitytotalreturnswap.hpp|Real EquityTotalReturnSwap::gearing() const;+|x|ql/instruments/equitytotalreturnswap.hpp|const Calendar & EquityTotalReturnSwap::paymentCalendar() const;+|x|ql/instruments/equitytotalreturnswap.hpp|BusinessDayConvention EquityTotalReturnSwap::paymentConvention() const;+|x|ql/instruments/equitytotalreturnswap.hpp|Natural EquityTotalReturnSwap::paymentDelay() const;+|x|ql/instruments/equitytotalreturnswap.hpp|const Leg & EquityTotalReturnSwap::equityLeg() const;+|x|ql/instruments/equitytotalreturnswap.hpp|const Leg & EquityTotalReturnSwap::interestRateLeg() const;+|v|ql/instruments/equitytotalreturnswap.hpp|Real EquityTotalReturnSwap::equityLegNPV() const;+|v|ql/instruments/equitytotalreturnswap.hpp|Real EquityTotalReturnSwap::interestRateLegNPV() const;+|v|ql/instruments/equitytotalreturnswap.hpp|Real EquityTotalReturnSwap::fairMargin() const;+|v|ql/instruments/europeanoption.hpp|EuropeanOption::EuropeanOption(const ext::shared_ptr<StrikedTypePayoff> &, const ext::shared_ptr<Exercise> &);+| |ql/instruments/fixedvsfloatingswap.hpp|FixedVsFloatingSwap::FixedVsFloatingSwap(Type type, std::vector<Real> fixedNominals, Schedule fixedSchedule, Rate fixedRate, DayCounter fixedDayCount, std::vector<Real> floatingNominals, Schedule floatingSchedule, ext::shared_ptr<IborIndex> iborIndex, Spread spread, DayCounter floatingDayCount, std::optional<BusinessDayConvention> paymentConvention = std::nullopt, Integer paymentLag = 0, const Calendar & paymentCalendar = Calendar());+|x|ql/instruments/fixedvsfloatingswap.hpp|Type FixedVsFloatingSwap::type() const;+| |ql/instruments/fixedvsfloatingswap.hpp|Real FixedVsFloatingSwap::nominal() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|const std::vector<Real> & FixedVsFloatingSwap::nominals() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|const std::vector<Real> & FixedVsFloatingSwap::fixedNominals() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|const Schedule & FixedVsFloatingSwap::fixedSchedule() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|Rate FixedVsFloatingSwap::fixedRate() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|const DayCounter & FixedVsFloatingSwap::fixedDayCount() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|const std::vector<Real> & FixedVsFloatingSwap::floatingNominals() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|const Schedule & FixedVsFloatingSwap::floatingSchedule() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|const ext::shared_ptr<IborIndex> & FixedVsFloatingSwap::iborIndex() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|Spread FixedVsFloatingSwap::spread() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|const DayCounter & FixedVsFloatingSwap::floatingDayCount() const;+| |ql/instruments/fixedvsfloatingswap.hpp|BusinessDayConvention FixedVsFloatingSwap::paymentConvention() const;+|v|ql/instruments/fixedvsfloatingswap.hpp|const Leg & FixedVsFloatingSwap::fixedLeg() const;+|v|ql/instruments/fixedvsfloatingswap.hpp|const Leg & FixedVsFloatingSwap::floatingLeg() const;+|v|ql/instruments/fixedvsfloatingswap.hpp|Real FixedVsFloatingSwap::fixedLegBPS() const;+|v|ql/instruments/fixedvsfloatingswap.hpp|Real FixedVsFloatingSwap::fixedLegNPV() const;+|v|ql/instruments/fixedvsfloatingswap.hpp|Rate FixedVsFloatingSwap::fairRate() const;+|v|ql/instruments/fixedvsfloatingswap.hpp|Real FixedVsFloatingSwap::floatingLegBPS() const;+|v|ql/instruments/fixedvsfloatingswap.hpp|Real FixedVsFloatingSwap::floatingLegNPV() const;+|v|ql/instruments/fixedvsfloatingswap.hpp|Spread FixedVsFloatingSwap::fairSpread() const;+| |ql/instruments/fixedvsfloatingswap.hpp|arguments::arguments();+| |ql/instruments/fixedvsfloatingswap.hpp|void arguments::validate() const;+| |ql/instruments/fixedvsfloatingswap.hpp|void results::reset();+| |ql/instruments/fixedvsfloatingswap.hpp|Swap::Type type() const;+|v|ql/instruments/floatfloatswap.hpp|FloatFloatSwap::FloatFloatSwap(Swap::Type type, Real nominal1, Real nominal2, Schedule schedule1, ext::shared_ptr<InterestRateIndex> index1, DayCounter dayCount1, Schedule schedule2, ext::shared_ptr<InterestRateIndex> index2, DayCounter dayCount2, bool intermediateCapitalExchange = false, bool finalCapitalExchange = false, Real gearing1 = 1.0, Real spread1 = 0.0, Real cappedRate1 = Null<Real>(), Real flooredRate1 = Null<Real>(), Real gearing2 = 1.0, Real spread2 = 0.0, Real cappedRate2 = Null<Real>(), Real flooredRate2 = Null<Real>(), const std::optional<BusinessDayConvention> & paymentConvention1 = std::nullopt, const std::optional<BusinessDayConvention> & paymentConvention2 = std::nullopt);+|v|ql/instruments/floatfloatswap.hpp|FloatFloatSwap::FloatFloatSwap(Swap::Type type, std::vector<Real> nominal1, std::vector<Real> nominal2, Schedule schedule1, ext::shared_ptr<InterestRateIndex> index1, DayCounter dayCount1, Schedule schedule2, ext::shared_ptr<InterestRateIndex> index2, DayCounter dayCount2, bool intermediateCapitalExchange = false, bool finalCapitalExchange = false, std::vector<Real> gearing1 = std::vector<Real>(), std::vector<Real> spread1 = std::vector<Real>(), std::vector<Real> cappedRate1 = std::vector<Real>(), std::vector<Real> flooredRate1 = std::vector<Real>(), std::vector<Real> gearing2 = std::vector<Real>(), std::vector<Real> spread2 = std::vector<Real>(), std::vector<Real> cappedRate2 = std::vector<Real>(), std::vector<Real> flooredRate2 = std::vector<Real>(), const std::optional<BusinessDayConvention> & paymentConvention1 = std::nullopt, const std::optional<BusinessDayConvention> & paymentConvention2 = std::nullopt);+|x|ql/instruments/floatfloatswap.hpp|Swap::Type FloatFloatSwap::type() const;+|x|ql/instruments/floatfloatswap.hpp|const std::vector<Real> & FloatFloatSwap::nominal1() const;+|x|ql/instruments/floatfloatswap.hpp|const std::vector<Real> & FloatFloatSwap::nominal2() const;+|x|ql/instruments/floatfloatswap.hpp|const Schedule & FloatFloatSwap::schedule1() const;+|x|ql/instruments/floatfloatswap.hpp|const Schedule & FloatFloatSwap::schedule2() const;+|x|ql/instruments/floatfloatswap.hpp|const ext::shared_ptr<InterestRateIndex> & FloatFloatSwap::index1() const;+|x|ql/instruments/floatfloatswap.hpp|const ext::shared_ptr<InterestRateIndex> & FloatFloatSwap::index2() const;+|x|ql/instruments/floatfloatswap.hpp|std::vector<Real> FloatFloatSwap::spread1() const;+|x|ql/instruments/floatfloatswap.hpp|std::vector<Real> FloatFloatSwap::spread2() const;+|x|ql/instruments/floatfloatswap.hpp|std::vector<Real> FloatFloatSwap::gearing1() const;+|x|ql/instruments/floatfloatswap.hpp|std::vector<Real> FloatFloatSwap::gearing2() const;+|x|ql/instruments/floatfloatswap.hpp|std::vector<Rate> FloatFloatSwap::cappedRate1() const;+|x|ql/instruments/floatfloatswap.hpp|std::vector<Rate> FloatFloatSwap::flooredRate1() const;+|x|ql/instruments/floatfloatswap.hpp|std::vector<Rate> FloatFloatSwap::cappedRate2() const;+|x|ql/instruments/floatfloatswap.hpp|std::vector<Rate> FloatFloatSwap::flooredRate2() const;+|x|ql/instruments/floatfloatswap.hpp|const DayCounter & FloatFloatSwap::dayCount1() const;+|x|ql/instruments/floatfloatswap.hpp|const DayCounter & FloatFloatSwap::dayCount2() const;+|x|ql/instruments/floatfloatswap.hpp|BusinessDayConvention FloatFloatSwap::paymentConvention1() const;+|x|ql/instruments/floatfloatswap.hpp|BusinessDayConvention FloatFloatSwap::paymentConvention2() const;+|x|ql/instruments/floatfloatswap.hpp|const Leg & FloatFloatSwap::leg1() const;+|x|ql/instruments/floatfloatswap.hpp|const Leg & FloatFloatSwap::leg2() const;+|v|ql/instruments/floatfloatswap.hpp|Spread FloatFloatSwap::fairSpread1() const;+|v|ql/instruments/floatfloatswap.hpp|Spread FloatFloatSwap::fairSpread2() const;+| |ql/instruments/floatfloatswap.hpp|arguments::arguments();+| |ql/instruments/floatfloatswap.hpp|void arguments::validate() const;+| |ql/instruments/floatfloatswap.hpp|void results::reset();+| |ql/instruments/floatfloatswap.hpp|std::vector<Real> cappedRate1() const;+| |ql/instruments/floatfloatswap.hpp|std::vector<Real> cappedRate2() const;+| |ql/instruments/floatfloatswap.hpp|std::vector<Real> flooredRate1() const;+| |ql/instruments/floatfloatswap.hpp|std::vector<Real> flooredRate2() const;+|v|ql/instruments/floatfloatswaption.hpp|FloatFloatSwaption::FloatFloatSwaption(ext::shared_ptr<FloatFloatSwap> swap, const ext::shared_ptr<Exercise> & exercise, Settlement::Type delivery = Settlement::Physical, Settlement::Method settlementMethod = Settlement::PhysicalOTC);+|x|ql/instruments/floatfloatswaption.hpp|Settlement::Type FloatFloatSwaption::settlementType() const;+|x|ql/instruments/floatfloatswaption.hpp|Settlement::Method FloatFloatSwaption::settlementMethod() const;+|x|ql/instruments/floatfloatswaption.hpp|Swap::Type FloatFloatSwaption::type() const;+|v|ql/instruments/floatfloatswaption.hpp|const ext::shared_ptr<FloatFloatSwap> & FloatFloatSwaption::underlyingSwap() const;+|v|ql/instruments/floatfloatswaption.hpp|std::vector<ext::shared_ptr<BlackCalibrationHelper>> FloatFloatSwaption::calibrationBasket(const ext::shared_ptr<SwapIndex> & standardSwapBase, const ext::shared_ptr<SwaptionVolatilityStructure> & swaptionVolatility, BasketGeneratingEngine::CalibrationBasketType basketType = BasketGeneratingEngine::MaturityStrikeByDeltaGamma) const;+| |ql/instruments/floatfloatswaption.hpp|arguments::arguments();+| |ql/instruments/floatfloatswaption.hpp|void arguments::validate() const;+|v|ql/instruments/forward.hpp|Date Forward::settlementDate() const;+|x|ql/instruments/forward.hpp|const Calendar & Forward::calendar() const;+|x|ql/instruments/forward.hpp|BusinessDayConvention Forward::businessDayConvention() const;+|x|ql/instruments/forward.hpp|const DayCounter & Forward::dayCounter() const;+|v|ql/instruments/forward.hpp|Real Forward::spotValue() const;+|v|ql/instruments/forward.hpp|Real Forward::spotIncome(const Handle<YieldTermStructure> & incomeDiscountCurve) const;+|v|ql/instruments/forward.hpp|Real Forward::forwardValue() const;+|v|ql/instruments/forward.hpp|InterestRate Forward::impliedYield(Real underlyingSpotValue, Real forwardValue, Date settlementDate, Compounding compoundingConvention, const DayCounter & dayCounter);+|v|ql/instruments/forward.hpp|ForwardTypePayoff::ForwardTypePayoff(Position::Type type, Real strike);+|x|ql/instruments/forward.hpp|Position::Type ForwardTypePayoff::forwardType() const;+|x|ql/instruments/forward.hpp|Real ForwardTypePayoff::strike() const;+| |ql/instruments/forward.hpp|std::string description() const;+| |ql/instruments/forward.hpp|Real operator()(Real price) const;+|?|ql/instruments/forwardrateagreement.hpp|ForwardRateAgreement::ForwardRateAgreement(const ext::shared_ptr<IborIndex> & index, const Date & valueDate, Position::Type type, Rate strikeForwardRate, Real notionalAmount, Handle<YieldTermStructure> discountCurve = { });+|v|ql/instruments/forwardrateagreement.hpp|ForwardRateAgreement::ForwardRateAgreement(const ext::shared_ptr<IborIndex> & index, const Date & valueDate, const Date & maturityDate, Position::Type type, Rate strikeForwardRate, Real notionalAmount, Handle<YieldTermStructure> discountCurve = { });+|v|ql/instruments/forwardrateagreement.hpp|Real ForwardRateAgreement::amount() const;+|x|ql/instruments/forwardrateagreement.hpp|const Calendar & ForwardRateAgreement::calendar() const;+|x|ql/instruments/forwardrateagreement.hpp|BusinessDayConvention ForwardRateAgreement::businessDayConvention() const;+|x|ql/instruments/forwardrateagreement.hpp|const DayCounter & ForwardRateAgreement::dayCounter() const;+|x|ql/instruments/forwardrateagreement.hpp|Date ForwardRateAgreement::fixingDate() const;+|v|ql/instruments/forwardrateagreement.hpp|InterestRate ForwardRateAgreement::forwardRate() const;+| |ql/instruments/forwardvanillaoption.hpp|ForwardOptionArguments::ForwardOptionArguments<ArgumentsType>();+| |ql/instruments/forwardvanillaoption.hpp|void ForwardOptionArguments::validate() const;+|v|ql/instruments/forwardvanillaoption.hpp|ForwardVanillaOption::ForwardVanillaOption(Real moneyness, const Date & resetDate, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+| |ql/instruments/futures.hpp|std::ostream & operator<<(std::ostream &, Futures::Type);+|v|ql/instruments/fxforward.hpp|FxForward::FxForward(Real sourceNominal, const Currency & sourceCurrency, Real targetNominal, const Currency & targetCurrency, const Date & maturityDate, bool paySourceCurrency, Natural settlementDays = 2, const Calendar & paymentCalendar = Calendar());+|v|ql/instruments/fxforward.hpp|FxForward::FxForward(Real sourceNominal, const Currency & sourceCurrency, const Currency & targetCurrency, Real forwardRate, const Date & maturityDate, bool paySourceCurrency, Natural settlementDays = 2, const Calendar & paymentCalendar = Calendar());+|x|ql/instruments/fxforward.hpp|Real FxForward::sourceNominal() const;+|x|ql/instruments/fxforward.hpp|const Currency & FxForward::sourceCurrency() const;+|x|ql/instruments/fxforward.hpp|Real FxForward::targetNominal() const;+|x|ql/instruments/fxforward.hpp|const Currency & FxForward::targetCurrency() const;+|x|ql/instruments/fxforward.hpp|const Date & FxForward::maturityDate() const;+|x|ql/instruments/fxforward.hpp|bool FxForward::paySourceCurrency() const;+|v|ql/instruments/fxforward.hpp|Real FxForward::forwardRate() const;+|x|ql/instruments/fxforward.hpp|Natural FxForward::settlementDays() const;+|x|ql/instruments/fxforward.hpp|const Calendar & FxForward::settlementCalendar() const;+|x|ql/instruments/fxforward.hpp|Date FxForward::settlementDate() const;+|v|ql/instruments/fxforward.hpp|Real FxForward::fairForwardRate() const;+|v|ql/instruments/fxforward.hpp|Real FxForward::npvSourceCurrency() const;+|v|ql/instruments/fxforward.hpp|Real FxForward::npvTargetCurrency() const;+| |ql/instruments/fxforward.hpp|void arguments::validate() const;+| |ql/instruments/fxforward.hpp|void results::reset();+|v|ql/instruments/holderextensibleoption.hpp|HolderExtensibleOption::HolderExtensibleOption(Option::Type type, Real premium, Date secondExpiryDate, Real secondStrike, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+| |ql/instruments/holderextensibleoption.hpp|void arguments::validate() const;+| |ql/instruments/impliedvolatility.hpp|static Volatility ImpliedVolatilityHelper::calculate(const Instrument & instrument, const PricingEngine & engine, SimpleQuote & volQuote, Real targetValue, Real accuracy, Natural maxEvaluations, Volatility minVol, Volatility maxVol);+| |ql/instruments/impliedvolatility.hpp|static ext::shared_ptr<GeneralizedBlackScholesProcess> ImpliedVolatilityHelper::clone(const ext::shared_ptr<GeneralizedBlackScholesProcess> &, const ext::shared_ptr<SimpleQuote> &);+|v|ql/instruments/inflationcapfloor.hpp|YoYInflationCapFloor::YoYInflationCapFloor(Type type, Leg yoyLeg, std::vector<Rate> capRates, std::vector<Rate> floorRates);+|x|ql/instruments/inflationcapfloor.hpp|YoYInflationCapFloor::YoYInflationCapFloor(Type type, Leg yoyLeg, const std::vector<Rate> & strikes);+|x|ql/instruments/inflationcapfloor.hpp|Type YoYInflationCapFloor::type() const;+|x|ql/instruments/inflationcapfloor.hpp|const std::vector<Rate> & YoYInflationCapFloor::capRates() const;+|x|ql/instruments/inflationcapfloor.hpp|const std::vector<Rate> & YoYInflationCapFloor::floorRates() const;+|x|ql/instruments/inflationcapfloor.hpp|const Leg & YoYInflationCapFloor::yoyLeg() const;+|x|ql/instruments/inflationcapfloor.hpp|Date YoYInflationCapFloor::startDate() const;+|x|ql/instruments/inflationcapfloor.hpp|Date YoYInflationCapFloor::maturityDate() const;+|x|ql/instruments/inflationcapfloor.hpp|ext::shared_ptr<YoYInflationCoupon> YoYInflationCapFloor::lastYoYInflationCoupon() const;+|v|ql/instruments/inflationcapfloor.hpp|ext::shared_ptr<YoYInflationCapFloor> YoYInflationCapFloor::optionlet(Size n) const;+|v|ql/instruments/inflationcapfloor.hpp|Rate YoYInflationCapFloor::atmRate(const YieldTermStructure & discountCurve) const;+|x|ql/instruments/inflationcapfloor.hpp|Volatility YoYInflationCapFloor::impliedVolatility(Real price, const Handle<YoYInflationTermStructure> & yoyCurve, Volatility guess, Real accuracy = 1.0e-4, Natural maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0) const;+|x|ql/instruments/inflationcapfloor.hpp|YoYInflationCap::YoYInflationCap(const Leg & yoyLeg, const std::vector<Rate> & exerciseRates);+|x|ql/instruments/inflationcapfloor.hpp|YoYInflationFloor::YoYInflationFloor(const Leg & yoyLeg, const std::vector<Rate> & exerciseRates);+|x|ql/instruments/inflationcapfloor.hpp|YoYInflationCollar::YoYInflationCollar(const Leg & yoyLeg, const std::vector<Rate> & capRates, const std::vector<Rate> & floorRates);+| |ql/instruments/inflationcapfloor.hpp|arguments::arguments();+| |ql/instruments/inflationcapfloor.hpp|void arguments::validate() const;+|x|ql/instruments/inflationcapfloor.hpp|std::ostream & operator<<(std::ostream &, YoYInflationCapFloor::Type);+| |ql/instruments/inflationcapfloor.hpp|Volatility impliedVolatility(Real, const Handle<YoYInflationTermStructure> &, Volatility, Real, Natural, Volatility, Volatility) const;+|v|ql/instruments/lookbackoption.hpp|ContinuousFloatingLookbackOption::ContinuousFloatingLookbackOption(Real currentMinmax, const ext::shared_ptr<TypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|v|ql/instruments/lookbackoption.hpp|ContinuousFixedLookbackOption::ContinuousFixedLookbackOption(Real currentMinmax, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|v|ql/instruments/lookbackoption.hpp|ContinuousPartialFloatingLookbackOption::ContinuousPartialFloatingLookbackOption(Real currentMinmax, Real lambda, Date lookbackPeriodEnd, const ext::shared_ptr<TypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|v|ql/instruments/lookbackoption.hpp|ContinuousPartialFixedLookbackOption::ContinuousPartialFixedLookbackOption(Date lookbackPeriodStart, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+| |ql/instruments/lookbackoption.hpp|void arguments::validate() const;+| |ql/instruments/makecapfloor.hpp|MakeCapFloor::MakeCapFloor(CapFloor::Type capFloorType, const Period & capFloorTenor, const ext::shared_ptr<IborIndex> & iborIndex, Rate strike, const Period & forwardStart = 0 * Days);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withNominal(Real n);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withEffectiveDate(const Date & effectiveDate, bool firstCapletExcluded);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withTenor(const Period & t);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withCalendar(const Calendar & cal);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withConvention(BusinessDayConvention bdc);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withTerminationDateConvention(BusinessDayConvention bdc);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withRule(DateGeneration::Rule r);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withEndOfMonth(bool flag = true);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withFirstDate(const Date & d);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withNextToLastDate(const Date & d);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withDayCount(const DayCounter & dc);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::asOptionlet(bool b = true);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withPricingEngine(const ext::shared_ptr<PricingEngine> & engine);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap::MakeCreditDefaultSwap(const Period & tenor, Rate runningSpread);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap::MakeCreditDefaultSwap(const Date & termDate, Rate runningSpread);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap::MakeCreditDefaultSwap(const Schedule & schedule, Rate runningSpread);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withSide(Protection::Side);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withNominal(Real);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withUpfrontRate(Real);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withCouponTenor(Period);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withDateGenerationRule(DateGeneration::Rule);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withConvention(BusinessDayConvention);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withDayCounter(const DayCounter &);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::settleAccrual(bool b = true);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::payAtDefaultTime(bool b = true);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withProtectionStart(Date);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withUpfrontDate(Date);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withClaim(ext::shared_ptr<Claim>);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withLastPeriodDayCounter(const DayCounter &);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::rebateAccrual(bool b = true);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withTradeDate(Date);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withCashSettlementDays(Natural);+| |ql/instruments/makecds.hpp|MakeCreditDefaultSwap & MakeCreditDefaultSwap::withPricingEngine(const ext::shared_ptr<PricingEngine> &);+|v|ql/instruments/makecms.hpp|MakeCms::MakeCms(const Period & swapTenor, const ext::shared_ptr<SwapIndex> & swapIndex, const ext::shared_ptr<IborIndex> & iborIndex, Spread iborSpread, const Period & forwardStart = 0 * Days);+|x|ql/instruments/makecms.hpp|MakeCms::MakeCms(const Period & swapTenor, const ext::shared_ptr<SwapIndex> & swapIndex, Spread iborSpread, const Period & forwardStart = 0 * Days);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::receiveCms(bool flag = true);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withNominal(Real n);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withEffectiveDate(const Date &);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegTenor(const Period & t);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegCalendar(const Calendar & cal);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegConvention(BusinessDayConvention bdc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegTerminationDateConvention(BusinessDayConvention);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegRule(DateGeneration::Rule r);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegEndOfMonth(bool flag = true);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegFirstDate(const Date & d);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegNextToLastDate(const Date & d);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsLegDayCount(const DayCounter & dc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegTenor(const Period & t);+|v|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegCalendar(const Calendar & cal);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegConvention(BusinessDayConvention bdc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegTerminationDateConvention(BusinessDayConvention bdc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegRule(DateGeneration::Rule r);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegEndOfMonth(bool flag = true);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegFirstDate(const Date & d);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegNextToLastDate(const Date & d);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withFloatingLegDayCount(const DayCounter & dc);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withAtmSpread(bool flag = true);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withDiscountingTermStructure(const Handle<YieldTermStructure> & discountingTermStructure);+|x|ql/instruments/makecms.hpp|MakeCms & MakeCms::withCmsCouponPricer(const ext::shared_ptr<CmsCouponPricer> & couponPricer);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap::MakeMultipleResetsSwap(const Period & tenor, const ext::shared_ptr<IborIndex> & iborIndex, Size resetsPerCoupon);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::receiveFixed(bool flag = true);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withType(Swap::Type type);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withNominal(Real n);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withFixedRate(Rate fixedRate);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withSettlementDays(Natural settlementDays);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withEffectiveDate(const Date &);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withTerminationDate(const Date &);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withForwardStart(const Period & fwdStart);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withFixedLegFrequency(Frequency f);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withFixedLegDayCount(const DayCounter & dc);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withFixedLegConvention(BusinessDayConvention bdc);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withFloatingLegSpread(Spread sp);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withAveragingMethod(RateAveraging::Type m);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withDiscountingTermStructure(const Handle<YieldTermStructure> &);+| |ql/instruments/makemultipleresetsswap.hpp|MakeMultipleResetsSwap & MakeMultipleResetsSwap::withPricingEngine(const ext::shared_ptr<PricingEngine> &);+| |ql/instruments/makeois.hpp|MakeOIS::MakeOIS(const Period & swapTenor, const ext::shared_ptr<OvernightIndex> & overnightIndex, Rate fixedRate, const Period & fwdStart = 0 * Days);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::receiveFixed(bool flag = true);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withType(Swap::Type type);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withNominal(Real n);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withSettlementDays(Natural settlementDays);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withEffectiveDate(const Date &);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withTerminationDate(const Date &);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withRule(DateGeneration::Rule r);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withFixedLegRule(DateGeneration::Rule r);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withOvernightLegRule(DateGeneration::Rule r);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withPaymentFrequency(Frequency f);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withFixedLegPaymentFrequency(Frequency f);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withOvernightLegPaymentFrequency(Frequency f);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withPaymentAdjustment(BusinessDayConvention convention);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withPaymentLag(Integer lag);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withPaymentCalendar(const Calendar & cal);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withCalendar(const Calendar & cal);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withFixedLegCalendar(const Calendar & cal);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withOvernightLegCalendar(const Calendar & cal);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withConvention(BusinessDayConvention bdc);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withFixedLegConvention(BusinessDayConvention bdc);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withOvernightLegConvention(BusinessDayConvention bdc);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withTerminationDateConvention(BusinessDayConvention bdc);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withFixedLegTerminationDateConvention(BusinessDayConvention bdc);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withOvernightLegTerminationDateConvention(BusinessDayConvention bdc);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withEndOfMonth(bool flag = true);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withFixedLegEndOfMonth(bool flag = true);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withOvernightLegEndOfMonth(bool flag = true);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withMaturityEndOfMonth(bool flag = true);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withFixedLegDayCount(const DayCounter & dc);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withOvernightLegSpread(Spread sp);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withDiscountingTermStructure(const Handle<YieldTermStructure> & discountingTermStructure);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withTelescopicValueDates(bool telescopicValueDates);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withAveragingMethod(RateAveraging::Type averagingMethod);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withLookbackDays(Natural lookbackDays);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withLockoutDays(Natural lockoutDays);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withObservationShift(bool applyObservationShift = true);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withPricingEngine(const ext::shared_ptr<PricingEngine> & engine);+| |ql/instruments/makeswaption.hpp|MakeSwaption::MakeSwaption(ext::shared_ptr<SwapIndex> swapIndex, const Period & optionTenor, Rate strike = Null<Rate>());+| |ql/instruments/makeswaption.hpp|MakeSwaption::MakeSwaption(ext::shared_ptr<SwapIndex> swapIndex, const Date & fixingDate, Rate strike = Null<Rate>());+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withNominal(Real n);+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withSettlementType(Settlement::Type delivery);+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withSettlementMethod(Settlement::Method settlementMethod);+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withOptionConvention(BusinessDayConvention bdc);+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withExerciseDate(const Date &);+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withExerciseCalendar(const Calendar &);+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withUnderlyingType(Swap::Type type);+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withIndexedCoupons(const std::optional<bool> & b = true);+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withAtParCoupons(bool b = true);+| |ql/instruments/makeswaption.hpp|MakeSwaption & MakeSwaption::withPricingEngine(const ext::shared_ptr<PricingEngine> & engine);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap::MakeVanillaSwap(const Period & swapTenor, const ext::shared_ptr<IborIndex> & iborIndex, Rate fixedRate, const Period & forwardStart = 0 * Days);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::receiveFixed(bool flag = true);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withType(Swap::Type type);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withNominal(Real n);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withSettlementDays(Natural settlementDays);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withEffectiveDate(const Date &);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withTerminationDate(const Date &);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withRule(DateGeneration::Rule r);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withPaymentConvention(BusinessDayConvention bdc);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedLegTenor(const Period & t);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedLegCalendar(const Calendar & cal);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedLegConvention(BusinessDayConvention bdc);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedLegTerminationDateConvention(BusinessDayConvention bdc);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedLegRule(DateGeneration::Rule r);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedLegEndOfMonth(bool flag = true);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedLegFirstDate(const Date & d);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedLegNextToLastDate(const Date & d);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedLegDayCount(const DayCounter & dc);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegTenor(const Period & t);+|v|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegCalendar(const Calendar & cal);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegConvention(BusinessDayConvention bdc);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegTerminationDateConvention(BusinessDayConvention bdc);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegRule(DateGeneration::Rule r);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegEndOfMonth(bool flag = true);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withMaturityEndOfMonth(bool flag = true);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegFirstDate(const Date & d);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegNextToLastDate(const Date & d);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegDayCount(const DayCounter & dc);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFloatingLegSpread(Spread sp);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withDiscountingTermStructure(const Handle<YieldTermStructure> & discountCurve);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withPricingEngine(const ext::shared_ptr<PricingEngine> & engine);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withIndexedCoupons(const std::optional<bool> & b = true);+|x|ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withAtParCoupons(bool b = true);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor::MakeYoYInflationCapFloor(YoYInflationCapFloor::Type capFloorType, ext::shared_ptr<YoYInflationIndex> index, const Size & length, Calendar cal, const Period & observationLag, CPI::InterpolationType interpolation);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withNominal(Real n);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withEffectiveDate(const Date & effectiveDate);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withFirstCapletExcluded();+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withPaymentDayCounter(const DayCounter &);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withPaymentAdjustment(BusinessDayConvention);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withFixingDays(Natural fixingDays);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withPricingEngine(const ext::shared_ptr<PricingEngine> & engine);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::asOptionlet(bool b = true);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withStrike(Rate strike);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withAtmStrike(const Handle<YieldTermStructure> & nominalTermStructure);+| |ql/instruments/makeyoyinflationcapfloor.hpp|MakeYoYInflationCapFloor & MakeYoYInflationCapFloor::withForwardStart(Period forwardStart);+|v|ql/instruments/margrabeoption.hpp|MargrabeOption::MargrabeOption(Integer Q1, Integer Q2, const ext::shared_ptr<Exercise> &);+|x|ql/instruments/margrabeoption.hpp|Real MargrabeOption::delta1() const;+|x|ql/instruments/margrabeoption.hpp|Real MargrabeOption::delta2() const;+|x|ql/instruments/margrabeoption.hpp|Real MargrabeOption::gamma1() const;+|x|ql/instruments/margrabeoption.hpp|Real MargrabeOption::gamma2() const;+| |ql/instruments/margrabeoption.hpp|arguments::arguments();+| |ql/instruments/margrabeoption.hpp|void arguments::validate() const;+| |ql/instruments/margrabeoption.hpp|results::results();+| |ql/instruments/margrabeoption.hpp|void results::reset();+|v|ql/instruments/multiassetoption.hpp|MultiAssetOption::MultiAssetOption(const ext::shared_ptr<Payoff> &, const ext::shared_ptr<Exercise> &);+|v|ql/instruments/multiassetoption.hpp|Real MultiAssetOption::delta() const;+|v|ql/instruments/multiassetoption.hpp|Real MultiAssetOption::gamma() const;+|v|ql/instruments/multiassetoption.hpp|Real MultiAssetOption::theta() const;+|v|ql/instruments/multiassetoption.hpp|Real MultiAssetOption::vega() const;+|v|ql/instruments/multiassetoption.hpp|Real MultiAssetOption::rho() const;+|v|ql/instruments/multiassetoption.hpp|Real MultiAssetOption::dividendRho() const;+| |ql/instruments/multiassetoption.hpp|void results::reset();+| |ql/instruments/multipleresetsswap.hpp|MultipleResetsSwap::MultipleResetsSwap(Type type, Real nominal, const Schedule & fixedSchedule, Rate fixedRate, DayCounter fixedDayCount, Schedule fullResetSchedule, const ext::shared_ptr<IborIndex> & iborIndex, Size resetsPerCoupon, Spread spread = 0.0, RateAveraging::Type averagingMethod = RateAveraging::Compound, std::optional<BusinessDayConvention> paymentConvention = std::nullopt, Integer paymentLag = 0, const Calendar & paymentCalendar = Calendar());+|x|ql/instruments/multipleresetsswap.hpp|const Schedule & MultipleResetsSwap::fullResetSchedule() const;+|x|ql/instruments/multipleresetsswap.hpp|Size MultipleResetsSwap::resetsPerCoupon() const;+|x|ql/instruments/multipleresetsswap.hpp|RateAveraging::Type MultipleResetsSwap::averagingMethod() const;+|v|ql/instruments/nonstandardswap.hpp|NonstandardSwap::NonstandardSwap(const FixedVsFloatingSwap & fromVanilla);+|v|ql/instruments/nonstandardswap.hpp|NonstandardSwap::NonstandardSwap(Swap::Type type, std::vector<Real> fixedNominal, const std::vector<Real> & floatingNominal, Schedule fixedSchedule, std::vector<Real> fixedRate, DayCounter fixedDayCount, Schedule floatingSchedule, ext::shared_ptr<IborIndex> iborIndex, Real gearing, Spread spread, DayCounter floatingDayCount, bool intermediateCapitalExchange = false, bool finalCapitalExchange = false, std::optional<BusinessDayConvention> paymentConvention = std::nullopt, Integer paymentLag = 0, Calendar paymentCalendar = Calendar());+|x|ql/instruments/nonstandardswap.hpp|Swap::Type NonstandardSwap::type() const;+|x|ql/instruments/nonstandardswap.hpp|const std::vector<Real> & NonstandardSwap::fixedNominal() const;+|x|ql/instruments/nonstandardswap.hpp|const std::vector<Real> & NonstandardSwap::floatingNominal() const;+|x|ql/instruments/nonstandardswap.hpp|const Schedule & NonstandardSwap::fixedSchedule() const;+|v|ql/instruments/nonstandardswap.hpp|const std::vector<Real> & NonstandardSwap::fixedRate() const;+|x|ql/instruments/nonstandardswap.hpp|const DayCounter & NonstandardSwap::fixedDayCount() const;+|x|ql/instruments/nonstandardswap.hpp|const Schedule & NonstandardSwap::floatingSchedule() const;+|x|ql/instruments/nonstandardswap.hpp|const ext::shared_ptr<IborIndex> & NonstandardSwap::iborIndex() const;+|x|ql/instruments/nonstandardswap.hpp|Spread NonstandardSwap::spread() const;+|x|ql/instruments/nonstandardswap.hpp|Real NonstandardSwap::gearing() const;+|x|ql/instruments/nonstandardswap.hpp|const std::vector<Spread> & NonstandardSwap::spreads() const;+|x|ql/instruments/nonstandardswap.hpp|const std::vector<Real> & NonstandardSwap::gearings() const;+|x|ql/instruments/nonstandardswap.hpp|const DayCounter & NonstandardSwap::floatingDayCount() const;+|x|ql/instruments/nonstandardswap.hpp|BusinessDayConvention NonstandardSwap::paymentConvention() const;+|x|ql/instruments/nonstandardswap.hpp|const Leg & NonstandardSwap::fixedLeg() const;+|x|ql/instruments/nonstandardswap.hpp|const Leg & NonstandardSwap::floatingLeg() const;+| |ql/instruments/nonstandardswap.hpp|arguments::arguments();+| |ql/instruments/nonstandardswap.hpp|void arguments::validate() const;+| |ql/instruments/nonstandardswap.hpp|void results::reset();+|v|ql/instruments/nonstandardswaption.hpp|NonstandardSwaption::NonstandardSwaption(const Swaption & fromSwaption);+|v|ql/instruments/nonstandardswaption.hpp|NonstandardSwaption::NonstandardSwaption(ext::shared_ptr<NonstandardSwap> swap, const ext::shared_ptr<Exercise> & exercise, Settlement::Type delivery = Settlement::Physical, Settlement::Method settlementMethod = Settlement::PhysicalOTC);+|x|ql/instruments/nonstandardswaption.hpp|Settlement::Type NonstandardSwaption::settlementType() const;+|x|ql/instruments/nonstandardswaption.hpp|Settlement::Method NonstandardSwaption::settlementMethod() const;+|x|ql/instruments/nonstandardswaption.hpp|Swap::Type NonstandardSwaption::type() const;+|v|ql/instruments/nonstandardswaption.hpp|const ext::shared_ptr<NonstandardSwap> & NonstandardSwaption::underlyingSwap() const;+|v|ql/instruments/nonstandardswaption.hpp|std::vector<ext::shared_ptr<BlackCalibrationHelper>> NonstandardSwaption::calibrationBasket(const ext::shared_ptr<SwapIndex> & standardSwapBase, const ext::shared_ptr<SwaptionVolatilityStructure> & swaptionVolatility, BasketGeneratingEngine::CalibrationBasketType basketType = BasketGeneratingEngine::MaturityStrikeByDeltaGamma) const;+| |ql/instruments/nonstandardswaption.hpp|arguments::arguments();+| |ql/instruments/nonstandardswaption.hpp|void arguments::validate() const;+|v|ql/instruments/oneassetoption.hpp|OneAssetOption::OneAssetOption(const ext::shared_ptr<Payoff> &, const ext::shared_ptr<Exercise> &);+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::delta() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::deltaForward() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::elasticity() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::gamma() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::theta() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::thetaPerDay() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::vega() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::rho() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::dividendRho() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::strikeSensitivity() const;+|v|ql/instruments/oneassetoption.hpp|Real OneAssetOption::itmCashProbability() const;+| |ql/instruments/oneassetoption.hpp|void results::reset();+|v|ql/instruments/overnightindexedswap.hpp|OvernightIndexedSwap::OvernightIndexedSwap(Type type, Real nominal, const Schedule & schedule, Rate fixedRate, DayCounter fixedDC, const ext::shared_ptr<OvernightIndex> & overnightIndex, Spread spread = 0.0, Integer paymentLag = 0, BusinessDayConvention paymentAdjustment = Following, const Calendar & paymentCalendar = Calendar(), bool telescopicValueDates = false, RateAveraging::Type averagingMethod = RateAveraging::Compound, Natural lookbackDays = Null<Natural>(), Natural lockoutDays = 0, bool applyObservationShift = false, const std::optional<Integer> & roundingPrecision = std::nullopt);+|x|ql/instruments/overnightindexedswap.hpp|OvernightIndexedSwap::OvernightIndexedSwap(Type type, Real nominal, Schedule fixedSchedule, Rate fixedRate, DayCounter fixedDC, Schedule overnightSchedule, const ext::shared_ptr<OvernightIndex> & overnightIndex, Spread spread = 0.0, Integer paymentLag = 0, BusinessDayConvention paymentAdjustment = Following, const Calendar & paymentCalendar = Calendar(), bool telescopicValueDates = false, RateAveraging::Type averagingMethod = RateAveraging::Compound, Natural lookbackDays = Null<Natural>(), Natural lockoutDays = 0, bool applyObservationShift = false, const std::optional<Integer> & roundingPrecision = std::nullopt);+|x|ql/instruments/overnightindexedswap.hpp|OvernightIndexedSwap::OvernightIndexedSwap(Type type, std::vector<Real> fixedNominals, Schedule fixedSchedule, Rate fixedRate, DayCounter fixedDC, const std::vector<Real> & overnightNominals, Schedule overnightSchedule, const ext::shared_ptr<OvernightIndex> & overnightIndex, Spread spread = 0.0, Integer paymentLag = 0, BusinessDayConvention paymentAdjustment = Following, const Calendar & paymentCalendar = Calendar(), bool telescopicValueDates = false, RateAveraging::Type averagingMethod = RateAveraging::Compound, Natural lookbackDays = Null<Natural>(), Natural lockoutDays = 0, bool applyObservationShift = false, const std::optional<Integer> & roundingPrecision = std::nullopt);+|x|ql/instruments/overnightindexedswap.hpp|Frequency OvernightIndexedSwap::paymentFrequency() const;+|x|ql/instruments/overnightindexedswap.hpp|const std::vector<Real> & OvernightIndexedSwap::overnightNominals() const;+|x|ql/instruments/overnightindexedswap.hpp|const Schedule & OvernightIndexedSwap::overnightSchedule() const;+|x|ql/instruments/overnightindexedswap.hpp|const ext::shared_ptr<OvernightIndex> & OvernightIndexedSwap::overnightIndex() const;+|v|ql/instruments/overnightindexedswap.hpp|const Leg & OvernightIndexedSwap::overnightLeg() const;+|x|ql/instruments/overnightindexedswap.hpp|bool OvernightIndexedSwap::telescopicValueDates() const;+|x|ql/instruments/overnightindexedswap.hpp|RateAveraging::Type OvernightIndexedSwap::averagingMethod() const;+|x|ql/instruments/overnightindexedswap.hpp|Natural OvernightIndexedSwap::lookbackDays() const;+|x|ql/instruments/overnightindexedswap.hpp|Natural OvernightIndexedSwap::lockoutDays() const;+|x|ql/instruments/overnightindexedswap.hpp|bool OvernightIndexedSwap::applyObservationShift() const;+|v|ql/instruments/overnightindexedswap.hpp|Real OvernightIndexedSwap::overnightLegBPS() const;+|v|ql/instruments/overnightindexedswap.hpp|Real OvernightIndexedSwap::overnightLegNPV() const;+| |ql/instruments/overnightindexfuture.hpp|OvernightIndexFuture::OvernightIndexFuture(ext::shared_ptr<OvernightIndex> overnightIndex, const Date & valueDate, const Date & maturityDate, Handle<Quote> convexityAdjustment = Handle<Quote>(), RateAveraging::Type averagingMethod = RateAveraging::Compound);+| |ql/instruments/overnightindexfuture.hpp|Real OvernightIndexFuture::convexityAdjustment() const;+|x|ql/instruments/overnightindexfuture.hpp|const ext::shared_ptr<OvernightIndex> & OvernightIndexFuture::overnightIndex() const;+|x|ql/instruments/overnightindexfuture.hpp|Date OvernightIndexFuture::valueDate() const;+|x|ql/instruments/overnightindexfuture.hpp|Date OvernightIndexFuture::maturityDate() const;+|v|ql/instruments/partialtimebarrieroption.hpp|PartialTimeBarrierOption::PartialTimeBarrierOption(Barrier::Type barrierType, PartialBarrier::Range barrierRange, Real barrier, Real rebate, Date coverEventDate, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+| |ql/instruments/partialtimebarrieroption.hpp|arguments::arguments();+| |ql/instruments/partialtimebarrieroption.hpp|void arguments::validate() const;+|x|ql/instruments/payoffs.hpp|Option::Type TypePayoff::optionType() const;+|v|ql/instruments/payoffs.hpp|FloatingTypePayoff::FloatingTypePayoff(Option::Type type);+|x|ql/instruments/payoffs.hpp|Real FloatingTypePayoff::operator()(Real price, Real strike) const;+|x|ql/instruments/payoffs.hpp|Real StrikedTypePayoff::strike() const;+|v|ql/instruments/payoffs.hpp|PlainVanillaPayoff::PlainVanillaPayoff(Option::Type type, Real strike);+|v|ql/instruments/payoffs.hpp|PercentageStrikePayoff::PercentageStrikePayoff(Option::Type type, Real moneyness);+|v|ql/instruments/payoffs.hpp|AssetOrNothingPayoff::AssetOrNothingPayoff(Option::Type type, Real strike);+|v|ql/instruments/payoffs.hpp|CashOrNothingPayoff::CashOrNothingPayoff(Option::Type type, Real strike, Real cashPayoff);+|x|ql/instruments/payoffs.hpp|Real CashOrNothingPayoff::cashPayoff() const;+|v|ql/instruments/payoffs.hpp|GapPayoff::GapPayoff(Option::Type type, Real strike, Real secondStrike);+|x|ql/instruments/payoffs.hpp|Real GapPayoff::secondStrike() const;+|v|ql/instruments/payoffs.hpp|SuperFundPayoff::SuperFundPayoff(Real strike, Real secondStrike);+|x|ql/instruments/payoffs.hpp|Real SuperFundPayoff::secondStrike() const;+|v|ql/instruments/payoffs.hpp|SuperSharePayoff::SuperSharePayoff(Real strike, Real secondStrike, Real cashPayoff);+|x|ql/instruments/payoffs.hpp|Real SuperSharePayoff::secondStrike() const;+|x|ql/instruments/payoffs.hpp|Real SuperSharePayoff::cashPayoff() const;+|v|ql/instruments/perpetualfutures.hpp|PerpetualFutures::PerpetualFutures(PerpetualFutures::PayoffType payoffType, PerpetualFutures::FundingType fundingType = PerpetualFutures::FundingWithCurrentSpot, Period fundingFrequency = Period(8, Hours), Calendar cal = NullCalendar(), DayCounter dc = ActualActual(ActualActual::ISDA));+|x|ql/instruments/perpetualfutures.hpp|std::ostream & operator<<(std::ostream & out, PerpetualFutures::PayoffType type);+|x|ql/instruments/perpetualfutures.hpp|std::ostream & operator<<(std::ostream & out, PerpetualFutures::FundingType type);+|x|ql/instruments/perpetualfutures.hpp|arguments::arguments();+|x|ql/instruments/perpetualfutures.hpp|void arguments::validate() const;+|v|ql/instruments/quantobarrieroption.hpp|QuantoBarrierOption::QuantoBarrierOption(Barrier::Type barrierType, Real barrier, Real rebate, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|v|ql/instruments/quantobarrieroption.hpp|Real QuantoBarrierOption::qvega() const;+|v|ql/instruments/quantobarrieroption.hpp|Real QuantoBarrierOption::qrho() const;+|v|ql/instruments/quantobarrieroption.hpp|Real QuantoBarrierOption::qlambda() const;+|v|ql/instruments/quantoforwardvanillaoption.hpp|QuantoForwardVanillaOption::QuantoForwardVanillaOption(Real moneyness, const Date & resetDate, const ext::shared_ptr<StrikedTypePayoff> &, const ext::shared_ptr<Exercise> &);+|v|ql/instruments/quantoforwardvanillaoption.hpp|Real QuantoForwardVanillaOption::qvega() const;+|v|ql/instruments/quantoforwardvanillaoption.hpp|Real QuantoForwardVanillaOption::qrho() const;+|v|ql/instruments/quantoforwardvanillaoption.hpp|Real QuantoForwardVanillaOption::qlambda() const;+| |ql/instruments/quantovanillaoption.hpp|QuantoOptionResults::QuantoOptionResults<ResultsType>();+| |ql/instruments/quantovanillaoption.hpp|void QuantoOptionResults::reset();+|v|ql/instruments/quantovanillaoption.hpp|QuantoVanillaOption::QuantoVanillaOption(const ext::shared_ptr<StrikedTypePayoff> &, const ext::shared_ptr<Exercise> &);+|v|ql/instruments/quantovanillaoption.hpp|Real QuantoVanillaOption::qvega() const;+|v|ql/instruments/quantovanillaoption.hpp|Real QuantoVanillaOption::qrho() const;+|v|ql/instruments/quantovanillaoption.hpp|Real QuantoVanillaOption::qlambda() const;+|v|ql/instruments/simplechooseroption.hpp|SimpleChooserOption::SimpleChooserOption(Date choosingDate, Real strike, const ext::shared_ptr<Exercise> & exercise);+| |ql/instruments/simplechooseroption.hpp|arguments::arguments();+| |ql/instruments/simplechooseroption.hpp|void arguments::validate() const;+| |ql/instruments/simplifynotificationgraph.hpp|void simplifyNotificationGraph(Instrument & instrument, const Leg & leg, bool unregisterCoupons = false);+| |ql/instruments/simplifynotificationgraph.hpp|void simplifyNotificationGraph(Swap & swap, bool unregisterCoupons = false);+| |ql/instruments/simplifynotificationgraph.hpp|void simplifyNotificationGraph(Bond & bond, bool unregisterCoupons = false);+|v|ql/instruments/softbarrieroption.hpp|SoftBarrierOption::SoftBarrierOption(Barrier::Type barrierType, Real barrier_lo, Real barrier_hi, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+|v|ql/instruments/softbarrieroption.hpp|Volatility SoftBarrierOption::impliedVolatility(Real price, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Real accuracy = 1.0e-4, Size maxEvaluations = 100, Volatility minVol = 1e-6, Volatility maxVol = 4.0) const;+| |ql/instruments/softbarrieroption.hpp|arguments::arguments();+|v|ql/instruments/stickyratchet.hpp|DoubleStickyRatchetPayoff::DoubleStickyRatchetPayoff(Real type1, Real type2, Real gearing1, Real gearing2, Real gearing3, Real spread1, Real spread2, Real spread3, Real initialValue1, Real initialValue2, Real accrualFactor);+|v|ql/instruments/stickyratchet.hpp|RatchetPayoff::RatchetPayoff(Real gearing1, Real gearing2, Real spread1, Real spread2, Real initialValue, Real accrualFactor);+|v|ql/instruments/stickyratchet.hpp|StickyPayoff::StickyPayoff(Real gearing1, Real gearing2, Real spread1, Real spread2, Real initialValue, Real accrualFactor);+|v|ql/instruments/stickyratchet.hpp|RatchetMaxPayoff::RatchetMaxPayoff(Real gearing1, Real gearing2, Real gearing3, Real spread1, Real spread2, Real spread3, Real initialValue1, Real initialValue2, Real accrualFactor);+|v|ql/instruments/stickyratchet.hpp|RatchetMinPayoff::RatchetMinPayoff(Real gearing1, Real gearing2, Real gearing3, Real spread1, Real spread2, Real spread3, Real initialValue1, Real initialValue2, Real accrualFactor);+|v|ql/instruments/stickyratchet.hpp|StickyMaxPayoff::StickyMaxPayoff(Real gearing1, Real gearing2, Real gearing3, Real spread1, Real spread2, Real spread3, Real initialValue1, Real initialValue2, Real accrualFactor);+|v|ql/instruments/stickyratchet.hpp|StickyMinPayoff::StickyMinPayoff(Real gearing1, Real gearing2, Real gearing3, Real spread1, Real spread2, Real spread3, Real initialValue1, Real initialValue2, Real accrualFactor);+| |ql/instruments/stock.hpp|Stock::Stock(Handle<Quote> quote);+|v|ql/instruments/swap.hpp|Swap::Swap(const Leg & firstLeg, const Leg & secondLeg);+|v|ql/instruments/swap.hpp|Swap::Swap(const std::vector<Leg> & legs, const std::vector<bool> & payer);+|v|ql/instruments/swap.hpp|Size Swap::numberOfLegs() const;+|x|ql/instruments/swap.hpp|const std::vector<Leg> & Swap::legs() const;+|v|ql/instruments/swap.hpp|Date Swap::startDate() const;+|v|ql/instruments/swap.hpp|Date Swap::maturityDate() const;+|v|ql/instruments/swap.hpp|Real Swap::legBPS(Size j) const;+|v|ql/instruments/swap.hpp|Real Swap::legNPV(Size j) const;+|v|ql/instruments/swap.hpp|DiscountFactor Swap::startDiscounts(Size j) const;+|v|ql/instruments/swap.hpp|DiscountFactor Swap::endDiscounts(Size j) const;+|v|ql/instruments/swap.hpp|DiscountFactor Swap::npvDateDiscount() const;+|v|ql/instruments/swap.hpp|const Leg & Swap::leg(Size j) const;+|x|ql/instruments/swap.hpp|bool Swap::payer(Size j) const;+| |ql/instruments/swap.hpp|void arguments::validate() const;+| |ql/instruments/swap.hpp|void results::reset();+|x|ql/instruments/swap.hpp|std::ostream & operator<<(std::ostream & out, Swap::Type t);+| |ql/instruments/swaption.hpp|static void Settlement::checkTypeAndMethodConsistency(Settlement::Type, Settlement::Method);+| |ql/instruments/swaption.hpp|std::ostream & operator<<(std::ostream & out, Settlement::Type type);+| |ql/instruments/swaption.hpp|std::ostream & operator<<(std::ostream & out, Settlement::Method method);+|v|ql/instruments/swaption.hpp|Swaption::Swaption(ext::shared_ptr<FixedVsFloatingSwap> swap, const ext::shared_ptr<Exercise> & exercise, Settlement::Type delivery = Settlement::Physical, Settlement::Method settlementMethod = Settlement::PhysicalOTC);+|x|ql/instruments/swaption.hpp|Settlement::Type Swaption::settlementType() const;+|x|ql/instruments/swaption.hpp|Settlement::Method Swaption::settlementMethod() const;+|x|ql/instruments/swaption.hpp|Swap::Type Swaption::type() const;+|v|ql/instruments/swaption.hpp|const ext::shared_ptr<FixedVsFloatingSwap> & Swaption::underlying() const;+|v|ql/instruments/swaption.hpp|Volatility Swaption::impliedVolatility(Real price, const Handle<YieldTermStructure> & discountCurve, Volatility guess, Real accuracy = 1.0e-4, Natural maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0, VolatilityType type = ShiftedLognormal, Real displacement = 0.0, PriceType priceType = Spot) const;+| |ql/instruments/swaption.hpp|arguments::arguments();+| |ql/instruments/swaption.hpp|void arguments::validate() const;+|v|ql/instruments/twoassetbarrieroption.hpp|TwoAssetBarrierOption::TwoAssetBarrierOption(Barrier::Type barrierType, Real barrier, const ext::shared_ptr<StrikedTypePayoff> & payoff, const ext::shared_ptr<Exercise> & exercise);+| |ql/instruments/twoassetbarrieroption.hpp|arguments::arguments();+| |ql/instruments/twoassetbarrieroption.hpp|void arguments::validate() const;+|v|ql/instruments/twoassetcorrelationoption.hpp|TwoAssetCorrelationOption::TwoAssetCorrelationOption(Option::Type type, Real strike1, Real strike2, const ext::shared_ptr<Exercise> &);+| |ql/instruments/twoassetcorrelationoption.hpp|arguments::arguments();+| |ql/instruments/twoassetcorrelationoption.hpp|void arguments::validate() const;+|v|ql/instruments/vanillaoption.hpp|VanillaOption::VanillaOption(const ext::shared_ptr<StrikedTypePayoff> &, const ext::shared_ptr<Exercise> &);+|v|ql/instruments/vanillaoption.hpp|Volatility VanillaOption::impliedVolatility(Real price, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Real accuracy = 1.0e-4, Size maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0) const;+|v|ql/instruments/vanillaoption.hpp|Volatility VanillaOption::impliedVolatility(Real price, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, const DividendSchedule & dividends, Real accuracy = 1.0e-4, Size maxEvaluations = 100, Volatility minVol = 1.0e-7, Volatility maxVol = 4.0) const;+|v|ql/instruments/vanillastorageoption.hpp|VanillaStorageOption::VanillaStorageOption(const ext::shared_ptr<BermudanExercise> & ex, Real capacity, Real load, Real changeRate);+| |ql/instruments/vanillastorageoption.hpp|arguments::arguments();+| |ql/instruments/vanillastorageoption.hpp|void arguments::validate() const;+| |ql/instruments/vanillastorageoption.hpp|void setupArguments(PricingEngine::arguments * args) const;+| |ql/instruments/vanillastorageoption.hpp|bool isExpired() const;+|v|ql/instruments/vanillaswap.hpp|VanillaSwap::VanillaSwap(Type type, Real nominal, Schedule fixedSchedule, Rate fixedRate, DayCounter fixedDayCount, Schedule floatSchedule, ext::shared_ptr<IborIndex> iborIndex, Spread spread, DayCounter floatingDayCount, std::optional<BusinessDayConvention> paymentConvention = std::nullopt, std::optional<bool> useIndexedCoupons = std::nullopt);+|?|ql/instruments/vanillaswingoption.hpp|SwingExercise::SwingExercise(const std::vector<Date> & dates, const std::vector<Size> & seconds = std::vector<Size>());+|v|ql/instruments/vanillaswingoption.hpp|SwingExercise::SwingExercise(const Date & from, const Date & to, Size stepSizeSecs);+|x|ql/instruments/vanillaswingoption.hpp|const std::vector<Size> & SwingExercise::seconds() const;+|x|ql/instruments/vanillaswingoption.hpp|std::vector<Time> SwingExercise::exerciseTimes(const DayCounter & dc, const Date & refDate) const;+| |ql/instruments/vanillaswingoption.hpp|VanillaForwardPayoff::VanillaForwardPayoff(Option::Type type, Real strike);+|v|ql/instruments/vanillaswingoption.hpp|VanillaSwingOption::VanillaSwingOption(const ext::shared_ptr<Payoff> & payoff, const ext::shared_ptr<SwingExercise> & ex, Size minExerciseRights, Size maxExerciseRights);+| |ql/instruments/vanillaswingoption.hpp|arguments::arguments();+| |ql/instruments/vanillaswingoption.hpp|void arguments::validate() const;+|v|ql/instruments/varianceswap.hpp|VarianceSwap::VarianceSwap(Position::Type position, Real strike, Real notional, const Date & startDate, const Date & maturityDate);+|x|ql/instruments/varianceswap.hpp|Real VarianceSwap::strike() const;+|x|ql/instruments/varianceswap.hpp|Position::Type VarianceSwap::position() const;+|x|ql/instruments/varianceswap.hpp|Date VarianceSwap::startDate() const;+|x|ql/instruments/varianceswap.hpp|Date VarianceSwap::maturityDate() const;+|x|ql/instruments/varianceswap.hpp|Real VarianceSwap::notional() const;+|v|ql/instruments/varianceswap.hpp|Real VarianceSwap::variance() const;+| |ql/instruments/varianceswap.hpp|arguments::arguments();+| |ql/instruments/varianceswap.hpp|void arguments::validate() const;+| |ql/instruments/varianceswap.hpp|void results::reset();+|v|ql/instruments/writerextensibleoption.hpp|WriterExtensibleOption::WriterExtensibleOption(const ext::shared_ptr<PlainVanillaPayoff> & payoff1, const ext::shared_ptr<Exercise> & exercise1, const ext::shared_ptr<PlainVanillaPayoff> & payoff2, ext::shared_ptr<Exercise> exercise2);+|x|ql/instruments/writerextensibleoption.hpp|ext::shared_ptr<Payoff> WriterExtensibleOption::payoff2();+|x|ql/instruments/writerextensibleoption.hpp|ext::shared_ptr<Exercise> WriterExtensibleOption::exercise2();+| |ql/instruments/writerextensibleoption.hpp|void arguments::validate() const;+|v|ql/instruments/yearonyearinflationswap.hpp|YearOnYearInflationSwap::YearOnYearInflationSwap(Type type, Real nominal, Schedule fixedSchedule, Rate fixedRate, DayCounter fixedDayCount, Schedule yoySchedule, ext::shared_ptr<YoYInflationIndex> yoyIndex, const Period & observationLag, CPI::InterpolationType interpolation, Spread spread, DayCounter yoyDayCount, Calendar paymentCalendar, BusinessDayConvention paymentConvention = ModifiedFollowing);+|v|ql/instruments/yearonyearinflationswap.hpp|Real YearOnYearInflationSwap::fixedLegNPV() const;+|v|ql/instruments/yearonyearinflationswap.hpp|Rate YearOnYearInflationSwap::fairRate() const;+|v|ql/instruments/yearonyearinflationswap.hpp|Real YearOnYearInflationSwap::yoyLegNPV() const;+|v|ql/instruments/yearonyearinflationswap.hpp|Spread YearOnYearInflationSwap::fairSpread() const;+|x|ql/instruments/yearonyearinflationswap.hpp|Type YearOnYearInflationSwap::type() const;+|x|ql/instruments/yearonyearinflationswap.hpp|Real YearOnYearInflationSwap::nominal() const;+|x|ql/instruments/yearonyearinflationswap.hpp|const Schedule & YearOnYearInflationSwap::fixedSchedule() const;+|x|ql/instruments/yearonyearinflationswap.hpp|Rate YearOnYearInflationSwap::fixedRate() const;+|x|ql/instruments/yearonyearinflationswap.hpp|const DayCounter & YearOnYearInflationSwap::fixedDayCount() const;+|x|ql/instruments/yearonyearinflationswap.hpp|const Schedule & YearOnYearInflationSwap::yoySchedule() const;+|x|ql/instruments/yearonyearinflationswap.hpp|const ext::shared_ptr<YoYInflationIndex> & YearOnYearInflationSwap::yoyInflationIndex() const;+|x|ql/instruments/yearonyearinflationswap.hpp|Period YearOnYearInflationSwap::observationLag() const;+|x|ql/instruments/yearonyearinflationswap.hpp|Spread YearOnYearInflationSwap::spread() const;+|x|ql/instruments/yearonyearinflationswap.hpp|const DayCounter & YearOnYearInflationSwap::yoyDayCount() const;+|x|ql/instruments/yearonyearinflationswap.hpp|Calendar YearOnYearInflationSwap::paymentCalendar() const;+|x|ql/instruments/yearonyearinflationswap.hpp|BusinessDayConvention YearOnYearInflationSwap::paymentConvention() const;+|x|ql/instruments/yearonyearinflationswap.hpp|const Leg & YearOnYearInflationSwap::fixedLeg() const;+|x|ql/instruments/yearonyearinflationswap.hpp|const Leg & YearOnYearInflationSwap::yoyLeg() const;+| |ql/instruments/yearonyearinflationswap.hpp|arguments::arguments();+| |ql/instruments/yearonyearinflationswap.hpp|void arguments::validate() const;+| |ql/instruments/yearonyearinflationswap.hpp|void results::reset();+| |ql/instruments/yearonyearinflationswap.hpp|Swap::Type type() const;+|v|ql/instruments/zerocouponinflationswap.hpp|ZeroCouponInflationSwap::ZeroCouponInflationSwap(Type type, Real nominal, const Date & startDate, const Date & maturity, Calendar fixCalendar, BusinessDayConvention fixConvention, DayCounter dayCounter, Rate fixedRate, const ext::shared_ptr<ZeroInflationIndex> & infIndex, const Period & observationLag, CPI::InterpolationType observationInterpolation, bool adjustInfObsDates = false, Calendar infCalendar = Calendar(), BusinessDayConvention infConvention = BusinessDayConvention());+|x|ql/instruments/zerocouponinflationswap.hpp|Type ZeroCouponInflationSwap::type() const;+|x|ql/instruments/zerocouponinflationswap.hpp|Real ZeroCouponInflationSwap::nominal() const;+|x|ql/instruments/zerocouponinflationswap.hpp|Calendar ZeroCouponInflationSwap::fixedCalendar() const;+|x|ql/instruments/zerocouponinflationswap.hpp|BusinessDayConvention ZeroCouponInflationSwap::fixedConvention() const;+|x|ql/instruments/zerocouponinflationswap.hpp|DayCounter ZeroCouponInflationSwap::dayCounter() const;+|x|ql/instruments/zerocouponinflationswap.hpp|Rate ZeroCouponInflationSwap::fixedRate() const;+|x|ql/instruments/zerocouponinflationswap.hpp|ext::shared_ptr<ZeroInflationIndex> ZeroCouponInflationSwap::inflationIndex() const;+|x|ql/instruments/zerocouponinflationswap.hpp|Period ZeroCouponInflationSwap::observationLag() const;+|x|ql/instruments/zerocouponinflationswap.hpp|CPI::InterpolationType ZeroCouponInflationSwap::observationInterpolation() const;+|x|ql/instruments/zerocouponinflationswap.hpp|bool ZeroCouponInflationSwap::adjustObservationDates() const;+|x|ql/instruments/zerocouponinflationswap.hpp|Calendar ZeroCouponInflationSwap::inflationCalendar() const;+|x|ql/instruments/zerocouponinflationswap.hpp|BusinessDayConvention ZeroCouponInflationSwap::inflationConvention() const;+|x|ql/instruments/zerocouponinflationswap.hpp|const Leg & ZeroCouponInflationSwap::fixedLeg() const;+|x|ql/instruments/zerocouponinflationswap.hpp|const Leg & ZeroCouponInflationSwap::inflationLeg() const;+|v|ql/instruments/zerocouponinflationswap.hpp|Real ZeroCouponInflationSwap::fixedLegNPV() const;+|x|ql/instruments/zerocouponinflationswap.hpp|Real ZeroCouponInflationSwap::fixedLegBPS() const;+|v|ql/instruments/zerocouponinflationswap.hpp|Real ZeroCouponInflationSwap::inflationLegNPV() const;+|v|ql/instruments/zerocouponinflationswap.hpp|Real ZeroCouponInflationSwap::fairRate() const;+|v|ql/instruments/zerocouponswap.hpp|ZeroCouponSwap::ZeroCouponSwap(Type type, Real baseNominal, const Date & startDate, const Date & maturityDate, Real fixedPayment, ext::shared_ptr<IborIndex> iborIndex, const Calendar & paymentCalendar, BusinessDayConvention paymentConvention = Following, Natural paymentDelay = 0);+|v|ql/instruments/zerocouponswap.hpp|ZeroCouponSwap::ZeroCouponSwap(Type type, Real baseNominal, const Date & startDate, const Date & maturityDate, Rate fixedRate, const DayCounter & fixedDayCounter, ext::shared_ptr<IborIndex> iborIndex, const Calendar & paymentCalendar, BusinessDayConvention paymentConvention = Following, Natural paymentDelay = 0);+|x|ql/instruments/zerocouponswap.hpp|Type ZeroCouponSwap::type() const;+|x|ql/instruments/zerocouponswap.hpp|Real ZeroCouponSwap::baseNominal() const;+|x|ql/instruments/zerocouponswap.hpp|const ext::shared_ptr<IborIndex> & ZeroCouponSwap::iborIndex() const;+|x|ql/instruments/zerocouponswap.hpp|const Leg & ZeroCouponSwap::fixedLeg() const;+|x|ql/instruments/zerocouponswap.hpp|const Leg & ZeroCouponSwap::floatingLeg() const;+|x|ql/instruments/zerocouponswap.hpp|Real ZeroCouponSwap::fixedPayment() const;+|v|ql/instruments/zerocouponswap.hpp|Real ZeroCouponSwap::fixedLegNPV() const;+|v|ql/instruments/zerocouponswap.hpp|Real ZeroCouponSwap::floatingLegNPV() const;+|v|ql/instruments/zerocouponswap.hpp|Real ZeroCouponSwap::fairFixedPayment() const;+|v|ql/instruments/zerocouponswap.hpp|Rate ZeroCouponSwap::fairFixedRate(const DayCounter & dayCounter) const;+|?|ql/interestrate.hpp|InterestRate::InterestRate();+|v|ql/interestrate.hpp|InterestRate::InterestRate(Rate r, DayCounter dc, Compounding comp, Frequency freq);+|v|ql/interestrate.hpp|Rate InterestRate::rate() const;+|x|ql/interestrate.hpp|const DayCounter & InterestRate::dayCounter() const;+|x|ql/interestrate.hpp|Compounding InterestRate::compounding() const;+|x|ql/interestrate.hpp|Frequency InterestRate::frequency() const;+|v|ql/interestrate.hpp|DiscountFactor InterestRate::discountFactor(Time t) const;+|v|ql/interestrate.hpp|DiscountFactor InterestRate::discountFactor(const Date & d1, const Date & d2, const Date & refStart = Date(), const Date & refEnd = Date()) const;+|v|ql/interestrate.hpp|Real InterestRate::compoundFactor(Time t) const;+|v|ql/interestrate.hpp|Real InterestRate::compoundFactor(const Date & d1, const Date & d2, const Date & refStart = Date(), const Date & refEnd = Date()) const;+|?|ql/interestrate.hpp|static InterestRate InterestRate::impliedRate(Real compound, const DayCounter & resultDC, Compounding comp, Frequency freq, Time t);+|v|ql/interestrate.hpp|static InterestRate InterestRate::impliedRate(Real compound, const DayCounter & resultDC, Compounding comp, Frequency freq, const Date & d1, const Date & d2, const Date & refStart = Date(), const Date & refEnd = Date());+|v|ql/interestrate.hpp|InterestRate InterestRate::equivalentRate(Compounding comp, Frequency freq, Time t) const;+|v|ql/interestrate.hpp|InterestRate InterestRate::equivalentRate(const DayCounter & resultDC, Compounding comp, Frequency freq, Date d1, Date d2, const Date & refStart = Date(), const Date & refEnd = Date()) const;+| |ql/interestrate.hpp|std::ostream & operator<<(std::ostream &, const InterestRate &);+| |ql/legacy/libormarketmodels/lfmcovarparam.hpp|LfmCovarianceParameterization::LfmCovarianceParameterization(Size size, Size factors);+|x|ql/legacy/libormarketmodels/lfmcovarparam.hpp|Size LfmCovarianceParameterization::size() const;+|x|ql/legacy/libormarketmodels/lfmcovarparam.hpp|Size LfmCovarianceParameterization::factors() const;+| |ql/legacy/libormarketmodels/lfmcovarparam.hpp|Matrix LfmCovarianceParameterization::diffusion(Time t, const Array & x = { }) const;+|v|ql/legacy/libormarketmodels/lfmcovarparam.hpp|Matrix LfmCovarianceParameterization::covariance(Time t, const Array & x = { }) const;+| |ql/legacy/libormarketmodels/lfmcovarparam.hpp|Matrix LfmCovarianceParameterization::integratedCovariance(Time t, const Array & x = { }) const;+| |ql/legacy/libormarketmodels/lfmcovarproxy.hpp|LfmCovarianceProxy::LfmCovarianceProxy(ext::shared_ptr<LmVolatilityModel> volaModel, const ext::shared_ptr<LmCorrelationModel> & corrModel);+|x|ql/legacy/libormarketmodels/lfmcovarproxy.hpp|ext::shared_ptr<LmVolatilityModel> LfmCovarianceProxy::volatilityModel() const;+|x|ql/legacy/libormarketmodels/lfmcovarproxy.hpp|ext::shared_ptr<LmCorrelationModel> LfmCovarianceProxy::correlationModel() const;+| |ql/legacy/libormarketmodels/lfmcovarproxy.hpp|Real LfmCovarianceProxy::integratedCovariance(Size i, Size j, Time t, const Array & x = { }) const;+|v|ql/legacy/libormarketmodels/lfmhullwhiteparam.hpp|LfmHullWhiteParameterization::LfmHullWhiteParameterization(const ext::shared_ptr<LiborForwardModelProcess> & process, const ext::shared_ptr<OptionletVolatilityStructure> & capletVol, const Matrix & correlation = Matrix(), Size factors = 1);+|v|ql/legacy/libormarketmodels/lfmprocess.hpp|LiborForwardModelProcess::LiborForwardModelProcess(Size size, ext::shared_ptr<IborIndex> index);+|v|ql/legacy/libormarketmodels/lfmprocess.hpp|ext::shared_ptr<IborIndex> LiborForwardModelProcess::index() const;+|v|ql/legacy/libormarketmodels/lfmprocess.hpp|Leg LiborForwardModelProcess::cashFlows(Real amount = 1.0) const;+|v|ql/legacy/libormarketmodels/lfmprocess.hpp|void LiborForwardModelProcess::setCovarParam(const ext::shared_ptr<LfmCovarianceParameterization> & param);+|x|ql/legacy/libormarketmodels/lfmprocess.hpp|ext::shared_ptr<LfmCovarianceParameterization> LiborForwardModelProcess::covarParam() const;+|x|ql/legacy/libormarketmodels/lfmprocess.hpp|Size LiborForwardModelProcess::nextIndexReset(Time t) const;+|v|ql/legacy/libormarketmodels/lfmprocess.hpp|const std::vector<Time> & LiborForwardModelProcess::fixingTimes() const;+|v|ql/legacy/libormarketmodels/lfmprocess.hpp|const std::vector<Date> & LiborForwardModelProcess::fixingDates() const;+|v|ql/legacy/libormarketmodels/lfmprocess.hpp|const std::vector<Time> & LiborForwardModelProcess::accrualStartTimes() const;+|v|ql/legacy/libormarketmodels/lfmprocess.hpp|const std::vector<Time> & LiborForwardModelProcess::accrualEndTimes() const;+|v|ql/legacy/libormarketmodels/lfmprocess.hpp|std::vector<DiscountFactor> LiborForwardModelProcess::discountBond(const std::vector<Rate> & rates) const;+|v|ql/legacy/libormarketmodels/lfmswaptionengine.hpp|LfmSwaptionEngine::LfmSwaptionEngine(const ext::shared_ptr<LiborForwardModel> & model, Handle<YieldTermStructure> discountCurve);+|x|ql/legacy/libormarketmodels/lfmswaptionengine.hpp|void LfmSwaptionEngine::calculate() const;+|v|ql/legacy/libormarketmodels/liborforwardmodel.hpp|LiborForwardModel::LiborForwardModel(const ext::shared_ptr<LiborForwardModelProcess> & process, const ext::shared_ptr<LmVolatilityModel> & volaModel, const ext::shared_ptr<LmCorrelationModel> & corrModel);+|v|ql/legacy/libormarketmodels/liborforwardmodel.hpp|Rate LiborForwardModel::S_0(Size alpha, Size beta) const;+|x|ql/legacy/libormarketmodels/liborforwardmodel.hpp|ext::shared_ptr<SwaptionVolatilityMatrix> LiborForwardModel::getSwaptionVolatilityMatrix() const;+|v|ql/legacy/libormarketmodels/lmconstwrappercorrmodel.hpp|LmConstWrapperCorrelationModel::LmConstWrapperCorrelationModel(const ext::shared_ptr<LmCorrelationModel> & corrModel);+|v|ql/legacy/libormarketmodels/lmconstwrappervolmodel.hpp|LmConstWrapperVolatilityModel::LmConstWrapperVolatilityModel(const ext::shared_ptr<LmVolatilityModel> & volaModel);+| |ql/legacy/libormarketmodels/lmcorrmodel.hpp|LmCorrelationModel::LmCorrelationModel(Size size, Size nArguments);+|x|ql/legacy/libormarketmodels/lmcorrmodel.hpp|Size LmCorrelationModel::size() const;+|x|ql/legacy/libormarketmodels/lmcorrmodel.hpp|Size LmCorrelationModel::factors() const;+| |ql/legacy/libormarketmodels/lmcorrmodel.hpp|std::vector<Parameter> & LmCorrelationModel::params();+| |ql/legacy/libormarketmodels/lmcorrmodel.hpp|void LmCorrelationModel::setParams(const std::vector<Parameter> & arguments);+| |ql/legacy/libormarketmodels/lmcorrmodel.hpp|Matrix LmCorrelationModel::correlation(Time t, const Array & x = { }) const;+| |ql/legacy/libormarketmodels/lmcorrmodel.hpp|Matrix LmCorrelationModel::pseudoSqrt(Time t, const Array & x = { }) const;+| |ql/legacy/libormarketmodels/lmcorrmodel.hpp|Real LmCorrelationModel::correlation(Size i, Size j, Time t, const Array & x = { }) const;+| |ql/legacy/libormarketmodels/lmcorrmodel.hpp|bool LmCorrelationModel::isTimeIndependent() const;+|v|ql/legacy/libormarketmodels/lmexpcorrmodel.hpp|LmExponentialCorrelationModel::LmExponentialCorrelationModel(Size size, Real rho);+| |ql/legacy/libormarketmodels/lmextlinexpvolmodel.hpp|LmExtLinearExponentialVolModel::LmExtLinearExponentialVolModel(const std::vector<Time> & fixingTimes, Real a, Real b, Real c, Real d);+|?|ql/legacy/libormarketmodels/lmfixedvolmodel.hpp|LmFixedVolatilityModel::LmFixedVolatilityModel(Array volatilities, const std::vector<Time> & startTimes);+|v|ql/legacy/libormarketmodels/lmlinexpcorrmodel.hpp|LmLinearExponentialCorrelationModel::LmLinearExponentialCorrelationModel(Size size, Real rho, Real beta, Size factors = Null<Size>());+|?|ql/legacy/libormarketmodels/lmlinexpvolmodel.hpp|LmLinearExponentialVolatilityModel::LmLinearExponentialVolatilityModel(const std::vector<Time> & fixingTimes, Real a, Real b, Real c, Real d);+| |ql/legacy/libormarketmodels/lmvolmodel.hpp|LmVolatilityModel::LmVolatilityModel(Size size, Size nArguments);+|x|ql/legacy/libormarketmodels/lmvolmodel.hpp|Size LmVolatilityModel::size() const;+| |ql/legacy/libormarketmodels/lmvolmodel.hpp|std::vector<Parameter> & LmVolatilityModel::params();+| |ql/legacy/libormarketmodels/lmvolmodel.hpp|void LmVolatilityModel::setParams(const std::vector<Parameter> & arguments);+| |ql/legacy/libormarketmodels/lmvolmodel.hpp|Array LmVolatilityModel::volatility(Time t, const Array & x = { }) const;+| |ql/legacy/libormarketmodels/lmvolmodel.hpp|Volatility LmVolatilityModel::volatility(Size i, Time t, const Array & x = { }) const;+| |ql/legacy/libormarketmodels/lmvolmodel.hpp|Real LmVolatilityModel::integratedVariance(Size i, Size j, Time u, const Array & x = { }) const;+| |ql/math/abcdmathfunction.hpp|AbcdMathFunction::AbcdMathFunction(Real a = 0.002, Real b = 0.001, Real c = 0.16, Real d = 0.0005);+| |ql/math/abcdmathfunction.hpp|AbcdMathFunction::AbcdMathFunction(std::vector<Real> abcd);+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::operator()(Time t) const;+| |ql/math/abcdmathfunction.hpp|Time AbcdMathFunction::maximumLocation() const;+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::maximumValue() const;+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::longTermValue() const;+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::derivative(Time t) const;+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::primitive(Time t) const;+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::definiteIntegral(Time t1, Time t2) const;+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::a() const;+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::b() const;+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::c() const;+| |ql/math/abcdmathfunction.hpp|Real AbcdMathFunction::d() const;+| |ql/math/abcdmathfunction.hpp|const std::vector<Real> & AbcdMathFunction::coefficients();+| |ql/math/abcdmathfunction.hpp|const std::vector<Real> & AbcdMathFunction::derivativeCoefficients();+| |ql/math/abcdmathfunction.hpp|std::vector<Real> AbcdMathFunction::definiteIntegralCoefficients(Time t, Time t2) const;+| |ql/math/abcdmathfunction.hpp|std::vector<Real> AbcdMathFunction::definiteDerivativeCoefficients(Time t, Time t2) const;+| |ql/math/abcdmathfunction.hpp|static void AbcdMathFunction::validate(Real a, Real b, Real c, Real d);+| |ql/math/array.hpp|Array::Array();+| |ql/math/array.hpp|Array::Array(Size size);+| |ql/math/array.hpp|Array::Array(Size size, Real value);+| |ql/math/array.hpp|Array::Array(Size size, Real value, Real increment);+| |ql/math/array.hpp|Array::Array(const Array &);+| |ql/math/array.hpp|Array::Array(Array &&);+| |ql/math/array.hpp|Array::Array(std::initializer_list<Real>);+| |ql/math/array.hpp|Array & Array::operator=(const Array &);+| |ql/math/array.hpp|Array & Array::operator=(Array &&);+| |ql/math/array.hpp|bool Array::operator==(const Array &) const;+| |ql/math/array.hpp|bool Array::operator!=(const Array &) const;+| |ql/math/array.hpp|const Array & Array::operator+=(const Array &);+| |ql/math/array.hpp|const Array & Array::operator+=(Real);+| |ql/math/array.hpp|const Array & Array::operator-=(const Array &);+| |ql/math/array.hpp|const Array & Array::operator-=(Real);+| |ql/math/array.hpp|const Array & Array::operator*=(const Array &);+| |ql/math/array.hpp|const Array & Array::operator*=(Real);+| |ql/math/array.hpp|const Array & Array::operator/=(const Array &);+| |ql/math/array.hpp|const Array & Array::operator/=(Real);+| |ql/math/array.hpp|Real Array::operator[](Size) const;+| |ql/math/array.hpp|Real Array::at(Size) const;+| |ql/math/array.hpp|Real Array::front() const;+| |ql/math/array.hpp|Real Array::back() const;+| |ql/math/array.hpp|Real & Array::operator[](Size);+| |ql/math/array.hpp|Real & Array::at(Size);+| |ql/math/array.hpp|Real & Array::front();+| |ql/math/array.hpp|Real & Array::back();+| |ql/math/array.hpp|Size Array::size() const;+| |ql/math/array.hpp|bool Array::empty() const;+| |ql/math/array.hpp|const_iterator Array::begin() const;+| |ql/math/array.hpp|iterator Array::begin();+| |ql/math/array.hpp|const_iterator Array::end() const;+| |ql/math/array.hpp|iterator Array::end();+| |ql/math/array.hpp|const_reverse_iterator Array::rbegin() const;+| |ql/math/array.hpp|reverse_iterator Array::rbegin();+| |ql/math/array.hpp|const_reverse_iterator Array::rend() const;+| |ql/math/array.hpp|reverse_iterator Array::rend();+| |ql/math/array.hpp|void Array::resize(Size n);+| |ql/math/array.hpp|void Array::swap(Array &);+| |ql/math/array.hpp|Real DotProduct(const Array &, const Array &);+| |ql/math/array.hpp|Real Norm2(const Array &);+| |ql/math/array.hpp|Array operator+(const Array & v);+| |ql/math/array.hpp|Array operator+(Array && v);+| |ql/math/array.hpp|Array operator-(const Array & v);+| |ql/math/array.hpp|Array operator-(Array && v);+| |ql/math/array.hpp|Array operator+(const Array &, const Array &);+| |ql/math/array.hpp|Array operator+(const Array &, Array &&);+| |ql/math/array.hpp|Array operator+(Array &&, const Array &);+| |ql/math/array.hpp|Array operator+(Array &&, Array &&);+| |ql/math/array.hpp|Array operator+(const Array &, Real);+| |ql/math/array.hpp|Array operator+(Array &&, Real);+| |ql/math/array.hpp|Array operator+(Real, const Array &);+| |ql/math/array.hpp|Array operator+(Real, Array &&);+| |ql/math/array.hpp|Array operator-(const Array &, const Array &);+| |ql/math/array.hpp|Array operator-(const Array &, Array &&);+| |ql/math/array.hpp|Array operator-(Array &&, const Array &);+| |ql/math/array.hpp|Array operator-(Array &&, Array &&);+| |ql/math/array.hpp|Array operator-(const Array &, Real);+| |ql/math/array.hpp|Array operator-(Real, const Array &);+| |ql/math/array.hpp|Array operator-(Array &&, Real);+| |ql/math/array.hpp|Array operator-(Real, Array &&);+| |ql/math/array.hpp|Array operator*(const Array &, const Array &);+| |ql/math/array.hpp|Array operator*(const Array &, Array &&);+| |ql/math/array.hpp|Array operator*(Array &&, const Array &);+| |ql/math/array.hpp|Array operator*(Array &&, Array &&);+| |ql/math/array.hpp|Array operator*(const Array &, Real);+| |ql/math/array.hpp|Array operator*(Real, const Array &);+| |ql/math/array.hpp|Array operator*(Array &&, Real);+| |ql/math/array.hpp|Array operator*(Real, Array &&);+| |ql/math/array.hpp|Array operator/(const Array &, const Array &);+| |ql/math/array.hpp|Array operator/(const Array &, Array &&);+| |ql/math/array.hpp|Array operator/(Array &&, const Array &);+| |ql/math/array.hpp|Array operator/(Array &&, Array &&);+| |ql/math/array.hpp|Array operator/(const Array &, Real);+| |ql/math/array.hpp|Array operator/(Real, const Array &);+| |ql/math/array.hpp|Array operator/(Array &&, Real);+| |ql/math/array.hpp|Array operator/(Real, Array &&);+| |ql/math/array.hpp|Array Abs(const Array &);+| |ql/math/array.hpp|Array Abs(Array &&);+| |ql/math/array.hpp|Array Sqrt(const Array &);+| |ql/math/array.hpp|Array Sqrt(Array &&);+| |ql/math/array.hpp|Array Log(const Array &);+| |ql/math/array.hpp|Array Log(Array &&);+| |ql/math/array.hpp|Array Exp(const Array &);+| |ql/math/array.hpp|Array Exp(Array &&);+| |ql/math/array.hpp|Array Pow(const Array &, Real);+| |ql/math/array.hpp|Array Pow(Array &&, Real);+|v|ql/math/array.hpp|void swap(Array &, Array &);+| |ql/math/array.hpp|std::ostream & operator<<(std::ostream &, const Array &);+| |ql/math/array.hpp|Array(const Array & from);+| |ql/math/array.hpp|Array(Array && from);+| |ql/math/array.hpp|Array(std::initializer_list<Real> init);+| |ql/math/array.hpp|Array & operator=(const Array & from);+| |ql/math/array.hpp|Array & operator=(Array && from);+| |ql/math/array.hpp|bool operator==(const Array & to) const;+| |ql/math/array.hpp|bool operator!=(const Array & to) const;+| |ql/math/array.hpp|const Array & operator+=(const Array & v);+| |ql/math/array.hpp|const Array & operator+=(Real x);+| |ql/math/array.hpp|const Array & operator-=(const Array & v);+| |ql/math/array.hpp|const Array & operator-=(Real x);+| |ql/math/array.hpp|const Array & operator*=(const Array & v);+| |ql/math/array.hpp|const Array & operator*=(Real x);+| |ql/math/array.hpp|const Array & operator/=(const Array & v);+| |ql/math/array.hpp|const Array & operator/=(Real x);+| |ql/math/array.hpp|Real operator[](Size i) const;+| |ql/math/array.hpp|Real at(Size i) const;+| |ql/math/array.hpp|Real & operator[](Size i);+| |ql/math/array.hpp|Real & at(Size i);+| |ql/math/array.hpp|Array::const_iterator begin() const;+| |ql/math/array.hpp|Array::iterator begin();+| |ql/math/array.hpp|Array::const_iterator end() const;+| |ql/math/array.hpp|Array::iterator end();+| |ql/math/array.hpp|Array::const_reverse_iterator rbegin() const;+| |ql/math/array.hpp|Array::reverse_iterator rbegin();+| |ql/math/array.hpp|Array::const_reverse_iterator rend() const;+| |ql/math/array.hpp|Array::reverse_iterator rend();+|?|ql/math/array.hpp|void swap(Array & from);+| |ql/math/array.hpp|Real DotProduct(const Array & v1, const Array & v2);+| |ql/math/array.hpp|Real Norm2(const Array & v);+| |ql/math/array.hpp|Array operator+(const Array & v1, const Array & v2);+| |ql/math/array.hpp|Array operator+(const Array & v1, Array && v2);+| |ql/math/array.hpp|Array operator+(Array && v1, const Array & v2);+| |ql/math/array.hpp|Array operator+(Array && v1, Array && v2);+| |ql/math/array.hpp|Array operator+(const Array & v1, Real a);+| |ql/math/array.hpp|Array operator+(Array && v1, Real a);+| |ql/math/array.hpp|Array operator+(Real a, const Array & v2);+| |ql/math/array.hpp|Array operator+(Real a, Array && v2);+| |ql/math/array.hpp|Array operator-(const Array & v1, const Array & v2);+| |ql/math/array.hpp|Array operator-(const Array & v1, Array && v2);+| |ql/math/array.hpp|Array operator-(Array && v1, const Array & v2);+| |ql/math/array.hpp|Array operator-(Array && v1, Array && v2);+| |ql/math/array.hpp|Array operator-(const Array & v1, Real a);+| |ql/math/array.hpp|Array operator-(Array && v1, Real a);+| |ql/math/array.hpp|Array operator-(Real a, const Array & v2);+| |ql/math/array.hpp|Array operator-(Real a, Array && v2);+| |ql/math/array.hpp|Array operator*(const Array & v1, const Array & v2);+| |ql/math/array.hpp|Array operator*(const Array & v1, Array && v2);+| |ql/math/array.hpp|Array operator*(Array && v1, const Array & v2);+| |ql/math/array.hpp|Array operator*(Array && v1, Array && v2);+| |ql/math/array.hpp|Array operator*(const Array & v1, Real a);+| |ql/math/array.hpp|Array operator*(Array && v1, Real a);+| |ql/math/array.hpp|Array operator*(Real a, const Array & v2);+| |ql/math/array.hpp|Array operator*(Real a, Array && v2);+| |ql/math/array.hpp|Array operator/(const Array & v1, const Array & v2);+| |ql/math/array.hpp|Array operator/(const Array & v1, Array && v2);+| |ql/math/array.hpp|Array operator/(Array && v1, const Array & v2);+| |ql/math/array.hpp|Array operator/(Array && v1, Array && v2);+| |ql/math/array.hpp|Array operator/(const Array & v1, Real a);+| |ql/math/array.hpp|Array operator/(Array && v1, Real a);+| |ql/math/array.hpp|Array operator/(Real a, const Array & v2);+| |ql/math/array.hpp|Array operator/(Real a, Array && v2);+| |ql/math/array.hpp|Array Abs(const Array & v);+| |ql/math/array.hpp|Array Abs(Array && v);+| |ql/math/array.hpp|Array Sqrt(const Array & v);+| |ql/math/array.hpp|Array Sqrt(Array && v);+| |ql/math/array.hpp|Array Log(const Array & v);+| |ql/math/array.hpp|Array Log(Array && v);+| |ql/math/array.hpp|Array Exp(const Array & v);+| |ql/math/array.hpp|Array Exp(Array && v);+| |ql/math/array.hpp|Array Pow(const Array & v, Real alpha);+| |ql/math/array.hpp|Array Pow(Array && v, Real alpha);+|v|ql/math/array.hpp|void swap(Array & v, Array & w);+| |ql/math/array.hpp|std::ostream & operator<<(std::ostream & out, const Array & a);+| |ql/math/bernsteinpolynomial.hpp|static Real BernsteinPolynomial::get(Natural i, Natural n, Real x);+| |ql/math/beta.hpp|Real betaFunction(Real z, Real w);+| |ql/math/beta.hpp|Real betaContinuedFraction(Real a, Real b, Real x, Real accuracy = 1e-16, Integer maxIteration = 100);+| |ql/math/beta.hpp|Real incompleteBetaFunction(Real a, Real b, Real x, Real accuracy = 1e-16, Integer maxIteration = 100);+| |ql/math/bspline.hpp|BSpline::BSpline(Natural p, Natural n, const std::vector<Real> & knots);+| |ql/math/bspline.hpp|Real BSpline::operator()(Natural i, Real x) const;+| |ql/math/comparison.hpp|bool close(Real x, Real y);+| |ql/math/comparison.hpp|bool close(Real x, Real y, Size n);+| |ql/math/comparison.hpp|bool close_enough(Real x, Real y);+| |ql/math/comparison.hpp|bool close_enough(Real x, Real y, Size n);+| |ql/math/comparison.hpp|bool operator()(const ext::shared_ptr<T> & x, const ext::shared_ptr<T> & y) const;+| |ql/math/copulas/alimikhailhaqcopula.hpp|AliMikhailHaqCopula::AliMikhailHaqCopula(Real theta);+| |ql/math/copulas/alimikhailhaqcopula.hpp|Real AliMikhailHaqCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/claytoncopula.hpp|ClaytonCopula::ClaytonCopula(Real theta);+| |ql/math/copulas/claytoncopula.hpp|Real ClaytonCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/farliegumbelmorgensterncopula.hpp|FarlieGumbelMorgensternCopula::FarlieGumbelMorgensternCopula(Real theta);+| |ql/math/copulas/farliegumbelmorgensterncopula.hpp|Real FarlieGumbelMorgensternCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/frankcopula.hpp|FrankCopula::FrankCopula(Real theta);+| |ql/math/copulas/frankcopula.hpp|Real FrankCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/galamboscopula.hpp|GalambosCopula::GalambosCopula(Real theta);+| |ql/math/copulas/galamboscopula.hpp|Real GalambosCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/gaussiancopula.hpp|GaussianCopula::GaussianCopula(Real rho);+| |ql/math/copulas/gaussiancopula.hpp|Real GaussianCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/gumbelcopula.hpp|GumbelCopula::GumbelCopula(Real theta);+| |ql/math/copulas/gumbelcopula.hpp|Real GumbelCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/huslerreisscopula.hpp|HuslerReissCopula::HuslerReissCopula(Real theta_);+| |ql/math/copulas/huslerreisscopula.hpp|Real HuslerReissCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/independentcopula.hpp|Real IndependentCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/marshallolkincopula.hpp|MarshallOlkinCopula::MarshallOlkinCopula(Real a1, Real a2);+| |ql/math/copulas/marshallolkincopula.hpp|Real MarshallOlkinCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/maxcopula.hpp|Real MaxCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/mincopula.hpp|Real MinCopula::operator()(Real x, Real y) const;+| |ql/math/copulas/plackettcopula.hpp|PlackettCopula::PlackettCopula(Real theta);+| |ql/math/copulas/plackettcopula.hpp|Real PlackettCopula::operator()(Real x, Real y) const;+| |ql/math/distributions/binomialdistribution.hpp|Real binomialCoefficientLn(BigNatural n, BigNatural k);+| |ql/math/distributions/binomialdistribution.hpp|Real binomialCoefficient(BigNatural n, BigNatural k);+| |ql/math/distributions/binomialdistribution.hpp|BinomialDistribution::BinomialDistribution(Real p, BigNatural n);+| |ql/math/distributions/binomialdistribution.hpp|Real BinomialDistribution::operator()(BigNatural k) const;+| |ql/math/distributions/binomialdistribution.hpp|CumulativeBinomialDistribution::CumulativeBinomialDistribution(Real p, BigNatural n);+| |ql/math/distributions/binomialdistribution.hpp|Real CumulativeBinomialDistribution::operator()(BigNatural k) const;+| |ql/math/distributions/binomialdistribution.hpp|Real PeizerPrattMethod2Inversion(Real z, BigNatural n);+| |ql/math/distributions/bivariatenormaldistribution.hpp|BivariateCumulativeNormalDistributionDr78::BivariateCumulativeNormalDistributionDr78(Real rho);+| |ql/math/distributions/bivariatenormaldistribution.hpp|Real BivariateCumulativeNormalDistributionDr78::operator()(Real a, Real b) const;+| |ql/math/distributions/bivariatenormaldistribution.hpp|BivariateCumulativeNormalDistributionWe04DP::BivariateCumulativeNormalDistributionWe04DP(Real rho);+| |ql/math/distributions/bivariatenormaldistribution.hpp|Real BivariateCumulativeNormalDistributionWe04DP::operator()(Real a, Real b) const;+| |ql/math/distributions/bivariatestudenttdistribution.hpp|BivariateCumulativeStudentDistribution::BivariateCumulativeStudentDistribution(Natural n, Real rho);+| |ql/math/distributions/bivariatestudenttdistribution.hpp|Real BivariateCumulativeStudentDistribution::operator()(Real x, Real y) const;+| |ql/math/distributions/chisquaredistribution.hpp|CumulativeChiSquareDistribution::CumulativeChiSquareDistribution(Real df);+| |ql/math/distributions/chisquaredistribution.hpp|Real CumulativeChiSquareDistribution::operator()(Real x) const;+| |ql/math/distributions/chisquaredistribution.hpp|NonCentralCumulativeChiSquareDistribution::NonCentralCumulativeChiSquareDistribution(Real df, Real ncp);+| |ql/math/distributions/chisquaredistribution.hpp|Real NonCentralCumulativeChiSquareDistribution::operator()(Real x) const;+| |ql/math/distributions/chisquaredistribution.hpp|NonCentralCumulativeChiSquareSankaranApprox::NonCentralCumulativeChiSquareSankaranApprox(Real df, Real ncp);+| |ql/math/distributions/chisquaredistribution.hpp|Real NonCentralCumulativeChiSquareSankaranApprox::operator()(Real x) const;+| |ql/math/distributions/chisquaredistribution.hpp|InverseNonCentralCumulativeChiSquareDistribution::InverseNonCentralCumulativeChiSquareDistribution(Real df, Real ncp, Size maxEvaluations = 10, Real accuracy = 1e-8);+| |ql/math/distributions/chisquaredistribution.hpp|Real InverseNonCentralCumulativeChiSquareDistribution::operator()(Real x) const;+| |ql/math/distributions/gammadistribution.hpp|CumulativeGammaDistribution::CumulativeGammaDistribution(Real a);+| |ql/math/distributions/gammadistribution.hpp|Real CumulativeGammaDistribution::operator()(Real x) const;+| |ql/math/distributions/gammadistribution.hpp|Real GammaFunction::value(Real x) const;+| |ql/math/distributions/gammadistribution.hpp|Real GammaFunction::logValue(Real x) const;+| |ql/math/distributions/normaldistribution.hpp|NormalDistribution::NormalDistribution(Real average = 0.0, Real sigma = 1.0);+| |ql/math/distributions/normaldistribution.hpp|Real NormalDistribution::operator()(Real x) const;+| |ql/math/distributions/normaldistribution.hpp|Real NormalDistribution::derivative(Real x) const;+| |ql/math/distributions/normaldistribution.hpp|CumulativeNormalDistribution::CumulativeNormalDistribution(Real average = 0.0, Real sigma = 1.0);+| |ql/math/distributions/normaldistribution.hpp|Real CumulativeNormalDistribution::operator()(Real x) const;+| |ql/math/distributions/normaldistribution.hpp|Real CumulativeNormalDistribution::derivative(Real x) const;+| |ql/math/distributions/normaldistribution.hpp|InverseCumulativeNormal::InverseCumulativeNormal(Real average = 0.0, Real sigma = 1.0);+| |ql/math/distributions/normaldistribution.hpp|Real InverseCumulativeNormal::operator()(Real x) const;+| |ql/math/distributions/normaldistribution.hpp|static Real InverseCumulativeNormal::standard_value(Real x);+| |ql/math/distributions/normaldistribution.hpp|MoroInverseCumulativeNormal::MoroInverseCumulativeNormal(Real average = 0.0, Real sigma = 1.0);+| |ql/math/distributions/normaldistribution.hpp|Real MoroInverseCumulativeNormal::operator()(Real x) const;+| |ql/math/distributions/normaldistribution.hpp|MaddockInverseCumulativeNormal::MaddockInverseCumulativeNormal(Real average = 0.0, Real sigma = 1.0);+| |ql/math/distributions/normaldistribution.hpp|Real MaddockInverseCumulativeNormal::operator()(Real x) const;+| |ql/math/distributions/normaldistribution.hpp|MaddockCumulativeNormal::MaddockCumulativeNormal(Real average = 0.0, Real sigma = 1.0);+| |ql/math/distributions/normaldistribution.hpp|Real MaddockCumulativeNormal::operator()(Real x) const;+| |ql/math/distributions/normaldistribution.hpp|NormalDistribution(Real average, Real sigma);+| |ql/math/distributions/normaldistribution.hpp|CumulativeNormalDistribution(Real average, Real sigma);+| |ql/math/distributions/normaldistribution.hpp|InverseCumulativeNormal(Real average, Real sigma);+| |ql/math/distributions/normaldistribution.hpp|MoroInverseCumulativeNormal(Real average, Real sigma);+| |ql/math/distributions/poissondistribution.hpp|PoissonDistribution::PoissonDistribution(Real mu);+| |ql/math/distributions/poissondistribution.hpp|Real PoissonDistribution::operator()(BigNatural k) const;+| |ql/math/distributions/poissondistribution.hpp|CumulativePoissonDistribution::CumulativePoissonDistribution(Real mu);+| |ql/math/distributions/poissondistribution.hpp|Real CumulativePoissonDistribution::operator()(BigNatural k) const;+| |ql/math/distributions/poissondistribution.hpp|InverseCumulativePoisson::InverseCumulativePoisson(Real lambda = 1.0);+| |ql/math/distributions/poissondistribution.hpp|Real InverseCumulativePoisson::operator()(Real x) const;+| |ql/math/distributions/poissondistribution.hpp|InverseCumulativePoisson(Real lambda);+| |ql/math/distributions/poissondistribution.hpp|Real calcSummand(BigNatural index) const;+| |ql/math/distributions/studenttdistribution.hpp|StudentDistribution::StudentDistribution(Integer n);+| |ql/math/distributions/studenttdistribution.hpp|Real StudentDistribution::operator()(Real x) const;+| |ql/math/distributions/studenttdistribution.hpp|CumulativeStudentDistribution::CumulativeStudentDistribution(Integer n);+| |ql/math/distributions/studenttdistribution.hpp|Real CumulativeStudentDistribution::operator()(Real x) const;+| |ql/math/distributions/studenttdistribution.hpp|Real InverseCumulativeStudent::operator()(Real x) const;+| |ql/math/errorfunction.hpp|ErrorFunction::ErrorFunction();+| |ql/math/errorfunction.hpp|Real ErrorFunction::operator()(Real x) const;+| |ql/math/expm1.hpp|std::complex<Real> expm1(const std::complex<Real> & z);+| |ql/math/expm1.hpp|std::complex<Real> log1p(const std::complex<Real> & z);+| |ql/math/factorial.hpp|static Real Factorial::get(Natural n);+| |ql/math/factorial.hpp|static Real Factorial::ln(Natural n);+| |ql/math/fastfouriertransform.hpp|static std::size_t FastFourierTransform::min_order(std::size_t inputSize);+| |ql/math/fastfouriertransform.hpp|FastFourierTransform::FastFourierTransform(std::size_t order);+| |ql/math/fastfouriertransform.hpp|std::size_t FastFourierTransform::output_size() const;+|u|ql/math/generallinearleastsquares.hpp|const Array & GeneralLinearLeastSquares::coefficients() const;+| |ql/math/generallinearleastsquares.hpp|const Array & GeneralLinearLeastSquares::residuals() const;+| |ql/math/generallinearleastsquares.hpp|const Array & GeneralLinearLeastSquares::standardErrors() const;+| |ql/math/generallinearleastsquares.hpp|const Array & GeneralLinearLeastSquares::error() const;+| |ql/math/generallinearleastsquares.hpp|Size GeneralLinearLeastSquares::size() const;+| |ql/math/generallinearleastsquares.hpp|Size GeneralLinearLeastSquares::dim() const;+| |ql/math/incompletegamma.hpp|Real incompleteGammaFunction(Real a, Real x, Real accuracy = 1.0e-13, Integer maxIteration = 100);+| |ql/math/incompletegamma.hpp|Real incompleteGammaFunctionSeriesRepr(Real a, Real x, Real accuracy = 1.0e-13, Integer maxIteration = 100);+| |ql/math/incompletegamma.hpp|Real incompleteGammaFunctionContinuedFractionRepr(Real a, Real x, Real accuracy = 1.0e-13, Integer maxIteration = 100);+| |ql/math/integrals/discreteintegrals.hpp|Real DiscreteTrapezoidIntegral::operator()(const Array & x, const Array & f) const;+| |ql/math/integrals/discreteintegrals.hpp|Real DiscreteSimpsonIntegral::operator()(const Array & x, const Array & f) const;+| |ql/math/integrals/discreteintegrals.hpp|DiscreteTrapezoidIntegrator::DiscreteTrapezoidIntegrator(Size evaluations);+| |ql/math/integrals/discreteintegrals.hpp|DiscreteSimpsonIntegrator::DiscreteSimpsonIntegrator(Size evaluations);+| |ql/math/integrals/exponentialintegrals.hpp|Real Si(Real x);+| |ql/math/integrals/exponentialintegrals.hpp|Real Ci(Real x);+| |ql/math/integrals/exponentialintegrals.hpp|std::complex<Real> Ci(const std::complex<Real> & z);+| |ql/math/integrals/exponentialintegrals.hpp|std::complex<Real> Si(const std::complex<Real> & z);+| |ql/math/integrals/exponentialintegrals.hpp|std::complex<Real> E1(const std::complex<Real> & z);+| |ql/math/integrals/exponentialintegrals.hpp|std::complex<Real> Ei(const std::complex<Real> & z);+| |ql/math/integrals/expsinhintegral.hpp|ExpSinhIntegral::ExpSinhIntegral(Real relTolerance = std::sqrt(std::numeric_limits<Real>::epsilon()), Size maxRefinements = 9);+| |ql/math/integrals/expsinhintegral.hpp|Real ExpSinhIntegral::integrate(const std::function<Real (Real)> & f) const;+| |ql/math/integrals/filonintegral.hpp|FilonIntegral::FilonIntegral(Type type, Real t, Size intervals);+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|Real GaussianOrthogonalPolynomial::mu_0() const;+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|Real GaussianOrthogonalPolynomial::alpha(Size i) const;+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|Real GaussianOrthogonalPolynomial::beta(Size i) const;+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|Real GaussianOrthogonalPolynomial::w(Real x) const;+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|Real GaussianOrthogonalPolynomial::value(Size i, Real x) const;+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|Real GaussianOrthogonalPolynomial::weightedValue(Size i, Real x) const;+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|GaussLaguerrePolynomial::GaussLaguerrePolynomial(Real s = 0.0);+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|GaussHermitePolynomial::GaussHermitePolynomial(Real mu = 0.0);+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|GaussJacobiPolynomial::GaussJacobiPolynomial(Real alpha, Real beta);+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|GaussLegendrePolynomial::GaussLegendrePolynomial();+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|GaussChebyshevPolynomial::GaussChebyshevPolynomial();+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|GaussChebyshev2ndPolynomial::GaussChebyshev2ndPolynomial();+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|GaussGegenbauerPolynomial::GaussGegenbauerPolynomial(Real lambda);+| |ql/math/integrals/gaussianquadratures.hpp|GaussianQuadrature::GaussianQuadrature(Size n, const GaussianOrthogonalPolynomial & p);+| |ql/math/integrals/gaussianquadratures.hpp|Size GaussianQuadrature::order() const;+| |ql/math/integrals/gaussianquadratures.hpp|const Array & GaussianQuadrature::weights();+| |ql/math/integrals/gaussianquadratures.hpp|const Array & GaussianQuadrature::x();+| |ql/math/integrals/gaussianquadratures.hpp|MultiDimGaussianIntegration::MultiDimGaussianIntegration(const std::vector<Size> & ns, const std::function<ext::shared_ptr<GaussianQuadrature> (Size)> & genQuad);+| |ql/math/integrals/gaussianquadratures.hpp|Real MultiDimGaussianIntegration::operator()(const std::function<Real (Array)> & f) const;+| |ql/math/integrals/gaussianquadratures.hpp|const Array & MultiDimGaussianIntegration::weights() const;+| |ql/math/integrals/gaussianquadratures.hpp|const std::vector<Array> & MultiDimGaussianIntegration::x() const;+| |ql/math/integrals/gaussianquadratures.hpp|GaussLaguerreIntegration::GaussLaguerreIntegration(Size n, Real s = 0.0);+| |ql/math/integrals/gaussianquadratures.hpp|GaussHermiteIntegration::GaussHermiteIntegration(Size n, Real mu = 0.0);+| |ql/math/integrals/gaussianquadratures.hpp|GaussJacobiIntegration::GaussJacobiIntegration(Size n, Real alpha, Real beta);+| |ql/math/integrals/gaussianquadratures.hpp|GaussHyperbolicIntegration::GaussHyperbolicIntegration(Size n);+| |ql/math/integrals/gaussianquadratures.hpp|GaussLegendreIntegration::GaussLegendreIntegration(Size n);+| |ql/math/integrals/gaussianquadratures.hpp|GaussChebyshevIntegration::GaussChebyshevIntegration(Size n);+| |ql/math/integrals/gaussianquadratures.hpp|GaussChebyshev2ndIntegration::GaussChebyshev2ndIntegration(Size n);+| |ql/math/integrals/gaussianquadratures.hpp|GaussGegenbauerIntegration::GaussGegenbauerIntegration(Size n, Real lambda);+| |ql/math/integrals/gaussianquadratures.hpp|GaussianQuadratureIntegrator::GaussianQuadratureIntegrator<Integration>(Size n);+| |ql/math/integrals/gaussianquadratures.hpp|ext::shared_ptr<Integration> GaussianQuadratureIntegrator::getIntegration() const;+| |ql/math/integrals/gaussianquadratures.hpp|TabulatedGaussLegendre::TabulatedGaussLegendre(Size n = 20);+| |ql/math/integrals/gaussianquadratures.hpp|void TabulatedGaussLegendre::order(Size);+| |ql/math/integrals/gaussianquadratures.hpp|Size TabulatedGaussLegendre::order() const;+| |ql/math/integrals/gausslaguerrecosinepolynomial.hpp|GaussLaguerreTrigonometricBase::GaussLaguerreTrigonometricBase<mp_real>(Real u);+| |ql/math/integrals/gausslaguerrecosinepolynomial.hpp|GaussLaguerreCosinePolynomial::GaussLaguerreCosinePolynomial<mp_real>(Real u);+| |ql/math/integrals/gausslaguerrecosinepolynomial.hpp|GaussLaguerreSinePolynomial::GaussLaguerreSinePolynomial<mp_real>(Real u);+| |ql/math/integrals/gausslobattointegral.hpp|GaussLobattoIntegral::GaussLobattoIntegral(Size maxIterations, Real absAccuracy, Real relAccuracy = Null<Real>(), bool useConvergenceEstimate = true);+| |ql/math/integrals/integral.hpp|Integrator::Integrator(Real absoluteAccuracy, Size maxEvaluations);+| |ql/math/integrals/integral.hpp|Real Integrator::operator()(const std::function<Real (Real)> & f, Real a, Real b) const;+| |ql/math/integrals/integral.hpp|void Integrator::setAbsoluteAccuracy(Real);+| |ql/math/integrals/integral.hpp|void Integrator::setMaxEvaluations(Size);+|x|ql/math/integrals/integral.hpp|Real Integrator::absoluteAccuracy() const;+|x|ql/math/integrals/integral.hpp|Size Integrator::maxEvaluations() const;+| |ql/math/integrals/integral.hpp|Real Integrator::absoluteError() const;+| |ql/math/integrals/integral.hpp|Size Integrator::numberOfEvaluations() const;+| |ql/math/integrals/integral.hpp|bool Integrator::integrationSuccess() const;+| |ql/math/integrals/kronrodintegral.hpp|GaussKronrodNonAdaptive::GaussKronrodNonAdaptive(Real absoluteAccuracy, Size maxEvaluations, Real relativeAccuracy);+| |ql/math/integrals/kronrodintegral.hpp|void GaussKronrodNonAdaptive::setRelativeAccuracy(Real);+|x|ql/math/integrals/kronrodintegral.hpp|Real GaussKronrodNonAdaptive::relativeAccuracy() const;+| |ql/math/integrals/kronrodintegral.hpp|GaussKronrodAdaptive::GaussKronrodAdaptive(Real tolerance, Size maxFunctionEvaluations = Null<Size>());+| |ql/math/integrals/momentbasedgaussianpolynomial.hpp|MomentBasedGaussianPolynomial::MomentBasedGaussianPolynomial<mp_real>();+| |ql/math/integrals/momentbasedgaussianpolynomial.hpp|mp_real MomentBasedGaussianPolynomial::moment(Size i) const;+| |ql/math/integrals/momentbasedgaussianpolynomial.hpp|MomentBasedGaussianPolynomial<mp_real>();+| |ql/math/integrals/momentbasedgaussianpolynomial.hpp|mp_real z(Integer k, Integer i) const;+| |ql/math/integrals/momentbasedgaussianpolynomial.hpp|mp_real alpha_(Size u) const;+| |ql/math/integrals/momentbasedgaussianpolynomial.hpp|mp_real beta_(Size u) const;+| |ql/math/integrals/momentbasedgaussianpolynomial.hpp|Real alpha(Size u) const;+| |ql/math/integrals/momentbasedgaussianpolynomial.hpp|Real beta(Size u) const;+| |ql/math/integrals/momentbasedgaussianpolynomial.hpp|Real mu_0() const;+| |ql/math/integrals/segmentintegral.hpp|SegmentIntegral::SegmentIntegral(Size intervals);+| |ql/math/integrals/segmentintegral.hpp|Real integrate(const std::function<Real (Real)> & f, Real a, Real b) const;+| |ql/math/integrals/simpsonintegral.hpp|SimpsonIntegral::SimpsonIntegral(Real accuracy, Size maxIterations);+| |ql/math/integrals/tanhsinhintegral.hpp|TanhSinhIntegral::TanhSinhIntegral(Real relTolerance = std::sqrt(std::numeric_limits<Real>::epsilon()), Size maxRefinements = 15, Real minComplement = std::numeric_limits<Real>::min() * 4);+| |ql/math/integrals/trapezoidintegral.hpp|TrapezoidIntegral::TrapezoidIntegral<IntegrationPolicy>(Real accuracy, Size maxIterations);+| |ql/math/integrals/trapezoidintegral.hpp|static Real Default::integrate(const std::function<Real (Real)> & f, Real a, Real b, Real I, Size N);+| |ql/math/integrals/trapezoidintegral.hpp|static Size Default::nbEvalutions();+| |ql/math/integrals/trapezoidintegral.hpp|static Real MidPoint::integrate(const std::function<Real (Real)> & f, Real a, Real b, Real I, Size N);+| |ql/math/integrals/trapezoidintegral.hpp|static Size MidPoint::nbEvalutions();+| |ql/math/integrals/twodimensionalintegral.hpp|TwoDimensionalIntegral::TwoDimensionalIntegral(ext::shared_ptr<Integrator> integratorX, ext::shared_ptr<Integrator> integratorY);+| |ql/math/integrals/twodimensionalintegral.hpp|Real TwoDimensionalIntegral::operator()(const std::function<Real (Real, Real)> & f, const std::pair<Real, Real> & a, const std::pair<Real, Real> & b) const;+| |ql/math/interpolation.hpp|void Impl::update();+| |ql/math/interpolation.hpp|Real Impl::xMin() const;+| |ql/math/interpolation.hpp|Real Impl::xMax() const;+| |ql/math/interpolation.hpp|std::vector<Real> Impl::xValues() const;+| |ql/math/interpolation.hpp|std::vector<Real> Impl::yValues() const;+| |ql/math/interpolation.hpp|bool Impl::isInRange(Real) const;+| |ql/math/interpolation.hpp|Real Impl::value(Real) const;+| |ql/math/interpolation.hpp|Real Impl::primitive(Real) const;+| |ql/math/interpolation.hpp|Real Impl::derivative(Real) const;+| |ql/math/interpolation.hpp|Real Impl::secondDerivative(Real) const;+| |ql/math/interpolation.hpp|templateImpl::templateImpl<I1, I2, Base>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin);+| |ql/math/interpolation.hpp|Real templateImpl::xMin() const;+| |ql/math/interpolation.hpp|Real templateImpl::xMax() const;+| |ql/math/interpolation.hpp|std::vector<Real> templateImpl::xValues() const;+| |ql/math/interpolation.hpp|std::vector<Real> templateImpl::yValues() const;+| |ql/math/interpolation.hpp|bool templateImpl::isInRange(Real x) const;+| |ql/math/interpolation.hpp|Interpolation::Interpolation();+| |ql/math/interpolation.hpp|bool Interpolation::empty() const;+| |ql/math/interpolation.hpp|Real Interpolation::operator()(Real x, bool allowExtrapolation = false) const;+| |ql/math/interpolation.hpp|Real Interpolation::primitive(Real x, bool allowExtrapolation = false) const;+| |ql/math/interpolation.hpp|Real Interpolation::derivative(Real x, bool allowExtrapolation = false) const;+| |ql/math/interpolation.hpp|Real Interpolation::secondDerivative(Real x, bool allowExtrapolation = false) const;+| |ql/math/interpolation.hpp|Real Interpolation::xMin() const;+| |ql/math/interpolation.hpp|Real Interpolation::xMax() const;+| |ql/math/interpolation.hpp|std::vector<Real> Interpolation::xValues() const;+| |ql/math/interpolation.hpp|std::vector<Real> Interpolation::yValues() const;+| |ql/math/interpolation.hpp|bool Interpolation::isInRange(Real x) const;+| |ql/math/interpolation.hpp|void Interpolation::update();+| |ql/math/interpolations/abcdinterpolation.hpp|AbcdCoeffHolder::AbcdCoeffHolder(Real a, Real b, Real c, Real d, bool aIsFixed, bool bIsFixed, bool cIsFixed, bool dIsFixed);+| |ql/math/interpolations/abcdinterpolation.hpp|AbcdInterpolationImpl::AbcdInterpolationImpl<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, Real a, Real b, Real c, Real d, bool aIsFixed, bool bIsFixed, bool cIsFixed, bool dIsFixed, bool vegaWeighted, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<OptimizationMethod> optMethod);+| |ql/math/interpolations/abcdinterpolation.hpp|void AbcdInterpolationImpl::update();+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolationImpl::primitive(Real) const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolationImpl::derivative(Real) const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolationImpl::secondDerivative(Real) const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolationImpl::k(Time t) const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolation::a() const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolation::b() const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolation::c() const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolation::d() const;+| |ql/math/interpolations/abcdinterpolation.hpp|std::vector<Real> AbcdInterpolation::k() const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolation::rmsError() const;+| |ql/math/interpolations/abcdinterpolation.hpp|Real AbcdInterpolation::maxError() const;+| |ql/math/interpolations/abcdinterpolation.hpp|EndCriteria::Type AbcdInterpolation::endCriteria();+| |ql/math/interpolations/abcdinterpolation.hpp|Abcd::Abcd(Real a, Real b, Real c, Real d, bool aIsFixed, bool bIsFixed, bool cIsFixed, bool dIsFixed, bool vegaWeighted = false, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> optMethod = ext::shared_ptr<OptimizationMethod>());+| |ql/math/interpolations/backwardflatinterpolation.hpp|BackwardFlatInterpolationImpl::BackwardFlatInterpolationImpl<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin);+| |ql/math/interpolations/backwardflatinterpolation.hpp|void BackwardFlatInterpolationImpl::update();+| |ql/math/interpolations/backwardflatinterpolation.hpp|Real BackwardFlatInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/backwardflatinterpolation.hpp|Real BackwardFlatInterpolationImpl::primitive(Real x) const;+| |ql/math/interpolations/backwardflatinterpolation.hpp|Real BackwardFlatInterpolationImpl::derivative(Real) const;+| |ql/math/interpolations/backwardflatinterpolation.hpp|Real BackwardFlatInterpolationImpl::secondDerivative(Real) const;+| |ql/math/interpolations/backwardflatlinearinterpolation.hpp|BackwardflatLinearInterpolationImpl::BackwardflatLinearInterpolationImpl<I1, I2, M>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, const I2 & yEnd, const M & zData);+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSplineDerivatives::derivativeX(Real x, Real y) const;+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSplineDerivatives::derivativeY(Real x, Real y) const;+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSplineDerivatives::derivativeXY(Real x, Real y) const;+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSplineDerivatives::secondDerivativeX(Real x, Real y) const;+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSplineDerivatives::secondDerivativeY(Real x, Real y) const;+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|BicubicSplineImpl::BicubicSplineImpl<I1, I2, M>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, const I2 & yEnd, const M & zData);+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSpline::derivativeX(Real x, Real y) const;+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSpline::derivativeY(Real x, Real y) const;+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSpline::secondDerivativeX(Real x, Real y) const;+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSpline::secondDerivativeY(Real x, Real y) const;+| |ql/math/interpolations/bicubicsplineinterpolation.hpp|Real BicubicSpline::derivativeXY(Real x, Real y) const;+| |ql/math/interpolations/bilinearinterpolation.hpp|BilinearInterpolationImpl::BilinearInterpolationImpl<I1, I2, M>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, const I2 & yEnd, const M & zData);+| |ql/math/interpolations/chebyshevinterpolation.hpp|ChebyshevInterpolation::ChebyshevInterpolation(const Array & y, PointsType pointsType = SecondKind);+| |ql/math/interpolations/chebyshevinterpolation.hpp|ChebyshevInterpolation::ChebyshevInterpolation(Size n, const std::function<Real (Real)> & f, PointsType pointsType = SecondKind);+| |ql/math/interpolations/chebyshevinterpolation.hpp|ChebyshevInterpolation::ChebyshevInterpolation(const ChebyshevInterpolation &);+| |ql/math/interpolations/chebyshevinterpolation.hpp|ChebyshevInterpolation::ChebyshevInterpolation(ChebyshevInterpolation &&);+| |ql/math/interpolations/chebyshevinterpolation.hpp|ChebyshevInterpolation & ChebyshevInterpolation::operator=(const ChebyshevInterpolation &);+| |ql/math/interpolations/chebyshevinterpolation.hpp|ChebyshevInterpolation & ChebyshevInterpolation::operator=(ChebyshevInterpolation &&);+| |ql/math/interpolations/chebyshevinterpolation.hpp|void ChebyshevInterpolation::updateY(const Array & y);+| |ql/math/interpolations/chebyshevinterpolation.hpp|Array ChebyshevInterpolation::nodes() const;+| |ql/math/interpolations/chebyshevinterpolation.hpp|static Array ChebyshevInterpolation::nodes(Size n, PointsType pointsType);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|ConvexMonotoneInterpolation::ConvexMonotoneInterpolation<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, Real quadraticity, Real monotonicity, bool forcePositive, bool flatFinalPeriod = false, const helper_map & preExistingHelpers = { }, bool update = true);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|ConvexMonotoneInterpolation::ConvexMonotoneInterpolation<I1, I2>(const Interpolation & interp);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|std::map<Real, ext::shared_ptr<detail::SectionHelper>> ConvexMonotoneInterpolation::getExistingHelpers();+|u|ql/math/interpolations/convexmonotoneinterpolation.hpp|ConvexMonotone::ConvexMonotone(Real quadraticity = 0.3, Real monotonicity = 0.7, bool forcePositive = true);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|Real SectionHelper::value(Real x) const;+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|Real SectionHelper::primitive(Real x) const;+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|Real SectionHelper::fNext() const;+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|ConvexMonotoneImpl::ConvexMonotoneImpl<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, Real quadraticity, Real monotonicity, bool forcePositive, bool constantLastPeriod, const helper_map & preExistingHelpers);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|void ConvexMonotoneImpl::update();+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|Real ConvexMonotoneImpl::value(Real x) const;+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|Real ConvexMonotoneImpl::primitive(Real x) const;+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|Real ConvexMonotoneImpl::derivative(Real) const;+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|Real ConvexMonotoneImpl::secondDerivative(Real) const;+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|helper_map ConvexMonotoneImpl::getExistingHelpers();+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|ComboHelper::ComboHelper(ext::shared_ptr<SectionHelper> & quadraticHelper, ext::shared_ptr<SectionHelper> & convMonoHelper, Real quadraticity);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|EverywhereConstantHelper::EverywhereConstantHelper(Real value, Real prevPrimitive, Real xPrev);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|ConvexMonotone2Helper::ConvexMonotone2Helper(Real xPrev, Real xNext, Real gPrev, Real gNext, Real fAverage, Real eta2, Real prevPrimitive);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|ConvexMonotone3Helper::ConvexMonotone3Helper(Real xPrev, Real xNext, Real gPrev, Real gNext, Real fAverage, Real eta3, Real prevPrimitive);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|ConvexMonotone4Helper::ConvexMonotone4Helper(Real xPrev, Real xNext, Real gPrev, Real gNext, Real fAverage, Real eta4, Real prevPrimitive);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|ConvexMonotone4MinHelper::ConvexMonotone4MinHelper(Real xPrev, Real xNext, Real gPrev, Real gNext, Real fAverage, Real eta4, Real prevPrimitive);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|ConstantGradHelper::ConstantGradHelper(Real fPrev, Real prevPrimitive, Real xPrev, Real xNext, Real fNext);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|QuadraticHelper::QuadraticHelper(Real xPrev, Real xNext, Real fPrev, Real fNext, Real fAverage, Real prevPrimitive);+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|QuadraticMinHelper::QuadraticMinHelper(Real xPrev, Real xNext, Real fPrev, Real fNext, Real fAverage, Real prevPrimitive);+| |ql/math/interpolations/cubicinterpolation.hpp|CubicInterpolationBaseImpl::CubicInterpolationBaseImpl(Size n, Real leftConditionValue, Real rightConditionValue);+| |ql/math/interpolations/cubicinterpolation.hpp|const std::vector<Real> & CubicInterpolation::primitiveConstants() const;+| |ql/math/interpolations/cubicinterpolation.hpp|const std::vector<Real> & CubicInterpolation::aCoefficients() const;+| |ql/math/interpolations/cubicinterpolation.hpp|const std::vector<Real> & CubicInterpolation::bCoefficients() const;+| |ql/math/interpolations/cubicinterpolation.hpp|const std::vector<Real> & CubicInterpolation::cCoefficients() const;+| |ql/math/interpolations/cubicinterpolation.hpp|const std::vector<bool> & CubicInterpolation::monotonicityAdjustments() const;+| |ql/math/interpolations/cubicinterpolation.hpp|void CubicInterpolation::updateLeftConditionValue(Real value);+| |ql/math/interpolations/cubicinterpolation.hpp|void CubicInterpolation::updateRightConditionValue(Real value);+| |ql/math/interpolations/cubicinterpolation.hpp|Cubic::Cubic(CubicInterpolation::DerivativeApprox da = CubicInterpolation::Kruger, bool monotonic = false, CubicInterpolation::BoundaryCondition leftCondition = CubicInterpolation::SecondDerivative, Real leftConditionValue = 0.0, CubicInterpolation::BoundaryCondition rightCondition = CubicInterpolation::SecondDerivative, Real rightConditionValue = 0.0);+| |ql/math/interpolations/cubicinterpolation.hpp|CubicInterpolationImpl::CubicInterpolationImpl<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, CubicInterpolation::DerivativeApprox da, bool monotonic, CubicInterpolation::BoundaryCondition leftCondition, Real leftConditionValue, CubicInterpolation::BoundaryCondition rightCondition, Real rightConditionValue);+| |ql/math/interpolations/cubicinterpolation.hpp|void CubicInterpolationImpl::update();+| |ql/math/interpolations/cubicinterpolation.hpp|Real CubicInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/cubicinterpolation.hpp|Real CubicInterpolationImpl::primitive(Real x) const;+| |ql/math/interpolations/cubicinterpolation.hpp|Real CubicInterpolationImpl::derivative(Real x) const;+| |ql/math/interpolations/cubicinterpolation.hpp|Real CubicInterpolationImpl::secondDerivative(Real x) const;+| |ql/math/interpolations/extrapolation.hpp|Extrapolator::Extrapolator();+|v|ql/math/interpolations/extrapolation.hpp|void Extrapolator::enableExtrapolation(bool b = true);+|x|ql/math/interpolations/extrapolation.hpp|void Extrapolator::disableExtrapolation(bool b = true);+|v|ql/math/interpolations/extrapolation.hpp|bool Extrapolator::allowsExtrapolation() const;+| |ql/math/interpolations/flatextrapolation.hpp|FlatExtrapolator::FlatExtrapolator(ext::shared_ptr<Interpolation> decoratedInterpolation);+| |ql/math/interpolations/flatextrapolation.hpp|FlatExtrapolatorImpl::FlatExtrapolatorImpl(ext::shared_ptr<Interpolation> decoratedInterpolation);+| |ql/math/interpolations/flatextrapolation2d.hpp|FlatExtrapolator2D::FlatExtrapolator2D(const ext::shared_ptr<Interpolation2D> & decoratedInterpolation);+| |ql/math/interpolations/flatextrapolation2d.hpp|FlatExtrapolator2DImpl::FlatExtrapolator2DImpl(ext::shared_ptr<Interpolation2D> decoratedInterpolation);+| |ql/math/interpolations/forwardflatinterpolation.hpp|ForwardFlatInterpolationImpl::ForwardFlatInterpolationImpl<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin);+| |ql/math/interpolations/forwardflatinterpolation.hpp|void ForwardFlatInterpolationImpl::update();+| |ql/math/interpolations/forwardflatinterpolation.hpp|Real ForwardFlatInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/forwardflatinterpolation.hpp|Real ForwardFlatInterpolationImpl::primitive(Real x) const;+| |ql/math/interpolations/forwardflatinterpolation.hpp|Real ForwardFlatInterpolationImpl::derivative(Real) const;+| |ql/math/interpolations/forwardflatinterpolation.hpp|Real ForwardFlatInterpolationImpl::secondDerivative(Real) const;+| |ql/math/interpolations/interpolation2d.hpp|void Impl::calculate();+| |ql/math/interpolations/interpolation2d.hpp|Real Impl::xMin() const;+| |ql/math/interpolations/interpolation2d.hpp|Real Impl::xMax() const;+| |ql/math/interpolations/interpolation2d.hpp|std::vector<Real> Impl::xValues() const;+| |ql/math/interpolations/interpolation2d.hpp|Size Impl::locateX(Real x) const;+| |ql/math/interpolations/interpolation2d.hpp|Real Impl::yMin() const;+| |ql/math/interpolations/interpolation2d.hpp|Real Impl::yMax() const;+| |ql/math/interpolations/interpolation2d.hpp|std::vector<Real> Impl::yValues() const;+| |ql/math/interpolations/interpolation2d.hpp|Size Impl::locateY(Real y) const;+| |ql/math/interpolations/interpolation2d.hpp|const Matrix & Impl::zData() const;+| |ql/math/interpolations/interpolation2d.hpp|bool Impl::isInRange(Real x, Real y) const;+| |ql/math/interpolations/interpolation2d.hpp|Real Impl::value(Real x, Real y) const;+| |ql/math/interpolations/interpolation2d.hpp|templateImpl::templateImpl<I1, I2, M>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, const I2 & yEnd, const M & zData);+| |ql/math/interpolations/interpolation2d.hpp|Real templateImpl::xMin() const;+| |ql/math/interpolations/interpolation2d.hpp|Real templateImpl::xMax() const;+| |ql/math/interpolations/interpolation2d.hpp|std::vector<Real> templateImpl::xValues() const;+| |ql/math/interpolations/interpolation2d.hpp|std::vector<Real> templateImpl::yValues() const;+| |ql/math/interpolations/interpolation2d.hpp|Interpolation2D::Interpolation2D();+| |ql/math/interpolations/interpolation2d.hpp|Real Interpolation2D::operator()(Real x, Real y, bool allowExtrapolation = false) const;+| |ql/math/interpolations/interpolation2d.hpp|Real Interpolation2D::xMin() const;+| |ql/math/interpolations/interpolation2d.hpp|Real Interpolation2D::xMax() const;+| |ql/math/interpolations/interpolation2d.hpp|std::vector<Real> Interpolation2D::xValues() const;+| |ql/math/interpolations/interpolation2d.hpp|Size Interpolation2D::locateX(Real x) const;+| |ql/math/interpolations/interpolation2d.hpp|Real Interpolation2D::yMin() const;+| |ql/math/interpolations/interpolation2d.hpp|Real Interpolation2D::yMax() const;+| |ql/math/interpolations/interpolation2d.hpp|std::vector<Real> Interpolation2D::yValues() const;+| |ql/math/interpolations/interpolation2d.hpp|Size Interpolation2D::locateY(Real y) const;+| |ql/math/interpolations/interpolation2d.hpp|const Matrix & Interpolation2D::zData() const;+| |ql/math/interpolations/interpolation2d.hpp|bool Interpolation2D::isInRange(Real x, Real y) const;+| |ql/math/interpolations/interpolation2d.hpp|void Interpolation2D::update();+| |ql/math/interpolations/kernelinterpolation.hpp|KernelInterpolationImpl::KernelInterpolationImpl<I1, I2, Kernel>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, Kernel kernel, const Real epsilon);+| |ql/math/interpolations/kernelinterpolation.hpp|void KernelInterpolationImpl::update();+| |ql/math/interpolations/kernelinterpolation.hpp|Real KernelInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/kernelinterpolation.hpp|Real KernelInterpolationImpl::primitive(Real) const;+| |ql/math/interpolations/kernelinterpolation.hpp|Real KernelInterpolationImpl::derivative(Real) const;+| |ql/math/interpolations/kernelinterpolation.hpp|Real KernelInterpolationImpl::secondDerivative(Real) const;+| |ql/math/interpolations/kernelinterpolation2d.hpp|KernelInterpolation2DImpl::KernelInterpolation2DImpl<I1, I2, M, Kernel>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, const I2 & yEnd, const M & zData, Kernel kernel);+| |ql/math/interpolations/kernelinterpolation2d.hpp|void KernelInterpolation2DImpl::setInverseResultPrecision(Real invPrec);+| |ql/math/interpolations/lagrangeinterpolation.hpp|Real UpdatedYInterpolation::updatedValue(const Array & yValues, Real x) const;+| |ql/math/interpolations/lagrangeinterpolation.hpp|LagrangeInterpolationImpl::LagrangeInterpolationImpl<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin);+| |ql/math/interpolations/lagrangeinterpolation.hpp|void LagrangeInterpolationImpl::update();+| |ql/math/interpolations/lagrangeinterpolation.hpp|Real LagrangeInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/lagrangeinterpolation.hpp|Real LagrangeInterpolationImpl::derivative(Real x) const;+| |ql/math/interpolations/lagrangeinterpolation.hpp|Real LagrangeInterpolationImpl::primitive(Real) const;+| |ql/math/interpolations/lagrangeinterpolation.hpp|Real LagrangeInterpolationImpl::secondDerivative(Real) const;+| |ql/math/interpolations/lagrangeinterpolation.hpp|Real LagrangeInterpolationImpl::updatedValue(const Array & y, Real x) const;+| |ql/math/interpolations/lagrangeinterpolation.hpp|Real LagrangeInterpolation::value(const Array & y, Real x) const;+| |ql/math/interpolations/linearinterpolation.hpp|LinearInterpolationImpl::LinearInterpolationImpl<I1, I2>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin);+| |ql/math/interpolations/linearinterpolation.hpp|void LinearInterpolationImpl::update();+| |ql/math/interpolations/linearinterpolation.hpp|Real LinearInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/linearinterpolation.hpp|Real LinearInterpolationImpl::primitive(Real x) const;+| |ql/math/interpolations/linearinterpolation.hpp|Real LinearInterpolationImpl::derivative(Real x) const;+| |ql/math/interpolations/linearinterpolation.hpp|Real LinearInterpolationImpl::secondDerivative(Real) const;+| |ql/math/interpolations/loginterpolation.hpp|LogCubic::LogCubic(CubicInterpolation::DerivativeApprox da, bool monotonic = true, CubicInterpolation::BoundaryCondition leftCondition = CubicInterpolation::SecondDerivative, Real leftConditionValue = 0.0, CubicInterpolation::BoundaryCondition rightCondition = CubicInterpolation::SecondDerivative, Real rightConditionValue = 0.0);+| |ql/math/interpolations/loginterpolation.hpp|DefaultLogCubic::DefaultLogCubic();+| |ql/math/interpolations/loginterpolation.hpp|MonotonicLogCubic::MonotonicLogCubic();+| |ql/math/interpolations/loginterpolation.hpp|KrugerLog::KrugerLog();+| |ql/math/interpolations/loginterpolation.hpp|LogMixedLinearCubic::LogMixedLinearCubic(const Size n, MixedInterpolation::Behavior behavior, CubicInterpolation::DerivativeApprox da, bool monotonic = true, CubicInterpolation::BoundaryCondition leftCondition = CubicInterpolation::SecondDerivative, Real leftConditionValue = 0.0, CubicInterpolation::BoundaryCondition rightCondition = CubicInterpolation::SecondDerivative, Real rightConditionValue = 0.0);+| |ql/math/interpolations/loginterpolation.hpp|DefaultLogMixedLinearCubic::DefaultLogMixedLinearCubic(const Size n, MixedInterpolation::Behavior behavior = MixedInterpolation::ShareRanges);+| |ql/math/interpolations/loginterpolation.hpp|MonotonicLogMixedLinearCubic::MonotonicLogMixedLinearCubic(const Size n, MixedInterpolation::Behavior behavior = MixedInterpolation::ShareRanges);+| |ql/math/interpolations/loginterpolation.hpp|KrugerLogMixedLinearCubic::KrugerLogMixedLinearCubic(const Size n, MixedInterpolation::Behavior behavior = MixedInterpolation::ShareRanges);+| |ql/math/interpolations/loginterpolation.hpp|void LogInterpolationImpl::update();+| |ql/math/interpolations/loginterpolation.hpp|Real LogInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/loginterpolation.hpp|Real LogInterpolationImpl::primitive(Real) const;+| |ql/math/interpolations/loginterpolation.hpp|Real LogInterpolationImpl::derivative(Real x) const;+| |ql/math/interpolations/loginterpolation.hpp|Real LogInterpolationImpl::secondDerivative(Real x) const;+| |ql/math/interpolations/mixedinterpolation.hpp|MixedLinearCubic::MixedLinearCubic(Size n, MixedInterpolation::Behavior behavior, CubicInterpolation::DerivativeApprox da, bool monotonic = true, CubicInterpolation::BoundaryCondition leftCondition = CubicInterpolation::SecondDerivative, Real leftConditionValue = 0.0, CubicInterpolation::BoundaryCondition rightCondition = CubicInterpolation::SecondDerivative, Real rightConditionValue = 0.0);+| |ql/math/interpolations/mixedinterpolation.hpp|void MixedInterpolationImpl::update();+| |ql/math/interpolations/mixedinterpolation.hpp|Real MixedInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/mixedinterpolation.hpp|Real MixedInterpolationImpl::primitive(Real x) const;+| |ql/math/interpolations/mixedinterpolation.hpp|Real MixedInterpolationImpl::derivative(Real x) const;+| |ql/math/interpolations/mixedinterpolation.hpp|Real MixedInterpolationImpl::secondDerivative(Real x) const;+| |ql/math/interpolations/multicubicspline.hpp|DataTable::DataTable<X>(const std::vector<Size>::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|DataTable::DataTable<X>(const SplineGrid::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|Size DataTable::size() const;+| |ql/math/interpolations/multicubicspline.hpp|const X & DataTable::operator[](Size n) const;+| |ql/math/interpolations/multicubicspline.hpp|X & DataTable::operator[](Size n);+| |ql/math/interpolations/multicubicspline.hpp|DataTable::DataTable(Size n);+| |ql/math/interpolations/multicubicspline.hpp|DataTable::DataTable(const std::vector<Size>::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|DataTable::DataTable(const SplineGrid::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|Real DataTable::operator[](Size n) const;+| |ql/math/interpolations/multicubicspline.hpp|Real & DataTable::operator[](Size n);+| |ql/math/interpolations/multicubicspline.hpp|Data::Data<X, Y>();+| |ql/math/interpolations/multicubicspline.hpp|Data::Data<X, Y>(const SplineGrid::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|Data::Data<X, Y>(const SplineGrid & v);+| |ql/math/interpolations/multicubicspline.hpp|void Data::swap(Data<X, Y> & d);+| |ql/math/interpolations/multicubicspline.hpp|Data::Data();+| |ql/math/interpolations/multicubicspline.hpp|Data::Data(const SplineGrid::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|Data::Data(const SplineGrid & v);+| |ql/math/interpolations/multicubicspline.hpp|Data::Data(std::vector<Real> v);+| |ql/math/interpolations/multicubicspline.hpp|void Data::swap(Data<std::vector<Real>, EmptyArg> & d);+| |ql/math/interpolations/multicubicspline.hpp|Real Data::operator[](Size n) const;+| |ql/math/interpolations/multicubicspline.hpp|Real & Data::operator[](Size n);+| |ql/math/interpolations/multicubicspline.hpp|Point::Point<X, Y>();+| |ql/math/interpolations/multicubicspline.hpp|Point::Point<X, Y>(const std::vector<Real>::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|Point::Point<X, Y>(const std::vector<Real> & v);+| |ql/math/interpolations/multicubicspline.hpp|Point::Point<X, Y>(const SplineGrid::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|Point::Point<X, Y>(const SplineGrid & grid);+| |ql/math/interpolations/multicubicspline.hpp|data_type Point::operator[](Size n) const;+| |ql/math/interpolations/multicubicspline.hpp|data_type & Point::operator[](Size n);+| |ql/math/interpolations/multicubicspline.hpp|Point::Point(data_type s);+| |ql/math/interpolations/multicubicspline.hpp|Point::Point(const std::vector<Real>::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|Point::Point(const std::vector<Real> & v);+| |ql/math/interpolations/multicubicspline.hpp|Point::Point();+| |ql/math/interpolations/multicubicspline.hpp|const data_type & Point::operator[](Size n) const;+| |ql/math/interpolations/multicubicspline.hpp|Point::Point(const SplineGrid::const_iterator & i);+| |ql/math/interpolations/multicubicspline.hpp|Point::Point(const SplineGrid & grid);+| |ql/math/interpolations/multicubicspline.hpp|Real Point::operator[](Size n) const;+| |ql/math/interpolations/multicubicspline.hpp|Real & Point::operator[](Size n);+| |ql/math/interpolations/multicubicspline.hpp|base_cubic_spline::base_cubic_spline(const data & d, const data & d2, const data_table & y, data_table & y2, output_data & v);+| |ql/math/interpolations/multicubicspline.hpp|n_cubic_spline::n_cubic_spline<X>(const data & d, const data & d2, const data_table & y, data_table & y2, output_data & v);+| |ql/math/interpolations/multicubicspline.hpp|base_cubic_splint::base_cubic_splint(const return_type & a, const return_type & b, const return_type & a2, const return_type & b2, const dimensions & i, const data &, const data &, const data_table & y, data_table & y2, output_data &, output_data &, output_data &, result_type & res);+| |ql/math/interpolations/multicubicspline.hpp|n_cubic_splint::n_cubic_splint<X>(const return_type & a, const return_type & b, const return_type & a2, const return_type & b2, const dimensions & i, const data & d, const data & d2, const data_table & y, data_table & y2, output_data & v, output_data & v1, output_data & v2, result_type & r);+| |ql/math/interpolations/multicubicspline.hpp|MultiCubicSpline::MultiCubicSpline<i>(const SplineGrid & grid, const data_table & y, std::vector<bool> ae = { });+| |ql/math/interpolations/multicubicspline.hpp|result_type MultiCubicSpline::operator()(const argument_type & x) const;+| |ql/math/interpolations/multicubicspline.hpp|void MultiCubicSpline::set_shared_increments() const;+| |ql/math/interpolations/multicubicspline.hpp|void MultiCubicSpline::set_shared_coefficients(const argument_type & x) const;+| |ql/math/interpolations/multicubicspline.hpp|void set_shared_coefficients(const typename MultiCubicSpline<i>::argument_type & x) const;+| |ql/math/interpolations/sabrinterpolation.hpp|SABRWrapper::SABRWrapper(const Time t, const Real & forward, const std::vector<Real> & params, const std::vector<Real> & addParams);+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRWrapper::volatility(const Real x, const VolatilityType volatilityType);+| |ql/math/interpolations/sabrinterpolation.hpp|Size SABRSpecs::dimension();+| |ql/math/interpolations/sabrinterpolation.hpp|void SABRSpecs::defaultValues(std::vector<Real> & params, std::vector<bool> &, const Real & forward, const Real expiryTime, const std::vector<Real> & addParams);+| |ql/math/interpolations/sabrinterpolation.hpp|void SABRSpecs::guess(Array & values, const std::vector<bool> & paramIsFixed, const Real & forward, const Real expiryTime, const std::vector<Real> & r, const std::vector<Real> & addParams);+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRSpecs::eps1();+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRSpecs::eps2();+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRSpecs::dilationFactor();+| |ql/math/interpolations/sabrinterpolation.hpp|Array SABRSpecs::inverse(const Array & y, const std::vector<bool> &, const std::vector<Real> &, const Real);+| |ql/math/interpolations/sabrinterpolation.hpp|Array SABRSpecs::direct(const Array & x, const std::vector<bool> &, const std::vector<Real> &, const Real);+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRSpecs::weight(const Real strike, const Real forward, const Real stdDev, const std::vector<Real> & addParams);+| |ql/math/interpolations/sabrinterpolation.hpp|ext::shared_ptr<type> SABRSpecs::instance(const Time t, const Real & forward, const std::vector<Real> & params, const std::vector<Real> & addParams);+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRInterpolation::expiry() const;+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRInterpolation::forward() const;+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRInterpolation::alpha() const;+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRInterpolation::beta() const;+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRInterpolation::nu() const;+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRInterpolation::rho() const;+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRInterpolation::rmsError() const;+| |ql/math/interpolations/sabrinterpolation.hpp|Real SABRInterpolation::maxError() const;+| |ql/math/interpolations/sabrinterpolation.hpp|const std::vector<Real> & SABRInterpolation::interpolationWeights() const;+| |ql/math/interpolations/sabrinterpolation.hpp|EndCriteria::Type SABRInterpolation::endCriteria();+| |ql/math/interpolations/sabrinterpolation.hpp|SABR::SABR(Time t, Real forward, Real alpha, Real beta, Real nu, Real rho, bool alphaIsFixed, bool betaIsFixed, bool nuIsFixed, bool rhoIsFixed, bool vegaWeighted = false, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> optMethod = ext::shared_ptr<OptimizationMethod>(), const Real errorAccept = 0.0020, const bool useMaxError = false, const Size maxGuesses = 50, const Real shift = 0.0);+| |ql/math/interpolations/xabrinterpolation.hpp|XABRCoeffHolder::XABRCoeffHolder<Model>(const Time t, const Real & forward, const std::vector<Real> & params, const std::vector<bool> & paramIsFixed, std::vector<Real> addParams);+| |ql/math/interpolations/xabrinterpolation.hpp|void XABRCoeffHolder::updateModelInstance();+| |ql/math/interpolations/xabrinterpolation.hpp|XABRInterpolationImpl::XABRInterpolationImpl<I1, I2, Model>(const I1 & xBegin, const I1 & xEnd, const I2 & yBegin, Time t, const Real & forward, const std::vector<Real> & params, const std::vector<bool> & paramIsFixed, bool vegaWeighted, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<OptimizationMethod> optMethod, const Real errorAccept, const bool useMaxError, const Size maxGuesses, const std::vector<Real> & addParams = std::vector<Real>(), VolatilityType volatilityType = VolatilityType::ShiftedLognormal);+| |ql/math/interpolations/xabrinterpolation.hpp|void XABRInterpolationImpl::update();+| |ql/math/interpolations/xabrinterpolation.hpp|Real XABRInterpolationImpl::value(Real x) const;+| |ql/math/interpolations/xabrinterpolation.hpp|Real XABRInterpolationImpl::primitive(Real) const;+| |ql/math/interpolations/xabrinterpolation.hpp|Real XABRInterpolationImpl::derivative(Real) const;+| |ql/math/interpolations/xabrinterpolation.hpp|Real XABRInterpolationImpl::secondDerivative(Real) const;+| |ql/math/interpolations/xabrinterpolation.hpp|Real XABRInterpolationImpl::interpolationSquaredError() const;+| |ql/math/interpolations/xabrinterpolation.hpp|Array XABRInterpolationImpl::interpolationErrors() const;+| |ql/math/interpolations/xabrinterpolation.hpp|Real XABRInterpolationImpl::interpolationError() const;+| |ql/math/interpolations/xabrinterpolation.hpp|Real XABRInterpolationImpl::interpolationMaxError() const;+| |ql/math/interpolations/xabrinterpolation.hpp|XABRError::XABRError(XABRInterpolationImpl<I1, I2, Model> * xabr);+| |ql/math/interpolations/zabrinterpolation.hpp|Size ZabrSpecs::dimension();+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrSpecs::eps();+| |ql/math/interpolations/zabrinterpolation.hpp|void ZabrSpecs::defaultValues(std::vector<Real> & params, std::vector<bool> & paramIsFixed, const Real & forward, const Real expiryTime, const std::vector<Real> & addParams);+| |ql/math/interpolations/zabrinterpolation.hpp|void ZabrSpecs::guess(Array & values, const std::vector<bool> & paramIsFixed, const Real & forward, const Real expiryTime, const std::vector<Real> & r, const std::vector<Real> & addParams);+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrSpecs::eps1();+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrSpecs::eps2();+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrSpecs::dilationFactor();+| |ql/math/interpolations/zabrinterpolation.hpp|Array ZabrSpecs::inverse(const Array & y, const std::vector<bool> &, const std::vector<Real> &, const Real);+| |ql/math/interpolations/zabrinterpolation.hpp|Array ZabrSpecs::direct(const Array & x, const std::vector<bool> &, const std::vector<Real> &, const Real);+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrSpecs::weight(const Real strike, const Real forward, const Real stdDev, const std::vector<Real> & addParams);+| |ql/math/interpolations/zabrinterpolation.hpp|ext::shared_ptr<type> ZabrSpecs::instance(const Time t, const Real & forward, const std::vector<Real> & params, const std::vector<Real> & addParams);+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrInterpolation::expiry() const;+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrInterpolation::forward() const;+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrInterpolation::alpha() const;+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrInterpolation::beta() const;+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrInterpolation::nu() const;+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrInterpolation::rho() const;+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrInterpolation::gamma() const;+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrInterpolation::rmsError() const;+| |ql/math/interpolations/zabrinterpolation.hpp|Real ZabrInterpolation::maxError() const;+| |ql/math/interpolations/zabrinterpolation.hpp|const std::vector<Real> & ZabrInterpolation::interpolationWeights() const;+| |ql/math/interpolations/zabrinterpolation.hpp|EndCriteria::Type ZabrInterpolation::endCriteria();+| |ql/math/interpolations/zabrinterpolation.hpp|Zabr::Zabr<Evaluation>(Time t, Real forward, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool alphaIsFixed, bool betaIsFixed, bool nuIsFixed, bool rhoIsFixed, bool gammaIsFixed, bool vegaWeighted = false, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> optMethod = ext::shared_ptr<OptimizationMethod>(), const Real errorAccept = 0.0020, const bool useMaxError = false, const Size maxGuesses = 50);+| |ql/math/kernelfunctions.hpp|Real KernelFunction::operator()(Real x) const;+| |ql/math/kernelfunctions.hpp|GaussianKernel::GaussianKernel(Real average, Real sigma);+| |ql/math/kernelfunctions.hpp|Real GaussianKernel::derivative(Real x) const;+| |ql/math/kernelfunctions.hpp|Real GaussianKernel::primitive(Real x) const;+| |ql/math/linearleastsquaresregression.hpp|LinearFct::LinearFct<Container>(Size i);+| |ql/math/linearleastsquaresregression.hpp|Real LinearFct::operator()(const Container & x) const;+| |ql/math/linearleastsquaresregression.hpp|LinearFcts::LinearFcts<xContainer>(const xContainer & x, Real intercept);+| |ql/math/linearleastsquaresregression.hpp|const std::vector<std::function<Real (ArgumentType)>> & LinearFcts::fcts();+| |ql/math/linearleastsquaresregression.hpp|LinearLeastSquaresRegression::LinearLeastSquaresRegression<ArgumentType>(const std::vector<ArgumentType> & x, const std::vector<Real> & y, const std::vector<std::function<Real (ArgumentType)>> & v);+|?|ql/math/matrix.hpp|Matrix::Matrix();+|?|ql/math/matrix.hpp|Matrix::Matrix(Size rows, Size columns);+|v|ql/math/matrix.hpp|Matrix::Matrix(Size rows, Size columns, Real value);+|?|ql/math/matrix.hpp|Matrix::Matrix(const Matrix &);+|?|ql/math/matrix.hpp|Matrix::Matrix(Matrix &&);+|?|ql/math/matrix.hpp|Matrix::Matrix(std::initializer_list<std::initializer_list<Real>>);+|x|ql/math/matrix.hpp|Matrix & Matrix::operator=(const Matrix &);+|x|ql/math/matrix.hpp|Matrix & Matrix::operator=(Matrix &&);+|x|ql/math/matrix.hpp|bool Matrix::operator==(const Matrix &) const;+|x|ql/math/matrix.hpp|bool Matrix::operator!=(const Matrix &) const;+|x|ql/math/matrix.hpp|const Matrix & Matrix::operator+=(const Matrix &);+|x|ql/math/matrix.hpp|const Matrix & Matrix::operator-=(const Matrix &);+|x|ql/math/matrix.hpp|const Matrix & Matrix::operator*=(Real);+|x|ql/math/matrix.hpp|const Matrix & Matrix::operator/=(Real);+|x|ql/math/matrix.hpp|const_iterator Matrix::begin() const;+|x|ql/math/matrix.hpp|iterator Matrix::begin();+|x|ql/math/matrix.hpp|const_iterator Matrix::end() const;+|x|ql/math/matrix.hpp|iterator Matrix::end();+|x|ql/math/matrix.hpp|const_reverse_iterator Matrix::rbegin() const;+|x|ql/math/matrix.hpp|reverse_iterator Matrix::rbegin();+|x|ql/math/matrix.hpp|const_reverse_iterator Matrix::rend() const;+|x|ql/math/matrix.hpp|reverse_iterator Matrix::rend();+|x|ql/math/matrix.hpp|const_row_iterator Matrix::row_begin(Size i) const;+|x|ql/math/matrix.hpp|row_iterator Matrix::row_begin(Size i);+|x|ql/math/matrix.hpp|const_row_iterator Matrix::row_end(Size i) const;+|x|ql/math/matrix.hpp|row_iterator Matrix::row_end(Size i);+|x|ql/math/matrix.hpp|const_reverse_row_iterator Matrix::row_rbegin(Size i) const;+|x|ql/math/matrix.hpp|reverse_row_iterator Matrix::row_rbegin(Size i);+|x|ql/math/matrix.hpp|const_reverse_row_iterator Matrix::row_rend(Size i) const;+|x|ql/math/matrix.hpp|reverse_row_iterator Matrix::row_rend(Size i);+|x|ql/math/matrix.hpp|const_column_iterator Matrix::column_begin(Size i) const;+|x|ql/math/matrix.hpp|column_iterator Matrix::column_begin(Size i);+|x|ql/math/matrix.hpp|const_column_iterator Matrix::column_end(Size i) const;+|x|ql/math/matrix.hpp|column_iterator Matrix::column_end(Size i);+|x|ql/math/matrix.hpp|const_reverse_column_iterator Matrix::column_rbegin(Size i) const;+|x|ql/math/matrix.hpp|reverse_column_iterator Matrix::column_rbegin(Size i);+|x|ql/math/matrix.hpp|const_reverse_column_iterator Matrix::column_rend(Size i) const;+|x|ql/math/matrix.hpp|reverse_column_iterator Matrix::column_rend(Size i);+|x|ql/math/matrix.hpp|const_row_iterator Matrix::operator[](Size) const;+|x|ql/math/matrix.hpp|const_row_iterator Matrix::at(Size) const;+|x|ql/math/matrix.hpp|row_iterator Matrix::operator[](Size);+|x|ql/math/matrix.hpp|row_iterator Matrix::at(Size);+|x|ql/math/matrix.hpp|Array Matrix::diagonal() const;+|x|ql/math/matrix.hpp|const Real & Matrix::operator()(Size i, Size j) const;+|x|ql/math/matrix.hpp|Real & Matrix::operator()(Size i, Size j);+|x|ql/math/matrix.hpp|Size Matrix::rows() const;+|x|ql/math/matrix.hpp|Size Matrix::columns() const;+|x|ql/math/matrix.hpp|bool Matrix::empty() const;+|x|ql/math/matrix.hpp|Size Matrix::size1() const;+|x|ql/math/matrix.hpp|Size Matrix::size2() const;+|x|ql/math/matrix.hpp|void Matrix::swap(Matrix &);+| |ql/math/matrix.hpp|Matrix operator+(const Matrix &, const Matrix &);+| |ql/math/matrix.hpp|Matrix operator+(const Matrix &, Matrix &&);+| |ql/math/matrix.hpp|Matrix operator+(Matrix &&, const Matrix &);+| |ql/math/matrix.hpp|Matrix operator+(Matrix &&, Matrix &&);+| |ql/math/matrix.hpp|Matrix operator-(const Matrix &);+| |ql/math/matrix.hpp|Matrix operator-(Matrix &&);+| |ql/math/matrix.hpp|Matrix operator-(const Matrix &, const Matrix &);+| |ql/math/matrix.hpp|Matrix operator-(const Matrix &, Matrix &&);+| |ql/math/matrix.hpp|Matrix operator-(Matrix &&, const Matrix &);+| |ql/math/matrix.hpp|Matrix operator-(Matrix &&, Matrix &&);+| |ql/math/matrix.hpp|Matrix operator*(const Matrix &, Real);+| |ql/math/matrix.hpp|Matrix operator*(Matrix &&, Real);+| |ql/math/matrix.hpp|Matrix operator*(Real, const Matrix &);+| |ql/math/matrix.hpp|Matrix operator*(Real, Matrix &&);+| |ql/math/matrix.hpp|Matrix operator/(const Matrix &, Real);+| |ql/math/matrix.hpp|Matrix operator/(Matrix &&, Real);+| |ql/math/matrix.hpp|Array operator*(const Array &, const Matrix &);+| |ql/math/matrix.hpp|Array operator*(const Matrix &, const Array &);+| |ql/math/matrix.hpp|Matrix operator*(const Matrix &, const Matrix &);+| |ql/math/matrix.hpp|Matrix transpose(const Matrix &);+| |ql/math/matrix.hpp|Matrix outerProduct(const Array & v1, const Array & v2);+|v|ql/math/matrix.hpp|void swap(Matrix &, Matrix &);+| |ql/math/matrix.hpp|std::ostream & operator<<(std::ostream &, const Matrix &);+| |ql/math/matrix.hpp|Matrix inverse(const Matrix & m);+| |ql/math/matrix.hpp|Real determinant(const Matrix & m);+|?|ql/math/matrix.hpp|Matrix(const Matrix & from);+|?|ql/math/matrix.hpp|Matrix(Matrix && from);+|?|ql/math/matrix.hpp|Matrix(std::initializer_list<std::initializer_list<Real>> data);+| |ql/math/matrix.hpp|Matrix & operator=(const Matrix & from);+| |ql/math/matrix.hpp|Matrix & operator=(Matrix && from);+| |ql/math/matrix.hpp|bool operator==(const Matrix & to) const;+| |ql/math/matrix.hpp|bool operator!=(const Matrix & to) const;+|?|ql/math/matrix.hpp|void swap(Matrix & from);+| |ql/math/matrix.hpp|const Matrix & operator+=(const Matrix & m);+| |ql/math/matrix.hpp|const Matrix & operator-=(const Matrix & m);+| |ql/math/matrix.hpp|const Matrix & operator*=(Real x);+| |ql/math/matrix.hpp|const Matrix & operator/=(Real x);+| |ql/math/matrix.hpp|Matrix::const_iterator begin() const;+| |ql/math/matrix.hpp|Matrix::iterator begin();+| |ql/math/matrix.hpp|Matrix::const_iterator end() const;+| |ql/math/matrix.hpp|Matrix::iterator end();+| |ql/math/matrix.hpp|Matrix::const_reverse_iterator rbegin() const;+| |ql/math/matrix.hpp|Matrix::reverse_iterator rbegin();+| |ql/math/matrix.hpp|Matrix::const_reverse_iterator rend() const;+| |ql/math/matrix.hpp|Matrix::reverse_iterator rend();+| |ql/math/matrix.hpp|Matrix::const_row_iterator row_begin(Size i) const;+| |ql/math/matrix.hpp|Matrix::row_iterator row_begin(Size i);+| |ql/math/matrix.hpp|Matrix::const_row_iterator row_end(Size i) const;+| |ql/math/matrix.hpp|Matrix::row_iterator row_end(Size i);+| |ql/math/matrix.hpp|Matrix::const_reverse_row_iterator row_rbegin(Size i) const;+| |ql/math/matrix.hpp|Matrix::reverse_row_iterator row_rbegin(Size i);+| |ql/math/matrix.hpp|Matrix::const_reverse_row_iterator row_rend(Size i) const;+| |ql/math/matrix.hpp|Matrix::reverse_row_iterator row_rend(Size i);+| |ql/math/matrix.hpp|Matrix::const_column_iterator column_begin(Size i) const;+| |ql/math/matrix.hpp|Matrix::column_iterator column_begin(Size i);+| |ql/math/matrix.hpp|Matrix::const_column_iterator column_end(Size i) const;+| |ql/math/matrix.hpp|Matrix::column_iterator column_end(Size i);+| |ql/math/matrix.hpp|Matrix::const_reverse_column_iterator column_rbegin(Size i) const;+| |ql/math/matrix.hpp|Matrix::reverse_column_iterator column_rbegin(Size i);+| |ql/math/matrix.hpp|Matrix::const_reverse_column_iterator column_rend(Size i) const;+| |ql/math/matrix.hpp|Matrix::reverse_column_iterator column_rend(Size i);+| |ql/math/matrix.hpp|Matrix::const_row_iterator operator[](Size i) const;+| |ql/math/matrix.hpp|Matrix::const_row_iterator at(Size i) const;+| |ql/math/matrix.hpp|Matrix::row_iterator operator[](Size i);+| |ql/math/matrix.hpp|Matrix::row_iterator at(Size i);+| |ql/math/matrix.hpp|Matrix operator+(const Matrix & m1, const Matrix & m2);+| |ql/math/matrix.hpp|Matrix operator+(const Matrix & m1, Matrix && m2);+| |ql/math/matrix.hpp|Matrix operator+(Matrix && m1, const Matrix & m2);+| |ql/math/matrix.hpp|Matrix operator+(Matrix && m1, Matrix && m2);+| |ql/math/matrix.hpp|Matrix operator-(const Matrix & m1);+| |ql/math/matrix.hpp|Matrix operator-(Matrix && m1);+| |ql/math/matrix.hpp|Matrix operator-(const Matrix & m1, const Matrix & m2);+| |ql/math/matrix.hpp|Matrix operator-(const Matrix & m1, Matrix && m2);+| |ql/math/matrix.hpp|Matrix operator-(Matrix && m1, const Matrix & m2);+| |ql/math/matrix.hpp|Matrix operator-(Matrix && m1, Matrix && m2);+| |ql/math/matrix.hpp|Matrix operator*(const Matrix & m, Real x);+| |ql/math/matrix.hpp|Matrix operator*(Matrix && m, Real x);+| |ql/math/matrix.hpp|Matrix operator*(Real x, const Matrix & m);+| |ql/math/matrix.hpp|Matrix operator*(Real x, Matrix && m);+| |ql/math/matrix.hpp|Matrix operator/(const Matrix & m, Real x);+| |ql/math/matrix.hpp|Matrix operator/(Matrix && m, Real x);+| |ql/math/matrix.hpp|Array operator*(const Array & v, const Matrix & m);+| |ql/math/matrix.hpp|Array operator*(const Matrix & m, const Array & v);+| |ql/math/matrix.hpp|Matrix operator*(const Matrix & m1, const Matrix & m2);+| |ql/math/matrix.hpp|Matrix transpose(const Matrix & m);+|v|ql/math/matrix.hpp|void swap(Matrix & m1, Matrix & m2);+| |ql/math/matrix.hpp|std::ostream & operator<<(std::ostream & out, const Matrix & m);+| |ql/math/matrixutilities/basisincompleteordered.hpp|BasisIncompleteOrdered::BasisIncompleteOrdered(Size euclideanDimension);+| |ql/math/matrixutilities/basisincompleteordered.hpp|bool BasisIncompleteOrdered::addVector(const Array & newVector);+| |ql/math/matrixutilities/basisincompleteordered.hpp|Size BasisIncompleteOrdered::basisSize() const;+|x|ql/math/matrixutilities/basisincompleteordered.hpp|Size BasisIncompleteOrdered::euclideanDimension() const;+| |ql/math/matrixutilities/basisincompleteordered.hpp|Matrix BasisIncompleteOrdered::getBasisAsRowsInMatrix() const;+| |ql/math/matrixutilities/basisincompleteordered.hpp|OrthogonalProjections::OrthogonalProjections(const Matrix & originalVectors, Real multiplierCutOff, Real tolerance);+| |ql/math/matrixutilities/basisincompleteordered.hpp|const std::valarray<bool> & OrthogonalProjections::validVectors() const;+| |ql/math/matrixutilities/basisincompleteordered.hpp|const std::vector<Real> & OrthogonalProjections::GetVector(Size index) const;+| |ql/math/matrixutilities/basisincompleteordered.hpp|Size OrthogonalProjections::numberValidVectors() const;+| |ql/math/matrixutilities/bicgstab.hpp|BiCGstab::BiCGstab(MatrixMult A, Size maxIter, Real relTol, MatrixMult preConditioner = MatrixMult());+| |ql/math/matrixutilities/bicgstab.hpp|BiCGStabResult BiCGstab::solve(const Array & b, const Array & x0 = Array()) const;+|v|ql/math/matrixutilities/choleskydecomposition.hpp|Matrix CholeskyDecomposition(const Matrix & m, bool flexible = false);+|v|ql/math/matrixutilities/choleskydecomposition.hpp|Array CholeskySolveFor(const Matrix & L, const Array & b);+| |ql/math/matrixutilities/expm.hpp|Matrix Expm(const Matrix & M, Real t = 1.0, Real tol = QL_EPSILON);+| |ql/math/matrixutilities/factorreduction.hpp|std::vector<Real> factorReduction(Matrix mtrx, Size maxIters = 25);+| |ql/math/matrixutilities/getcovariance.hpp|CovarianceDecomposition::CovarianceDecomposition(const Matrix & covarianceMatrix, Real tolerance = 1.0e-12);+| |ql/math/matrixutilities/getcovariance.hpp|const Array & CovarianceDecomposition::variances() const;+| |ql/math/matrixutilities/getcovariance.hpp|const Array & CovarianceDecomposition::standardDeviations() const;+| |ql/math/matrixutilities/getcovariance.hpp|const Matrix & CovarianceDecomposition::correlationMatrix() const;+| |ql/math/matrixutilities/gmres.hpp|GMRES::GMRES(MatrixMult A, Size maxIter, Real relTol, MatrixMult preConditioner = MatrixMult());+| |ql/math/matrixutilities/gmres.hpp|GMRESResult GMRES::solve(const Array & b, const Array & x0 = Array()) const;+| |ql/math/matrixutilities/gmres.hpp|GMRESResult GMRES::solveWithRestart(Size restart, const Array & b, const Array & x0 = Array()) const;+| |ql/math/matrixutilities/householder.hpp|HouseholderTransformation::HouseholderTransformation(Array v);+| |ql/math/matrixutilities/householder.hpp|Matrix HouseholderTransformation::getMatrix() const;+| |ql/math/matrixutilities/householder.hpp|Array HouseholderTransformation::operator()(const Array & x) const;+| |ql/math/matrixutilities/householder.hpp|HouseholderReflection::HouseholderReflection(Array e);+| |ql/math/matrixutilities/householder.hpp|Array HouseholderReflection::operator()(const Array & a) const;+| |ql/math/matrixutilities/householder.hpp|Array HouseholderReflection::reflectionVector(const Array & a) const;+|v|ql/math/matrixutilities/pseudosqrt.hpp|Matrix pseudoSqrt(const Matrix &, SalvagingAlgorithm::Type = SalvagingAlgorithm::None);+|v|ql/math/matrixutilities/pseudosqrt.hpp|Matrix rankReducedSqrt(const Matrix &, Size maxRank, Real componentRetainedPercentage, SalvagingAlgorithm::Type);+| |ql/math/matrixutilities/qrdecomposition.hpp|std::vector<Size> qrDecomposition(const Matrix & A, Matrix & q, Matrix & r, bool pivot = true);+| |ql/math/matrixutilities/qrdecomposition.hpp|Array qrSolve(const Matrix & a, const Array & b, bool pivot = true, const Array & d = Array());+| |ql/math/matrixutilities/sparseilupreconditioner.hpp|SparseILUPreconditioner::SparseILUPreconditioner(const SparseMatrix & A, Integer lfil = 1);+| |ql/math/matrixutilities/sparseilupreconditioner.hpp|const SparseMatrix & SparseILUPreconditioner::L() const;+| |ql/math/matrixutilities/sparseilupreconditioner.hpp|const SparseMatrix & SparseILUPreconditioner::U() const;+| |ql/math/matrixutilities/sparseilupreconditioner.hpp|Array SparseILUPreconditioner::apply(const Array & b) const;+| |ql/math/matrixutilities/sparsematrix.hpp|Array prod(const SparseMatrix & A, const Array & x);+| |ql/math/matrixutilities/svd.hpp|SVD::SVD(const Matrix &);+| |ql/math/matrixutilities/svd.hpp|const Matrix & SVD::U() const;+| |ql/math/matrixutilities/svd.hpp|const Matrix & SVD::V() const;+| |ql/math/matrixutilities/svd.hpp|const Array & SVD::singularValues() const;+| |ql/math/matrixutilities/svd.hpp|Matrix SVD::S() const;+| |ql/math/matrixutilities/svd.hpp|Real SVD::norm2() const;+| |ql/math/matrixutilities/svd.hpp|Real SVD::cond() const;+| |ql/math/matrixutilities/svd.hpp|Size SVD::rank() const;+| |ql/math/matrixutilities/svd.hpp|Array SVD::solveFor(const Array &) const;+|v|ql/math/matrixutilities/symmetricschurdecomposition.hpp|SymmetricSchurDecomposition::SymmetricSchurDecomposition(const Matrix & s);+|v|ql/math/matrixutilities/symmetricschurdecomposition.hpp|const Array & SymmetricSchurDecomposition::eigenvalues() const;+|v|ql/math/matrixutilities/symmetricschurdecomposition.hpp|const Matrix & SymmetricSchurDecomposition::eigenvectors() const;+| |ql/math/matrixutilities/symmetricschurdecomposition.hpp|void jacobiRotate_(Matrix & m, Real rot, Real dil, Size j1, Size k1, Size j2, Size k2) const;+| |ql/math/matrixutilities/tapcorrelations.hpp|Matrix triangularAnglesParametrization(const Array & angles, Size matrixSize, Size rank);+| |ql/math/matrixutilities/tapcorrelations.hpp|Matrix lmmTriangularAnglesParametrization(const Array & angles, Size matrixSize, Size rank);+| |ql/math/matrixutilities/tapcorrelations.hpp|Matrix triangularAnglesParametrizationUnconstrained(const Array & x, Size matrixSize, Size rank);+| |ql/math/matrixutilities/tapcorrelations.hpp|Matrix lmmTriangularAnglesParametrizationUnconstrained(const Array & x, Size matrixSize, Size rank);+| |ql/math/matrixutilities/tapcorrelations.hpp|Matrix triangularAnglesParametrizationRankThree(Real alpha, Real t0, Real epsilon, Size nbRows);+| |ql/math/matrixutilities/tapcorrelations.hpp|Matrix triangularAnglesParametrizationRankThreeVectorial(const Array & parameters, Size nbRows);+| |ql/math/matrixutilities/tapcorrelations.hpp|FrobeniusCostFunction::FrobeniusCostFunction(Matrix target, std::function<Matrix (const Array &, Size, Size)> f, Size matrixSize, Size rank);+| |ql/math/matrixutilities/tqreigendecomposition.hpp|TqrEigenDecomposition::TqrEigenDecomposition(const Array & diag, const Array & sub, EigenVectorCalculation calc = WithEigenVector, ShiftStrategy strategy = CloseEigenValue);+|x|ql/math/matrixutilities/tqreigendecomposition.hpp|const Array & TqrEigenDecomposition::eigenvalues() const;+| |ql/math/matrixutilities/tqreigendecomposition.hpp|const Matrix & TqrEigenDecomposition::eigenvectors() const;+| |ql/math/matrixutilities/tqreigendecomposition.hpp|Size TqrEigenDecomposition::iterations() const;+| |ql/math/modifiedbessel.hpp|Real modifiedBesselFunction_i(Real nu, Real x);+| |ql/math/modifiedbessel.hpp|Real modifiedBesselFunction_k(Real nu, Real x);+| |ql/math/modifiedbessel.hpp|Real modifiedBesselFunction_i_exponentiallyWeighted(Real nu, Real x);+| |ql/math/modifiedbessel.hpp|Real modifiedBesselFunction_k_exponentiallyWeighted(Real nu, Real x);+| |ql/math/modifiedbessel.hpp|std::complex<Real> modifiedBesselFunction_i(Real nu, const std::complex<Real> & z);+| |ql/math/modifiedbessel.hpp|std::complex<Real> modifiedBesselFunction_k(Real nu, const std::complex<Real> & z);+| |ql/math/modifiedbessel.hpp|std::complex<Real> modifiedBesselFunction_i_exponentiallyWeighted(Real nu, const std::complex<Real> & z);+| |ql/math/modifiedbessel.hpp|std::complex<Real> modifiedBesselFunction_k_exponentiallyWeighted(Real nu, const std::complex<Real> & z);+| |ql/math/ode/adaptiverungekutta.hpp|AdaptiveRungeKutta::AdaptiveRungeKutta<T>(const Real eps = 1.0e-6, const Real h1 = 1.0e-4, const Real hmin = 0.0);+| |ql/math/ode/adaptiverungekutta.hpp|std::vector<T> AdaptiveRungeKutta::operator()(const OdeFct & ode, const std::vector<T> & y1, Real x1, Real x2);+| |ql/math/ode/adaptiverungekutta.hpp|T AdaptiveRungeKutta::operator()(const OdeFct1d & ode, T y1, Real x1, Real x2);+| |ql/math/ode/adaptiverungekutta.hpp|std::vector<T> operator()(const OdeFct & ode, const std::vector<T> & y1, const Real x1, const Real x2);+| |ql/math/ode/adaptiverungekutta.hpp|OdeFctWrapper::OdeFctWrapper<T>(const OdeFct1d & ode1d);+| |ql/math/ode/adaptiverungekutta.hpp|std::vector<T> OdeFctWrapper::operator()(const Real x, const std::vector<T> & y);+| |ql/math/ode/adaptiverungekutta.hpp|T operator()(const OdeFct1d & ode, const T y1, const Real x1, const Real x2);+| |ql/math/ode/adaptiverungekutta.hpp|void rkqs(std::vector<T> & y, const std::vector<T> & dydx, Real & x, const Real htry, const Real eps, const std::vector<Real> & yScale, Real & hdid, Real & hnext, const OdeFct & derivs);+| |ql/math/ode/adaptiverungekutta.hpp|void rkck(const std::vector<T> & y, const std::vector<T> & dydx, Real x, const Real h, std::vector<T> & yout, std::vector<T> & yerr, const OdeFct & derivs);+| |ql/math/optimization/armijo.hpp|ArmijoLineSearch::ArmijoLineSearch(Real eps = 1e-8, Real alpha = 0.05, Real beta = 0.65);+| |ql/math/optimization/bfgs.hpp|BFGS::BFGS(const ext::shared_ptr<LineSearch> & lineSearch = ext::shared_ptr<LineSearch>());+| |ql/math/optimization/conjugategradient.hpp|ConjugateGradient::ConjugateGradient(const ext::shared_ptr<LineSearch> & lineSearch = ext::shared_ptr<LineSearch>());+| |ql/math/optimization/constraint.hpp|bool Impl::test(const Array & params) const;+| |ql/math/optimization/constraint.hpp|Array Impl::upperBound(const Array & params) const;+| |ql/math/optimization/constraint.hpp|Array Impl::lowerBound(const Array & params) const;+| |ql/math/optimization/constraint.hpp|bool Constraint::empty() const;+| |ql/math/optimization/constraint.hpp|bool Constraint::test(const Array & p) const;+| |ql/math/optimization/constraint.hpp|Array Constraint::upperBound(const Array & params) const;+| |ql/math/optimization/constraint.hpp|Array Constraint::lowerBound(const Array & params) const;+| |ql/math/optimization/constraint.hpp|Real Constraint::update(Array & p, const Array & direction, Real beta) const;+| |ql/math/optimization/constraint.hpp|Constraint::Constraint(ext::shared_ptr<Impl> impl = ext::shared_ptr<Impl>());+|v|ql/math/optimization/constraint.hpp|NoConstraint::NoConstraint();+|v|ql/math/optimization/constraint.hpp|PositiveConstraint::PositiveConstraint();+| |ql/math/optimization/constraint.hpp|Impl::Impl(Real low, Real high);+|v|ql/math/optimization/constraint.hpp|BoundaryConstraint::BoundaryConstraint(Real low, Real high);+| |ql/math/optimization/constraint.hpp|Impl::Impl(Constraint c1, Constraint c2);+|v|ql/math/optimization/constraint.hpp|CompositeConstraint::CompositeConstraint(const Constraint & c1, const Constraint & c2);+| |ql/math/optimization/constraint.hpp|Impl::Impl(Array low, Array high);+| |ql/math/optimization/constraint.hpp|NonhomogeneousBoundaryConstraint::NonhomogeneousBoundaryConstraint(const Array & low, const Array & high);+|u|ql/math/optimization/costfunction.hpp|Real CostFunction::value(const Array & x) const;+| |ql/math/optimization/costfunction.hpp|Array CostFunction::values(const Array & x) const;+| |ql/math/optimization/costfunction.hpp|void CostFunction::gradient(Array & grad, const Array & x) const;+| |ql/math/optimization/costfunction.hpp|Real CostFunction::valueAndGradient(Array & grad, const Array & x) const;+| |ql/math/optimization/costfunction.hpp|void CostFunction::jacobian(Matrix & jac, const Array & x) const;+| |ql/math/optimization/costfunction.hpp|Array CostFunction::valuesAndJacobian(Matrix & jac, const Array & x) const;+| |ql/math/optimization/costfunction.hpp|Real CostFunction::finiteDifferenceEpsilon() const;+| |ql/math/optimization/costfunction.hpp|SimpleCostFunction::SimpleCostFunction<ValuesFn>(ValuesFn values);+| |ql/math/optimization/costfunction.hpp|Array ParametersTransformation::direct(const Array & x) const;+| |ql/math/optimization/costfunction.hpp|Array ParametersTransformation::inverse(const Array & x) const;+| |ql/math/optimization/differentialevolution.hpp|Candidate::Candidate(Size size = 0);+| |ql/math/optimization/differentialevolution.hpp|Configuration::Configuration();+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withBounds(bool b = true);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withCrossoverProbability(Real p);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withPopulationMembers(Size n);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withInitialPopulation(const std::vector<Array> & c);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withUpperBound(const Array & u);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withLowerBound(const Array & l);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withSeed(unsigned long s);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withAdaptiveCrossover(bool b = true);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withStepsizeWeight(Real w);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withCrossoverType(CrossoverType t);+| |ql/math/optimization/differentialevolution.hpp|Configuration & Configuration::withStrategy(Strategy s);+| |ql/math/optimization/differentialevolution.hpp|DifferentialEvolution::DifferentialEvolution(const Configuration & configuration = Configuration());+|x|ql/math/optimization/differentialevolution.hpp|const Configuration & DifferentialEvolution::configuration() const;+|v|ql/math/optimization/endcriteria.hpp|EndCriteria::EndCriteria(Size maxIterations, Size maxStationaryStateIterations, Real rootEpsilon, Real functionEpsilon, Real gradientNormEpsilon);+|x|ql/math/optimization/endcriteria.hpp|Size EndCriteria::maxIterations() const;+|x|ql/math/optimization/endcriteria.hpp|Size EndCriteria::maxStationaryStateIterations() const;+|x|ql/math/optimization/endcriteria.hpp|Real EndCriteria::rootEpsilon() const;+|x|ql/math/optimization/endcriteria.hpp|Real EndCriteria::functionEpsilon() const;+|x|ql/math/optimization/endcriteria.hpp|Real EndCriteria::gradientNormEpsilon() const;+|x|ql/math/optimization/endcriteria.hpp|bool EndCriteria::operator()(Size iteration, Size & statState, bool positiveOptimization, Real fold, Real normgold, Real fnew, Real normgnew, EndCriteria::Type & ecType) const;+|x|ql/math/optimization/endcriteria.hpp|bool EndCriteria::checkMaxIterations(Size iteration, EndCriteria::Type & ecType) const;+|x|ql/math/optimization/endcriteria.hpp|bool EndCriteria::checkStationaryPoint(Real xOld, Real xNew, Size & statStateIterations, EndCriteria::Type & ecType) const;+|x|ql/math/optimization/endcriteria.hpp|bool EndCriteria::checkStationaryFunctionValue(Real fxOld, Real fxNew, Size & statStateIterations, EndCriteria::Type & ecType) const;+|x|ql/math/optimization/endcriteria.hpp|bool EndCriteria::checkStationaryFunctionAccuracy(Real f, bool positiveOptimization, EndCriteria::Type & ecType) const;+|x|ql/math/optimization/endcriteria.hpp|bool EndCriteria::checkZeroGradientNorm(Real gNorm, EndCriteria::Type & ecType) const;+|x|ql/math/optimization/endcriteria.hpp|static bool EndCriteria::succeeded(EndCriteria::Type ecType);+|x|ql/math/optimization/endcriteria.hpp|std::ostream & operator<<(std::ostream & out, EndCriteria::Type ecType);+| |ql/math/optimization/goldstein.hpp|GoldsteinLineSearch::GoldsteinLineSearch(Real eps = 1e-8, Real alpha = 0.05, Real beta = 0.65, Real extrapolation = 1.5);+| |ql/math/optimization/lbfgsb.hpp|LBFGSB::LBFGSB(Size memory = 10, Real pgTol = 1e-8, Real fTol = 1e7 * QL_EPSILON);+| |ql/math/optimization/lbfgsb.hpp|LBFGSB::LBFGSB(Array lowerBound, Array upperBound, Size memory = 10, Real pgTol = 1e-8, Real fTol = 1e7 * QL_EPSILON);+| |ql/math/optimization/leastsquare.hpp|Size LeastSquareProblem::size();+| |ql/math/optimization/leastsquare.hpp|void LeastSquareProblem::targetAndValue(const Array & x, Array & target, Array & fct2fit);+| |ql/math/optimization/leastsquare.hpp|void LeastSquareProblem::targetValueAndGradient(const Array & x, Matrix & grad_fct2fit, Array & target, Array & fct2fit);+| |ql/math/optimization/leastsquare.hpp|LeastSquareFunction::LeastSquareFunction(LeastSquareProblem & lsp);+| |ql/math/optimization/leastsquare.hpp|NonLinearLeastSquare::NonLinearLeastSquare(Constraint & c, Real accuracy = 1e-4, Size maxiter = 100);+| |ql/math/optimization/leastsquare.hpp|NonLinearLeastSquare::NonLinearLeastSquare(Constraint & c, Real accuracy, Size maxiter, ext::shared_ptr<OptimizationMethod> om);+| |ql/math/optimization/leastsquare.hpp|Array & NonLinearLeastSquare::perform(LeastSquareProblem & lsProblem);+| |ql/math/optimization/leastsquare.hpp|void NonLinearLeastSquare::setInitialValue(const Array & initialValue);+| |ql/math/optimization/leastsquare.hpp|Array & NonLinearLeastSquare::results();+| |ql/math/optimization/leastsquare.hpp|Real NonLinearLeastSquare::residualNorm() const;+| |ql/math/optimization/leastsquare.hpp|Real NonLinearLeastSquare::lastValue() const;+| |ql/math/optimization/leastsquare.hpp|Integer NonLinearLeastSquare::exitFlag() const;+| |ql/math/optimization/leastsquare.hpp|Integer NonLinearLeastSquare::iterationsNumber() const;+|v|ql/math/optimization/levenbergmarquardt.hpp|LevenbergMarquardt::LevenbergMarquardt(Real epsfcn = 1.0e-8, Real xtol = 1.0e-8, Real gtol = 1.0e-8, bool useCostFunctionsJacobian = false);+| |ql/math/optimization/linesearch.hpp|LineSearch::LineSearch(Real = 0.0);+| |ql/math/optimization/linesearch.hpp|const Array & LineSearch::lastX();+| |ql/math/optimization/linesearch.hpp|Real LineSearch::lastFunctionValue() const;+| |ql/math/optimization/linesearch.hpp|const Array & LineSearch::lastGradient();+| |ql/math/optimization/linesearch.hpp|Real LineSearch::lastGradientNorm2() const;+| |ql/math/optimization/linesearch.hpp|bool LineSearch::succeed() const;+| |ql/math/optimization/linesearch.hpp|Real LineSearch::operator()(Problem & P, EndCriteria::Type & ecType, const EndCriteria &, Real t_ini);+| |ql/math/optimization/linesearch.hpp|Real LineSearch::update(Array & params, const Array & direction, Real beta, const Constraint & constraint);+| |ql/math/optimization/linesearch.hpp|const Array & LineSearch::searchDirection() const;+| |ql/math/optimization/linesearch.hpp|Array & LineSearch::searchDirection();+| |ql/math/optimization/linesearchbasedmethod.hpp|LineSearchBasedMethod::LineSearchBasedMethod(ext::shared_ptr<LineSearch> lSearch = ext::shared_ptr<LineSearch>());+| |ql/math/optimization/lmdif.hpp|void lmdif(int m, int n, Real * x, Real * fvec, Real ftol, Real xtol, Real gtol, int maxfev, Real epsfcn, Real * diag, int mode, Real factor, int nprint, int * info, int * nfev, Real * fjac, int ldfjac, int * ipvt, Real * qtf, Real * wa1, Real * wa2, Real * wa3, Real * wa4, const LmdifCostFunction & fcn, const LmdifCostFunction & jacFcn);+| |ql/math/optimization/lmdif.hpp|void qrsolv(int n, Real * r, int ldr, const int * ipvt, const Real * diag, const Real * qtb, Real * x, Real * sdiag, Real * wa);+| |ql/math/optimization/lmdif.hpp|void qrfac(int m, int n, Real * a, int, int pivot, int * ipvt, int, Real * rdiag, Real * acnorm, Real * wa);+|v|ql/math/optimization/method.hpp|EndCriteria::Type OptimizationMethod::minimize(Problem & P, const EndCriteria & endCriteria);+|v|ql/math/optimization/problem.hpp|Problem::Problem(CostFunction & costFunction, Constraint & constraint, Array initialValue = Array());+|x|ql/math/optimization/problem.hpp|void Problem::reset();+|x|ql/math/optimization/problem.hpp|Real Problem::value(const Array & x);+|x|ql/math/optimization/problem.hpp|Array Problem::values(const Array & x);+|x|ql/math/optimization/problem.hpp|void Problem::gradient(Array & grad_f, const Array & x);+|x|ql/math/optimization/problem.hpp|Real Problem::valueAndGradient(Array & grad_f, const Array & x);+|x|ql/math/optimization/problem.hpp|Constraint & Problem::constraint() const;+|x|ql/math/optimization/problem.hpp|CostFunction & Problem::costFunction() const;+|x|ql/math/optimization/problem.hpp|void Problem::setCurrentValue(Array currentValue);+|x|ql/math/optimization/problem.hpp|const Array & Problem::currentValue() const;+|x|ql/math/optimization/problem.hpp|void Problem::setFunctionValue(Real functionValue);+|x|ql/math/optimization/problem.hpp|Real Problem::functionValue() const;+|x|ql/math/optimization/problem.hpp|void Problem::setGradientNormValue(Real squaredNorm);+|x|ql/math/optimization/problem.hpp|Real Problem::gradientNormValue() const;+|x|ql/math/optimization/problem.hpp|Integer Problem::functionEvaluation() const;+|x|ql/math/optimization/problem.hpp|Integer Problem::gradientEvaluation() const;+| |ql/math/optimization/projectedconstraint.hpp|Impl::Impl(Constraint constraint, const Array & parameterValues, const std::vector<bool> & fixParameters);+| |ql/math/optimization/projectedconstraint.hpp|Impl::Impl(Constraint constraint, const Projection & projection);+| |ql/math/optimization/projectedconstraint.hpp|bool Impl::test(const Array & params) const;+| |ql/math/optimization/projectedconstraint.hpp|Array Impl::upperBound(const Array & params) const;+| |ql/math/optimization/projectedconstraint.hpp|Array Impl::lowerBound(const Array & params) const;+| |ql/math/optimization/projectedconstraint.hpp|ProjectedConstraint::ProjectedConstraint(const Constraint & constraint, const Array & parameterValues, const std::vector<bool> & fixParameters);+| |ql/math/optimization/projectedconstraint.hpp|ProjectedConstraint::ProjectedConstraint(const Constraint & constraint, const Projection & projection);+| |ql/math/optimization/projectedcostfunction.hpp|ProjectedCostFunction::ProjectedCostFunction(const CostFunction & costFunction, const Array & parameterValues, const std::vector<bool> & fixParameters);+| |ql/math/optimization/projectedcostfunction.hpp|ProjectedCostFunction::ProjectedCostFunction(const CostFunction & costFunction, const Projection & projection);+| |ql/math/optimization/projection.hpp|Projection::Projection(const Array & parameterValues, std::vector<bool> fixParameters = std::vector<bool>());+| |ql/math/optimization/projection.hpp|Array Projection::project(const Array & parameters) const;+| |ql/math/optimization/projection.hpp|Array Projection::include(const Array & projectedParameters) const;+|v|ql/math/optimization/simplex.hpp|Simplex::Simplex(Real lambda);+|x|ql/math/optimization/simplex.hpp|Real Simplex::lambda() const;+| |ql/math/optimization/simulatedannealing.hpp|SimulatedAnnealing::SimulatedAnnealing<RNG>(const Real lambda, const Real T0, const Real epsilon, const Size m, const RNG & rng = RNG());+| |ql/math/optimization/simulatedannealing.hpp|SimulatedAnnealing::SimulatedAnnealing<RNG>(const Real lambda, const Real T0, const Size K, const Real alpha, const RNG & rng = RNG());+| |ql/math/optimization/simulatedannealing.hpp|Real simplexSize();+| |ql/math/optimization/simulatedannealing.hpp|void amotsa(Problem & P, Real fac);+| |ql/math/optimization/simulatedannealing.hpp|EndCriteria::Type minimize(Problem & P, const EndCriteria & ec);+| |ql/math/optimization/spherecylinder.hpp|SphereCylinderOptimizer::SphereCylinderOptimizer(Real r, Real s, Real alpha, Real z1, Real z2, Real z3, Real zweight = 1.0);+| |ql/math/optimization/spherecylinder.hpp|bool SphereCylinderOptimizer::isIntersectionNonEmpty() const;+| |ql/math/optimization/spherecylinder.hpp|void SphereCylinderOptimizer::findClosest(Size maxIterations, Real tolerance, Real & y1, Real & y2, Real & y3) const;+| |ql/math/optimization/spherecylinder.hpp|bool SphereCylinderOptimizer::findByProjection(Real & y1, Real & y2, Real & y3) const;+| |ql/math/optimization/spherecylinder.hpp|std::vector<Real> sphereCylinderOptimizerClosest(Real r, Real s, Real alpha, Real z1, Real z2, Real z3, Natural maxIterations, Real tolerance, Real finalWeight = 1.0);+| |ql/math/optimization/steepestdescent.hpp|SteepestDescent::SteepestDescent(const ext::shared_ptr<LineSearch> & lineSearch = ext::shared_ptr<LineSearch>());+| |ql/math/pascaltriangle.hpp|static const std::vector<BigNatural> & PascalTriangle::get(Size order);+| |ql/math/polynomialmathfunction.hpp|PolynomialFunction::PolynomialFunction(const std::vector<Real> & coeff);+| |ql/math/polynomialmathfunction.hpp|Real PolynomialFunction::operator()(Time t) const;+| |ql/math/polynomialmathfunction.hpp|Real PolynomialFunction::derivative(Time t) const;+| |ql/math/polynomialmathfunction.hpp|Real PolynomialFunction::primitive(Time t) const;+| |ql/math/polynomialmathfunction.hpp|Real PolynomialFunction::definiteIntegral(Time t1, Time t2) const;+| |ql/math/polynomialmathfunction.hpp|Size PolynomialFunction::order() const;+| |ql/math/polynomialmathfunction.hpp|const std::vector<Real> & PolynomialFunction::coefficients();+| |ql/math/polynomialmathfunction.hpp|const std::vector<Real> & PolynomialFunction::derivativeCoefficients();+| |ql/math/polynomialmathfunction.hpp|const std::vector<Real> & PolynomialFunction::primitiveCoefficients();+| |ql/math/polynomialmathfunction.hpp|std::vector<Real> PolynomialFunction::definiteIntegralCoefficients(Time t, Time t2) const;+| |ql/math/polynomialmathfunction.hpp|std::vector<Real> PolynomialFunction::definiteDerivativeCoefficients(Time t, Time t2) const;+| |ql/math/primenumbers.hpp|static BigNatural PrimeNumbers::get(Size absoluteIndex);+| |ql/math/quadratic.hpp|quadratic::quadratic(Real a, Real b, Real c);+| |ql/math/quadratic.hpp|Real quadratic::turningPoint() const;+| |ql/math/quadratic.hpp|Real quadratic::valueAtTurningPoint() const;+| |ql/math/quadratic.hpp|Real quadratic::operator()(Real x) const;+| |ql/math/quadratic.hpp|Real quadratic::discriminant() const;+| |ql/math/quadratic.hpp|bool quadratic::roots(Real & x, Real & y) const;+| |ql/math/randomnumbers/boxmullergaussianrng.hpp|BoxMullerGaussianRng::BoxMullerGaussianRng<RNG>(const RNG & uniformGenerator);+| |ql/math/randomnumbers/boxmullergaussianrng.hpp|sample_type BoxMullerGaussianRng::next() const;+| |ql/math/randomnumbers/boxmullergaussianrng.hpp|BoxMullerGaussianRng<RNG>(const RNG & uniformGenerator);+| |ql/math/randomnumbers/boxmullergaussianrng.hpp|typename BoxMullerGaussianRng<RNG>::sample_type next() const;+| |ql/math/randomnumbers/burley2020sobolrsg.hpp|Burley2020SobolRsg::Burley2020SobolRsg(Size dimensionality, unsigned long seed = 42, SobolRsg::DirectionIntegers directionIntegers = SobolRsg::Jaeckel, unsigned long scrambleSeed = 43);+| |ql/math/randomnumbers/burley2020sobolrsg.hpp|const std::vector<std::uint32_t> & Burley2020SobolRsg::skipTo(std::uint32_t n) const;+| |ql/math/randomnumbers/burley2020sobolrsg.hpp|const std::vector<std::uint32_t> & Burley2020SobolRsg::nextInt32Sequence() const;+| |ql/math/randomnumbers/burley2020sobolrsg.hpp|const SobolRsg::sample_type & Burley2020SobolRsg::nextSequence() const;+| |ql/math/randomnumbers/burley2020sobolrsg.hpp|const sample_type & Burley2020SobolRsg::lastSequence() const;+|x|ql/math/randomnumbers/burley2020sobolrsg.hpp|Size Burley2020SobolRsg::dimension() const;+| |ql/math/randomnumbers/centrallimitgaussianrng.hpp|CLGaussianRng::CLGaussianRng<RNG>(const RNG & uniformGenerator);+| |ql/math/randomnumbers/centrallimitgaussianrng.hpp|sample_type CLGaussianRng::next() const;+| |ql/math/randomnumbers/centrallimitgaussianrng.hpp|CLGaussianRng<RNG>(const RNG & uniformGenerator);+| |ql/math/randomnumbers/centrallimitgaussianrng.hpp|typename CLGaussianRng<RNG>::sample_type next() const;+| |ql/math/randomnumbers/faurersg.hpp|FaureRsg::FaureRsg(Size dimensionality);+| |ql/math/randomnumbers/faurersg.hpp|const std::vector<long> & FaureRsg::nextIntSequence() const;+| |ql/math/randomnumbers/faurersg.hpp|const std::vector<long> & FaureRsg::lastIntSequence() const;+| |ql/math/randomnumbers/faurersg.hpp|const sample_type & FaureRsg::nextSequence() const;+| |ql/math/randomnumbers/faurersg.hpp|const sample_type & FaureRsg::lastSequence() const;+|x|ql/math/randomnumbers/faurersg.hpp|Size FaureRsg::dimension() const;+| |ql/math/randomnumbers/haltonrsg.hpp|HaltonRsg::HaltonRsg(Size dimensionality, unsigned long seed = 0, bool randomStart = true, bool randomShift = false);+| |ql/math/randomnumbers/haltonrsg.hpp|const sample_type & HaltonRsg::nextSequence() const;+| |ql/math/randomnumbers/haltonrsg.hpp|const sample_type & HaltonRsg::lastSequence() const;+|x|ql/math/randomnumbers/haltonrsg.hpp|Size HaltonRsg::dimension() const;+| |ql/math/randomnumbers/inversecumulativerng.hpp|InverseCumulativeRng::InverseCumulativeRng<RNG, IC>(const RNG & uniformGenerator);+| |ql/math/randomnumbers/inversecumulativerng.hpp|sample_type InverseCumulativeRng::next() const;+| |ql/math/randomnumbers/inversecumulativerng.hpp|InverseCumulativeRng<RNG, IC>(const RNG & ug);+| |ql/math/randomnumbers/inversecumulativerng.hpp|typename InverseCumulativeRng<RNG, IC>::sample_type next() const;+|u|ql/math/randomnumbers/inversecumulativersg.hpp|InverseCumulativeRsg::InverseCumulativeRsg<USG, IC>(USG uniformSequenceGenerator);+|x|ql/math/randomnumbers/inversecumulativersg.hpp|InverseCumulativeRsg::InverseCumulativeRsg<USG, IC>(USG uniformSequenceGenerator, const IC & inverseCumulative);+|v|ql/math/randomnumbers/inversecumulativersg.hpp|const sample_type & InverseCumulativeRsg::nextSequence() const;+|v|ql/math/randomnumbers/inversecumulativersg.hpp|const sample_type & InverseCumulativeRsg::lastSequence() const;+|v|ql/math/randomnumbers/inversecumulativersg.hpp|Size InverseCumulativeRsg::dimension() const;+| |ql/math/randomnumbers/inversecumulativersg.hpp|InverseCumulativeRsg<USG, IC>(USG usg);+| |ql/math/randomnumbers/inversecumulativersg.hpp|InverseCumulativeRsg<USG, IC>(USG usg, const IC & inverseCum);+| |ql/math/randomnumbers/inversecumulativersg.hpp|const typename InverseCumulativeRsg<USG, IC>::sample_type & nextSequence() const;+| |ql/math/randomnumbers/knuthuniformrng.hpp|KnuthUniformRng::KnuthUniformRng(long seed = 0);+| |ql/math/randomnumbers/knuthuniformrng.hpp|sample_type KnuthUniformRng::next() const;+| |ql/math/randomnumbers/knuthuniformrng.hpp|KnuthUniformRng::sample_type next() const;+| |ql/math/randomnumbers/knuthuniformrng.hpp|double mod_sum(double x, double y) const;+| |ql/math/randomnumbers/knuthuniformrng.hpp|bool is_odd(int s) const;+| |ql/math/randomnumbers/latticersg.hpp|LatticeRsg::LatticeRsg(Size dimensionality, std::vector<Real> z, Size N);+| |ql/math/randomnumbers/latticersg.hpp|void LatticeRsg::skipTo(unsigned long n);+| |ql/math/randomnumbers/latticersg.hpp|const LatticeRsg::sample_type & LatticeRsg::nextSequence();+|x|ql/math/randomnumbers/latticersg.hpp|Size LatticeRsg::dimension() const;+| |ql/math/randomnumbers/latticersg.hpp|const sample_type & LatticeRsg::lastSequence() const;+| |ql/math/randomnumbers/latticerules.hpp|static void LatticeRule::getRule(type name, std::vector<Real> & Z, Integer N);+| |ql/math/randomnumbers/lecuyeruniformrng.hpp|LecuyerUniformRng::LecuyerUniformRng(long seed = 0);+| |ql/math/randomnumbers/lecuyeruniformrng.hpp|sample_type LecuyerUniformRng::next() const;+| |ql/math/randomnumbers/mt19937uniformrng.hpp|MersenneTwisterUniformRng::MersenneTwisterUniformRng(unsigned long seed = 0);+| |ql/math/randomnumbers/mt19937uniformrng.hpp|MersenneTwisterUniformRng::MersenneTwisterUniformRng(const std::vector<unsigned long> & seeds);+| |ql/math/randomnumbers/mt19937uniformrng.hpp|sample_type MersenneTwisterUniformRng::next() const;+| |ql/math/randomnumbers/mt19937uniformrng.hpp|Real MersenneTwisterUniformRng::nextReal() const;+| |ql/math/randomnumbers/mt19937uniformrng.hpp|unsigned long MersenneTwisterUniformRng::nextInt32() const;+| |ql/math/randomnumbers/randomizedlds.hpp|RandomizedLDS::RandomizedLDS<LDS, PRS>(const LDS & ldsg, PRS prsg);+| |ql/math/randomnumbers/randomizedlds.hpp|RandomizedLDS::RandomizedLDS<LDS, PRS>(const LDS & ldsg);+| |ql/math/randomnumbers/randomizedlds.hpp|RandomizedLDS::RandomizedLDS<LDS, PRS>(Size dimensionality, BigNatural ldsSeed = 0, BigNatural prsSeed = 0);+| |ql/math/randomnumbers/randomizedlds.hpp|const sample_type & RandomizedLDS::nextSequence() const;+| |ql/math/randomnumbers/randomizedlds.hpp|const sample_type & RandomizedLDS::lastSequence() const;+| |ql/math/randomnumbers/randomizedlds.hpp|void RandomizedLDS::nextRandomizer();+| |ql/math/randomnumbers/randomizedlds.hpp|Size RandomizedLDS::dimension() const;+| |ql/math/randomnumbers/randomizedlds.hpp|RandomizedLDS<LDS, PRS>(const LDS & ldsg, PRS prsg);+| |ql/math/randomnumbers/randomizedlds.hpp|RandomizedLDS<LDS, PRS>(const LDS & ldsg);+| |ql/math/randomnumbers/randomizedlds.hpp|RandomizedLDS<LDS, PRS>(Size dimensionality, BigNatural ldsSeed, BigNatural prsSeed);+| |ql/math/randomnumbers/randomizedlds.hpp|const typename RandomizedLDS<LDS, PRS>::sample_type & nextSequence() const;+|v|ql/math/randomnumbers/randomsequencegenerator.hpp|RandomSequenceGenerator::RandomSequenceGenerator<RNG>(Size dimensionality, const RNG & rng);+|x|ql/math/randomnumbers/randomsequencegenerator.hpp|RandomSequenceGenerator::RandomSequenceGenerator<RNG>(Size dimensionality, BigNatural seed = 0);+|v|ql/math/randomnumbers/randomsequencegenerator.hpp|const sample_type & RandomSequenceGenerator::nextSequence() const;+|x|ql/math/randomnumbers/randomsequencegenerator.hpp|std::vector<BigNatural> RandomSequenceGenerator::nextInt32Sequence() const;+|v|ql/math/randomnumbers/randomsequencegenerator.hpp|const sample_type & RandomSequenceGenerator::lastSequence() const;+|x|ql/math/randomnumbers/randomsequencegenerator.hpp|Size RandomSequenceGenerator::dimension() const;+| |ql/math/randomnumbers/ranluxuniformrng.hpp|Ranlux64UniformRng::Ranlux64UniformRng<P, R>(std::uint_fast64_t seed = 19780503U);+| |ql/math/randomnumbers/ranluxuniformrng.hpp|sample_type Ranlux64UniformRng::next() const;+| |ql/math/randomnumbers/rngtraits.hpp|static rsg_type GenericPseudoRandom::make_sequence_generator(Size dimension, BigNatural seed);+| |ql/math/randomnumbers/rngtraits.hpp|static rsg_type GenericLowDiscrepancy::make_sequence_generator(Size dimension, BigNatural seed);+| |ql/math/randomnumbers/seedgenerator.hpp|unsigned long SeedGenerator::get();+| |ql/math/randomnumbers/sobolbrownianbridgersg.hpp|SobolBrownianBridgeRsg::SobolBrownianBridgeRsg(Size factors, Size steps, SobolBrownianGenerator::Ordering ordering = SobolBrownianGenerator::Diagonal, unsigned long seed = 0, SobolRsg::DirectionIntegers directionIntegers = SobolRsg::JoeKuoD7);+| |ql/math/randomnumbers/sobolbrownianbridgersg.hpp|const sample_type & SobolBrownianBridgeRsg::nextSequence() const;+| |ql/math/randomnumbers/sobolbrownianbridgersg.hpp|const sample_type & SobolBrownianBridgeRsg::lastSequence() const;+| |ql/math/randomnumbers/sobolbrownianbridgersg.hpp|Size SobolBrownianBridgeRsg::dimension() const;+| |ql/math/randomnumbers/sobolbrownianbridgersg.hpp|Burley2020SobolBrownianBridgeRsg::Burley2020SobolBrownianBridgeRsg(Size factors, Size steps, SobolBrownianGenerator::Ordering ordering = SobolBrownianGenerator::Diagonal, unsigned long seed = 42, SobolRsg::DirectionIntegers directionIntegers = SobolRsg::JoeKuoD7, unsigned long scrambleSeed = 43);+| |ql/math/randomnumbers/sobolbrownianbridgersg.hpp|const sample_type & Burley2020SobolBrownianBridgeRsg::nextSequence() const;+| |ql/math/randomnumbers/sobolbrownianbridgersg.hpp|const sample_type & Burley2020SobolBrownianBridgeRsg::lastSequence() const;+| |ql/math/randomnumbers/sobolbrownianbridgersg.hpp|Size Burley2020SobolBrownianBridgeRsg::dimension() const;+|u|ql/math/randomnumbers/sobolrsg.hpp|SobolRsg::SobolRsg(Size dimensionality, unsigned long seed = 0, DirectionIntegers directionIntegers = Jaeckel, bool useGrayCode = true);+|x|ql/math/randomnumbers/sobolrsg.hpp|const std::vector<std::uint32_t> & SobolRsg::skipTo(std::uint32_t n) const;+|x|ql/math/randomnumbers/sobolrsg.hpp|const std::vector<std::uint32_t> & SobolRsg::nextInt32Sequence() const;+|v|ql/math/randomnumbers/sobolrsg.hpp|const SobolRsg::sample_type & SobolRsg::nextSequence() const;+|v|ql/math/randomnumbers/sobolrsg.hpp|const sample_type & SobolRsg::lastSequence() const;+|v|ql/math/randomnumbers/sobolrsg.hpp|Size SobolRsg::dimension() const;+| |ql/math/randomnumbers/stochasticcollocationinvcdf.hpp|StochasticCollocationInvCDF::StochasticCollocationInvCDF(const std::function<Real (Real)> & invCDF, Size lagrangeOrder, Real pMax = Null<Real>(), Real pMin = Null<Real>());+| |ql/math/randomnumbers/stochasticcollocationinvcdf.hpp|Real StochasticCollocationInvCDF::value(Real x) const;+| |ql/math/randomnumbers/stochasticcollocationinvcdf.hpp|Real StochasticCollocationInvCDF::operator()(Real u) const;+| |ql/math/randomnumbers/xoshiro256starstaruniformrng.hpp|Xoshiro256StarStarUniformRng::Xoshiro256StarStarUniformRng(std::uint64_t seed = 0);+| |ql/math/randomnumbers/xoshiro256starstaruniformrng.hpp|Xoshiro256StarStarUniformRng::Xoshiro256StarStarUniformRng(std::uint64_t s0, std::uint64_t s1, std::uint64_t s2, std::uint64_t s3);+| |ql/math/randomnumbers/xoshiro256starstaruniformrng.hpp|sample_type Xoshiro256StarStarUniformRng::next() const;+| |ql/math/randomnumbers/xoshiro256starstaruniformrng.hpp|Real Xoshiro256StarStarUniformRng::nextReal() const;+| |ql/math/randomnumbers/xoshiro256starstaruniformrng.hpp|std::uint64_t Xoshiro256StarStarUniformRng::nextInt64() const;+| |ql/math/randomnumbers/zigguratgaussianrng.hpp|sample_type ZigguratGaussianRng::next() const;+| |ql/math/randomnumbers/zigguratgaussianrng.hpp|Real ZigguratGaussianRng::nextReal() const;+| |ql/math/randomnumbers/zigguratgaussianrng.hpp|Real zeroCase(Real u) const;+| |ql/math/randomnumbers/zigguratgaussianrng.hpp|Real pdf(Real x) const;+| |ql/math/randomnumbers/zigguratgaussianrng.hpp|Real normR() const;+| |ql/math/randomnumbers/zigguratgaussianrng.hpp|Real normX(int i) const;+| |ql/math/randomnumbers/zigguratgaussianrng.hpp|Real normF(int i) const;+| |ql/math/richardsonextrapolation.hpp|RichardsonExtrapolation::RichardsonExtrapolation(const std::function<Real (Real)> & f, Real delta_h, Real n = Null<Real>());+| |ql/math/richardsonextrapolation.hpp|Real RichardsonExtrapolation::operator()(Real t = 2.0) const;+| |ql/math/richardsonextrapolation.hpp|Real RichardsonExtrapolation::operator()(Real t, Real s) const;+|v|ql/math/rounding.hpp|Rounding::Rounding();+|v|ql/math/rounding.hpp|Rounding::Rounding(Integer precision, Type type = Closest, Integer digit = 5);+|x|ql/math/rounding.hpp|Decimal Rounding::operator()(Decimal value) const;+|x|ql/math/rounding.hpp|Integer Rounding::precision() const;+|x|ql/math/rounding.hpp|Type Rounding::type() const;+|x|ql/math/rounding.hpp|Integer Rounding::roundingDigit() const;+| |ql/math/rounding.hpp|UpRounding::UpRounding(Integer precision, Integer digit = 5);+| |ql/math/rounding.hpp|DownRounding::DownRounding(Integer precision, Integer digit = 5);+| |ql/math/rounding.hpp|ClosestRounding::ClosestRounding(Integer precision, Integer digit = 5);+| |ql/math/rounding.hpp|CeilingTruncation::CeilingTruncation(Integer precision, Integer digit = 5);+| |ql/math/rounding.hpp|FloorTruncation::FloorTruncation(Integer precision, Integer digit = 5);+| |ql/math/solver1d.hpp|Solver1D::Solver1D<Impl>();+| |ql/math/solver1d.hpp|void Solver1D::setMaxEvaluations(Size evaluations);+| |ql/math/solver1d.hpp|void Solver1D::setLowerBound(Real lowerBound);+| |ql/math/solver1d.hpp|void Solver1D::setUpperBound(Real upperBound);+| |ql/math/solver1d.hpp|Real enforceBounds_(Real x) const;+| |ql/math/statistics/convergencestatistics.hpp|Size DoublingConvergenceSteps::initialSamples() const;+| |ql/math/statistics/convergencestatistics.hpp|Size DoublingConvergenceSteps::nextSamples(Size current);+| |ql/math/statistics/convergencestatistics.hpp|ConvergenceStatistics::ConvergenceStatistics<T, U>(const T & stats, const U & rule = U());+| |ql/math/statistics/convergencestatistics.hpp|ConvergenceStatistics::ConvergenceStatistics<T, U>(const U & rule = U());+| |ql/math/statistics/convergencestatistics.hpp|void ConvergenceStatistics::add(const value_type & value, Real weight = 1.0);+| |ql/math/statistics/convergencestatistics.hpp|void ConvergenceStatistics::reset();+| |ql/math/statistics/convergencestatistics.hpp|const std::vector<std::pair<Size, value_type>> & ConvergenceStatistics::convergenceTable() const;+| |ql/math/statistics/convergencestatistics.hpp|ConvergenceStatistics<T, U>(const T & stats, const U & rule);+| |ql/math/statistics/convergencestatistics.hpp|ConvergenceStatistics<T, U>(const U & rule);+| |ql/math/statistics/convergencestatistics.hpp|void add(const typename ConvergenceStatistics<T, U>::value_type & value, Real weight);+| |ql/math/statistics/convergencestatistics.hpp|const typename ConvergenceStatistics<T, U>::table_type & convergenceTable() const;+| |ql/math/statistics/discrepancystatistics.hpp|DiscrepancyStatistics::DiscrepancyStatistics(Size dimension);+| |ql/math/statistics/discrepancystatistics.hpp|Real DiscrepancyStatistics::discrepancy() const;+| |ql/math/statistics/discrepancystatistics.hpp|void DiscrepancyStatistics::reset(Size dimension = 0);+| |ql/math/statistics/discrepancystatistics.hpp|void reset(Size dimension);+| |ql/math/statistics/gaussianstatistics.hpp|GenericGaussianStatistics::GenericGaussianStatistics<Stat>();+| |ql/math/statistics/gaussianstatistics.hpp|GenericGaussianStatistics::GenericGaussianStatistics<Stat>(const Stat & s);+| |ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianDownsideVariance() const;+| |ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianDownsideDeviation() const;+| |ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianRegret(Real target) const;+|v|ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianPercentile(Real percentile) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianTopPercentile(Real percentile) const;+|v|ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianPotentialUpside(Real percentile) const;+|v|ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianValueAtRisk(Real percentile) const;+|v|ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianExpectedShortfall(Real percentile) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianShortfall(Real target) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real GenericGaussianStatistics::gaussianAverageShortfall(Real target) const;+| |ql/math/statistics/gaussianstatistics.hpp|StatsHolder::StatsHolder(Real mean, Real standardDeviation);+|x|ql/math/statistics/gaussianstatistics.hpp|Real StatsHolder::mean() const;+|x|ql/math/statistics/gaussianstatistics.hpp|Real StatsHolder::standardDeviation() const;+| |ql/math/statistics/generalstatistics.hpp|GeneralStatistics::GeneralStatistics();+| |ql/math/statistics/generalstatistics.hpp|Size GeneralStatistics::samples() const;+| |ql/math/statistics/generalstatistics.hpp|const std::vector<std::pair<Real, Real>> & GeneralStatistics::data() const;+| |ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::weightSum() const;+|v|ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::mean() const;+|v|ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::variance() const;+|v|ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::standardDeviation() const;+| |ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::errorEstimate() const;+|v|ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::skewness() const;+|v|ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::kurtosis() const;+|v|ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::min() const;+|v|ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::max() const;+|v|ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::percentile(Real y) const;+| |ql/math/statistics/generalstatistics.hpp|Real GeneralStatistics::topPercentile(Real y) const;+| |ql/math/statistics/generalstatistics.hpp|void GeneralStatistics::add(Real value, Real weight = 1.0);+| |ql/math/statistics/generalstatistics.hpp|void GeneralStatistics::reset();+| |ql/math/statistics/generalstatistics.hpp|void GeneralStatistics::reserve(Size n) const;+| |ql/math/statistics/generalstatistics.hpp|void GeneralStatistics::sort() const;+| |ql/math/statistics/generalstatistics.hpp|void add(Real value, Real weight);+| |ql/math/statistics/histogram.hpp|Histogram::Histogram();+| |ql/math/statistics/histogram.hpp|Size Histogram::bins() const;+| |ql/math/statistics/histogram.hpp|const std::vector<Real> & Histogram::breaks() const;+| |ql/math/statistics/histogram.hpp|Algorithm Histogram::algorithm() const;+| |ql/math/statistics/histogram.hpp|bool Histogram::empty() const;+| |ql/math/statistics/histogram.hpp|Size Histogram::counts(Size i) const;+| |ql/math/statistics/histogram.hpp|Real Histogram::frequency(Size i) const;+| |ql/math/statistics/incrementalstatistics.hpp|IncrementalStatistics::IncrementalStatistics();+| |ql/math/statistics/incrementalstatistics.hpp|Size IncrementalStatistics::samples() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::weightSum() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::mean() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::variance() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::standardDeviation() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::errorEstimate() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::skewness() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::kurtosis() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::min() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::max() const;+| |ql/math/statistics/incrementalstatistics.hpp|Size IncrementalStatistics::downsideSamples() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::downsideWeightSum() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::downsideVariance() const;+| |ql/math/statistics/incrementalstatistics.hpp|Real IncrementalStatistics::downsideDeviation() const;+| |ql/math/statistics/incrementalstatistics.hpp|void IncrementalStatistics::add(Real value, Real weight = 1.0);+| |ql/math/statistics/incrementalstatistics.hpp|void IncrementalStatistics::reset();+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::semiVariance() const;+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::semiDeviation() const;+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::downsideVariance() const;+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::downsideDeviation() const;+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::regret(Real target) const;+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::potentialUpside(Real percentile) const;+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::valueAtRisk(Real percentile) const;+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::expectedShortfall(Real percentile) const;+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::shortfall(Real target) const;+|v|ql/math/statistics/riskstatistics.hpp|Real GenericRiskStatistics::averageShortfall(Real target) const;+|v|ql/math/statistics/riskstatistics.hpp|Real potentialUpside(Real centile) const;+|v|ql/math/statistics/riskstatistics.hpp|Real valueAtRisk(Real centile) const;+|v|ql/math/statistics/riskstatistics.hpp|Real expectedShortfall(Real centile) const;+|u|ql/math/statistics/sequencestatistics.hpp|GenericSequenceStatistics::GenericSequenceStatistics<StatisticsType>(Size dimension = 0);+|x|ql/math/statistics/sequencestatistics.hpp|Size GenericSequenceStatistics::size() const;+|v|ql/math/statistics/sequencestatistics.hpp|Matrix GenericSequenceStatistics::covariance() const;+|v|ql/math/statistics/sequencestatistics.hpp|Matrix GenericSequenceStatistics::correlation() const;+|x|ql/math/statistics/sequencestatistics.hpp|Size GenericSequenceStatistics::samples() const;+|x|ql/math/statistics/sequencestatistics.hpp|Real GenericSequenceStatistics::weightSum() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::mean() const;+|x|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::variance() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::standardDeviation() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::downsideVariance() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::downsideDeviation() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::semiVariance() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::semiDeviation() const;+|x|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::errorEstimate() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::skewness() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::kurtosis() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::min() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::max() const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::gaussianPercentile(Real y) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::percentile(Real y) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::gaussianPotentialUpside(Real percentile) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::potentialUpside(Real percentile) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::gaussianValueAtRisk(Real percentile) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::valueAtRisk(Real percentile) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::gaussianExpectedShortfall(Real percentile) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::expectedShortfall(Real percentile) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::regret(Real target) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::gaussianShortfall(Real target) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::shortfall(Real target) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::gaussianAverageShortfall(Real target) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> GenericSequenceStatistics::averageShortfall(Real target) const;+|x|ql/math/statistics/sequencestatistics.hpp|void GenericSequenceStatistics::reset(Size dimension = 0);+|u|ql/math/statistics/sequencestatistics.hpp|GenericSequenceStatistics<StatisticsType>(Size dimension);+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> gaussianPercentile(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile)) const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> gaussianPotentialUpside(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside)) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> gaussianValueAtRisk(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk)) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> gaussianExpectedShortfall(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall)) const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> gaussianShortfall(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianShortfall)) const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> gaussianAverageShortfall(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianAverageShortfall)) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> percentile(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianAverageShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(percentile)) const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> potentialUpside(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianAverageShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(percentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(potentialUpside)) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> valueAtRisk(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianAverageShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(percentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(potentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(valueAtRisk)) const;+|v|ql/math/statistics/sequencestatistics.hpp|std::vector<Real> expectedShortfall(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianAverageShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(percentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(potentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(valueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(expectedShortfall)) const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> regret(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianAverageShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(percentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(potentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(valueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(expectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(regret)) const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> shortfall(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianAverageShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(percentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(potentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(valueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(expectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(regret) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(shortfall)) const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> averageShortfall(Real x = 0; i<dimension_; i ++) results_ [ i ] = stats_ [ i ].METHOD(x); return results_; } DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPercentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianPotentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianValueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianExpectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(gaussianAverageShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(percentile) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(potentialUpside) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(valueAtRisk) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(expectedShortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(regret) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(shortfall) DEFINE_SEQUENCE_STAT_CONST_METHOD_DOUBLE(averageShortfall)) const;+| |ql/math/statistics/sequencestatistics.hpp|void reset(Size dimension);+| |ql/methods/finitedifferences/boundarycondition.hpp|void BoundaryCondition::applyBeforeApplying(operator_type &) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void BoundaryCondition::applyAfterApplying(array_type &) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void BoundaryCondition::applyBeforeSolving(operator_type &, array_type & rhs) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void BoundaryCondition::applyAfterSolving(array_type &) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void BoundaryCondition::setTime(Time t);+| |ql/methods/finitedifferences/boundarycondition.hpp|NeumannBC::NeumannBC(Real value, Side side);+| |ql/methods/finitedifferences/boundarycondition.hpp|void NeumannBC::applyBeforeApplying(TridiagonalOperator &) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void NeumannBC::applyAfterApplying(Array &) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void NeumannBC::applyBeforeSolving(TridiagonalOperator &, Array & rhs) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void NeumannBC::applyAfterSolving(Array &) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void NeumannBC::setTime(Time);+| |ql/methods/finitedifferences/boundarycondition.hpp|DirichletBC::DirichletBC(Real value, Side side);+| |ql/methods/finitedifferences/boundarycondition.hpp|void DirichletBC::applyBeforeApplying(TridiagonalOperator &) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void DirichletBC::applyAfterApplying(Array &) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void DirichletBC::applyBeforeSolving(TridiagonalOperator &, Array & rhs) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void DirichletBC::applyAfterSolving(Array &) const;+| |ql/methods/finitedifferences/boundarycondition.hpp|void DirichletBC::setTime(Time);+| |ql/methods/finitedifferences/cranknicolson.hpp|CrankNicolson::CrankNicolson<Operator>(const operator_type & L, const bc_set & bcs);+| |ql/methods/finitedifferences/dminus.hpp|DMinus::DMinus(Size gridPoints, Real h);+| |ql/methods/finitedifferences/dplus.hpp|DPlus::DPlus(Size gridPoints, Real h);+| |ql/methods/finitedifferences/dplusdminus.hpp|DPlusDMinus::DPlusDMinus(Size gridPoints, Real h);+| |ql/methods/finitedifferences/dzero.hpp|DZero::DZero(Size gridPoints, Real h);+| |ql/methods/finitedifferences/expliciteuler.hpp|ExplicitEuler::ExplicitEuler<Operator>(const operator_type & L, const std::vector<ext::shared_ptr<bc_type>> & bcs);+| |ql/methods/finitedifferences/finitedifferencemodel.hpp|FiniteDifferenceModel::FiniteDifferenceModel<Evolver>(const operator_type & L, const bc_set & bcs, std::vector<Time> stoppingTimes = std::vector<Time>());+| |ql/methods/finitedifferences/finitedifferencemodel.hpp|FiniteDifferenceModel::FiniteDifferenceModel<Evolver>(Evolver evolver, std::vector<Time> stoppingTimes = std::vector<Time>());+| |ql/methods/finitedifferences/finitedifferencemodel.hpp|const Evolver & FiniteDifferenceModel::evolver() const;+| |ql/methods/finitedifferences/finitedifferencemodel.hpp|void FiniteDifferenceModel::rollback(array_type & a, Time from, Time to, Size steps);+| |ql/methods/finitedifferences/finitedifferencemodel.hpp|void FiniteDifferenceModel::rollback(array_type & a, Time from, Time to, Size steps, const condition_type & condition);+| |ql/methods/finitedifferences/impliciteuler.hpp|ImplicitEuler::ImplicitEuler<Operator>(const operator_type & L, const bc_set & bcs);+|v|ql/methods/finitedifferences/meshers/concentrating1dmesher.hpp|Concentrating1dMesher::Concentrating1dMesher(Real start, Real end, Size size, const std::pair<Real, Real> & cPoints = (std::pair<Real, Real>(Null<Real>(), Null<Real>())), bool requireCPoint = false);+|v|ql/methods/finitedifferences/meshers/concentrating1dmesher.hpp|Concentrating1dMesher::Concentrating1dMesher(Real start, Real end, Size size, const std::vector<std::tuple<Real, Real, bool>> & cPoints, Real tol = 1e-8);+|v|ql/methods/finitedifferences/meshers/exponentialjump1dmesher.hpp|ExponentialJump1dMesher::ExponentialJump1dMesher(Size steps, Real beta, Real jumpIntensity, Real eta, Real eps = 1e-3);+| |ql/methods/finitedifferences/meshers/exponentialjump1dmesher.hpp|Real ExponentialJump1dMesher::jumpSizeDensity(Real x) const;+| |ql/methods/finitedifferences/meshers/exponentialjump1dmesher.hpp|Real ExponentialJump1dMesher::jumpSizeDensity(Real x, Time t) const;+| |ql/methods/finitedifferences/meshers/exponentialjump1dmesher.hpp|Real ExponentialJump1dMesher::jumpSizeDistribution(Real x) const;+| |ql/methods/finitedifferences/meshers/exponentialjump1dmesher.hpp|Real ExponentialJump1dMesher::jumpSizeDistribution(Real x, Time t) const;+| |ql/methods/finitedifferences/meshers/fdm1dmesher.hpp|Fdm1dMesher::Fdm1dMesher(Size size);+| |ql/methods/finitedifferences/meshers/fdm1dmesher.hpp|Size Fdm1dMesher::size() const;+| |ql/methods/finitedifferences/meshers/fdm1dmesher.hpp|Real Fdm1dMesher::dplus(Size index) const;+| |ql/methods/finitedifferences/meshers/fdm1dmesher.hpp|Real Fdm1dMesher::dminus(Size index) const;+| |ql/methods/finitedifferences/meshers/fdm1dmesher.hpp|Real Fdm1dMesher::location(Size index) const;+| |ql/methods/finitedifferences/meshers/fdm1dmesher.hpp|const std::vector<Real> & Fdm1dMesher::locations() const;+|v|ql/methods/finitedifferences/meshers/fdmblackscholesmesher.hpp|FdmBlackScholesMesher::FdmBlackScholesMesher(Size size, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Time maturity, Real strike, Real xMinConstraint = Null<Real>(), Real xMaxConstraint = Null<Real>(), Real eps = 0.0001, Real scaleFactor = 1.5, const std::pair<Real, Real> & cPoint = { Null<Real>(), Null<Real>() }, const DividendSchedule & dividendSchedule = { }, const ext::shared_ptr<FdmQuantoHelper> & fdmQuantoHelper = { }, Real spotAdjustment = 0.0);+|x|ql/methods/finitedifferences/meshers/fdmblackscholesmesher.hpp|static ext::shared_ptr<GeneralizedBlackScholesProcess> FdmBlackScholesMesher::processHelper(const Handle<Quote> & s0, const Handle<YieldTermStructure> & rTS, const Handle<YieldTermStructure> & qTS, Volatility vol);+| |ql/methods/finitedifferences/meshers/fdmblackscholesmultistrikemesher.hpp|FdmBlackScholesMultiStrikeMesher::FdmBlackScholesMultiStrikeMesher(Size size, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Time maturity, const std::vector<Real> & strikes, Real eps = 0.0001, Real scaleFactor = 1.5, const std::pair<Real, Real> & cPoint = (std::pair<Real, Real>(Null<Real>(), Null<Real>())));+|v|ql/methods/finitedifferences/meshers/fdmcev1dmesher.hpp|FdmCEV1dMesher::FdmCEV1dMesher(Size size, Real f0, Real alpha, Real beta, Time maturity, Real eps = 0.0001, Real scaleFactor = 1.5, const std::pair<Real, Real> & cPoint = (std::pair<Real, Real>(Null<Real>(), Null<Real>())));+|v|ql/methods/finitedifferences/meshers/fdmhestonvariancemesher.hpp|FdmHestonVarianceMesher::FdmHestonVarianceMesher(Size size, const ext::shared_ptr<HestonProcess> & process, Time maturity, Size tAvgSteps = 10, Real epsilon = 0.0001, Real mixingFactor = 1.0);+|x|ql/methods/finitedifferences/meshers/fdmhestonvariancemesher.hpp|Real FdmHestonVarianceMesher::volaEstimate() const;+|v|ql/methods/finitedifferences/meshers/fdmhestonvariancemesher.hpp|FdmHestonLocalVolatilityVarianceMesher::FdmHestonLocalVolatilityVarianceMesher(Size size, const ext::shared_ptr<HestonProcess> & process, const ext::shared_ptr<LocalVolTermStructure> & leverageFct, Time maturity, Size tAvgSteps = 10, Real epsilon = 0.0001, Real mixingFactor = 1.0);+|x|ql/methods/finitedifferences/meshers/fdmhestonvariancemesher.hpp|Real FdmHestonLocalVolatilityVarianceMesher::volaEstimate() const;+| |ql/methods/finitedifferences/meshers/fdmmesher.hpp|FdmMesher::FdmMesher(ext::shared_ptr<FdmLinearOpLayout> layout);+| |ql/methods/finitedifferences/meshers/fdmmesher.hpp|Real FdmMesher::dplus(const FdmLinearOpIterator & iter, Size direction) const;+| |ql/methods/finitedifferences/meshers/fdmmesher.hpp|Real FdmMesher::dminus(const FdmLinearOpIterator & iter, Size direction) const;+| |ql/methods/finitedifferences/meshers/fdmmesher.hpp|Real FdmMesher::location(const FdmLinearOpIterator & iter, Size direction) const;+|v|ql/methods/finitedifferences/meshers/fdmmesher.hpp|Array FdmMesher::locations(Size direction) const;+|x|ql/methods/finitedifferences/meshers/fdmmesher.hpp|const ext::shared_ptr<FdmLinearOpLayout> & FdmMesher::layout() const;+|x|ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp|FdmMesherComposite::FdmMesherComposite(const ext::shared_ptr<FdmLinearOpLayout> & layout, const std::vector<ext::shared_ptr<Fdm1dMesher>> & mesher);+|v|ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp|FdmMesherComposite::FdmMesherComposite(const std::vector<ext::shared_ptr<Fdm1dMesher>> & mesher);+|x|ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp|FdmMesherComposite::FdmMesherComposite(const ext::shared_ptr<Fdm1dMesher> & mesher);+|x|ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp|FdmMesherComposite::FdmMesherComposite(const ext::shared_ptr<Fdm1dMesher> & m1, const ext::shared_ptr<Fdm1dMesher> & m2);+|x|ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp|FdmMesherComposite::FdmMesherComposite(const ext::shared_ptr<Fdm1dMesher> & m1, const ext::shared_ptr<Fdm1dMesher> & m2, const ext::shared_ptr<Fdm1dMesher> & m3);+|x|ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp|FdmMesherComposite::FdmMesherComposite(const ext::shared_ptr<Fdm1dMesher> & m1, const ext::shared_ptr<Fdm1dMesher> & m2, const ext::shared_ptr<Fdm1dMesher> & m3, const ext::shared_ptr<Fdm1dMesher> & m4);+|x|ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp|const std::vector<ext::shared_ptr<Fdm1dMesher>> & FdmMesherComposite::getFdm1dMeshers() const;+|v|ql/methods/finitedifferences/meshers/fdmsimpleprocess1dmesher.hpp|FdmSimpleProcess1dMesher::FdmSimpleProcess1dMesher(Size size, const ext::shared_ptr<StochasticProcess1D> & process, Time maturity, Size tAvgSteps = 10, Real epsilon = 0.0001, Real mandatoryPoint = Null<Real>());+|v|ql/methods/finitedifferences/meshers/predefined1dmesher.hpp|Predefined1dMesher::Predefined1dMesher(const std::vector<Real> & x);+|v|ql/methods/finitedifferences/meshers/uniform1dmesher.hpp|Uniform1dMesher::Uniform1dMesher(Real start, Real end, Size size);+| |ql/methods/finitedifferences/meshers/uniformgridmesher.hpp|UniformGridMesher::UniformGridMesher(const ext::shared_ptr<FdmLinearOpLayout> & index, const std::vector<std::pair<Real, Real>> & boundaries);+| |ql/methods/finitedifferences/mixedscheme.hpp|MixedScheme::MixedScheme<Operator>(const operator_type & L, Real theta, bc_set bcs);+| |ql/methods/finitedifferences/mixedscheme.hpp|void MixedScheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/mixedscheme.hpp|void MixedScheme::setStep(Time dt);+| |ql/methods/finitedifferences/operators/fdm2dblackscholesop.hpp|Fdm2dBlackScholesOp::Fdm2dBlackScholesOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<GeneralizedBlackScholesProcess> & p1, const ext::shared_ptr<GeneralizedBlackScholesProcess> & p2, Real correlation, Time maturity, bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>());+| |ql/methods/finitedifferences/operators/fdm2dblackscholesop.hpp|Array Fdm2dBlackScholesOp::apply(const Array & x) const;+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|FdmBatesOp::FdmBatesOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<BatesProcess> & batesProcess, FdmBoundaryConditionSet bcSet, Size integroIntegrationOrder, const ext::shared_ptr<FdmQuantoHelper> & quantoHelper = ext::shared_ptr<FdmQuantoHelper>());+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|Array FdmBatesOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|IntegroIntegrand::IntegroIntegrand(const ext::shared_ptr<LinearInterpolation> & i, const FdmBoundaryConditionSet & bcSet, Real x, Real delta, Real nu);+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|Real IntegroIntegrand::operator()(Real y) const;+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|Size size() const;+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|void setTime(Time t1, Time t2);+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|Array apply_mixed(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|Array apply_direction(Size direction, const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|Array solve_splitting(Size direction, const Array & r, Real s) const;+| |ql/methods/finitedifferences/operators/fdmbatesop.hpp|Array preconditioner(const Array & r, Real s) const;+| |ql/methods/finitedifferences/operators/fdmblackscholesfwdop.hpp|FdmBlackScholesFwdOp::FdmBlackScholesFwdOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Real strike, bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>(), Size direction = 0);+| |ql/methods/finitedifferences/operators/fdmblackscholesfwdop.hpp|Array FdmBlackScholesFwdOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmblackscholesop.hpp|FdmBlackScholesOp::FdmBlackScholesOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Real strike, bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>(), Size direction = 0, ext::shared_ptr<FdmQuantoHelper> quantoHelper = ext::shared_ptr<FdmQuantoHelper>());+| |ql/methods/finitedifferences/operators/fdmblackscholesop.hpp|Array FdmBlackScholesOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmcevop.hpp|FdmCEVOp::FdmCEVOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<YieldTermStructure> & rTS, Real f0, Real alpha, Real beta, Size direction);+| |ql/methods/finitedifferences/operators/fdmcevop.hpp|Array FdmCEVOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|FdmCIREquityPart::FdmCIREquityPart(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<GeneralizedBlackScholesProcess> & bsProcess, Real strike);+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|void FdmCIREquityPart::setTime(Time t1, Time t2);+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|const TripleBandLinearOp & FdmCIREquityPart::getMap() const;+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|FdmCIRRatesPart::FdmCIRRatesPart(const ext::shared_ptr<FdmMesher> & mesher, Real sigma, Real kappa, Real theta);+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|void FdmCIRRatesPart::setTime(Time t1, Time t2);+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|const TripleBandLinearOp & FdmCIRRatesPart::getMap() const;+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|FdmCIRMixedPart::FdmCIRMixedPart(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<CoxIngersollRossProcess> & cirProcess, const ext::shared_ptr<GeneralizedBlackScholesProcess> & bsProcess, Real rho, Real strike);+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|void FdmCIRMixedPart::setTime(Time t1, Time t2);+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|const NinePointLinearOp & FdmCIRMixedPart::getMap() const;+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|FdmCIROp::FdmCIROp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<CoxIngersollRossProcess> & cirProcess, const ext::shared_ptr<GeneralizedBlackScholesProcess> & bsProcess, Real rho, Real strike);+| |ql/methods/finitedifferences/operators/fdmcirop.hpp|Array FdmCIROp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmg2op.hpp|FdmG2Op::FdmG2Op(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<G2> & model, Size direction1, Size direction2);+| |ql/methods/finitedifferences/operators/fdmg2op.hpp|Array FdmG2Op::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmhestonfwdop.hpp|FdmHestonFwdOp::FdmHestonFwdOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<HestonProcess> & process, FdmSquareRootFwdOp::TransformationType type = FdmSquareRootFwdOp::Plain, ext::shared_ptr<LocalVolTermStructure> leverageFct = ext::shared_ptr<LocalVolTermStructure>(), Real mixingFactor = 1.0);+| |ql/methods/finitedifferences/operators/fdmhestonfwdop.hpp|Array FdmHestonFwdOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmhestonhullwhiteop.hpp|FdmHestonHullWhiteEquityPart::FdmHestonHullWhiteEquityPart(const ext::shared_ptr<FdmMesher> & mesher, ext::shared_ptr<HullWhite> hwModel, ext::shared_ptr<YieldTermStructure> qTS);+| |ql/methods/finitedifferences/operators/fdmhestonhullwhiteop.hpp|void FdmHestonHullWhiteEquityPart::setTime(Time t1, Time t2);+| |ql/methods/finitedifferences/operators/fdmhestonhullwhiteop.hpp|const TripleBandLinearOp & FdmHestonHullWhiteEquityPart::getMap() const;+| |ql/methods/finitedifferences/operators/fdmhestonhullwhiteop.hpp|FdmHestonHullWhiteOp::FdmHestonHullWhiteOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<HestonProcess> & hestonProcess, const ext::shared_ptr<HullWhiteProcess> & hwProcess, Real equityShortRateCorrelation);+| |ql/methods/finitedifferences/operators/fdmhestonhullwhiteop.hpp|Array FdmHestonHullWhiteOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmhestonop.hpp|FdmHestonEquityPart::FdmHestonEquityPart(const ext::shared_ptr<FdmMesher> & mesher, ext::shared_ptr<YieldTermStructure> rTS, ext::shared_ptr<YieldTermStructure> qTS, ext::shared_ptr<FdmQuantoHelper> quantoHelper, ext::shared_ptr<LocalVolTermStructure> leverageFct = ext::shared_ptr<LocalVolTermStructure>());+| |ql/methods/finitedifferences/operators/fdmhestonop.hpp|void FdmHestonEquityPart::setTime(Time t1, Time t2);+| |ql/methods/finitedifferences/operators/fdmhestonop.hpp|const TripleBandLinearOp & FdmHestonEquityPart::getMap() const;+| |ql/methods/finitedifferences/operators/fdmhestonop.hpp|const Array & FdmHestonEquityPart::getL() const;+| |ql/methods/finitedifferences/operators/fdmhestonop.hpp|FdmHestonVariancePart::FdmHestonVariancePart(const ext::shared_ptr<FdmMesher> & mesher, ext::shared_ptr<YieldTermStructure> rTS, Real mixedSigma, Real kappa, Real theta);+| |ql/methods/finitedifferences/operators/fdmhestonop.hpp|void FdmHestonVariancePart::setTime(Time t1, Time t2);+| |ql/methods/finitedifferences/operators/fdmhestonop.hpp|const TripleBandLinearOp & FdmHestonVariancePart::getMap() const;+| |ql/methods/finitedifferences/operators/fdmhestonop.hpp|FdmHestonOp::FdmHestonOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<HestonProcess> & hestonProcess, const ext::shared_ptr<FdmQuantoHelper> & quantoHelper = ext::shared_ptr<FdmQuantoHelper>(), const ext::shared_ptr<LocalVolTermStructure> & leverageFct = ext::shared_ptr<LocalVolTermStructure>(), Real mixingFactor = 1.0);+| |ql/methods/finitedifferences/operators/fdmhestonop.hpp|Array FdmHestonOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmhullwhiteop.hpp|FdmHullWhiteOp::FdmHullWhiteOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<HullWhite> & model, Size direction);+| |ql/methods/finitedifferences/operators/fdmhullwhiteop.hpp|Array FdmHullWhiteOp::apply(const Array & r) const;+|u|ql/methods/finitedifferences/operators/fdmlinearop.hpp|array_type FdmLinearOp::apply(const array_type & r) const;+| |ql/methods/finitedifferences/operators/fdmlinearop.hpp|SparseMatrix FdmLinearOp::toMatrix() const;+|u|ql/methods/finitedifferences/operators/fdmlinearopcomposite.hpp|Size FdmLinearOpComposite::size() const;+|u|ql/methods/finitedifferences/operators/fdmlinearopcomposite.hpp|void FdmLinearOpComposite::setTime(Time t1, Time t2);+| |ql/methods/finitedifferences/operators/fdmlinearopcomposite.hpp|Array FdmLinearOpComposite::apply_mixed(const Array & r) const;+|u|ql/methods/finitedifferences/operators/fdmlinearopcomposite.hpp|Array FdmLinearOpComposite::apply_direction(Size direction, const Array & r) const;+|u|ql/methods/finitedifferences/operators/fdmlinearopcomposite.hpp|Array FdmLinearOpComposite::solve_splitting(Size direction, const Array & r, Real s) const;+| |ql/methods/finitedifferences/operators/fdmlinearopcomposite.hpp|Array FdmLinearOpComposite::preconditioner(const Array & r, Real s) const;+| |ql/methods/finitedifferences/operators/fdmlinearopcomposite.hpp|std::vector<SparseMatrix> FdmLinearOpComposite::toMatrixDecomp() const;+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|FdmLinearOpIterator::FdmLinearOpIterator(Size index = 0);+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|FdmLinearOpIterator::FdmLinearOpIterator(std::vector<Size> dim);+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|FdmLinearOpIterator::FdmLinearOpIterator(std::vector<Size> dim, std::vector<Size> coordinates, Size index);+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|void FdmLinearOpIterator::operator++();+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|const FdmLinearOpIterator & FdmLinearOpIterator::operator*() const;+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|bool FdmLinearOpIterator::operator==(const FdmLinearOpIterator & iterator) const;+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|bool FdmLinearOpIterator::operator!=(const FdmLinearOpIterator & iterator) const;+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|Size FdmLinearOpIterator::index() const;+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|const std::vector<Size> & FdmLinearOpIterator::coordinates() const;+| |ql/methods/finitedifferences/operators/fdmlinearopiterator.hpp|void FdmLinearOpIterator::swap(FdmLinearOpIterator & iter);+| |ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|FdmLinearOpLayout::FdmLinearOpLayout(std::vector<Size> dim);+| |ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|FdmLinearOpIterator FdmLinearOpLayout::begin() const;+| |ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|FdmLinearOpIterator FdmLinearOpLayout::end() const;+|x|ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|const std::vector<Size> & FdmLinearOpLayout::dim() const;+| |ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|const std::vector<Size> & FdmLinearOpLayout::spacing() const;+| |ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|Size FdmLinearOpLayout::size() const;+| |ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|Size FdmLinearOpLayout::index(const std::vector<Size> & coordinates) const;+| |ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|Size FdmLinearOpLayout::neighbourhood(const FdmLinearOpIterator & iterator, Size i, Integer offset) const;+| |ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|Size FdmLinearOpLayout::neighbourhood(const FdmLinearOpIterator & iterator, Size i1, Integer offset1, Size i2, Integer offset2) const;+| |ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp|FdmLinearOpIterator FdmLinearOpLayout::iter_neighbourhood(const FdmLinearOpIterator & iterator, Size i, Integer offset) const;+| |ql/methods/finitedifferences/operators/fdmlocalvolfwdop.hpp|FdmLocalVolFwdOp::FdmLocalVolFwdOp(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<Quote> & spot, ext::shared_ptr<YieldTermStructure> rTS, ext::shared_ptr<YieldTermStructure> qTS, const ext::shared_ptr<LocalVolTermStructure> & localVol, Size direction = 0);+| |ql/methods/finitedifferences/operators/fdmlocalvolfwdop.hpp|Array FdmLocalVolFwdOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmornsteinuhlenbeckop.hpp|FdmOrnsteinUhlenbeckOp::FdmOrnsteinUhlenbeckOp(const ext::shared_ptr<FdmMesher> & mesher, ext::shared_ptr<OrnsteinUhlenbeckProcess> p, ext::shared_ptr<YieldTermStructure> rTS, Size direction = 0);+| |ql/methods/finitedifferences/operators/fdmornsteinuhlenbeckop.hpp|Array FdmOrnsteinUhlenbeckOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmsabrop.hpp|FdmSabrOp::FdmSabrOp(const ext::shared_ptr<FdmMesher> & mesher, ext::shared_ptr<YieldTermStructure> rTS, Real f0, Real alpha, Real beta, Real nu, Real rho);+| |ql/methods/finitedifferences/operators/fdmsabrop.hpp|Array FdmSabrOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmsquarerootfwdop.hpp|FdmSquareRootFwdOp::FdmSquareRootFwdOp(const ext::shared_ptr<FdmMesher> & mesher, Real kappa, Real theta, Real sigma, Size direction, TransformationType type = Plain);+| |ql/methods/finitedifferences/operators/fdmsquarerootfwdop.hpp|Array FdmSquareRootFwdOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/fdmsquarerootfwdop.hpp|Real FdmSquareRootFwdOp::lowerBoundaryFactor(TransformationType type = Plain) const;+| |ql/methods/finitedifferences/operators/fdmsquarerootfwdop.hpp|Real FdmSquareRootFwdOp::upperBoundaryFactor(TransformationType type = Plain) const;+| |ql/methods/finitedifferences/operators/fdmsquarerootfwdop.hpp|Real FdmSquareRootFwdOp::v(Size i) const;+| |ql/methods/finitedifferences/operators/fdmwienerop.hpp|FdmWienerOp::FdmWienerOp(const ext::shared_ptr<FdmMesher> & mesher, ext::shared_ptr<YieldTermStructure> rTS, const Array & lambdas);+| |ql/methods/finitedifferences/operators/fdmwienerop.hpp|Array FdmWienerOp::apply(const Array & x) const;+| |ql/methods/finitedifferences/operators/firstderivativeop.hpp|FirstDerivativeOp::FirstDerivativeOp(Size direction, const ext::shared_ptr<FdmMesher> & mesher);+| |ql/methods/finitedifferences/operators/modtriplebandlinearop.hpp|ModTripleBandLinearOp::ModTripleBandLinearOp(Size direction, const ext::shared_ptr<FdmMesher> & mesher);+| |ql/methods/finitedifferences/operators/modtriplebandlinearop.hpp|ModTripleBandLinearOp::ModTripleBandLinearOp(const TripleBandLinearOp & m);+| |ql/methods/finitedifferences/operators/modtriplebandlinearop.hpp|Real ModTripleBandLinearOp::lower(Size i) const;+| |ql/methods/finitedifferences/operators/modtriplebandlinearop.hpp|Real & ModTripleBandLinearOp::lower(Size i);+| |ql/methods/finitedifferences/operators/modtriplebandlinearop.hpp|Real ModTripleBandLinearOp::diag(Size i) const;+| |ql/methods/finitedifferences/operators/modtriplebandlinearop.hpp|Real & ModTripleBandLinearOp::diag(Size i);+| |ql/methods/finitedifferences/operators/modtriplebandlinearop.hpp|Real ModTripleBandLinearOp::upper(Size i) const;+| |ql/methods/finitedifferences/operators/modtriplebandlinearop.hpp|Real & ModTripleBandLinearOp::upper(Size i);+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|NinePointLinearOp::NinePointLinearOp(Size d0, Size d1, const ext::shared_ptr<FdmMesher> & mesher);+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|NinePointLinearOp::NinePointLinearOp(const NinePointLinearOp & m);+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|NinePointLinearOp::NinePointLinearOp(NinePointLinearOp && m);+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|NinePointLinearOp & NinePointLinearOp::operator=(const NinePointLinearOp & m);+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|NinePointLinearOp & NinePointLinearOp::operator=(NinePointLinearOp && m);+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|Array NinePointLinearOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|NinePointLinearOp NinePointLinearOp::mult(const Array & u) const;+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|void NinePointLinearOp::swap(NinePointLinearOp & m);+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|NinePointLinearOp & operator=(const NinePointLinearOp & m);+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|NinePointLinearOp & operator=(NinePointLinearOp && m);+| |ql/methods/finitedifferences/operators/nthorderderivativeop.hpp|NthOrderDerivativeOp::NthOrderDerivativeOp(Size direction, Size order, Integer nPoints, const ext::shared_ptr<FdmMesher> & mesher);+| |ql/methods/finitedifferences/operators/numericaldifferentiation.hpp|NumericalDifferentiation::NumericalDifferentiation(std::function<Real (Real)> f, Size orderOfDerivative, Array x_offsets);+| |ql/methods/finitedifferences/operators/numericaldifferentiation.hpp|NumericalDifferentiation::NumericalDifferentiation(std::function<Real (Real)> f, Size orderOfDerivative, Real stepSize, Size steps, Scheme scheme);+| |ql/methods/finitedifferences/operators/numericaldifferentiation.hpp|Real NumericalDifferentiation::operator()(Real x) const;+| |ql/methods/finitedifferences/operators/numericaldifferentiation.hpp|const Array & NumericalDifferentiation::offsets() const;+| |ql/methods/finitedifferences/operators/numericaldifferentiation.hpp|const Array & NumericalDifferentiation::weights() const;+| |ql/methods/finitedifferences/operators/secondderivativeop.hpp|SecondDerivativeOp::SecondDerivativeOp(Size direction, const ext::shared_ptr<FdmMesher> & mesher);+| |ql/methods/finitedifferences/operators/secondordermixedderivativeop.hpp|SecondOrderMixedDerivativeOp::SecondOrderMixedDerivativeOp(Size d0, Size d1, const ext::shared_ptr<FdmMesher> & mesher);+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp::TripleBandLinearOp(Size direction, const ext::shared_ptr<FdmMesher> & mesher);+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp::TripleBandLinearOp(const TripleBandLinearOp & m);+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp::TripleBandLinearOp(TripleBandLinearOp && m);+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp & TripleBandLinearOp::operator=(const TripleBandLinearOp & m);+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp & TripleBandLinearOp::operator=(TripleBandLinearOp && m);+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|Array TripleBandLinearOp::apply(const Array & r) const;+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|Array TripleBandLinearOp::solve_splitting(const Array & r, Real a, Real b = 1.0) const;+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp TripleBandLinearOp::mult(const Array & u) const;+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp TripleBandLinearOp::multR(const Array & u) const;+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp TripleBandLinearOp::add(const TripleBandLinearOp & m) const;+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp TripleBandLinearOp::add(const Array & u) const;+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|void TripleBandLinearOp::axpyb(const Array & a, const TripleBandLinearOp & x, const TripleBandLinearOp & y, const Array & b);+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|void TripleBandLinearOp::swap(TripleBandLinearOp & m);+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp & operator=(const TripleBandLinearOp & m);+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp & operator=(TripleBandLinearOp && m);+| |ql/methods/finitedifferences/schemes/boundaryconditionschemehelper.hpp|BoundaryConditionSchemeHelper::BoundaryConditionSchemeHelper(OperatorTraits<FdmLinearOp>::bc_set bcSet);+| |ql/methods/finitedifferences/schemes/boundaryconditionschemehelper.hpp|void BoundaryConditionSchemeHelper::applyBeforeApplying(operator_type & op) const;+| |ql/methods/finitedifferences/schemes/boundaryconditionschemehelper.hpp|void BoundaryConditionSchemeHelper::applyBeforeSolving(operator_type & op, array_type & a) const;+| |ql/methods/finitedifferences/schemes/boundaryconditionschemehelper.hpp|void BoundaryConditionSchemeHelper::applyAfterApplying(array_type & a) const;+| |ql/methods/finitedifferences/schemes/boundaryconditionschemehelper.hpp|void BoundaryConditionSchemeHelper::applyAfterSolving(array_type & a) const;+| |ql/methods/finitedifferences/schemes/boundaryconditionschemehelper.hpp|void BoundaryConditionSchemeHelper::setTime(Time t) const;+| |ql/methods/finitedifferences/schemes/craigsneydscheme.hpp|CraigSneydScheme::CraigSneydScheme(Real theta, Real mu, ext::shared_ptr<FdmLinearOpComposite> map, const bc_set & bcSet = bc_set());+| |ql/methods/finitedifferences/schemes/craigsneydscheme.hpp|void CraigSneydScheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/schemes/craigsneydscheme.hpp|void CraigSneydScheme::setStep(Time dt);+| |ql/methods/finitedifferences/schemes/cranknicolsonscheme.hpp|CrankNicolsonScheme::CrankNicolsonScheme(Real theta, const ext::shared_ptr<FdmLinearOpComposite> & map, const bc_set & bcSet = bc_set(), Real relTol = 1e-8, ImplicitEulerScheme::SolverType solverType = ImplicitEulerScheme::BiCGstab);+| |ql/methods/finitedifferences/schemes/cranknicolsonscheme.hpp|void CrankNicolsonScheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/schemes/cranknicolsonscheme.hpp|void CrankNicolsonScheme::setStep(Time dt);+| |ql/methods/finitedifferences/schemes/cranknicolsonscheme.hpp|Size CrankNicolsonScheme::numberOfIterations() const;+| |ql/methods/finitedifferences/schemes/douglasscheme.hpp|DouglasScheme::DouglasScheme(Real theta, ext::shared_ptr<FdmLinearOpComposite> map, const bc_set & bcSet = bc_set());+| |ql/methods/finitedifferences/schemes/douglasscheme.hpp|void DouglasScheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/schemes/douglasscheme.hpp|void DouglasScheme::setStep(Time dt);+| |ql/methods/finitedifferences/schemes/expliciteulerscheme.hpp|ExplicitEulerScheme::ExplicitEulerScheme(ext::shared_ptr<FdmLinearOpComposite> map, const bc_set & bcSet = bc_set());+| |ql/methods/finitedifferences/schemes/expliciteulerscheme.hpp|void ExplicitEulerScheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/schemes/expliciteulerscheme.hpp|void ExplicitEulerScheme::setStep(Time dt);+| |ql/methods/finitedifferences/schemes/hundsdorferscheme.hpp|HundsdorferScheme::HundsdorferScheme(Real theta, Real mu, ext::shared_ptr<FdmLinearOpComposite> map, const bc_set & bcSet = bc_set());+| |ql/methods/finitedifferences/schemes/hundsdorferscheme.hpp|void HundsdorferScheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/schemes/hundsdorferscheme.hpp|void HundsdorferScheme::setStep(Time dt);+| |ql/methods/finitedifferences/schemes/impliciteulerscheme.hpp|ImplicitEulerScheme::ImplicitEulerScheme(ext::shared_ptr<FdmLinearOpComposite> map, const bc_set & bcSet = bc_set(), Real relTol = 1e-8, SolverType solverType = BiCGstab);+| |ql/methods/finitedifferences/schemes/impliciteulerscheme.hpp|void ImplicitEulerScheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/schemes/impliciteulerscheme.hpp|void ImplicitEulerScheme::setStep(Time dt);+| |ql/methods/finitedifferences/schemes/impliciteulerscheme.hpp|Size ImplicitEulerScheme::numberOfIterations() const;+| |ql/methods/finitedifferences/schemes/methodoflinesscheme.hpp|MethodOfLinesScheme::MethodOfLinesScheme(Real eps, Real relInitStepSize, ext::shared_ptr<FdmLinearOpComposite> map, const bc_set & bcSet = bc_set());+| |ql/methods/finitedifferences/schemes/methodoflinesscheme.hpp|void MethodOfLinesScheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/schemes/methodoflinesscheme.hpp|void MethodOfLinesScheme::setStep(Time dt);+| |ql/methods/finitedifferences/schemes/modifiedcraigsneydscheme.hpp|ModifiedCraigSneydScheme::ModifiedCraigSneydScheme(Real theta, Real mu, ext::shared_ptr<FdmLinearOpComposite> map, const bc_set & bcSet = bc_set());+| |ql/methods/finitedifferences/schemes/modifiedcraigsneydscheme.hpp|void ModifiedCraigSneydScheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/schemes/modifiedcraigsneydscheme.hpp|void ModifiedCraigSneydScheme::setStep(Time dt);+| |ql/methods/finitedifferences/schemes/trbdf2scheme.hpp|TrBDF2Scheme::TrBDF2Scheme<TrapezoidalScheme>(Real alpha, ext::shared_ptr<FdmLinearOpComposite> map, const ext::shared_ptr<TrapezoidalScheme> & trapezoidalScheme, const bc_set & bcSet = bc_set(), Real relTol = 1e-8, SolverType solverType = BiCGstab);+| |ql/methods/finitedifferences/schemes/trbdf2scheme.hpp|void TrBDF2Scheme::step(array_type & a, Time t);+| |ql/methods/finitedifferences/schemes/trbdf2scheme.hpp|void TrBDF2Scheme::setStep(Time dt);+| |ql/methods/finitedifferences/schemes/trbdf2scheme.hpp|Size TrBDF2Scheme::numberOfIterations() const;+| |ql/methods/finitedifferences/schemes/trbdf2scheme.hpp|TrBDF2Scheme<TrapezoidalScheme>(Real alpha, ext::shared_ptr<FdmLinearOpComposite> map, const ext::shared_ptr<TrapezoidalScheme> & trapezoidalScheme, const bc_set & bcSet, Real relTol, SolverType solverType);+| |ql/methods/finitedifferences/schemes/trbdf2scheme.hpp|Array apply(const Array & r) const;+| |ql/methods/finitedifferences/schemes/trbdf2scheme.hpp|void step(array_type & fn, Time t);+| |ql/methods/finitedifferences/solvers/fdm1dimsolver.hpp|Fdm1DimSolver::Fdm1DimSolver(const FdmSolverDesc & solverDesc, const FdmSchemeDesc & schemeDesc, ext::shared_ptr<FdmLinearOpComposite> op);+| |ql/methods/finitedifferences/solvers/fdm1dimsolver.hpp|Real Fdm1DimSolver::interpolateAt(Real x) const;+| |ql/methods/finitedifferences/solvers/fdm1dimsolver.hpp|Real Fdm1DimSolver::thetaAt(Real x) const;+| |ql/methods/finitedifferences/solvers/fdm1dimsolver.hpp|Real Fdm1DimSolver::derivativeX(Real x) const;+| |ql/methods/finitedifferences/solvers/fdm1dimsolver.hpp|Real Fdm1DimSolver::derivativeXX(Real x) const;+| |ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp|Fdm2dBlackScholesSolver::Fdm2dBlackScholesSolver(Handle<GeneralizedBlackScholesProcess> p1, Handle<GeneralizedBlackScholesProcess> p2, Real correlation, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>());+| |ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp|Real Fdm2dBlackScholesSolver::valueAt(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp|Real Fdm2dBlackScholesSolver::thetaAt(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp|Real Fdm2dBlackScholesSolver::deltaXat(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp|Real Fdm2dBlackScholesSolver::deltaYat(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp|Real Fdm2dBlackScholesSolver::gammaXat(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp|Real Fdm2dBlackScholesSolver::gammaYat(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp|Real Fdm2dBlackScholesSolver::gammaXYat(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp|Fdm2DimSolver::Fdm2DimSolver(const FdmSolverDesc & solverDesc, const FdmSchemeDesc & schemeDesc, ext::shared_ptr<FdmLinearOpComposite> op);+| |ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp|Real Fdm2DimSolver::interpolateAt(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp|Real Fdm2DimSolver::thetaAt(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp|Real Fdm2DimSolver::derivativeX(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp|Real Fdm2DimSolver::derivativeY(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp|Real Fdm2DimSolver::derivativeXX(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp|Real Fdm2DimSolver::derivativeYY(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp|Real Fdm2DimSolver::derivativeXY(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdm3dimsolver.hpp|Fdm3DimSolver::Fdm3DimSolver(const FdmSolverDesc & solverDesc, const FdmSchemeDesc & schemeDesc, ext::shared_ptr<FdmLinearOpComposite> op);+| |ql/methods/finitedifferences/solvers/fdm3dimsolver.hpp|Real Fdm3DimSolver::interpolateAt(Real x, Real y, Rate z) const;+| |ql/methods/finitedifferences/solvers/fdm3dimsolver.hpp|Real Fdm3DimSolver::thetaAt(Real x, Real y, Rate z) const;+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|FdmSchemeDesc::FdmSchemeDesc(FdmSchemeType type, Real theta, Real mu);+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::Douglas();+|x|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::CrankNicolson();+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::ImplicitEuler();+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::ExplicitEuler();+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::CraigSneyd();+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::ModifiedCraigSneyd();+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::Hundsdorfer();+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::ModifiedHundsdorfer();+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::MethodOfLines(Real eps = 0.001, Real relInitStepSize = 0.01);+|x|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|static FdmSchemeDesc FdmSchemeDesc::TrBDF2();+|u|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|FdmBackwardSolver::FdmBackwardSolver(ext::shared_ptr<FdmLinearOpComposite> map, FdmBoundaryConditionSet bcSet, const ext::shared_ptr<FdmStepConditionComposite> & condition, const FdmSchemeDesc & schemeDesc);+|v|ql/methods/finitedifferences/solvers/fdmbackwardsolver.hpp|void FdmBackwardSolver::rollback(array_type & a, Time from, Time to, Size steps, Size dampingSteps);+| |ql/methods/finitedifferences/solvers/fdmbatessolver.hpp|FdmBatesSolver::FdmBatesSolver(Handle<BatesProcess> process, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), Size integroIntegrationOrder = 12, Handle<FdmQuantoHelper> quantoHelper = Handle<FdmQuantoHelper>());+| |ql/methods/finitedifferences/solvers/fdmbatessolver.hpp|Real FdmBatesSolver::valueAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmbatessolver.hpp|Real FdmBatesSolver::thetaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmbatessolver.hpp|Real FdmBatesSolver::deltaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmbatessolver.hpp|Real FdmBatesSolver::gammaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmblackscholessolver.hpp|FdmBlackScholesSolver::FdmBlackScholesSolver(Handle<GeneralizedBlackScholesProcess> process, Real strike, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>(), Handle<FdmQuantoHelper> quantoHelper = Handle<FdmQuantoHelper>());+| |ql/methods/finitedifferences/solvers/fdmblackscholessolver.hpp|Real FdmBlackScholesSolver::valueAt(Real s) const;+| |ql/methods/finitedifferences/solvers/fdmblackscholessolver.hpp|Real FdmBlackScholesSolver::deltaAt(Real s) const;+| |ql/methods/finitedifferences/solvers/fdmblackscholessolver.hpp|Real FdmBlackScholesSolver::gammaAt(Real s) const;+| |ql/methods/finitedifferences/solvers/fdmblackscholessolver.hpp|Real FdmBlackScholesSolver::thetaAt(Real s) const;+| |ql/methods/finitedifferences/solvers/fdmcirsolver.hpp|FdmCIRSolver::FdmCIRSolver(Handle<CoxIngersollRossProcess> process, Handle<GeneralizedBlackScholesProcess> bsProcess, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), Real rho = 1.0, Real strike = 1.0);+| |ql/methods/finitedifferences/solvers/fdmcirsolver.hpp|Real FdmCIRSolver::valueAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmcirsolver.hpp|Real FdmCIRSolver::deltaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmcirsolver.hpp|Real FdmCIRSolver::gammaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmcirsolver.hpp|Real FdmCIRSolver::thetaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmg2solver.hpp|FdmG2Solver::FdmG2Solver(Handle<G2> model, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+| |ql/methods/finitedifferences/solvers/fdmg2solver.hpp|Real FdmG2Solver::valueAt(Real x, Real y) const;+| |ql/methods/finitedifferences/solvers/fdmhestonhullwhitesolver.hpp|FdmHestonHullWhiteSolver::FdmHestonHullWhiteSolver(const Handle<HestonProcess> & hestonProcess, const Handle<HullWhiteProcess> & hwProcess, Rate corrEquityShortRate, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+| |ql/methods/finitedifferences/solvers/fdmhestonhullwhitesolver.hpp|Real FdmHestonHullWhiteSolver::valueAt(Real s, Real v, Rate r) const;+| |ql/methods/finitedifferences/solvers/fdmhestonhullwhitesolver.hpp|Real FdmHestonHullWhiteSolver::thetaAt(Real s, Real v, Rate r) const;+| |ql/methods/finitedifferences/solvers/fdmhestonhullwhitesolver.hpp|Real FdmHestonHullWhiteSolver::deltaAt(Real s, Real v, Rate r, Real eps) const;+| |ql/methods/finitedifferences/solvers/fdmhestonhullwhitesolver.hpp|Real FdmHestonHullWhiteSolver::gammaAt(Real s, Real v, Rate r, Real eps) const;+| |ql/methods/finitedifferences/solvers/fdmhestonsolver.hpp|FdmHestonSolver::FdmHestonSolver(Handle<HestonProcess> process, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), Handle<FdmQuantoHelper> quantoHelper = Handle<FdmQuantoHelper>(), ext::shared_ptr<LocalVolTermStructure> leverageFct = ext::shared_ptr<LocalVolTermStructure>(), Real mixingFactor = 1.0);+| |ql/methods/finitedifferences/solvers/fdmhestonsolver.hpp|Real FdmHestonSolver::valueAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmhestonsolver.hpp|Real FdmHestonSolver::thetaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmhestonsolver.hpp|Real FdmHestonSolver::deltaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmhestonsolver.hpp|Real FdmHestonSolver::gammaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmhestonsolver.hpp|Real FdmHestonSolver::meanVarianceDeltaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmhestonsolver.hpp|Real FdmHestonSolver::meanVarianceGammaAt(Real s, Real v) const;+| |ql/methods/finitedifferences/solvers/fdmhullwhitesolver.hpp|FdmHullWhiteSolver::FdmHullWhiteSolver(Handle<HullWhite> model, FdmSolverDesc solverDesc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+| |ql/methods/finitedifferences/solvers/fdmhullwhitesolver.hpp|Real FdmHullWhiteSolver::valueAt(Real r) const;+| |ql/methods/finitedifferences/solvers/fdmndimsolver.hpp|FdmNdimSolver::FdmNdimSolver<N>(const FdmSolverDesc & solverDesc, const FdmSchemeDesc & schemeDesc, ext::shared_ptr<FdmLinearOpComposite> op);+| |ql/methods/finitedifferences/solvers/fdmndimsolver.hpp|Real FdmNdimSolver::interpolateAt(const std::vector<Real> & x) const;+| |ql/methods/finitedifferences/solvers/fdmndimsolver.hpp|Real FdmNdimSolver::thetaAt(const std::vector<Real> & x) const;+| |ql/methods/finitedifferences/solvers/fdmndimsolver.hpp|static void FdmNdimSolver::setValue(data_table & f, const std::vector<Size> & x, Real value);+| |ql/methods/finitedifferences/solvers/fdmndimsolver.hpp|FdmNdimSolver<N>(const FdmSolverDesc & solverDesc, const FdmSchemeDesc & schemeDesc, ext::shared_ptr<FdmLinearOpComposite> op);+| |ql/methods/finitedifferences/solvers/fdmndimsolver.hpp|void performCalculations() const;+| |ql/methods/finitedifferences/solvers/fdmsimple2dbssolver.hpp|FdmSimple2dBSSolver::FdmSimple2dBSSolver(Handle<GeneralizedBlackScholesProcess> process, Real strike, FdmSolverDesc desc, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+| |ql/methods/finitedifferences/solvers/fdmsimple2dbssolver.hpp|Real FdmSimple2dBSSolver::valueAt(Real s, Real a) const;+| |ql/methods/finitedifferences/solvers/fdmsimple2dbssolver.hpp|Real FdmSimple2dBSSolver::deltaAt(Real s, Real a, Real eps) const;+| |ql/methods/finitedifferences/solvers/fdmsimple2dbssolver.hpp|Real FdmSimple2dBSSolver::gammaAt(Real s, Real a, Real eps) const;+| |ql/methods/finitedifferences/solvers/fdmsimple2dbssolver.hpp|Real FdmSimple2dBSSolver::thetaAt(Real s, Real a) const;+|u|ql/methods/finitedifferences/stepcondition.hpp|void StepCondition::applyTo(array_type & a, Time t) const;+| |ql/methods/finitedifferences/stepconditions/fdmamericanstepcondition.hpp|FdmAmericanStepCondition::FdmAmericanStepCondition(ext::shared_ptr<FdmMesher> mesher, ext::shared_ptr<FdmInnerValueCalculator> calculator, Time exerciseStart = 0.0);+| |ql/methods/finitedifferences/stepconditions/fdmamericanstepcondition.hpp|void FdmAmericanStepCondition::applyTo(Array & a, Time t) const;+| |ql/methods/finitedifferences/stepconditions/fdmarithmeticaveragecondition.hpp|FdmArithmeticAverageCondition::FdmArithmeticAverageCondition(std::vector<Time> averageTimes, Real, Size pastFixings, const ext::shared_ptr<FdmMesher> & mesher, Size equityDirection);+| |ql/methods/finitedifferences/stepconditions/fdmarithmeticaveragecondition.hpp|void FdmArithmeticAverageCondition::applyTo(Array & a, Time t) const;+| |ql/methods/finitedifferences/stepconditions/fdmbermudanstepcondition.hpp|FdmBermudanStepCondition::FdmBermudanStepCondition(const std::vector<Date> & exerciseDates, const Date & referenceDate, const DayCounter & dayCounter, ext::shared_ptr<FdmMesher> mesher, ext::shared_ptr<FdmInnerValueCalculator> calculator);+| |ql/methods/finitedifferences/stepconditions/fdmbermudanstepcondition.hpp|void FdmBermudanStepCondition::applyTo(Array & a, Time t) const;+| |ql/methods/finitedifferences/stepconditions/fdmbermudanstepcondition.hpp|const std::vector<Time> & FdmBermudanStepCondition::exerciseTimes() const;+| |ql/methods/finitedifferences/stepconditions/fdmsimplestoragecondition.hpp|FdmSimpleStorageCondition::FdmSimpleStorageCondition(std::vector<Time> exerciseTimes, ext::shared_ptr<FdmMesher> mesher, ext::shared_ptr<FdmInnerValueCalculator> calculator, Real changeRate);+| |ql/methods/finitedifferences/stepconditions/fdmsimplestoragecondition.hpp|void FdmSimpleStorageCondition::applyTo(Array & a, Time t) const;+| |ql/methods/finitedifferences/stepconditions/fdmsimpleswingcondition.hpp|FdmSimpleSwingCondition::FdmSimpleSwingCondition(std::vector<Time> exerciseTimes, ext::shared_ptr<FdmMesher> mesher, ext::shared_ptr<FdmInnerValueCalculator> calculator, Size swingDirection, Size minExercises = 0);+| |ql/methods/finitedifferences/stepconditions/fdmsimpleswingcondition.hpp|void FdmSimpleSwingCondition::applyTo(Array & a, Time t) const;+| |ql/methods/finitedifferences/stepconditions/fdmsnapshotcondition.hpp|FdmSnapshotCondition::FdmSnapshotCondition(Time t);+| |ql/methods/finitedifferences/stepconditions/fdmsnapshotcondition.hpp|void FdmSnapshotCondition::applyTo(Array & a, Time t) const;+|x|ql/methods/finitedifferences/stepconditions/fdmsnapshotcondition.hpp|Time FdmSnapshotCondition::getTime() const;+| |ql/methods/finitedifferences/stepconditions/fdmsnapshotcondition.hpp|const Array & FdmSnapshotCondition::getValues() const;+|u|ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp|FdmStepConditionComposite::FdmStepConditionComposite(const std::list<std::vector<Time>> & stoppingTimes, Conditions conditions);+|x|ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp|void FdmStepConditionComposite::applyTo(Array & a, Time t) const;+|x|ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp|const std::vector<Time> & FdmStepConditionComposite::stoppingTimes() const;+|x|ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp|const Conditions & FdmStepConditionComposite::conditions() const;+|x|ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp|static ext::shared_ptr<FdmStepConditionComposite> FdmStepConditionComposite::joinConditions(const ext::shared_ptr<FdmSnapshotCondition> & c1, const ext::shared_ptr<FdmStepConditionComposite> & c2);+|x|ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp|static ext::shared_ptr<FdmStepConditionComposite> FdmStepConditionComposite::vanillaComposite(const DividendSchedule & schedule, const ext::shared_ptr<Exercise> & exercise, const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<FdmInnerValueCalculator> & calculator, const Date & refDate, const DayCounter & dayCounter);+| |ql/methods/finitedifferences/trbdf2.hpp|TRBDF2::TRBDF2<Operator>(const operator_type & L, const bc_set & bcs);+| |ql/methods/finitedifferences/trbdf2.hpp|void TRBDF2::step(array_type & a, Time t);+| |ql/methods/finitedifferences/trbdf2.hpp|void TRBDF2::setStep(Time dt);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator TridiagonalOperator::operator+(const TridiagonalOperator &);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator TridiagonalOperator::operator-(const TridiagonalOperator &);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator TridiagonalOperator::operator+(const TridiagonalOperator &, const TridiagonalOperator &);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator TridiagonalOperator::operator-(const TridiagonalOperator &, const TridiagonalOperator &);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator TridiagonalOperator::operator*(Real, const TridiagonalOperator &);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator TridiagonalOperator::operator*(const TridiagonalOperator &, Real);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator TridiagonalOperator::operator/(const TridiagonalOperator &, Real);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator::TridiagonalOperator(Size size = 0);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator::TridiagonalOperator(const Array & low, const Array & mid, const Array & high);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator::TridiagonalOperator(const TridiagonalOperator &);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator::TridiagonalOperator(TridiagonalOperator &&);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator & TridiagonalOperator::operator=(const TridiagonalOperator &);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator & TridiagonalOperator::operator=(TridiagonalOperator &&);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|Array TridiagonalOperator::applyTo(const Array & v) const;+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|Array TridiagonalOperator::solveFor(const Array & rhs) const;+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void TridiagonalOperator::solveFor(const Array & rhs, Array & result) const;+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|Array TridiagonalOperator::SOR(const Array & rhs, Real tol) const;+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|static TridiagonalOperator TridiagonalOperator::identity(Size size);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|Size TridiagonalOperator::size() const;+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|bool TridiagonalOperator::isTimeDependent() const;+|x|ql/methods/finitedifferences/tridiagonaloperator.hpp|const Array & TridiagonalOperator::lowerDiagonal() const;+|x|ql/methods/finitedifferences/tridiagonaloperator.hpp|const Array & TridiagonalOperator::diagonal() const;+|x|ql/methods/finitedifferences/tridiagonaloperator.hpp|const Array & TridiagonalOperator::upperDiagonal() const;+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void TridiagonalOperator::setFirstRow(Real, Real);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void TridiagonalOperator::setMidRow(Size, Real, Real, Real);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void TridiagonalOperator::setMidRows(Real, Real, Real);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void TridiagonalOperator::setLastRow(Real, Real);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void TridiagonalOperator::setTime(Time t);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void TridiagonalOperator::swap(TridiagonalOperator &);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void TimeSetter::setTime(Time t, TridiagonalOperator & L) const;+|v|ql/methods/finitedifferences/tridiagonaloperator.hpp|void swap(TridiagonalOperator &, TridiagonalOperator &);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator(TridiagonalOperator && from);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator & operator=(const TridiagonalOperator & from);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator & operator=(TridiagonalOperator && from);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void setFirstRow(Real valB, Real valC);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void setMidRow(Size i, Real valA, Real valB, Real valC);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void setMidRows(Real valA, Real valB, Real valC);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void setLastRow(Real valA, Real valB);+|?|ql/methods/finitedifferences/tridiagonaloperator.hpp|void swap(TridiagonalOperator & from);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator operator+(const TridiagonalOperator & D);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator operator-(const TridiagonalOperator & D);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator operator+(const TridiagonalOperator & D1, const TridiagonalOperator & D2);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator operator-(const TridiagonalOperator & D1, const TridiagonalOperator & D2);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator operator*(Real a, const TridiagonalOperator & D);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator operator*(const TridiagonalOperator & D, Real a);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|TridiagonalOperator operator/(const TridiagonalOperator & D, Real a);+|v|ql/methods/finitedifferences/tridiagonaloperator.hpp|void swap(TridiagonalOperator & L1, TridiagonalOperator & L2);+| |ql/methods/finitedifferences/utilities/bsmrndcalculator.hpp|BSMRNDCalculator::BSMRNDCalculator(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/methods/finitedifferences/utilities/cevrndcalculator.hpp|CEVRNDCalculator::CEVRNDCalculator(Real f0, Real alpha, Real beta);+| |ql/methods/finitedifferences/utilities/cevrndcalculator.hpp|Real CEVRNDCalculator::massAtZero(Time t) const;+| |ql/methods/finitedifferences/utilities/escroweddividendadjustment.hpp|EscrowedDividendAdjustment::EscrowedDividendAdjustment(DividendSchedule dividendSchedule, Handle<YieldTermStructure> rTS, Handle<YieldTermStructure> qTS, std::function<Real (Date)> toTime, Time maturity);+| |ql/methods/finitedifferences/utilities/escroweddividendadjustment.hpp|Real EscrowedDividendAdjustment::dividendAdjustment(Time t) const;+|x|ql/methods/finitedifferences/utilities/escroweddividendadjustment.hpp|const Handle<YieldTermStructure> & EscrowedDividendAdjustment::riskFreeRate() const;+|x|ql/methods/finitedifferences/utilities/escroweddividendadjustment.hpp|const Handle<YieldTermStructure> & EscrowedDividendAdjustment::dividendYield() const;+|v|ql/methods/finitedifferences/utilities/fdmaffinemodelswapinnervalue.hpp|FdmAffineModelSwapInnerValue::FdmAffineModelSwapInnerValue<ModelType>(ext::shared_ptr<ModelType> disModel, ext::shared_ptr<ModelType> fwdModel, const ext::shared_ptr<FixedVsFloatingSwap> & swap, std::map<Time, Date> exerciseDates, ext::shared_ptr<FdmMesher> mesher, Size direction);+|v|ql/methods/finitedifferences/utilities/fdmaffinemodelswapinnervalue.hpp|FdmAffineModelSwapInnerValue<ModelType>(ext::shared_ptr<ModelType> disModel, ext::shared_ptr<ModelType> fwdModel, const ext::shared_ptr<FixedVsFloatingSwap> & swap, std::map<Time, Date> exerciseDates, ext::shared_ptr<FdmMesher> mesher, Size direction);+| |ql/methods/finitedifferences/utilities/fdmaffinemodelswapinnervalue.hpp|Real innerValue(const FdmLinearOpIterator & iter, Time t);+| |ql/methods/finitedifferences/utilities/fdmaffinemodelswapinnervalue.hpp|Real avgInnerValue(const FdmLinearOpIterator & iter, Time t);+| |ql/methods/finitedifferences/utilities/fdmaffinemodeltermstructure.hpp|FdmAffineModelTermStructure::FdmAffineModelTermStructure(Array r, const Calendar & cal, const DayCounter & dayCounter, const Date & referenceDate, const Date & modelReferenceDate, ext::shared_ptr<AffineModel> model);+| |ql/methods/finitedifferences/utilities/fdmaffinemodeltermstructure.hpp|void FdmAffineModelTermStructure::setVariable(const Array & r);+| |ql/methods/finitedifferences/utilities/fdmdirichletboundary.hpp|FdmDirichletBoundary::FdmDirichletBoundary(const ext::shared_ptr<FdmMesher> & mesher, Real valueOnBoundary, Size direction, Side side);+| |ql/methods/finitedifferences/utilities/fdmdirichletboundary.hpp|void FdmDirichletBoundary::applyBeforeApplying(operator_type &) const;+| |ql/methods/finitedifferences/utilities/fdmdirichletboundary.hpp|void FdmDirichletBoundary::applyBeforeSolving(operator_type &, array_type &) const;+| |ql/methods/finitedifferences/utilities/fdmdirichletboundary.hpp|void FdmDirichletBoundary::applyAfterApplying(array_type &) const;+| |ql/methods/finitedifferences/utilities/fdmdirichletboundary.hpp|void FdmDirichletBoundary::applyAfterSolving(array_type &) const;+| |ql/methods/finitedifferences/utilities/fdmdirichletboundary.hpp|void FdmDirichletBoundary::setTime(Time);+| |ql/methods/finitedifferences/utilities/fdmdirichletboundary.hpp|Real FdmDirichletBoundary::applyAfterApplying(Real x, Real value) const;+| |ql/methods/finitedifferences/utilities/fdmdiscountdirichletboundary.hpp|FdmDiscountDirichletBoundary::FdmDiscountDirichletBoundary(const ext::shared_ptr<FdmMesher> & mesher, const ext::shared_ptr<YieldTermStructure> & rTS, Time maturityTime, Real valueOnBoundary, Size direction, Side side);+| |ql/methods/finitedifferences/utilities/fdmdiscountdirichletboundary.hpp|void FdmDiscountDirichletBoundary::setTime(Time);+| |ql/methods/finitedifferences/utilities/fdmdiscountdirichletboundary.hpp|void FdmDiscountDirichletBoundary::applyBeforeApplying(operator_type &) const;+| |ql/methods/finitedifferences/utilities/fdmdiscountdirichletboundary.hpp|void FdmDiscountDirichletBoundary::applyBeforeSolving(operator_type &, array_type &) const;+| |ql/methods/finitedifferences/utilities/fdmdiscountdirichletboundary.hpp|void FdmDiscountDirichletBoundary::applyAfterApplying(array_type &) const;+| |ql/methods/finitedifferences/utilities/fdmdiscountdirichletboundary.hpp|void FdmDiscountDirichletBoundary::applyAfterSolving(array_type &) const;+| |ql/methods/finitedifferences/utilities/fdmdividendhandler.hpp|FdmDividendHandler::FdmDividendHandler(const DividendSchedule & schedule, const ext::shared_ptr<FdmMesher> & mesher, const Date & referenceDate, const DayCounter & dayCounter, Size equityDirection);+| |ql/methods/finitedifferences/utilities/fdmdividendhandler.hpp|void FdmDividendHandler::applyTo(Array & a, Time t) const;+| |ql/methods/finitedifferences/utilities/fdmdividendhandler.hpp|const std::vector<Time> & FdmDividendHandler::dividendTimes() const;+| |ql/methods/finitedifferences/utilities/fdmdividendhandler.hpp|const std::vector<Date> & FdmDividendHandler::dividendDates() const;+| |ql/methods/finitedifferences/utilities/fdmdividendhandler.hpp|const std::vector<Real> & FdmDividendHandler::dividends() const;+| |ql/methods/finitedifferences/utilities/fdmescrowedloginnervaluecalculator.hpp|FdmEscrowedLogInnerValueCalculator::FdmEscrowedLogInnerValueCalculator(ext::shared_ptr<EscrowedDividendAdjustment> escrowedDividendAdj, ext::shared_ptr<Payoff> payoff, ext::shared_ptr<FdmMesher> mesher, Size direction);+| |ql/methods/finitedifferences/utilities/fdmhestongreensfct.hpp|FdmHestonGreensFct::FdmHestonGreensFct(ext::shared_ptr<FdmMesher> mesher, ext::shared_ptr<HestonProcess> process, FdmSquareRootFwdOp::TransformationType trafoType_, Real l0 = 1.0);+| |ql/methods/finitedifferences/utilities/fdmhestongreensfct.hpp|Array FdmHestonGreensFct::get(Time t, Algorithm algorithm) const;+| |ql/methods/finitedifferences/utilities/fdmindicesonboundary.hpp|FdmIndicesOnBoundary::FdmIndicesOnBoundary(const ext::shared_ptr<FdmLinearOpLayout> & l, Size direction, FdmDirichletBoundary::Side side);+| |ql/methods/finitedifferences/utilities/fdmindicesonboundary.hpp|const std::vector<Size> & FdmIndicesOnBoundary::getIndices() const;+|v|ql/methods/finitedifferences/utilities/fdminnervaluecalculator.hpp|Real FdmInnerValueCalculator::innerValue(const FdmLinearOpIterator & iter, Time t);+|v|ql/methods/finitedifferences/utilities/fdminnervaluecalculator.hpp|Real FdmInnerValueCalculator::avgInnerValue(const FdmLinearOpIterator & iter, Time t);+|v|ql/methods/finitedifferences/utilities/fdminnervaluecalculator.hpp|FdmCellAveragingInnerValue::FdmCellAveragingInnerValue(ext::shared_ptr<Payoff> payoff, ext::shared_ptr<FdmMesher> mesher, Size direction, std::function<Real (Real)> gridMapping = [ ](Real x) { return x; });+|v|ql/methods/finitedifferences/utilities/fdminnervaluecalculator.hpp|FdmLogInnerValue::FdmLogInnerValue(const ext::shared_ptr<Payoff> & payoff, const ext::shared_ptr<FdmMesher> & mesher, Size direction);+|v|ql/methods/finitedifferences/utilities/fdminnervaluecalculator.hpp|FdmLogBasketInnerValue::FdmLogBasketInnerValue(ext::shared_ptr<BasketPayoff> payoff, ext::shared_ptr<FdmMesher> mesher);+| |ql/methods/finitedifferences/utilities/fdmmesherintegral.hpp|FdmMesherIntegral::FdmMesherIntegral(const ext::shared_ptr<FdmMesherComposite> & mesher, const std::function<Real (const Array &, const Array &)> & integrator1d);+| |ql/methods/finitedifferences/utilities/fdmmesherintegral.hpp|Real FdmMesherIntegral::integrate(const Array & f) const;+|v|ql/methods/finitedifferences/utilities/fdmquantohelper.hpp|FdmQuantoHelper::FdmQuantoHelper(ext::shared_ptr<YieldTermStructure> rTS, ext::shared_ptr<YieldTermStructure> fTS, ext::shared_ptr<BlackVolTermStructure> fxVolTS, Real equityFxCorrelation, Real exchRateATMlevel);+|v|ql/methods/finitedifferences/utilities/fdmquantohelper.hpp|Rate FdmQuantoHelper::quantoAdjustment(Volatility equityVol, Time t1, Time t2) const;+|v|ql/methods/finitedifferences/utilities/fdmquantohelper.hpp|Array FdmQuantoHelper::quantoAdjustment(const Array & equityVol, Time t1, Time t2) const;+| |ql/methods/finitedifferences/utilities/fdmshoutloginnervaluecalculator.hpp|FdmShoutLogInnerValueCalculator::FdmShoutLogInnerValueCalculator(Handle<BlackVolTermStructure> blackVolatility, ext::shared_ptr<EscrowedDividendAdjustment> escrowedDividendAdj, Time maturity, ext::shared_ptr<PlainVanillaPayoff> payoff, ext::shared_ptr<FdmMesher> mesher, Size direction);+| |ql/methods/finitedifferences/utilities/fdmtimedepdirichletboundary.hpp|FdmTimeDepDirichletBoundary::FdmTimeDepDirichletBoundary(const ext::shared_ptr<FdmMesher> & mesher, std::function<Real (Real)> valueOnBoundary, Size direction, Side side);+| |ql/methods/finitedifferences/utilities/fdmtimedepdirichletboundary.hpp|FdmTimeDepDirichletBoundary::FdmTimeDepDirichletBoundary(const ext::shared_ptr<FdmMesher> & mesher, std::function<Array (Real)> valueOnBoundary, Size direction, Side side);+| |ql/methods/finitedifferences/utilities/fdmtimedepdirichletboundary.hpp|void FdmTimeDepDirichletBoundary::setTime(Time);+| |ql/methods/finitedifferences/utilities/fdmtimedepdirichletboundary.hpp|void FdmTimeDepDirichletBoundary::applyBeforeApplying(operator_type &) const;+| |ql/methods/finitedifferences/utilities/fdmtimedepdirichletboundary.hpp|void FdmTimeDepDirichletBoundary::applyBeforeSolving(operator_type &, array_type &) const;+| |ql/methods/finitedifferences/utilities/fdmtimedepdirichletboundary.hpp|void FdmTimeDepDirichletBoundary::applyAfterApplying(array_type &) const;+| |ql/methods/finitedifferences/utilities/fdmtimedepdirichletboundary.hpp|void FdmTimeDepDirichletBoundary::applyAfterSolving(array_type &) const;+| |ql/methods/finitedifferences/utilities/gbsmrndcalculator.hpp|GBSMRNDCalculator::GBSMRNDCalculator(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/methods/finitedifferences/utilities/hestonrndcalculator.hpp|HestonRNDCalculator::HestonRNDCalculator(ext::shared_ptr<HestonProcess> hestonProcess, Real integrationEps = 1e-6, Size maxIntegrationIterations = 10000UL);+| |ql/methods/finitedifferences/utilities/localvolrndcalculator.hpp|LocalVolRNDCalculator::LocalVolRNDCalculator(ext::shared_ptr<Quote> spot, ext::shared_ptr<YieldTermStructure> rTS, ext::shared_ptr<YieldTermStructure> qTS, const ext::shared_ptr<LocalVolTermStructure> & localVol, Size xGrid = 101, Size tGrid = 51, Real x0Density = 0.1, Real localVolProbEps = 1e-6, Size maxIter = 10000, Time gaussianStepSize = - Null<Time>());+| |ql/methods/finitedifferences/utilities/localvolrndcalculator.hpp|LocalVolRNDCalculator::LocalVolRNDCalculator(ext::shared_ptr<Quote> spot, ext::shared_ptr<YieldTermStructure> rTS, ext::shared_ptr<YieldTermStructure> qTS, ext::shared_ptr<LocalVolTermStructure> localVol, const ext::shared_ptr<TimeGrid> & timeGrid, Size xGrid = 101, Real x0Density = 0.1, Real eps = 1e-6, Size maxIter = 10000, Time gaussianStepSize = - Null<Time>());+| |ql/methods/finitedifferences/utilities/localvolrndcalculator.hpp|ext::shared_ptr<TimeGrid> LocalVolRNDCalculator::timeGrid() const;+| |ql/methods/finitedifferences/utilities/localvolrndcalculator.hpp|ext::shared_ptr<Fdm1dMesher> LocalVolRNDCalculator::mesher(Time t) const;+| |ql/methods/finitedifferences/utilities/localvolrndcalculator.hpp|std::vector<Size> LocalVolRNDCalculator::rescaleTimeSteps() const;+| |ql/methods/finitedifferences/utilities/riskneutraldensitycalculator.hpp|Real RiskNeutralDensityCalculator::pdf(Real x, Time t) const;+| |ql/methods/finitedifferences/utilities/riskneutraldensitycalculator.hpp|Real RiskNeutralDensityCalculator::cdf(Real x, Time t) const;+| |ql/methods/finitedifferences/utilities/riskneutraldensitycalculator.hpp|Real RiskNeutralDensityCalculator::invcdf(Real p, Time t) const;+| |ql/methods/finitedifferences/utilities/riskneutraldensitycalculator.hpp|InvCDFHelper::InvCDFHelper(const RiskNeutralDensityCalculator * calculator, Real guess, Real accuracy, Size maxEvaluations, Real stepSize = 0.01);+| |ql/methods/finitedifferences/utilities/riskneutraldensitycalculator.hpp|Real InvCDFHelper::inverseCDF(Real p, Time t) const;+| |ql/methods/finitedifferences/utilities/smilesectionrndcalculator.hpp|SmileSectionRNDCalculator::SmileSectionRNDCalculator(ext::shared_ptr<SmileSection> smile, Size nStrikes = 200, Real nStd = 8.0);+| |ql/methods/finitedifferences/utilities/smilesectionrndcalculator.hpp|Real SmileSectionRNDCalculator::pdf(Real x) const;+| |ql/methods/finitedifferences/utilities/smilesectionrndcalculator.hpp|Real SmileSectionRNDCalculator::cdf(Real x) const;+| |ql/methods/finitedifferences/utilities/smilesectionrndcalculator.hpp|Real SmileSectionRNDCalculator::invcdf(Real p) const;+| |ql/methods/finitedifferences/utilities/squarerootprocessrndcalculator.hpp|SquareRootProcessRNDCalculator::SquareRootProcessRNDCalculator(Real v0, Real kappa, Real theta, Real sigma);+| |ql/methods/finitedifferences/utilities/squarerootprocessrndcalculator.hpp|Real SquareRootProcessRNDCalculator::stationary_pdf(Real v) const;+| |ql/methods/finitedifferences/utilities/squarerootprocessrndcalculator.hpp|Real SquareRootProcessRNDCalculator::stationary_cdf(Real v) const;+| |ql/methods/finitedifferences/utilities/squarerootprocessrndcalculator.hpp|Real SquareRootProcessRNDCalculator::stationary_invcdf(Real q) const;+| |ql/methods/lattices/binomialtree.hpp|BinomialTree::BinomialTree<T>(const ext::shared_ptr<StochasticProcess1D> & process, Time end, Size steps);+| |ql/methods/lattices/binomialtree.hpp|Size BinomialTree::size(Size i) const;+| |ql/methods/lattices/binomialtree.hpp|Size BinomialTree::descendant(Size, Size index, Size branch) const;+| |ql/methods/lattices/binomialtree.hpp|EqualProbabilitiesBinomialTree::EqualProbabilitiesBinomialTree<T>(const ext::shared_ptr<StochasticProcess1D> & process, Time end, Size steps);+| |ql/methods/lattices/binomialtree.hpp|Real EqualProbabilitiesBinomialTree::underlying(Size i, Size index) const;+| |ql/methods/lattices/binomialtree.hpp|Real EqualProbabilitiesBinomialTree::probability(Size, Size, Size) const;+| |ql/methods/lattices/binomialtree.hpp|EqualJumpsBinomialTree::EqualJumpsBinomialTree<T>(const ext::shared_ptr<StochasticProcess1D> & process, Time end, Size steps);+| |ql/methods/lattices/binomialtree.hpp|Real EqualJumpsBinomialTree::underlying(Size i, Size index) const;+| |ql/methods/lattices/binomialtree.hpp|Real EqualJumpsBinomialTree::probability(Size, Size, Size branch) const;+| |ql/methods/lattices/binomialtree.hpp|JarrowRudd::JarrowRudd(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/methods/lattices/binomialtree.hpp|CoxRossRubinstein::CoxRossRubinstein(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/methods/lattices/binomialtree.hpp|AdditiveEQPBinomialTree::AdditiveEQPBinomialTree(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/methods/lattices/binomialtree.hpp|Trigeorgis::Trigeorgis(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/methods/lattices/binomialtree.hpp|Tian::Tian(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/methods/lattices/binomialtree.hpp|Real Tian::underlying(Size i, Size index) const;+| |ql/methods/lattices/binomialtree.hpp|Real Tian::probability(Size, Size, Size branch) const;+| |ql/methods/lattices/binomialtree.hpp|LeisenReimer::LeisenReimer(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/methods/lattices/binomialtree.hpp|Real LeisenReimer::underlying(Size i, Size index) const;+| |ql/methods/lattices/binomialtree.hpp|Real LeisenReimer::probability(Size, Size, Size branch) const;+| |ql/methods/lattices/binomialtree.hpp|Joshi4::Joshi4(const ext::shared_ptr<StochasticProcess1D> &, Time end, Size steps, Real strike);+| |ql/methods/lattices/binomialtree.hpp|Real Joshi4::underlying(Size i, Size index) const;+| |ql/methods/lattices/binomialtree.hpp|Real Joshi4::probability(Size, Size, Size branch) const;+| |ql/methods/lattices/bsmlattice.hpp|BlackScholesLattice::BlackScholesLattice<T>(const ext::shared_ptr<T> & tree, Rate riskFreeRate, Time end, Size steps);+|x|ql/methods/lattices/bsmlattice.hpp|Rate BlackScholesLattice::riskFreeRate() const;+| |ql/methods/lattices/bsmlattice.hpp|Time BlackScholesLattice::dt() const;+| |ql/methods/lattices/bsmlattice.hpp|Size BlackScholesLattice::size(Size i) const;+| |ql/methods/lattices/bsmlattice.hpp|DiscountFactor BlackScholesLattice::discount(Size, Size) const;+| |ql/methods/lattices/bsmlattice.hpp|Size BlackScholesLattice::descendant(Size i, Size index, Size branch) const;+| |ql/methods/lattices/bsmlattice.hpp|Real BlackScholesLattice::probability(Size i, Size index, Size branch) const;+| |ql/methods/lattices/bsmlattice.hpp|BlackScholesLattice<T>(const ext::shared_ptr<T> & tree, Rate riskFreeRate, Time end, Size steps);+| |ql/methods/lattices/bsmlattice.hpp|void stepback(Size i, const Array & values, Array & newValues) const;+| |ql/methods/lattices/lattice.hpp|TreeLattice::TreeLattice<Impl>(const TimeGrid & timeGrid, Size n);+| |ql/methods/lattices/lattice.hpp|const Array & TreeLattice::statePrices(Size i) const;+| |ql/methods/lattices/lattice.hpp|void TreeLattice::stepback(Size i, const Array & values, Array & newValues) const;+| |ql/methods/lattices/lattice.hpp|void computeStatePrices(Size until) const;+| |ql/methods/lattices/lattice.hpp|Real presentValue(DiscretizedAsset & asset) const;+| |ql/methods/lattices/lattice.hpp|void initialize(DiscretizedAsset & asset, Time t) const;+| |ql/methods/lattices/lattice.hpp|void rollback(DiscretizedAsset & asset, Time to) const;+| |ql/methods/lattices/lattice.hpp|void partialRollback(DiscretizedAsset & asset, Time to) const;+| |ql/methods/lattices/lattice1d.hpp|TreeLattice1D::TreeLattice1D<Impl>(const TimeGrid & timeGrid, Size n);+| |ql/methods/lattices/lattice1d.hpp|Real TreeLattice1D::underlying(Size i, Size index) const;+| |ql/methods/lattices/lattice2d.hpp|TreeLattice2D::TreeLattice2D<Impl, T>(const ext::shared_ptr<T> & tree1, ext::shared_ptr<T> tree2, Real correlation);+| |ql/methods/lattices/lattice2d.hpp|Size TreeLattice2D::size(Size i) const;+| |ql/methods/lattices/lattice2d.hpp|Size TreeLattice2D::descendant(Size i, Size index, Size branch) const;+| |ql/methods/lattices/lattice2d.hpp|Real TreeLattice2D::probability(Size i, Size index, Size branch) const;+| |ql/methods/lattices/lattice2d.hpp|TreeLattice2D<Impl, T>(const ext::shared_ptr<T> & tree1, ext::shared_ptr<T> tree2, Real correlation);+| |ql/methods/lattices/tflattice.hpp|TsiveriotisFernandesLattice::TsiveriotisFernandesLattice<T>(const ext::shared_ptr<T> & tree, Rate riskFreeRate, Time end, Size steps, Spread creditSpread, Volatility volatility, Spread divYield);+|x|ql/methods/lattices/tflattice.hpp|Spread TsiveriotisFernandesLattice::creditSpread() const;+| |ql/methods/lattices/tflattice.hpp|TsiveriotisFernandesLattice<T>(const ext::shared_ptr<T> & tree, Rate riskFreeRate, Time end, Size steps, Spread creditSpread, Volatility sigma, Spread divYield);+| |ql/methods/lattices/tflattice.hpp|void stepback(Size i, const Array & values, const Array & conversionProbability, const Array & spreadAdjustedRate, Array & newValues, Array & newConversionProbability, Array & newSpreadAdjustedRate) const;+| |ql/methods/lattices/tflattice.hpp|void rollback(DiscretizedAsset & asset, Time to) const;+| |ql/methods/lattices/tflattice.hpp|void partialRollback(DiscretizedAsset & asset, Time to) const;+| |ql/methods/lattices/tree.hpp|Tree::Tree<T>(Size columns);+|x|ql/methods/lattices/tree.hpp|Size Tree::columns() const;+| |ql/methods/lattices/trinomialtree.hpp|TrinomialTree::TrinomialTree(const ext::shared_ptr<StochasticProcess1D> & process, const TimeGrid & timeGrid, bool isPositive = false);+| |ql/methods/lattices/trinomialtree.hpp|Real TrinomialTree::dx(Size i) const;+|x|ql/methods/lattices/trinomialtree.hpp|const TimeGrid & TrinomialTree::timeGrid() const;+| |ql/methods/lattices/trinomialtree.hpp|Size TrinomialTree::size(Size i) const;+| |ql/methods/lattices/trinomialtree.hpp|Real TrinomialTree::underlying(Size i, Size index) const;+| |ql/methods/lattices/trinomialtree.hpp|Size TrinomialTree::descendant(Size i, Size index, Size branch) const;+| |ql/methods/lattices/trinomialtree.hpp|Real TrinomialTree::probability(Size i, Size index, Size branch) const;+| |ql/methods/lattices/trinomialtree.hpp|Branching::Branching();+| |ql/methods/lattices/trinomialtree.hpp|Size Branching::descendant(Size index, Size branch) const;+| |ql/methods/lattices/trinomialtree.hpp|Real Branching::probability(Size index, Size branch) const;+| |ql/methods/lattices/trinomialtree.hpp|Size Branching::size() const;+| |ql/methods/lattices/trinomialtree.hpp|Integer Branching::jMin() const;+| |ql/methods/lattices/trinomialtree.hpp|Integer Branching::jMax() const;+| |ql/methods/lattices/trinomialtree.hpp|void Branching::add(Integer k, Real p1, Real p2, Real p3);+| |ql/methods/lattices/trinomialtree.hpp|Real probability(Size i, Size j, Size b) const;+| |ql/methods/montecarlo/brownianbridge.hpp|BrownianBridge::BrownianBridge(Size steps);+| |ql/methods/montecarlo/brownianbridge.hpp|BrownianBridge::BrownianBridge(const std::vector<Time> & times);+| |ql/methods/montecarlo/brownianbridge.hpp|BrownianBridge::BrownianBridge(const TimeGrid & timeGrid);+| |ql/methods/montecarlo/brownianbridge.hpp|Size BrownianBridge::size() const;+| |ql/methods/montecarlo/brownianbridge.hpp|const std::vector<Time> & BrownianBridge::times() const;+| |ql/methods/montecarlo/brownianbridge.hpp|const std::vector<Size> & BrownianBridge::bridgeIndex() const;+| |ql/methods/montecarlo/brownianbridge.hpp|const std::vector<Size> & BrownianBridge::leftIndex() const;+| |ql/methods/montecarlo/brownianbridge.hpp|const std::vector<Size> & BrownianBridge::rightIndex() const;+| |ql/methods/montecarlo/brownianbridge.hpp|const std::vector<Real> & BrownianBridge::leftWeight() const;+| |ql/methods/montecarlo/brownianbridge.hpp|const std::vector<Real> & BrownianBridge::rightWeight() const;+| |ql/methods/montecarlo/brownianbridge.hpp|const std::vector<Real> & BrownianBridge::stdDeviation() const;+| |ql/methods/montecarlo/earlyexercisepathpricer.hpp|static Size EarlyExerciseTraits::pathLength(const Path & path);+| |ql/methods/montecarlo/earlyexercisepathpricer.hpp|static Size EarlyExerciseTraits::pathLength(const MultiPath & path);+| |ql/methods/montecarlo/earlyexercisepathpricer.hpp|ValueType EarlyExercisePathPricer::operator()(const PathType & path, TimeType t) const;+| |ql/methods/montecarlo/earlyexercisepathpricer.hpp|StateType EarlyExercisePathPricer::state(const PathType & path, TimeType t) const;+| |ql/methods/montecarlo/earlyexercisepathpricer.hpp|std::vector<std::function<ValueType (StateType)>> EarlyExercisePathPricer::basisSystem() const;+| |ql/methods/montecarlo/exercisestrategy.hpp|std::vector<Time> ExerciseStrategy::exerciseTimes() const;+| |ql/methods/montecarlo/exercisestrategy.hpp|std::vector<Time> ExerciseStrategy::relevantTimes() const;+| |ql/methods/montecarlo/exercisestrategy.hpp|void ExerciseStrategy::reset();+| |ql/methods/montecarlo/exercisestrategy.hpp|bool ExerciseStrategy::exercise(const State & currentState) const;+| |ql/methods/montecarlo/exercisestrategy.hpp|void ExerciseStrategy::nextStep(const State & currentState);+| |ql/methods/montecarlo/exercisestrategy.hpp|std::unique_ptr<ExerciseStrategy<State>> ExerciseStrategy::clone() const;+| |ql/methods/montecarlo/genericlsregression.hpp|Real genericLongstaffSchwartzRegression(std::vector<std::vector<NodeData>> & simulationData, std::vector<std::vector<Real>> & basisCoefficients);+| |ql/methods/montecarlo/longstaffschwartzpathpricer.hpp|LongstaffSchwartzPathPricer::LongstaffSchwartzPathPricer<PathType>(const TimeGrid & times, ext::shared_ptr<EarlyExercisePathPricer<PathType>>, const ext::shared_ptr<YieldTermStructure> & termStructure);+| |ql/methods/montecarlo/longstaffschwartzpathpricer.hpp|void LongstaffSchwartzPathPricer::calibrate();+| |ql/methods/montecarlo/longstaffschwartzpathpricer.hpp|Real LongstaffSchwartzPathPricer::exerciseProbability() const;+| |ql/methods/montecarlo/longstaffschwartzpathpricer.hpp|LongstaffSchwartzPathPricer<PathType>(const TimeGrid & times, ext::shared_ptr<EarlyExercisePathPricer<PathType>> pathPricer, const ext::shared_ptr<YieldTermStructure> & termStructure);+| |ql/methods/montecarlo/longstaffschwartzpathpricer.hpp|Real operator()(const PathType & path) const;+|u|ql/methods/montecarlo/lsmbasissystem.hpp|static std::vector<std::function<Real (Real)>> LsmBasisSystem::pathBasisSystem(Size order, PolynomialType type);+|u|ql/methods/montecarlo/lsmbasissystem.hpp|static std::vector<std::function<Real (Array)>> LsmBasisSystem::multiPathBasisSystem(Size dim, Size order, PolynomialType type);+| |ql/methods/montecarlo/montecarlomodel.hpp|MonteCarloModel::MonteCarloModel<MC, RNG, S>(ext::shared_ptr<path_generator_type> pathGenerator, ext::shared_ptr<path_pricer_type> pathPricer, stats_type sampleAccumulator, bool antitheticVariate, ext::shared_ptr<path_pricer_type> cvPathPricer = ext::shared_ptr<path_pricer_type>(), result_type cvOptionValue = result_type(), ext::shared_ptr<path_generator_type> cvPathGenerator = ext::shared_ptr<path_generator_type>());+| |ql/methods/montecarlo/montecarlomodel.hpp|void MonteCarloModel::addSamples(Size samples);+|x|ql/methods/montecarlo/montecarlomodel.hpp|const stats_type & MonteCarloModel::sampleAccumulator() const;+| |ql/methods/montecarlo/montecarlomodel.hpp|const typename MonteCarloModel<MC, RNG, S>::stats_type & sampleAccumulator() const;+| |ql/methods/montecarlo/multipath.hpp|MultiPath::MultiPath();+| |ql/methods/montecarlo/multipath.hpp|MultiPath::MultiPath(Size nAsset, const TimeGrid & timeGrid);+| |ql/methods/montecarlo/multipath.hpp|MultiPath::MultiPath(std::vector<Path> multiPath);+| |ql/methods/montecarlo/multipath.hpp|Size MultiPath::assetNumber() const;+| |ql/methods/montecarlo/multipath.hpp|Size MultiPath::pathSize() const;+| |ql/methods/montecarlo/multipath.hpp|const Path & MultiPath::operator[](Size j) const;+| |ql/methods/montecarlo/multipath.hpp|const Path & MultiPath::at(Size j) const;+| |ql/methods/montecarlo/multipath.hpp|Path & MultiPath::operator[](Size j);+| |ql/methods/montecarlo/multipath.hpp|Path & MultiPath::at(Size j);+| |ql/methods/montecarlo/multipathgenerator.hpp|MultiPathGenerator::MultiPathGenerator<GSG>(const ext::shared_ptr<StochasticProcess> &, const TimeGrid &, GSG generator, bool brownianBridge = false);+| |ql/methods/montecarlo/multipathgenerator.hpp|const sample_type & MultiPathGenerator::next() const;+| |ql/methods/montecarlo/multipathgenerator.hpp|const sample_type & MultiPathGenerator::antithetic() const;+| |ql/methods/montecarlo/multipathgenerator.hpp|MultiPathGenerator<GSG>(const ext::shared_ptr<StochasticProcess> & process, const TimeGrid & times, GSG generator, bool brownianBridge);+| |ql/methods/montecarlo/multipathgenerator.hpp|const typename MultiPathGenerator<GSG>::sample_type & next() const;+| |ql/methods/montecarlo/multipathgenerator.hpp|const typename MultiPathGenerator<GSG>::sample_type & antithetic() const;+| |ql/methods/montecarlo/multipathgenerator.hpp|const typename MultiPathGenerator<GSG>::sample_type & next(bool antithetic) const;+| |ql/methods/montecarlo/parametricexercise.hpp|std::vector<Size> ParametricExercise::numberOfVariables() const;+| |ql/methods/montecarlo/parametricexercise.hpp|std::vector<Size> ParametricExercise::numberOfParameters() const;+| |ql/methods/montecarlo/parametricexercise.hpp|bool ParametricExercise::exercise(Size exerciseNumber, const std::vector<Real> & parameters, const std::vector<Real> & variables) const;+| |ql/methods/montecarlo/parametricexercise.hpp|void ParametricExercise::guess(Size exerciseNumber, std::vector<Real> & parameters) const;+| |ql/methods/montecarlo/parametricexercise.hpp|Real genericEarlyExerciseOptimization(std::vector<std::vector<NodeData>> & simulationData, const ParametricExercise & exercise, std::vector<std::vector<Real>> & parameters, const EndCriteria & endCriteria, OptimizationMethod & method);+| |ql/methods/montecarlo/path.hpp|Path::Path(TimeGrid timeGrid, Array values = Array());+| |ql/methods/montecarlo/path.hpp|bool Path::empty() const;+| |ql/methods/montecarlo/path.hpp|Size Path::length() const;+|x|ql/methods/montecarlo/path.hpp|Real Path::operator[](Size i) const;+| |ql/methods/montecarlo/path.hpp|Real Path::at(Size i) const;+|x|ql/methods/montecarlo/path.hpp|Real & Path::operator[](Size i);+| |ql/methods/montecarlo/path.hpp|Real & Path::at(Size i);+|x|ql/methods/montecarlo/path.hpp|Real Path::value(Size i) const;+|x|ql/methods/montecarlo/path.hpp|Real & Path::value(Size i);+|x|ql/methods/montecarlo/path.hpp|Time Path::time(Size i) const;+| |ql/methods/montecarlo/path.hpp|Real Path::front() const;+| |ql/methods/montecarlo/path.hpp|Real & Path::front();+| |ql/methods/montecarlo/path.hpp|Real Path::back() const;+| |ql/methods/montecarlo/path.hpp|Real & Path::back();+|x|ql/methods/montecarlo/path.hpp|const TimeGrid & Path::timeGrid() const;+| |ql/methods/montecarlo/path.hpp|iterator Path::begin() const;+| |ql/methods/montecarlo/path.hpp|iterator Path::end() const;+| |ql/methods/montecarlo/path.hpp|reverse_iterator Path::rbegin() const;+| |ql/methods/montecarlo/path.hpp|reverse_iterator Path::rend() const;+| |ql/methods/montecarlo/path.hpp|Path(TimeGrid timeGrid, Array values);+| |ql/methods/montecarlo/path.hpp|Real operator[](Size i) const;+| |ql/methods/montecarlo/path.hpp|Real & operator[](Size i);+| |ql/methods/montecarlo/path.hpp|Path::iterator begin() const;+| |ql/methods/montecarlo/path.hpp|Path::iterator end() const;+| |ql/methods/montecarlo/path.hpp|Path::reverse_iterator rbegin() const;+| |ql/methods/montecarlo/path.hpp|Path::reverse_iterator rend() const;+|?|ql/methods/montecarlo/pathgenerator.hpp|PathGenerator::PathGenerator<GSG>(const ext::shared_ptr<StochasticProcess> &, Time length, Size timeSteps, GSG generator, bool brownianBridge);+|?|ql/methods/montecarlo/pathgenerator.hpp|PathGenerator::PathGenerator<GSG>(const ext::shared_ptr<StochasticProcess> &, TimeGrid timeGrid, GSG generator, bool brownianBridge);+|v|ql/methods/montecarlo/pathgenerator.hpp|const sample_type & PathGenerator::next() const;+|v|ql/methods/montecarlo/pathgenerator.hpp|const sample_type & PathGenerator::antithetic() const;+| |ql/methods/montecarlo/pathgenerator.hpp|Size PathGenerator::size() const;+| |ql/methods/montecarlo/pathgenerator.hpp|const TimeGrid & PathGenerator::timeGrid() const;+|?|ql/methods/montecarlo/pathgenerator.hpp|PathGenerator<GSG>(const ext::shared_ptr<StochasticProcess> & process, Time length, Size timeSteps, GSG generator, bool brownianBridge);+|?|ql/methods/montecarlo/pathgenerator.hpp|PathGenerator<GSG>(const ext::shared_ptr<StochasticProcess> & process, TimeGrid timeGrid, GSG generator, bool brownianBridge);+| |ql/methods/montecarlo/pathgenerator.hpp|const typename PathGenerator<GSG>::sample_type & next() const;+| |ql/methods/montecarlo/pathgenerator.hpp|const typename PathGenerator<GSG>::sample_type & antithetic() const;+| |ql/methods/montecarlo/pathgenerator.hpp|const typename PathGenerator<GSG>::sample_type & next(bool antithetic) const;+| |ql/methods/montecarlo/pathpricer.hpp|ValueType PathPricer::operator()(const PathType & path) const;+| |ql/methods/montecarlo/sample.hpp|Sample::Sample<T>(T value, Real weight);+| |ql/models/calibrationhelper.hpp|Real CalibrationHelper::calibrationError();+| |ql/models/calibrationhelper.hpp|BlackCalibrationHelper::BlackCalibrationHelper(Handle<Quote> volatility, CalibrationErrorType calibrationErrorType = RelativePriceError, const VolatilityType type = ShiftedLognormal, const Real shift = 0.0);+|x|ql/models/calibrationhelper.hpp|VolatilityType BlackCalibrationHelper::volatilityType() const;+|v|ql/models/calibrationhelper.hpp|Real BlackCalibrationHelper::marketValue() const;+|v|ql/models/calibrationhelper.hpp|Real BlackCalibrationHelper::modelValue() const;+| |ql/models/calibrationhelper.hpp|void BlackCalibrationHelper::addTimesTo(std::list<Time> & times) const;+|v|ql/models/calibrationhelper.hpp|Volatility BlackCalibrationHelper::impliedVolatility(Real targetValue, Real accuracy, Size maxEvaluations, Volatility minVol, Volatility maxVol) const;+|v|ql/models/calibrationhelper.hpp|Real BlackCalibrationHelper::blackPrice(Volatility volatility) const;+|v|ql/models/calibrationhelper.hpp|void BlackCalibrationHelper::setPricingEngine(const ext::shared_ptr<PricingEngine> & engine);+|v|ql/models/equity/batesmodel.hpp|BatesModel::BatesModel(const ext::shared_ptr<BatesProcess> & process);+|x|ql/models/equity/batesmodel.hpp|Real BatesModel::nu() const;+|x|ql/models/equity/batesmodel.hpp|Real BatesModel::delta() const;+|x|ql/models/equity/batesmodel.hpp|Real BatesModel::lambda() const;+| |ql/models/equity/batesmodel.hpp|BatesDetJumpModel::BatesDetJumpModel(const ext::shared_ptr<BatesProcess> & process, Real kappaLambda = 1.0, Real thetaLambda = 0.1);+| |ql/models/equity/batesmodel.hpp|Real BatesDetJumpModel::kappaLambda() const;+| |ql/models/equity/batesmodel.hpp|Real BatesDetJumpModel::thetaLambda() const;+| |ql/models/equity/batesmodel.hpp|BatesDoubleExpModel::BatesDoubleExpModel(const ext::shared_ptr<HestonProcess> & process, Real lambda = 0.1, Real nuUp = 0.1, Real nuDown = 0.1, Real p = 0.5);+| |ql/models/equity/batesmodel.hpp|Real BatesDoubleExpModel::p() const;+| |ql/models/equity/batesmodel.hpp|Real BatesDoubleExpModel::nuDown() const;+| |ql/models/equity/batesmodel.hpp|Real BatesDoubleExpModel::nuUp() const;+| |ql/models/equity/batesmodel.hpp|Real BatesDoubleExpModel::lambda() const;+| |ql/models/equity/batesmodel.hpp|BatesDoubleExpDetJumpModel::BatesDoubleExpDetJumpModel(const ext::shared_ptr<HestonProcess> & process, Real lambda = 0.1, Real nuUp = 0.1, Real nuDown = 0.1, Real p = 0.5, Real kappaLambda = 1.0, Real thetaLambda = 0.1);+| |ql/models/equity/batesmodel.hpp|Real BatesDoubleExpDetJumpModel::kappaLambda() const;+| |ql/models/equity/batesmodel.hpp|Real BatesDoubleExpDetJumpModel::thetaLambda() const;+|v|ql/models/equity/gjrgarchmodel.hpp|GJRGARCHModel::GJRGARCHModel(const ext::shared_ptr<GJRGARCHProcess> & process);+|x|ql/models/equity/gjrgarchmodel.hpp|Real GJRGARCHModel::omega() const;+|x|ql/models/equity/gjrgarchmodel.hpp|Real GJRGARCHModel::alpha() const;+|x|ql/models/equity/gjrgarchmodel.hpp|Real GJRGARCHModel::beta() const;+|x|ql/models/equity/gjrgarchmodel.hpp|Real GJRGARCHModel::gamma() const;+|x|ql/models/equity/gjrgarchmodel.hpp|Real GJRGARCHModel::lambda() const;+|x|ql/models/equity/gjrgarchmodel.hpp|Real GJRGARCHModel::v0() const;+|x|ql/models/equity/gjrgarchmodel.hpp|ext::shared_ptr<GJRGARCHProcess> GJRGARCHModel::process() const;+|v|ql/models/equity/hestonmodel.hpp|HestonModel::HestonModel(const ext::shared_ptr<HestonProcess> & process);+|x|ql/models/equity/hestonmodel.hpp|Real HestonModel::theta() const;+|x|ql/models/equity/hestonmodel.hpp|Real HestonModel::kappa() const;+|x|ql/models/equity/hestonmodel.hpp|Real HestonModel::sigma() const;+|x|ql/models/equity/hestonmodel.hpp|Real HestonModel::rho() const;+|x|ql/models/equity/hestonmodel.hpp|Real HestonModel::v0() const;+|x|ql/models/equity/hestonmodel.hpp|ext::shared_ptr<HestonProcess> HestonModel::process() const;+| |ql/models/equity/hestonmodel.hpp|bool Impl::test(const Array & params) const;+| |ql/models/equity/hestonmodel.hpp|FellerConstraint::FellerConstraint();+|x|ql/models/equity/hestonmodelhelper.hpp|HestonModelHelper::HestonModelHelper(const Period & maturity, Calendar calendar, Real s0, Real strikePrice, const Handle<Quote> & volatility, const Handle<YieldTermStructure> & riskFreeRate, const Handle<YieldTermStructure> & dividendYield, BlackCalibrationHelper::CalibrationErrorType errorType = BlackCalibrationHelper::RelativePriceError);+|v|ql/models/equity/hestonmodelhelper.hpp|HestonModelHelper::HestonModelHelper(const Period & maturity, Calendar calendar, const Handle<Quote> & s0, Real strikePrice, const Handle<Quote> & volatility, const Handle<YieldTermStructure> & riskFreeRate, const Handle<YieldTermStructure> & dividendYield, BlackCalibrationHelper::CalibrationErrorType errorType = BlackCalibrationHelper::RelativePriceError);+|v|ql/models/equity/hestonmodelhelper.hpp|Real HestonModelHelper::blackPrice(Real volatility) const;+|x|ql/models/equity/hestonmodelhelper.hpp|Time HestonModelHelper::maturity() const;+|v|ql/models/equity/hestonslvfdmmodel.hpp|HestonSLVFDMModel::HestonSLVFDMModel(Handle<LocalVolTermStructure> localVol, Handle<HestonModel> hestonModel, const Date & endDate, HestonSLVFokkerPlanckFdmParams params, bool logging = false, std::vector<Date> mandatoryDates = std::vector<Date>(), Real mixingFactor = 1.0);+|x|ql/models/equity/hestonslvfdmmodel.hpp|ext::shared_ptr<HestonProcess> HestonSLVFDMModel::hestonProcess() const;+|x|ql/models/equity/hestonslvfdmmodel.hpp|ext::shared_ptr<LocalVolTermStructure> HestonSLVFDMModel::localVol() const;+|v|ql/models/equity/hestonslvfdmmodel.hpp|ext::shared_ptr<LocalVolTermStructure> HestonSLVFDMModel::leverageFunction() const;+|v|ql/models/equity/hestonslvfdmmodel.hpp|const std::list<LogEntry> & HestonSLVFDMModel::logEntries() const;+|x|ql/models/equity/hestonslvmcmodel.hpp|ext::shared_ptr<HestonProcess> HestonSLVMCModel::hestonProcess() const;+|x|ql/models/equity/hestonslvmcmodel.hpp|ext::shared_ptr<LocalVolTermStructure> HestonSLVMCModel::localVol() const;+|v|ql/models/equity/hestonslvmcmodel.hpp|ext::shared_ptr<LocalVolTermStructure> HestonSLVMCModel::leverageFunction() const;+| |ql/models/equity/piecewisetimedependenthestonmodel.hpp|PiecewiseTimeDependentHestonModel::PiecewiseTimeDependentHestonModel(const Handle<YieldTermStructure> & riskFreeRate, const Handle<YieldTermStructure> & dividendYield, const Handle<Quote> & s0, Real v0, const Parameter & theta, const Parameter & kappa, const Parameter & sigma, const Parameter & rho, TimeGrid timeGrid);+| |ql/models/equity/piecewisetimedependenthestonmodel.hpp|Real PiecewiseTimeDependentHestonModel::theta(Time t) const;+| |ql/models/equity/piecewisetimedependenthestonmodel.hpp|Real PiecewiseTimeDependentHestonModel::kappa(Time t) const;+| |ql/models/equity/piecewisetimedependenthestonmodel.hpp|Real PiecewiseTimeDependentHestonModel::sigma(Time t) const;+| |ql/models/equity/piecewisetimedependenthestonmodel.hpp|Real PiecewiseTimeDependentHestonModel::rho(Time t) const;+| |ql/models/equity/piecewisetimedependenthestonmodel.hpp|Real PiecewiseTimeDependentHestonModel::v0() const;+| |ql/models/equity/piecewisetimedependenthestonmodel.hpp|Real PiecewiseTimeDependentHestonModel::s0() const;+|x|ql/models/equity/piecewisetimedependenthestonmodel.hpp|const TimeGrid & PiecewiseTimeDependentHestonModel::timeGrid() const;+|x|ql/models/equity/piecewisetimedependenthestonmodel.hpp|const Handle<YieldTermStructure> & PiecewiseTimeDependentHestonModel::dividendYield() const;+|x|ql/models/equity/piecewisetimedependenthestonmodel.hpp|const Handle<YieldTermStructure> & PiecewiseTimeDependentHestonModel::riskFreeRate() const;+| |ql/models/marketmodels/accountingengine.hpp|AccountingEngine::AccountingEngine(ext::shared_ptr<MarketModelEvolver> evolver, const Clone<MarketModelMultiProduct> & product, Real initialNumeraireValue);+| |ql/models/marketmodels/accountingengine.hpp|void AccountingEngine::multiplePathValues(SequenceStatisticsInc & stats, Size numberOfPaths);+| |ql/models/marketmodels/browniangenerator.hpp|Real BrownianGenerator::nextStep(std::vector<Real> &);+| |ql/models/marketmodels/browniangenerator.hpp|Real BrownianGenerator::nextPath();+| |ql/models/marketmodels/browniangenerator.hpp|Size BrownianGenerator::numberOfFactors() const;+| |ql/models/marketmodels/browniangenerator.hpp|Size BrownianGenerator::numberOfSteps() const;+| |ql/models/marketmodels/browniangenerator.hpp|ext::shared_ptr<BrownianGenerator> BrownianGeneratorFactory::create(Size factors, Size steps) const;+| |ql/models/marketmodels/browniangenerators/mtbrowniangenerator.hpp|MTBrownianGenerator::MTBrownianGenerator(Size factors, Size steps, unsigned long seed = 0);+|v|ql/models/marketmodels/browniangenerators/mtbrowniangenerator.hpp|MTBrownianGeneratorFactory::MTBrownianGeneratorFactory(unsigned long seed = 0);+| |ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp|SobolBrownianGeneratorBase::SobolBrownianGeneratorBase(Size factors, Size steps, Ordering ordering);+| |ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp|const std::vector<std::vector<Size>> & SobolBrownianGeneratorBase::orderedIndices() const;+| |ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp|std::vector<std::vector<Real>> SobolBrownianGeneratorBase::transform(const std::vector<std::vector<Real>> & variates);+| |ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp|SobolBrownianGenerator::SobolBrownianGenerator(Size factors, Size steps, Ordering ordering, unsigned long seed = 0, SobolRsg::DirectionIntegers directionIntegers = SobolRsg::Jaeckel);+|v|ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp|SobolBrownianGeneratorFactory::SobolBrownianGeneratorFactory(SobolBrownianGenerator::Ordering ordering, unsigned long seed = 0, SobolRsg::DirectionIntegers directionIntegers = SobolRsg::Jaeckel);+| |ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp|Burley2020SobolBrownianGenerator::Burley2020SobolBrownianGenerator(Size factors, Size steps, Ordering ordering, unsigned long seed = 42, SobolRsg::DirectionIntegers directionIntegers = SobolRsg::Jaeckel, unsigned long scrambleSeed = 43);+| |ql/models/marketmodels/browniangenerators/sobolbrowniangenerator.hpp|Burley2020SobolBrownianGeneratorFactory::Burley2020SobolBrownianGeneratorFactory(SobolBrownianGenerator::Ordering ordering, unsigned long seed = 42, SobolRsg::DirectionIntegers directionIntegers = SobolRsg::Jaeckel, unsigned long scrambleSeed = 43);+| |ql/models/marketmodels/callability/bermudanswaptionexercisevalue.hpp|BermudanSwaptionExerciseValue::BermudanSwaptionExerciseValue(const std::vector<Time> & rateTimes, std::vector<ext::shared_ptr<Payoff>>);+| |ql/models/marketmodels/callability/collectnodedata.hpp|void collectNodeData(MarketModelEvolver & evolver, MarketModelMultiProduct & product, MarketModelNodeDataProvider & dataProvider, MarketModelExerciseValue & rebate, MarketModelExerciseValue & control, Size numberOfPaths, std::vector<std::vector<NodeData>> & collectedData);+| |ql/models/marketmodels/callability/exercisevalue.hpp|Size MarketModelExerciseValue::numberOfExercises() const;+| |ql/models/marketmodels/callability/exercisevalue.hpp|const EvolutionDescription & MarketModelExerciseValue::evolution() const;+| |ql/models/marketmodels/callability/exercisevalue.hpp|std::vector<Time> MarketModelExerciseValue::possibleCashFlowTimes() const;+| |ql/models/marketmodels/callability/exercisevalue.hpp|void MarketModelExerciseValue::nextStep(const CurveState &);+| |ql/models/marketmodels/callability/exercisevalue.hpp|void MarketModelExerciseValue::reset();+| |ql/models/marketmodels/callability/exercisevalue.hpp|std::valarray<bool> MarketModelExerciseValue::isExerciseTime() const;+| |ql/models/marketmodels/callability/exercisevalue.hpp|MarketModelMultiProduct::CashFlow MarketModelExerciseValue::value(const CurveState &) const;+| |ql/models/marketmodels/callability/exercisevalue.hpp|std::unique_ptr<MarketModelExerciseValue> MarketModelExerciseValue::clone() const;+| |ql/models/marketmodels/callability/lsstrategy.hpp|LongstaffSchwartzExerciseStrategy::LongstaffSchwartzExerciseStrategy(Clone<MarketModelBasisSystem> basisSystem, std::vector<std::vector<Real>> basisCoefficients, const EvolutionDescription & evolution, const std::vector<Size> & numeraires, Clone<MarketModelExerciseValue> exercise, Clone<MarketModelExerciseValue> control);+| |ql/models/marketmodels/callability/lsstrategy.hpp|std::vector<Time> LongstaffSchwartzExerciseStrategy::exerciseTimes() const;+| |ql/models/marketmodels/callability/lsstrategy.hpp|std::vector<Time> LongstaffSchwartzExerciseStrategy::relevantTimes() const;+| |ql/models/marketmodels/callability/lsstrategy.hpp|void LongstaffSchwartzExerciseStrategy::reset();+| |ql/models/marketmodels/callability/lsstrategy.hpp|bool LongstaffSchwartzExerciseStrategy::exercise(const CurveState & currentState) const;+| |ql/models/marketmodels/callability/lsstrategy.hpp|void LongstaffSchwartzExerciseStrategy::nextStep(const CurveState & currentState);+| |ql/models/marketmodels/callability/lsstrategy.hpp|std::unique_ptr<ExerciseStrategy<CurveState>> LongstaffSchwartzExerciseStrategy::clone() const;+| |ql/models/marketmodels/callability/marketmodelbasissystem.hpp|std::vector<Size> MarketModelBasisSystem::numberOfFunctions() const;+| |ql/models/marketmodels/callability/marketmodelbasissystem.hpp|std::unique_ptr<MarketModelBasisSystem> MarketModelBasisSystem::clone() const;+| |ql/models/marketmodels/callability/marketmodelparametricexercise.hpp|std::unique_ptr<MarketModelParametricExercise> MarketModelParametricExercise::clone() const;+| |ql/models/marketmodels/callability/nodedataprovider.hpp|Size MarketModelNodeDataProvider::numberOfExercises() const;+| |ql/models/marketmodels/callability/nodedataprovider.hpp|std::vector<Size> MarketModelNodeDataProvider::numberOfData() const;+| |ql/models/marketmodels/callability/nodedataprovider.hpp|const EvolutionDescription & MarketModelNodeDataProvider::evolution() const;+| |ql/models/marketmodels/callability/nodedataprovider.hpp|void MarketModelNodeDataProvider::nextStep(const CurveState &);+| |ql/models/marketmodels/callability/nodedataprovider.hpp|void MarketModelNodeDataProvider::reset();+| |ql/models/marketmodels/callability/nodedataprovider.hpp|std::valarray<bool> MarketModelNodeDataProvider::isExerciseTime() const;+| |ql/models/marketmodels/callability/nodedataprovider.hpp|void MarketModelNodeDataProvider::values(const CurveState &, std::vector<Real> & results) const;+| |ql/models/marketmodels/callability/nothingexercisevalue.hpp|NothingExerciseValue::NothingExerciseValue(const std::vector<Time> & rateTimes, std::valarray<bool> isExerciseTime = std::valarray<bool>());+| |ql/models/marketmodels/callability/parametricexerciseadapter.hpp|ParametricExerciseAdapter::ParametricExerciseAdapter(const MarketModelParametricExercise & exercise, std::vector<std::vector<Real>> parameters);+| |ql/models/marketmodels/callability/parametricexerciseadapter.hpp|std::vector<Time> ParametricExerciseAdapter::exerciseTimes() const;+| |ql/models/marketmodels/callability/parametricexerciseadapter.hpp|std::vector<Time> ParametricExerciseAdapter::relevantTimes() const;+| |ql/models/marketmodels/callability/parametricexerciseadapter.hpp|void ParametricExerciseAdapter::reset();+| |ql/models/marketmodels/callability/parametricexerciseadapter.hpp|void ParametricExerciseAdapter::nextStep(const CurveState & currentState);+| |ql/models/marketmodels/callability/parametricexerciseadapter.hpp|bool ParametricExerciseAdapter::exercise(const CurveState & currentState) const;+| |ql/models/marketmodels/callability/parametricexerciseadapter.hpp|std::unique_ptr<ExerciseStrategy<CurveState>> ParametricExerciseAdapter::clone() const;+| |ql/models/marketmodels/callability/swapbasissystem.hpp|SwapBasisSystem::SwapBasisSystem(const std::vector<Time> & rateTimes, const std::vector<Time> & exerciseTimes);+| |ql/models/marketmodels/callability/swapforwardbasissystem.hpp|SwapForwardBasisSystem::SwapForwardBasisSystem(const std::vector<Time> & rateTimes, const std::vector<Time> & exerciseTimes);+| |ql/models/marketmodels/callability/swapratetrigger.hpp|SwapRateTrigger::SwapRateTrigger(const std::vector<Time> & rateTimes, std::vector<Rate> swapTriggers, const std::vector<Time> & exerciseTimes);+|x|ql/models/marketmodels/callability/swapratetrigger.hpp|std::vector<Time> SwapRateTrigger::exerciseTimes() const;+|x|ql/models/marketmodels/callability/swapratetrigger.hpp|std::vector<Time> SwapRateTrigger::relevantTimes() const;+| |ql/models/marketmodels/callability/swapratetrigger.hpp|void SwapRateTrigger::reset();+| |ql/models/marketmodels/callability/swapratetrigger.hpp|bool SwapRateTrigger::exercise(const CurveState & currentState) const;+| |ql/models/marketmodels/callability/swapratetrigger.hpp|void SwapRateTrigger::nextStep(const CurveState & currentState);+| |ql/models/marketmodels/callability/swapratetrigger.hpp|std::unique_ptr<ExerciseStrategy<CurveState>> SwapRateTrigger::clone() const;+| |ql/models/marketmodels/callability/triggeredswapexercise.hpp|TriggeredSwapExercise::TriggeredSwapExercise(const std::vector<Time> & rateTimes, const std::vector<Time> & exerciseTimes, std::vector<Rate> strikes);+| |ql/models/marketmodels/callability/upperboundengine.hpp|UpperBoundEngine::UpperBoundEngine(ext::shared_ptr<MarketModelEvolver> evolver, std::vector<ext::shared_ptr<MarketModelEvolver>> innerEvolvers, const MarketModelMultiProduct & underlying, const MarketModelExerciseValue & rebate, const MarketModelMultiProduct & hedge, const MarketModelExerciseValue & hedgeRebate, const ExerciseStrategy<CurveState> & hedgeStrategy, Real initialNumeraireValue);+| |ql/models/marketmodels/callability/upperboundengine.hpp|void UpperBoundEngine::multiplePathValues(Statistics & stats, Size outerPaths, Size innerPaths);+| |ql/models/marketmodels/callability/upperboundengine.hpp|std::pair<Real, Real> UpperBoundEngine::singlePathValue(Size innerPaths);+| |ql/models/marketmodels/constrainedevolver.hpp|void ConstrainedEvolver::setConstraintType(const std::vector<Size> & startIndexOfSwapRate, const std::vector<Size> & EndIndexOfSwapRate);+| |ql/models/marketmodels/constrainedevolver.hpp|void ConstrainedEvolver::setThisConstraint(const std::vector<Rate> & rateConstraints, const std::valarray<bool> & isConstraintActive);+| |ql/models/marketmodels/correlations/cotswapfromfwdcorrelation.hpp|CotSwapFromFwdCorrelation::CotSwapFromFwdCorrelation(const ext::shared_ptr<PiecewiseConstantCorrelation> & fwdCorr, const CurveState & curveState, Spread displacement);+| |ql/models/marketmodels/correlations/expcorrelations.hpp|Matrix exponentialCorrelations(const std::vector<Time> & rateTimes, Real longTermCorr = 0.5, Real beta = 0.2, Real gamma = 1.0, Time t = 0.0);+| |ql/models/marketmodels/correlations/expcorrelations.hpp|ExponentialForwardCorrelation::ExponentialForwardCorrelation(const std::vector<Time> & rateTimes, Real longTermCorr = 0.5, Real beta = 0.2, Real gamma = 1.0, std::vector<Time> times = std::vector<Time>());+| |ql/models/marketmodels/correlations/timehomogeneousforwardcorrelation.hpp|TimeHomogeneousForwardCorrelation::TimeHomogeneousForwardCorrelation(const Matrix & fwdCorrelation, const std::vector<Time> & rateTimes);+| |ql/models/marketmodels/correlations/timehomogeneousforwardcorrelation.hpp|static std::vector<Matrix> TimeHomogeneousForwardCorrelation::evolvedMatrices(const Matrix & fwdCorrelation);+| |ql/models/marketmodels/curvestate.hpp|CurveState::CurveState(const std::vector<Time> & rateTimes);+| |ql/models/marketmodels/curvestate.hpp|Size CurveState::numberOfRates() const;+|x|ql/models/marketmodels/curvestate.hpp|const std::vector<Time> & CurveState::rateTimes() const;+| |ql/models/marketmodels/curvestate.hpp|const std::vector<Time> & CurveState::rateTaus() const;+| |ql/models/marketmodels/curvestate.hpp|Real CurveState::discountRatio(Size i, Size j) const;+| |ql/models/marketmodels/curvestate.hpp|Rate CurveState::forwardRate(Size i) const;+| |ql/models/marketmodels/curvestate.hpp|Rate CurveState::coterminalSwapAnnuity(Size numeraire, Size i) const;+| |ql/models/marketmodels/curvestate.hpp|Rate CurveState::coterminalSwapRate(Size i) const;+| |ql/models/marketmodels/curvestate.hpp|Rate CurveState::cmSwapAnnuity(Size numeraire, Size i, Size spanningForwards) const;+| |ql/models/marketmodels/curvestate.hpp|Rate CurveState::cmSwapRate(Size i, Size spanningForwards) const;+| |ql/models/marketmodels/curvestate.hpp|const std::vector<Rate> & CurveState::forwardRates() const;+| |ql/models/marketmodels/curvestate.hpp|const std::vector<Rate> & CurveState::coterminalSwapRates() const;+| |ql/models/marketmodels/curvestate.hpp|const std::vector<Rate> & CurveState::cmSwapRates(Size spanningForwards) const;+| |ql/models/marketmodels/curvestate.hpp|Rate CurveState::swapRate(Size begin, Size end) const;+| |ql/models/marketmodels/curvestate.hpp|std::unique_ptr<CurveState> CurveState::clone() const;+| |ql/models/marketmodels/curvestate.hpp|void forwardsFromDiscountRatios(Size firstValidIndex, const std::vector<DiscountFactor> & ds, const std::vector<Time> & taus, std::vector<Rate> & fwds);+| |ql/models/marketmodels/curvestate.hpp|void coterminalFromDiscountRatios(Size firstValidIndex, const std::vector<DiscountFactor> & ds, const std::vector<Time> & taus, std::vector<Rate> & cotSwapRates, std::vector<Real> & cotSwapAnnuities);+| |ql/models/marketmodels/curvestate.hpp|void constantMaturityFromDiscountRatios(Size spanningForwards, Size firstValidIndex, const std::vector<DiscountFactor> & ds, const std::vector<Time> & taus, std::vector<Rate> & cotSwapRates, std::vector<Real> & cotSwapAnnuities);+| |ql/models/marketmodels/curvestates/cmswapcurvestate.hpp|CMSwapCurveState::CMSwapCurveState(const std::vector<Time> & rateTimes, Size spanningForwards);+| |ql/models/marketmodels/curvestates/cmswapcurvestate.hpp|void CMSwapCurveState::setOnCMSwapRates(const std::vector<Rate> & cmSwapRates, Size firstValidIndex = 0);+| |ql/models/marketmodels/curvestates/coterminalswapcurvestate.hpp|CoterminalSwapCurveState::CoterminalSwapCurveState(const std::vector<Time> & rateTimes);+| |ql/models/marketmodels/curvestates/coterminalswapcurvestate.hpp|void CoterminalSwapCurveState::setOnCoterminalSwapRates(const std::vector<Rate> & swapRates, Size firstValidIndex = 0);+| |ql/models/marketmodels/curvestates/lmmcurvestate.hpp|LMMCurveState::LMMCurveState(const std::vector<Time> & rateTimes);+| |ql/models/marketmodels/curvestates/lmmcurvestate.hpp|void LMMCurveState::setOnForwardRates(const std::vector<Rate> & fwdRates, Size firstValidIndex = 0);+| |ql/models/marketmodels/curvestates/lmmcurvestate.hpp|void LMMCurveState::setOnDiscountRatios(const std::vector<DiscountFactor> & discRatios, Size firstValidIndex = 0);+| |ql/models/marketmodels/discounter.hpp|MarketModelDiscounter::MarketModelDiscounter(Time paymentTime, const std::vector<Time> & rateTimes);+| |ql/models/marketmodels/discounter.hpp|Real MarketModelDiscounter::numeraireBonds(const CurveState &, Size numeraire) const;+| |ql/models/marketmodels/driftcomputation/cmsmmdriftcalculator.hpp|CMSMMDriftCalculator::CMSMMDriftCalculator(const Matrix & pseudo, const std::vector<Spread> & displacements, const std::vector<Time> & taus, Size numeraire, Size alive, Size spanningFwds);+| |ql/models/marketmodels/driftcomputation/cmsmmdriftcalculator.hpp|void CMSMMDriftCalculator::compute(const CMSwapCurveState & cs, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp|LMMDriftCalculator::LMMDriftCalculator(const Matrix & pseudo, const std::vector<Spread> & displacements, const std::vector<Time> & taus, Size numeraire, Size alive);+| |ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp|void LMMDriftCalculator::compute(const LMMCurveState & cs, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp|void LMMDriftCalculator::compute(const std::vector<Rate> & fwds, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp|void LMMDriftCalculator::computePlain(const LMMCurveState & cs, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp|void LMMDriftCalculator::computePlain(const std::vector<Rate> & fwds, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp|void LMMDriftCalculator::computeReduced(const LMMCurveState & cs, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp|void LMMDriftCalculator::computeReduced(const std::vector<Rate> & fwds, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmnormaldriftcalculator.hpp|LMMNormalDriftCalculator::LMMNormalDriftCalculator(const Matrix & pseudo, const std::vector<Time> & taus, Size numeraire, Size alive);+| |ql/models/marketmodels/driftcomputation/lmmnormaldriftcalculator.hpp|void LMMNormalDriftCalculator::compute(const LMMCurveState & cs, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmnormaldriftcalculator.hpp|void LMMNormalDriftCalculator::compute(const std::vector<Rate> & fwds, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmnormaldriftcalculator.hpp|void LMMNormalDriftCalculator::computePlain(const LMMCurveState & cs, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmnormaldriftcalculator.hpp|void LMMNormalDriftCalculator::computePlain(const std::vector<Rate> & fwds, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmnormaldriftcalculator.hpp|void LMMNormalDriftCalculator::computeReduced(const LMMCurveState & cs, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/lmmnormaldriftcalculator.hpp|void LMMNormalDriftCalculator::computeReduced(const std::vector<Rate> & fwds, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/driftcomputation/smmdriftcalculator.hpp|SMMDriftCalculator::SMMDriftCalculator(const Matrix & pseudo, const std::vector<Spread> & displacements, const std::vector<Time> & taus, Size numeraire, Size alive);+| |ql/models/marketmodels/driftcomputation/smmdriftcalculator.hpp|void SMMDriftCalculator::compute(const CoterminalSwapCurveState & cs, std::vector<Real> & drifts) const;+| |ql/models/marketmodels/evolutiondescription.hpp|EvolutionDescription::EvolutionDescription();+| |ql/models/marketmodels/evolutiondescription.hpp|EvolutionDescription::EvolutionDescription(const std::vector<Time> & rateTimes, const std::vector<Time> & evolutionTimes = std::vector<Time>(), const std::vector<std::pair<Size, Size>> & relevanceRates = std::vector<range>());+|x|ql/models/marketmodels/evolutiondescription.hpp|const std::vector<Time> & EvolutionDescription::rateTimes() const;+| |ql/models/marketmodels/evolutiondescription.hpp|const std::vector<Time> & EvolutionDescription::rateTaus() const;+| |ql/models/marketmodels/evolutiondescription.hpp|const std::vector<Time> & EvolutionDescription::evolutionTimes() const;+| |ql/models/marketmodels/evolutiondescription.hpp|const std::vector<Size> & EvolutionDescription::firstAliveRate() const;+|x|ql/models/marketmodels/evolutiondescription.hpp|const std::vector<std::pair<Size, Size>> & EvolutionDescription::relevanceRates() const;+| |ql/models/marketmodels/evolutiondescription.hpp|Size EvolutionDescription::numberOfRates() const;+| |ql/models/marketmodels/evolutiondescription.hpp|Size EvolutionDescription::numberOfSteps() const;+| |ql/models/marketmodels/evolutiondescription.hpp|void checkCompatibility(const EvolutionDescription & evolution, const std::vector<Size> & numeraires);+| |ql/models/marketmodels/evolutiondescription.hpp|bool isInTerminalMeasure(const EvolutionDescription & evolution, const std::vector<Size> & numeraires);+| |ql/models/marketmodels/evolutiondescription.hpp|bool isInMoneyMarketPlusMeasure(const EvolutionDescription & evolution, const std::vector<Size> & numeraires, Size offset = 1);+| |ql/models/marketmodels/evolutiondescription.hpp|bool isInMoneyMarketMeasure(const EvolutionDescription & evolution, const std::vector<Size> & numeraires);+| |ql/models/marketmodels/evolutiondescription.hpp|std::vector<Size> terminalMeasure(const EvolutionDescription & evolution);+| |ql/models/marketmodels/evolutiondescription.hpp|std::vector<Size> moneyMarketPlusMeasure(const EvolutionDescription &, Size offset = 1);+| |ql/models/marketmodels/evolutiondescription.hpp|std::vector<Size> moneyMarketMeasure(const EvolutionDescription &);+| |ql/models/marketmodels/evolver.hpp|const std::vector<Size> & MarketModelEvolver::numeraires() const;+| |ql/models/marketmodels/evolver.hpp|Real MarketModelEvolver::startNewPath();+| |ql/models/marketmodels/evolver.hpp|Real MarketModelEvolver::advanceStep();+| |ql/models/marketmodels/evolver.hpp|Size MarketModelEvolver::currentStep() const;+| |ql/models/marketmodels/evolver.hpp|const CurveState & MarketModelEvolver::currentState() const;+| |ql/models/marketmodels/evolver.hpp|void MarketModelEvolver::setInitialState(const CurveState &);+| |ql/models/marketmodels/evolvers/lognormalcmswapratepc.hpp|LogNormalCmSwapRatePc::LogNormalCmSwapRatePc(Size spanningForwards, const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/lognormalcotswapratepc.hpp|LogNormalCotSwapRatePc::LogNormalCotSwapRatePc(const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/lognormalfwdrateballand.hpp|LogNormalFwdRateBalland::LogNormalFwdRateBalland(const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/lognormalfwdrateeuler.hpp|LogNormalFwdRateEuler::LogNormalFwdRateEuler(const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/lognormalfwdrateeuler.hpp|const std::vector<Real> & LogNormalFwdRateEuler::browniansThisStep() const;+| |ql/models/marketmodels/evolvers/lognormalfwdrateeulerconstrained.hpp|LogNormalFwdRateEulerConstrained::LogNormalFwdRateEulerConstrained(const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/lognormalfwdrateiballand.hpp|LogNormalFwdRateiBalland::LogNormalFwdRateiBalland(const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/lognormalfwdrateipc.hpp|LogNormalFwdRateIpc::LogNormalFwdRateIpc(const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/lognormalfwdratepc.hpp|LogNormalFwdRatePc::LogNormalFwdRatePc(const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/marketmodelvolprocess.hpp|MarketModelVolProcess::MarketModelVolProcess();+| |ql/models/marketmodels/evolvers/marketmodelvolprocess.hpp|Size MarketModelVolProcess::variatesPerStep();+| |ql/models/marketmodels/evolvers/marketmodelvolprocess.hpp|Size MarketModelVolProcess::numberSteps();+| |ql/models/marketmodels/evolvers/marketmodelvolprocess.hpp|void MarketModelVolProcess::nextPath();+| |ql/models/marketmodels/evolvers/marketmodelvolprocess.hpp|Real MarketModelVolProcess::nextstep(const std::vector<Real> & variates);+| |ql/models/marketmodels/evolvers/marketmodelvolprocess.hpp|Real MarketModelVolProcess::stepSd() const;+| |ql/models/marketmodels/evolvers/marketmodelvolprocess.hpp|const std::vector<Real> & MarketModelVolProcess::stateVariables() const;+| |ql/models/marketmodels/evolvers/marketmodelvolprocess.hpp|Size MarketModelVolProcess::numberStateVariables() const;+| |ql/models/marketmodels/evolvers/normalfwdratepc.hpp|NormalFwdRatePc::NormalFwdRatePc(const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/svddfwdratepc.hpp|SVDDFwdRatePc::SVDDFwdRatePc(const ext::shared_ptr<MarketModel> &, const BrownianGeneratorFactory &, const ext::shared_ptr<MarketModelVolProcess> & volProcess, Size firstVolatilityFactor, Size volatilityFactorStep, const std::vector<Size> & numeraires, Size initialStep = 0);+| |ql/models/marketmodels/evolvers/volprocesses/squarerootandersen.hpp|SquareRootAndersen::SquareRootAndersen(Real meanLevel, Real reversionSpeed, Real volVar, Real v0, const std::vector<Real> & evolutionTimes, Size numberSubSteps_, Real w1, Real w2, Real cutPoint = 1.5);+| |ql/models/marketmodels/forwardforwardmappings.hpp|Matrix ForwardForwardJacobian(const CurveState & cs, Size multiplier, Size offset);+| |ql/models/marketmodels/forwardforwardmappings.hpp|Matrix YMatrix(const CurveState & cs, const std::vector<Spread> & shortDisplacements, const std::vector<Spread> & longDisplacements, Size Multiplier, Size offset);+| |ql/models/marketmodels/forwardforwardmappings.hpp|LMMCurveState RestrictCurveState(const CurveState & cs, Size multiplier, Size offSet);+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<Date> & HistoricalForwardRatesAnalysis::skippedDates() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<std::string> & HistoricalForwardRatesAnalysis::skippedDatesErrorMessage() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<Date> & HistoricalForwardRatesAnalysis::failedDates() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<std::string> & HistoricalForwardRatesAnalysis::failedDatesErrorMessage() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<Period> & HistoricalForwardRatesAnalysis::fixingPeriods() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|HistoricalForwardRatesAnalysisImpl::HistoricalForwardRatesAnalysisImpl<Traits, Interpolator>(ext::shared_ptr<SequenceStatistics> stats, const Date & startDate, const Date & endDate, const Period & step, const ext::shared_ptr<InterestRateIndex> & fwdIndex, const Period & initialGap, const Period & horizon, const std::vector<ext::shared_ptr<IborIndex>> & iborIndexes, const std::vector<ext::shared_ptr<SwapIndex>> & swapIndexes, const DayCounter & yieldCurveDayCounter, Real yieldCurveAccuracy);+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|HistoricalForwardRatesAnalysisImpl::HistoricalForwardRatesAnalysisImpl<Traits, Interpolator>();+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|HistoricalForwardRatesAnalysisImpl<Traits, Interpolator>(ext::shared_ptr<SequenceStatistics> stats, const Date & startDate, const Date & endDate, const Period & step, const ext::shared_ptr<InterestRateIndex> & fwdIndex, const Period & initialGap, const Period & horizon, const std::vector<ext::shared_ptr<IborIndex>> & iborIndexes, const std::vector<ext::shared_ptr<SwapIndex>> & swapIndexes, const DayCounter & yieldCurveDayCounter, Real yieldCurveAccuracy);+| |ql/models/marketmodels/historicalratesanalysis.hpp|void historicalRatesAnalysis(SequenceStatistics & statistics, std::vector<Date> & skippedDates, std::vector<std::string> & skippedDatesErrorMessage, const Date & startDate, const Date & endDate, const Period & step, const std::vector<ext::shared_ptr<InterestRateIndex>> & indexes);+|u|ql/models/marketmodels/historicalratesanalysis.hpp|HistoricalRatesAnalysis::HistoricalRatesAnalysis(ext::shared_ptr<SequenceStatistics> stats, const Date & startDate, const Date & endDate, const Period & step, const std::vector<ext::shared_ptr<InterestRateIndex>> & indexes);+|v|ql/models/marketmodels/historicalratesanalysis.hpp|const std::vector<Date> & HistoricalRatesAnalysis::skippedDates() const;+|v|ql/models/marketmodels/historicalratesanalysis.hpp|const std::vector<std::string> & HistoricalRatesAnalysis::skippedDatesErrorMessage() const;+|x|ql/models/marketmodels/historicalratesanalysis.hpp|const ext::shared_ptr<SequenceStatistics> & HistoricalRatesAnalysis::stats() const;+| |ql/models/marketmodels/marketmodel.hpp|const std::vector<Rate> & MarketModel::initialRates() const;+| |ql/models/marketmodels/marketmodel.hpp|const std::vector<Spread> & MarketModel::displacements() const;+| |ql/models/marketmodels/marketmodel.hpp|const EvolutionDescription & MarketModel::evolution() const;+| |ql/models/marketmodels/marketmodel.hpp|Size MarketModel::numberOfRates() const;+| |ql/models/marketmodels/marketmodel.hpp|Size MarketModel::numberOfFactors() const;+| |ql/models/marketmodels/marketmodel.hpp|Size MarketModel::numberOfSteps() const;+| |ql/models/marketmodels/marketmodel.hpp|const Matrix & MarketModel::pseudoRoot(Size i) const;+| |ql/models/marketmodels/marketmodel.hpp|const Matrix & MarketModel::covariance(Size i) const;+| |ql/models/marketmodels/marketmodel.hpp|const Matrix & MarketModel::totalCovariance(Size endIndex) const;+| |ql/models/marketmodels/marketmodel.hpp|std::vector<Volatility> MarketModel::timeDependentVolatility(Size i) const;+| |ql/models/marketmodels/marketmodel.hpp|ext::shared_ptr<MarketModel> MarketModelFactory::create(const EvolutionDescription &, Size numberOfFactors) const;+| |ql/models/marketmodels/marketmodeldifferences.hpp|std::vector<Volatility> rateVolDifferences(const MarketModel & marketModel1, const MarketModel & marketModel2);+| |ql/models/marketmodels/marketmodeldifferences.hpp|std::vector<Spread> rateInstVolDifferences(const MarketModel & marketModel1, const MarketModel & marketModel2, Size index);+| |ql/models/marketmodels/marketmodeldifferences.hpp|std::vector<Real> coterminalSwapPseudoRoots(const PiecewiseConstantCorrelation &, const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> &, const std::vector<Time> &);+| |ql/models/marketmodels/models/abcdvol.hpp|AbcdVol::AbcdVol(Real a, Real b, Real c, Real d, const std::vector<Real> & ks, const ext::shared_ptr<PiecewiseConstantCorrelation> & corr, const EvolutionDescription & evolution, Size numberOfFactors, const std::vector<Rate> & initialRates, const std::vector<Spread> & displacements);+| |ql/models/marketmodels/models/abcdvol.hpp|const std::vector<Rate> & initialRates() const;+| |ql/models/marketmodels/models/abcdvol.hpp|const std::vector<Spread> & displacements() const;+| |ql/models/marketmodels/models/abcdvol.hpp|const EvolutionDescription & evolution() const;+| |ql/models/marketmodels/models/abcdvol.hpp|Size numberOfRates() const;+| |ql/models/marketmodels/models/abcdvol.hpp|Size numberOfFactors() const;+| |ql/models/marketmodels/models/abcdvol.hpp|Size numberOfSteps() const;+| |ql/models/marketmodels/models/abcdvol.hpp|const Matrix & pseudoRoot(Size i) const;+| |ql/models/marketmodels/models/alphafinder.hpp|AlphaFinder::AlphaFinder(ext::shared_ptr<AlphaForm> parametricform);+| |ql/models/marketmodels/models/alphafinder.hpp|bool AlphaFinder::solve(Real alpha0, Integer stepindex, const std::vector<Volatility> & rateonevols, const std::vector<Volatility> & ratetwohomogeneousvols, const std::vector<Real> & correlations, Real w0, Real w1, Real targetVariance, Real tolerance, Real alphaMax, Real alphaMin, Integer steps, Real & alpha, Real & a, Real & b, std::vector<Volatility> & ratetwovols);+| |ql/models/marketmodels/models/alphafinder.hpp|bool AlphaFinder::solveWithMaxHomogeneity(Real alpha0, Integer stepindex, const std::vector<Volatility> & rateonevols, const std::vector<Volatility> & ratetwohomogeneousvols, const std::vector<Real> & correlations, Real w0, Real w1, Real targetVariance, Real tolerance, Real alphaMax, Real alphaMin, Integer steps, Real & alpha, Real & a, Real & b, std::vector<Volatility> & ratetwovols);+| |ql/models/marketmodels/models/alphaform.hpp|Real AlphaForm::operator()(Integer i) const;+| |ql/models/marketmodels/models/alphaform.hpp|void AlphaForm::setAlpha(Real alpha);+| |ql/models/marketmodels/models/alphaformconcrete.hpp|AlphaFormInverseLinear::AlphaFormInverseLinear(std::vector<Time> times, Real alpha = 0.0);+| |ql/models/marketmodels/models/alphaformconcrete.hpp|AlphaFormLinearHyperbolic::AlphaFormLinearHyperbolic(std::vector<Time> times, Real alpha = 0.0);+| |ql/models/marketmodels/models/capletcoterminalalphacalibration.hpp|CTSMMCapletAlphaFormCalibration::CTSMMCapletAlphaFormCalibration(const EvolutionDescription & evolution, const ext::shared_ptr<PiecewiseConstantCorrelation> & corr, const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> & displacedSwapVariances, const std::vector<Volatility> & capletVols, const ext::shared_ptr<CurveState> & cs, Spread displacement, const std::vector<Real> & alphaInitial, const std::vector<Real> & alphaMax, const std::vector<Real> & alphaMin, bool maximizeHomogeneity, ext::shared_ptr<AlphaForm> parametricForm = ext::shared_ptr<AlphaForm>());+| |ql/models/marketmodels/models/capletcoterminalalphacalibration.hpp|const std::vector<Real> & CTSMMCapletAlphaFormCalibration::alpha() const;+| |ql/models/marketmodels/models/capletcoterminalalphacalibration.hpp|static Natural CTSMMCapletAlphaFormCalibration::capletAlphaFormCalibration(const EvolutionDescription & evolution, const PiecewiseConstantCorrelation & corr, const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> & displacedSwapVariances, const std::vector<Volatility> & capletVols, const CurveState & cs, Spread displacement, const std::vector<Real> & alphaInitial, const std::vector<Real> & alphaMax, const std::vector<Real> & alphaMin, bool maximizeHomogeneity, const ext::shared_ptr<AlphaForm> & parametricForm, Size numberOfFactors, Integer steps, Real toleranceForAlphaSolving, std::vector<Real> & alpha, std::vector<Real> & a, std::vector<Real> & b, std::vector<Matrix> & swapCovariancePseudoRoots);+| |ql/models/marketmodels/models/capletcoterminalmaxhomogeneity.hpp|CTSMMCapletMaxHomogeneityCalibration::CTSMMCapletMaxHomogeneityCalibration(const EvolutionDescription & evolution, const ext::shared_ptr<PiecewiseConstantCorrelation> & corr, const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> & displacedSwapVariances, const std::vector<Volatility> & capletVols, const ext::shared_ptr<CurveState> & cs, Spread displacement, Real caplet0Swaption1Priority = 1.0);+| |ql/models/marketmodels/models/capletcoterminalmaxhomogeneity.hpp|static Natural CTSMMCapletMaxHomogeneityCalibration::capletMaxHomogeneityCalibration(const EvolutionDescription & evolution, const PiecewiseConstantCorrelation & corr, const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> & displacedSwapVariances, const std::vector<Volatility> & capletVols, const CurveState & cs, Spread displacement, Real caplet0Swaption1Priority, Size numberOfFactors, Size maxIterations, Real tolerance, Real & deformationSize, Real & totalSwaptionError, std::vector<Matrix> & swapCovariancePseudoRoots);+| |ql/models/marketmodels/models/capletcoterminalperiodic.hpp|Integer capletSwaptionPeriodicCalibration(const EvolutionDescription & evolution, const ext::shared_ptr<PiecewiseConstantCorrelation> & corr, VolatilityInterpolationSpecifier & displacedSwapVariances, const std::vector<Volatility> & capletVols, const ext::shared_ptr<CurveState> & cs, Spread displacement, Real caplet0Swaption1Priority, Size numberOfFactors, Size period, Size max1dIterations, Real tolerance1d, Size maxUnperiodicIterations, Real toleranceUnperiodic, Size maxPeriodIterations, Real periodTolerance, Real & deformationSize, Real & totalSwaptionError, std::vector<Matrix> & swapCovariancePseudoRoots, std::vector<Real> & finalScales, Size & iterationsDone, Real & errorImprovement, Matrix & modelSwaptionVolsMatrix);+| |ql/models/marketmodels/models/capletcoterminalswaptioncalibration.hpp|CTSMMCapletOriginalCalibration::CTSMMCapletOriginalCalibration(const EvolutionDescription & evolution, const ext::shared_ptr<PiecewiseConstantCorrelation> & corr, const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> & displacedSwapVariances, const std::vector<Volatility> & capletVols, const ext::shared_ptr<CurveState> & cs, Spread displacement, const std::vector<Real> & alpha, bool lowestRoot, bool useFullApprox);+| |ql/models/marketmodels/models/capletcoterminalswaptioncalibration.hpp|static Natural CTSMMCapletOriginalCalibration::calibrationFunction(const EvolutionDescription & evolution, const PiecewiseConstantCorrelation & corr, const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> & displacedSwapVariances, const std::vector<Volatility> & capletVols, const CurveState & cs, Spread displacement, const std::vector<Real> & alpha, bool lowestRoot, bool useFullApprox, Size numberOfFactors, std::vector<Matrix> & swapCovariancePseudoRoots);+| |ql/models/marketmodels/models/cotswaptofwdadapter.hpp|CotSwapToFwdAdapter::CotSwapToFwdAdapter(const ext::shared_ptr<MarketModel> & coterminalModel);+| |ql/models/marketmodels/models/cotswaptofwdadapter.hpp|CotSwapToFwdAdapterFactory::CotSwapToFwdAdapterFactory(const ext::shared_ptr<MarketModelFactory> & coterminalFactory);+| |ql/models/marketmodels/models/cotswaptofwdadapter.hpp|const std::vector<Rate> & initialRates() const;+| |ql/models/marketmodels/models/cotswaptofwdadapter.hpp|const std::vector<Spread> & displacements() const;+| |ql/models/marketmodels/models/cotswaptofwdadapter.hpp|const EvolutionDescription & evolution() const;+| |ql/models/marketmodels/models/cotswaptofwdadapter.hpp|Size numberOfRates() const;+| |ql/models/marketmodels/models/cotswaptofwdadapter.hpp|Size numberOfFactors() const;+| |ql/models/marketmodels/models/cotswaptofwdadapter.hpp|Size numberOfSteps() const;+| |ql/models/marketmodels/models/cotswaptofwdadapter.hpp|const Matrix & pseudoRoot(Size i) const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|CTSMMCapletCalibration::CTSMMCapletCalibration(EvolutionDescription evolution, ext::shared_ptr<PiecewiseConstantCorrelation> corr, std::vector<ext::shared_ptr<PiecewiseConstantVariance>> displacedSwapVariances, std::vector<Volatility> mktCapletVols, ext::shared_ptr<CurveState> cs, Spread displacement);+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|bool CTSMMCapletCalibration::calibrate(Natural numberOfFactors, Natural maxIterations, Real tolerance, Natural innerMaxIterations = 100, Real innerTolerance = 1e-8);+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Natural CTSMMCapletCalibration::failures() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real CTSMMCapletCalibration::deformationSize() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real CTSMMCapletCalibration::capletRmsError() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real CTSMMCapletCalibration::capletMaxError() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real CTSMMCapletCalibration::swaptionRmsError() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real CTSMMCapletCalibration::swaptionMaxError() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Matrix> & CTSMMCapletCalibration::swapPseudoRoots() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const Matrix & CTSMMCapletCalibration::swapPseudoRoot(Size i) const;+|x|ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & CTSMMCapletCalibration::mktCapletVols() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & CTSMMCapletCalibration::mdlCapletVols() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & CTSMMCapletCalibration::mktSwaptionVols() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & CTSMMCapletCalibration::mdlSwaptionVols() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & CTSMMCapletCalibration::timeDependentCalibratedSwaptionVols(Size i) const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & CTSMMCapletCalibration::timeDependentUnCalibratedSwaptionVols(Size i) const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|static void CTSMMCapletCalibration::performChecks(const EvolutionDescription & evolution, const PiecewiseConstantCorrelation & corr, const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> & displacedSwapVariances, const std::vector<Volatility> & mktCapletVols, const CurveState & cs);+|x|ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const ext::shared_ptr<CurveState> & CTSMMCapletCalibration::curveState() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|std::vector<Spread> CTSMMCapletCalibration::displacements() const;+| |ql/models/marketmodels/models/flatvol.hpp|FlatVol::FlatVol(const std::vector<Volatility> & volatilities, const ext::shared_ptr<PiecewiseConstantCorrelation> & corr, const EvolutionDescription & evolution, Size numberOfFactors, const std::vector<Rate> & initialRates, const std::vector<Spread> & displacements);+| |ql/models/marketmodels/models/flatvol.hpp|FlatVolFactory::FlatVolFactory(Real longTermCorrelation, Real beta, std::vector<Time> times, std::vector<Volatility> vols, Handle<YieldTermStructure> yieldCurve, Spread displacement);+| |ql/models/marketmodels/models/flatvol.hpp|const std::vector<Rate> & initialRates() const;+| |ql/models/marketmodels/models/flatvol.hpp|const std::vector<Spread> & displacements() const;+| |ql/models/marketmodels/models/flatvol.hpp|const EvolutionDescription & evolution() const;+| |ql/models/marketmodels/models/flatvol.hpp|Size numberOfRates() const;+| |ql/models/marketmodels/models/flatvol.hpp|Size numberOfFactors() const;+| |ql/models/marketmodels/models/flatvol.hpp|Size numberOfSteps() const;+| |ql/models/marketmodels/models/flatvol.hpp|const Matrix & pseudoRoot(Size i) const;+| |ql/models/marketmodels/models/fwdperiodadapter.hpp|FwdPeriodAdapter::FwdPeriodAdapter(const ext::shared_ptr<MarketModel> & largeModel, Size period, Size offset, std::vector<Spread> newDisplacements_);+| |ql/models/marketmodels/models/fwdperiodadapter.hpp|const std::vector<Rate> & initialRates() const;+| |ql/models/marketmodels/models/fwdperiodadapter.hpp|const std::vector<Spread> & displacements() const;+| |ql/models/marketmodels/models/fwdperiodadapter.hpp|const EvolutionDescription & evolution() const;+| |ql/models/marketmodels/models/fwdperiodadapter.hpp|Size numberOfRates() const;+| |ql/models/marketmodels/models/fwdperiodadapter.hpp|Size numberOfFactors() const;+| |ql/models/marketmodels/models/fwdperiodadapter.hpp|Size numberOfSteps() const;+| |ql/models/marketmodels/models/fwdperiodadapter.hpp|const Matrix & pseudoRoot(Size i) const;+| |ql/models/marketmodels/models/fwdtocotswapadapter.hpp|FwdToCotSwapAdapter::FwdToCotSwapAdapter(const ext::shared_ptr<MarketModel> & forwardModel);+| |ql/models/marketmodels/models/fwdtocotswapadapter.hpp|FwdToCotSwapAdapterFactory::FwdToCotSwapAdapterFactory(const ext::shared_ptr<MarketModelFactory> & forwardFactory);+| |ql/models/marketmodels/models/fwdtocotswapadapter.hpp|const std::vector<Rate> & initialRates() const;+| |ql/models/marketmodels/models/fwdtocotswapadapter.hpp|const std::vector<Spread> & displacements() const;+| |ql/models/marketmodels/models/fwdtocotswapadapter.hpp|const EvolutionDescription & evolution() const;+| |ql/models/marketmodels/models/fwdtocotswapadapter.hpp|Size numberOfRates() const;+| |ql/models/marketmodels/models/fwdtocotswapadapter.hpp|Size numberOfFactors() const;+| |ql/models/marketmodels/models/fwdtocotswapadapter.hpp|Size numberOfSteps() const;+| |ql/models/marketmodels/models/fwdtocotswapadapter.hpp|const Matrix & pseudoRoot(Size i) const;+| |ql/models/marketmodels/models/piecewiseconstantabcdvariance.hpp|PiecewiseConstantAbcdVariance::PiecewiseConstantAbcdVariance(Real a, Real b, Real c, Real d, Size resetIndex, const std::vector<Time> & rateTimes);+| |ql/models/marketmodels/models/piecewiseconstantabcdvariance.hpp|void PiecewiseConstantAbcdVariance::getABCD(Real & a, Real & b, Real & c, Real & d) const;+| |ql/models/marketmodels/models/piecewiseconstantvariance.hpp|const std::vector<Real> & PiecewiseConstantVariance::variances() const;+| |ql/models/marketmodels/models/piecewiseconstantvariance.hpp|const std::vector<Volatility> & PiecewiseConstantVariance::volatilities() const;+| |ql/models/marketmodels/models/piecewiseconstantvariance.hpp|const std::vector<Time> & PiecewiseConstantVariance::rateTimes() const;+| |ql/models/marketmodels/models/piecewiseconstantvariance.hpp|Real PiecewiseConstantVariance::variance(Size i) const;+| |ql/models/marketmodels/models/piecewiseconstantvariance.hpp|Volatility PiecewiseConstantVariance::volatility(Size i) const;+| |ql/models/marketmodels/models/piecewiseconstantvariance.hpp|Real PiecewiseConstantVariance::totalVariance(Size i) const;+| |ql/models/marketmodels/models/piecewiseconstantvariance.hpp|Volatility PiecewiseConstantVariance::totalVolatility(Size i) const;+| |ql/models/marketmodels/models/pseudorootfacade.hpp|PseudoRootFacade::PseudoRootFacade(const ext::shared_ptr<CTSMMCapletCalibration> & calibrator);+| |ql/models/marketmodels/models/pseudorootfacade.hpp|PseudoRootFacade::PseudoRootFacade(const std::vector<Matrix> & covariancePseudoRoots, const std::vector<Rate> & rateTimes, std::vector<Rate> initialRates, const std::vector<Spread> & displacements);+| |ql/models/marketmodels/models/pseudorootfacade.hpp|const std::vector<Rate> & initialRates() const;+| |ql/models/marketmodels/models/pseudorootfacade.hpp|const std::vector<Spread> & displacements() const;+| |ql/models/marketmodels/models/pseudorootfacade.hpp|const EvolutionDescription & evolution() const;+| |ql/models/marketmodels/models/pseudorootfacade.hpp|Size numberOfRates() const;+| |ql/models/marketmodels/models/pseudorootfacade.hpp|Size numberOfFactors() const;+| |ql/models/marketmodels/models/pseudorootfacade.hpp|Size numberOfSteps() const;+| |ql/models/marketmodels/models/pseudorootfacade.hpp|const Matrix & pseudoRoot(Size i) const;+| |ql/models/marketmodels/models/volatilityinterpolationspecifier.hpp|VolatilityInterpolationSpecifier::VolatilityInterpolationSpecifier();+| |ql/models/marketmodels/models/volatilityinterpolationspecifier.hpp|void VolatilityInterpolationSpecifier::setScalingFactors(const std::vector<Real> & scales);+| |ql/models/marketmodels/models/volatilityinterpolationspecifier.hpp|void VolatilityInterpolationSpecifier::setLastCapletVol(Real vol);+| |ql/models/marketmodels/models/volatilityinterpolationspecifier.hpp|const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> & VolatilityInterpolationSpecifier::interpolatedVariances() const;+| |ql/models/marketmodels/models/volatilityinterpolationspecifier.hpp|const std::vector<ext::shared_ptr<PiecewiseConstantVariance>> & VolatilityInterpolationSpecifier::originalVariances() const;+| |ql/models/marketmodels/models/volatilityinterpolationspecifier.hpp|Size VolatilityInterpolationSpecifier::getPeriod() const;+| |ql/models/marketmodels/models/volatilityinterpolationspecifier.hpp|Size VolatilityInterpolationSpecifier::getOffset() const;+| |ql/models/marketmodels/models/volatilityinterpolationspecifier.hpp|Size VolatilityInterpolationSpecifier::getNoBigRates() const;+| |ql/models/marketmodels/models/volatilityinterpolationspecifier.hpp|Size VolatilityInterpolationSpecifier::getNoSmallRates() const;+| |ql/models/marketmodels/models/volatilityinterpolationspecifierabcd.hpp|VolatilityInterpolationSpecifierabcd::VolatilityInterpolationSpecifierabcd(Size period, Size offset, const std::vector<PiecewiseConstantAbcdVariance> & originalVariances, const std::vector<Time> & timesForSmallRates, Real lastCapletVol = 0.0);+| |ql/models/marketmodels/multiproduct.hpp|std::vector<Size> MarketModelMultiProduct::suggestedNumeraires() const;+| |ql/models/marketmodels/multiproduct.hpp|const EvolutionDescription & MarketModelMultiProduct::evolution() const;+| |ql/models/marketmodels/multiproduct.hpp|std::vector<Time> MarketModelMultiProduct::possibleCashFlowTimes() const;+| |ql/models/marketmodels/multiproduct.hpp|Size MarketModelMultiProduct::numberOfProducts() const;+| |ql/models/marketmodels/multiproduct.hpp|Size MarketModelMultiProduct::maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/multiproduct.hpp|void MarketModelMultiProduct::reset();+| |ql/models/marketmodels/multiproduct.hpp|bool MarketModelMultiProduct::nextTimeStep(const CurveState & currentState, std::vector<Size> & numberCashFlowsThisStep, std::vector<std::vector<CashFlow>> & cashFlowsGenerated);+| |ql/models/marketmodels/multiproduct.hpp|std::unique_ptr<MarketModelMultiProduct> MarketModelMultiProduct::clone() const;+| |ql/models/marketmodels/pathwiseaccountingengine.hpp|PathwiseAccountingEngine::PathwiseAccountingEngine(ext::shared_ptr<LogNormalFwdRateEuler> evolver, const Clone<MarketModelPathwiseMultiProduct> & product, ext::shared_ptr<MarketModel> pseudoRootStructure, Real initialNumeraireValue);+| |ql/models/marketmodels/pathwiseaccountingengine.hpp|void PathwiseAccountingEngine::multiplePathValues(SequenceStatisticsInc & stats, Size numberOfPaths);+| |ql/models/marketmodels/pathwiseaccountingengine.hpp|PathwiseVegasAccountingEngine::PathwiseVegasAccountingEngine(ext::shared_ptr<LogNormalFwdRateEuler> evolver, const Clone<MarketModelPathwiseMultiProduct> & product, ext::shared_ptr<MarketModel> pseudoRootStructure, const std::vector<std::vector<Matrix>> & VegaBumps, Real initialNumeraireValue);+| |ql/models/marketmodels/pathwiseaccountingengine.hpp|void PathwiseVegasAccountingEngine::multiplePathValues(std::vector<Real> & means, std::vector<Real> & errors, Size numberOfPaths);+| |ql/models/marketmodels/pathwiseaccountingengine.hpp|PathwiseVegasOuterAccountingEngine::PathwiseVegasOuterAccountingEngine(ext::shared_ptr<LogNormalFwdRateEuler> evolver, const Clone<MarketModelPathwiseMultiProduct> & product, ext::shared_ptr<MarketModel> pseudoRootStructure, const std::vector<std::vector<Matrix>> & VegaBumps, Real initialNumeraireValue);+| |ql/models/marketmodels/pathwiseaccountingengine.hpp|void PathwiseVegasOuterAccountingEngine::multiplePathValues(std::vector<Real> & means, std::vector<Real> & errors, Size numberOfPaths);+| |ql/models/marketmodels/pathwiseaccountingengine.hpp|void PathwiseVegasOuterAccountingEngine::multiplePathValuesElementary(std::vector<Real> & means, std::vector<Real> & errors, Size numberOfPaths);+| |ql/models/marketmodels/pathwisediscounter.hpp|MarketModelPathwiseDiscounter::MarketModelPathwiseDiscounter(Time paymentTime, const std::vector<Time> & rateTimes);+| |ql/models/marketmodels/pathwisediscounter.hpp|void MarketModelPathwiseDiscounter::getFactors(const Matrix & LIBORRates, const Matrix & Discounts, Size currentStep, std::vector<Real> & factors) const;+| |ql/models/marketmodels/pathwisegreeks/bumpinstrumentjacobian.hpp|VolatilityBumpInstrumentJacobian::VolatilityBumpInstrumentJacobian(const VegaBumpCollection & bumps, const std::vector<Swaption> & swaptions, const std::vector<Cap> & caps);+|x|ql/models/marketmodels/pathwisegreeks/bumpinstrumentjacobian.hpp|const VegaBumpCollection & VolatilityBumpInstrumentJacobian::getInputBumps() const;+| |ql/models/marketmodels/pathwisegreeks/bumpinstrumentjacobian.hpp|std::vector<Real> VolatilityBumpInstrumentJacobian::derivativesVolatility(Size j) const;+| |ql/models/marketmodels/pathwisegreeks/bumpinstrumentjacobian.hpp|std::vector<Real> VolatilityBumpInstrumentJacobian::onePercentBump(Size j) const;+| |ql/models/marketmodels/pathwisegreeks/bumpinstrumentjacobian.hpp|const Matrix & VolatilityBumpInstrumentJacobian::getAllOnePercentBumps() const;+| |ql/models/marketmodels/pathwisegreeks/bumpinstrumentjacobian.hpp|OrthogonalizedBumpFinder::OrthogonalizedBumpFinder(const VegaBumpCollection & bumps, const std::vector<VolatilityBumpInstrumentJacobian::Swaption> & swaptions, const std::vector<VolatilityBumpInstrumentJacobian::Cap> & caps, Real multiplierCutOff, Real tolerance);+| |ql/models/marketmodels/pathwisegreeks/bumpinstrumentjacobian.hpp|void OrthogonalizedBumpFinder::GetVegaBumps(std::vector<std::vector<Matrix>> & theBumps) const;+| |ql/models/marketmodels/pathwisegreeks/ratepseudorootjacobian.hpp|RatePseudoRootJacobianNumerical::RatePseudoRootJacobianNumerical(const Matrix & pseudoRoot, Size aliveIndex, Size numeraire, const std::vector<Time> & taus, const std::vector<Matrix> & pseudoBumps, const std::vector<Spread> & displacements);+| |ql/models/marketmodels/pathwisegreeks/ratepseudorootjacobian.hpp|void RatePseudoRootJacobianNumerical::getBumps(const std::vector<Rate> & oldRates, const std::vector<Real> & oneStepDFs, const std::vector<Rate> & newRates, const std::vector<Real> & gaussians, Matrix & B);+| |ql/models/marketmodels/pathwisegreeks/ratepseudorootjacobian.hpp|RatePseudoRootJacobian::RatePseudoRootJacobian(const Matrix & pseudoRoot, Size aliveIndex, Size numeraire, const std::vector<Time> & taus, const std::vector<Matrix> & pseudoBumps, std::vector<Spread> displacements);+| |ql/models/marketmodels/pathwisegreeks/ratepseudorootjacobian.hpp|void RatePseudoRootJacobian::getBumps(const std::vector<Rate> & oldRates, const std::vector<Real> & oneStepDFs, const std::vector<Rate> & newRates, const std::vector<Real> & gaussians, Matrix & B);+| |ql/models/marketmodels/pathwisegreeks/ratepseudorootjacobian.hpp|RatePseudoRootJacobianAllElements::RatePseudoRootJacobianAllElements(const Matrix & pseudoRoot, Size aliveIndex, Size numeraire, const std::vector<Time> & taus, std::vector<Spread> displacements);+| |ql/models/marketmodels/pathwisegreeks/ratepseudorootjacobian.hpp|void RatePseudoRootJacobianAllElements::getBumps(const std::vector<Rate> & oldRates, const std::vector<Real> & oneStepDFs, const std::vector<Rate> & newRates, const std::vector<Real> & gaussians, std::vector<Matrix> & B);+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|SwaptionPseudoDerivative::SwaptionPseudoDerivative(const ext::shared_ptr<MarketModel> & inputModel, Size startIndex, Size endIndex);+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|const Matrix & SwaptionPseudoDerivative::varianceDerivative(Size i) const;+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|const Matrix & SwaptionPseudoDerivative::volatilityDerivative(Size i) const;+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|Real SwaptionPseudoDerivative::impliedVolatility() const;+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|Real SwaptionPseudoDerivative::variance() const;+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|Real SwaptionPseudoDerivative::expiry() const;+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|CapPseudoDerivative::CapPseudoDerivative(const ext::shared_ptr<MarketModel> & inputModel, Real strike, Size startIndex, Size endIndex, Real firstDF);+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|const Matrix & CapPseudoDerivative::volatilityDerivative(Size i) const;+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|const Matrix & CapPseudoDerivative::priceDerivative(Size i) const;+| |ql/models/marketmodels/pathwisegreeks/swaptionpseudojacobian.hpp|Real CapPseudoDerivative::impliedVolatility() const;+| |ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|VegaBumpCluster::VegaBumpCluster(Size factorBegin, Size factorEnd, Size rateBegin, Size rateEnd, Size stepBegin, Size stepEnd);+| |ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|bool VegaBumpCluster::doesIntersect(const VegaBumpCluster & comparee) const;+| |ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|bool VegaBumpCluster::isCompatible(const ext::shared_ptr<MarketModel> & volStructure) const;+|x|ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|Size VegaBumpCluster::factorBegin() const;+|x|ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|Size VegaBumpCluster::factorEnd() const;+|x|ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|Size VegaBumpCluster::rateBegin() const;+|x|ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|Size VegaBumpCluster::rateEnd() const;+|x|ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|Size VegaBumpCluster::stepBegin() const;+|x|ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|Size VegaBumpCluster::stepEnd() const;+| |ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|VegaBumpCollection::VegaBumpCollection(const ext::shared_ptr<MarketModel> & volStructure, bool allowFactorwiseBumping = true);+| |ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|VegaBumpCollection::VegaBumpCollection(std::vector<VegaBumpCluster> allBumps, ext::shared_ptr<MarketModel> volStructure);+| |ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|Size VegaBumpCollection::numberBumps() const;+|x|ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|const ext::shared_ptr<MarketModel> & VegaBumpCollection::associatedModel() const;+|x|ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|const std::vector<VegaBumpCluster> & VegaBumpCollection::allBumps() const;+| |ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|bool VegaBumpCollection::isFull() const;+| |ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|bool VegaBumpCollection::isNonOverlapping() const;+| |ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp|bool VegaBumpCollection::isSensible() const;+| |ql/models/marketmodels/pathwisemultiproduct.hpp|std::vector<Size> MarketModelPathwiseMultiProduct::suggestedNumeraires() const;+| |ql/models/marketmodels/pathwisemultiproduct.hpp|const EvolutionDescription & MarketModelPathwiseMultiProduct::evolution() const;+| |ql/models/marketmodels/pathwisemultiproduct.hpp|std::vector<Time> MarketModelPathwiseMultiProduct::possibleCashFlowTimes() const;+| |ql/models/marketmodels/pathwisemultiproduct.hpp|Size MarketModelPathwiseMultiProduct::numberOfProducts() const;+| |ql/models/marketmodels/pathwisemultiproduct.hpp|Size MarketModelPathwiseMultiProduct::maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/pathwisemultiproduct.hpp|bool MarketModelPathwiseMultiProduct::alreadyDeflated() const;+| |ql/models/marketmodels/pathwisemultiproduct.hpp|void MarketModelPathwiseMultiProduct::reset();+| |ql/models/marketmodels/pathwisemultiproduct.hpp|bool MarketModelPathwiseMultiProduct::nextTimeStep(const CurveState & currentState, std::vector<Size> & numberCashFlowsThisStep, std::vector<std::vector<MarketModelPathwiseMultiProduct::CashFlow>> & cashFlowsGenerated);+| |ql/models/marketmodels/pathwisemultiproduct.hpp|std::unique_ptr<MarketModelPathwiseMultiProduct> MarketModelPathwiseMultiProduct::clone() const;+| |ql/models/marketmodels/piecewiseconstantcorrelation.hpp|const std::vector<Time> & PiecewiseConstantCorrelation::times() const;+| |ql/models/marketmodels/piecewiseconstantcorrelation.hpp|const std::vector<Time> & PiecewiseConstantCorrelation::rateTimes() const;+| |ql/models/marketmodels/piecewiseconstantcorrelation.hpp|const std::vector<Matrix> & PiecewiseConstantCorrelation::correlations() const;+| |ql/models/marketmodels/piecewiseconstantcorrelation.hpp|const Matrix & PiecewiseConstantCorrelation::correlation(Size i) const;+| |ql/models/marketmodels/piecewiseconstantcorrelation.hpp|Size PiecewiseConstantCorrelation::numberOfRates() const;+| |ql/models/marketmodels/products/compositeproduct.hpp|MarketModelComposite::MarketModelComposite();+| |ql/models/marketmodels/products/compositeproduct.hpp|void MarketModelComposite::add(const Clone<MarketModelMultiProduct> &, Real multiplier = 1.0);+| |ql/models/marketmodels/products/compositeproduct.hpp|void MarketModelComposite::subtract(const Clone<MarketModelMultiProduct> &, Real multiplier = 1.0);+| |ql/models/marketmodels/products/compositeproduct.hpp|void MarketModelComposite::finalize();+| |ql/models/marketmodels/products/compositeproduct.hpp|Size MarketModelComposite::size() const;+| |ql/models/marketmodels/products/compositeproduct.hpp|const MarketModelMultiProduct & MarketModelComposite::item(Size i) const;+| |ql/models/marketmodels/products/compositeproduct.hpp|MarketModelMultiProduct & MarketModelComposite::item(Size i);+| |ql/models/marketmodels/products/compositeproduct.hpp|Real MarketModelComposite::multiplier(Size i) const;+| |ql/models/marketmodels/products/multiproductmultistep.hpp|MultiProductMultiStep::MultiProductMultiStep(std::vector<Time> rateTimes);+| |ql/models/marketmodels/products/multiproductonestep.hpp|MultiProductOneStep::MultiProductOneStep(std::vector<Time> rateTimes);+| |ql/models/marketmodels/products/multistep/callspecifiedmultiproduct.hpp|CallSpecifiedMultiProduct::CallSpecifiedMultiProduct(const Clone<MarketModelMultiProduct> & underlying, const Clone<ExerciseStrategy<CurveState>> &, Clone<MarketModelMultiProduct> rebate = Clone<MarketModelMultiProduct>());+| |ql/models/marketmodels/products/multistep/callspecifiedmultiproduct.hpp|const MarketModelMultiProduct & CallSpecifiedMultiProduct::underlying() const;+| |ql/models/marketmodels/products/multistep/callspecifiedmultiproduct.hpp|const ExerciseStrategy<CurveState> & CallSpecifiedMultiProduct::strategy() const;+| |ql/models/marketmodels/products/multistep/callspecifiedmultiproduct.hpp|const MarketModelMultiProduct & CallSpecifiedMultiProduct::rebate() const;+| |ql/models/marketmodels/products/multistep/callspecifiedmultiproduct.hpp|void CallSpecifiedMultiProduct::enableCallability();+| |ql/models/marketmodels/products/multistep/callspecifiedmultiproduct.hpp|void CallSpecifiedMultiProduct::disableCallability();+| |ql/models/marketmodels/products/multistep/cashrebate.hpp|MarketModelCashRebate::MarketModelCashRebate(EvolutionDescription evolution, const std::vector<Time> & paymentTimes, Matrix amounts, Size numberOfProducts);+| |ql/models/marketmodels/products/multistep/exerciseadapter.hpp|ExerciseAdapter::ExerciseAdapter(const Clone<MarketModelExerciseValue> & exercise, Size numberOfProducts = 1);+| |ql/models/marketmodels/products/multistep/exerciseadapter.hpp|const MarketModelExerciseValue & ExerciseAdapter::exerciseValue() const;+| |ql/models/marketmodels/products/multistep/exerciseadapter.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/exerciseadapter.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/exerciseadapter.hpp|const EvolutionDescription & evolution() const;+| |ql/models/marketmodels/products/multistep/exerciseadapter.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/exerciseadapter.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepcoinitialswaps.hpp|MultiStepCoinitialSwaps::MultiStepCoinitialSwaps(const std::vector<Time> & rateTimes, std::vector<Real> fixedAccruals, std::vector<Real> floatingAccruals, const std::vector<Time> & paymentTimes, Real fixedRate);+| |ql/models/marketmodels/products/multistep/multistepcoinitialswaps.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepcoinitialswaps.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepcoinitialswaps.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepcoinitialswaps.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaps.hpp|MultiStepCoterminalSwaps::MultiStepCoterminalSwaps(const std::vector<Time> & rateTimes, std::vector<Real> fixedAccruals, std::vector<Real> floatingAccruals, const std::vector<Time> & paymentTimes, Real fixedRate);+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaps.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaps.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaps.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaps.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaptions.hpp|MultiStepCoterminalSwaptions::MultiStepCoterminalSwaptions(const std::vector<Time> & rateTimes, const std::vector<Time> & paymentTimes, std::vector<ext::shared_ptr<StrikedTypePayoff>>);+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaptions.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaptions.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaptions.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepcoterminalswaptions.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepforwards.hpp|MultiStepForwards::MultiStepForwards(const std::vector<Time> & rateTimes, std::vector<Real> accruals, const std::vector<Time> & paymentTimes, std::vector<Rate> strikes);+| |ql/models/marketmodels/products/multistep/multistepforwards.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepforwards.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepforwards.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepforwards.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepinversefloater.hpp|MultiStepInverseFloater::MultiStepInverseFloater(const std::vector<Time> & rateTimes, std::vector<Real> fixedAccruals, const std::vector<Real> & floatingAccruals, const std::vector<Real> & fixedStrikes, const std::vector<Real> & fixedMultipliers, const std::vector<Real> & floatingSpreads, const std::vector<Time> & paymentTimes, bool payer = true);+| |ql/models/marketmodels/products/multistep/multistepinversefloater.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepinversefloater.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepinversefloater.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepinversefloater.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepnothing.hpp|MultiStepNothing::MultiStepNothing(const EvolutionDescription & evolution, Size numberOfProducts = 1, Size doneIndex = 0);+| |ql/models/marketmodels/products/multistep/multistepnothing.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepnothing.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepnothing.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepnothing.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepoptionlets.hpp|MultiStepOptionlets::MultiStepOptionlets(const std::vector<Time> & rateTimes, std::vector<Real> accruals, const std::vector<Time> & paymentTimes, std::vector<ext::shared_ptr<Payoff>>);+| |ql/models/marketmodels/products/multistep/multistepoptionlets.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepoptionlets.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepoptionlets.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepoptionlets.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multisteppathwisewrapper.hpp|MultiProductPathwiseWrapper::MultiProductPathwiseWrapper(const MarketModelPathwiseMultiProduct & innerProduct_);+| |ql/models/marketmodels/products/multistep/multistepperiodcapletswaptions.hpp|MultiStepPeriodCapletSwaptions::MultiStepPeriodCapletSwaptions(const std::vector<Time> & rateTimes, const std::vector<Time> & forwardOptionPaymentTimes, const std::vector<Time> & swaptionPaymentTimes, std::vector<ext::shared_ptr<StrikedTypePayoff>> forwardPayOffs, std::vector<ext::shared_ptr<StrikedTypePayoff>> swapPayOffs, Size period, Size offset);+| |ql/models/marketmodels/products/multistep/multistepperiodcapletswaptions.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepperiodcapletswaptions.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepperiodcapletswaptions.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepperiodcapletswaptions.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepratchet.hpp|MultiStepRatchet::MultiStepRatchet(const std::vector<Time> & rateTimes, std::vector<Real> accruals, const std::vector<Time> & paymentTimes, Real gearingOfFloor, Real gearingOfFixing, Rate spreadOfFloor, Rate spreadOfFixing, Real initialFloor, bool payer = true);+| |ql/models/marketmodels/products/multistep/multistepratchet.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepratchet.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepratchet.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepratchet.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepswap.hpp|MultiStepSwap::MultiStepSwap(const std::vector<Time> & rateTimes, std::vector<Real> fixedAccruals, std::vector<Real> floatingAccruals, const std::vector<Time> & paymentTimes, Rate fixedRate, bool payer = true);+| |ql/models/marketmodels/products/multistep/multistepswap.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepswap.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepswap.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepswap.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multistepswaption.hpp|MultiStepSwaption::MultiStepSwaption(const std::vector<Time> & rateTimes, Size startIndex, Size endIndex, ext::shared_ptr<StrikedTypePayoff> &);+| |ql/models/marketmodels/products/multistep/multistepswaption.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/multistep/multistepswaption.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/multistep/multistepswaption.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/multistep/multistepswaption.hpp|void reset();+| |ql/models/marketmodels/products/multistep/multisteptarn.hpp|MultiStepTarn::MultiStepTarn(const std::vector<Time> & rateTimes, const std::vector<Real> & accruals, const std::vector<Real> & accrualsFloating, const std::vector<Time> & paymentTimes, const std::vector<Time> & paymentTimesFloating, Real totalCoupon, const std::vector<Real> & strikes, std::vector<Real> multipliers, const std::vector<Real> & floatingSpreads);+| |ql/models/marketmodels/products/onestep/onestepcoinitialswaps.hpp|OneStepCoinitialSwaps::OneStepCoinitialSwaps(const std::vector<Time> & rateTimes, std::vector<Real> fixedAccruals, std::vector<Real> floatingAccruals, const std::vector<Time> & paymentTimes, Real fixedRate);+| |ql/models/marketmodels/products/onestep/onestepcoinitialswaps.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/onestep/onestepcoinitialswaps.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/onestep/onestepcoinitialswaps.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/onestep/onestepcoinitialswaps.hpp|void reset();+| |ql/models/marketmodels/products/onestep/onestepcoterminalswaps.hpp|OneStepCoterminalSwaps::OneStepCoterminalSwaps(const std::vector<Time> & rateTimes, std::vector<Real> fixedAccruals, std::vector<Real> floatingAccruals, const std::vector<Time> & paymentTimes, Real fixedRate);+| |ql/models/marketmodels/products/onestep/onestepcoterminalswaps.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/onestep/onestepcoterminalswaps.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/onestep/onestepcoterminalswaps.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/onestep/onestepcoterminalswaps.hpp|void reset();+| |ql/models/marketmodels/products/onestep/onestepforwards.hpp|OneStepForwards::OneStepForwards(const std::vector<Time> & rateTimes, std::vector<Real> accruals, const std::vector<Time> & paymentTimes, std::vector<Rate> strikes);+| |ql/models/marketmodels/products/onestep/onestepforwards.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/onestep/onestepforwards.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/onestep/onestepforwards.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/onestep/onestepforwards.hpp|void reset();+| |ql/models/marketmodels/products/onestep/onestepoptionlets.hpp|OneStepOptionlets::OneStepOptionlets(const std::vector<Time> & rateTimes, std::vector<Real> accruals, const std::vector<Time> & paymentTimes, std::vector<ext::shared_ptr<Payoff>>);+| |ql/models/marketmodels/products/onestep/onestepoptionlets.hpp|std::vector<Time> possibleCashFlowTimes() const;+| |ql/models/marketmodels/products/onestep/onestepoptionlets.hpp|Size numberOfProducts() const;+| |ql/models/marketmodels/products/onestep/onestepoptionlets.hpp|Size maxNumberOfCashFlowsPerProductPerStep() const;+| |ql/models/marketmodels/products/onestep/onestepoptionlets.hpp|void reset();+| |ql/models/marketmodels/products/pathwise/pathwiseproductcallspecified.hpp|CallSpecifiedPathwiseMultiProduct::CallSpecifiedPathwiseMultiProduct(const Clone<MarketModelPathwiseMultiProduct> & underlying, const Clone<ExerciseStrategy<CurveState>> &, Clone<MarketModelPathwiseMultiProduct> rebate = Clone<MarketModelPathwiseMultiProduct>());+| |ql/models/marketmodels/products/pathwise/pathwiseproductcallspecified.hpp|const MarketModelPathwiseMultiProduct & CallSpecifiedPathwiseMultiProduct::underlying() const;+| |ql/models/marketmodels/products/pathwise/pathwiseproductcallspecified.hpp|const ExerciseStrategy<CurveState> & CallSpecifiedPathwiseMultiProduct::strategy() const;+| |ql/models/marketmodels/products/pathwise/pathwiseproductcallspecified.hpp|const MarketModelPathwiseMultiProduct & CallSpecifiedPathwiseMultiProduct::rebate() const;+| |ql/models/marketmodels/products/pathwise/pathwiseproductcallspecified.hpp|void CallSpecifiedPathwiseMultiProduct::enableCallability();+| |ql/models/marketmodels/products/pathwise/pathwiseproductcallspecified.hpp|void CallSpecifiedPathwiseMultiProduct::disableCallability();+| |ql/models/marketmodels/products/pathwise/pathwiseproductcaplet.hpp|MarketModelPathwiseMultiCaplet::MarketModelPathwiseMultiCaplet(const std::vector<Time> & rateTimes, const std::vector<Real> & accruals, const std::vector<Time> & paymentTimes, const std::vector<Rate> & strikes);+| |ql/models/marketmodels/products/pathwise/pathwiseproductcaplet.hpp|MarketModelPathwiseMultiDeflatedCaplet::MarketModelPathwiseMultiDeflatedCaplet(const std::vector<Time> & rateTimes, const std::vector<Real> & accruals, const std::vector<Time> & paymentTimes, const std::vector<Rate> & strikes);+| |ql/models/marketmodels/products/pathwise/pathwiseproductcaplet.hpp|MarketModelPathwiseMultiDeflatedCaplet::MarketModelPathwiseMultiDeflatedCaplet(const std::vector<Time> & rateTimes, const std::vector<Real> & accruals, const std::vector<Time> & paymentTimes, Rate strike);+| |ql/models/marketmodels/products/pathwise/pathwiseproductcaplet.hpp|MarketModelPathwiseMultiDeflatedCap::MarketModelPathwiseMultiDeflatedCap(const std::vector<Time> & rateTimes, const std::vector<Real> & accruals, const std::vector<Time> & paymentTimes, Rate strike, std::vector<std::pair<Size, Size>> startsAndEnds);+| |ql/models/marketmodels/products/pathwise/pathwiseproductcashrebate.hpp|MarketModelPathwiseCashRebate::MarketModelPathwiseCashRebate(EvolutionDescription evolution, const std::vector<Time> & paymentTimes, Matrix amounts, Size numberOfProducts);+| |ql/models/marketmodels/products/pathwise/pathwiseproductinversefloater.hpp|MarketModelPathwiseInverseFloater::MarketModelPathwiseInverseFloater(const std::vector<Time> & rateTimes, std::vector<Real> fixedAccruals, const std::vector<Real> & floatingAccruals, const std::vector<Real> & fixedStrikes, const std::vector<Real> & fixedMultipliers, const std::vector<Real> & floatingSpreads, const std::vector<Time> & paymentTimes, bool payer = true);+| |ql/models/marketmodels/products/pathwise/pathwiseproductswap.hpp|MarketModelPathwiseSwap::MarketModelPathwiseSwap(const std::vector<Time> & rateTimes, const std::vector<Time> & accruals, const std::vector<Rate> & strikes, Real multiplier = 1.0);+| |ql/models/marketmodels/products/pathwise/pathwiseproductswaption.hpp|MarketModelPathwiseCoterminalSwaptionsDeflated::MarketModelPathwiseCoterminalSwaptionsDeflated(const std::vector<Time> & rateTimes, const std::vector<Rate> & strikes);+| |ql/models/marketmodels/products/pathwise/pathwiseproductswaption.hpp|MarketModelPathwiseCoterminalSwaptionsNumericalDeflated::MarketModelPathwiseCoterminalSwaptionsNumericalDeflated(const std::vector<Time> & rateTimes, const std::vector<Rate> & strikes, Real bumpSize_);+| |ql/models/marketmodels/proxygreekengine.hpp|ProxyGreekEngine::ProxyGreekEngine(ext::shared_ptr<MarketModelEvolver> evolver, std::vector<std::vector<ext::shared_ptr<ConstrainedEvolver>>> constrainedEvolvers, std::vector<std::vector<std::vector<Real>>> diffWeights, std::vector<Size> startIndexOfConstraint, std::vector<Size> endIndexOfConstraint, const Clone<MarketModelMultiProduct> & product, Real initialNumeraireValue);+| |ql/models/marketmodels/proxygreekengine.hpp|void ProxyGreekEngine::multiplePathValues(SequenceStatisticsInc & stats, std::vector<std::vector<SequenceStatisticsInc>> & modifiedStats, Size numberOfPaths);+| |ql/models/marketmodels/proxygreekengine.hpp|void ProxyGreekEngine::singlePathValues(std::vector<Real> & values, std::vector<std::vector<std::vector<Real>>> & modifiedValues);+| |ql/models/marketmodels/swapforwardmappings.hpp|static Real SwapForwardMappings::annuity(const CurveState & cs, Size startIndex, Size endIndex, Size numeraireIndex);+| |ql/models/marketmodels/swapforwardmappings.hpp|static Real SwapForwardMappings::swapDerivative(const CurveState & cs, Size startIndex, Size endIndex, Size forwardIndex);+| |ql/models/marketmodels/swapforwardmappings.hpp|static Matrix SwapForwardMappings::coterminalSwapForwardJacobian(const CurveState & cs);+| |ql/models/marketmodels/swapforwardmappings.hpp|static Matrix SwapForwardMappings::coterminalSwapZedMatrix(const CurveState & cs, Spread displacement);+| |ql/models/marketmodels/swapforwardmappings.hpp|static Matrix SwapForwardMappings::coinitialSwapForwardJacobian(const CurveState & cs);+| |ql/models/marketmodels/swapforwardmappings.hpp|static Matrix SwapForwardMappings::coinitialSwapZedMatrix(const CurveState & cs, Spread displacement);+| |ql/models/marketmodels/swapforwardmappings.hpp|static Matrix SwapForwardMappings::cmSwapForwardJacobian(const CurveState & cs, Size spanningForwards);+| |ql/models/marketmodels/swapforwardmappings.hpp|static Matrix SwapForwardMappings::cmSwapZedMatrix(const CurveState & cs, Size spanningForwards, Spread displacement);+| |ql/models/marketmodels/swapforwardmappings.hpp|static Real SwapForwardMappings::swaptionImpliedVolatility(const MarketModel & volStructure, Size startIndex, Size endIndex);+| |ql/models/marketmodels/utilities.hpp|void mergeTimes(const std::vector<std::vector<Time>> & times, std::vector<Time> & mergedTimes, std::vector<std::valarray<bool>> & isPresent);+| |ql/models/marketmodels/utilities.hpp|std::valarray<bool> isInSubset(const std::vector<Time> & set, const std::vector<Time> & subset);+| |ql/models/marketmodels/utilities.hpp|void checkIncreasingTimes(const std::vector<Time> & times);+| |ql/models/marketmodels/utilities.hpp|void checkIncreasingTimesAndCalculateTaus(const std::vector<Time> & times, std::vector<Time> & taus);+|v|ql/models/model.hpp|DiscountFactor AffineModel::discount(Time t) const;+|v|ql/models/model.hpp|Real AffineModel::discountBond(Time now, Time maturity, Array factors) const;+|v|ql/models/model.hpp|Real AffineModel::discountBondOption(Option::Type type, Real strike, Time maturity, Time bondMaturity) const;+|v|ql/models/model.hpp|Real AffineModel::discountBondOption(Option::Type type, Real strike, Time maturity, Time bondStart, Time bondMaturity) const;+| |ql/models/model.hpp|TermStructureConsistentModel::TermStructureConsistentModel(Handle<YieldTermStructure> termStructure);+|x|ql/models/model.hpp|const Handle<YieldTermStructure> & TermStructureConsistentModel::termStructure() const;+| |ql/models/model.hpp|CalibratedModel::CalibratedModel(Size nArguments);+|v|ql/models/model.hpp|void CalibratedModel::calibrate(const std::vector<ext::shared_ptr<CalibrationHelper>> &, OptimizationMethod & method, const EndCriteria & endCriteria, const Constraint & constraint = Constraint(), const std::vector<Real> & weights = std::vector<Real>(), const std::vector<bool> & fixParameters = std::vector<bool>());+|v|ql/models/model.hpp|Real CalibratedModel::value(const Array & params, const std::vector<ext::shared_ptr<CalibrationHelper>> &);+| |ql/models/model.hpp|const ext::shared_ptr<Constraint> & CalibratedModel::constraint() const;+| |ql/models/model.hpp|EndCriteria::Type CalibratedModel::endCriteria() const;+| |ql/models/model.hpp|const Array & CalibratedModel::problemValues() const;+|v|ql/models/model.hpp|Array CalibratedModel::params() const;+|v|ql/models/model.hpp|void CalibratedModel::setParams(const Array & params);+| |ql/models/model.hpp|Integer CalibratedModel::functionEvaluation() const;+| |ql/models/model.hpp|ShortRateModel::ShortRateModel(Size nArguments);+| |ql/models/model.hpp|ext::shared_ptr<Lattice> ShortRateModel::tree(const TimeGrid &) const;+| |ql/models/model.hpp|Real discountBondOption(Option::Type type, Real strike, Time maturity, Time, Time bondMaturity) const;+| |ql/models/model.hpp|Impl::Impl(const std::vector<Parameter> & arguments);+| |ql/models/model.hpp|bool Impl::test(const Array & params) const;+| |ql/models/model.hpp|Array Impl::upperBound(const Array & params) const;+| |ql/models/model.hpp|Array Impl::lowerBound(const Array & params) const;+| |ql/models/model.hpp|PrivateConstraint::PrivateConstraint(const std::vector<Parameter> & arguments);+| |ql/models/parameter.hpp|Real Impl::value(const Array & params, Time t) const;+| |ql/models/parameter.hpp|Parameter::Parameter();+| |ql/models/parameter.hpp|const Array & Parameter::params() const;+| |ql/models/parameter.hpp|void Parameter::setParam(Size i, Real x);+| |ql/models/parameter.hpp|bool Parameter::testParams(const Array & params) const;+| |ql/models/parameter.hpp|Size Parameter::size() const;+| |ql/models/parameter.hpp|Real Parameter::operator()(Time t) const;+|x|ql/models/parameter.hpp|const ext::shared_ptr<Impl> & Parameter::implementation() const;+| |ql/models/parameter.hpp|const Constraint & Parameter::constraint() const;+| |ql/models/parameter.hpp|ConstantParameter::ConstantParameter(const Constraint & constraint);+| |ql/models/parameter.hpp|ConstantParameter::ConstantParameter(Real value, const Constraint & constraint);+| |ql/models/parameter.hpp|NullParameter::NullParameter();+| |ql/models/parameter.hpp|Impl::Impl(std::vector<Time> times);+| |ql/models/parameter.hpp|PiecewiseConstantParameter::PiecewiseConstantParameter(const std::vector<Time> & times, const Constraint & constraint = NoConstraint());+| |ql/models/parameter.hpp|NumericalImpl::NumericalImpl(Handle<YieldTermStructure> termStructure);+| |ql/models/parameter.hpp|void NumericalImpl::set(Time t, Real x);+| |ql/models/parameter.hpp|void NumericalImpl::change(Real x);+| |ql/models/parameter.hpp|void NumericalImpl::reset();+|x|ql/models/parameter.hpp|const Handle<YieldTermStructure> & NumericalImpl::termStructure() const;+| |ql/models/parameter.hpp|TermStructureFittingParameter::TermStructureFittingParameter(const ext::shared_ptr<Parameter::Impl> & impl);+| |ql/models/parameter.hpp|TermStructureFittingParameter::TermStructureFittingParameter(const Handle<YieldTermStructure> & term);+|v|ql/models/shortrate/calibrationhelpers/caphelper.hpp|CapHelper::CapHelper(const Period & length, const Handle<Quote> & volatility, ext::shared_ptr<IborIndex> index, Frequency fixedLegFrequency, DayCounter fixedLegDayCounter, bool includeFirstSwaplet, Handle<YieldTermStructure> termStructure, BlackCalibrationHelper::CalibrationErrorType errorType = BlackCalibrationHelper::RelativePriceError, VolatilityType type = ShiftedLognormal, Real shift = 0.0);+|v|ql/models/shortrate/calibrationhelpers/swaptionhelper.hpp|SwaptionHelper::SwaptionHelper(const Period & maturity, const Period & length, const Handle<Quote> & volatility, ext::shared_ptr<IborIndex> index, const Period & fixedLegTenor, DayCounter fixedLegDayCounter, DayCounter floatingLegDayCounter, Handle<YieldTermStructure> termStructure, CalibrationErrorType errorType = RelativePriceError, Real strike = Null<Real>(), Real nominal = 1.0, VolatilityType type = ShiftedLognormal, Real shift = 0.0, Natural settlementDays = Null<Size>(), RateAveraging::Type averagingMethod = RateAveraging::Compound);+|v|ql/models/shortrate/calibrationhelpers/swaptionhelper.hpp|SwaptionHelper::SwaptionHelper(const Date & exerciseDate, const Period & length, const Handle<Quote> & volatility, ext::shared_ptr<IborIndex> index, const Period & fixedLegTenor, DayCounter fixedLegDayCounter, DayCounter floatingLegDayCounter, Handle<YieldTermStructure> termStructure, CalibrationErrorType errorType = RelativePriceError, Real strike = Null<Real>(), Real nominal = 1.0, VolatilityType type = ShiftedLognormal, Real shift = 0.0, Natural settlementDays = Null<Size>(), RateAveraging::Type averagingMethod = RateAveraging::Compound);+|v|ql/models/shortrate/calibrationhelpers/swaptionhelper.hpp|SwaptionHelper::SwaptionHelper(const Date & exerciseDate, const Date & endDate, const Handle<Quote> & volatility, ext::shared_ptr<IborIndex> index, const Period & fixedLegTenor, DayCounter fixedLegDayCounter, DayCounter floatingLegDayCounter, Handle<YieldTermStructure> termStructure, CalibrationErrorType errorType = RelativePriceError, Real strike = Null<Real>(), Real nominal = 1.0, VolatilityType type = ShiftedLognormal, Real shift = 0.0, Natural settlementDays = Null<Size>(), RateAveraging::Type averagingMethod = RateAveraging::Compound);+|v|ql/models/shortrate/calibrationhelpers/swaptionhelper.hpp|const ext::shared_ptr<FixedVsFloatingSwap> & SwaptionHelper::underlying() const;+|v|ql/models/shortrate/calibrationhelpers/swaptionhelper.hpp|ext::shared_ptr<Swaption> SwaptionHelper::swaption() const;+| |ql/models/shortrate/onefactormodel.hpp|OneFactorModel::OneFactorModel(Size nArguments);+| |ql/models/shortrate/onefactormodel.hpp|ext::shared_ptr<ShortRateDynamics> OneFactorModel::dynamics() const;+| |ql/models/shortrate/onefactormodel.hpp|ShortRateDynamics::ShortRateDynamics(ext::shared_ptr<StochasticProcess1D> process);+| |ql/models/shortrate/onefactormodel.hpp|Real ShortRateDynamics::variable(Time t, Rate r) const;+| |ql/models/shortrate/onefactormodel.hpp|Rate ShortRateDynamics::shortRate(Time t, Real variable) const;+|x|ql/models/shortrate/onefactormodel.hpp|const ext::shared_ptr<StochasticProcess1D> & ShortRateDynamics::process();+| |ql/models/shortrate/onefactormodel.hpp|ShortRateTree::ShortRateTree(const ext::shared_ptr<TrinomialTree> & tree, ext::shared_ptr<ShortRateDynamics> dynamics, const TimeGrid & timeGrid);+| |ql/models/shortrate/onefactormodel.hpp|ShortRateTree::ShortRateTree(const ext::shared_ptr<TrinomialTree> & tree, ext::shared_ptr<ShortRateDynamics> dynamics, const ext::shared_ptr<TermStructureFittingParameter::NumericalImpl> & phi, const TimeGrid & timeGrid);+| |ql/models/shortrate/onefactormodel.hpp|Size ShortRateTree::size(Size i) const;+| |ql/models/shortrate/onefactormodel.hpp|DiscountFactor ShortRateTree::discount(Size i, Size index) const;+| |ql/models/shortrate/onefactormodel.hpp|Real ShortRateTree::underlying(Size i, Size index) const;+| |ql/models/shortrate/onefactormodel.hpp|Size ShortRateTree::descendant(Size i, Size index, Size branch) const;+| |ql/models/shortrate/onefactormodel.hpp|Real ShortRateTree::probability(Size i, Size index, Size branch) const;+| |ql/models/shortrate/onefactormodel.hpp|void ShortRateTree::setSpread(Spread spread);+| |ql/models/shortrate/onefactormodel.hpp|OneFactorAffineModel::OneFactorAffineModel(Size nArguments);+|v|ql/models/shortrate/onefactormodels/blackkarasinski.hpp|BlackKarasinski::BlackKarasinski(const Handle<YieldTermStructure> & termStructure, Real a = 0.1, Real sigma = 0.1);+| |ql/models/shortrate/onefactormodels/blackkarasinski.hpp|Dynamics::Dynamics(Parameter fitting, Real alpha, Real sigma);+|v|ql/models/shortrate/onefactormodels/coxingersollross.hpp|CoxIngersollRoss::CoxIngersollRoss(Rate r0 = 0.05, Real theta = 0.1, Real k = 0.1, Real sigma = 0.1, bool withFellerConstraint = true);+| |ql/models/shortrate/onefactormodels/coxingersollross.hpp|Dynamics::Dynamics(Real theta, Real k, Real sigma, Real x0);+|v|ql/models/shortrate/onefactormodels/extendedcoxingersollross.hpp|ExtendedCoxIngersollRoss::ExtendedCoxIngersollRoss(const Handle<YieldTermStructure> & termStructure, Real theta = 0.1, Real k = 0.1, Real sigma = 0.1, Real x0 = 0.05, bool withFellerConstraint = true);+| |ql/models/shortrate/onefactormodels/extendedcoxingersollross.hpp|Dynamics::Dynamics(Parameter phi, Real theta, Real k, Real sigma, Real x0);+| |ql/models/shortrate/onefactormodels/extendedcoxingersollross.hpp|Impl::Impl(Handle<YieldTermStructure> termStructure, Real theta, Real k, Real sigma, Real x0);+| |ql/models/shortrate/onefactormodels/extendedcoxingersollross.hpp|FittingParameter::FittingParameter(const Handle<YieldTermStructure> & termStructure, Real theta, Real k, Real sigma, Real x0);+| |ql/models/shortrate/onefactormodels/extendedcoxingersollross.hpp|ext::shared_ptr<OneFactorModel::ShortRateDynamics> dynamics() const;+| |ql/models/shortrate/onefactormodels/extendedcoxingersollross.hpp|void generateArguments();+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|ext::shared_ptr<StochasticProcess1D> Gaussian1dModel::stateProcess() const;+|x|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real Gaussian1dModel::numeraire(Time t, Real y = 0.0, const Handle<YieldTermStructure> & yts = Handle<YieldTermStructure>()) const;+|x|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real Gaussian1dModel::zerobond(Time T, Time t = 0.0, Real y = 0.0, const Handle<YieldTermStructure> & yts = Handle<YieldTermStructure>()) const;+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real Gaussian1dModel::numeraire(const Date & referenceDate, Real y = 0.0, const Handle<YieldTermStructure> & yts = Handle<YieldTermStructure>()) const;+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real Gaussian1dModel::zerobond(const Date & maturity, const Date & referenceDate = Date(), Real y = 0.0, const Handle<YieldTermStructure> & yts = Handle<YieldTermStructure>()) const;+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real Gaussian1dModel::zerobondOption(const Option::Type & type, const Date & expiry, const Date & valueDate, const Date & maturity, Rate strike, const Date & referenceDate = Date(), Real y = 0.0, const Handle<YieldTermStructure> & yts = Handle<YieldTermStructure>(), Real yStdDevs = 7.0, Size yGridPoints = 64, bool extrapolatePayoff = true, bool flatPayoffExtrapolation = false) const;+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real Gaussian1dModel::forwardRate(const Date & fixing, const Date & referenceDate = Date(), Real y = 0.0, const ext::shared_ptr<IborIndex> & iborIdx = ext::shared_ptr<IborIndex>()) const;+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real Gaussian1dModel::swapRate(const Date & fixing, const Period & tenor, const Date & referenceDate = Date(), Real y = 0.0, const ext::shared_ptr<SwapIndex> & swapIdx = ext::shared_ptr<SwapIndex>()) const;+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real Gaussian1dModel::swapAnnuity(const Date & fixing, const Period & tenor, const Date & referenceDate = Date(), Real y = 0.0, const ext::shared_ptr<SwapIndex> & swapIdx = ext::shared_ptr<SwapIndex>()) const;+| |ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|static Real Gaussian1dModel::gaussianPolynomialIntegral(Real a, Real b, Real c, Real d, Real e, Real x0, Real x1);+| |ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|static Real Gaussian1dModel::gaussianShiftedPolynomialIntegral(Real a, Real b, Real c, Real d, Real e, Real h, Real x0, Real x1);+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Array Gaussian1dModel::yGrid(Real yStdDevs, int gridPoints, Real T = 1.0, Real t = 0, Real y = 0) const;+| |ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|bool CachedSwapKey::operator==(const CachedSwapKey & o) const;+| |ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|std::size_t CachedSwapKeyHasher::operator()(const CachedSwapKey & x) const;+|x|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real numeraire(const Time t, const Real y, const Handle<YieldTermStructure> & yts) const;+|x|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real zerobond(const Time T, const Time t, const Real y, const Handle<YieldTermStructure> & yts) const;+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real numeraire(const Date & referenceDate, const Real y, const Handle<YieldTermStructure> & yts) const;+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real zerobond(const Date & maturity, const Date & referenceDate, const Real y, const Handle<YieldTermStructure> & yts) const;+|x|ql/models/shortrate/onefactormodels/gsr.hpp|Gsr::Gsr(const Handle<YieldTermStructure> & termStructure, std::vector<Date> volstepdates, const std::vector<Real> & volatilities, Real reversion, Real T = 60.0);+|x|ql/models/shortrate/onefactormodels/gsr.hpp|Gsr::Gsr(const Handle<YieldTermStructure> & termStructure, std::vector<Date> volstepdates, const std::vector<Real> & volatilities, const std::vector<Real> & reversions, Real T = 60.0);+|v|ql/models/shortrate/onefactormodels/gsr.hpp|Gsr::Gsr(const Handle<YieldTermStructure> & termStructure, std::vector<Date> volstepdates, std::vector<Handle<Quote>> volatilities, const Handle<Quote> & reversion, Real T = 60.0);+|v|ql/models/shortrate/onefactormodels/gsr.hpp|Gsr::Gsr(const Handle<YieldTermStructure> & termStructure, std::vector<Date> volstepdates, std::vector<Handle<Quote>> volatilities, std::vector<Handle<Quote>> reversions, Real T = 60.0);+|x|ql/models/shortrate/onefactormodels/gsr.hpp|Real Gsr::numeraireTime() const;+|x|ql/models/shortrate/onefactormodels/gsr.hpp|void Gsr::numeraireTime(Real T);+|v|ql/models/shortrate/onefactormodels/gsr.hpp|const Array & Gsr::reversion() const;+|v|ql/models/shortrate/onefactormodels/gsr.hpp|const Array & Gsr::volatility() const;+|x|ql/models/shortrate/onefactormodels/gsr.hpp|std::vector<bool> Gsr::FixedReversions();+|x|ql/models/shortrate/onefactormodels/gsr.hpp|std::vector<bool> Gsr::FixedVolatilities();+|v|ql/models/shortrate/onefactormodels/gsr.hpp|std::vector<bool> Gsr::MoveVolatility(Size i);+|v|ql/models/shortrate/onefactormodels/gsr.hpp|std::vector<bool> Gsr::MoveReversion(Size i);+|v|ql/models/shortrate/onefactormodels/gsr.hpp|void Gsr::calibrateVolatilitiesIterative(const std::vector<ext::shared_ptr<BlackCalibrationHelper>> & helpers, OptimizationMethod & method, const EndCriteria & endCriteria, const Constraint & constraint = Constraint(), const std::vector<Real> & weights = std::vector<Real>());+|v|ql/models/shortrate/onefactormodels/gsr.hpp|void Gsr::calibrateReversionsIterative(const std::vector<ext::shared_ptr<BlackCalibrationHelper>> & helpers, OptimizationMethod & method, const EndCriteria & endCriteria, const Constraint & constraint = Constraint(), const std::vector<Real> & weights = std::vector<Real>());+| |ql/models/shortrate/onefactormodels/gsr.hpp|VolatilityObserver::VolatilityObserver(Gsr * p);+| |ql/models/shortrate/onefactormodels/gsr.hpp|ReversionObserver::ReversionObserver(Gsr * p);+| |ql/models/shortrate/onefactormodels/gsr.hpp|void numeraireTime(const Real T);+|v|ql/models/shortrate/onefactormodels/hullwhite.hpp|HullWhite::HullWhite(const Handle<YieldTermStructure> & termStructure, Real a = 0.1, Real sigma = 0.01);+|v|ql/models/shortrate/onefactormodels/hullwhite.hpp|static Rate HullWhite::convexityBias(Real futurePrice, Time t, Time T, Real sigma, Real a);+|v|ql/models/shortrate/onefactormodels/hullwhite.hpp|static std::vector<bool> HullWhite::FixedReversion();+| |ql/models/shortrate/onefactormodels/hullwhite.hpp|Dynamics::Dynamics(Parameter fitting, Real a, Real sigma);+| |ql/models/shortrate/onefactormodels/hullwhite.hpp|Impl::Impl(Handle<YieldTermStructure> termStructure, Real a, Real sigma);+| |ql/models/shortrate/onefactormodels/hullwhite.hpp|FittingParameter::FittingParameter(const Handle<YieldTermStructure> & termStructure, Real a, Real sigma);+| |ql/models/shortrate/onefactormodels/hullwhite.hpp|ext::shared_ptr<OneFactorModel::ShortRateDynamics> dynamics() const;+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|Real CustomSmileSection::inverseDigitalCall(Real price, Real discount = 1.0) const;+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ext::shared_ptr<CustomSmileSection> CustomSmileFactory::smileSection(const ext::shared_ptr<SmileSection> & source, Real atm) const;+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings::ModelSettings();+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings::ModelSettings(Size yGridPoints, Real yStdDevs, Size gaussHermitePoints, Real digitalGap, Real marketRateAccuracy, Real lowerRateBound, Real upperRateBound, int adjustments, std::vector<Real> smileMoneyCheckpoints = std::vector<Real>(), ext::shared_ptr<CustomSmileFactory> customSmileFactory = ext::shared_ptr<CustomSmileFactory>());+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|void ModelSettings::validate();+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withYGridPoints(Size n);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withYStdDevs(Real s);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withGaussHermitePoints(Size n);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withDigitalGap(Real d);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withMarketRateAccuracy(Real a);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withUpperRateBound(Real u);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withLowerRateBound(Real l);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withAdjustments(int a);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::addAdjustment(int a);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::removeAdjustment(int a);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withSmileMoneynessCheckpoints(const std::vector<Real> & m);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ModelSettings & ModelSettings::withCustomSmileFactory(const ext::shared_ptr<CustomSmileFactory> & f);+|u|ql/models/shortrate/onefactormodels/markovfunctional.hpp|MarkovFunctional::MarkovFunctional(const Handle<YieldTermStructure> & termStructure, Real reversion, std::vector<Date> volstepdates, std::vector<Real> volatilities, const Handle<SwaptionVolatilityStructure> & swaptionVol, const std::vector<Date> & swaptionExpiries, const std::vector<Period> & swaptionTenors, const ext::shared_ptr<SwapIndex> & swapIndexBase, MarkovFunctional::ModelSettings modelSettings = ModelSettings());+|u|ql/models/shortrate/onefactormodels/markovfunctional.hpp|MarkovFunctional::MarkovFunctional(const Handle<YieldTermStructure> & termStructure, Real reversion, std::vector<Date> volstepdates, std::vector<Real> volatilities, const Handle<OptionletVolatilityStructure> & capletVol, const std::vector<Date> & capletExpiries, ext::shared_ptr<IborIndex> iborIndex, MarkovFunctional::ModelSettings modelSettings = ModelSettings());+|x|ql/models/shortrate/onefactormodels/markovfunctional.hpp|const ModelSettings & MarkovFunctional::modelSettings() const;+|x|ql/models/shortrate/onefactormodels/markovfunctional.hpp|const ModelOutputs & MarkovFunctional::modelOutputs() const;+|x|ql/models/shortrate/onefactormodels/markovfunctional.hpp|const Date & MarkovFunctional::numeraireDate() const;+|x|ql/models/shortrate/onefactormodels/markovfunctional.hpp|const Time & MarkovFunctional::numeraireTime() const;+|v|ql/models/shortrate/onefactormodels/markovfunctional.hpp|const Array & MarkovFunctional::volatility() const;+|v|ql/models/shortrate/onefactormodels/markovfunctional.hpp|void MarkovFunctional::calibrate(const std::vector<ext::shared_ptr<BlackCalibrationHelper>> & helpers, OptimizationMethod & method, const EndCriteria & endCriteria, const Constraint & constraint = Constraint(), const std::vector<Real> & weights = std::vector<Real>(), const std::vector<bool> & fixParameters = std::vector<bool>());+|x|ql/models/shortrate/onefactormodels/markovfunctional.hpp|std::vector<std::pair<Size, Size>> MarkovFunctional::arbitrageIndices() const;+|x|ql/models/shortrate/onefactormodels/markovfunctional.hpp|void MarkovFunctional::forceArbitrageIndices(const std::vector<std::pair<Size, Size>> & indices);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|ZeroHelper::ZeroHelper(const MarkovFunctional * model, const Date & expiry, const CalibrationPoint & p, const Real marketPrice);+| |ql/models/shortrate/onefactormodels/markovfunctional.hpp|Real ZeroHelper::operator()(Real strike) const;+|x|ql/models/shortrate/onefactormodels/markovfunctional.hpp|std::ostream & operator<<(std::ostream & out, const MarkovFunctional::ModelOutputs & m);+|v|ql/models/shortrate/onefactormodels/vasicek.hpp|Vasicek::Vasicek(Rate r0 = 0.05, Real a = 0.1, Real b = 0.05, Real sigma = 0.01, Real lambda = 0.0);+|x|ql/models/shortrate/onefactormodels/vasicek.hpp|Real Vasicek::a() const;+|x|ql/models/shortrate/onefactormodels/vasicek.hpp|Real Vasicek::b() const;+|x|ql/models/shortrate/onefactormodels/vasicek.hpp|Real Vasicek::lambda() const;+|x|ql/models/shortrate/onefactormodels/vasicek.hpp|Real Vasicek::sigma() const;+|x|ql/models/shortrate/onefactormodels/vasicek.hpp|Real Vasicek::r0() const;+| |ql/models/shortrate/onefactormodels/vasicek.hpp|Dynamics::Dynamics(Real a, Real b, Real sigma, Real r0);+| |ql/models/shortrate/onefactormodels/vasicek.hpp|ext::shared_ptr<OneFactorModel::ShortRateDynamics> dynamics() const;+| |ql/models/shortrate/twofactormodel.hpp|TwoFactorModel::TwoFactorModel(Size nParams);+|v|ql/models/shortrate/twofactormodel.hpp|ext::shared_ptr<ShortRateDynamics> TwoFactorModel::dynamics() const;+| |ql/models/shortrate/twofactormodel.hpp|ShortRateDynamics::ShortRateDynamics(ext::shared_ptr<StochasticProcess1D> xProcess, ext::shared_ptr<StochasticProcess1D> yProcess, Real correlation);+|v|ql/models/shortrate/twofactormodel.hpp|Rate ShortRateDynamics::shortRate(Time t, Real x, Real y) const;+|x|ql/models/shortrate/twofactormodel.hpp|const ext::shared_ptr<StochasticProcess1D> & ShortRateDynamics::xProcess() const;+|x|ql/models/shortrate/twofactormodel.hpp|const ext::shared_ptr<StochasticProcess1D> & ShortRateDynamics::yProcess() const;+|x|ql/models/shortrate/twofactormodel.hpp|Real ShortRateDynamics::correlation() const;+| |ql/models/shortrate/twofactormodel.hpp|ext::shared_ptr<StochasticProcess> ShortRateDynamics::process() const;+| |ql/models/shortrate/twofactormodel.hpp|ShortRateTree::ShortRateTree(const ext::shared_ptr<TrinomialTree> & tree1, const ext::shared_ptr<TrinomialTree> & tree2, const ext::shared_ptr<ShortRateDynamics> & dynamics);+| |ql/models/shortrate/twofactormodel.hpp|DiscountFactor ShortRateTree::discount(Size i, Size index) const;+| |ql/models/shortrate/twofactormodels/g2.hpp|G2::G2(const Handle<YieldTermStructure> & termStructure, Real a = 0.1, Real sigma = 0.01, Real b = 0.1, Real eta = 0.01, Real rho = - 0.75);+| |ql/models/shortrate/twofactormodels/g2.hpp|Real G2::discountBond(Time, Time, Rate, Rate) const;+| |ql/models/shortrate/twofactormodels/g2.hpp|Real G2::swaption(const Swaption::arguments & arguments, Rate fixedRate, Real range, Size intervals) const;+| |ql/models/shortrate/twofactormodels/g2.hpp|Real G2::a() const;+| |ql/models/shortrate/twofactormodels/g2.hpp|Real G2::sigma() const;+| |ql/models/shortrate/twofactormodels/g2.hpp|Real G2::b() const;+| |ql/models/shortrate/twofactormodels/g2.hpp|Real G2::eta() const;+| |ql/models/shortrate/twofactormodels/g2.hpp|Real G2::rho() const;+| |ql/models/shortrate/twofactormodels/g2.hpp|Dynamics::Dynamics(Parameter fitting, Real a, Real sigma, Real b, Real eta, Real rho);+| |ql/models/shortrate/twofactormodels/g2.hpp|Impl::Impl(Handle<YieldTermStructure> termStructure, Real a, Real sigma, Real b, Real eta, Real rho);+| |ql/models/shortrate/twofactormodels/g2.hpp|FittingParameter::FittingParameter(const Handle<YieldTermStructure> & termStructure, Real a, Real sigma, Real b, Real eta, Real rho);+|v|ql/models/volatility/constantestimator.hpp|ConstantEstimator::ConstantEstimator(Size size);+|v|ql/models/volatility/constantestimator.hpp|TimeSeries<Volatility> ConstantEstimator::calculate(const TimeSeries<Volatility> &);+|x|ql/models/volatility/constantestimator.hpp|void ConstantEstimator::calibrate(const TimeSeries<Volatility> &);+|v|ql/models/volatility/garch.hpp|Garch11::Garch11(Real a, Real b, Real vl);+|v|ql/models/volatility/garch.hpp|Garch11::Garch11(const time_series & qs, Mode mode = BestOfTwo);+|v|ql/models/volatility/garch.hpp|Real Garch11::alpha() const;+|v|ql/models/volatility/garch.hpp|Real Garch11::beta() const;+|v|ql/models/volatility/garch.hpp|Real Garch11::omega() const;+|v|ql/models/volatility/garch.hpp|Real Garch11::ltVol() const;+|v|ql/models/volatility/garch.hpp|Real Garch11::logLikelihood() const;+|x|ql/models/volatility/garch.hpp|Mode Garch11::mode() const;+|x|ql/models/volatility/garch.hpp|static time_series Garch11::calculate(const time_series & quoteSeries, Real alpha, Real beta, Real omega);+|x|ql/models/volatility/garch.hpp|void Garch11::calibrate(const time_series & quoteSeries, OptimizationMethod & method, const EndCriteria & endCriteria);+|x|ql/models/volatility/garch.hpp|void Garch11::calibrate(const time_series & quoteSeries, OptimizationMethod & method, const EndCriteria & endCriteria, const Array & initialGuess);+|v|ql/models/volatility/garch.hpp|Real Garch11::forecast(Real r, Real sigma2) const;+|x|ql/models/volatility/garch.hpp|static ext::shared_ptr<Problem> Garch11::calibrate_r2(Mode mode, const std::vector<Volatility> & r2, Real mean_r2, Real & alpha, Real & beta, Real & omega);+|x|ql/models/volatility/garch.hpp|static ext::shared_ptr<Problem> Garch11::calibrate_r2(Mode mode, const std::vector<Volatility> & r2, Real mean_r2, OptimizationMethod & method, const EndCriteria & endCriteria, Real & alpha, Real & beta, Real & omega);+|x|ql/models/volatility/garch.hpp|static ext::shared_ptr<Problem> Garch11::calibrate_r2(const std::vector<Volatility> & r2, Real mean_r2, OptimizationMethod & method, const EndCriteria & endCriteria, const Array & initialGuess, Real & alpha, Real & beta, Real & omega);+|x|ql/models/volatility/garch.hpp|static ext::shared_ptr<Problem> Garch11::calibrate_r2(const std::vector<Volatility> & r2, OptimizationMethod & method, const EndCriteria & endCriteria, const Array & initialGuess, Real & alpha, Real & beta, Real & omega);+|x|ql/models/volatility/garch.hpp|static ext::shared_ptr<Problem> Garch11::calibrate_r2(const std::vector<Volatility> & r2, Real mean_r2, OptimizationMethod & method, Constraint & constraints, const EndCriteria & endCriteria, const Array & initialGuess, Real & alpha, Real & beta, Real & omega);+|x|ql/models/volatility/garch.hpp|static ext::shared_ptr<Problem> Garch11::calibrate_r2(const std::vector<Volatility> & r2, OptimizationMethod & method, Constraint & constraints, const EndCriteria & endCriteria, const Array & initialGuess, Real & alpha, Real & beta, Real & omega);+|x|ql/models/volatility/garmanklass.hpp|GarmanKlassAbstract::GarmanKlassAbstract(Real y);+|u|ql/models/volatility/garmanklass.hpp|TimeSeries<Volatility> GarmanKlassAbstract::calculate(const TimeSeries<IntervalPrice> & quoteSeries);+|v|ql/models/volatility/garmanklass.hpp|GarmanKlassSimpleSigma::GarmanKlassSimpleSigma(Real y);+|x|ql/models/volatility/garmanklass.hpp|GarmanKlassOpenClose::GarmanKlassOpenClose<T>(Real y, Real marketOpenFraction, Real a);+|u|ql/models/volatility/garmanklass.hpp|TimeSeries<Volatility> GarmanKlassOpenClose::calculate(const TimeSeries<IntervalPrice> & quoteSeries);+|v|ql/models/volatility/garmanklass.hpp|GarmanKlassSigma1::GarmanKlassSigma1(Real y, Real marketOpenFraction);+|v|ql/models/volatility/garmanklass.hpp|ParkinsonSigma::ParkinsonSigma(Real y);+|v|ql/models/volatility/garmanklass.hpp|GarmanKlassSigma3::GarmanKlassSigma3(Real y, Real marketOpenFraction);+|v|ql/models/volatility/garmanklass.hpp|GarmanKlassSigma4::GarmanKlassSigma4(Real y);+|v|ql/models/volatility/garmanklass.hpp|GarmanKlassSigma5::GarmanKlassSigma5(Real y);+|v|ql/models/volatility/garmanklass.hpp|GarmanKlassSigma6::GarmanKlassSigma6(Real y, Real marketOpenFraction);+|v|ql/models/volatility/simplelocalestimator.hpp|SimpleLocalEstimator::SimpleLocalEstimator(Real y);+|v|ql/models/volatility/simplelocalestimator.hpp|TimeSeries<Volatility> SimpleLocalEstimator::calculate(const TimeSeries<Real> & quoteSeries);+| |ql/money.hpp|Money::Money();+| |ql/money.hpp|Money::Money(Currency currency, Decimal value);+| |ql/money.hpp|Money::Money(Decimal value, Currency currency);+|x|ql/money.hpp|const Currency & Money::currency() const;+|x|ql/money.hpp|Decimal Money::value() const;+| |ql/money.hpp|Money Money::rounded() const;+| |ql/money.hpp|Money Money::operator+() const;+| |ql/money.hpp|Money Money::operator-() const;+| |ql/money.hpp|Money & Money::operator+=(const Money &);+| |ql/money.hpp|Money & Money::operator-=(const Money &);+| |ql/money.hpp|Money & Money::operator*=(Decimal);+| |ql/money.hpp|Money & Money::operator/=(Decimal);+| |ql/money.hpp|BaseCurrencyProxy & BaseCurrencyProxy::operator=(const Currency &);+| |ql/money.hpp|ConversionTypeProxy & ConversionTypeProxy::operator=(Money::ConversionType);+|x|ql/money.hpp|Settings::Settings();+|u|ql/money.hpp|const Money::ConversionType & Settings::conversionType() const;+|u|ql/money.hpp|Money::ConversionType & Settings::conversionType();+|u|ql/money.hpp|const Currency & Settings::baseCurrency() const;+|u|ql/money.hpp|Currency & Settings::baseCurrency();+| |ql/money.hpp|Money operator+(const Money &, const Money &);+| |ql/money.hpp|Money operator-(const Money &, const Money &);+| |ql/money.hpp|Money operator*(const Money &, Decimal);+| |ql/money.hpp|Money operator*(Decimal, const Money &);+| |ql/money.hpp|Money operator/(const Money &, Decimal);+| |ql/money.hpp|Decimal operator/(const Money &, const Money &);+| |ql/money.hpp|bool operator==(const Money &, const Money &);+| |ql/money.hpp|bool operator!=(const Money &, const Money &);+| |ql/money.hpp|bool operator<(const Money &, const Money &);+| |ql/money.hpp|bool operator<=(const Money &, const Money &);+| |ql/money.hpp|bool operator>(const Money &, const Money &);+| |ql/money.hpp|bool operator>=(const Money &, const Money &);+| |ql/money.hpp|bool close(const Money &, const Money &, Size n = 42);+| |ql/money.hpp|bool close_enough(const Money &, const Money &, Size n = 42);+| |ql/money.hpp|Money operator*(Decimal, const Currency &);+| |ql/money.hpp|Money operator*(const Currency &, Decimal);+| |ql/money.hpp|std::ostream & operator<<(std::ostream &, const Money &);+| |ql/money.hpp|Money operator+() const;+| |ql/money.hpp|Money operator-() const;+| |ql/money.hpp|Money & operator*=(Decimal x);+| |ql/money.hpp|Money & operator/=(Decimal x);+| |ql/money.hpp|Money operator+(const Money & m1, const Money & m2);+| |ql/money.hpp|Money operator-(const Money & m1, const Money & m2);+| |ql/money.hpp|Money operator*(const Money & m, Decimal x);+| |ql/money.hpp|Money operator*(Decimal x, const Money & m);+| |ql/money.hpp|Money operator/(const Money & m, Decimal x);+| |ql/money.hpp|bool operator!=(const Money & m1, const Money & m2);+| |ql/money.hpp|bool operator>(const Money & m1, const Money & m2);+| |ql/money.hpp|bool operator>=(const Money & m1, const Money & m2);+| |ql/money.hpp|Money operator*(Decimal value, const Currency & c);+| |ql/money.hpp|Money operator*(const Currency & c, Decimal value);+| |ql/numericalmethod.hpp|Lattice::Lattice(TimeGrid timeGrid);+|x|ql/numericalmethod.hpp|const TimeGrid & Lattice::timeGrid() const;+| |ql/numericalmethod.hpp|void Lattice::initialize(DiscretizedAsset &, Time time) const;+| |ql/numericalmethod.hpp|void Lattice::rollback(DiscretizedAsset &, Time to) const;+| |ql/numericalmethod.hpp|void Lattice::partialRollback(DiscretizedAsset &, Time to) const;+| |ql/numericalmethod.hpp|Real Lattice::presentValue(DiscretizedAsset &) const;+| |ql/numericalmethod.hpp|Array Lattice::grid(Time) const;+| |ql/option.hpp|Option::Option(ext::shared_ptr<Payoff> payoff, ext::shared_ptr<Exercise> exercise);+|x|ql/option.hpp|ext::shared_ptr<Payoff> Option::payoff() const;+|x|ql/option.hpp|ext::shared_ptr<Exercise> Option::exercise() const;+| |ql/option.hpp|std::ostream & operator<<(std::ostream &, Option::Type);+| |ql/option.hpp|arguments::arguments();+| |ql/option.hpp|void arguments::validate() const;+| |ql/option.hpp|void setupArguments(PricingEngine::arguments * args) const;+| |ql/option.hpp|std::ostream & operator<<(std::ostream & out, Option::Type type);+| |ql/patterns/lazyobject.hpp|LazyObject::LazyObject();+| |ql/patterns/lazyobject.hpp|bool LazyObject::isCalculated() const;+| |ql/patterns/lazyobject.hpp|void LazyObject::setCalculated(bool c) const;+| |ql/patterns/lazyobject.hpp|void LazyObject::recalculate();+| |ql/patterns/lazyobject.hpp|void LazyObject::freeze();+| |ql/patterns/lazyobject.hpp|void LazyObject::unfreeze();+| |ql/patterns/lazyobject.hpp|void LazyObject::forwardFirstNotificationOnly();+| |ql/patterns/lazyobject.hpp|void LazyObject::alwaysForwardNotifications();+| |ql/patterns/lazyobject.hpp|UpdateChecker::UpdateChecker(LazyObject * subject);+| |ql/patterns/lazyobject.hpp|void Defaults::forwardFirstNotificationOnly();+| |ql/patterns/lazyobject.hpp|void Defaults::alwaysForwardNotifications();+| |ql/patterns/lazyobject.hpp|bool Defaults::forwardsAllNotifications() const;+| |ql/patterns/lazyobject.hpp|void update();+| |ql/patterns/lazyobject.hpp|void calculate() const;+| |ql/patterns/lazyobject.hpp|void setCalculated(const bool c) const;+| |ql/patterns/observable.hpp|Observable::Observable();+| |ql/patterns/observable.hpp|Observable::Observable(const Observable &);+| |ql/patterns/observable.hpp|Observable & Observable::operator=(const Observable &);+| |ql/patterns/observable.hpp|Observable::Observable(Observable &&);+| |ql/patterns/observable.hpp|Observable & Observable::operator=(Observable &&);+| |ql/patterns/observable.hpp|void Observable::notifyObservers();+|v|ql/patterns/observable.hpp|void ObservableSettings::disableUpdates(bool deferred = false);+|v|ql/patterns/observable.hpp|void ObservableSettings::enableUpdates();+|v|ql/patterns/observable.hpp|bool ObservableSettings::updatesEnabled() const;+|v|ql/patterns/observable.hpp|bool ObservableSettings::updatesDeferred() const;+| |ql/patterns/observable.hpp|bool ObservableSettings::runningDeferredUpdates() const;+| |ql/patterns/observable.hpp|Observer::Observer();+| |ql/patterns/observable.hpp|Observer::Observer(const Observer &);+| |ql/patterns/observable.hpp|Observer & Observer::operator=(const Observer &);+| |ql/patterns/observable.hpp|std::pair<iterator, bool> Observer::registerWith(const ext::shared_ptr<Observable> &);+| |ql/patterns/observable.hpp|void Observer::registerWithObservables(const ext::shared_ptr<Observer> &);+| |ql/patterns/observable.hpp|Size Observer::unregisterWith(const ext::shared_ptr<Observable> &);+| |ql/patterns/observable.hpp|void Observer::unregisterWithAll();+| |ql/patterns/observable.hpp|void Observer::update();+| |ql/patterns/observable.hpp|void Observer::deepUpdate();+| |ql/patterns/observable.hpp|void registerDeferredObservers(const Observable::set_type & observers);+| |ql/patterns/observable.hpp|void unregisterDeferredObserver(Observer * o);+| |ql/patterns/observable.hpp|Observable & operator=(const Observable & o);+| |ql/patterns/observable.hpp|std::pair<Observable::iterator, bool> registerObserver(Observer * o);+| |ql/patterns/observable.hpp|Size unregisterObserver(Observer * o);+| |ql/patterns/observable.hpp|Observer(const Observer & o);+| |ql/patterns/observable.hpp|Observer & operator=(const Observer & o);+| |ql/patterns/observable.hpp|std::pair<Observer::iterator, bool> registerWith(const ext::shared_ptr<Observable> & h);+| |ql/patterns/observable.hpp|void registerWithObservables(const ext::shared_ptr<Observer> & o);+| |ql/patterns/observable.hpp|Size unregisterWith(const ext::shared_ptr<Observable> & h);+| |ql/patterns/singleton.hpp|Singleton::Singleton<T, Global>(const Singleton<T, Global> &);+| |ql/patterns/singleton.hpp|Singleton::Singleton<T, Global>(Singleton<T, Global> &&);+| |ql/patterns/singleton.hpp|Singleton<T, Global> & Singleton::operator=(const Singleton<T, Global> &);+| |ql/patterns/singleton.hpp|Singleton<T, Global> & Singleton::operator=(Singleton<T, Global> &&);+| |ql/patterns/singleton.hpp|static T & Singleton::instance();+| |ql/patterns/visitor.hpp|void Visitor::visit(T &);+| |ql/payoff.hpp|std::string Payoff::name() const;+| |ql/payoff.hpp|std::string Payoff::description() const;+| |ql/payoff.hpp|Real Payoff::operator()(Real price) const;+| |ql/payoff.hpp|void Payoff::accept(AcyclicVisitor &);+| |ql/payoff.hpp|void accept(AcyclicVisitor & v);+| |ql/position.hpp|std::ostream & operator<<(std::ostream &, Position::Type);+| |ql/prices.hpp|Real midEquivalent(Real bid, Real ask, Real last, Real close);+| |ql/prices.hpp|Real midSafe(Real bid, Real ask);+|x|ql/prices.hpp|IntervalPrice::IntervalPrice();+|x|ql/prices.hpp|IntervalPrice::IntervalPrice(Real open, Real close, Real high, Real low);+|x|ql/prices.hpp|Real IntervalPrice::open() const;+|x|ql/prices.hpp|Real IntervalPrice::close() const;+|x|ql/prices.hpp|Real IntervalPrice::high() const;+|x|ql/prices.hpp|Real IntervalPrice::low() const;+|x|ql/prices.hpp|Real IntervalPrice::value(IntervalPrice::Type) const;+|x|ql/prices.hpp|void IntervalPrice::setValue(Real value, IntervalPrice::Type);+|x|ql/prices.hpp|void IntervalPrice::setValues(Real open, Real close, Real high, Real low);+|x|ql/prices.hpp|static TimeSeries<IntervalPrice> IntervalPrice::makeSeries(const std::vector<Date> & d, const std::vector<Real> & open, const std::vector<Real> & close, const std::vector<Real> & high, const std::vector<Real> & low);+|x|ql/prices.hpp|static std::vector<Real> IntervalPrice::extractValues(const TimeSeries<IntervalPrice> &, IntervalPrice::Type);+|x|ql/prices.hpp|static TimeSeries<Real> IntervalPrice::extractComponent(const TimeSeries<IntervalPrice> &, IntervalPrice::Type);+| |ql/pricingengine.hpp|arguments * PricingEngine::getArguments() const;+| |ql/pricingengine.hpp|const results * PricingEngine::getResults() const;+| |ql/pricingengine.hpp|void PricingEngine::reset();+|x|ql/pricingengine.hpp|void PricingEngine::calculate() const;+| |ql/pricingengine.hpp|void arguments::validate() const;+| |ql/pricingengine.hpp|void results::reset();+| |ql/pricingengines/americanpayoffatexpiry.hpp|AmericanPayoffAtExpiry::AmericanPayoffAtExpiry(Real spot, DiscountFactor discount, DiscountFactor dividendDiscount, Real variance, const ext::shared_ptr<StrikedTypePayoff> & payoff, bool knock_in = true);+| |ql/pricingengines/americanpayoffatexpiry.hpp|Real AmericanPayoffAtExpiry::value() const;+| |ql/pricingengines/americanpayoffathit.hpp|AmericanPayoffAtHit::AmericanPayoffAtHit(Real spot, DiscountFactor discount, DiscountFactor dividendDiscount, Real variance, const ext::shared_ptr<StrikedTypePayoff> & payoff);+| |ql/pricingengines/americanpayoffathit.hpp|Real AmericanPayoffAtHit::value() const;+| |ql/pricingengines/americanpayoffathit.hpp|Real AmericanPayoffAtHit::delta() const;+| |ql/pricingengines/americanpayoffathit.hpp|Real AmericanPayoffAtHit::gamma() const;+| |ql/pricingengines/americanpayoffathit.hpp|Real AmericanPayoffAtHit::rho(Time maturity) const;+|v|ql/pricingengines/asian/analytic_cont_geom_av_price.hpp|AnalyticContinuousGeometricAveragePriceAsianEngine::AnalyticContinuousGeometricAveragePriceAsianEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/asian/analytic_cont_geom_av_price.hpp|void AnalyticContinuousGeometricAveragePriceAsianEngine::calculate() const;+|v|ql/pricingengines/asian/analytic_discr_geom_av_price.hpp|AnalyticDiscreteGeometricAveragePriceAsianEngine::AnalyticDiscreteGeometricAveragePriceAsianEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/asian/analytic_discr_geom_av_price.hpp|void AnalyticDiscreteGeometricAveragePriceAsianEngine::calculate() const;+|v|ql/pricingengines/asian/analytic_discr_geom_av_strike.hpp|AnalyticDiscreteGeometricAverageStrikeAsianEngine::AnalyticDiscreteGeometricAverageStrikeAsianEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/asian/analytic_discr_geom_av_strike.hpp|void AnalyticDiscreteGeometricAverageStrikeAsianEngine::calculate() const;+| |ql/pricingengines/asian/choiasianengine.hpp|ChoiAsianEngine::ChoiAsianEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> p, Real lambda = 15, Size maxNrIntegrationSteps = 2 << 21);+|x|ql/pricingengines/asian/choiasianengine.hpp|void ChoiAsianEngine::calculate() const;+| |ql/pricingengines/asian/continuousarithmeticasianlevyengine.hpp|ContinuousArithmeticAsianLevyEngine::ContinuousArithmeticAsianLevyEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Handle<Quote> currentAverage);+| |ql/pricingengines/asian/continuousarithmeticasianlevyengine.hpp|ContinuousArithmeticAsianLevyEngine::ContinuousArithmeticAsianLevyEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Handle<Quote> currentAverage, Date startDate);+|x|ql/pricingengines/asian/continuousarithmeticasianlevyengine.hpp|void ContinuousArithmeticAsianLevyEngine::calculate() const;+|v|ql/pricingengines/asian/fdblackscholesasianengine.hpp|FdBlackScholesAsianEngine::FdBlackScholesAsianEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, Size tGrid = 100, Size xGrid = 100, Size aGrid = 50, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|x|ql/pricingengines/asian/fdblackscholesasianengine.hpp|void FdBlackScholesAsianEngine::calculate() const;+|v|ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MCDiscreteArithmeticAPHestonEngine::MCDiscreteArithmeticAPHestonEngine<RNG, S, P>(const ext::shared_ptr<P> & process, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size timeSteps = Null<Size>(), Size timeStepsPerYear = Null<Size>(), bool controlVariate = false);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine::MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P>(ext::shared_ptr<P> process);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & MakeMCDiscreteArithmeticAPHestonEngine::withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & MakeMCDiscreteArithmeticAPHestonEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & MakeMCDiscreteArithmeticAPHestonEngine::withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & MakeMCDiscreteArithmeticAPHestonEngine::withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & MakeMCDiscreteArithmeticAPHestonEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & MakeMCDiscreteArithmeticAPHestonEngine::withSteps(Size steps);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & MakeMCDiscreteArithmeticAPHestonEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & MakeMCDiscreteArithmeticAPHestonEngine::withControlVariate(bool b = false);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|ArithmeticAPOHestonPathPricer::ArithmeticAPOHestonPathPricer(Option::Type type, Real strike, DiscountFactor discount, std::vector<Size> fixingIndices, Real runningSum = 0.0, Size pastFixings = 0);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|Real ArithmeticAPOHestonPathPricer::operator()(const MultiPath & multiPath) const;+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MCDiscreteArithmeticAPHestonEngine<RNG, S, P>(const ext::shared_ptr<P> & process, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size timeSteps, Size timeStepsPerYear, bool controlVariate);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|ext::shared_ptr<typename MCDiscreteArithmeticAPHestonEngine<RNG, S, P>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|ext::shared_ptr<typename MCDiscreteArithmeticAPHestonEngine<RNG, S, P>::path_pricer_type> controlPathPricer() const;+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P>(ext::shared_ptr<P> process);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & withAntitheticVariate(bool b);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & withControlVariate(bool b);+|?|ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MCDiscreteArithmeticAPEngine::MCDiscreteArithmeticAPEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|ArithmeticAPOPathPricer::ArithmeticAPOPathPricer(Option::Type type, Real strike, DiscountFactor discount, Real runningSum = 0.0, Size pastFixings = 0);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|Real ArithmeticAPOPathPricer::operator()(const Path & path) const;+|?|ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MCDiscreteArithmeticAPEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|ext::shared_ptr<typename MCDiscreteArithmeticAPEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|ext::shared_ptr<typename MCDiscreteArithmeticAPEngine<RNG, S>::path_pricer_type> controlPathPricer() const;+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine::MakeMCDiscreteArithmeticAPEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & MakeMCDiscreteArithmeticAPEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & MakeMCDiscreteArithmeticAPEngine::withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & MakeMCDiscreteArithmeticAPEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & MakeMCDiscreteArithmeticAPEngine::withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & MakeMCDiscreteArithmeticAPEngine::withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & MakeMCDiscreteArithmeticAPEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & MakeMCDiscreteArithmeticAPEngine::withControlVariate(bool b = true);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & withBrownianBridge(bool b);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & withAntitheticVariate(bool b);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & withControlVariate(bool b);+|?|ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MCDiscreteArithmeticASEngine::MCDiscreteArithmeticASEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|ArithmeticASOPathPricer::ArithmeticASOPathPricer(Option::Type type, DiscountFactor discount, Real runningSum = 0.0, Size pastFixings = 0, Size fixingCount = Null<Size>());+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|Real ArithmeticASOPathPricer::operator()(const Path & path) const;+|?|ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MCDiscreteArithmeticASEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|ext::shared_ptr<typename MCDiscreteArithmeticASEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine::MakeMCDiscreteArithmeticASEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & MakeMCDiscreteArithmeticASEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & MakeMCDiscreteArithmeticASEngine::withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & MakeMCDiscreteArithmeticASEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & MakeMCDiscreteArithmeticASEngine::withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & MakeMCDiscreteArithmeticASEngine::withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & MakeMCDiscreteArithmeticASEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & withBrownianBridge(bool b);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & withAntitheticVariate(bool b);+|v|ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MCDiscreteGeometricAPHestonEngine::MCDiscreteGeometricAPHestonEngine<RNG, S, P>(const ext::shared_ptr<P> & process, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size timeSteps = Null<Size>(), Size timeStepsPerYear = Null<Size>());+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine::MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P>(ext::shared_ptr<P> process);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & MakeMCDiscreteGeometricAPHestonEngine::withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & MakeMCDiscreteGeometricAPHestonEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & MakeMCDiscreteGeometricAPHestonEngine::withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & MakeMCDiscreteGeometricAPHestonEngine::withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & MakeMCDiscreteGeometricAPHestonEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & MakeMCDiscreteGeometricAPHestonEngine::withSteps(Size steps);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & MakeMCDiscreteGeometricAPHestonEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|GeometricAPOHestonPathPricer::GeometricAPOHestonPathPricer(Option::Type type, Real strike, DiscountFactor discount, std::vector<Size> fixingIndices, Real runningProduct = 1.0, Size pastFixings = 0);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|Real GeometricAPOHestonPathPricer::operator()(const MultiPath & multiPath) const;+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MCDiscreteGeometricAPHestonEngine<RNG, S, P>(const ext::shared_ptr<P> & process, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size timeSteps, Size timeStepsPerYear);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|ext::shared_ptr<typename MCDiscreteGeometricAPHestonEngine<RNG, S, P>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P>(ext::shared_ptr<P> process);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & withAntitheticVariate(bool b);+|?|ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MCDiscreteGeometricAPEngine::MCDiscreteGeometricAPEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|GeometricAPOPathPricer::GeometricAPOPathPricer(Option::Type type, Real strike, DiscountFactor discount, Real runningProduct = 1.0, Size pastFixings = 0);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|Real GeometricAPOPathPricer::operator()(const Path & path) const;+|?|ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MCDiscreteGeometricAPEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|ext::shared_ptr<typename MCDiscreteGeometricAPEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine::MakeMCDiscreteGeometricAPEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & MakeMCDiscreteGeometricAPEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & MakeMCDiscreteGeometricAPEngine::withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & MakeMCDiscreteGeometricAPEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & MakeMCDiscreteGeometricAPEngine::withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & MakeMCDiscreteGeometricAPEngine::withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & MakeMCDiscreteGeometricAPEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & withBrownianBridge(bool b);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & withAntitheticVariate(bool b);+| |ql/pricingengines/asian/mcdiscreteasianenginebase.hpp|PastFixingsOnly::PastFixingsOnly();+| |ql/pricingengines/asian/mcdiscreteasianenginebase.hpp|MCDiscreteAveragingAsianEngineBase::MCDiscreteAveragingAsianEngineBase<MC, RNG, S>(ext::shared_ptr<StochasticProcess> process, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size timeSteps = Null<Size>(), Size timeStepsPerYear = Null<Size>(), bool includeExerciseDate = false);+| |ql/pricingengines/asian/mcdiscreteasianenginebase.hpp|void MCDiscreteAveragingAsianEngineBase::calculate() const;+| |ql/pricingengines/asian/mcdiscreteasianenginebase.hpp|MCDiscreteAveragingAsianEngineBase<MC, RNG, S>(ext::shared_ptr<StochasticProcess> process, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size timeSteps, Size timeStepsPerYear, bool includeExerciseDate);+|?|ql/pricingengines/asian/mcdiscreteasianenginebase.hpp|TimeGrid timeGrid() const;+| |ql/pricingengines/asian/mcdiscreteasianenginebase.hpp|Real controlVariateValue() const;+|v|ql/pricingengines/asian/turnbullwakemanasianengine.hpp|TurnbullWakemanAsianEngine::TurnbullWakemanAsianEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/asian/turnbullwakemanasianengine.hpp|void TurnbullWakemanAsianEngine::calculate() const;+|v|ql/pricingengines/bacheliercalculator.hpp|BachelierCalculator::BachelierCalculator(const ext::shared_ptr<StrikedTypePayoff> & payoff, Real forward, Real stdDev, Real discount = 1.0);+|v|ql/pricingengines/bacheliercalculator.hpp|BachelierCalculator::BachelierCalculator(Option::Type optionType, Real strike, Real forward, Real stdDev, Real discount = 1.0);+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::value() const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::deltaForward() const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::delta(Real spot) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::elasticityForward() const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::elasticity(Real spot) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::gammaForward() const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::gamma(Real spot) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::theta(Real spot, Time maturity) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::thetaPerDay(Real spot, Time maturity) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::vega(Time maturity) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::rho(Time maturity) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::dividendRho(Time maturity) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::itmCashProbability() const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::itmAssetProbability() const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::strikeSensitivity() const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::strikeGamma() const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::vanna(Time maturity) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::volga(Time maturity) const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::alpha() const;+|v|ql/pricingengines/bacheliercalculator.hpp|Real BachelierCalculator::beta() const;+|v|ql/pricingengines/barrier/analyticbarrierengine.hpp|AnalyticBarrierEngine::AnalyticBarrierEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/barrier/analyticbarrierengine.hpp|void AnalyticBarrierEngine::calculate() const;+|v|ql/pricingengines/barrier/analyticbinarybarrierengine.hpp|AnalyticBinaryBarrierEngine::AnalyticBinaryBarrierEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>);+|x|ql/pricingengines/barrier/analyticbinarybarrierengine.hpp|void AnalyticBinaryBarrierEngine::calculate() const;+| |ql/pricingengines/barrier/analyticdoublebarrierbinaryengine.hpp|AnalyticDoubleBarrierBinaryEngine::AnalyticDoubleBarrierBinaryEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>);+|x|ql/pricingengines/barrier/analyticdoublebarrierbinaryengine.hpp|void AnalyticDoubleBarrierBinaryEngine::calculate() const;+|v|ql/pricingengines/barrier/analyticdoublebarrierengine.hpp|AnalyticDoubleBarrierEngine::AnalyticDoubleBarrierEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, int series = 5);+|x|ql/pricingengines/barrier/analyticdoublebarrierengine.hpp|void AnalyticDoubleBarrierEngine::calculate() const;+|v|ql/pricingengines/barrier/analyticpartialtimebarrieroptionengine.hpp|AnalyticPartialTimeBarrierOptionEngine::AnalyticPartialTimeBarrierOptionEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/barrier/analyticpartialtimebarrieroptionengine.hpp|void AnalyticPartialTimeBarrierOptionEngine::calculate() const;+|v|ql/pricingengines/barrier/analyticsoftbarrierengine.hpp|AnalyticSoftBarrierEngine::AnalyticSoftBarrierEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/barrier/analyticsoftbarrierengine.hpp|void AnalyticSoftBarrierEngine::calculate() const;+|v|ql/pricingengines/barrier/analytictwoassetbarrierengine.hpp|AnalyticTwoAssetBarrierEngine::AnalyticTwoAssetBarrierEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Handle<Quote> rho);+|x|ql/pricingengines/barrier/analytictwoassetbarrierengine.hpp|void AnalyticTwoAssetBarrierEngine::calculate() const;+|v|ql/pricingengines/barrier/binomialbarrierengine.hpp|BinomialBarrierEngine::BinomialBarrierEngine<T, D>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, Size maxTimeSteps = 0);+|x|ql/pricingengines/barrier/binomialbarrierengine.hpp|void BinomialBarrierEngine::calculate() const;+| |ql/pricingengines/barrier/discretizedbarrieroption.hpp|DiscretizedBarrierOption::DiscretizedBarrierOption(const BarrierOption::arguments &, const StochasticProcess & process, const TimeGrid & grid = TimeGrid());+| |ql/pricingengines/barrier/discretizedbarrieroption.hpp|const Array & DiscretizedBarrierOption::vanilla() const;+|x|ql/pricingengines/barrier/discretizedbarrieroption.hpp|const BarrierOption::arguments & DiscretizedBarrierOption::arguments() const;+| |ql/pricingengines/barrier/discretizedbarrieroption.hpp|void DiscretizedBarrierOption::checkBarrier(Array & optvalues, const Array & grid) const;+| |ql/pricingengines/barrier/discretizedbarrieroption.hpp|DiscretizedDermanKaniBarrierOption::DiscretizedDermanKaniBarrierOption(const BarrierOption::arguments &, const StochasticProcess & process, const TimeGrid & grid = TimeGrid());+|v|ql/pricingengines/barrier/fdblackscholesbarrierengine.hpp|FdBlackScholesBarrierEngine::FdBlackScholesBarrierEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>());+|x|ql/pricingengines/barrier/fdblackscholesbarrierengine.hpp|FdBlackScholesBarrierEngine::FdBlackScholesBarrierEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, DividendSchedule dividends, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>());+|x|ql/pricingengines/barrier/fdblackscholesbarrierengine.hpp|void FdBlackScholesBarrierEngine::calculate() const;+| |ql/pricingengines/barrier/fdblackscholesrebateengine.hpp|FdBlackScholesRebateEngine::FdBlackScholesRebateEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>());+| |ql/pricingengines/barrier/fdblackscholesrebateengine.hpp|FdBlackScholesRebateEngine::FdBlackScholesRebateEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, DividendSchedule dividends, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>());+|x|ql/pricingengines/barrier/fdblackscholesrebateengine.hpp|void FdBlackScholesRebateEngine::calculate() const;+|v|ql/pricingengines/barrier/fdhestonbarrierengine.hpp|FdHestonBarrierEngine::FdHestonBarrierEngine(const ext::shared_ptr<HestonModel> & model, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), ext::shared_ptr<LocalVolTermStructure> leverageFct = { }, Real mixingFactor = 1.0);+|v|ql/pricingengines/barrier/fdhestonbarrierengine.hpp|FdHestonBarrierEngine::FdHestonBarrierEngine(const ext::shared_ptr<HestonModel> & model, DividendSchedule dividends, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), ext::shared_ptr<LocalVolTermStructure> leverageFct = { }, Real mixingFactor = 1.0);+|x|ql/pricingengines/barrier/fdhestonbarrierengine.hpp|void FdHestonBarrierEngine::calculate() const;+|v|ql/pricingengines/barrier/fdhestondoublebarrierengine.hpp|FdHestonDoubleBarrierEngine::FdHestonDoubleBarrierEngine(const ext::shared_ptr<HestonModel> & model, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), ext::shared_ptr<LocalVolTermStructure> leverageFct = ext::shared_ptr<LocalVolTermStructure>(), Real mixingFactor = 1.0);+|x|ql/pricingengines/barrier/fdhestondoublebarrierengine.hpp|void FdHestonDoubleBarrierEngine::calculate() const;+| |ql/pricingengines/barrier/fdhestonrebateengine.hpp|FdHestonRebateEngine::FdHestonRebateEngine(const ext::shared_ptr<HestonModel> & model, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), ext::shared_ptr<LocalVolTermStructure> leverageFct = { }, Real mixingFactor = 1.0);+| |ql/pricingengines/barrier/fdhestonrebateengine.hpp|FdHestonRebateEngine::FdHestonRebateEngine(const ext::shared_ptr<HestonModel> & model, DividendSchedule dividends, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), ext::shared_ptr<LocalVolTermStructure> leverageFct = { }, Real mixingFactor = 1.0);+|x|ql/pricingengines/barrier/fdhestonrebateengine.hpp|void FdHestonRebateEngine::calculate() const;+|?|ql/pricingengines/barrier/mcbarrierengine.hpp|MCBarrierEngine::MCBarrierEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, bool isBiased, BigNatural seed);+|x|ql/pricingengines/barrier/mcbarrierengine.hpp|void MCBarrierEngine::calculate() const;+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine::MakeMCBarrierEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess>);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & MakeMCBarrierEngine::withSteps(Size steps);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & MakeMCBarrierEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & MakeMCBarrierEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & MakeMCBarrierEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & MakeMCBarrierEngine::withSamples(Size samples);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & MakeMCBarrierEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & MakeMCBarrierEngine::withMaxSamples(Size samples);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & MakeMCBarrierEngine::withBias(bool b = true);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & MakeMCBarrierEngine::withSeed(BigNatural seed);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|BarrierPathPricer::BarrierPathPricer(Barrier::Type barrierType, Real barrier, Real rebate, Option::Type type, Real strike, std::vector<DiscountFactor> discounts, ext::shared_ptr<StochasticProcess1D> diffProcess, PseudoRandom::ursg_type sequenceGen);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|Real BarrierPathPricer::operator()(const Path & path) const;+| |ql/pricingengines/barrier/mcbarrierengine.hpp|BiasedBarrierPathPricer::BiasedBarrierPathPricer(Barrier::Type barrierType, Real barrier, Real rebate, Option::Type type, Real strike, std::vector<DiscountFactor> discounts);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|Real BiasedBarrierPathPricer::operator()(const Path & path) const;+|?|ql/pricingengines/barrier/mcbarrierengine.hpp|MCBarrierEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, bool isBiased, BigNatural seed);+|?|ql/pricingengines/barrier/mcbarrierengine.hpp|TimeGrid timeGrid() const;+| |ql/pricingengines/barrier/mcbarrierengine.hpp|ext::shared_ptr<typename MCBarrierEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & withAntitheticVariate(bool b);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & withBias(bool biased);+|v|ql/pricingengines/basket/bjerksundstenslandspreadengine.hpp|BjerksundStenslandSpreadEngine::BjerksundStenslandSpreadEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Real correlation);+|v|ql/pricingengines/basket/choibasketengine.hpp|ChoiBasketEngine::ChoiBasketEngine(std::vector<ext::shared_ptr<GeneralizedBlackScholesProcess>> processes, Matrix rho, Real lambda = 10.0, Size maxNrIntegrationSteps = std::numeric_limits<Size>::max(), bool calcfwdDelta = false, bool controlVariate = false);+|x|ql/pricingengines/basket/choibasketengine.hpp|void ChoiBasketEngine::calculate() const;+|v|ql/pricingengines/basket/denglizhoubasketengine.hpp|DengLiZhouBasketEngine::DengLiZhouBasketEngine(std::vector<ext::shared_ptr<GeneralizedBlackScholesProcess>> processes, Matrix rho);+|x|ql/pricingengines/basket/denglizhoubasketengine.hpp|void DengLiZhouBasketEngine::calculate() const;+|v|ql/pricingengines/basket/fd2dblackscholesvanillaengine.hpp|Fd2dBlackScholesVanillaEngine::Fd2dBlackScholesVanillaEngine(const ext::shared_ptr<GeneralizedBlackScholesProcess> & p1, const ext::shared_ptr<GeneralizedBlackScholesProcess> & p2, Real correlation, Size xGrid = 100, Size yGrid = 100, Size tGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>());+|x|ql/pricingengines/basket/fd2dblackscholesvanillaengine.hpp|void Fd2dBlackScholesVanillaEngine::calculate() const;+|v|ql/pricingengines/basket/fdndimblackscholesvanillaengine.hpp|FdndimBlackScholesVanillaEngine::FdndimBlackScholesVanillaEngine(std::vector<ext::shared_ptr<GeneralizedBlackScholesProcess>> processes, Matrix rho, std::vector<Size> xGrids, Size tGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|v|ql/pricingengines/basket/fdndimblackscholesvanillaengine.hpp|FdndimBlackScholesVanillaEngine::FdndimBlackScholesVanillaEngine(std::vector<ext::shared_ptr<GeneralizedBlackScholesProcess>> processes, Matrix rho, Size xGrid, Size tGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|x|ql/pricingengines/basket/fdndimblackscholesvanillaengine.hpp|void FdndimBlackScholesVanillaEngine::calculate() const;+|v|ql/pricingengines/basket/gaussiancopulaspreadengine.hpp|GaussianCopulaSpreadEngine::GaussianCopulaSpreadEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Real correlation, Size nPoints = 64);+|x|ql/pricingengines/basket/gaussiancopulaspreadengine.hpp|void GaussianCopulaSpreadEngine::calculate() const;+|v|ql/pricingengines/basket/kirkengine.hpp|KirkEngine::KirkEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Real correlation);+|v|ql/pricingengines/basket/mcamericanbasketengine.hpp|MCAmericanBasketEngine::MCAmericanBasketEngine<RNG>(const ext::shared_ptr<StochasticProcessArray> &, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size nCalibrationSamples = Null<Size>(), Size polynomialOrder = 2, LsmBasisSystem::PolynomialType polynomialType = LsmBasisSystem::Monomial);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine::MakeMCAmericanBasketEngine<RNG>(ext::shared_ptr<StochasticProcessArray>);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withSteps(Size steps);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withSamples(Size samples);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withMaxSamples(Size samples);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withSeed(BigNatural seed);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withCalibrationSamples(Size samples);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withPolynomialOrder(Size polynmOrder);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & MakeMCAmericanBasketEngine::withBasisSystem(LsmBasisSystem::PolynomialType polynomialType);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|AmericanBasketPathPricer::AmericanBasketPathPricer(Size assetNumber, ext::shared_ptr<Payoff> payoff, Size polynomialOrder = 2, LsmBasisSystem::PolynomialType polynomialType = LsmBasisSystem::Monomial);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|Array AmericanBasketPathPricer::state(const MultiPath & path, Size t) const;+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|Real AmericanBasketPathPricer::operator()(const MultiPath & path, Size t) const;+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|std::vector<std::function<Real (Array)>> AmericanBasketPathPricer::basisSystem() const;+|v|ql/pricingengines/basket/mcamericanbasketengine.hpp|MCAmericanBasketEngine<RNG>(const ext::shared_ptr<StochasticProcessArray> & processes, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size nCalibrationSamples, Size polynomialOrder, LsmBasisSystem::PolynomialType polynomialType);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|ext::shared_ptr<LongstaffSchwartzPathPricer<MultiPath>> lsmPathPricer() const;+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG>(ext::shared_ptr<StochasticProcessArray> process);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withBrownianBridge(bool brownianBridge);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withAntitheticVariate(bool b);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withPolynomialOrder(Size polynomialOrder);+|v|ql/pricingengines/basket/mceuropeanbasketengine.hpp|MCEuropeanBasketEngine::MCEuropeanBasketEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/pricingengines/basket/mceuropeanbasketengine.hpp|void MCEuropeanBasketEngine::calculate() const;+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine::MakeMCEuropeanBasketEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray>);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & MakeMCEuropeanBasketEngine::withSteps(Size steps);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & MakeMCEuropeanBasketEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & MakeMCEuropeanBasketEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & MakeMCEuropeanBasketEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & MakeMCEuropeanBasketEngine::withSamples(Size samples);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & MakeMCEuropeanBasketEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & MakeMCEuropeanBasketEngine::withMaxSamples(Size samples);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & MakeMCEuropeanBasketEngine::withSeed(BigNatural seed);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|EuropeanMultiPathPricer::EuropeanMultiPathPricer(ext::shared_ptr<BasketPayoff> payoff, DiscountFactor discount);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|Real EuropeanMultiPathPricer::operator()(const MultiPath & multiPath) const;+|v|ql/pricingengines/basket/mceuropeanbasketengine.hpp|MCEuropeanBasketEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> processes, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|?|ql/pricingengines/basket/mceuropeanbasketengine.hpp|TimeGrid timeGrid() const;+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|ext::shared_ptr<typename MCEuropeanBasketEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S>(ext::shared_ptr<StochasticProcessArray> process);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & withAntitheticVariate(bool b);+|v|ql/pricingengines/basket/operatorsplittingspreadengine.hpp|OperatorSplittingSpreadEngine::OperatorSplittingSpreadEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Real correlation, Order order = Second);+|v|ql/pricingengines/basket/pearsonspreadengine.hpp|PearsonSpreadEngine::PearsonSpreadEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Real correlation, Real integrationTolerance = 1e-10, Size maxIntegrationIterations = 10000, Real nStd = 8.0);+|v|ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|SingleFactorBsmBasketEngine::SingleFactorBsmBasketEngine(std::vector<ext::shared_ptr<GeneralizedBlackScholesProcess>> p, Real xTol = 1e4 * QL_EPSILON);+|x|ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|void SingleFactorBsmBasketEngine::calculate() const;+| |ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|SumExponentialsRootSolver::SumExponentialsRootSolver(Array a, Array sig, Real K);+| |ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|Real SumExponentialsRootSolver::operator()(Real x) const;+| |ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|Real SumExponentialsRootSolver::derivative(Real x) const;+| |ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|Real SumExponentialsRootSolver::secondDerivative(Real x) const;+| |ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|Real SumExponentialsRootSolver::getRoot(Real xTol = 1e6 * QL_EPSILON, Strategy strategy = Brent) const;+| |ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|Size SumExponentialsRootSolver::getFCtr() const;+| |ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|Size SumExponentialsRootSolver::getDerivativeCtr() const;+| |ql/pricingengines/basket/singlefactorbsmbasketengine.hpp|Size SumExponentialsRootSolver::getSecondDerivativeCtr() const;+| |ql/pricingengines/basket/spreadblackscholesvanillaengine.hpp|SpreadBlackScholesVanillaEngine::SpreadBlackScholesVanillaEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Real correlation);+|x|ql/pricingengines/basket/spreadblackscholesvanillaengine.hpp|void SpreadBlackScholesVanillaEngine::calculate() const;+|v|ql/pricingengines/basket/stulzengine.hpp|StulzEngine::StulzEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Real correlation);+|x|ql/pricingengines/basket/stulzengine.hpp|void StulzEngine::calculate() const;+| |ql/pricingengines/basket/vectorbsmprocessextractor.hpp|VectorBsmProcessExtractor::VectorBsmProcessExtractor(std::vector<ext::shared_ptr<GeneralizedBlackScholesProcess>> p);+| |ql/pricingengines/basket/vectorbsmprocessextractor.hpp|Array VectorBsmProcessExtractor::getSpot() const;+| |ql/pricingengines/basket/vectorbsmprocessextractor.hpp|Array VectorBsmProcessExtractor::getBlackStdDev(const Date & maturityDate) const;+| |ql/pricingengines/basket/vectorbsmprocessextractor.hpp|Array VectorBsmProcessExtractor::getBlackVariance(const Date & maturityDate) const;+| |ql/pricingengines/basket/vectorbsmprocessextractor.hpp|Array VectorBsmProcessExtractor::getDividendYieldDf(const Date & maturityDate) const;+| |ql/pricingengines/basket/vectorbsmprocessextractor.hpp|DiscountFactor VectorBsmProcessExtractor::getInterestRateDf(const Date & maturityDate) const;+|v|ql/pricingengines/blackcalculator.hpp|BlackCalculator::BlackCalculator(const ext::shared_ptr<StrikedTypePayoff> & payoff, Real forward, Real stdDev, Real discount = 1.0);+|v|ql/pricingengines/blackcalculator.hpp|BlackCalculator::BlackCalculator(Option::Type optionType, Real strike, Real forward, Real stdDev, Real discount = 1.0);+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::value() const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::deltaForward() const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::delta(Real spot) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::elasticityForward() const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::elasticity(Real spot) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::gammaForward() const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::gamma(Real spot) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::theta(Real spot, Time maturity) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::thetaPerDay(Real spot, Time maturity) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::vega(Time maturity) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::rho(Time maturity) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::dividendRho(Time maturity) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::itmCashProbability() const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::itmAssetProbability() const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::strikeSensitivity() const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::strikeGamma() const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::vanna(Real spot, Time maturity) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::volga(Time maturity) const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::alpha() const;+|v|ql/pricingengines/blackcalculator.hpp|Real BlackCalculator::beta() const;+|v|ql/pricingengines/blackdeltacalculator.hpp|BlackDeltaCalculator::BlackDeltaCalculator(Option::Type ot, DeltaVolQuote::DeltaType dt, Real spot, DiscountFactor dDiscount, DiscountFactor fDiscount, Real stdDev);+|v|ql/pricingengines/blackdeltacalculator.hpp|Real BlackDeltaCalculator::deltaFromStrike(Real strike) const;+|v|ql/pricingengines/blackdeltacalculator.hpp|Real BlackDeltaCalculator::strikeFromDelta(Real delta) const;+|v|ql/pricingengines/blackdeltacalculator.hpp|Real BlackDeltaCalculator::atmStrike(DeltaVolQuote::AtmType atmT) const;+|x|ql/pricingengines/blackdeltacalculator.hpp|void BlackDeltaCalculator::setDeltaType(DeltaVolQuote::DeltaType dt);+|x|ql/pricingengines/blackdeltacalculator.hpp|void BlackDeltaCalculator::setOptionType(Option::Type ot);+|x|ql/pricingengines/blackdeltacalculator.hpp|Real BlackDeltaCalculator::cumD1(Real strike) const;+|x|ql/pricingengines/blackdeltacalculator.hpp|Real BlackDeltaCalculator::cumD2(Real strike) const;+|x|ql/pricingengines/blackdeltacalculator.hpp|Real BlackDeltaCalculator::nD1(Real strike) const;+|x|ql/pricingengines/blackdeltacalculator.hpp|Real BlackDeltaCalculator::nD2(Real strike) const;+|x|ql/pricingengines/blackdeltacalculator.hpp|BlackDeltaPremiumAdjustedSolverClass::BlackDeltaPremiumAdjustedSolverClass(Option::Type ot, DeltaVolQuote::DeltaType dt, Real spot, DiscountFactor dDiscount, DiscountFactor fDiscount, Real stdDev, Real delta);+|x|ql/pricingengines/blackdeltacalculator.hpp|Real BlackDeltaPremiumAdjustedSolverClass::operator()(Real strike) const;+|x|ql/pricingengines/blackdeltacalculator.hpp|BlackDeltaPremiumAdjustedMaxStrikeClass::BlackDeltaPremiumAdjustedMaxStrikeClass(Option::Type ot, DeltaVolQuote::DeltaType dt, Real spot, DiscountFactor dDiscount, DiscountFactor fDiscount, Real stdDev);+|x|ql/pricingengines/blackdeltacalculator.hpp|Real BlackDeltaPremiumAdjustedMaxStrikeClass::operator()(Real strike) const;+|v|ql/pricingengines/blackformula.hpp|Real blackFormula(Option::Type optionType, Real strike, Real forward, Real stdDev, Real discount = 1.0, Real displacement = 0.0);+|x|ql/pricingengines/blackformula.hpp|Real blackFormula(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev, Real discount = 1.0, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaForwardDerivative(Option::Type optionType, Real strike, Real forward, Real stdDev, Real discount = 1.0, Real displacement = 0.0);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaForwardDerivative(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev, Real discount = 1.0, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDevApproximation(Option::Type optionType, Real strike, Real forward, Real blackPrice, Real discount = 1.0, Real displacement = 0.0);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDevApproximation(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real blackPrice, Real discount = 1.0, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDevChambers(Option::Type optionType, Real strike, Real forward, Real blackPrice, Real blackAtmPrice, Real discount = 1.0, Real displacement = 0.0);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDevChambers(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real blackPrice, Real blackAtmPrice, Real discount = 1.0, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDevApproximationRS(Option::Type optionType, Real strike, Real forward, Real blackPrice, Real discount = 1.0, Real displacement = 0.0);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDevApproximationRS(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real blackPrice, Real discount = 1.0, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDev(Option::Type optionType, Real strike, Real forward, Real blackPrice, Real discount = 1.0, Real displacement = 0.0, Real guess = Null<Real>(), Real accuracy = 1.0e-6, Natural maxIterations = 100);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDev(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real blackPrice, Real discount = 1.0, Real displacement = 0.0, Real guess = Null<Real>(), Real accuracy = 1.0e-6, Natural maxIterations = 100);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDevLiRS(Option::Type optionType, Real strike, Real forward, Real blackPrice, Real discount = 1.0, Real displacement = 0.0, Real guess = Null<Real>(), Real omega = 1.0, Real accuracy = 1.0e-6, Natural maxIterations = 100);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaImpliedStdDevLiRS(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real blackPrice, Real discount = 1.0, Real displacement = 0.0, Real guess = Null<Real>(), Real omega = 1.0, Real accuracy = 1.0e-6, Natural maxIterations = 100);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaCashItmProbability(Option::Type optionType, Real strike, Real forward, Real stdDev, Real displacement = 0.0);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaCashItmProbability(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaAssetItmProbability(Option::Type optionType, Real strike, Real forward, Real stdDev, Real displacement = 0.0);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaAssetItmProbability(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaStdDevDerivative(Real strike, Real forward, Real stdDev, Real discount = 1.0, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaVolDerivative(Real strike, Real forward, Real stdDev, Real expiry, Real discount = 1.0, Real displacement = 0.0);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaStdDevDerivative(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev, Real discount = 1.0, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real blackFormulaStdDevSecondDerivative(Rate strike, Rate forward, Real stdDev, Real discount, Real displacement);+|x|ql/pricingengines/blackformula.hpp|Real blackFormulaStdDevSecondDerivative(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev, Real discount = 1.0, Real displacement = 0.0);+|v|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormula(Option::Type optionType, Real strike, Real forward, Real stdDev, Real discount = 1.0);+|x|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormula(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev, Real discount = 1.0);+|v|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormulaForwardDerivative(Option::Type optionType, Real strike, Real forward, Real stdDev, Real discount = 1.0);+|x|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormulaForwardDerivative(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev, Real discount = 1.0);+|v|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormulaImpliedVolChoi(Option::Type optionType, Real strike, Real forward, Real tte, Real bachelierPrice, Real discount = 1.0);+|v|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormulaImpliedVol(Option::Type optionType, Real strike, Real forward, Real tte, Real bachelierPrice, Real discount = 1.0);+|v|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormulaStdDevDerivative(Real strike, Real forward, Real stdDev, Real discount = 1.0);+|x|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormulaStdDevDerivative(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev, Real discount = 1.0);+|v|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormulaAssetItmProbability(Option::Type optionType, Real strike, Real forward, Real stdDev);+|x|ql/pricingengines/blackformula.hpp|Real bachelierBlackFormulaAssetItmProbability(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Real forward, Real stdDev);+|v|ql/pricingengines/blackscholescalculator.hpp|BlackScholesCalculator::BlackScholesCalculator(const ext::shared_ptr<StrikedTypePayoff> & payoff, Real spot, DiscountFactor growth, Real stdDev, DiscountFactor discount);+|v|ql/pricingengines/blackscholescalculator.hpp|BlackScholesCalculator::BlackScholesCalculator(Option::Type optionType, Real strike, Real spot, DiscountFactor growth, Real stdDev, DiscountFactor discount);+|v|ql/pricingengines/blackscholescalculator.hpp|Real BlackScholesCalculator::delta() const;+|v|ql/pricingengines/blackscholescalculator.hpp|Real BlackScholesCalculator::elasticity() const;+|v|ql/pricingengines/blackscholescalculator.hpp|Real BlackScholesCalculator::gamma() const;+|v|ql/pricingengines/blackscholescalculator.hpp|Real BlackScholesCalculator::theta(Time maturity) const;+|v|ql/pricingengines/blackscholescalculator.hpp|Real BlackScholesCalculator::thetaPerDay(Time maturity) const;+|?|ql/pricingengines/bond/binomialconvertibleengine.hpp|BinomialConvertibleEngine::BinomialConvertibleEngine<T>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, const Handle<Quote> & creditSpread, DividendSchedule dividends = DividendSchedule());+|x|ql/pricingengines/bond/binomialconvertibleengine.hpp|void BinomialConvertibleEngine::calculate() const;+|x|ql/pricingengines/bond/binomialconvertibleengine.hpp|const Handle<Quote> & BinomialConvertibleEngine::creditSpread() const;+|x|ql/pricingengines/bond/binomialconvertibleengine.hpp|const DividendSchedule & BinomialConvertibleEngine::dividends() const;+| |ql/pricingengines/bond/bondfunctions.hpp|static Date BondFunctions::startDate(const Bond & bond);+| |ql/pricingengines/bond/bondfunctions.hpp|static Date BondFunctions::maturityDate(const Bond & bond);+| |ql/pricingengines/bond/bondfunctions.hpp|static bool BondFunctions::isTradable(const Bond & bond, Date settlementDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Leg::const_reverse_iterator BondFunctions::previousCashFlow(const Bond & bond, Date refDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Leg::const_iterator BondFunctions::nextCashFlow(const Bond & bond, Date refDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Date BondFunctions::previousCashFlowDate(const Bond & bond, Date refDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Date BondFunctions::nextCashFlowDate(const Bond & bond, Date refDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::previousCashFlowAmount(const Bond & bond, Date refDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::nextCashFlowAmount(const Bond & bond, Date refDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Rate BondFunctions::previousCouponRate(const Bond & bond, Date settlementDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Rate BondFunctions::nextCouponRate(const Bond & bond, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Date BondFunctions::accrualStartDate(const Bond & bond, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Date BondFunctions::accrualEndDate(const Bond & bond, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Date BondFunctions::referencePeriodStart(const Bond & bond, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Date BondFunctions::referencePeriodEnd(const Bond & bond, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Time BondFunctions::accrualPeriod(const Bond & bond, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Date::serial_type BondFunctions::accrualDays(const Bond & bond, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Time BondFunctions::accruedPeriod(const Bond & bond, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Date::serial_type BondFunctions::accruedDays(const Bond & bond, Date settlementDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::accruedAmount(const Bond & bond, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::cleanPrice(const Bond & bond, const YieldTermStructure & discountCurve, Date settlementDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::dirtyPrice(const Bond & bond, const YieldTermStructure & discountCurve, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::bps(const Bond & bond, const YieldTermStructure & discountCurve, Date settlementDate = Date());+|?|ql/pricingengines/bond/bondfunctions.hpp|static Rate BondFunctions::atmRate(const Bond & bond, const YieldTermStructure & discountCurve, Date settlementDate = Date(), Bond::Price price = { });+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::cleanPrice(const Bond & bond, const InterestRate & yield, Date settlementDate = Date());+|x|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::cleanPrice(const Bond & bond, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::dirtyPrice(const Bond & bond, const InterestRate & yield, Date settlementDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::dirtyPrice(const Bond & bond, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::bps(const Bond & bond, const InterestRate & yield, Date settlementDate = Date());+|x|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::bps(const Bond & bond, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date());+|?|ql/pricingengines/bond/bondfunctions.hpp|static Rate BondFunctions::yield(const Bond & bond, Bond::Price price, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date(), Real accuracy = 1.0e-10, Size maxIterations = 100, Rate guess = 0.05);+|v|ql/pricingengines/bond/bondfunctions.hpp|static Time BondFunctions::duration(const Bond & bond, const InterestRate & yield, Duration::Type type = Duration::Modified, Date settlementDate = Date());+|x|ql/pricingengines/bond/bondfunctions.hpp|static Time BondFunctions::duration(const Bond & bond, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Duration::Type type = Duration::Modified, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::convexity(const Bond & bond, const InterestRate & yield, Date settlementDate = Date());+|x|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::convexity(const Bond & bond, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::basisPointValue(const Bond & bond, const InterestRate & yield, Date settlementDate = Date());+|x|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::basisPointValue(const Bond & bond, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::yieldValueBasisPoint(const Bond & bond, const InterestRate & yield, Date settlementDate = Date());+|x|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::yieldValueBasisPoint(const Bond & bond, Rate yield, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date());+|v|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::cleanPrice(const Bond & bond, const ext::shared_ptr<YieldTermStructure> & discount, Spread zSpread, Compounding compounding, Frequency frequency, Date settlementDate = Date());+|x|ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::cleanPrice(const Bond & bond, const ext::shared_ptr<YieldTermStructure> & discount, Spread zSpread, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::dirtyPrice(const Bond & bond, const ext::shared_ptr<YieldTermStructure> & discount, Spread zSpread, Compounding compounding, Frequency frequency, Date settlementDate = Date());+| |ql/pricingengines/bond/bondfunctions.hpp|static Real BondFunctions::dirtyPrice(const Bond & bond, const ext::shared_ptr<YieldTermStructure> & discount, Spread zSpread, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date());+|?|ql/pricingengines/bond/bondfunctions.hpp|static Spread BondFunctions::zSpread(const Bond & bond, Bond::Price price, const ext::shared_ptr<YieldTermStructure> &, Compounding compounding, Frequency frequency, Date settlementDate = Date(), Real accuracy = 1.0e-10, Size maxIterations = 100, Rate guess = 0.0);+|v|ql/pricingengines/bond/bondfunctions.hpp|static Spread BondFunctions::zSpread(const Bond & bond, Bond::Price price, const ext::shared_ptr<YieldTermStructure> &, const DayCounter & dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = Date(), Real accuracy = 1.0e-10, Size maxIterations = 100, Rate guess = 0.0);+|v|ql/pricingengines/bond/discountingbondengine.hpp|DiscountingBondEngine::DiscountingBondEngine(Handle<YieldTermStructure> discountCurve = Handle<YieldTermStructure>(), const std::optional<bool> & includeSettlementDateFlows = std::nullopt);+|x|ql/pricingengines/bond/discountingbondengine.hpp|void DiscountingBondEngine::calculate() const;+| |ql/pricingengines/bond/discretizedconvertible.hpp|const Array & DiscretizedConvertible::conversionProbability() const;+| |ql/pricingengines/bond/discretizedconvertible.hpp|Array & DiscretizedConvertible::conversionProbability();+| |ql/pricingengines/bond/discretizedconvertible.hpp|const Array & DiscretizedConvertible::spreadAdjustedRate() const;+| |ql/pricingengines/bond/discretizedconvertible.hpp|Array & DiscretizedConvertible::spreadAdjustedRate();+| |ql/pricingengines/bond/discretizedconvertible.hpp|const Array & DiscretizedConvertible::dividendValues() const;+| |ql/pricingengines/bond/discretizedconvertible.hpp|Array & DiscretizedConvertible::dividendValues();+|v|ql/pricingengines/bond/riskybondengine.hpp|RiskyBondEngine::RiskyBondEngine(Handle<DefaultProbabilityTermStructure> defaultTS, Real recoveryRate, Handle<YieldTermStructure> yieldTS);+|x|ql/pricingengines/bond/riskybondengine.hpp|void RiskyBondEngine::calculate() const;+|x|ql/pricingengines/bond/riskybondengine.hpp|Real RiskyBondEngine::recoveryRate() const;+|v|ql/pricingengines/capfloor/analyticcapfloorengine.hpp|AnalyticCapFloorEngine::AnalyticCapFloorEngine(const ext::shared_ptr<AffineModel> & model, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|x|ql/pricingengines/capfloor/analyticcapfloorengine.hpp|void AnalyticCapFloorEngine::calculate() const;+|x|ql/pricingengines/capfloor/bacheliercapfloorengine.hpp|BachelierCapFloorEngine::BachelierCapFloorEngine(Handle<YieldTermStructure> discountCurve, Volatility vol, const DayCounter & dc = Actual365Fixed());+|v|ql/pricingengines/capfloor/bacheliercapfloorengine.hpp|BachelierCapFloorEngine::BachelierCapFloorEngine(Handle<YieldTermStructure> discountCurve, const Handle<Quote> & vol, const DayCounter & dc = Actual365Fixed());+|v|ql/pricingengines/capfloor/bacheliercapfloorengine.hpp|BachelierCapFloorEngine::BachelierCapFloorEngine(Handle<YieldTermStructure> discountCurve, Handle<OptionletVolatilityStructure> vol);+|x|ql/pricingengines/capfloor/bacheliercapfloorengine.hpp|void BachelierCapFloorEngine::calculate() const;+|x|ql/pricingengines/capfloor/bacheliercapfloorengine.hpp|Handle<YieldTermStructure> BachelierCapFloorEngine::termStructure();+|x|ql/pricingengines/capfloor/bacheliercapfloorengine.hpp|Handle<OptionletVolatilityStructure> BachelierCapFloorEngine::volatility();+|x|ql/pricingengines/capfloor/blackcapfloorengine.hpp|BlackCapFloorEngine::BlackCapFloorEngine(Handle<YieldTermStructure> discountCurve, Volatility vol, const DayCounter & dc = Actual365Fixed(), Real displacement = 0.0);+|v|ql/pricingengines/capfloor/blackcapfloorengine.hpp|BlackCapFloorEngine::BlackCapFloorEngine(Handle<YieldTermStructure> discountCurve, const Handle<Quote> & vol, const DayCounter & dc = Actual365Fixed(), Real displacement = 0.0);+|v|ql/pricingengines/capfloor/blackcapfloorengine.hpp|BlackCapFloorEngine::BlackCapFloorEngine(Handle<YieldTermStructure> discountCurve, Handle<OptionletVolatilityStructure> vol, Real displacement = Null<Real>());+|x|ql/pricingengines/capfloor/blackcapfloorengine.hpp|void BlackCapFloorEngine::calculate() const;+|x|ql/pricingengines/capfloor/blackcapfloorengine.hpp|Handle<YieldTermStructure> BlackCapFloorEngine::termStructure();+|x|ql/pricingengines/capfloor/blackcapfloorengine.hpp|Handle<OptionletVolatilityStructure> BlackCapFloorEngine::volatility();+|x|ql/pricingengines/capfloor/blackcapfloorengine.hpp|Real BlackCapFloorEngine::displacement() const;+| |ql/pricingengines/capfloor/discretizedcapfloor.hpp|DiscretizedCapFloor::DiscretizedCapFloor(const CapFloor::arguments & args, const Date & referenceDate, const DayCounter & dayCounter);+|v|ql/pricingengines/capfloor/gaussian1dcapfloorengine.hpp|Gaussian1dCapFloorEngine::Gaussian1dCapFloorEngine(const ext::shared_ptr<Gaussian1dModel> & model, const int integrationPoints = 64, const Real stddevs = 7.0, const bool extrapolatePayoff = true, const bool flatPayoffExtrapolation = false, Handle<YieldTermStructure> discountCurve = Handle<YieldTermStructure>());+|x|ql/pricingengines/capfloor/gaussian1dcapfloorengine.hpp|void Gaussian1dCapFloorEngine::calculate() const;+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|HullWhiteCapFloorPricer::HullWhiteCapFloorPricer(const CapFloor::arguments &, ext::shared_ptr<HullWhite>, Time forwardMeasureTime);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|Real HullWhiteCapFloorPricer::operator()(const Path & path) const;+|?|ql/pricingengines/capfloor/mchullwhiteengine.hpp|MCHullWhiteCapFloorEngine::MCHullWhiteCapFloorEngine<RNG, S>(ext::shared_ptr<HullWhite> model, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/pricingengines/capfloor/mchullwhiteengine.hpp|void MCHullWhiteCapFloorEngine::calculate() const;+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine::MakeMCHullWhiteCapFloorEngine<RNG, S>(ext::shared_ptr<HullWhite>);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & MakeMCHullWhiteCapFloorEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & MakeMCHullWhiteCapFloorEngine::withSamples(Size samples);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & MakeMCHullWhiteCapFloorEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & MakeMCHullWhiteCapFloorEngine::withMaxSamples(Size samples);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & MakeMCHullWhiteCapFloorEngine::withSeed(BigNatural seed);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & MakeMCHullWhiteCapFloorEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S>(ext::shared_ptr<HullWhite> model);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & withBrownianBridge(bool b);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & withAntitheticVariate(bool b);+|v|ql/pricingengines/capfloor/treecapfloorengine.hpp|TreeCapFloorEngine::TreeCapFloorEngine(const ext::shared_ptr<ShortRateModel> & model, Size timeSteps, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|v|ql/pricingengines/capfloor/treecapfloorengine.hpp|TreeCapFloorEngine::TreeCapFloorEngine(const ext::shared_ptr<ShortRateModel> & model, const TimeGrid & timeGrid, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|x|ql/pricingengines/capfloor/treecapfloorengine.hpp|void TreeCapFloorEngine::calculate() const;+|v|ql/pricingengines/cliquet/analyticcliquetengine.hpp|AnalyticCliquetEngine::AnalyticCliquetEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/cliquet/analyticcliquetengine.hpp|void AnalyticCliquetEngine::calculate() const;+|v|ql/pricingengines/cliquet/analyticperformanceengine.hpp|AnalyticPerformanceEngine::AnalyticPerformanceEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/cliquet/analyticperformanceengine.hpp|void AnalyticPerformanceEngine::calculate() const;+|?|ql/pricingengines/cliquet/mcperformanceengine.hpp|MCPerformanceEngine::MCPerformanceEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/pricingengines/cliquet/mcperformanceengine.hpp|void MCPerformanceEngine::calculate() const;+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine::MakeMCPerformanceEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess>);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & MakeMCPerformanceEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & MakeMCPerformanceEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & MakeMCPerformanceEngine::withSamples(Size samples);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & MakeMCPerformanceEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & MakeMCPerformanceEngine::withMaxSamples(Size samples);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & MakeMCPerformanceEngine::withSeed(BigNatural seed);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|PerformanceOptionPathPricer::PerformanceOptionPathPricer(Option::Type type, Real strike, std::vector<DiscountFactor> discounts);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|Real PerformanceOptionPathPricer::operator()(const Path & path) const;+|?|ql/pricingengines/cliquet/mcperformanceengine.hpp|MCPerformanceEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|?|ql/pricingengines/cliquet/mcperformanceengine.hpp|TimeGrid timeGrid() const;+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|ext::shared_ptr<typename MCPerformanceEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & withAntitheticVariate(bool b);+|?|ql/pricingengines/credit/integralcdsengine.hpp|IntegralCdsEngine::IntegralCdsEngine(const Period & integrationStep, Handle<DefaultProbabilityTermStructure>, Real recoveryRate, Handle<YieldTermStructure> discountCurve, const std::optional<bool> & includeSettlementDateFlows = std::nullopt);+|x|ql/pricingengines/credit/integralcdsengine.hpp|void IntegralCdsEngine::calculate() const;+|v|ql/pricingengines/credit/isdacdsengine.hpp|IsdaCdsEngine::IsdaCdsEngine(Handle<DefaultProbabilityTermStructure> probability, Real recoveryRate, Handle<YieldTermStructure> discountCurve, const std::optional<bool> & includeSettlementDateFlows = std::nullopt, NumericalFix numericalFix = Taylor, AccrualBias accrualBias = HalfDayBias, ForwardsInCouponPeriod forwardsInCouponPeriod = Piecewise);+|x|ql/pricingengines/credit/isdacdsengine.hpp|void IsdaCdsEngine::calculate() const;+|v|ql/pricingengines/credit/midpointcdsengine.hpp|MidPointCdsEngine::MidPointCdsEngine(Handle<DefaultProbabilityTermStructure>, Real recoveryRate, Handle<YieldTermStructure> discountCurve, const std::optional<bool> & includeSettlementDateFlows = std::nullopt);+|x|ql/pricingengines/credit/midpointcdsengine.hpp|void MidPointCdsEngine::calculate() const;+|v|ql/pricingengines/exotic/analyticamericanmargrabeengine.hpp|AnalyticAmericanMargrabeEngine::AnalyticAmericanMargrabeEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Real correlation);+|x|ql/pricingengines/exotic/analyticamericanmargrabeengine.hpp|void AnalyticAmericanMargrabeEngine::calculate() const;+|v|ql/pricingengines/exotic/analyticcomplexchooserengine.hpp|AnalyticComplexChooserEngine::AnalyticComplexChooserEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/exotic/analyticcomplexchooserengine.hpp|void AnalyticComplexChooserEngine::calculate() const;+|v|ql/pricingengines/exotic/analyticcompoundoptionengine.hpp|AnalyticCompoundOptionEngine::AnalyticCompoundOptionEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/exotic/analyticcompoundoptionengine.hpp|void AnalyticCompoundOptionEngine::calculate() const;+|v|ql/pricingengines/exotic/analyticeuropeanmargrabeengine.hpp|AnalyticEuropeanMargrabeEngine::AnalyticEuropeanMargrabeEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process1, ext::shared_ptr<GeneralizedBlackScholesProcess> process2, Real correlation);+|x|ql/pricingengines/exotic/analyticeuropeanmargrabeengine.hpp|void AnalyticEuropeanMargrabeEngine::calculate() const;+|v|ql/pricingengines/exotic/analyticholderextensibleoptionengine.hpp|AnalyticHolderExtensibleOptionEngine::AnalyticHolderExtensibleOptionEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/exotic/analyticholderextensibleoptionengine.hpp|void AnalyticHolderExtensibleOptionEngine::calculate() const;+|v|ql/pricingengines/exotic/analyticsimplechooserengine.hpp|AnalyticSimpleChooserEngine::AnalyticSimpleChooserEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/exotic/analyticsimplechooserengine.hpp|void AnalyticSimpleChooserEngine::calculate() const;+|v|ql/pricingengines/exotic/analytictwoassetcorrelationengine.hpp|AnalyticTwoAssetCorrelationEngine::AnalyticTwoAssetCorrelationEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> p1, ext::shared_ptr<GeneralizedBlackScholesProcess> p2, Handle<Quote> correlation);+|x|ql/pricingengines/exotic/analytictwoassetcorrelationengine.hpp|void AnalyticTwoAssetCorrelationEngine::calculate() const;+|v|ql/pricingengines/exotic/analyticwriterextensibleoptionengine.hpp|AnalyticWriterExtensibleOptionEngine::AnalyticWriterExtensibleOptionEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/exotic/analyticwriterextensibleoptionengine.hpp|void AnalyticWriterExtensibleOptionEngine::calculate() const;+|v|ql/pricingengines/forward/discountingfxforwardengine.hpp|DiscountingFxForwardEngine::DiscountingFxForwardEngine(Handle<YieldTermStructure> sourceCurrencyDiscountCurve, Handle<YieldTermStructure> targetCurrencyDiscountCurve, Handle<Quote> spotFx);+|x|ql/pricingengines/forward/discountingfxforwardengine.hpp|void DiscountingFxForwardEngine::calculate() const;+|x|ql/pricingengines/forward/discountingfxforwardengine.hpp|const Handle<YieldTermStructure> & DiscountingFxForwardEngine::sourceCurrencyDiscountCurve() const;+|x|ql/pricingengines/forward/discountingfxforwardengine.hpp|const Handle<YieldTermStructure> & DiscountingFxForwardEngine::targetCurrencyDiscountCurve() const;+|x|ql/pricingengines/forward/discountingfxforwardengine.hpp|const Handle<Quote> & DiscountingFxForwardEngine::spotFx() const;+|v|ql/pricingengines/forward/forwardengine.hpp|ForwardVanillaEngine::ForwardVanillaEngine<Engine>(ext::shared_ptr<GeneralizedBlackScholesProcess>);+|x|ql/pricingengines/forward/forwardengine.hpp|void ForwardVanillaEngine::calculate() const;+|v|ql/pricingengines/forward/forwardengine.hpp|ForwardVanillaEngine<Engine>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/forward/forwardengine.hpp|void setup() const;+| |ql/pricingengines/forward/forwardengine.hpp|void getOriginalResults() const;+|v|ql/pricingengines/forward/forwardperformanceengine.hpp|ForwardPerformanceVanillaEngine::ForwardPerformanceVanillaEngine<Engine>(const ext::shared_ptr<GeneralizedBlackScholesProcess> &);+|v|ql/pricingengines/forward/forwardperformanceengine.hpp|ForwardPerformanceVanillaEngine<Engine>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process);+| |ql/pricingengines/forward/forwardperformanceengine.hpp|void calculate() const;+| |ql/pricingengines/forward/forwardperformanceengine.hpp|void getOriginalResults() const;+|v|ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MCForwardEuropeanBSEngine::MCForwardEuropeanBSEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine::MakeMCForwardEuropeanBSEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & MakeMCForwardEuropeanBSEngine::withSteps(Size steps);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & MakeMCForwardEuropeanBSEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & MakeMCForwardEuropeanBSEngine::withBrownianBridge(bool b = false);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & MakeMCForwardEuropeanBSEngine::withSamples(Size samples);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & MakeMCForwardEuropeanBSEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & MakeMCForwardEuropeanBSEngine::withMaxSamples(Size samples);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & MakeMCForwardEuropeanBSEngine::withSeed(BigNatural seed);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & MakeMCForwardEuropeanBSEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|ForwardEuropeanBSPathPricer::ForwardEuropeanBSPathPricer(Option::Type type, Real moneyness, Size resetIndex, DiscountFactor discount);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|Real ForwardEuropeanBSPathPricer::operator()(const Path & path) const;+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MCForwardEuropeanBSEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|ext::shared_ptr<typename MCForwardEuropeanBSEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & withBrownianBridge(bool b);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & withAntitheticVariate(bool b);+|v|ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MCForwardEuropeanHestonEngine::MCForwardEuropeanHestonEngine<RNG, S, P>(const ext::shared_ptr<P> & process, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, bool controlVariate = false);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine::MakeMCForwardEuropeanHestonEngine<RNG, S, P>(ext::shared_ptr<P> process);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & MakeMCForwardEuropeanHestonEngine::withSteps(Size steps);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & MakeMCForwardEuropeanHestonEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & MakeMCForwardEuropeanHestonEngine::withSamples(Size samples);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & MakeMCForwardEuropeanHestonEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & MakeMCForwardEuropeanHestonEngine::withMaxSamples(Size samples);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & MakeMCForwardEuropeanHestonEngine::withSeed(BigNatural seed);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & MakeMCForwardEuropeanHestonEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & MakeMCForwardEuropeanHestonEngine::withControlVariate(bool b = false);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|ForwardEuropeanHestonPathPricer::ForwardEuropeanHestonPathPricer(Option::Type type, Real moneyness, Size resetIndex, DiscountFactor discount);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|Real ForwardEuropeanHestonPathPricer::operator()(const MultiPath & multiPath) const;+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MCForwardEuropeanHestonEngine<RNG, S, P>(const ext::shared_ptr<P> & process, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, bool controlVariate);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|ext::shared_ptr<typename MCForwardEuropeanHestonEngine<RNG, S, P>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|ext::shared_ptr<typename MCForwardEuropeanHestonEngine<RNG, S, P>::path_pricer_type> controlPathPricer() const;+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P>(ext::shared_ptr<P> process);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & withAntitheticVariate(bool b);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & withControlVariate(bool b);+| |ql/pricingengines/forward/mcforwardvanillaengine.hpp|MCForwardVanillaEngine::MCForwardVanillaEngine<MC, RNG, S>(ext::shared_ptr<StochasticProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, bool controlVariate = false);+|x|ql/pricingengines/forward/mcforwardvanillaengine.hpp|void MCForwardVanillaEngine::calculate() const;+| |ql/pricingengines/forward/mcforwardvanillaengine.hpp|MCForwardVanillaEngine<MC, RNG, S>(ext::shared_ptr<StochasticProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, bool controlVariate);+|x|ql/pricingengines/forward/mcforwardvanillaengine.hpp|TimeGrid timeGrid() const;+|x|ql/pricingengines/forward/mcforwardvanillaengine.hpp|Real controlVariateValue() const;+|u|ql/pricingengines/forward/mcvarianceswapengine.hpp|MCVarianceSwapEngine::MCVarianceSwapEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/pricingengines/forward/mcvarianceswapengine.hpp|void MCVarianceSwapEngine::calculate() const;+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine::MakeMCVarianceSwapEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & MakeMCVarianceSwapEngine::withSteps(Size steps);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & MakeMCVarianceSwapEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & MakeMCVarianceSwapEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & MakeMCVarianceSwapEngine::withSamples(Size samples);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & MakeMCVarianceSwapEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & MakeMCVarianceSwapEngine::withMaxSamples(Size samples);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & MakeMCVarianceSwapEngine::withSeed(BigNatural seed);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & MakeMCVarianceSwapEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|VariancePathPricer::VariancePathPricer(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|Real VariancePathPricer::operator()(const Path & path) const;+|?|ql/pricingengines/forward/mcvarianceswapengine.hpp|MCVarianceSwapEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|?|ql/pricingengines/forward/mcvarianceswapengine.hpp|TimeGrid timeGrid() const;+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|ext::shared_ptr<typename MCVarianceSwapEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & withAntitheticVariate(bool b);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|Integrand::Integrand(Path path, ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|Real Integrand::operator()(Time t) const;+|v|ql/pricingengines/forward/replicatingvarianceswapengine.hpp|ReplicatingVarianceSwapEngine::ReplicatingVarianceSwapEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Real dk = 5.0, const std::vector<Real> & callStrikes = std::vector<Real>(), const std::vector<Real> & putStrikes = std::vector<Real>());+|x|ql/pricingengines/forward/replicatingvarianceswapengine.hpp|void ReplicatingVarianceSwapEngine::calculate() const;+|x|ql/pricingengines/forward/replicatingvarianceswapengine.hpp|ReplicatingVarianceSwapEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Real dk, const std::vector<Real> & callStrikes, const std::vector<Real> & putStrikes);+| |ql/pricingengines/forward/replicatingvarianceswapengine.hpp|void computeOptionWeights(const std::vector<Real> & availStrikes, const Option::Type type, weights_type & optionWeights) const;+| |ql/pricingengines/forward/replicatingvarianceswapengine.hpp|Real computeLogPayoff(const Real strike, const Real callPutStrikeBoundary) const;+| |ql/pricingengines/forward/replicatingvarianceswapengine.hpp|Real computeReplicatingPortfolio(const weights_type & optionWeights) const;+| |ql/pricingengines/forward/replicatingvarianceswapengine.hpp|Real underlying() const;+| |ql/pricingengines/forward/replicatingvarianceswapengine.hpp|Time residualTime() const;+| |ql/pricingengines/forward/replicatingvarianceswapengine.hpp|Rate riskFreeRate() const;+| |ql/pricingengines/forward/replicatingvarianceswapengine.hpp|DiscountFactor riskFreeDiscount() const;+|v|ql/pricingengines/futures/discountingperpetualfuturesengine.hpp|DiscountingPerpetualFuturesEngine::DiscountingPerpetualFuturesEngine(const Handle<YieldTermStructure> & domesticDiscountCurve, const Handle<YieldTermStructure> & foreignDiscountCurve, const Handle<Quote> & assetSpot, const std::vector<Time> & fundingTimes, const std::vector<Rate> & fundingRates, const std::vector<Spread> & interestRateDiffs, InterpolationType fundingInterpType = PiecewiseConstant, Real maxT = 60.);+|x|ql/pricingengines/futures/discountingperpetualfuturesengine.hpp|void DiscountingPerpetualFuturesEngine::calculate() const;+|x|ql/pricingengines/futures/discountingperpetualfuturesengine.hpp|const std::vector<Time> & DiscountingPerpetualFuturesEngine::fundingTimes() const;+|x|ql/pricingengines/futures/discountingperpetualfuturesengine.hpp|const std::vector<Rate> & DiscountingPerpetualFuturesEngine::fundingRates() const;+|x|ql/pricingengines/futures/discountingperpetualfuturesengine.hpp|const std::vector<Spread> & DiscountingPerpetualFuturesEngine::interestRateDiffs() const;+| |ql/pricingengines/genericmodelengine.hpp|GenericModelEngine::GenericModelEngine<ModelType, ArgumentsType, ResultsType>(Handle<ModelType> model = Handle<ModelType>());+| |ql/pricingengines/genericmodelengine.hpp|GenericModelEngine::GenericModelEngine<ModelType, ArgumentsType, ResultsType>(const ext::shared_ptr<ModelType> & model);+| |ql/pricingengines/greeks.hpp|Real blackScholesTheta(const ext::shared_ptr<GeneralizedBlackScholesProcess> &, Real value, Real delta, Real gamma);+| |ql/pricingengines/greeks.hpp|Real defaultThetaPerDay(Real theta);+|x|ql/pricingengines/inflation/inflationcapfloorengines.hpp|YoYInflationCapFloorEngine::YoYInflationCapFloorEngine(ext::shared_ptr<YoYInflationIndex>, Handle<YoYOptionletVolatilitySurface> vol, Handle<YieldTermStructure> nominalTermStructure);+|x|ql/pricingengines/inflation/inflationcapfloorengines.hpp|ext::shared_ptr<YoYInflationIndex> YoYInflationCapFloorEngine::index() const;+|x|ql/pricingengines/inflation/inflationcapfloorengines.hpp|void YoYInflationCapFloorEngine::setVolatility(const Handle<YoYOptionletVolatilitySurface> & vol);+|x|ql/pricingengines/inflation/inflationcapfloorengines.hpp|void YoYInflationCapFloorEngine::calculate() const;+|v|ql/pricingengines/inflation/inflationcapfloorengines.hpp|YoYInflationBlackCapFloorEngine::YoYInflationBlackCapFloorEngine(const ext::shared_ptr<YoYInflationIndex> &, const Handle<YoYOptionletVolatilitySurface> & vol, const Handle<YieldTermStructure> & nominalTermStructure);+|v|ql/pricingengines/inflation/inflationcapfloorengines.hpp|YoYInflationUnitDisplacedBlackCapFloorEngine::YoYInflationUnitDisplacedBlackCapFloorEngine(const ext::shared_ptr<YoYInflationIndex> &, const Handle<YoYOptionletVolatilitySurface> & vol, const Handle<YieldTermStructure> & nominalTermStructure);+|v|ql/pricingengines/inflation/inflationcapfloorengines.hpp|YoYInflationBachelierCapFloorEngine::YoYInflationBachelierCapFloorEngine(const ext::shared_ptr<YoYInflationIndex> &, const Handle<YoYOptionletVolatilitySurface> & vol, const Handle<YieldTermStructure> & nominalTermStructure);+| |ql/pricingengines/latticeshortratemodelengine.hpp|LatticeShortRateModelEngine::LatticeShortRateModelEngine<Arguments, Results>(const ext::shared_ptr<ShortRateModel> & model, Size timeSteps);+| |ql/pricingengines/latticeshortratemodelengine.hpp|LatticeShortRateModelEngine::LatticeShortRateModelEngine<Arguments, Results>(const Handle<ShortRateModel> & model, Size timeSteps);+| |ql/pricingengines/latticeshortratemodelengine.hpp|LatticeShortRateModelEngine::LatticeShortRateModelEngine<Arguments, Results>(const ext::shared_ptr<ShortRateModel> & model, const TimeGrid & timeGrid);+| |ql/pricingengines/latticeshortratemodelengine.hpp|LatticeShortRateModelEngine<Arguments, Results>(const ext::shared_ptr<ShortRateModel> & model, Size timeSteps);+| |ql/pricingengines/latticeshortratemodelengine.hpp|LatticeShortRateModelEngine<Arguments, Results>(const Handle<ShortRateModel> & model, Size timeSteps);+| |ql/pricingengines/latticeshortratemodelengine.hpp|LatticeShortRateModelEngine<Arguments, Results>(const ext::shared_ptr<ShortRateModel> & model, const TimeGrid & timeGrid);+| |ql/pricingengines/latticeshortratemodelengine.hpp|void update();+|v|ql/pricingengines/lookback/analyticcontinuousfixedlookback.hpp|AnalyticContinuousFixedLookbackEngine::AnalyticContinuousFixedLookbackEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/lookback/analyticcontinuousfixedlookback.hpp|void AnalyticContinuousFixedLookbackEngine::calculate() const;+|v|ql/pricingengines/lookback/analyticcontinuousfloatinglookback.hpp|AnalyticContinuousFloatingLookbackEngine::AnalyticContinuousFloatingLookbackEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/lookback/analyticcontinuousfloatinglookback.hpp|void AnalyticContinuousFloatingLookbackEngine::calculate() const;+|v|ql/pricingengines/lookback/analyticcontinuouspartialfixedlookback.hpp|AnalyticContinuousPartialFixedLookbackEngine::AnalyticContinuousPartialFixedLookbackEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/lookback/analyticcontinuouspartialfixedlookback.hpp|void AnalyticContinuousPartialFixedLookbackEngine::calculate() const;+|v|ql/pricingengines/lookback/analyticcontinuouspartialfloatinglookback.hpp|AnalyticContinuousPartialFloatingLookbackEngine::AnalyticContinuousPartialFloatingLookbackEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/lookback/analyticcontinuouspartialfloatinglookback.hpp|void AnalyticContinuousPartialFloatingLookbackEngine::calculate() const;+|v|ql/pricingengines/lookback/mclookbackengine.hpp|MCLookbackEngine::MCLookbackEngine<I, RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antithetic, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|x|ql/pricingengines/lookback/mclookbackengine.hpp|void MCLookbackEngine::calculate() const;+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine::MakeMCLookbackEngine<I, RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess>);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & MakeMCLookbackEngine::withSteps(Size steps);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & MakeMCLookbackEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & MakeMCLookbackEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & MakeMCLookbackEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & MakeMCLookbackEngine::withSamples(Size samples);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & MakeMCLookbackEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & MakeMCLookbackEngine::withMaxSamples(Size samples);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & MakeMCLookbackEngine::withSeed(BigNatural seed);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MCLookbackEngine<I, RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+|?|ql/pricingengines/lookback/mclookbackengine.hpp|TimeGrid timeGrid() const;+| |ql/pricingengines/lookback/mclookbackengine.hpp|ext::shared_ptr<PathPricer<Path>> mc_lookback_path_pricer(const ContinuousFixedLookbackOption::arguments & args, const GeneralizedBlackScholesProcess & process, DiscountFactor discount);+| |ql/pricingengines/lookback/mclookbackengine.hpp|ext::shared_ptr<PathPricer<Path>> mc_lookback_path_pricer(const ContinuousPartialFixedLookbackOption::arguments & args, const GeneralizedBlackScholesProcess & process, DiscountFactor discount);+| |ql/pricingengines/lookback/mclookbackengine.hpp|ext::shared_ptr<PathPricer<Path>> mc_lookback_path_pricer(const ContinuousFloatingLookbackOption::arguments & args, const GeneralizedBlackScholesProcess & process, DiscountFactor discount);+| |ql/pricingengines/lookback/mclookbackengine.hpp|ext::shared_ptr<PathPricer<Path>> mc_lookback_path_pricer(const ContinuousPartialFloatingLookbackOption::arguments & args, const GeneralizedBlackScholesProcess & process, DiscountFactor discount);+| |ql/pricingengines/lookback/mclookbackengine.hpp|ext::shared_ptr<typename MCLookbackEngine<I, RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & withAntitheticVariate(bool b);+| |ql/pricingengines/mclongstaffschwartzengine.hpp|MCLongstaffSchwartzEngine::MCLongstaffSchwartzEngine<GenericEngine, MC, RNG, S, RNG_Calibration>(ext::shared_ptr<StochasticProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size nCalibrationSamples = Null<Size>(), std::optional<bool> brownianBridgeCalibration = std::nullopt, std::optional<bool> antitheticVariateCalibration = std::nullopt, BigNatural seedCalibration = Null<Size>());+|x|ql/pricingengines/mclongstaffschwartzengine.hpp|void MCLongstaffSchwartzEngine::calculate() const;+| |ql/pricingengines/mclongstaffschwartzengine.hpp|MCLongstaffSchwartzEngine<GenericEngine, MC, RNG, S, RNG_Calibration>(ext::shared_ptr<StochasticProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size nCalibrationSamples, std::optional<bool> brownianBridgeCalibration, std::optional<bool> antitheticVariateCalibration, BigNatural seedCalibration);+| |ql/pricingengines/mclongstaffschwartzengine.hpp|ext::shared_ptr<typename MCLongstaffSchwartzEngine<GenericEngine, MC, RNG, S, RNG_Calibration>::path_pricer_type> pathPricer() const;+|?|ql/pricingengines/mclongstaffschwartzengine.hpp|TimeGrid timeGrid() const;+|?|ql/pricingengines/mclongstaffschwartzengine.hpp|ext::shared_ptr<typename MCLongstaffSchwartzEngine<GenericEngine, MC, RNG, S, RNG_Calibration>::path_generator_type> pathGenerator() const;+| |ql/pricingengines/mcsimulation.hpp|result_type McSimulation::value(Real tolerance, Size maxSamples = QL_MAX_INTEGER, Size minSamples = 1023) const;+| |ql/pricingengines/mcsimulation.hpp|result_type McSimulation::valueWithSamples(Size samples) const;+| |ql/pricingengines/mcsimulation.hpp|result_type McSimulation::errorEstimate() const;+| |ql/pricingengines/mcsimulation.hpp|const stats_type & McSimulation::sampleAccumulator() const;+| |ql/pricingengines/mcsimulation.hpp|void McSimulation::calculate(Real requiredTolerance, Size requiredSamples, Size maxSamples) const;+| |ql/pricingengines/mcsimulation.hpp|typename McSimulation<MC, RNG, S>::result_type value(Real tolerance, Size maxSamples, Size minSamples) const;+| |ql/pricingengines/mcsimulation.hpp|typename McSimulation<MC, RNG, S>::result_type valueWithSamples(Size samples) const;+| |ql/pricingengines/mcsimulation.hpp|typename McSimulation<MC, RNG, S>::result_type errorEstimate() const;+| |ql/pricingengines/mcsimulation.hpp|const typename McSimulation<MC, RNG, S>::stats_type & sampleAccumulator() const;+|v|ql/pricingengines/quanto/quantoengine.hpp|QuantoEngine::QuantoEngine<Instr, Engine>(ext::shared_ptr<GeneralizedBlackScholesProcess>, Handle<YieldTermStructure> foreignRiskFreeRate, Handle<BlackVolTermStructure> exchangeRateVolatility, Handle<Quote> correlation);+|v|ql/pricingengines/quanto/quantoengine.hpp|QuantoEngine<Instr, Engine>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Handle<YieldTermStructure> foreignRiskFreeRate, Handle<BlackVolTermStructure> exchangeRateVolatility, Handle<Quote> correlation);+| |ql/pricingengines/quanto/quantoengine.hpp|void calculate() const;+|x|ql/pricingengines/swap/cvaswapengine.hpp|CounterpartyAdjSwapEngine::CounterpartyAdjSwapEngine(const Handle<YieldTermStructure> & discountCurve, const Handle<PricingEngine> & swaptionEngine, const Handle<DefaultProbabilityTermStructure> & ctptyDTS, Real ctptyRecoveryRate, const Handle<DefaultProbabilityTermStructure> & invstDTS = Handle<DefaultProbabilityTermStructure>(), Real invstRecoveryRate = 0.999);+|x|ql/pricingengines/swap/cvaswapengine.hpp|CounterpartyAdjSwapEngine::CounterpartyAdjSwapEngine(const Handle<YieldTermStructure> & discountCurve, Volatility blackVol, const Handle<DefaultProbabilityTermStructure> & ctptyDTS, Real ctptyRecoveryRate, const Handle<DefaultProbabilityTermStructure> & invstDTS = Handle<DefaultProbabilityTermStructure>(), Real invstRecoveryRate = 0.999);+|v|ql/pricingengines/swap/cvaswapengine.hpp|CounterpartyAdjSwapEngine::CounterpartyAdjSwapEngine(const Handle<YieldTermStructure> & discountCurve, const Handle<Quote> & blackVol, const Handle<DefaultProbabilityTermStructure> & ctptyDTS, Real ctptyRecoveryRate, const Handle<DefaultProbabilityTermStructure> & invstDTS = Handle<DefaultProbabilityTermStructure>(), Real invstRecoveryRate = 0.999);+|x|ql/pricingengines/swap/cvaswapengine.hpp|void CounterpartyAdjSwapEngine::calculate() const;+|v|ql/pricingengines/swap/discountingconstnotionalcrosscurrencyswapengine.hpp|DiscountingConstNotionalCrossCurrencySwapEngine::DiscountingConstNotionalCrossCurrencySwapEngine(Currency domesticCcy, const Handle<YieldTermStructure> & domesticCcyDiscountCurve, Currency foreignCcy, const Handle<YieldTermStructure> & foreignCcyDiscountCurve, const Handle<Quote> & spotFX, std::optional<bool> includeSettlementDateFlows = std::nullopt, const Date & settlementDate = Date(), const Date & npvDate = Date(), const Date & spotFXSettleDate = Date());+|x|ql/pricingengines/swap/discountingconstnotionalcrosscurrencyswapengine.hpp|void DiscountingConstNotionalCrossCurrencySwapEngine::calculate() const;+|x|ql/pricingengines/swap/discountingconstnotionalcrosscurrencyswapengine.hpp|const Handle<YieldTermStructure> & DiscountingConstNotionalCrossCurrencySwapEngine::domesticCcyDiscountCurve() const;+|x|ql/pricingengines/swap/discountingconstnotionalcrosscurrencyswapengine.hpp|const Handle<YieldTermStructure> & DiscountingConstNotionalCrossCurrencySwapEngine::foreignCcyDiscountCurve() const;+|x|ql/pricingengines/swap/discountingconstnotionalcrosscurrencyswapengine.hpp|const Currency & DiscountingConstNotionalCrossCurrencySwapEngine::domesticCurrency() const;+|x|ql/pricingengines/swap/discountingconstnotionalcrosscurrencyswapengine.hpp|const Currency & DiscountingConstNotionalCrossCurrencySwapEngine::foreignCurrency() const;+|x|ql/pricingengines/swap/discountingconstnotionalcrosscurrencyswapengine.hpp|const Handle<Quote> & DiscountingConstNotionalCrossCurrencySwapEngine::spotFX() const;+|v|ql/pricingengines/swap/discountingswapengine.hpp|DiscountingSwapEngine::DiscountingSwapEngine(Handle<YieldTermStructure> discountCurve = Handle<YieldTermStructure>(), const std::optional<bool> & includeSettlementDateFlows = std::nullopt, Date settlementDate = Date(), Date npvDate = Date());+|x|ql/pricingengines/swap/discountingswapengine.hpp|void DiscountingSwapEngine::calculate() const;+| |ql/pricingengines/swap/discretizedswap.hpp|DiscretizedSwap::DiscretizedSwap(const VanillaSwap::arguments & args, const Date & referenceDate, const DayCounter & dayCounter);+| |ql/pricingengines/swap/discretizedswap.hpp|DiscretizedSwap::DiscretizedSwap(const VanillaSwap::arguments & args, const Date & referenceDate, const DayCounter & dayCounter, std::vector<CouponAdjustment> fixedCouponAdjustments, std::vector<CouponAdjustment> floatingCouponAdjustments);+|v|ql/pricingengines/swap/treeswapengine.hpp|TreeVanillaSwapEngine::TreeVanillaSwapEngine(const ext::shared_ptr<ShortRateModel> &, Size timeSteps, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|v|ql/pricingengines/swap/treeswapengine.hpp|TreeVanillaSwapEngine::TreeVanillaSwapEngine(const ext::shared_ptr<ShortRateModel> &, const TimeGrid & timeGrid, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|x|ql/pricingengines/swap/treeswapengine.hpp|void TreeVanillaSwapEngine::calculate() const;+| |ql/pricingengines/swaption/basketgeneratingengine.hpp|std::vector<ext::shared_ptr<BlackCalibrationHelper>> BasketGeneratingEngine::calibrationBasket(const ext::shared_ptr<Exercise> & exercise, const ext::shared_ptr<SwapIndex> & standardSwapBase, const ext::shared_ptr<SwaptionVolatilityStructure> & swaptionVolatility, CalibrationBasketType basketType = MaturityStrikeByDeltaGamma) const;+| |ql/pricingengines/swaption/basketgeneratingengine.hpp|MatchHelper::MatchHelper(const Swap::Type type, const Real npv, const Real delta, const Real gamma, ext::shared_ptr<Gaussian1dModel> model, ext::shared_ptr<SwapIndex> indexBase, const Date & expiry, const Real maxMaturity, const Real h);+| |ql/pricingengines/swaption/basketgeneratingengine.hpp|Real MatchHelper::NPV(const ext::shared_ptr<VanillaSwap> & swap, Real fixedRate, Real nominal, Real y, int type) const;+| |ql/pricingengines/swaption/blackswaptionengine.hpp|BlackStyleSwaptionEngine::BlackStyleSwaptionEngine<Spec>(Handle<YieldTermStructure> discountCurve, Volatility vol, const DayCounter & dc = Actual365Fixed(), Real displacement = 0.0, CashAnnuityModel model = DiscountCurve);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|BlackStyleSwaptionEngine::BlackStyleSwaptionEngine<Spec>(Handle<YieldTermStructure> discountCurve, const Handle<Quote> & vol, const DayCounter & dc = Actual365Fixed(), Real displacement = 0.0, CashAnnuityModel model = DiscountCurve);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|BlackStyleSwaptionEngine::BlackStyleSwaptionEngine<Spec>(Handle<YieldTermStructure> discountCurve, Handle<SwaptionVolatilityStructure> vol, CashAnnuityModel model = DiscountCurve);+|x|ql/pricingengines/swaption/blackswaptionengine.hpp|void BlackStyleSwaptionEngine::calculate() const;+|x|ql/pricingengines/swaption/blackswaptionengine.hpp|Handle<YieldTermStructure> BlackStyleSwaptionEngine::termStructure();+| |ql/pricingengines/swaption/blackswaptionengine.hpp|Handle<SwaptionVolatilityStructure> BlackStyleSwaptionEngine::volatility();+| |ql/pricingengines/swaption/blackswaptionengine.hpp|Real Black76Spec::value(const Option::Type type, const Real strike, const Real atmForward, const Real stdDev, const Real annuity, const Real displacement);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|Real Black76Spec::vega(const Real strike, const Real atmForward, const Real stdDev, const Real exerciseTime, const Real annuity, const Real displacement);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|Real Black76Spec::delta(const Option::Type type, const Real strike, const Real atmForward, const Real stdDev, const Real annuity, const Real displacement);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|Real BachelierSpec::value(const Option::Type type, const Real strike, const Real atmForward, const Real stdDev, const Real annuity, const Real);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|Real BachelierSpec::vega(const Real strike, const Real atmForward, const Real stdDev, const Real exerciseTime, const Real annuity, const Real);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|Real BachelierSpec::delta(const Option::Type type, const Real strike, const Real atmForward, const Real stdDev, const Real annuity, const Real);+|x|ql/pricingengines/swaption/blackswaptionengine.hpp|BlackSwaptionEngine::BlackSwaptionEngine(const Handle<YieldTermStructure> & discountCurve, Volatility vol, const DayCounter & dc = Actual365Fixed(), Real displacement = 0.0, CashAnnuityModel model = DiscountCurve);+|v|ql/pricingengines/swaption/blackswaptionengine.hpp|BlackSwaptionEngine::BlackSwaptionEngine(const Handle<YieldTermStructure> & discountCurve, const Handle<Quote> & vol, const DayCounter & dc = Actual365Fixed(), Real displacement = 0.0, CashAnnuityModel model = DiscountCurve);+|v|ql/pricingengines/swaption/blackswaptionengine.hpp|BlackSwaptionEngine::BlackSwaptionEngine(const Handle<YieldTermStructure> & discountCurve, const Handle<SwaptionVolatilityStructure> & vol, CashAnnuityModel model = DiscountCurve);+|x|ql/pricingengines/swaption/blackswaptionengine.hpp|BachelierSwaptionEngine::BachelierSwaptionEngine(const Handle<YieldTermStructure> & discountCurve, Volatility vol, const DayCounter & dc = Actual365Fixed(), CashAnnuityModel model = DiscountCurve);+|v|ql/pricingengines/swaption/blackswaptionengine.hpp|BachelierSwaptionEngine::BachelierSwaptionEngine(const Handle<YieldTermStructure> & discountCurve, const Handle<Quote> & vol, const DayCounter & dc = Actual365Fixed(), CashAnnuityModel model = DiscountCurve);+|v|ql/pricingengines/swaption/blackswaptionengine.hpp|BachelierSwaptionEngine::BachelierSwaptionEngine(const Handle<YieldTermStructure> & discountCurve, const Handle<SwaptionVolatilityStructure> & vol, CashAnnuityModel model = DiscountCurve);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|BlackStyleSwaptionEngine<Spec>(Handle<YieldTermStructure> discountCurve, Volatility vol, const DayCounter & dc, Real displacement, CashAnnuityModel model);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|BlackStyleSwaptionEngine<Spec>(Handle<YieldTermStructure> discountCurve, const Handle<Quote> & vol, const DayCounter & dc, Real displacement, CashAnnuityModel model);+| |ql/pricingengines/swaption/blackswaptionengine.hpp|BlackStyleSwaptionEngine<Spec>(Handle<YieldTermStructure> discountCurve, Handle<SwaptionVolatilityStructure> volatility, CashAnnuityModel model);+| |ql/pricingengines/swaption/discretizedswaption.hpp|DiscretizedSwaption::DiscretizedSwaption(const Swaption::arguments &, const Date & referenceDate, const DayCounter & dayCounter);+|v|ql/pricingengines/swaption/fdg2swaptionengine.hpp|FdG2SwaptionEngine::FdG2SwaptionEngine(const ext::shared_ptr<G2> & model, Size tGrid = 100, Size xGrid = 50, Size yGrid = 50, Size dampingSteps = 0, Real invEps = 1e-5, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|x|ql/pricingengines/swaption/fdg2swaptionengine.hpp|void FdG2SwaptionEngine::calculate() const;+|v|ql/pricingengines/swaption/fdhullwhiteswaptionengine.hpp|FdHullWhiteSwaptionEngine::FdHullWhiteSwaptionEngine(const ext::shared_ptr<HullWhite> & model, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, Real invEps = 1e-5, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|x|ql/pricingengines/swaption/fdhullwhiteswaptionengine.hpp|void FdHullWhiteSwaptionEngine::calculate() const;+|v|ql/pricingengines/swaption/g2swaptionengine.hpp|G2SwaptionEngine::G2SwaptionEngine(const ext::shared_ptr<G2> & model, Real range, Size intervals);+|x|ql/pricingengines/swaption/g2swaptionengine.hpp|void G2SwaptionEngine::calculate() const;+|v|ql/pricingengines/swaption/gaussian1dfloatfloatswaptionengine.hpp|Gaussian1dFloatFloatSwaptionEngine::Gaussian1dFloatFloatSwaptionEngine(const ext::shared_ptr<Gaussian1dModel> & model, const int integrationPoints = 64, const Real stddevs = 7.0, const bool extrapolatePayoff = true, const bool flatPayoffExtrapolation = false, const Handle<Quote> & oas = Handle<Quote>(), const Handle<YieldTermStructure> & discountCurve = Handle<YieldTermStructure>(), const bool includeTodaysExercise = false, const Probabilities probabilities = None);+|x|ql/pricingengines/swaption/gaussian1dfloatfloatswaptionengine.hpp|Gaussian1dFloatFloatSwaptionEngine::Gaussian1dFloatFloatSwaptionEngine(const Handle<Gaussian1dModel> & model, const int integrationPoints = 64, const Real stddevs = 7.0, const bool extrapolatePayoff = true, const bool flatPayoffExtrapolation = false, const Handle<Quote> & oas = Handle<Quote>(), const Handle<YieldTermStructure> & discountCurve = Handle<YieldTermStructure>(), const bool includeTodaysExercise = false, const Probabilities probabilities = None);+|x|ql/pricingengines/swaption/gaussian1dfloatfloatswaptionengine.hpp|void Gaussian1dFloatFloatSwaptionEngine::calculate() const;+|v|ql/pricingengines/swaption/gaussian1djamshidianswaptionengine.hpp|Gaussian1dJamshidianSwaptionEngine::Gaussian1dJamshidianSwaptionEngine(const ext::shared_ptr<Gaussian1dModel> & model);+|x|ql/pricingengines/swaption/gaussian1djamshidianswaptionengine.hpp|void Gaussian1dJamshidianSwaptionEngine::calculate() const;+|v|ql/pricingengines/swaption/gaussian1dnonstandardswaptionengine.hpp|Gaussian1dNonstandardSwaptionEngine::Gaussian1dNonstandardSwaptionEngine(const ext::shared_ptr<Gaussian1dModel> & model, const int integrationPoints = 64, const Real stddevs = 7.0, const bool extrapolatePayoff = true, const bool flatPayoffExtrapolation = false, const Handle<Quote> & oas = Handle<Quote>(), const Handle<YieldTermStructure> & discountCurve = Handle<YieldTermStructure>(), const Probabilities probabilities = None);+|x|ql/pricingengines/swaption/gaussian1dnonstandardswaptionengine.hpp|Gaussian1dNonstandardSwaptionEngine::Gaussian1dNonstandardSwaptionEngine(const Handle<Gaussian1dModel> & model, const int integrationPoints = 64, const Real stddevs = 7.0, const bool extrapolatePayoff = true, const bool flatPayoffExtrapolation = false, const Handle<Quote> & oas = Handle<Quote>(), const Handle<YieldTermStructure> & discountCurve = Handle<YieldTermStructure>(), const Probabilities probabilities = None);+|x|ql/pricingengines/swaption/gaussian1dnonstandardswaptionengine.hpp|void Gaussian1dNonstandardSwaptionEngine::calculate() const;+|v|ql/pricingengines/swaption/gaussian1dswaptionengine.hpp|Gaussian1dSwaptionEngine::Gaussian1dSwaptionEngine(const ext::shared_ptr<Gaussian1dModel> & model, const int integrationPoints = 64, const Real stddevs = 7.0, const bool extrapolatePayoff = true, const bool flatPayoffExtrapolation = false, Handle<YieldTermStructure> discountCurve = Handle<YieldTermStructure>(), const Probabilities probabilities = None);+|x|ql/pricingengines/swaption/gaussian1dswaptionengine.hpp|Gaussian1dSwaptionEngine::Gaussian1dSwaptionEngine(const Handle<Gaussian1dModel> & model, const int integrationPoints = 64, const Real stddevs = 7.0, const bool extrapolatePayoff = true, const bool flatPayoffExtrapolation = false, Handle<YieldTermStructure> discountCurve = Handle<YieldTermStructure>(), const Probabilities probabilities = None);+|x|ql/pricingengines/swaption/gaussian1dswaptionengine.hpp|void Gaussian1dSwaptionEngine::calculate() const;+|v|ql/pricingengines/swaption/jamshidianswaptionengine.hpp|JamshidianSwaptionEngine::JamshidianSwaptionEngine(const ext::shared_ptr<OneFactorAffineModel> & model, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|x|ql/pricingengines/swaption/jamshidianswaptionengine.hpp|void JamshidianSwaptionEngine::calculate() const;+|v|ql/pricingengines/swaption/treeswaptionengine.hpp|TreeSwaptionEngine::TreeSwaptionEngine(const ext::shared_ptr<ShortRateModel> &, Size timeSteps, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|v|ql/pricingengines/swaption/treeswaptionengine.hpp|TreeSwaptionEngine::TreeSwaptionEngine(const ext::shared_ptr<ShortRateModel> &, const TimeGrid & timeGrid, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|v|ql/pricingengines/swaption/treeswaptionengine.hpp|TreeSwaptionEngine::TreeSwaptionEngine(const Handle<ShortRateModel> &, Size timeSteps, Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>());+|x|ql/pricingengines/swaption/treeswaptionengine.hpp|void TreeSwaptionEngine::calculate() const;+|v|ql/pricingengines/vanilla/analyticbsmhullwhiteengine.hpp|AnalyticBSMHullWhiteEngine::AnalyticBSMHullWhiteEngine(Real equityShortRateCorrelation, ext::shared_ptr<GeneralizedBlackScholesProcess>, const ext::shared_ptr<HullWhite> &);+|x|ql/pricingengines/vanilla/analyticbsmhullwhiteengine.hpp|void AnalyticBSMHullWhiteEngine::calculate() const;+| |ql/pricingengines/vanilla/analyticcevengine.hpp|CEVCalculator::CEVCalculator(Real f0, Real alpha, Real beta);+| |ql/pricingengines/vanilla/analyticcevengine.hpp|Real CEVCalculator::value(Option::Type optionType, Real strike, Time t) const;+|x|ql/pricingengines/vanilla/analyticcevengine.hpp|Real CEVCalculator::f0() const;+|x|ql/pricingengines/vanilla/analyticcevengine.hpp|Real CEVCalculator::alpha() const;+|x|ql/pricingengines/vanilla/analyticcevengine.hpp|Real CEVCalculator::beta() const;+| |ql/pricingengines/vanilla/analyticcevengine.hpp|AnalyticCEVEngine::AnalyticCEVEngine(Real f0, Real alpha, Real beta, Handle<YieldTermStructure> discountCurve);+|x|ql/pricingengines/vanilla/analyticcevengine.hpp|void AnalyticCEVEngine::calculate() const;+|v|ql/pricingengines/vanilla/analyticdigitalamericanengine.hpp|AnalyticDigitalAmericanEngine::AnalyticDigitalAmericanEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>);+|x|ql/pricingengines/vanilla/analyticdigitalamericanengine.hpp|void AnalyticDigitalAmericanEngine::calculate() const;+|x|ql/pricingengines/vanilla/analyticdigitalamericanengine.hpp|bool AnalyticDigitalAmericanEngine::knock_in() const;+|v|ql/pricingengines/vanilla/analyticdigitalamericanengine.hpp|AnalyticDigitalAmericanKOEngine::AnalyticDigitalAmericanKOEngine(const ext::shared_ptr<GeneralizedBlackScholesProcess> & engine);+|?|ql/pricingengines/vanilla/analyticdividendeuropeanengine.hpp|AnalyticDividendEuropeanEngine::AnalyticDividendEuropeanEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, DividendSchedule dividends);+|x|ql/pricingengines/vanilla/analyticdividendeuropeanengine.hpp|void AnalyticDividendEuropeanEngine::calculate() const;+|v|ql/pricingengines/vanilla/analyticeuropeanengine.hpp|AnalyticEuropeanEngine::AnalyticEuropeanEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>);+|v|ql/pricingengines/vanilla/analyticeuropeanengine.hpp|AnalyticEuropeanEngine::AnalyticEuropeanEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Handle<YieldTermStructure> discountCurve);+|x|ql/pricingengines/vanilla/analyticeuropeanengine.hpp|void AnalyticEuropeanEngine::calculate() const;+| |ql/pricingengines/vanilla/analyticeuropeanvasicekengine.hpp|AnalyticBlackVasicekEngine::AnalyticBlackVasicekEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, ext::shared_ptr<Vasicek>, Real correlation);+|x|ql/pricingengines/vanilla/analyticeuropeanvasicekengine.hpp|void AnalyticBlackVasicekEngine::calculate() const;+|v|ql/pricingengines/vanilla/analyticgjrgarchengine.hpp|AnalyticGJRGARCHEngine::AnalyticGJRGARCHEngine(const ext::shared_ptr<GJRGARCHModel> & model);+|x|ql/pricingengines/vanilla/analyticgjrgarchengine.hpp|void AnalyticGJRGARCHEngine::calculate() const;+|v|ql/pricingengines/vanilla/analytich1hwengine.hpp|AnalyticH1HWEngine::AnalyticH1HWEngine(const ext::shared_ptr<HestonModel> & model, const ext::shared_ptr<HullWhite> & hullWhiteModel, Real rhoSr, Size integrationOrder = 144);+|v|ql/pricingengines/vanilla/analytich1hwengine.hpp|AnalyticH1HWEngine::AnalyticH1HWEngine(const ext::shared_ptr<HestonModel> & model, const ext::shared_ptr<HullWhite> & hullWhiteModel, Real rhoSr, Real relTolerance, Size maxEvaluations);+|v|ql/pricingengines/vanilla/analytichestonengine.hpp|AnalyticHestonEngine::AnalyticHestonEngine(const ext::shared_ptr<HestonModel> & model, Real relTolerance, Size maxEvaluations);+|v|ql/pricingengines/vanilla/analytichestonengine.hpp|AnalyticHestonEngine::AnalyticHestonEngine(const ext::shared_ptr<HestonModel> & model, Size integrationOrder = 144);+|u|ql/pricingengines/vanilla/analytichestonengine.hpp|AnalyticHestonEngine::AnalyticHestonEngine(const ext::shared_ptr<HestonModel> & model, ComplexLogFormula cpxLog, const Integration & itg, Real andersenPiterbargEpsilon = 1e-25, Real alpha = - 0.5);+|x|ql/pricingengines/vanilla/analytichestonengine.hpp|void AnalyticHestonEngine::calculate() const;+|x|ql/pricingengines/vanilla/analytichestonengine.hpp|std::complex<Real> AnalyticHestonEngine::chF(const std::complex<Real> & z, Time t) const;+|x|ql/pricingengines/vanilla/analytichestonengine.hpp|std::complex<Real> AnalyticHestonEngine::lnChF(const std::complex<Real> & z, Time t) const;+|x|ql/pricingengines/vanilla/analytichestonengine.hpp|Size AnalyticHestonEngine::numberOfEvaluations() const;+|x|ql/pricingengines/vanilla/analytichestonengine.hpp|static void AnalyticHestonEngine::doCalculation(Real riskFreeDiscount, Real dividendDiscount, Real spotPrice, Real strikePrice, Real term, Real kappa, Real theta, Real sigma, Real v0, Real rho, const TypePayoff & type, const Integration & integration, ComplexLogFormula cpxLog, const AnalyticHestonEngine * enginePtr, Real & value, Size & evaluations);+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Real AnalyticHestonEngine::priceVanillaPayoff(const ext::shared_ptr<PlainVanillaPayoff> & payoff, const Date & maturity) const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Real AnalyticHestonEngine::priceVanillaPayoff(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Time maturity) const;+|v|ql/pricingengines/vanilla/analytichestonengine.hpp|static ComplexLogFormula AnalyticHestonEngine::optimalControlVariate(Time t, Real v0, Real kappa, Real theta, Real sigma, Real rho);+| |ql/pricingengines/vanilla/analytichestonengine.hpp|AP_Helper::AP_Helper(Time term, Real fwd, Real strike, ComplexLogFormula cpxLog, const AnalyticHestonEngine * enginePtr, Real alpha = - 0.5);+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Real AP_Helper::operator()(Real u) const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Real AP_Helper::controlVariateValue() const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|OptimalAlpha::OptimalAlpha(Time t, const AnalyticHestonEngine * enginePtr);+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Real OptimalAlpha::operator()(Real strike) const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|std::pair<Real, Real> OptimalAlpha::alphaGreaterZero(Real strike) const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|std::pair<Real, Real> OptimalAlpha::alphaSmallerMinusOne(Real strike) const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Size OptimalAlpha::numberOfEvaluations() const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Real OptimalAlpha::M(Real k) const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Real OptimalAlpha::k(Real x, Integer sgn) const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Real OptimalAlpha::alphaMin(Real strike) const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|Real OptimalAlpha::alphaMax(Real strike) const;+| |ql/pricingengines/vanilla/analytichestonengine.hpp|std::complex<Real> addOnTerm(Real, Time, Size) const;+|v|ql/pricingengines/vanilla/analytichestonhullwhiteengine.hpp|AnalyticHestonHullWhiteEngine::AnalyticHestonHullWhiteEngine(const ext::shared_ptr<HestonModel> & hestonModel, ext::shared_ptr<HullWhite> hullWhiteModel, Size integrationOrder = 144);+|v|ql/pricingengines/vanilla/analytichestonhullwhiteengine.hpp|AnalyticHestonHullWhiteEngine::AnalyticHestonHullWhiteEngine(const ext::shared_ptr<HestonModel> & model, ext::shared_ptr<HullWhite> hullWhiteModel, Real relTolerance, Size maxEvaluations);+|x|ql/pricingengines/vanilla/analytichestonhullwhiteengine.hpp|void AnalyticHestonHullWhiteEngine::update();+| |ql/pricingengines/vanilla/analytichestonhullwhiteengine.hpp|std::complex<Real> addOnTerm(Real u, Time, Size j) const;+|v|ql/pricingengines/vanilla/analyticpdfhestonengine.hpp|AnalyticPDFHestonEngine::AnalyticPDFHestonEngine(ext::shared_ptr<HestonModel> model, Real gaussLobattoEps = 1e-6, Size gaussLobattoIntegrationOrder = 10000UL);+|x|ql/pricingengines/vanilla/analyticpdfhestonengine.hpp|void AnalyticPDFHestonEngine::calculate() const;+| |ql/pricingengines/vanilla/analyticpdfhestonengine.hpp|Real AnalyticPDFHestonEngine::Pv(Real x_t, Time t) const;+| |ql/pricingengines/vanilla/analyticpdfhestonengine.hpp|Real AnalyticPDFHestonEngine::cdf(Real X, Time t) const;+| |ql/pricingengines/vanilla/analyticptdhestonengine.hpp|AnalyticPTDHestonEngine::AnalyticPTDHestonEngine(const ext::shared_ptr<PiecewiseTimeDependentHestonModel> & model, Real relTolerance, Size maxEvaluations);+| |ql/pricingengines/vanilla/analyticptdhestonengine.hpp|AnalyticPTDHestonEngine::AnalyticPTDHestonEngine(const ext::shared_ptr<PiecewiseTimeDependentHestonModel> & model, Size integrationOrder = 144);+| |ql/pricingengines/vanilla/analyticptdhestonengine.hpp|AnalyticPTDHestonEngine::AnalyticPTDHestonEngine(const ext::shared_ptr<PiecewiseTimeDependentHestonModel> & model, ComplexLogFormula cpxLog, const Integration & itg, Real andersenPiterbargEpsilon = 1e-8);+|x|ql/pricingengines/vanilla/analyticptdhestonengine.hpp|void AnalyticPTDHestonEngine::calculate() const;+| |ql/pricingengines/vanilla/analyticptdhestonengine.hpp|Size AnalyticPTDHestonEngine::numberOfEvaluations() const;+| |ql/pricingengines/vanilla/analyticptdhestonengine.hpp|std::complex<Real> AnalyticPTDHestonEngine::chF(const std::complex<Real> & z, Time t) const;+| |ql/pricingengines/vanilla/analyticptdhestonengine.hpp|std::complex<Real> AnalyticPTDHestonEngine::lnChF(const std::complex<Real> & z, Time t) const;+|v|ql/pricingengines/vanilla/baroneadesiwhaleyengine.hpp|BaroneAdesiWhaleyApproximationEngine::BaroneAdesiWhaleyApproximationEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>);+| |ql/pricingengines/vanilla/baroneadesiwhaleyengine.hpp|static Real BaroneAdesiWhaleyApproximationEngine::criticalPrice(const ext::shared_ptr<StrikedTypePayoff> & payoff, DiscountFactor riskFreeDiscount, DiscountFactor dividendDiscount, Real variance, Real tolerance = 1e-6);+|x|ql/pricingengines/vanilla/baroneadesiwhaleyengine.hpp|void BaroneAdesiWhaleyApproximationEngine::calculate() const;+|v|ql/pricingengines/vanilla/batesengine.hpp|BatesEngine::BatesEngine(const ext::shared_ptr<BatesModel> & model, Size integrationOrder = 144);+|v|ql/pricingengines/vanilla/batesengine.hpp|BatesEngine::BatesEngine(const ext::shared_ptr<BatesModel> & model, Real relTolerance, Size maxEvaluations);+|v|ql/pricingengines/vanilla/batesengine.hpp|BatesDetJumpEngine::BatesDetJumpEngine(const ext::shared_ptr<BatesDetJumpModel> & model, Size integrationOrder = 144);+|v|ql/pricingengines/vanilla/batesengine.hpp|BatesDetJumpEngine::BatesDetJumpEngine(const ext::shared_ptr<BatesDetJumpModel> & model, Real relTolerance, Size maxEvaluations);+|v|ql/pricingengines/vanilla/batesengine.hpp|BatesDoubleExpEngine::BatesDoubleExpEngine(const ext::shared_ptr<BatesDoubleExpModel> & model, Size integrationOrder = 144);+|v|ql/pricingengines/vanilla/batesengine.hpp|BatesDoubleExpEngine::BatesDoubleExpEngine(const ext::shared_ptr<BatesDoubleExpModel> & model, Real relTolerance, Size maxEvaluations);+|v|ql/pricingengines/vanilla/batesengine.hpp|BatesDoubleExpDetJumpEngine::BatesDoubleExpDetJumpEngine(const ext::shared_ptr<BatesDoubleExpDetJumpModel> & model, Size integrationOrder = 144);+|v|ql/pricingengines/vanilla/batesengine.hpp|BatesDoubleExpDetJumpEngine::BatesDoubleExpDetJumpEngine(const ext::shared_ptr<BatesDoubleExpDetJumpModel> & model, Real relTolerance, Size maxEvaluations);+|?|ql/pricingengines/vanilla/binomialengine.hpp|BinomialVanillaEngine::BinomialVanillaEngine<T>(ext::shared_ptr<GeneralizedBlackScholesProcess> process, Size timeSteps);+|x|ql/pricingengines/vanilla/binomialengine.hpp|void BinomialVanillaEngine::calculate() const;+|v|ql/pricingengines/vanilla/bjerksundstenslandengine.hpp|BjerksundStenslandApproximationEngine::BjerksundStenslandApproximationEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>);+|x|ql/pricingengines/vanilla/bjerksundstenslandengine.hpp|void BjerksundStenslandApproximationEngine::calculate() const;+| |ql/pricingengines/vanilla/cashdividendeuropeanengine.hpp|CashDividendEuropeanEngine::CashDividendEuropeanEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process, DividendSchedule dividends, CashDividendModel cashDividendModel = Spot);+|x|ql/pricingengines/vanilla/cashdividendeuropeanengine.hpp|void CashDividendEuropeanEngine::calculate() const;+|v|ql/pricingengines/vanilla/coshestonengine.hpp|COSHestonEngine::COSHestonEngine(const ext::shared_ptr<HestonModel> & model, Real L = 16, Size N = 200);+|x|ql/pricingengines/vanilla/coshestonengine.hpp|void COSHestonEngine::update();+|x|ql/pricingengines/vanilla/coshestonengine.hpp|void COSHestonEngine::calculate() const;+|x|ql/pricingengines/vanilla/coshestonengine.hpp|std::complex<Real> COSHestonEngine::chF(Real u, Real t) const;+| |ql/pricingengines/vanilla/coshestonengine.hpp|Real COSHestonEngine::c1(Time t) const;+| |ql/pricingengines/vanilla/coshestonengine.hpp|Real COSHestonEngine::c2(Time t) const;+| |ql/pricingengines/vanilla/coshestonengine.hpp|Real COSHestonEngine::c3(Time t) const;+| |ql/pricingengines/vanilla/coshestonengine.hpp|Real COSHestonEngine::c4(Time t) const;+| |ql/pricingengines/vanilla/coshestonengine.hpp|Real COSHestonEngine::mu(Time t) const;+| |ql/pricingengines/vanilla/coshestonengine.hpp|Real COSHestonEngine::var(Time t) const;+| |ql/pricingengines/vanilla/coshestonengine.hpp|Real COSHestonEngine::skew(Time t) const;+| |ql/pricingengines/vanilla/coshestonengine.hpp|Real COSHestonEngine::kurtosis(Time t) const;+| |ql/pricingengines/vanilla/discretizedvanillaoption.hpp|DiscretizedVanillaOption::DiscretizedVanillaOption(const VanillaOption::arguments &, const StochasticProcess & process, const TimeGrid & grid = TimeGrid());+| |ql/pricingengines/vanilla/exponentialfittinghestonengine.hpp|ExponentialFittingHestonEngine::ExponentialFittingHestonEngine(const ext::shared_ptr<HestonModel> & model, ControlVariate cv = ControlVariate::OptimalCV, Real scaling = Null<Real>(), Real alpha = - 0.5);+|x|ql/pricingengines/vanilla/exponentialfittinghestonengine.hpp|void ExponentialFittingHestonEngine::calculate() const;+|v|ql/pricingengines/vanilla/fdbatesvanillaengine.hpp|FdBatesVanillaEngine::FdBatesVanillaEngine(const ext::shared_ptr<BatesModel> & model, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|v|ql/pricingengines/vanilla/fdbatesvanillaengine.hpp|FdBatesVanillaEngine::FdBatesVanillaEngine(const ext::shared_ptr<BatesModel> & model, DividendSchedule dividends, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|x|ql/pricingengines/vanilla/fdbatesvanillaengine.hpp|void FdBatesVanillaEngine::calculate() const;+|v|ql/pricingengines/vanilla/fdblackscholesshoutengine.hpp|FdBlackScholesShoutEngine::FdBlackScholesShoutEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|v|ql/pricingengines/vanilla/fdblackscholesshoutengine.hpp|FdBlackScholesShoutEngine::FdBlackScholesShoutEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, DividendSchedule dividends, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|x|ql/pricingengines/vanilla/fdblackscholesshoutengine.hpp|void FdBlackScholesShoutEngine::calculate() const;+|v|ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|FdBlackScholesVanillaEngine::FdBlackScholesVanillaEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>(), CashDividendModel cashDividendModel = Spot);+|v|ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|FdBlackScholesVanillaEngine::FdBlackScholesVanillaEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, DividendSchedule dividends, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>(), CashDividendModel cashDividendModel = Spot);+|v|ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|FdBlackScholesVanillaEngine::FdBlackScholesVanillaEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, ext::shared_ptr<FdmQuantoHelper> quantoHelper, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>(), CashDividendModel cashDividendModel = Spot);+|v|ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|FdBlackScholesVanillaEngine::FdBlackScholesVanillaEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, DividendSchedule dividends, ext::shared_ptr<FdmQuantoHelper> quantoHelper, Size tGrid = 100, Size xGrid = 100, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas(), bool localVol = false, Real illegalLocalVolOverwrite = - Null<Real>(), CashDividendModel cashDividendModel = Spot);+|x|ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|void FdBlackScholesVanillaEngine::calculate() const;+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine::MakeFdBlackScholesVanillaEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine & MakeFdBlackScholesVanillaEngine::withQuantoHelper(const ext::shared_ptr<FdmQuantoHelper> & quantoHelper);+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine & MakeFdBlackScholesVanillaEngine::withTGrid(Size tGrid);+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine & MakeFdBlackScholesVanillaEngine::withXGrid(Size xGrid);+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine & MakeFdBlackScholesVanillaEngine::withDampingSteps(Size dampingSteps);+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine & MakeFdBlackScholesVanillaEngine::withFdmSchemeDesc(const FdmSchemeDesc & schemeDesc);+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine & MakeFdBlackScholesVanillaEngine::withLocalVol(bool localVol);+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine & MakeFdBlackScholesVanillaEngine::withIllegalLocalVolOverwrite(Real illegalLocalVolOverwrite);+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine & MakeFdBlackScholesVanillaEngine::withCashDividends(const std::vector<Date> & dividendDates, const std::vector<Real> & dividendAmounts);+| |ql/pricingengines/vanilla/fdblackscholesvanillaengine.hpp|MakeFdBlackScholesVanillaEngine & MakeFdBlackScholesVanillaEngine::withCashDividendModel(FdBlackScholesVanillaEngine::CashDividendModel cashDividendModel);+| |ql/pricingengines/vanilla/fdcevvanillaengine.hpp|FdCEVVanillaEngine::FdCEVVanillaEngine(Real f0, Real alpha, Real beta, Handle<YieldTermStructure> discountCurve, Size tGrid = 50, Size xGrid = 400, Size dampingSteps = 0, Real scalingFactor = 1.0, Real eps = 1e-4, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|x|ql/pricingengines/vanilla/fdcevvanillaengine.hpp|void FdCEVVanillaEngine::calculate() const;+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|FdCIRVanillaEngine::FdCIRVanillaEngine(ext::shared_ptr<CoxIngersollRossProcess> cirProcess, ext::shared_ptr<GeneralizedBlackScholesProcess> bsProcess, Size tGrid, Size xGrid, Size vGrid, Size dampingSteps, Real rho, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::ModifiedHundsdorfer(), ext::shared_ptr<FdmQuantoHelper> quantoHelper = { });+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|FdCIRVanillaEngine::FdCIRVanillaEngine(ext::shared_ptr<CoxIngersollRossProcess> cirProcess, ext::shared_ptr<GeneralizedBlackScholesProcess> bsProcess, DividendSchedule dividends, Size tGrid, Size xGrid, Size vGrid, Size dampingSteps, Real rho, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::ModifiedHundsdorfer(), ext::shared_ptr<FdmQuantoHelper> quantoHelper = { });+|x|ql/pricingengines/vanilla/fdcirvanillaengine.hpp|void FdCIRVanillaEngine::calculate() const;+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|FdmSolverDesc FdCIRVanillaEngine::getSolverDesc(Real equityScaleFactor) const;+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|MakeFdCIRVanillaEngine::MakeFdCIRVanillaEngine(ext::shared_ptr<CoxIngersollRossProcess> cirProcess, ext::shared_ptr<GeneralizedBlackScholesProcess> bsProcess, Real rho);+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|MakeFdCIRVanillaEngine & MakeFdCIRVanillaEngine::withQuantoHelper(const ext::shared_ptr<FdmQuantoHelper> & quantoHelper);+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|MakeFdCIRVanillaEngine & MakeFdCIRVanillaEngine::withTGrid(Size tGrid);+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|MakeFdCIRVanillaEngine & MakeFdCIRVanillaEngine::withXGrid(Size xGrid);+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|MakeFdCIRVanillaEngine & MakeFdCIRVanillaEngine::withRGrid(Size rGrid);+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|MakeFdCIRVanillaEngine & MakeFdCIRVanillaEngine::withDampingSteps(Size dampingSteps);+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|MakeFdCIRVanillaEngine & MakeFdCIRVanillaEngine::withFdmSchemeDesc(const FdmSchemeDesc & schemeDesc);+| |ql/pricingengines/vanilla/fdcirvanillaengine.hpp|MakeFdCIRVanillaEngine & MakeFdCIRVanillaEngine::withCashDividends(const std::vector<Date> & dividendDates, const std::vector<Real> & dividendAmounts);+|v|ql/pricingengines/vanilla/fdhestonhullwhitevanillaengine.hpp|FdHestonHullWhiteVanillaEngine::FdHestonHullWhiteVanillaEngine(const ext::shared_ptr<HestonModel> & model, ext::shared_ptr<HullWhiteProcess> hwProcess, Real corrEquityShortRate, Size tGrid = 50, Size xGrid = 100, Size vGrid = 40, Size rGrid = 20, Size dampingSteps = 0, bool controlVariate = true, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|v|ql/pricingengines/vanilla/fdhestonhullwhitevanillaengine.hpp|FdHestonHullWhiteVanillaEngine::FdHestonHullWhiteVanillaEngine(const ext::shared_ptr<HestonModel> & model, ext::shared_ptr<HullWhiteProcess> hwProcess, DividendSchedule dividends, Real corrEquityShortRate, Size tGrid = 50, Size xGrid = 100, Size vGrid = 40, Size rGrid = 20, Size dampingSteps = 0, bool controlVariate = true, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|x|ql/pricingengines/vanilla/fdhestonhullwhitevanillaengine.hpp|void FdHestonHullWhiteVanillaEngine::calculate() const;+|x|ql/pricingengines/vanilla/fdhestonhullwhitevanillaengine.hpp|void FdHestonHullWhiteVanillaEngine::update();+|x|ql/pricingengines/vanilla/fdhestonhullwhitevanillaengine.hpp|void FdHestonHullWhiteVanillaEngine::enableMultipleStrikesCaching(const std::vector<Real> & strikes);+|v|ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|FdHestonVanillaEngine::FdHestonVanillaEngine(const ext::shared_ptr<HestonModel> & model, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), ext::shared_ptr<LocalVolTermStructure> leverageFct = { }, Real mixingFactor = 1.0);+|v|ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|FdHestonVanillaEngine::FdHestonVanillaEngine(const ext::shared_ptr<HestonModel> & model, DividendSchedule dividends, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), ext::shared_ptr<LocalVolTermStructure> leverageFct = { }, Real mixingFactor = 1.0);+|v|ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|FdHestonVanillaEngine::FdHestonVanillaEngine(const ext::shared_ptr<HestonModel> & model, ext::shared_ptr<FdmQuantoHelper> quantoHelper, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), ext::shared_ptr<LocalVolTermStructure> leverageFct = { }, Real mixingFactor = 1.0);+|v|ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|FdHestonVanillaEngine::FdHestonVanillaEngine(const ext::shared_ptr<HestonModel> & model, DividendSchedule dividends, ext::shared_ptr<FdmQuantoHelper> quantoHelper, Size tGrid = 100, Size xGrid = 100, Size vGrid = 50, Size dampingSteps = 0, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer(), ext::shared_ptr<LocalVolTermStructure> leverageFct = { }, Real mixingFactor = 1.0);+|x|ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|void FdHestonVanillaEngine::calculate() const;+|x|ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|void FdHestonVanillaEngine::update();+|x|ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|void FdHestonVanillaEngine::enableMultipleStrikesCaching(const std::vector<Real> & strikes);+|x|ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|FdmSolverDesc FdHestonVanillaEngine::getSolverDesc(Real equityScaleFactor) const;+| |ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|MakeFdHestonVanillaEngine::MakeFdHestonVanillaEngine(ext::shared_ptr<HestonModel> hestonModel);+| |ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|MakeFdHestonVanillaEngine & MakeFdHestonVanillaEngine::withQuantoHelper(const ext::shared_ptr<FdmQuantoHelper> & quantoHelper);+| |ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|MakeFdHestonVanillaEngine & MakeFdHestonVanillaEngine::withTGrid(Size tGrid);+| |ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|MakeFdHestonVanillaEngine & MakeFdHestonVanillaEngine::withXGrid(Size xGrid);+| |ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|MakeFdHestonVanillaEngine & MakeFdHestonVanillaEngine::withVGrid(Size vGrid);+| |ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|MakeFdHestonVanillaEngine & MakeFdHestonVanillaEngine::withDampingSteps(Size dampingSteps);+| |ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|MakeFdHestonVanillaEngine & MakeFdHestonVanillaEngine::withFdmSchemeDesc(const FdmSchemeDesc & schemeDesc);+| |ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|MakeFdHestonVanillaEngine & MakeFdHestonVanillaEngine::withLeverageFunction(ext::shared_ptr<LocalVolTermStructure> & leverageFct);+| |ql/pricingengines/vanilla/fdhestonvanillaengine.hpp|MakeFdHestonVanillaEngine & MakeFdHestonVanillaEngine::withCashDividends(const std::vector<Date> & dividendDates, const std::vector<Real> & dividendAmounts);+| |ql/pricingengines/vanilla/fdsabrvanillaengine.hpp|FdSabrVanillaEngine::FdSabrVanillaEngine(Real f0, Real alpha, Real beta, Real nu, Real rho, Handle<YieldTermStructure> rTS, Size tGrid = 50, Size fGrid = 400, Size xGrid = 50, Size dampingSteps = 0, Real scalingFactor = 1.0, Real eps = 1e-4, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Hundsdorfer());+|x|ql/pricingengines/vanilla/fdsabrvanillaengine.hpp|void FdSabrVanillaEngine::calculate() const;+| |ql/pricingengines/vanilla/fdsimplebsswingengine.hpp|FdSimpleBSSwingEngine::FdSimpleBSSwingEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> p, Size tGrid = 50, Size xGrid = 100, const FdmSchemeDesc & schemeDesc = FdmSchemeDesc::Douglas());+|x|ql/pricingengines/vanilla/fdsimplebsswingengine.hpp|void FdSimpleBSSwingEngine::calculate() const;+| |ql/pricingengines/vanilla/hestonexpansionengine.hpp|HestonExpansionEngine::HestonExpansionEngine(const ext::shared_ptr<HestonModel> & model, HestonExpansionFormula formula);+|x|ql/pricingengines/vanilla/hestonexpansionengine.hpp|void HestonExpansionEngine::calculate() const;+| |ql/pricingengines/vanilla/hestonexpansionengine.hpp|Real HestonExpansion::impliedVolatility(Real strike, Real forward) const;+| |ql/pricingengines/vanilla/hestonexpansionengine.hpp|LPP2HestonExpansion::LPP2HestonExpansion(Real kappa, Real theta, Real sigma, Real v0, Real rho, Real term);+| |ql/pricingengines/vanilla/hestonexpansionengine.hpp|LPP3HestonExpansion::LPP3HestonExpansion(Real kappa, Real theta, Real sigma, Real v0, Real rho, Real term);+| |ql/pricingengines/vanilla/hestonexpansionengine.hpp|FordeHestonExpansion::FordeHestonExpansion(Real kappa, Real theta, Real sigma, Real v0, Real rho, Real term);+|v|ql/pricingengines/vanilla/integralengine.hpp|IntegralEngine::IntegralEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>);+|x|ql/pricingengines/vanilla/integralengine.hpp|void IntegralEngine::calculate() const;+|v|ql/pricingengines/vanilla/jumpdiffusionengine.hpp|JumpDiffusionEngine::JumpDiffusionEngine(ext::shared_ptr<Merton76Process>, Real relativeAccuracy_ = 1e-4, Size maxIterations = 100);+|x|ql/pricingengines/vanilla/jumpdiffusionengine.hpp|void JumpDiffusionEngine::calculate() const;+|v|ql/pricingengines/vanilla/juquadraticengine.hpp|JuQuadraticApproximationEngine::JuQuadraticApproximationEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>);+|x|ql/pricingengines/vanilla/juquadraticengine.hpp|void JuQuadraticApproximationEngine::calculate() const;+|v|ql/pricingengines/vanilla/mcamericanengine.hpp|MCAmericanEngine::MCAmericanEngine<RNG, S, RNG_Calibration>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size polynomialOrder, LsmBasisSystem::PolynomialType polynomialType, Size nCalibrationSamples = Null<Size>(), const std::optional<bool> & antitheticVariateCalibration = std::nullopt, BigNatural seedCalibration = Null<Size>());+| |ql/pricingengines/vanilla/mcamericanengine.hpp|AmericanPathPricer::AmericanPathPricer(ext::shared_ptr<Payoff> payoff, Size polynomialOrder, LsmBasisSystem::PolynomialType polynomialType);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|Real AmericanPathPricer::state(const Path & path, Size t) const;+| |ql/pricingengines/vanilla/mcamericanengine.hpp|Real AmericanPathPricer::operator()(const Path & path, Size t) const;+| |ql/pricingengines/vanilla/mcamericanengine.hpp|std::vector<std::function<Real (Real)>> AmericanPathPricer::basisSystem() const;+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine::MakeMCAmericanEngine<RNG, S, RNG_Calibration>(ext::shared_ptr<GeneralizedBlackScholesProcess>);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withSteps(Size steps);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withSamples(Size samples);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withControlVariate(bool b = true);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withPolynomialOrder(Size polynomialOrder);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withBasisSystem(LsmBasisSystem::PolynomialType);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withCalibrationSamples(Size calibrationSamples);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withAntitheticVariateCalibration(bool b = true);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & MakeMCAmericanEngine::withSeedCalibration(BigNatural seed);+|v|ql/pricingengines/vanilla/mcamericanengine.hpp|MCAmericanEngine<RNG, S, RNG_Calibration>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size polynomialOrder, LsmBasisSystem::PolynomialType polynomialType, Size nCalibrationSamples, const std::optional<bool> & antitheticVariateCalibration, BigNatural seedCalibration);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|void calculate() const;+| |ql/pricingengines/vanilla/mcamericanengine.hpp|ext::shared_ptr<LongstaffSchwartzPathPricer<Path>> lsmPathPricer() const;+| |ql/pricingengines/vanilla/mcamericanengine.hpp|ext::shared_ptr<PathPricer<Path>> controlPathPricer() const;+| |ql/pricingengines/vanilla/mcamericanengine.hpp|ext::shared_ptr<PricingEngine> controlPricingEngine() const;+| |ql/pricingengines/vanilla/mcamericanengine.hpp|Real controlVariateValue() const;+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withBasisSystem(LsmBasisSystem::PolynomialType polynomialType);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withCalibrationSamples(Size samples);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withAntitheticVariate(bool b);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withControlVariate(bool b);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withAntitheticVariateCalibration(bool b);+|?|ql/pricingengines/vanilla/mcdigitalengine.hpp|MCDigitalEngine::MCDigitalEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> &, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine::MakeMCDigitalEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess>);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & MakeMCDigitalEngine::withSteps(Size steps);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & MakeMCDigitalEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & MakeMCDigitalEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & MakeMCDigitalEngine::withSamples(Size samples);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & MakeMCDigitalEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & MakeMCDigitalEngine::withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & MakeMCDigitalEngine::withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & MakeMCDigitalEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|DigitalPathPricer::DigitalPathPricer(ext::shared_ptr<CashOrNothingPayoff> payoff, ext::shared_ptr<AmericanExercise> exercise, Handle<YieldTermStructure> discountTS, ext::shared_ptr<StochasticProcess1D> diffProcess, PseudoRandom::ursg_type sequenceGen);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|Real DigitalPathPricer::operator()(const Path & path) const;+|?|ql/pricingengines/vanilla/mcdigitalengine.hpp|MCDigitalEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|ext::shared_ptr<typename MCDigitalEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & withAntitheticVariate(bool b);+|?|ql/pricingengines/vanilla/mceuropeanengine.hpp|MCEuropeanEngine::MCEuropeanEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine::MakeMCEuropeanEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess>);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & MakeMCEuropeanEngine::withSteps(Size steps);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & MakeMCEuropeanEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & MakeMCEuropeanEngine::withBrownianBridge(bool b = true);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & MakeMCEuropeanEngine::withSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & MakeMCEuropeanEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & MakeMCEuropeanEngine::withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & MakeMCEuropeanEngine::withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & MakeMCEuropeanEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|EuropeanPathPricer::EuropeanPathPricer(Option::Type type, Real strike, DiscountFactor discount);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|Real EuropeanPathPricer::operator()(const Path & path) const;+|?|ql/pricingengines/vanilla/mceuropeanengine.hpp|MCEuropeanEngine<RNG, S>(const ext::shared_ptr<GeneralizedBlackScholesProcess> & process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|ext::shared_ptr<typename MCEuropeanEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S>(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & withBrownianBridge(bool brownianBridge);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & withAntitheticVariate(bool b);+|?|ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MCEuropeanGJRGARCHEngine::MCEuropeanGJRGARCHEngine<RNG, S>(const ext::shared_ptr<GJRGARCHProcess> &, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine::MakeMCEuropeanGJRGARCHEngine<RNG, S>(ext::shared_ptr<GJRGARCHProcess>);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & MakeMCEuropeanGJRGARCHEngine::withSteps(Size steps);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & MakeMCEuropeanGJRGARCHEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & MakeMCEuropeanGJRGARCHEngine::withSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & MakeMCEuropeanGJRGARCHEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & MakeMCEuropeanGJRGARCHEngine::withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & MakeMCEuropeanGJRGARCHEngine::withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & MakeMCEuropeanGJRGARCHEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|EuropeanGJRGARCHPathPricer::EuropeanGJRGARCHPathPricer(Option::Type type, Real strike, DiscountFactor discount);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|Real EuropeanGJRGARCHPathPricer::operator()(const MultiPath & Multipath) const;+|?|ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MCEuropeanGJRGARCHEngine<RNG, S>(const ext::shared_ptr<GJRGARCHProcess> & process, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|ext::shared_ptr<typename MCEuropeanGJRGARCHEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S>(ext::shared_ptr<GJRGARCHProcess> process);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & withAntitheticVariate(bool b);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|Real operator()(const MultiPath & multiPath) const;+|?|ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MCEuropeanHestonEngine::MCEuropeanHestonEngine<RNG, S, P>(const ext::shared_ptr<P> &, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine::MakeMCEuropeanHestonEngine<RNG, S, P>(ext::shared_ptr<P>);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & MakeMCEuropeanHestonEngine::withSteps(Size steps);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & MakeMCEuropeanHestonEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & MakeMCEuropeanHestonEngine::withSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & MakeMCEuropeanHestonEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & MakeMCEuropeanHestonEngine::withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & MakeMCEuropeanHestonEngine::withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & MakeMCEuropeanHestonEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|EuropeanHestonPathPricer::EuropeanHestonPathPricer(Option::Type type, Real strike, DiscountFactor discount);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|Real EuropeanHestonPathPricer::operator()(const MultiPath & Multipath) const;+|?|ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MCEuropeanHestonEngine<RNG, S, P>(const ext::shared_ptr<P> & process, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|ext::shared_ptr<typename MCEuropeanHestonEngine<RNG, S, P>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P>(ext::shared_ptr<P> process);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & withAntitheticVariate(bool b);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|Real operator()(const MultiPath & multiPath) const;+|?|ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MCHestonHullWhiteEngine::MCHestonHullWhiteEngine<RNG, S>(const ext::shared_ptr<HybridHestonHullWhiteProcess> & process, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine::MakeMCHestonHullWhiteEngine<RNG, S>(ext::shared_ptr<HybridHestonHullWhiteProcess>);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & MakeMCHestonHullWhiteEngine::withSteps(Size steps);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & MakeMCHestonHullWhiteEngine::withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & MakeMCHestonHullWhiteEngine::withAntitheticVariate(bool b = true);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & MakeMCHestonHullWhiteEngine::withControlVariate(bool b = true);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & MakeMCHestonHullWhiteEngine::withSamples(Size samples);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & MakeMCHestonHullWhiteEngine::withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & MakeMCHestonHullWhiteEngine::withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & MakeMCHestonHullWhiteEngine::withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|HestonHullWhitePathPricer::HestonHullWhitePathPricer(Time exerciseTime, ext::shared_ptr<Payoff> payoff, ext::shared_ptr<HybridHestonHullWhiteProcess> process);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|Real HestonHullWhitePathPricer::operator()(const MultiPath & path) const;+|?|ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MCHestonHullWhiteEngine<RNG, S>(const ext::shared_ptr<HybridHestonHullWhiteProcess> & process, Size timeSteps, Size timeStepsPerYear, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|void calculate() const;+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|ext::shared_ptr<typename MCHestonHullWhiteEngine<RNG, S>::path_pricer_type> pathPricer() const;+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|ext::shared_ptr<typename MCHestonHullWhiteEngine<RNG, S>::path_pricer_type> controlPathPricer() const;+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|ext::shared_ptr<PricingEngine> controlPricingEngine() const;+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|ext::shared_ptr<typename MCHestonHullWhiteEngine<RNG, S>::path_generator_type> controlPathGenerator() const;+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S>(ext::shared_ptr<HybridHestonHullWhiteProcess> process);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & withAntitheticVariate(bool b);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & withControlVariate(bool b);+|x|ql/pricingengines/vanilla/mcvanillaengine.hpp|void MCVanillaEngine::calculate() const;+| |ql/pricingengines/vanilla/mcvanillaengine.hpp|MCVanillaEngine<MC, RNG, S, Inst>(ext::shared_ptr<StochasticProcess> process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed);+| |ql/pricingengines/vanilla/mcvanillaengine.hpp|typename MCVanillaEngine<MC, RNG, S, Inst>::result_type controlVariateValue() const;+|?|ql/pricingengines/vanilla/mcvanillaengine.hpp|TimeGrid timeGrid() const;+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|Size QdFpIterationScheme::getNumberOfChebyshevInterpolationNodes() const;+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|Size QdFpIterationScheme::getNumberOfNaiveFixedPointSteps() const;+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|Size QdFpIterationScheme::getNumberOfJacobiNewtonFixedPointSteps() const;+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|ext::shared_ptr<Integrator> QdFpIterationScheme::getFixedPointIntegrator() const;+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|ext::shared_ptr<Integrator> QdFpIterationScheme::getExerciseBoundaryToPriceIntegrator() const;+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|QdFpLegendreScheme::QdFpLegendreScheme(Size l, Size m, Size n, Size p);+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|QdFpLegendreTanhSinhScheme::QdFpLegendreTanhSinhScheme(Size l, Size m, Size n, Real eps);+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|QdFpTanhSinhIterationScheme::QdFpTanhSinhIterationScheme(Size m, Size n, Real eps);+|v|ql/pricingengines/vanilla/qdfpamericanengine.hpp|QdFpAmericanEngine::QdFpAmericanEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> bsProcess, ext::shared_ptr<QdFpIterationScheme> iterationScheme = accurateScheme(), FixedPointEquation fpEquation = Auto);+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|static ext::shared_ptr<QdFpIterationScheme> QdFpAmericanEngine::fastScheme();+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|static ext::shared_ptr<QdFpIterationScheme> QdFpAmericanEngine::accurateScheme();+| |ql/pricingengines/vanilla/qdfpamericanengine.hpp|static ext::shared_ptr<QdFpIterationScheme> QdFpAmericanEngine::highPrecisionScheme();+| |ql/pricingengines/vanilla/qdplusamericanengine.hpp|QdPutCallParityEngine::QdPutCallParityEngine(ext::shared_ptr<GeneralizedBlackScholesProcess> process);+|x|ql/pricingengines/vanilla/qdplusamericanengine.hpp|void QdPutCallParityEngine::calculate() const;+| |ql/pricingengines/vanilla/qdplusamericanengine.hpp|QdPlusAddOnValue::QdPlusAddOnValue(Time T, Real S, Real K, Rate r, Rate q, Volatility vol, Real xmax, ext::shared_ptr<Interpolation> q_z);+| |ql/pricingengines/vanilla/qdplusamericanengine.hpp|Real QdPlusAddOnValue::operator()(Real z) const;+|v|ql/pricingengines/vanilla/qdplusamericanengine.hpp|QdPlusAmericanEngine::QdPlusAmericanEngine(ext::shared_ptr<GeneralizedBlackScholesProcess>, Size interpolationPoints = 8, SolverType solverType = Halley, Real eps = 1e-6, Size maxIter = Null<Size>());+| |ql/pricingengines/vanilla/qdplusamericanengine.hpp|std::pair<Size, Real> QdPlusAmericanEngine::putExerciseBoundaryAtTau(Real S, Real K, Rate r, Rate q, Volatility vol, Time T, Time tau) const;+| |ql/pricingengines/vanilla/qdplusamericanengine.hpp|ext::shared_ptr<ChebyshevInterpolation> QdPlusAmericanEngine::getPutExerciseBoundary(Real S, Real K, Rate r, Rate q, Volatility vol, Time T) const;+| |ql/pricingengines/vanilla/qdplusamericanengine.hpp|static Real QdPlusAmericanEngine::xMax(Real K, Rate r, Rate q);+|v|ql/processes/batesprocess.hpp|BatesProcess::BatesProcess(const Handle<YieldTermStructure> & riskFreeRate, const Handle<YieldTermStructure> & dividendYield, const Handle<Quote> & s0, Real v0, Real kappa, Real theta, Real sigma, Real rho, Real lambda, Real nu, Real delta, HestonProcess::Discretization d = HestonProcess::FullTruncation);+|x|ql/processes/batesprocess.hpp|Real BatesProcess::lambda() const;+|x|ql/processes/batesprocess.hpp|Real BatesProcess::nu() const;+|x|ql/processes/batesprocess.hpp|Real BatesProcess::delta() const;+|v|ql/processes/blackscholesprocess.hpp|GeneralizedBlackScholesProcess::GeneralizedBlackScholesProcess(Handle<Quote> x0, Handle<YieldTermStructure> dividendTS, Handle<YieldTermStructure> riskFreeTS, Handle<BlackVolTermStructure> blackVolTS, const ext::shared_ptr<discretization> & d = ext::shared_ptr<discretization>(new EulerDiscretization), bool forceDiscretization = false);+|v|ql/processes/blackscholesprocess.hpp|GeneralizedBlackScholesProcess::GeneralizedBlackScholesProcess(Handle<Quote> x0, Handle<YieldTermStructure> dividendTS, Handle<YieldTermStructure> riskFreeTS, Handle<BlackVolTermStructure> blackVolTS, Handle<LocalVolTermStructure> localVolTS);+|x|ql/processes/blackscholesprocess.hpp|const Handle<Quote> & GeneralizedBlackScholesProcess::stateVariable() const;+|x|ql/processes/blackscholesprocess.hpp|const Handle<YieldTermStructure> & GeneralizedBlackScholesProcess::dividendYield() const;+|x|ql/processes/blackscholesprocess.hpp|const Handle<YieldTermStructure> & GeneralizedBlackScholesProcess::riskFreeRate() const;+|x|ql/processes/blackscholesprocess.hpp|const Handle<BlackVolTermStructure> & GeneralizedBlackScholesProcess::blackVolatility() const;+|x|ql/processes/blackscholesprocess.hpp|const Handle<LocalVolTermStructure> & GeneralizedBlackScholesProcess::localVolatility() const;+|v|ql/processes/blackscholesprocess.hpp|BlackScholesProcess::BlackScholesProcess(const Handle<Quote> & x0, const Handle<YieldTermStructure> & riskFreeTS, const Handle<BlackVolTermStructure> & blackVolTS, const ext::shared_ptr<discretization> & d = ext::shared_ptr<discretization>(new EulerDiscretization), bool forceDiscretization = false);+|v|ql/processes/blackscholesprocess.hpp|BlackScholesMertonProcess::BlackScholesMertonProcess(const Handle<Quote> & x0, const Handle<YieldTermStructure> & dividendTS, const Handle<YieldTermStructure> & riskFreeTS, const Handle<BlackVolTermStructure> & blackVolTS, const ext::shared_ptr<discretization> & d = ext::shared_ptr<discretization>(new EulerDiscretization), bool forceDiscretization = false);+|v|ql/processes/blackscholesprocess.hpp|BlackProcess::BlackProcess(const Handle<Quote> & x0, const Handle<YieldTermStructure> & riskFreeTS, const Handle<BlackVolTermStructure> & blackVolTS, const ext::shared_ptr<discretization> & d = ext::shared_ptr<discretization>(new EulerDiscretization), bool forceDiscretization = false);+|v|ql/processes/blackscholesprocess.hpp|GarmanKohlagenProcess::GarmanKohlagenProcess(const Handle<Quote> & x0, const Handle<YieldTermStructure> & foreignRiskFreeTS, const Handle<YieldTermStructure> & domesticRiskFreeTS, const Handle<BlackVolTermStructure> & blackVolTS, const ext::shared_ptr<discretization> & d = ext::shared_ptr<discretization>(new EulerDiscretization), bool forceDiscretization = false);+| |ql/processes/coxingersollrossprocess.hpp|CoxIngersollRossProcess::CoxIngersollRossProcess(Real speed, Volatility vol, Real x0 = 0.0, Real level = 0.0);+|x|ql/processes/coxingersollrossprocess.hpp|Real CoxIngersollRossProcess::speed() const;+|x|ql/processes/coxingersollrossprocess.hpp|Real CoxIngersollRossProcess::volatility() const;+|x|ql/processes/coxingersollrossprocess.hpp|Real CoxIngersollRossProcess::level() const;+| |ql/processes/coxingersollrossprocess.hpp|Real x0() const;+| |ql/processes/coxingersollrossprocess.hpp|Real drift(Time, Real x) const;+| |ql/processes/coxingersollrossprocess.hpp|Real diffusion(Time, Real) const;+| |ql/processes/coxingersollrossprocess.hpp|Real expectation(Time, Real x0, Time dt) const;+| |ql/processes/coxingersollrossprocess.hpp|Real stdDeviation(Time t, Real x0, Time dt) const;+| |ql/processes/coxingersollrossprocess.hpp|Real evolve(Time t0, Real x0, Time dt, Real dw) const;+|v|ql/processes/forwardmeasureprocess.hpp|void ForwardMeasureProcess::setForwardMeasureTime(Time);+|x|ql/processes/forwardmeasureprocess.hpp|Time ForwardMeasureProcess::getForwardMeasureTime() const;+|v|ql/processes/forwardmeasureprocess.hpp|void ForwardMeasureProcess1D::setForwardMeasureTime(Time);+|x|ql/processes/forwardmeasureprocess.hpp|Time ForwardMeasureProcess1D::getForwardMeasureTime() const;+|v|ql/processes/g2process.hpp|G2Process::G2Process(Real a, Real sigma, Real b, Real eta, Real rho, const Handle<YieldTermStructure> & termStructure = { });+|x|ql/processes/g2process.hpp|Real G2Process::x0() const;+|x|ql/processes/g2process.hpp|Real G2Process::y0() const;+|x|ql/processes/g2process.hpp|Real G2Process::a() const;+|x|ql/processes/g2process.hpp|Real G2Process::sigma() const;+|x|ql/processes/g2process.hpp|Real G2Process::b() const;+|x|ql/processes/g2process.hpp|Real G2Process::eta() const;+|x|ql/processes/g2process.hpp|Real G2Process::rho() const;+|x|ql/processes/g2process.hpp|const Handle<YieldTermStructure> & G2Process::termStructure() const;+|v|ql/processes/g2process.hpp|Real G2Process::phi(Time t) const;+|v|ql/processes/g2process.hpp|Rate G2Process::shortRate(Time t, Real x, Real y) const;+|v|ql/processes/g2process.hpp|G2ForwardProcess::G2ForwardProcess(Real a, Real sigma, Real b, Real eta, Real rho, const Handle<YieldTermStructure> & termStructure = { });+|x|ql/processes/g2process.hpp|const Handle<YieldTermStructure> & G2ForwardProcess::termStructure() const;+|v|ql/processes/g2process.hpp|Real G2ForwardProcess::phi(Time t) const;+|v|ql/processes/g2process.hpp|Rate G2ForwardProcess::shortRate(Time t, Real x, Real y) const;+|v|ql/processes/geometricbrownianprocess.hpp|GeometricBrownianMotionProcess::GeometricBrownianMotionProcess(Real initialValue, Real mue, Real sigma);+|v|ql/processes/gjrgarchprocess.hpp|GJRGARCHProcess::GJRGARCHProcess(Handle<YieldTermStructure> riskFreeRate, Handle<YieldTermStructure> dividendYield, Handle<Quote> s0, Real v0, Real omega, Real alpha, Real beta, Real gamma, Real lambda, Real daysPerYear = 252.0, Discretization d = FullTruncation);+|x|ql/processes/gjrgarchprocess.hpp|Real GJRGARCHProcess::v0() const;+|x|ql/processes/gjrgarchprocess.hpp|Real GJRGARCHProcess::lambda() const;+|x|ql/processes/gjrgarchprocess.hpp|Real GJRGARCHProcess::omega() const;+|x|ql/processes/gjrgarchprocess.hpp|Real GJRGARCHProcess::alpha() const;+|x|ql/processes/gjrgarchprocess.hpp|Real GJRGARCHProcess::beta() const;+|x|ql/processes/gjrgarchprocess.hpp|Real GJRGARCHProcess::gamma() const;+|x|ql/processes/gjrgarchprocess.hpp|Real GJRGARCHProcess::daysPerYear() const;+|x|ql/processes/gjrgarchprocess.hpp|const Handle<Quote> & GJRGARCHProcess::s0() const;+|x|ql/processes/gjrgarchprocess.hpp|const Handle<YieldTermStructure> & GJRGARCHProcess::dividendYield() const;+|x|ql/processes/gjrgarchprocess.hpp|const Handle<YieldTermStructure> & GJRGARCHProcess::riskFreeRate() const;+| |ql/processes/gsrprocess.hpp|GsrProcess::GsrProcess(Array times, Array vols, Array reversions, Real T = 60.0, const Date & referenceDate = Date(), DayCounter dc = DayCounter());+| |ql/processes/gsrprocess.hpp|Real GsrProcess::sigma(Time t) const;+| |ql/processes/gsrprocess.hpp|Real GsrProcess::reversion(Time t) const;+| |ql/processes/gsrprocess.hpp|Real GsrProcess::y(Time t) const;+| |ql/processes/gsrprocess.hpp|Real GsrProcess::G(Time t, Time T, Real x) const;+| |ql/processes/gsrprocess.hpp|void GsrProcess::flushCache() const;+| |ql/processes/gsrprocess.hpp|void setForwardMeasureTime(Time t);+| |ql/processes/gsrprocesscore.hpp|GsrProcessCore::GsrProcessCore(Array times, Array vols, Array reversions, Real T = 60.0);+| |ql/processes/gsrprocesscore.hpp|Real GsrProcessCore::expectation_x0dep_part(Time w, Real xw, Time dt) const;+| |ql/processes/gsrprocesscore.hpp|Real GsrProcessCore::expectation_rn_part(Time w, Time dt) const;+| |ql/processes/gsrprocesscore.hpp|Real GsrProcessCore::expectation_tf_part(Time w, Time dt) const;+| |ql/processes/gsrprocesscore.hpp|Real GsrProcessCore::variance(Time w, Time dt) const;+| |ql/processes/gsrprocesscore.hpp|Real GsrProcessCore::y(Time t) const;+| |ql/processes/gsrprocesscore.hpp|Real GsrProcessCore::G(Time t, Time w) const;+| |ql/processes/gsrprocesscore.hpp|Real GsrProcessCore::sigma(Time t) const;+| |ql/processes/gsrprocesscore.hpp|Real GsrProcessCore::reversion(Time t) const;+| |ql/processes/gsrprocesscore.hpp|void GsrProcessCore::flushCache() const;+| |ql/processes/gsrprocesscore.hpp|Real sigma(const Time t) const;+| |ql/processes/gsrprocesscore.hpp|Real reversion(const Time t) const;+|v|ql/processes/hestonprocess.hpp|HestonProcess::HestonProcess(Handle<YieldTermStructure> riskFreeRate, Handle<YieldTermStructure> dividendYield, Handle<Quote> s0, Real v0, Real kappa, Real theta, Real sigma, Real rho, Discretization d = QuadraticExponentialMartingale);+|x|ql/processes/hestonprocess.hpp|Real HestonProcess::v0() const;+|x|ql/processes/hestonprocess.hpp|Real HestonProcess::rho() const;+|x|ql/processes/hestonprocess.hpp|Real HestonProcess::kappa() const;+|x|ql/processes/hestonprocess.hpp|Real HestonProcess::theta() const;+|x|ql/processes/hestonprocess.hpp|Real HestonProcess::sigma() const;+|x|ql/processes/hestonprocess.hpp|const Handle<Quote> & HestonProcess::s0() const;+|x|ql/processes/hestonprocess.hpp|const Handle<YieldTermStructure> & HestonProcess::dividendYield() const;+|x|ql/processes/hestonprocess.hpp|const Handle<YieldTermStructure> & HestonProcess::riskFreeRate() const;+|v|ql/processes/hestonprocess.hpp|Real HestonProcess::pdf(Real x, Real v, Time t, Real eps = 1e-3) const;+|v|ql/processes/hestonslvprocess.hpp|HestonSLVProcess::HestonSLVProcess(const ext::shared_ptr<HestonProcess> & hestonProcess, ext::shared_ptr<LocalVolTermStructure> leverageFct, Real mixingFactor = 1.0);+|x|ql/processes/hestonslvprocess.hpp|Real HestonSLVProcess::v0() const;+|x|ql/processes/hestonslvprocess.hpp|Real HestonSLVProcess::rho() const;+|x|ql/processes/hestonslvprocess.hpp|Real HestonSLVProcess::kappa() const;+|x|ql/processes/hestonslvprocess.hpp|Real HestonSLVProcess::theta() const;+|x|ql/processes/hestonslvprocess.hpp|Real HestonSLVProcess::sigma() const;+|x|ql/processes/hestonslvprocess.hpp|Real HestonSLVProcess::mixingFactor() const;+|x|ql/processes/hestonslvprocess.hpp|ext::shared_ptr<LocalVolTermStructure> HestonSLVProcess::leverageFct() const;+|x|ql/processes/hestonslvprocess.hpp|const Handle<Quote> & HestonSLVProcess::s0() const;+|x|ql/processes/hestonslvprocess.hpp|const Handle<YieldTermStructure> & HestonSLVProcess::dividendYield() const;+|x|ql/processes/hestonslvprocess.hpp|const Handle<YieldTermStructure> & HestonSLVProcess::riskFreeRate() const;+|v|ql/processes/hullwhiteprocess.hpp|HullWhiteProcess::HullWhiteProcess(const Handle<YieldTermStructure> & h, Real a, Real sigma);+|x|ql/processes/hullwhiteprocess.hpp|Real HullWhiteProcess::a() const;+|x|ql/processes/hullwhiteprocess.hpp|Real HullWhiteProcess::sigma() const;+|v|ql/processes/hullwhiteprocess.hpp|Real HullWhiteProcess::alpha(Time t) const;+|v|ql/processes/hullwhiteprocess.hpp|HullWhiteForwardProcess::HullWhiteForwardProcess(const Handle<YieldTermStructure> & h, Real a, Real sigma);+|x|ql/processes/hullwhiteprocess.hpp|Real HullWhiteForwardProcess::a() const;+|x|ql/processes/hullwhiteprocess.hpp|Real HullWhiteForwardProcess::sigma() const;+|v|ql/processes/hullwhiteprocess.hpp|Real HullWhiteForwardProcess::alpha(Time t) const;+|v|ql/processes/hullwhiteprocess.hpp|Real HullWhiteForwardProcess::M_T(Real s, Real t, Real T) const;+|v|ql/processes/hullwhiteprocess.hpp|Real HullWhiteForwardProcess::B(Time t, Time T) const;+|v|ql/processes/hybridhestonhullwhiteprocess.hpp|HybridHestonHullWhiteProcess::HybridHestonHullWhiteProcess(const ext::shared_ptr<HestonProcess> & hestonProcess, const ext::shared_ptr<HullWhiteForwardProcess> & hullWhiteProcess, Real corrEquityShortRate, Discretization discretization = BSMHullWhite);+|v|ql/processes/hybridhestonhullwhiteprocess.hpp|DiscountFactor HybridHestonHullWhiteProcess::numeraire(Time t, const Array & x) const;+|x|ql/processes/hybridhestonhullwhiteprocess.hpp|const ext::shared_ptr<HestonProcess> & HybridHestonHullWhiteProcess::hestonProcess() const;+|x|ql/processes/hybridhestonhullwhiteprocess.hpp|const ext::shared_ptr<HullWhiteForwardProcess> & HybridHestonHullWhiteProcess::hullWhiteProcess() const;+|x|ql/processes/hybridhestonhullwhiteprocess.hpp|Real HybridHestonHullWhiteProcess::eta() const;+|x|ql/processes/hybridhestonhullwhiteprocess.hpp|Discretization HybridHestonHullWhiteProcess::discretization() const;+| |ql/processes/jointstochasticprocess.hpp|JointStochasticProcess::JointStochasticProcess(std::vector<ext::shared_ptr<StochasticProcess>> l, Size factors = Null<Size>());+| |ql/processes/jointstochasticprocess.hpp|void JointStochasticProcess::preEvolve(Time t0, const Array & x0, Time dt, const Array & dw) const;+| |ql/processes/jointstochasticprocess.hpp|Array JointStochasticProcess::postEvolve(Time t0, const Array & x0, Time dt, const Array & dw, const Array & y0) const;+| |ql/processes/jointstochasticprocess.hpp|DiscountFactor JointStochasticProcess::numeraire(Time t, const Array & x) const;+| |ql/processes/jointstochasticprocess.hpp|bool JointStochasticProcess::correlationIsStateDependent() const;+| |ql/processes/jointstochasticprocess.hpp|Matrix JointStochasticProcess::crossModelCorrelation(Time t0, const Array & x0) const;+|x|ql/processes/jointstochasticprocess.hpp|const std::vector<ext::shared_ptr<StochasticProcess>> & JointStochasticProcess::constituents() const;+| |ql/processes/jointstochasticprocess.hpp|CachingKey::CachingKey(const Time t0, const Time dt);+| |ql/processes/jointstochasticprocess.hpp|bool CachingKey::operator<(const CachingKey & key) const;+|v|ql/processes/merton76process.hpp|Merton76Process::Merton76Process(const Handle<Quote> & stateVariable, const Handle<YieldTermStructure> & dividendTS, const Handle<YieldTermStructure> & riskFreeTS, const Handle<BlackVolTermStructure> & blackVolTS, Handle<Quote> jumpInt, Handle<Quote> logJMean, Handle<Quote> logJVol, const ext::shared_ptr<discretization> & d = ext::shared_ptr<discretization>(new EulerDiscretization));+|x|ql/processes/merton76process.hpp|const Handle<Quote> & Merton76Process::stateVariable() const;+|x|ql/processes/merton76process.hpp|const Handle<YieldTermStructure> & Merton76Process::dividendYield() const;+|x|ql/processes/merton76process.hpp|const Handle<YieldTermStructure> & Merton76Process::riskFreeRate() const;+|x|ql/processes/merton76process.hpp|const Handle<BlackVolTermStructure> & Merton76Process::blackVolatility() const;+|x|ql/processes/merton76process.hpp|const Handle<Quote> & Merton76Process::jumpIntensity() const;+|x|ql/processes/merton76process.hpp|const Handle<Quote> & Merton76Process::logMeanJump() const;+|x|ql/processes/merton76process.hpp|const Handle<Quote> & Merton76Process::logJumpVolatility() const;+| |ql/processes/mfstateprocess.hpp|MfStateProcess::MfStateProcess(Real reversion, Array times, Array vols);+|v|ql/processes/ornsteinuhlenbeckprocess.hpp|OrnsteinUhlenbeckProcess::OrnsteinUhlenbeckProcess(Real speed, Volatility vol, Real x0 = 0.0, Real level = 0.0);+|x|ql/processes/ornsteinuhlenbeckprocess.hpp|Real OrnsteinUhlenbeckProcess::speed() const;+|x|ql/processes/ornsteinuhlenbeckprocess.hpp|Real OrnsteinUhlenbeckProcess::volatility() const;+|x|ql/processes/ornsteinuhlenbeckprocess.hpp|Real OrnsteinUhlenbeckProcess::level() const;+| |ql/processes/ornsteinuhlenbeckprocess.hpp|Real x0() const;+| |ql/processes/ornsteinuhlenbeckprocess.hpp|Real drift(Time, Real x) const;+| |ql/processes/ornsteinuhlenbeckprocess.hpp|Real diffusion(Time, Real) const;+| |ql/processes/ornsteinuhlenbeckprocess.hpp|Real expectation(Time, Real x0, Time dt) const;+| |ql/processes/ornsteinuhlenbeckprocess.hpp|Real stdDeviation(Time t, Real x0, Time dt) const;+|v|ql/processes/squarerootprocess.hpp|SquareRootProcess::SquareRootProcess(Real b, Real a, Volatility sigma, Real x0 = 0.0, const ext::shared_ptr<discretization> & d = ext::shared_ptr<discretization>(new EulerDiscretization));+|x|ql/processes/squarerootprocess.hpp|Real SquareRootProcess::a() const;+|x|ql/processes/squarerootprocess.hpp|Real SquareRootProcess::b() const;+|x|ql/processes/squarerootprocess.hpp|Real SquareRootProcess::sigma() const;+|?|ql/processes/stochasticprocessarray.hpp|StochasticProcessArray::StochasticProcessArray(const std::vector<ext::shared_ptr<StochasticProcess1D>> &, const Matrix & correlation);+|x|ql/processes/stochasticprocessarray.hpp|const ext::shared_ptr<StochasticProcess1D> & StochasticProcessArray::process(Size i) const;+| |ql/processes/stochasticprocessarray.hpp|Matrix StochasticProcessArray::correlation() const;+|v|ql/quote.hpp|Real Quote::value() const;+|v|ql/quote.hpp|bool Quote::isValid() const;+| |ql/quote.hpp|Handle<Quote> handleFromVariant(const std::variant<Real, Handle<Quote>> & value);+|v|ql/quotes/compositequote.hpp|CompositeQuote::CompositeQuote<BinaryFunction>(Handle<Quote> element1, Handle<Quote> element2, BinaryFunction f);+|x|ql/quotes/compositequote.hpp|Real CompositeQuote::value1() const;+|x|ql/quotes/compositequote.hpp|Real CompositeQuote::value2() const;+|v|ql/quotes/compositequote.hpp|CompositeQuote<BinaryFunction>(Handle<Quote> element1, Handle<Quote> element2, BinaryFunction f);+| |ql/quotes/compositequote.hpp|Real value() const;+| |ql/quotes/compositequote.hpp|bool isValid() const;+| |ql/quotes/compositequote.hpp|void update();+|v|ql/quotes/deltavolquote.hpp|DeltaVolQuote::DeltaVolQuote(Real delta, Handle<Quote> vol, Time maturity, DeltaType deltaType);+|v|ql/quotes/deltavolquote.hpp|DeltaVolQuote::DeltaVolQuote(Handle<Quote> vol, DeltaType deltaType, Time maturity, AtmType atmType);+|x|ql/quotes/deltavolquote.hpp|Real DeltaVolQuote::delta() const;+|x|ql/quotes/deltavolquote.hpp|Time DeltaVolQuote::maturity() const;+|x|ql/quotes/deltavolquote.hpp|AtmType DeltaVolQuote::atmType() const;+|x|ql/quotes/deltavolquote.hpp|DeltaType DeltaVolQuote::deltaType() const;+|v|ql/quotes/derivedquote.hpp|DerivedQuote::DerivedQuote<UnaryFunction>(Handle<Quote> element, UnaryFunction f);+|v|ql/quotes/derivedquote.hpp|DerivedQuote<UnaryFunction>(Handle<Quote> element, UnaryFunction f);+| |ql/quotes/derivedquote.hpp|Real value() const;+| |ql/quotes/derivedquote.hpp|bool isValid() const;+| |ql/quotes/derivedquote.hpp|void update();+|v|ql/quotes/eurodollarfuturesquote.hpp|EurodollarFuturesImpliedStdDevQuote::EurodollarFuturesImpliedStdDevQuote(Handle<Quote> forward, Handle<Quote> callPrice, Handle<Quote> putPrice, Real strike, Real guess = .15, Real accuracy = 1.0e-6, Natural maxIter = 100);+|?|ql/quotes/forwardswapquote.hpp|ForwardSwapQuote::ForwardSwapQuote(ext::shared_ptr<SwapIndex> swapIndex, Handle<Quote> spread, const Period & fwdStart);+| |ql/quotes/forwardswapquote.hpp|const Date & ForwardSwapQuote::valueDate() const;+| |ql/quotes/forwardswapquote.hpp|const Date & ForwardSwapQuote::startDate() const;+| |ql/quotes/forwardswapquote.hpp|const Date & ForwardSwapQuote::fixingDate() const;+|v|ql/quotes/forwardvaluequote.hpp|ForwardValueQuote::ForwardValueQuote(ext::shared_ptr<Index> index, const Date & fixingDate);+|v|ql/quotes/futuresconvadjustmentquote.hpp|FuturesConvAdjustmentQuote::FuturesConvAdjustmentQuote(const ext::shared_ptr<IborIndex> & index, const Date & futuresDate, Handle<Quote> futuresQuote, Handle<Quote> volatility, Handle<Quote> meanReversion);+|v|ql/quotes/futuresconvadjustmentquote.hpp|FuturesConvAdjustmentQuote::FuturesConvAdjustmentQuote(const ext::shared_ptr<IborIndex> & index, const std::string & immCode, Handle<Quote> futuresQuote, Handle<Quote> volatility, Handle<Quote> meanReversion);+|v|ql/quotes/futuresconvadjustmentquote.hpp|Real FuturesConvAdjustmentQuote::futuresValue() const;+|x|ql/quotes/futuresconvadjustmentquote.hpp|Real FuturesConvAdjustmentQuote::volatility() const;+|x|ql/quotes/futuresconvadjustmentquote.hpp|Real FuturesConvAdjustmentQuote::meanReversion() const;+|x|ql/quotes/futuresconvadjustmentquote.hpp|Date FuturesConvAdjustmentQuote::immDate() const;+| |ql/quotes/futuresconvadjustmentquote.hpp|void update();+|v|ql/quotes/impliedstddevquote.hpp|ImpliedStdDevQuote::ImpliedStdDevQuote(Option::Type optionType, Handle<Quote> forward, Handle<Quote> price, Real strike, Real guess, Real accuracy = 1.0e-6, Natural maxIter = 100);+|v|ql/quotes/lastfixingquote.hpp|LastFixingQuote::LastFixingQuote(ext::shared_ptr<Index> index);+|x|ql/quotes/lastfixingquote.hpp|const ext::shared_ptr<Index> & LastFixingQuote::index() const;+|x|ql/quotes/lastfixingquote.hpp|Date LastFixingQuote::referenceDate() const;+|v|ql/quotes/multicompositequote.hpp|MultiCompositeQuote::MultiCompositeQuote<ArrayFunction>(std::vector<Handle<Quote>> elements, ArrayFunction f);+|x|ql/quotes/multicompositequote.hpp|Real MultiCompositeQuote::inputValue(Size i) const;+|v|ql/quotes/multicompositequote.hpp|MultiCompositeQuote<ArrayFunction>(std::vector<Handle<Quote>> elements, ArrayFunction f);+| |ql/quotes/multicompositequote.hpp|Real value() const;+| |ql/quotes/multicompositequote.hpp|bool isValid() const;+| |ql/quotes/multicompositequote.hpp|void update();+|v|ql/quotes/simplequote.hpp|SimpleQuote::SimpleQuote(Real value = Null<Real>());+|v|ql/quotes/simplequote.hpp|Real SimpleQuote::setValue(Real value = Null<Real>());+|x|ql/quotes/simplequote.hpp|void SimpleQuote::reset();+| |ql/quotes/simplequote.hpp|RelinkableHandle<Quote> makeQuoteHandle(Real value);+|v|ql/quotes/simplequote.hpp|SimpleQuote(Real value);+| |ql/quotes/simplequote.hpp|Real value() const;+| |ql/quotes/simplequote.hpp|bool isValid() const;+| |ql/quotes/simplequote.hpp|Real setValue(Real value);+|v|ql/rebatedexercise.hpp|RebatedExercise::RebatedExercise(const Exercise & exercise, Real rebate = 0.0, Natural rebateSettlementDays = 0, Calendar rebatePaymentCalendar = NullCalendar(), BusinessDayConvention rebatePaymentConvention = Following);+|x|ql/rebatedexercise.hpp|RebatedExercise::RebatedExercise(const Exercise & exercise, const std::vector<Real> & rebates, Natural rebateSettlementDays = 0, Calendar rebatePaymentCalendar = NullCalendar(), BusinessDayConvention rebatePaymentConvention = Following);+|x|ql/rebatedexercise.hpp|Real RebatedExercise::rebate(Size index) const;+|x|ql/rebatedexercise.hpp|Date RebatedExercise::rebatePaymentDate(Size index) const;+|x|ql/rebatedexercise.hpp|const std::vector<Real> & RebatedExercise::rebates() const;+|x|ql/settings.hpp|Settings::Settings();+| |ql/settings.hpp|DateProxy::DateProxy();+| |ql/settings.hpp|DateProxy & DateProxy::operator=(const Date &);+|x|ql/settings.hpp|std::ostream & Settings::operator<<(std::ostream &, const DateProxy &);+|?|ql/settings.hpp|DateProxy & Settings::evaluationDate();+|?|ql/settings.hpp|const DateProxy & Settings::evaluationDate() const;+|x|ql/settings.hpp|void Settings::anchorEvaluationDate();+|x|ql/settings.hpp|void Settings::resetEvaluationDate();+|?|ql/settings.hpp|bool & Settings::includeReferenceDateEvents();+|?|ql/settings.hpp|bool Settings::includeReferenceDateEvents() const;+|?|ql/settings.hpp|std::optional<bool> & Settings::includeTodaysCashFlows();+|?|ql/settings.hpp|std::optional<bool> Settings::includeTodaysCashFlows() const;+|x|ql/settings.hpp|bool & Settings::enforcesTodaysHistoricFixings();+|x|ql/settings.hpp|bool Settings::enforcesTodaysHistoricFixings() const;+|v|ql/settings.hpp|SavedSettings::SavedSettings();+| |ql/settings.hpp|Settings::DateProxy & operator=(const Date & d);+| |ql/settings.hpp|Settings::DateProxy & evaluationDate();+|x|ql/settings.hpp|const Settings::DateProxy & evaluationDate() const;+| |ql/stochasticprocess.hpp|Array discretization::drift(const StochasticProcess &, Time t0, const Array & x0, Time dt) const;+| |ql/stochasticprocess.hpp|Matrix discretization::diffusion(const StochasticProcess &, Time t0, const Array & x0, Time dt) const;+| |ql/stochasticprocess.hpp|Matrix discretization::covariance(const StochasticProcess &, Time t0, const Array & x0, Time dt) const;+| |ql/stochasticprocess.hpp|Size StochasticProcess::size() const;+|v|ql/stochasticprocess.hpp|Size StochasticProcess::factors() const;+|v|ql/stochasticprocess.hpp|Array StochasticProcess::initialValues() const;+|v|ql/stochasticprocess.hpp|Array StochasticProcess::drift(Time t, const Array & x) const;+|v|ql/stochasticprocess.hpp|Matrix StochasticProcess::diffusion(Time t, const Array & x) const;+|v|ql/stochasticprocess.hpp|Array StochasticProcess::expectation(Time t0, const Array & x0, Time dt) const;+|v|ql/stochasticprocess.hpp|Matrix StochasticProcess::stdDeviation(Time t0, const Array & x0, Time dt) const;+|v|ql/stochasticprocess.hpp|Matrix StochasticProcess::covariance(Time t0, const Array & x0, Time dt) const;+|v|ql/stochasticprocess.hpp|Array StochasticProcess::evolve(Time t0, const Array & x0, Time dt, const Array & dw) const;+|v|ql/stochasticprocess.hpp|Array StochasticProcess::apply(const Array & x0, const Array & dx) const;+| |ql/stochasticprocess.hpp|Time StochasticProcess::time(const Date &) const;+| |ql/stochasticprocess.hpp|Real discretization::drift(const StochasticProcess1D &, Time t0, Real x0, Time dt) const;+| |ql/stochasticprocess.hpp|Real discretization::diffusion(const StochasticProcess1D &, Time t0, Real x0, Time dt) const;+| |ql/stochasticprocess.hpp|Real discretization::variance(const StochasticProcess1D &, Time t0, Real x0, Time dt) const;+| |ql/stochasticprocess.hpp|Real StochasticProcess1D::x0() const;+| |ql/stochasticprocess.hpp|Real StochasticProcess1D::drift(Time t, Real x) const;+| |ql/stochasticprocess.hpp|Real StochasticProcess1D::diffusion(Time t, Real x) const;+| |ql/stochasticprocess.hpp|Real StochasticProcess1D::expectation(Time t0, Real x0, Time dt) const;+| |ql/stochasticprocess.hpp|Real StochasticProcess1D::stdDeviation(Time t0, Real x0, Time dt) const;+| |ql/stochasticprocess.hpp|Real StochasticProcess1D::variance(Time t0, Real x0, Time dt) const;+| |ql/stochasticprocess.hpp|Real StochasticProcess1D::evolve(Time t0, Real x0, Time dt, Real dw) const;+| |ql/stochasticprocess.hpp|Real StochasticProcess1D::apply(Real x0, Real dx) const;+| |ql/termstructure.hpp|TermStructure::TermStructure(DayCounter dc = DayCounter());+| |ql/termstructure.hpp|TermStructure::TermStructure(const Date & referenceDate, Calendar calendar = Calendar(), DayCounter dc = DayCounter());+| |ql/termstructure.hpp|TermStructure::TermStructure(Natural settlementDays, Calendar, DayCounter dc = DayCounter());+|x|ql/termstructure.hpp|DayCounter TermStructure::dayCounter() const;+|v|ql/termstructure.hpp|Time TermStructure::timeFromReference(const Date & date) const;+|v|ql/termstructure.hpp|Date TermStructure::maxDate() const;+|v|ql/termstructure.hpp|Time TermStructure::maxTime() const;+|v|ql/termstructure.hpp|const Date & TermStructure::referenceDate() const;+|x|ql/termstructure.hpp|Calendar TermStructure::calendar() const;+| |ql/termstructure.hpp|Natural TermStructure::settlementDays() const;+|v|ql/termstructure.hpp|Time timeFromReference(const Date & d) const;+| |ql/termstructures/bootstraperror.hpp|BootstrapError::BootstrapError<Curve>(const Curve * curve, ext::shared_ptr<typename Traits::helper> instrument, Size segment);+| |ql/termstructures/bootstraperror.hpp|Real BootstrapError::operator()(Rate guess) const;+|x|ql/termstructures/bootstraperror.hpp|const ext::shared_ptr<typename Traits::helper> & BootstrapError::helper();+| |ql/termstructures/bootstraperror.hpp|BootstrapError<Curve>(const Curve * curve, ext::shared_ptr<typename Traits::helper> helper, Size segment);+| |ql/termstructures/bootstraperror.hpp|Real operator()(Real guess) const;+| |ql/termstructures/bootstraphelper.hpp|std::ostream & operator<<(std::ostream & out, Pillar::Choice type);+| |ql/termstructures/bootstraphelper.hpp|BootstrapHelper::BootstrapHelper<TS>(const std::variant<Spread, Handle<Quote>> & quote);+| |ql/termstructures/bootstraphelper.hpp|const Handle<Quote> & BootstrapHelper::quote() const;+| |ql/termstructures/bootstraphelper.hpp|Real BootstrapHelper::impliedQuote() const;+| |ql/termstructures/bootstraphelper.hpp|Real BootstrapHelper::quoteError() const;+| |ql/termstructures/bootstraphelper.hpp|void BootstrapHelper::setTermStructure(TS *);+| |ql/termstructures/bootstraphelper.hpp|Date BootstrapHelper::earliestDate() const;+| |ql/termstructures/bootstraphelper.hpp|Date BootstrapHelper::maturityDate() const;+| |ql/termstructures/bootstraphelper.hpp|Date BootstrapHelper::latestRelevantDate() const;+| |ql/termstructures/bootstraphelper.hpp|Date BootstrapHelper::pillarDate() const;+| |ql/termstructures/bootstraphelper.hpp|Date BootstrapHelper::latestDate() const;+| |ql/termstructures/bootstraphelper.hpp|void BootstrapHelper::accept(AcyclicVisitor &);+| |ql/termstructures/bootstraphelper.hpp|RelativeDateBootstrapHelper::RelativeDateBootstrapHelper<TS>(const std::variant<Spread, Handle<Quote>> & quote, bool updateDates = true);+| |ql/termstructures/bootstraphelper.hpp|BootstrapHelper<TS>(const std::variant<Spread, Handle<Quote>> & quote);+| |ql/termstructures/bootstraphelper.hpp|void setTermStructure(TS * t);+| |ql/termstructures/bootstraphelper.hpp|void update();+| |ql/termstructures/bootstraphelper.hpp|void accept(AcyclicVisitor & v);+| |ql/termstructures/bootstraphelper.hpp|RelativeDateBootstrapHelper<TS>(const std::variant<Spread, Handle<Quote>> & quote, bool updateDates);+| |ql/termstructures/bootstraphelper.hpp|std::ostream & operator<<(std::ostream & out, Pillar::Choice t);+| |ql/termstructures/credit/defaultdensitystructure.hpp|DefaultDensityStructure::DefaultDensityStructure(const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/credit/defaultdensitystructure.hpp|DefaultDensityStructure::DefaultDensityStructure(const Date & referenceDate, const Calendar & cal = Calendar(), const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/credit/defaultdensitystructure.hpp|DefaultDensityStructure::DefaultDensityStructure(Natural settlementDays, const Calendar & cal, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/credit/defaultprobabilityhelpers.hpp|CdsHelper::CdsHelper(const std::variant<Rate, Handle<Quote>> & quote, const Period & tenor, Integer settlementDays, Calendar calendar, Frequency frequency, BusinessDayConvention paymentConvention, DateGeneration::Rule rule, DayCounter dayCounter, Real recoveryRate, const Handle<YieldTermStructure> & discountCurve, bool settlesAccrual = true, bool paysAtDefaultTime = true, const Date & startDate = Date(), DayCounter lastPeriodDayCounter = DayCounter(), bool rebatesAccrual = true, CreditDefaultSwap::PricingModel model = CreditDefaultSwap::Midpoint, const Date & tradeDate = Date());+| |ql/termstructures/credit/defaultprobabilityhelpers.hpp|void CdsHelper::setTermStructure(DefaultProbabilityTermStructure *);+| |ql/termstructures/credit/defaultprobabilityhelpers.hpp|ext::shared_ptr<CreditDefaultSwap> CdsHelper::swap() const;+| |ql/termstructures/credit/defaultprobabilityhelpers.hpp|void CdsHelper::update();+|v|ql/termstructures/credit/defaultprobabilityhelpers.hpp|SpreadCdsHelper::SpreadCdsHelper(const std::variant<Rate, Handle<Quote>> & runningSpread, const Period & tenor, Integer settlementDays, const Calendar & calendar, Frequency frequency, BusinessDayConvention paymentConvention, DateGeneration::Rule rule, const DayCounter & dayCounter, Real recoveryRate, const Handle<YieldTermStructure> & discountCurve, bool settlesAccrual = true, bool paysAtDefaultTime = true, const Date & startDate = Date(), const DayCounter & lastPeriodDayCounter = DayCounter(), bool rebatesAccrual = true, CreditDefaultSwap::PricingModel model = CreditDefaultSwap::Midpoint, const Date & tradeDate = Date());+|v|ql/termstructures/credit/defaultprobabilityhelpers.hpp|Real SpreadCdsHelper::impliedQuote() const;+|v|ql/termstructures/credit/defaultprobabilityhelpers.hpp|UpfrontCdsHelper::UpfrontCdsHelper(const std::variant<Rate, Handle<Quote>> & upfront, Rate runningSpread, const Period & tenor, Integer settlementDays, const Calendar & calendar, Frequency frequency, BusinessDayConvention paymentConvention, DateGeneration::Rule rule, const DayCounter & dayCounter, Real recoveryRate, const Handle<YieldTermStructure> & discountCurve, Natural upfrontSettlementDays = 3, bool settlesAccrual = true, bool paysAtDefaultTime = true, const Date & startDate = Date(), const DayCounter & lastPeriodDayCounter = DayCounter(), bool rebatesAccrual = true, CreditDefaultSwap::PricingModel model = CreditDefaultSwap::Midpoint, const Date & tradeDate = Date());+|v|ql/termstructures/credit/defaultprobabilityhelpers.hpp|Real UpfrontCdsHelper::impliedQuote() const;+|v|ql/termstructures/credit/flathazardrate.hpp|FlatHazardRate::FlatHazardRate(const Date & referenceDate, Handle<Quote> hazardRate, const DayCounter &);+|x|ql/termstructures/credit/flathazardrate.hpp|FlatHazardRate::FlatHazardRate(const Date & referenceDate, Rate hazardRate, const DayCounter &);+|v|ql/termstructures/credit/flathazardrate.hpp|FlatHazardRate::FlatHazardRate(Natural settlementDays, const Calendar & calendar, Handle<Quote> hazardRate, const DayCounter &);+|x|ql/termstructures/credit/flathazardrate.hpp|FlatHazardRate::FlatHazardRate(Natural settlementDays, const Calendar & calendar, Rate hazardRate, const DayCounter &);+| |ql/termstructures/credit/flathazardrate.hpp|Probability survivalProbabilityImpl(Time t) const;+| |ql/termstructures/credit/hazardratestructure.hpp|HazardRateStructure::HazardRateStructure(const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/credit/hazardratestructure.hpp|HazardRateStructure::HazardRateStructure(const Date & referenceDate, const Calendar & cal = Calendar(), const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/credit/hazardratestructure.hpp|HazardRateStructure::HazardRateStructure(Natural settlementDays, const Calendar & cal, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/credit/hazardratestructure.hpp|Real defaultDensityImpl(Time t) const;+|v|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve::InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const Calendar & calendar = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve::InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve::InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const Interpolator & interpolator);+| |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|const std::vector<Time> & InterpolatedDefaultDensityCurve::times() const;+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|const std::vector<Date> & InterpolatedDefaultDensityCurve::dates() const;+| |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|const std::vector<Real> & InterpolatedDefaultDensityCurve::data() const;+| |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|const std::vector<Real> & InterpolatedDefaultDensityCurve::defaultDensities() const;+| |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedDefaultDensityCurve::nodes() const;+| |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|Date maxDate() const;+| |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|Real defaultDensityImpl(Time t) const;+| |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|Probability survivalProbabilityImpl(Time t) const;+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|InterpolatedDefaultDensityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Real> & densities, const DayCounter & dayCounter, const T & interpolator);+| |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|void initialize(const DayCounter & dayCounter);+|v|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve::InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve::InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve::InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Interpolator & interpolator);+| |ql/termstructures/credit/interpolatedhazardratecurve.hpp|const std::vector<Time> & InterpolatedHazardRateCurve::times() const;+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|const std::vector<Date> & InterpolatedHazardRateCurve::dates() const;+| |ql/termstructures/credit/interpolatedhazardratecurve.hpp|const std::vector<Real> & InterpolatedHazardRateCurve::data() const;+| |ql/termstructures/credit/interpolatedhazardratecurve.hpp|const std::vector<Rate> & InterpolatedHazardRateCurve::hazardRates() const;+| |ql/termstructures/credit/interpolatedhazardratecurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedHazardRateCurve::nodes() const;+| |ql/termstructures/credit/interpolatedhazardratecurve.hpp|Date maxDate() const;+| |ql/termstructures/credit/interpolatedhazardratecurve.hpp|Real hazardRateImpl(Time t) const;+| |ql/termstructures/credit/interpolatedhazardratecurve.hpp|Probability survivalProbabilityImpl(Time t) const;+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/credit/interpolatedhazardratecurve.hpp|InterpolatedHazardRateCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & hazardRates, const DayCounter & dayCounter, const T & interpolator);+| |ql/termstructures/credit/interpolatedhazardratecurve.hpp|void initialize();+|v|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve::InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve::InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve::InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Interpolator & interpolator);+| |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|const std::vector<Time> & InterpolatedSurvivalProbabilityCurve::times() const;+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|const std::vector<Date> & InterpolatedSurvivalProbabilityCurve::dates() const;+| |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|const std::vector<Real> & InterpolatedSurvivalProbabilityCurve::data() const;+| |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|const std::vector<Probability> & InterpolatedSurvivalProbabilityCurve::survivalProbabilities() const;+| |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedSurvivalProbabilityCurve::nodes() const;+| |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|Date maxDate() const;+| |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|Probability survivalProbabilityImpl(Time t) const;+| |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|Real defaultDensityImpl(Time t) const;+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|InterpolatedSurvivalProbabilityCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Probability> & probabilities, const DayCounter & dayCounter, const T & interpolator);+| |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|void initialize();+|v|ql/termstructures/credit/piecewisedefaultcurve.hpp|PiecewiseDefaultCurve::PiecewiseDefaultCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & i = { }, bootstrap_type bootstrap = { });+|x|ql/termstructures/credit/piecewisedefaultcurve.hpp|PiecewiseDefaultCurve::PiecewiseDefaultCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, const std::vector<ext::shared_ptr<typename Traits::helper>> & instruments, const DayCounter & dayCounter, const Interpolator & i, const bootstrap_type & bootstrap = bootstrap_type());+|x|ql/termstructures/credit/piecewisedefaultcurve.hpp|PiecewiseDefaultCurve::PiecewiseDefaultCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, bootstrap_type bootstrap);+|v|ql/termstructures/credit/piecewisedefaultcurve.hpp|PiecewiseDefaultCurve::PiecewiseDefaultCurve<Traits, Interpolator, Bootstrap>(Natural settlementDays, const Calendar & calendar, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & i = { }, bootstrap_type bootstrap = { });+|x|ql/termstructures/credit/piecewisedefaultcurve.hpp|PiecewiseDefaultCurve::PiecewiseDefaultCurve<Traits, Interpolator, Bootstrap>(Natural settlementDays, const Calendar & calendar, const std::vector<ext::shared_ptr<typename Traits::helper>> & instruments, const DayCounter & dayCounter, const Interpolator & i, const bootstrap_type & bootstrap = bootstrap_type());+|x|ql/termstructures/credit/piecewisedefaultcurve.hpp|PiecewiseDefaultCurve::PiecewiseDefaultCurve<Traits, Interpolator, Bootstrap>(Natural settlementDays, const Calendar & calendar, const std::vector<ext::shared_ptr<typename Traits::helper>> & instruments, const DayCounter & dayCounter, const bootstrap_type & bootstrap);+|?|ql/termstructures/credit/piecewisedefaultcurve.hpp|PiecewiseDefaultCurve::PiecewiseDefaultCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, const std::vector<ext::shared_ptr<typename Traits::helper>> & instruments, const DayCounter & dayCounter, const ext::shared_ptr<OneFactorAffineModel> & model, const Interpolator & i = { }, const bootstrap_type & bootstrap = { });+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|Date PiecewiseDefaultCurve::maxDate() const;+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|const std::vector<Time> & PiecewiseDefaultCurve::times() const;+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|const std::vector<Date> & PiecewiseDefaultCurve::dates() const;+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|const std::vector<Real> & PiecewiseDefaultCurve::data() const;+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|std::vector<std::pair<Date, Real>> PiecewiseDefaultCurve::nodes() const;+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|void update();+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|Probability survivalProbabilityImpl(Time t) const;+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|Real defaultDensityImpl(Time t) const;+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|Real hazardRateImpl(Time t) const;+| |ql/termstructures/credit/piecewisedefaultcurve.hpp|void performCalculations() const;+| |ql/termstructures/credit/probabilitytraits.hpp|static Date SurvivalProbability::initialDate(const DefaultProbabilityTermStructure * c);+| |ql/termstructures/credit/probabilitytraits.hpp|static Real SurvivalProbability::initialValue(const DefaultProbabilityTermStructure *);+| |ql/termstructures/credit/probabilitytraits.hpp|static void SurvivalProbability::updateGuess(std::vector<Real> & data, Probability p, Size i);+| |ql/termstructures/credit/probabilitytraits.hpp|static Size SurvivalProbability::maxIterations();+| |ql/termstructures/credit/probabilitytraits.hpp|static Date HazardRate::initialDate(const DefaultProbabilityTermStructure * c);+| |ql/termstructures/credit/probabilitytraits.hpp|static Real HazardRate::initialValue(const DefaultProbabilityTermStructure *);+| |ql/termstructures/credit/probabilitytraits.hpp|static void HazardRate::updateGuess(std::vector<Real> & data, Real rate, Size i);+| |ql/termstructures/credit/probabilitytraits.hpp|static Size HazardRate::maxIterations();+| |ql/termstructures/credit/probabilitytraits.hpp|static Date DefaultDensity::initialDate(const DefaultProbabilityTermStructure * c);+| |ql/termstructures/credit/probabilitytraits.hpp|static Real DefaultDensity::initialValue(const DefaultProbabilityTermStructure *);+| |ql/termstructures/credit/probabilitytraits.hpp|static void DefaultDensity::updateGuess(std::vector<Real> & data, Real density, Size i);+| |ql/termstructures/credit/probabilitytraits.hpp|static Size DefaultDensity::maxIterations();+| |ql/termstructures/credit/survivalprobabilitystructure.hpp|SurvivalProbabilityStructure::SurvivalProbabilityStructure(const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/credit/survivalprobabilitystructure.hpp|SurvivalProbabilityStructure::SurvivalProbabilityStructure(const Date & referenceDate, const Calendar & cal = Calendar(), const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/credit/survivalprobabilitystructure.hpp|SurvivalProbabilityStructure::SurvivalProbabilityStructure(Natural settlementDays, const Calendar & cal, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/defaulttermstructure.hpp|DefaultProbabilityTermStructure::DefaultProbabilityTermStructure(const DayCounter & dc = DayCounter(), std::vector<Handle<Quote>> jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/defaulttermstructure.hpp|DefaultProbabilityTermStructure::DefaultProbabilityTermStructure(const Date & referenceDate, const Calendar & cal = Calendar(), const DayCounter & dc = DayCounter(), std::vector<Handle<Quote>> jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/defaulttermstructure.hpp|DefaultProbabilityTermStructure::DefaultProbabilityTermStructure(Natural settlementDays, const Calendar & cal, const DayCounter & dc = DayCounter(), std::vector<Handle<Quote>> jumps = { }, const std::vector<Date> & jumpDates = { });+|v|ql/termstructures/defaulttermstructure.hpp|Probability DefaultProbabilityTermStructure::survivalProbability(const Date & d, bool extrapolate = false) const;+|v|ql/termstructures/defaulttermstructure.hpp|Probability DefaultProbabilityTermStructure::survivalProbability(Time t, bool extrapolate = false) const;+|v|ql/termstructures/defaulttermstructure.hpp|Probability DefaultProbabilityTermStructure::defaultProbability(const Date & d, bool extrapolate = false) const;+|v|ql/termstructures/defaulttermstructure.hpp|Probability DefaultProbabilityTermStructure::defaultProbability(Time t, bool extrapolate = false) const;+|v|ql/termstructures/defaulttermstructure.hpp|Probability DefaultProbabilityTermStructure::defaultProbability(const Date &, const Date &, bool extrapolate = false) const;+|v|ql/termstructures/defaulttermstructure.hpp|Probability DefaultProbabilityTermStructure::defaultProbability(Time, Time, bool extrapo = false) const;+|v|ql/termstructures/defaulttermstructure.hpp|Real DefaultProbabilityTermStructure::defaultDensity(const Date & d, bool extrapolate = false) const;+|v|ql/termstructures/defaulttermstructure.hpp|Real DefaultProbabilityTermStructure::defaultDensity(Time t, bool extrapolate = false) const;+|v|ql/termstructures/defaulttermstructure.hpp|Rate DefaultProbabilityTermStructure::hazardRate(const Date & d, bool extrapolate = false) const;+|v|ql/termstructures/defaulttermstructure.hpp|Rate DefaultProbabilityTermStructure::hazardRate(Time t, bool extrapolate = false) const;+| |ql/termstructures/defaulttermstructure.hpp|const std::vector<Date> & DefaultProbabilityTermStructure::jumpDates() const;+| |ql/termstructures/defaulttermstructure.hpp|const std::vector<Time> & DefaultProbabilityTermStructure::jumpTimes() const;+| |ql/termstructures/defaulttermstructure.hpp|Probability survivalProbability(const Date & d, bool extrapolate) const;+| |ql/termstructures/defaulttermstructure.hpp|Probability defaultProbability(const Date & d, bool extrapolate) const;+| |ql/termstructures/defaulttermstructure.hpp|Probability defaultProbability(Time t, bool extrapolate) const;+| |ql/termstructures/defaulttermstructure.hpp|Real defaultDensity(const Date & d, bool extrapolate) const;+| |ql/termstructures/defaulttermstructure.hpp|Real defaultDensity(Time t, bool extrapolate) const;+| |ql/termstructures/defaulttermstructure.hpp|Rate hazardRate(const Date & d, bool extrapolate) const;+| |ql/termstructures/defaulttermstructure.hpp|Rate hazardRateImpl(Time t) const;+| |ql/termstructures/defaulttermstructure.hpp|Rate hazardRate(Time t, bool extrapolate) const;+| |ql/termstructures/defaulttermstructure.hpp|void update();+| |ql/termstructures/globalbootstrap.hpp|void MultiCurveBootstrapContributor::setParentBootstrapper(const ext::shared_ptr<MultiCurveBootstrap> & b) const;+| |ql/termstructures/globalbootstrap.hpp|Array MultiCurveBootstrapContributor::setupCostFunction() const;+| |ql/termstructures/globalbootstrap.hpp|void MultiCurveBootstrapContributor::setCostFunctionArgument(const Array & v) const;+| |ql/termstructures/globalbootstrap.hpp|Array MultiCurveBootstrapContributor::evaluateCostFunction() const;+| |ql/termstructures/globalbootstrap.hpp|void MultiCurveBootstrapContributor::setToValid() const;+| |ql/termstructures/globalbootstrap.hpp|MultiCurveBootstrap::MultiCurveBootstrap(Real accuracy);+| |ql/termstructures/globalbootstrap.hpp|MultiCurveBootstrap::MultiCurveBootstrap(ext::shared_ptr<OptimizationMethod> optimizer = nullptr, ext::shared_ptr<EndCriteria> endCriteria = nullptr);+| |ql/termstructures/globalbootstrap.hpp|void MultiCurveBootstrap::add(const MultiCurveBootstrapContributor * c);+| |ql/termstructures/globalbootstrap.hpp|void MultiCurveBootstrap::addObserver(Observer * o);+| |ql/termstructures/globalbootstrap.hpp|void MultiCurveBootstrap::runMultiCurveBootstrap();+| |ql/termstructures/globalbootstrap.hpp|void MultiCurveBootstrap::setOtherContributorsToValid() const;+| |ql/termstructures/globalbootstrap.hpp|void MultiCurveBootstrap::finalizeCalculation();+| |ql/termstructures/globalbootstrap.hpp|Array AdditionalBootstrapVariables::initialize(bool validData);+| |ql/termstructures/globalbootstrap.hpp|void AdditionalBootstrapVariables::update(const Array & x);+|u|ql/termstructures/globalbootstrap.hpp|GlobalBootstrap::GlobalBootstrap<Curve>(Real accuracy = Null<Real>(), ext::shared_ptr<OptimizationMethod> optimizer = nullptr, ext::shared_ptr<EndCriteria> endCriteria = nullptr, std::vector<Real> instrumentWeights = { }, InitialGuessFn initialGuessFn = nullptr);+|x|ql/termstructures/globalbootstrap.hpp|GlobalBootstrap::GlobalBootstrap<Curve>(std::vector<ext::shared_ptr<typename Traits::helper>> additionalHelpers, std::function<std::vector<Date> ()> additionalDates, AdditionalPenalties additionalPenalties, Real accuracy = Null<Real>(), ext::shared_ptr<OptimizationMethod> optimizer = nullptr, ext::shared_ptr<EndCriteria> endCriteria = nullptr, ext::shared_ptr<AdditionalBootstrapVariables> additionalVariables = nullptr, std::vector<Real> instrumentWeights = { }, InitialGuessFn initialGuessFn = nullptr);+|u|ql/termstructures/globalbootstrap.hpp|GlobalBootstrap::GlobalBootstrap<Curve>(std::vector<ext::shared_ptr<typename Traits::helper>> additionalHelpers, std::function<std::vector<Date> ()> additionalDates, std::function<Array ()> additionalPenalties, Real accuracy = Null<Real>(), ext::shared_ptr<OptimizationMethod> optimizer = nullptr, ext::shared_ptr<EndCriteria> endCriteria = nullptr, ext::shared_ptr<AdditionalBootstrapVariables> additionalVariables = nullptr, std::vector<Real> instrumentWeights = { }, InitialGuessFn initialGuessFn = nullptr);+|x|ql/termstructures/globalbootstrap.hpp|void GlobalBootstrap::setup(Curve * ts);+|x|ql/termstructures/globalbootstrap.hpp|void GlobalBootstrap::calculate() const;+|u|ql/termstructures/globalbootstrap.hpp|GlobalBootstrap<Curve>(Real accuracy, ext::shared_ptr<OptimizationMethod> optimizer, ext::shared_ptr<EndCriteria> endCriteria, std::vector<Real> instrumentWeights, InitialGuessFn initialGuessFn);+| |ql/termstructures/globalbootstrap.hpp|GlobalBootstrap<Curve>(std::vector<ext::shared_ptr<typename Traits::helper>> additionalHelpers, std::function<std::vector<Date> ()> additionalDates, AdditionalPenalties additionalPenalties, Real accuracy, ext::shared_ptr<OptimizationMethod> optimizer, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<AdditionalBootstrapVariables> additionalVariables, std::vector<Real> instrumentWeights, InitialGuessFn initialGuessFn);+|u|ql/termstructures/globalbootstrap.hpp|GlobalBootstrap<Curve>(std::vector<ext::shared_ptr<typename Traits::helper>> additionalHelpers, std::function<std::vector<Date> ()> additionalDates, AdditionalPenalties additionalPenalties, Real accuracy, ext::shared_ptr<OptimizationMethod> optimizer, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<AdditionalBootstrapVariables> additionalVariables, std::vector<Real> instrumentWeights, InitialGuessFn initialGuessFn);+| |ql/termstructures/globalbootstrap.hpp|void initialize() const;+| |ql/termstructures/globalbootstrap.hpp|void setCostFunctionArgument(const Array & x) const;+| |ql/termstructures/globalbootstrapvars.hpp|SimpleQuoteVariables::SimpleQuoteVariables(std::vector<ext::shared_ptr<SimpleQuote>> quotes, std::vector<Real> initialGuesses = { }, std::vector<Real> lowerBounds = { });+|v|ql/termstructures/inflation/inflationhelpers.hpp|ZeroCouponInflationSwapHelper::ZeroCouponInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & maturity, Calendar calendar, BusinessDayConvention paymentConvention, const DayCounter & dayCounter, const ext::shared_ptr<ZeroInflationIndex> & zii, CPI::InterpolationType observationInterpolation, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());+|v|ql/termstructures/inflation/inflationhelpers.hpp|ZeroCouponInflationSwapHelper::ZeroCouponInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & startDate, const Date & endDate, Calendar calendar, BusinessDayConvention paymentConvention, DayCounter dayCounter, const ext::shared_ptr<ZeroInflationIndex> & zii, CPI::InterpolationType observationInterpolation, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());+|x|ql/termstructures/inflation/inflationhelpers.hpp|void ZeroCouponInflationSwapHelper::setTermStructure(ZeroInflationTermStructure *);+|x|ql/termstructures/inflation/inflationhelpers.hpp|Real ZeroCouponInflationSwapHelper::impliedQuote() const;+|v|ql/termstructures/inflation/inflationhelpers.hpp|ext::shared_ptr<ZeroCouponInflationSwap> ZeroCouponInflationSwapHelper::swap() const;+|v|ql/termstructures/inflation/inflationhelpers.hpp|YearOnYearInflationSwapHelper::YearOnYearInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & maturity, Calendar calendar, BusinessDayConvention paymentConvention, DayCounter dayCounter, const ext::shared_ptr<YoYInflationIndex> & yii, CPI::InterpolationType interpolation, Handle<YieldTermStructure> nominalTermStructure, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());+|v|ql/termstructures/inflation/inflationhelpers.hpp|YearOnYearInflationSwapHelper::YearOnYearInflationSwapHelper(const Handle<Quote> & quote, const Period & swapObsLag, const Date & startDate, const Date & endDate, Calendar calendar, BusinessDayConvention paymentConvention, DayCounter dayCounter, const ext::shared_ptr<YoYInflationIndex> & yii, CPI::InterpolationType interpolation, Handle<YieldTermStructure> nominalTermStructure, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());+|x|ql/termstructures/inflation/inflationhelpers.hpp|void YearOnYearInflationSwapHelper::setTermStructure(YoYInflationTermStructure *);+|x|ql/termstructures/inflation/inflationhelpers.hpp|Real YearOnYearInflationSwapHelper::impliedQuote() const;+|v|ql/termstructures/inflation/inflationhelpers.hpp|ext::shared_ptr<YearOnYearInflationSwap> YearOnYearInflationSwapHelper::swap() const;+| |ql/termstructures/inflation/inflationtraits.hpp|static Date ZeroInflationTraits::initialDate(const ZeroInflationTermStructure * t);+| |ql/termstructures/inflation/inflationtraits.hpp|static Rate ZeroInflationTraits::initialValue(const ZeroInflationTermStructure *);+| |ql/termstructures/inflation/inflationtraits.hpp|static void ZeroInflationTraits::updateGuess(std::vector<Rate> & data, Rate level, Size i);+| |ql/termstructures/inflation/inflationtraits.hpp|static Size ZeroInflationTraits::maxIterations();+| |ql/termstructures/inflation/inflationtraits.hpp|static Date YoYInflationTraits::initialDate(const YoYInflationTermStructure * t);+| |ql/termstructures/inflation/inflationtraits.hpp|static Rate YoYInflationTraits::initialValue(const YoYInflationTermStructure * t);+| |ql/termstructures/inflation/inflationtraits.hpp|static void YoYInflationTraits::updateGuess(std::vector<Rate> & data, Rate level, Size i);+| |ql/termstructures/inflation/inflationtraits.hpp|static Size YoYInflationTraits::maxIterations();+|v|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|InterpolatedYoYInflationCurve::InterpolatedYoYInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { }, const Interpolator & interpolator = Interpolator());+|x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|const std::vector<Date> & InterpolatedYoYInflationCurve::dates() const;+|x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|const std::vector<Time> & InterpolatedYoYInflationCurve::times() const;+|x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|const std::vector<Real> & InterpolatedYoYInflationCurve::data() const;+|x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|const std::vector<Rate> & InterpolatedYoYInflationCurve::rates() const;+|x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|std::vector<std::pair<Date, Rate>> InterpolatedYoYInflationCurve::nodes() const;+|x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|InterpolatedYoYInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality, const Interpolator & interpolator);+|x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|InterpolatedYoYInflationCurve<Interpolator>(const Date & referenceDate, Date baseDate, Rate baseYoYRate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality, const Interpolator & interpolator);+| |ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|Date maxDate() const;+|x|ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|Rate yoyRateImpl(Time t) const;+|v|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|InterpolatedZeroInflationCurve::InterpolatedZeroInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { }, const Interpolator & interpolator = Interpolator());+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Date> & InterpolatedZeroInflationCurve::dates() const;+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Time> & InterpolatedZeroInflationCurve::times() const;+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Real> & InterpolatedZeroInflationCurve::data() const;+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Rate> & InterpolatedZeroInflationCurve::rates() const;+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|std::vector<std::pair<Date, Rate>> InterpolatedZeroInflationCurve::nodes() const;+|v|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|InterpolatedZeroInflationCurve<Interpolator>(const Date & referenceDate, std::vector<Date> dates, const std::vector<Rate> & rates, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality, const Interpolator & interpolator);+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|InterpolatedZeroInflationCurve<Interpolator>(const Date & referenceDate, Date baseDate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality, const Interpolator & interpolator);+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|Date maxDate() const;+|x|ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|Rate zeroRateImpl(Time t) const;+|u|ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|PiecewiseYoYInflationCurve::PiecewiseYoYInflationCurve<Interpolator, Bootstrap, Traits>(const Date & referenceDate, Date baseDate, Rate baseYoYRate, Frequency frequency, const DayCounter & dayCounter, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const ext::shared_ptr<Seasonality> & seasonality = { }, Real accuracy = 1.0e-12, const Interpolator & i = Interpolator());+| |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|Date maxDate() const;+| |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|const std::vector<Time> & times() const;+| |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|const std::vector<Date> & dates() const;+| |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|const std::vector<Real> & data() const;+| |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|std::vector<std::pair<Date, Real>> nodes() const;+| |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|void performCalculations() const;+| |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|Rate yoyRateImpl(Time t) const;+| |ql/termstructures/inflation/piecewiseyoyinflationcurve.hpp|void update();+|u|ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|PiecewiseZeroInflationCurve::PiecewiseZeroInflationCurve<Interpolator, Bootstrap, Traits>(const Date & referenceDate, Date baseDate, Frequency frequency, const DayCounter & dayCounter, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const ext::shared_ptr<Seasonality> & seasonality = { }, Real accuracy = 1.0e-14, const Interpolator & i = Interpolator());+|?|ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|PiecewiseZeroInflationCurve::PiecewiseZeroInflationCurve<Interpolator, Bootstrap, Traits>(const Date & referenceDate, BaseDateFunc baseDateFunc, Frequency frequency, const DayCounter & dayCounter, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const ext::shared_ptr<Seasonality> & seasonality = { }, Real accuracy = 1.0e-14, const Interpolator & i = Interpolator());+| |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|Date baseDate() const;+| |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|Date maxDate() const;+| |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|const std::vector<Time> & times() const;+| |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|const std::vector<Date> & dates() const;+| |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|const std::vector<Real> & data() const;+| |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|std::vector<std::pair<Date, Real>> nodes() const;+| |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|void performCalculations() const;+| |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|Rate zeroRateImpl(Time t) const;+| |ql/termstructures/inflation/piecewisezeroinflationcurve.hpp|void update();+|x|ql/termstructures/inflation/seasonality.hpp|Rate Seasonality::correctZeroRate(const Date & d, Rate r, const InflationTermStructure & iTS) const;+|x|ql/termstructures/inflation/seasonality.hpp|Rate Seasonality::correctYoYRate(const Date & d, Rate r, const InflationTermStructure & iTS) const;+|x|ql/termstructures/inflation/seasonality.hpp|bool Seasonality::isConsistent(const InflationTermStructure & iTS) const;+|x|ql/termstructures/inflation/seasonality.hpp|MultiplicativePriceSeasonality::MultiplicativePriceSeasonality();+|v|ql/termstructures/inflation/seasonality.hpp|MultiplicativePriceSeasonality::MultiplicativePriceSeasonality(const Date & seasonalityBaseDate, Frequency frequency, const std::vector<Rate> & seasonalityFactors);+|x|ql/termstructures/inflation/seasonality.hpp|void MultiplicativePriceSeasonality::set(const Date & seasonalityBaseDate, Frequency frequency, const std::vector<Rate> & seasonalityFactors);+|x|ql/termstructures/inflation/seasonality.hpp|Date MultiplicativePriceSeasonality::seasonalityBaseDate() const;+|x|ql/termstructures/inflation/seasonality.hpp|Frequency MultiplicativePriceSeasonality::frequency() const;+|x|ql/termstructures/inflation/seasonality.hpp|std::vector<Rate> MultiplicativePriceSeasonality::seasonalityFactors() const;+| |ql/termstructures/inflation/seasonality.hpp|Rate MultiplicativePriceSeasonality::seasonalityFactor(const Date & d) const;+|v|ql/termstructures/inflation/seasonality.hpp|KerkhofSeasonality::KerkhofSeasonality(const Date & seasonalityBaseDate, const std::vector<Rate> & seasonalityFactors);+| |ql/termstructures/inflationtermstructure.hpp|InflationTermStructure::InflationTermStructure(Date baseDate, Frequency frequency, const DayCounter & dayCounter = DayCounter(), ext::shared_ptr<Seasonality> seasonality = { }, Rate baseRate = Null<Rate>());+| |ql/termstructures/inflationtermstructure.hpp|InflationTermStructure::InflationTermStructure(const Date & referenceDate, Date baseDate, Frequency frequency, const DayCounter & dayCounter = DayCounter(), ext::shared_ptr<Seasonality> seasonality = { }, Rate baseRate = Null<Rate>());+| |ql/termstructures/inflationtermstructure.hpp|InflationTermStructure::InflationTermStructure(Natural settlementDays, const Calendar & calendar, Date baseDate, Frequency frequency, const DayCounter & dayCounter = DayCounter(), ext::shared_ptr<Seasonality> seasonality = { }, Rate baseRate = Null<Rate>());+|x|ql/termstructures/inflationtermstructure.hpp|Frequency InflationTermStructure::frequency() const;+|x|ql/termstructures/inflationtermstructure.hpp|Rate InflationTermStructure::baseRate() const;+|x|ql/termstructures/inflationtermstructure.hpp|Date InflationTermStructure::baseDate() const;+| |ql/termstructures/inflationtermstructure.hpp|void InflationTermStructure::setSeasonality(const ext::shared_ptr<Seasonality> & seasonality);+|x|ql/termstructures/inflationtermstructure.hpp|ext::shared_ptr<Seasonality> InflationTermStructure::seasonality() const;+| |ql/termstructures/inflationtermstructure.hpp|bool InflationTermStructure::hasSeasonality() const;+| |ql/termstructures/inflationtermstructure.hpp|ZeroInflationTermStructure::ZeroInflationTermStructure(Date baseDate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { });+| |ql/termstructures/inflationtermstructure.hpp|ZeroInflationTermStructure::ZeroInflationTermStructure(const Date & referenceDate, Date baseDate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { });+| |ql/termstructures/inflationtermstructure.hpp|ZeroInflationTermStructure::ZeroInflationTermStructure(Natural settlementDays, const Calendar & calendar, Date baseDate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { });+|v|ql/termstructures/inflationtermstructure.hpp|Rate ZeroInflationTermStructure::zeroRate(const Date & d, bool extrapolate = false) const;+|u|ql/termstructures/inflationtermstructure.hpp|Rate ZeroInflationTermStructure::zeroRate(const Date & d, const Period & instObsLag, bool forceLinearInterpolation = false, bool extrapolate = false) const;+|v|ql/termstructures/inflationtermstructure.hpp|Rate ZeroInflationTermStructure::zeroRate(Time t, bool extrapolate = false) const;+| |ql/termstructures/inflationtermstructure.hpp|YoYInflationTermStructure::YoYInflationTermStructure(Date baseDate, Rate baseYoYRate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { });+| |ql/termstructures/inflationtermstructure.hpp|YoYInflationTermStructure::YoYInflationTermStructure(const Date & referenceDate, Date baseDate, Rate baseYoYRate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { });+| |ql/termstructures/inflationtermstructure.hpp|YoYInflationTermStructure::YoYInflationTermStructure(Natural settlementDays, const Calendar & calendar, Date baseDate, Rate baseYoYRate, Frequency frequency, const DayCounter & dayCounter, const ext::shared_ptr<Seasonality> & seasonality = { });+| |ql/termstructures/inflationtermstructure.hpp|Rate YoYInflationTermStructure::yoyRate(const Date & d, bool extrapolate = false) const;+| |ql/termstructures/inflationtermstructure.hpp|Rate YoYInflationTermStructure::yoyRate(const Date & d, const Period & instObsLag, bool forceLinearInterpolation = false, bool extrapolate = false) const;+| |ql/termstructures/inflationtermstructure.hpp|Rate YoYInflationTermStructure::yoyRate(Time t, bool extrapolate = false) const;+| |ql/termstructures/inflationtermstructure.hpp|std::pair<Date, Date> inflationPeriod(const Date &, Frequency);+| |ql/termstructures/inflationtermstructure.hpp|Time inflationYearFraction(Frequency, bool indexIsInterpolated, const DayCounter &, const Date &, const Date &);+|v|ql/termstructures/iterativebootstrap.hpp|IterativeBootstrap::IterativeBootstrap<Curve>(Real accuracy = Null<Real>(), Real minValue = Null<Real>(), Real maxValue = Null<Real>(), Size maxAttempts = 1, Real maxFactor = 2.0, Real minFactor = 2.0, bool dontThrow = false, Size dontThrowSteps = 10, Size maxEvaluations = MAX_FUNCTION_EVALUATIONS);+|x|ql/termstructures/iterativebootstrap.hpp|void IterativeBootstrap::setup(Curve * ts);+|x|ql/termstructures/iterativebootstrap.hpp|void IterativeBootstrap::calculate() const;+|v|ql/termstructures/iterativebootstrap.hpp|IterativeBootstrap<Curve>(Real accuracy, Real minValue, Real maxValue, Size maxAttempts, Real maxFactor, Real minFactor, bool dontThrow, Size dontThrowSteps, Size maxEvaluations);+| |ql/termstructures/iterativebootstrap.hpp|void initialize() const;+| |ql/termstructures/localbootstrap.hpp|PenaltyFunction::PenaltyFunction<Curve>(Curve * curve, Size initialIndex, helper_iterator rateHelpersStart, helper_iterator rateHelpersEnd);+|u|ql/termstructures/localbootstrap.hpp|LocalBootstrap::LocalBootstrap<Curve>(Size localisation = 2, bool forcePositive = true, Real accuracy = Null<Real>());+|x|ql/termstructures/localbootstrap.hpp|void LocalBootstrap::setup(Curve * ts);+|x|ql/termstructures/localbootstrap.hpp|void LocalBootstrap::calculate() const;+|u|ql/termstructures/localbootstrap.hpp|LocalBootstrap<Curve>(Size localisation, bool forcePositive, Real accuracy);+| |ql/termstructures/localbootstrap.hpp|Real value(const Array & x) const;+| |ql/termstructures/localbootstrap.hpp|Array values(const Array & x) const;+| |ql/termstructures/multicurve.hpp|const MultiCurveBootstrapContributor * MultiCurveBootstrapProvider::multiCurveBootstrapContributor() const;+|v|ql/termstructures/multicurve.hpp|MultiCurve::MultiCurve(Real accuracy);+|x|ql/termstructures/multicurve.hpp|MultiCurve::MultiCurve(const ext::shared_ptr<OptimizationMethod> & optimizer = nullptr, const ext::shared_ptr<EndCriteria> & endCriteria = nullptr);+|v|ql/termstructures/multicurve.hpp|Handle<YieldTermStructure> MultiCurve::addBootstrappedCurve(RelinkableHandle<YieldTermStructure> & internalHandle, ext::shared_ptr<YieldTermStructure> && curve);+|v|ql/termstructures/multicurve.hpp|Handle<YieldTermStructure> MultiCurve::addNonBootstrappedCurve(RelinkableHandle<YieldTermStructure> & internalHandle, ext::shared_ptr<YieldTermStructure> && curve);+| |ql/termstructures/volatility/abcd.hpp|AbcdFunction::AbcdFunction(Real a = - 0.06, Real b = 0.17, Real c = 0.54, Real d = 0.17);+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::maximumVolatility() const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::shortTermVolatility() const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::longTermVolatility() const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::covariance(Time t, Time T, Time S) const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::covariance(Time t1, Time t2, Time T, Time S) const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::volatility(Time tMin, Time tMax, Time T) const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::variance(Time tMin, Time tMax, Time T) const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::instantaneousVolatility(Time t, Time T) const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::instantaneousVariance(Time t, Time T) const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::instantaneousCovariance(Time u, Time T, Time S) const;+| |ql/termstructures/volatility/abcd.hpp|Real AbcdFunction::primitive(Time t, Time T, Time S) const;+| |ql/termstructures/volatility/abcd.hpp|AbcdSquared::AbcdSquared(Real a, Real b, Real c, Real d, Time T, Time S);+| |ql/termstructures/volatility/abcd.hpp|Real AbcdSquared::operator()(Time t) const;+| |ql/termstructures/volatility/abcd.hpp|Real abcdBlackVolatility(Time u, Real a, Real b, Real c, Real d);+| |ql/termstructures/volatility/abcdcalibration.hpp|AbcdError::AbcdError(AbcdCalibration * abcd);+| |ql/termstructures/volatility/abcdcalibration.hpp|AbcdParametersTransformation::AbcdParametersTransformation();+| |ql/termstructures/volatility/abcdcalibration.hpp|Array AbcdParametersTransformation::direct(const Array & x) const;+| |ql/termstructures/volatility/abcdcalibration.hpp|Array AbcdParametersTransformation::inverse(const Array & x) const;+| |ql/termstructures/volatility/abcdcalibration.hpp|AbcdCalibration::AbcdCalibration();+| |ql/termstructures/volatility/abcdcalibration.hpp|AbcdCalibration::AbcdCalibration(const std::vector<Real> & t, const std::vector<Real> & blackVols, Real aGuess = - 0.06, Real bGuess = 0.17, Real cGuess = 0.54, Real dGuess = 0.17, bool aIsFixed = false, bool bIsFixed = false, bool cIsFixed = false, bool dIsFixed = false, bool vegaWeighted = false, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>());+| |ql/termstructures/volatility/abcdcalibration.hpp|std::vector<Real> AbcdCalibration::k(const std::vector<Real> & t, const std::vector<Real> & blackVols) const;+| |ql/termstructures/volatility/abcdcalibration.hpp|void AbcdCalibration::compute();+| |ql/termstructures/volatility/abcdcalibration.hpp|Real AbcdCalibration::value(Real x) const;+| |ql/termstructures/volatility/abcdcalibration.hpp|Real AbcdCalibration::error() const;+| |ql/termstructures/volatility/abcdcalibration.hpp|Real AbcdCalibration::maxError() const;+| |ql/termstructures/volatility/abcdcalibration.hpp|Array AbcdCalibration::errors() const;+| |ql/termstructures/volatility/abcdcalibration.hpp|EndCriteria::Type AbcdCalibration::endCriteria() const;+| |ql/termstructures/volatility/abcdcalibration.hpp|Real AbcdCalibration::a() const;+| |ql/termstructures/volatility/abcdcalibration.hpp|Real AbcdCalibration::b() const;+| |ql/termstructures/volatility/abcdcalibration.hpp|Real AbcdCalibration::c() const;+| |ql/termstructures/volatility/abcdcalibration.hpp|Real AbcdCalibration::d() const;+| |ql/termstructures/volatility/atmadjustedsmilesection.hpp|AtmAdjustedSmileSection::AtmAdjustedSmileSection(const ext::shared_ptr<SmileSection> & source, Real atm = Null<Real>(), bool recenterSmile = false);+|v|ql/termstructures/volatility/atmsmilesection.hpp|AtmSmileSection::AtmSmileSection(const ext::shared_ptr<SmileSection> & source, Real atm = Null<Real>());+| |ql/termstructures/volatility/capfloor/capfloortermvolatilitystructure.hpp|CapFloorTermVolatilityStructure::CapFloorTermVolatilityStructure(BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/capfloor/capfloortermvolatilitystructure.hpp|CapFloorTermVolatilityStructure::CapFloorTermVolatilityStructure(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/capfloor/capfloortermvolatilitystructure.hpp|CapFloorTermVolatilityStructure::CapFloorTermVolatilityStructure(Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+|v|ql/termstructures/volatility/capfloor/capfloortermvolatilitystructure.hpp|Volatility CapFloorTermVolatilityStructure::volatility(const Period & length, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolatilitystructure.hpp|Volatility CapFloorTermVolatilityStructure::volatility(const Date & end, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolatilitystructure.hpp|Volatility CapFloorTermVolatilityStructure::volatility(Time t, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolatilitystructure.hpp|Volatility volatility(const Period & optT, Rate strike, bool extrap) const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolatilitystructure.hpp|Volatility volatility(const Date & d, Rate strike, bool extrap) const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolatilitystructure.hpp|Volatility volatility(Time t, Rate strike, bool extrap) const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(Natural settlementDays, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Handle<Quote>> & vols, const DayCounter & dc = Actual365Fixed());+|v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(const Date & settlementDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Handle<Quote>> & vols, const DayCounter & dc = Actual365Fixed());+|v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(const Date & settlementDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Volatility> & vols, const DayCounter & dc = Actual365Fixed());+|v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(Natural settlementDays, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Volatility> & vols, const DayCounter & dc = Actual365Fixed());+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(CapFloorTermVolCurve &&);+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve::CapFloorTermVolCurve(const CapFloorTermVolCurve &);+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve & CapFloorTermVolCurve::operator=(CapFloorTermVolCurve &&);+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|CapFloorTermVolCurve & CapFloorTermVolCurve::operator=(const CapFloorTermVolCurve &);+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|const std::vector<Period> & CapFloorTermVolCurve::optionTenors() const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|const std::vector<Date> & CapFloorTermVolCurve::optionDates() const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|const std::vector<Time> & CapFloorTermVolCurve::optionTimes() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|Volatility volatilityImpl(Time t, Rate) const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|CapFloorTermVolSurface::CapFloorTermVolSurface(Natural settlementDays, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Rate> & strikes, const std::vector<std::vector<Handle<Quote>>> &, const DayCounter & dc = Actual365Fixed());+|v|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|CapFloorTermVolSurface::CapFloorTermVolSurface(const Date & settlementDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Rate> & strikes, const std::vector<std::vector<Handle<Quote>>> &, const DayCounter & dc = Actual365Fixed());+|v|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|CapFloorTermVolSurface::CapFloorTermVolSurface(const Date & settlementDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Rate> & strikes, const Matrix & volatilities, const DayCounter & dc = Actual365Fixed());+|v|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|CapFloorTermVolSurface::CapFloorTermVolSurface(Natural settlementDays, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Rate> & strikes, const Matrix & volatilities, const DayCounter & dc = Actual365Fixed());+|x|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Period> & CapFloorTermVolSurface::optionTenors() const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Date> & CapFloorTermVolSurface::optionDates() const;+|v|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Time> & CapFloorTermVolSurface::optionTimes() const;+|x|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Rate> & CapFloorTermVolSurface::strikes() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|Volatility volatilityImpl(Time t, Rate strike) const;+|v|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|ConstantCapFloorTermVolatility::ConstantCapFloorTermVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Handle<Quote> volatility, const DayCounter & dc);+|v|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|ConstantCapFloorTermVolatility::ConstantCapFloorTermVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Handle<Quote> volatility, const DayCounter & dc);+|x|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|ConstantCapFloorTermVolatility::ConstantCapFloorTermVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc);+|x|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|ConstantCapFloorTermVolatility::ConstantCapFloorTermVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc);+| |ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/capfloor/constantcapfloortermvol.hpp|Real maxStrike() const;+|v|ql/termstructures/volatility/equityfx/andreasenhugelocalvoladapter.hpp|AndreasenHugeLocalVolAdapter::AndreasenHugeLocalVolAdapter(ext::shared_ptr<AndreasenHugeVolatilityInterpl> localVol);+|v|ql/termstructures/volatility/equityfx/andreasenhugevolatilityadapter.hpp|AndreasenHugeVolatilityAdapter::AndreasenHugeVolatilityAdapter(ext::shared_ptr<AndreasenHugeVolatilityInterpl> volInterpl, Real eps = 1e-6);+|v|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|AndreasenHugeVolatilityInterpl::AndreasenHugeVolatilityInterpl(const CalibrationSet & calibrationSet, Handle<Quote> spot, Handle<YieldTermStructure> rTS, Handle<YieldTermStructure> qTS, InterpolationType interpolationType = CubicSpline, CalibrationType calibrationType = Call, Size nGridPoints = 500, Real minStrike = Null<Real>(), Real maxStrike = Null<Real>(), ext::shared_ptr<OptimizationMethod> optimizationMethod = ext::make_shared<LevenbergMarquardt>(), const EndCriteria & endCriteria = EndCriteria(500, 100, 1e-12, 1e-10, 1e-10));+|x|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|Date AndreasenHugeVolatilityInterpl::maxDate() const;+|x|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|Real AndreasenHugeVolatilityInterpl::minStrike() const;+|x|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|Real AndreasenHugeVolatilityInterpl::maxStrike() const;+|v|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|Real AndreasenHugeVolatilityInterpl::fwd(Time t) const;+|x|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|const Handle<YieldTermStructure> & AndreasenHugeVolatilityInterpl::riskFreeRate() const;+|v|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|std::tuple<Real, Real, Real> AndreasenHugeVolatilityInterpl::calibrationError() const;+|v|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|Real AndreasenHugeVolatilityInterpl::optionPrice(Time t, Real strike, Option::Type optionType) const;+|v|ql/termstructures/volatility/equityfx/andreasenhugevolatilityinterpl.hpp|Volatility AndreasenHugeVolatilityInterpl::localVol(Time t, Real strike) const;+|x|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol::BlackConstantVol(const Date & referenceDate, const Calendar &, Volatility volatility, const DayCounter & dayCounter);+|v|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol::BlackConstantVol(const Date & referenceDate, const Calendar &, Handle<Quote> volatility, const DayCounter & dayCounter);+|x|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol::BlackConstantVol(Natural settlementDays, const Calendar &, Volatility volatility, const DayCounter & dayCounter);+|v|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol::BlackConstantVol(Natural settlementDays, const Calendar &, Handle<Quote> volatility, const DayCounter & dayCounter);+|x|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol(const Date & referenceDate, const Calendar & cal, Volatility volatility, const DayCounter & dc);+|v|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol(const Date & referenceDate, const Calendar & cal, Handle<Quote> volatility, const DayCounter & dc);+|x|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol(Natural settlementDays, const Calendar & cal, Volatility volatility, const DayCounter & dc);+|v|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|BlackConstantVol(Natural settlementDays, const Calendar & cal, Handle<Quote> volatility, const DayCounter & dc);+| |ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/equityfx/blackconstantvol.hpp|void accept(AcyclicVisitor & v);+| |ql/termstructures/volatility/equityfx/blackconstantvol.hpp|Volatility blackVolImpl(Time, Real) const;+|?|ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|BlackVarianceCurve::BlackVarianceCurve(const Date & referenceDate, const std::vector<Date> & dates, const std::vector<Volatility> & blackVolCurve, DayCounter dayCounter, bool forceMonotoneVariance = true, BlackVolTimeExtrapolation::Type timeExtrapolationType = BlackVolTimeExtrapolation::FlatVolatility);+| |ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/equityfx/blackvariancecurve.hpp|void accept(AcyclicVisitor & v);+|v|ql/termstructures/volatility/equityfx/blackvariancesurface.hpp|BlackVarianceSurface::BlackVarianceSurface(const Date & referenceDate, const Calendar & cal, const std::vector<Date> & dates, std::vector<Real> strikes, const Matrix & blackVolMatrix, DayCounter dayCounter, Extrapolation lowerExtrapolation = InterpolatorDefaultExtrapolation, Extrapolation upperExtrapolation = InterpolatorDefaultExtrapolation);+| |ql/termstructures/volatility/equityfx/blackvariancesurface.hpp|void accept(AcyclicVisitor & v);+|v|ql/termstructures/volatility/equityfx/blackvolsurfacedelta.hpp|BlackVolatilitySurfaceDelta::BlackVolatilitySurfaceDelta(Date referenceDate, const std::vector<Date> & dates, const std::vector<Real> & putDeltas, const std::vector<Real> & callDeltas, bool hasAtm, const Matrix & blackVolMatrix, const DayCounter & dayCounter, const Calendar & cal, const Handle<Quote> & spot, const Handle<YieldTermStructure> & domesticTS, const Handle<YieldTermStructure> & foreignTS, DeltaVolQuote::DeltaType deltaType = DeltaVolQuote::DeltaType::Spot, DeltaVolQuote::AtmType atmType = DeltaVolQuote::AtmType::AtmDeltaNeutral, std::optional<DeltaVolQuote::DeltaType> atmDeltaType = std::nullopt, SmileInterpolationMethod interpolationMethod = SmileInterpolationMethod::Linear, bool flatStrikeExtrapolation = false, BlackVolTimeExtrapolation::Type timeExtrapolationType = BlackVolTimeExtrapolation::FlatVolatility, const Period & switchTenor = 0 * Days, DeltaVolQuote::DeltaType longTermDeltaType = DeltaVolQuote::DeltaType::Fwd, DeltaVolQuote::AtmType longTermAtmType = DeltaVolQuote::AtmType::AtmDeltaNeutral, std::optional<DeltaVolQuote::DeltaType> longTermAtmDeltaType = std::nullopt);+|x|ql/termstructures/volatility/equityfx/blackvolsurfacedelta.hpp|const std::vector<Date> & BlackVolatilitySurfaceDelta::dates() const;+|v|ql/termstructures/volatility/equityfx/blackvolsurfacedelta.hpp|ext::shared_ptr<SmileSection> BlackVolatilitySurfaceDelta::blackVolSmile(Time t) const;+|v|ql/termstructures/volatility/equityfx/blackvolsurfacedelta.hpp|ext::shared_ptr<SmileSection> BlackVolatilitySurfaceDelta::blackVolSmile(const Date & d) const;+| |ql/termstructures/volatility/equityfx/blackvolsurfacedelta.hpp|void accept(AcyclicVisitor & v);+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|BlackVolTermStructure::BlackVolTermStructure(BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|BlackVolTermStructure::BlackVolTermStructure(const Date & referenceDate, const Calendar & cal = Calendar(), BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|BlackVolTermStructure::BlackVolTermStructure(Natural settlementDays, const Calendar &, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Volatility BlackVolTermStructure::blackVol(const Date & maturity, Real strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Volatility BlackVolTermStructure::blackVol(Time maturity, Real strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Real BlackVolTermStructure::blackVariance(const Date & maturity, Real strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Real BlackVolTermStructure::blackVariance(Time maturity, Real strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Volatility BlackVolTermStructure::blackForwardVol(const Date & date1, const Date & date2, Real strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Volatility BlackVolTermStructure::blackForwardVol(Time time1, Time time2, Real strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Real BlackVolTermStructure::blackForwardVariance(const Date & date1, const Date & date2, Real strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Real BlackVolTermStructure::blackForwardVariance(Time time1, Time time2, Real strike, bool extrapolate = false) const;+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Real BlackVolTermStructure::atmLevel(Time t) const;+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|ext::shared_ptr<SmileSection> BlackVolTermStructure::smileSection(const Date & maturity, bool extrapolate = false) const;+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|ext::shared_ptr<SmileSection> BlackVolTermStructure::smileSection(Time maturity, bool extrapolate = false) const;+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|void BlackVolTermStructure::accept(AcyclicVisitor &);+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|BlackVolatilityTermStructure::BlackVolatilityTermStructure(BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|BlackVolatilityTermStructure::BlackVolatilityTermStructure(const Date & referenceDate, const Calendar & cal = Calendar(), BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|BlackVolatilityTermStructure::BlackVolatilityTermStructure(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|BlackVarianceTermStructure::BlackVarianceTermStructure(BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|BlackVarianceTermStructure::BlackVarianceTermStructure(const Date & referenceDate, const Calendar & cal = Calendar(), BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|BlackVarianceTermStructure::BlackVarianceTermStructure(Natural settlementDays, const Calendar &, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Volatility blackVol(const Date & d, Real strike, bool extrapolate) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Volatility blackVol(Time t, Real strike, bool extrapolate) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Real blackVariance(const Date & d, Real strike, bool extrapolate) const;+|v|ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Real blackVariance(Time t, Real strike, bool extrapolate) const;+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|ext::shared_ptr<SmileSection> smileSection(const Date & d, bool extrapolate) const;+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|ext::shared_ptr<SmileSection> smileSection(Time t, bool extrapolate) const;+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|void accept(AcyclicVisitor & v);+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Real blackVarianceImpl(Time t, Real strike) const;+| |ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp|Volatility blackVolImpl(Time t, Real strike) const;+| |ql/termstructures/volatility/equityfx/blackvoltimeextrapolation.hpp|static Real BlackVolTimeExtrapolation::extrapolatedVariance(Type type, Time t, Real strike, const std::vector<Time> & times, const std::function<Real (Time, Real)> & varianceSurface);+| |ql/termstructures/volatility/equityfx/blackvoltimeextrapolation.hpp|static Real BlackVolTimeExtrapolation::extrapolatedVariance(Type type, Time t, const std::vector<Time> & times, const std::function<Real (Time)> & varianceCurve);+|v|ql/termstructures/volatility/equityfx/fixedlocalvolsurface.hpp|FixedLocalVolSurface::FixedLocalVolSurface(const Date & referenceDate, const std::vector<Date> & dates, const std::vector<Real> & strikes, ext::shared_ptr<Matrix> localVolMatrix, const DayCounter & dayCounter, Extrapolation lowerExtrapolation = ConstantExtrapolation, Extrapolation upperExtrapolation = ConstantExtrapolation);+|x|ql/termstructures/volatility/equityfx/fixedlocalvolsurface.hpp|FixedLocalVolSurface::FixedLocalVolSurface(const Date & referenceDate, const std::vector<Time> & times, const std::vector<Real> & strikes, ext::shared_ptr<Matrix> localVolMatrix, const DayCounter & dayCounter, Extrapolation lowerExtrapolation = ConstantExtrapolation, Extrapolation upperExtrapolation = ConstantExtrapolation);+|x|ql/termstructures/volatility/equityfx/fixedlocalvolsurface.hpp|FixedLocalVolSurface::FixedLocalVolSurface(const Date & referenceDate, const std::vector<Time> & times, const std::vector<ext::shared_ptr<std::vector<Real>>> & strikes, ext::shared_ptr<Matrix> localVolMatrix, const DayCounter & dayCounter, Extrapolation lowerExtrapolation = ConstantExtrapolation, Extrapolation upperExtrapolation = ConstantExtrapolation);+|v|ql/termstructures/volatility/equityfx/gridmodellocalvolsurface.hpp|GridModelLocalVolSurface::GridModelLocalVolSurface(const Date & referenceDate, const std::vector<Date> & dates, const std::vector<ext::shared_ptr<std::vector<Real>>> & strikes, const DayCounter & dayCounter, Extrapolation lowerExtrapolation = FixedLocalVolSurface::ConstantExtrapolation, Extrapolation upperExtrapolation = FixedLocalVolSurface::ConstantExtrapolation);+|v|ql/termstructures/volatility/equityfx/hestonblackvolsurface.hpp|HestonBlackVolSurface::HestonBlackVolSurface(const Handle<HestonModel> & hestonModel, AnalyticHestonEngine::ComplexLogFormula cpxLogFormula = AnalyticHestonEngine::AngledContour, AnalyticHestonEngine::Integration integration = AnalyticHestonEngine::Integration::gaussLaguerre(160));+|v|ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|ImpliedVolTermStructure::ImpliedVolTermStructure(Handle<BlackVolTermStructure> origTS, const Date & referenceDate);+|v|ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|ImpliedVolTermStructure(Handle<BlackVolTermStructure> originalTS, const Date & referenceDate);+| |ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|void accept(AcyclicVisitor & v);+| |ql/termstructures/volatility/equityfx/impliedvoltermstructure.hpp|Real blackVarianceImpl(Time t, Real strike) const;+|x|ql/termstructures/volatility/equityfx/localconstantvol.hpp|LocalConstantVol::LocalConstantVol(const Date & referenceDate, Volatility volatility, DayCounter dayCounter);+|v|ql/termstructures/volatility/equityfx/localconstantvol.hpp|LocalConstantVol::LocalConstantVol(const Date & referenceDate, Handle<Quote> volatility, DayCounter dayCounter);+|x|ql/termstructures/volatility/equityfx/localconstantvol.hpp|LocalConstantVol::LocalConstantVol(Natural settlementDays, const Calendar &, Volatility volatility, DayCounter dayCounter);+|v|ql/termstructures/volatility/equityfx/localconstantvol.hpp|LocalConstantVol::LocalConstantVol(Natural settlementDays, const Calendar &, Handle<Quote> volatility, DayCounter dayCounter);+|x|ql/termstructures/volatility/equityfx/localconstantvol.hpp|LocalConstantVol(Natural settlementDays, const Calendar & calendar, Volatility volatility, DayCounter dayCounter);+|v|ql/termstructures/volatility/equityfx/localconstantvol.hpp|LocalConstantVol(Natural settlementDays, const Calendar & calendar, Handle<Quote> volatility, DayCounter dayCounter);+| |ql/termstructures/volatility/equityfx/localconstantvol.hpp|void accept(AcyclicVisitor & v);+| |ql/termstructures/volatility/equityfx/localconstantvol.hpp|Volatility localVolImpl(Time, Real) const;+|v|ql/termstructures/volatility/equityfx/localvolcurve.hpp|LocalVolCurve::LocalVolCurve(const Handle<BlackVarianceCurve> & curve);+| |ql/termstructures/volatility/equityfx/localvolcurve.hpp|void accept(AcyclicVisitor & v);+| |ql/termstructures/volatility/equityfx/localvolcurve.hpp|Volatility localVolImpl(Time t, Real dummy) const;+|v|ql/termstructures/volatility/equityfx/localvolsurface.hpp|LocalVolSurface::LocalVolSurface(const Handle<BlackVolTermStructure> & blackTS, Handle<YieldTermStructure> riskFreeTS, Handle<YieldTermStructure> dividendTS, Handle<Quote> underlying);+|x|ql/termstructures/volatility/equityfx/localvolsurface.hpp|LocalVolSurface::LocalVolSurface(const Handle<BlackVolTermStructure> & blackTS, Handle<YieldTermStructure> riskFreeTS, Handle<YieldTermStructure> dividendTS, Real underlying);+| |ql/termstructures/volatility/equityfx/localvoltermstructure.hpp|LocalVolTermStructure::LocalVolTermStructure(BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/equityfx/localvoltermstructure.hpp|LocalVolTermStructure::LocalVolTermStructure(const Date & referenceDate, const Calendar & cal = Calendar(), BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/equityfx/localvoltermstructure.hpp|LocalVolTermStructure::LocalVolTermStructure(Natural settlementDays, const Calendar &, BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+|v|ql/termstructures/volatility/equityfx/localvoltermstructure.hpp|Volatility LocalVolTermStructure::localVol(const Date & d, Real underlyingLevel, bool extrapolate = false) const;+| |ql/termstructures/volatility/equityfx/localvoltermstructure.hpp|Volatility LocalVolTermStructure::localVol(Time t, Real underlyingLevel, bool extrapolate = false) const;+| |ql/termstructures/volatility/equityfx/localvoltermstructure.hpp|void LocalVolTermStructure::accept(AcyclicVisitor &);+|v|ql/termstructures/volatility/equityfx/noexceptlocalvolsurface.hpp|NoExceptLocalVolSurface::NoExceptLocalVolSurface(const Handle<BlackVolTermStructure> & blackTS, const Handle<YieldTermStructure> & riskFreeTS, const Handle<YieldTermStructure> & dividendTS, const Handle<Quote> & underlying, Real illegalLocalVolOverwrite);+|x|ql/termstructures/volatility/equityfx/noexceptlocalvolsurface.hpp|NoExceptLocalVolSurface::NoExceptLocalVolSurface(const Handle<BlackVolTermStructure> & blackTS, const Handle<YieldTermStructure> & riskFreeTS, const Handle<YieldTermStructure> & dividendTS, Real underlying, Real illegalLocalVolOverwrite);+| |ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|PiecewiseBlackVarianceSurface::PiecewiseBlackVarianceSurface(const Date & referenceDate, const std::vector<Date> & dates, std::vector<ext::shared_ptr<SmileSection>> smileSections, DayCounter dayCounter = DayCounter());+| |ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|PiecewiseBlackVarianceSurface::PiecewiseBlackVarianceSurface(const Date & referenceDate, const Date & date, ext::shared_ptr<SmileSection> smileSection, DayCounter dayCounter = DayCounter());+|v|ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|static ext::shared_ptr<PiecewiseBlackVarianceSurface> PiecewiseBlackVarianceSurface::makeFromGrid(const Date & referenceDate, const std::vector<Date> & dates, const std::vector<Real> & strikes, const Matrix & blackVols, const DayCounter & dc = DayCounter());+|?|ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|DayCounter dayCounter() const;+| |ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/equityfx/piecewiseblackvariancesurface.hpp|Real maxStrike() const;+|v|ql/termstructures/volatility/flatsmilesection.hpp|FlatSmileSection::FlatSmileSection(const Date & d, Volatility vol, const DayCounter & dc, const Date & referenceDate = Date(), Real atmLevel = Null<Rate>(), VolatilityType type = ShiftedLognormal, Real shift = 0.0);+|x|ql/termstructures/volatility/flatsmilesection.hpp|FlatSmileSection::FlatSmileSection(Time exerciseTime, Volatility vol, const DayCounter & dc, Real atmLevel = Null<Rate>(), VolatilityType type = ShiftedLognormal, Real shift = 0.0);+|x|ql/termstructures/volatility/flatsmilesection.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/flatsmilesection.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/flatsmilesection.hpp|Real atmLevel() const;+| |ql/termstructures/volatility/flatsmilesection.hpp|Volatility volatilityImpl(Rate) const;+| |ql/termstructures/volatility/gaussian1dsmilesection.hpp|Gaussian1dSmileSection::Gaussian1dSmileSection(const Date & fixingDate, ext::shared_ptr<SwapIndex> swapIndex, const ext::shared_ptr<Gaussian1dModel> & model, const DayCounter & dc, const ext::shared_ptr<Gaussian1dSwaptionEngine> & swaptionEngine = ext::shared_ptr<Gaussian1dSwaptionEngine>());+| |ql/termstructures/volatility/gaussian1dsmilesection.hpp|Gaussian1dSmileSection::Gaussian1dSmileSection(const Date & fixingDate, ext::shared_ptr<IborIndex> swapIndex, const ext::shared_ptr<Gaussian1dModel> & model, const DayCounter & dc, const ext::shared_ptr<Gaussian1dCapFloorEngine> & capEngine = ext::shared_ptr<Gaussian1dCapFloorEngine>());+|v|ql/termstructures/volatility/inflation/constantcpivolatility.hpp|ConstantCPIVolatility::ConstantCPIVolatility(const Handle<Quote> & vol, Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc, const Period & observationLag, Frequency frequency, bool indexIsInterpolated);+|x|ql/termstructures/volatility/inflation/constantcpivolatility.hpp|ConstantCPIVolatility::ConstantCPIVolatility(Volatility vol, Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc, const Period & observationLag, Frequency frequency, bool indexIsInterpolated);+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|CPIVolatilitySurface::CPIVolatilitySurface(Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc, const Period & observationLag, Frequency frequency, bool indexIsInterpolated);+|v|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Volatility CPIVolatilitySurface::volatility(const Date & maturityDate, Rate strike, const Period & obsLag = Period(- 1, Days), bool extrapolate = false) const;+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Volatility CPIVolatilitySurface::volatility(const Period & optionTenor, Rate strike, const Period & obsLag = Period(- 1, Days), bool extrapolate = false) const;+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Volatility CPIVolatilitySurface::volatility(Time time, Rate strike) const;+|v|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Volatility CPIVolatilitySurface::totalVariance(const Date & exerciseDate, Rate strike, const Period & obsLag = Period(- 1, Days), bool extrapolate = false) const;+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Volatility CPIVolatilitySurface::totalVariance(const Period & optionTenor, Rate strike, const Period & obsLag = Period(- 1, Days), bool extrapolate = false) const;+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Period CPIVolatilitySurface::observationLag() const;+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Frequency CPIVolatilitySurface::frequency() const;+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|bool CPIVolatilitySurface::indexIsInterpolated() const;+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Date CPIVolatilitySurface::baseDate() const;+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Time CPIVolatilitySurface::timeFromBase(const Date & date, const Period & obsLag = Period(- 1, Days)) const;+|x|ql/termstructures/volatility/inflation/cpivolatilitystructure.hpp|Volatility CPIVolatilitySurface::baseLevel() const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|YoYOptionletVolatilitySurface::YoYOptionletVolatilitySurface(Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc, const Period & observationLag, Frequency frequency, bool indexIsInterpolated, VolatilityType volType = ShiftedLognormal, Real displacement = 0.0);+|v|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Volatility YoYOptionletVolatilitySurface::volatility(const Date & maturityDate, Rate strike, const Period & obsLag = Period(- 1, Days), bool extrapolate = false) const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Volatility YoYOptionletVolatilitySurface::volatility(const Period & optionTenor, Rate strike, const Period & obsLag = Period(- 1, Days), bool extrapolate = false) const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Volatility YoYOptionletVolatilitySurface::volatility(Time time, Rate strike) const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|VolatilityType YoYOptionletVolatilitySurface::volatilityType() const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Real YoYOptionletVolatilitySurface::displacement() const;+|v|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Volatility YoYOptionletVolatilitySurface::totalVariance(const Date & exerciseDate, Rate strike, const Period & obsLag = Period(- 1, Days), bool extrapolate = false) const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Volatility YoYOptionletVolatilitySurface::totalVariance(const Period & optionTenor, Rate strike, const Period & obsLag = Period(- 1, Days), bool extrapolate = false) const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Period YoYOptionletVolatilitySurface::observationLag() const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Frequency YoYOptionletVolatilitySurface::frequency() const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|bool YoYOptionletVolatilitySurface::indexIsInterpolated() const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Date YoYOptionletVolatilitySurface::baseDate() const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Time YoYOptionletVolatilitySurface::timeFromBase(const Date & date, const Period & obsLag = Period(- 1, Days)) const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|Volatility YoYOptionletVolatilitySurface::baseLevel() const;+|x|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|ConstantYoYOptionletVolatility::ConstantYoYOptionletVolatility(Volatility v, Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc, const Period & observationLag, Frequency frequency, bool indexIsInterpolated, Rate minStrike = - 1.0, Rate maxStrike = 100.0, VolatilityType volType = ShiftedLognormal, Real displacement = 0.0);+|v|ql/termstructures/volatility/inflation/yoyinflationoptionletvolatilitystructure.hpp|ConstantYoYOptionletVolatility::ConstantYoYOptionletVolatility(Handle<Quote> v, Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc, const Period & observationLag, Frequency frequency, bool indexIsInterpolated, Rate minStrike = - 1.0, Rate maxStrike = 100.0, VolatilityType volType = ShiftedLognormal, Real displacement = 0.0);+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|InterpolatedSmileSection::InterpolatedSmileSection<Interpolator>(Time expiryTime, std::vector<Rate> strikes, const std::vector<Handle<Quote>> & stdDevHandles, Handle<Quote> atmLevel, const Interpolator & interpolator = Interpolator(), const DayCounter & dc = Actual365Fixed(), VolatilityType type = ShiftedLognormal, Real shift = 0.0, bool flatStrikeExtrapolation = false);+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|InterpolatedSmileSection::InterpolatedSmileSection<Interpolator>(Time expiryTime, std::vector<Rate> strikes, const std::vector<Real> & stdDevs, Real atmLevel, const Interpolator & interpolator = Interpolator(), const DayCounter & dc = Actual365Fixed(), VolatilityType type = ShiftedLognormal, Real shift = 0.0, bool flatStrikeExtrapolation = false);+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|InterpolatedSmileSection::InterpolatedSmileSection<Interpolator>(const Date & d, std::vector<Rate> strikes, const std::vector<Handle<Quote>> & stdDevHandles, Handle<Quote> atmLevel, const DayCounter & dc = Actual365Fixed(), const Interpolator & interpolator = Interpolator(), const Date & referenceDate = Date(), VolatilityType type = ShiftedLognormal, Real shift = 0.0, bool flatStrikeExtrapolation = false);+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|InterpolatedSmileSection::InterpolatedSmileSection<Interpolator>(const Date & d, std::vector<Rate> strikes, const std::vector<Real> & stdDevs, Real atmLevel, const DayCounter & dc = Actual365Fixed(), const Interpolator & interpolator = Interpolator(), const Date & referenceDate = Date(), VolatilityType type = ShiftedLognormal, Real shift = 0.0, bool flatStrikeExtrapolation = false);+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|InterpolatedSmileSection<Interpolator>(Time timeToExpiry, std::vector<Rate> strikes, const std::vector<Handle<Quote>> & stdDevHandles, Handle<Quote> atmLevel, const Interpolator & interpolator, const DayCounter & dc, const VolatilityType type, const Real shift, bool flatStrikeExtrapolation);+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|InterpolatedSmileSection<Interpolator>(Time timeToExpiry, std::vector<Rate> strikes, const std::vector<Real> & stdDevs, Real atmLevel, const Interpolator & interpolator, const DayCounter & dc, const VolatilityType type, const Real shift, bool flatStrikeExtrapolation);+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|InterpolatedSmileSection<Interpolator>(const Date & d, std::vector<Rate> strikes, const std::vector<Handle<Quote>> & stdDevHandles, Handle<Quote> atmLevel, const DayCounter & dc, const Interpolator & interpolator, const Date & referenceDate, const VolatilityType type, const Real shift, bool flatStrikeExtrapolation);+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|InterpolatedSmileSection<Interpolator>(const Date & d, std::vector<Rate> strikes, const std::vector<Real> & stdDevs, Real atmLevel, const DayCounter & dc, const Interpolator & interpolator, const Date & referenceDate, const VolatilityType type, const Real shift, bool flatStrikeExtrapolation);+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|void performCalculations() const;+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|Real varianceImpl(Real strike) const;+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|Real volatilityImpl(Real strike) const;+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|void update();+| |ql/termstructures/volatility/interpolatedsmilesection.hpp|void checkStrikes();+| |ql/termstructures/volatility/kahalesmilesection.hpp|cFunction::cFunction(Real f, Real s, Real a, Real b);+| |ql/termstructures/volatility/kahalesmilesection.hpp|cFunction::cFunction(Real a, Real b);+| |ql/termstructures/volatility/kahalesmilesection.hpp|Real cFunction::operator()(Real k) const;+| |ql/termstructures/volatility/kahalesmilesection.hpp|aHelper::aHelper(Real k0, Real k1, Real c0, Real c1, Real c0p, Real c1p);+| |ql/termstructures/volatility/kahalesmilesection.hpp|Real aHelper::operator()(Real a) const;+| |ql/termstructures/volatility/kahalesmilesection.hpp|sHelper::sHelper(Real k0, Real c0, Real c0p);+| |ql/termstructures/volatility/kahalesmilesection.hpp|Real sHelper::operator()(Real s) const;+| |ql/termstructures/volatility/kahalesmilesection.hpp|sHelper1::sHelper1(Real k1, Real c0, Real c1, Real c1p);+| |ql/termstructures/volatility/kahalesmilesection.hpp|Real sHelper1::operator()(Real s) const;+| |ql/termstructures/volatility/kahalesmilesection.hpp|KahaleSmileSection::KahaleSmileSection(const ext::shared_ptr<SmileSection> & source, Real atm = Null<Real>(), bool interpolate = false, bool exponentialExtrapolation = false, bool deleteArbitragePoints = false, const std::vector<Real> & moneynessGrid = std::vector<Real>(), Real gap = 1.0E-5, int forcedLeftIndex = - 1, int forcedRightIndex = QL_MAX_INTEGER);+| |ql/termstructures/volatility/kahalesmilesection.hpp|Real KahaleSmileSection::leftCoreStrike() const;+| |ql/termstructures/volatility/kahalesmilesection.hpp|Real KahaleSmileSection::rightCoreStrike() const;+| |ql/termstructures/volatility/kahalesmilesection.hpp|std::pair<Size, Size> KahaleSmileSection::coreIndices() const;+|v|ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|CapletVarianceCurve::CapletVarianceCurve(const Date & referenceDate, const std::vector<Date> & dates, const std::vector<Volatility> & capletVolCurve, const DayCounter & dayCounter, VolatilityType type = ShiftedLognormal, Real displacement = 0.0);+| |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|CapletVarianceCurve(const Date & referenceDate, const std::vector<Date> & dates, const std::vector<Volatility> & capletVolCurve, const DayCounter & dayCounter, VolatilityType type, Real displacement);+|?|ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|DayCounter dayCounter() const;+| |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|ext::shared_ptr<SmileSection> smileSectionImpl(Time t) const;+| |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Volatility volatilityImpl(Time t, Rate r) const;+| |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|VolatilityType volatilityType() const;+| |ql/termstructures/volatility/optionlet/capletvariancecurve.hpp|Real displacement() const;+|v|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|ConstantOptionletVolatility::ConstantOptionletVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Handle<Quote> volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real displacement = 0.0);+|v|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|ConstantOptionletVolatility::ConstantOptionletVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Handle<Quote> volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real displacement = 0.0);+|x|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|ConstantOptionletVolatility::ConstantOptionletVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real displacement = 0.0);+|x|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|ConstantOptionletVolatility::ConstantOptionletVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real displacement = 0.0);+| |ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|VolatilityType volatilityType() const;+| |ql/termstructures/volatility/optionlet/constantoptionletvol.hpp|Real displacement() const;+| |ql/termstructures/volatility/optionlet/optionletstripper.hpp|const std::vector<Period> & OptionletStripper::optionletFixingTenors() const;+| |ql/termstructures/volatility/optionlet/optionletstripper.hpp|const std::vector<Date> & OptionletStripper::optionletPaymentDates() const;+| |ql/termstructures/volatility/optionlet/optionletstripper.hpp|const std::vector<Time> & OptionletStripper::optionletAccrualPeriods() const;+|x|ql/termstructures/volatility/optionlet/optionletstripper.hpp|ext::shared_ptr<CapFloorTermVolSurface> OptionletStripper::termVolSurface() const;+|x|ql/termstructures/volatility/optionlet/optionletstripper.hpp|ext::shared_ptr<IborIndex> OptionletStripper::iborIndex() const;+|x|ql/termstructures/volatility/optionlet/optionletstripper.hpp|std::optional<Period> OptionletStripper::optionletFrequency() const;+|v|ql/termstructures/volatility/optionlet/optionletstripper1.hpp|OptionletStripper1::OptionletStripper1(const ext::shared_ptr<CapFloorTermVolSurface> &, const ext::shared_ptr<IborIndex> & index, Rate switchStrikes = Null<Rate>(), Real accuracy = 1.0e-6, Natural maxIter = 100, const Handle<YieldTermStructure> & discount = { }, VolatilityType type = ShiftedLognormal, Real displacement = 0.0, bool dontThrow = false, std::optional<Period> optionletFrequency = std::nullopt, Natural paymentLag = 0);+| |ql/termstructures/volatility/optionlet/optionletstripper1.hpp|const Matrix & OptionletStripper1::capFloorPrices() const;+|x|ql/termstructures/volatility/optionlet/optionletstripper1.hpp|const Matrix & OptionletStripper1::capletVols() const;+|x|ql/termstructures/volatility/optionlet/optionletstripper1.hpp|const Matrix & OptionletStripper1::capFloorVolatilities() const;+| |ql/termstructures/volatility/optionlet/optionletstripper1.hpp|const Matrix & OptionletStripper1::optionletPrices() const;+|x|ql/termstructures/volatility/optionlet/optionletstripper1.hpp|Rate OptionletStripper1::switchStrike() const;+|v|ql/termstructures/volatility/optionlet/optionletstripper2.hpp|OptionletStripper2::OptionletStripper2(const ext::shared_ptr<OptionletStripper1> & optionletStripper1, const Handle<CapFloorTermVolCurve> & atmCapFloorTermVolCurve);+|v|ql/termstructures/volatility/optionlet/optionletstripper2.hpp|std::vector<Rate> OptionletStripper2::atmCapFloorStrikes() const;+|v|ql/termstructures/volatility/optionlet/optionletstripper2.hpp|std::vector<Real> OptionletStripper2::atmCapFloorPrices() const;+|v|ql/termstructures/volatility/optionlet/optionletstripper2.hpp|std::vector<Volatility> OptionletStripper2::spreadsVol() const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|OptionletVolatilityStructure::OptionletVolatilityStructure(BusinessDayConvention bdc = Following, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|OptionletVolatilityStructure::OptionletVolatilityStructure(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|OptionletVolatilityStructure::OptionletVolatilityStructure(Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Volatility OptionletVolatilityStructure::volatility(const Period & optionTenor, Rate strike, bool extrapolate = false) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Volatility OptionletVolatilityStructure::volatility(const Date & optionDate, Rate strike, bool extrapolate = false) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Volatility OptionletVolatilityStructure::volatility(Time optionTime, Rate strike, bool extrapolate = false) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Real OptionletVolatilityStructure::blackVariance(const Period & optionTenor, Rate strike, bool extrapolate = false) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Real OptionletVolatilityStructure::blackVariance(const Date & optionDate, Rate strike, bool extrapolate = false) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Real OptionletVolatilityStructure::blackVariance(Time optionTime, Rate strike, bool extrapolate = false) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|ext::shared_ptr<SmileSection> OptionletVolatilityStructure::smileSection(const Period & optionTenor, bool extr = false) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|ext::shared_ptr<SmileSection> OptionletVolatilityStructure::smileSection(const Date & optionDate, bool extr = false) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|ext::shared_ptr<SmileSection> OptionletVolatilityStructure::smileSection(Time optionTime, bool extr = false) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|VolatilityType OptionletVolatilityStructure::volatilityType() const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Real OptionletVolatilityStructure::displacement() const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Volatility volatility(const Period & optionTenor, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Real blackVariance(const Period & optionTenor, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|ext::shared_ptr<SmileSection> smileSection(const Period & optionTenor, bool extrapolate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Real blackVariance(const Date & optionDate, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Real blackVariance(Time optionTime, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Volatility volatility(const Date & optionDate, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Volatility volatility(Time optionTime, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|ext::shared_ptr<SmileSection> smileSection(const Date & optionDate, bool extrapolate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|ext::shared_ptr<SmileSection> smileSection(Time optionTime, bool extrapolate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|ext::shared_ptr<SmileSection> smileSectionImpl(const Date & optionDate) const;+| |ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp|Volatility volatilityImpl(const Date & optionDate, Rate strike) const;+|v|ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|SpreadedOptionletVolatility::SpreadedOptionletVolatility(const Handle<OptionletVolatilityStructure> &, Handle<Quote> spread);+|?|ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|DayCounter dayCounter() const;+| |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Date maxDate() const;+| |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Time maxTime() const;+| |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|const Date & referenceDate() const;+|?|ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Calendar calendar() const;+| |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Natural settlementDays() const;+| |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|BusinessDayConvention businessDayConvention() const;+|x|ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Rate minStrike() const;+|x|ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Rate maxStrike() const;+| |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|VolatilityType volatilityType() const;+| |ql/termstructures/volatility/optionlet/spreadedoptionletvol.hpp|Real displacement() const;+| |ql/termstructures/volatility/optionlet/strippedoptionlet.hpp|StrippedOptionlet::StrippedOptionlet(Natural settlementDays, const Calendar & calendar, BusinessDayConvention bdc, ext::shared_ptr<IborIndex> iborIndex, const std::vector<Date> & optionletDates, const std::vector<Rate> & strikes, std::vector<std::vector<Handle<Quote>>>, DayCounter dc, VolatilityType type = ShiftedLognormal, Real displacement = 0.0);+| |ql/termstructures/volatility/optionlet/strippedoptionlet.hpp|StrippedOptionlet::StrippedOptionlet(Natural settlementDays, const Calendar & calendar, BusinessDayConvention bdc, ext::shared_ptr<IborIndex> iborIndex, const std::vector<Date> & optionletDates, const std::vector<std::vector<Rate>> & strikes, std::vector<std::vector<Handle<Quote>>>, DayCounter dc, VolatilityType type = ShiftedLognormal, Real displacement = 0.0);+|v|ql/termstructures/volatility/optionlet/strippedoptionletadapter.hpp|StrippedOptionletAdapter::StrippedOptionletAdapter(const ext::shared_ptr<StrippedOptionletBase> &);+|x|ql/termstructures/volatility/optionlet/strippedoptionletadapter.hpp|ext::shared_ptr<OptionletStripper> StrippedOptionletAdapter::optionletStripper() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletadapter.hpp|void update();+| |ql/termstructures/volatility/optionlet/strippedoptionletadapter.hpp|void deepUpdate();+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|const std::vector<Rate> & StrippedOptionletBase::optionletStrikes(Size i) const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|const std::vector<Volatility> & StrippedOptionletBase::optionletVolatilities(Size i) const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|const std::vector<Date> & StrippedOptionletBase::optionletFixingDates() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|const std::vector<Time> & StrippedOptionletBase::optionletFixingTimes() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|Size StrippedOptionletBase::optionletMaturities() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|const std::vector<Rate> & StrippedOptionletBase::atmOptionletRates() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|DayCounter StrippedOptionletBase::dayCounter() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|Calendar StrippedOptionletBase::calendar() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|Natural StrippedOptionletBase::settlementDays() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|BusinessDayConvention StrippedOptionletBase::businessDayConvention() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|VolatilityType StrippedOptionletBase::volatilityType() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp|Real StrippedOptionletBase::displacement() const;+|v|ql/termstructures/volatility/sabr.hpp|Real unsafeSabrLogNormalVolatility(Rate strike, Rate forward, Time expiryTime, Real alpha, Real beta, Real nu, Real rho);+|v|ql/termstructures/volatility/sabr.hpp|Real unsafeShiftedSabrVolatility(Rate strike, Rate forward, Time expiryTime, Real alpha, Real beta, Real nu, Real rho, Real shift, VolatilityType volatilityType = VolatilityType::ShiftedLognormal);+|v|ql/termstructures/volatility/sabr.hpp|Real unsafeSabrNormalVolatility(Rate strike, Rate forward, Time expiryTime, Real alpha, Real beta, Real nu, Real rho);+|v|ql/termstructures/volatility/sabr.hpp|Real unsafeSabrVolatility(Rate strike, Rate forward, Time expiryTime, Real alpha, Real beta, Real nu, Real rho, VolatilityType volatilityType = VolatilityType::ShiftedLognormal);+|v|ql/termstructures/volatility/sabr.hpp|Real sabrVolatility(Rate strike, Rate forward, Time expiryTime, Real alpha, Real beta, Real nu, Real rho, VolatilityType volatilityType = VolatilityType::ShiftedLognormal);+|v|ql/termstructures/volatility/sabr.hpp|Real shiftedSabrVolatility(Rate strike, Rate forward, Time expiryTime, Real alpha, Real beta, Real nu, Real rho, Real shift, VolatilityType volatilityType = VolatilityType::ShiftedLognormal);+|v|ql/termstructures/volatility/sabr.hpp|Real sabrFlochKennedyVolatility(Rate strike, Rate forward, Time expiryTime, Real alpha, Real beta, Real nu, Real rho);+|v|ql/termstructures/volatility/sabr.hpp|void validateSabrParameters(Real alpha, Real beta, Real nu, Real rho);+|v|ql/termstructures/volatility/sabr.hpp|std::array<Real, 4> sabrGuess(Real k_m, Volatility vol_m, Real k_0, Volatility vol_0, Real k_p, Volatility vol_p, Rate forward, Time expiryTime, Real beta, Real shift, VolatilityType volatilityType);+|v|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|SabrInterpolatedSmileSection::SabrInterpolatedSmileSection(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real alpha, Real beta, Real nu, Real rho, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed(), Real shift = 0.0);+|x|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|SabrInterpolatedSmileSection::SabrInterpolatedSmileSection(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & vols, Real alpha, Real beta, Real nu, Real rho, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed(), Real shift = 0.0);+|v|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real SabrInterpolatedSmileSection::alpha() const;+|v|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real SabrInterpolatedSmileSection::beta() const;+|v|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real SabrInterpolatedSmileSection::nu() const;+|v|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real SabrInterpolatedSmileSection::rho() const;+|v|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real SabrInterpolatedSmileSection::rmsError() const;+|v|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real SabrInterpolatedSmileSection::maxError() const;+|v|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|EndCriteria::Type SabrInterpolatedSmileSection::endCriteria() const;+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|void update();+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real volatilityImpl(Rate strike) const;+|x|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real atmLevel() const;+|v|ql/termstructures/volatility/sabrsmilesection.hpp|SabrSmileSection::SabrSmileSection(Time timeToExpiry, Rate forward, const std::vector<Real> & sabrParameters, Real shift = 0.0, VolatilityType volatilityType = VolatilityType::ShiftedLognormal);+|v|ql/termstructures/volatility/sabrsmilesection.hpp|SabrSmileSection::SabrSmileSection(const Date & d, Rate forward, const std::vector<Real> & sabrParameters, const Date & referenceDate = Date(), const DayCounter & dc = Actual365Fixed(), Real shift = 0.0, VolatilityType volatilityType = VolatilityType::ShiftedLognormal);+|x|ql/termstructures/volatility/sabrsmilesection.hpp|Real SabrSmileSection::alpha() const;+|x|ql/termstructures/volatility/sabrsmilesection.hpp|Real SabrSmileSection::beta() const;+|x|ql/termstructures/volatility/sabrsmilesection.hpp|Real SabrSmileSection::nu() const;+|x|ql/termstructures/volatility/sabrsmilesection.hpp|Real SabrSmileSection::rho() const;+| |ql/termstructures/volatility/smilesection.hpp|SmileSection::SmileSection(const Date & d, DayCounter dc = DayCounter(), const Date & referenceDate = Date(), VolatilityType type = ShiftedLognormal, Rate shift = 0.0);+| |ql/termstructures/volatility/smilesection.hpp|SmileSection::SmileSection(Time exerciseTime, DayCounter dc = DayCounter(), VolatilityType type = ShiftedLognormal, Rate shift = 0.0);+| |ql/termstructures/volatility/smilesection.hpp|SmileSection::SmileSection();+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::minStrike() const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::maxStrike() const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::variance(Rate strike) const;+|v|ql/termstructures/volatility/smilesection.hpp|Volatility SmileSection::volatility(Rate strike) const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::atmLevel() const;+|x|ql/termstructures/volatility/smilesection.hpp|const Date & SmileSection::exerciseDate() const;+|x|ql/termstructures/volatility/smilesection.hpp|VolatilityType SmileSection::volatilityType() const;+|x|ql/termstructures/volatility/smilesection.hpp|Rate SmileSection::shift() const;+| |ql/termstructures/volatility/smilesection.hpp|const Date & SmileSection::referenceDate() const;+| |ql/termstructures/volatility/smilesection.hpp|Time SmileSection::exerciseTime() const;+|x|ql/termstructures/volatility/smilesection.hpp|const DayCounter & SmileSection::dayCounter() const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::optionPrice(Rate strike, Option::Type type = Option::Call, Real discount = 1.0) const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::digitalOptionPrice(Rate strike, Option::Type type = Option::Call, Real discount = 1.0, Real gap = 1.0e-5) const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::vega(Rate strike, Real discount = 1.0) const;+|v|ql/termstructures/volatility/smilesection.hpp|Real SmileSection::density(Rate strike, Real discount = 1.0, Real gap = 1.0E-4) const;+| |ql/termstructures/volatility/smilesection.hpp|Volatility SmileSection::volatility(Rate strike, VolatilityType type, Real shift = 0.0) const;+| |ql/termstructures/volatility/smilesection.hpp|Real varianceImpl(Rate strike) const;+| |ql/termstructures/volatility/smilesectionutils.hpp|SmileSectionUtils::SmileSectionUtils(const SmileSection & section, const std::vector<Real> & moneynessGrid = std::vector<Real>(), Real atm = Null<Real>(), bool deleteArbitragePoints = false);+| |ql/termstructures/volatility/smilesectionutils.hpp|std::pair<Real, Real> SmileSectionUtils::arbitragefreeRegion() const;+| |ql/termstructures/volatility/smilesectionutils.hpp|std::pair<Size, Size> SmileSectionUtils::arbitragefreeIndices() const;+| |ql/termstructures/volatility/smilesectionutils.hpp|const std::vector<Real> & SmileSectionUtils::moneyGrid() const;+| |ql/termstructures/volatility/smilesectionutils.hpp|const std::vector<Real> & SmileSectionUtils::strikeGrid() const;+| |ql/termstructures/volatility/smilesectionutils.hpp|const std::vector<Real> & SmileSectionUtils::callPrices() const;+| |ql/termstructures/volatility/smilesectionutils.hpp|Real SmileSectionUtils::atmLevel() const;+|v|ql/termstructures/volatility/spreadedsmilesection.hpp|SpreadedSmileSection::SpreadedSmileSection(ext::shared_ptr<SmileSection>, Handle<Quote> spread);+|x|ql/termstructures/volatility/spreadedsmilesection.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/spreadedsmilesection.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/spreadedsmilesection.hpp|Real atmLevel() const;+| |ql/termstructures/volatility/spreadedsmilesection.hpp|const Date & exerciseDate() const;+| |ql/termstructures/volatility/spreadedsmilesection.hpp|Time exerciseTime() const;+|?|ql/termstructures/volatility/spreadedsmilesection.hpp|const DayCounter & dayCounter() const;+| |ql/termstructures/volatility/spreadedsmilesection.hpp|const Date & referenceDate() const;+| |ql/termstructures/volatility/spreadedsmilesection.hpp|VolatilityType volatilityType() const;+| |ql/termstructures/volatility/spreadedsmilesection.hpp|Rate shift() const;+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|CmsMarket::CmsMarket(std::vector<Period> swapLengths, std::vector<ext::shared_ptr<SwapIndex>> swapIndexes, ext::shared_ptr<IborIndex> iborIndex, const std::vector<std::vector<Handle<Quote>>> & bidAskSpreads, const std::vector<ext::shared_ptr<CmsCouponPricer>> & pricers, Handle<YieldTermStructure> discountingTS);+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|void CmsMarket::reprice(const Handle<SwaptionVolatilityStructure> & volStructure, Real meanReversion);+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|const std::vector<Period> & CmsMarket::swapTenors() const;+|x|ql/termstructures/volatility/swaption/cmsmarket.hpp|const std::vector<Period> & CmsMarket::swapLengths() const;+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|const Matrix & CmsMarket::impliedCmsSpreads();+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|const Matrix & CmsMarket::spreadErrors();+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|Matrix CmsMarket::browse() const;+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|Real CmsMarket::weightedSpreadError(const Matrix & weights);+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|Real CmsMarket::weightedSpotNpvError(const Matrix & weights);+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|Real CmsMarket::weightedFwdNpvError(const Matrix & weights);+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|Array CmsMarket::weightedSpreadErrors(const Matrix & weights);+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|Array CmsMarket::weightedSpotNpvErrors(const Matrix & weights);+| |ql/termstructures/volatility/swaption/cmsmarket.hpp|Array CmsMarket::weightedFwdNpvErrors(const Matrix & weights);+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|CmsMarketCalibration::CmsMarketCalibration(Handle<SwaptionVolatilityStructure> & volCube, ext::shared_ptr<CmsMarket> & cmsMarket, const Matrix & weights, CalibrationType calibrationType);+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|Array CmsMarketCalibration::compute(const ext::shared_ptr<EndCriteria> & endCriteria, const ext::shared_ptr<OptimizationMethod> & method, const Array & guess, bool isMeanReversionFixed);+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|Matrix CmsMarketCalibration::compute(const ext::shared_ptr<EndCriteria> & endCriteria, const ext::shared_ptr<OptimizationMethod> & method, const Matrix & guess, bool isMeanReversionFixed, Real meanReversionGuess = Null<Real>());+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|Matrix CmsMarketCalibration::computeParametric(const ext::shared_ptr<EndCriteria> & endCriteria, const ext::shared_ptr<OptimizationMethod> & method, const Matrix & guess, bool isMeanReversionFixed, Real meanReversionGuess = Null<Real>());+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|Real CmsMarketCalibration::error() const;+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|EndCriteria::Type CmsMarketCalibration::endCriteria();+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|static Real CmsMarketCalibration::betaTransformInverse(Real beta);+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|static Real CmsMarketCalibration::betaTransformDirect(Real y);+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|static Real CmsMarketCalibration::reversionTransformInverse(Real reversion);+| |ql/termstructures/volatility/swaption/cmsmarketcalibration.hpp|static Real CmsMarketCalibration::reversionTransformDirect(Real y);+|u|ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|Gaussian1dSwaptionVolatility::Gaussian1dSwaptionVolatility(const Calendar & cal, BusinessDayConvention bdc, ext::shared_ptr<SwapIndex> indexBase, const ext::shared_ptr<Gaussian1dModel> & model, const DayCounter & dc, ext::shared_ptr<Gaussian1dSwaptionEngine> swaptionEngine = ext::shared_ptr<Gaussian1dSwaptionEngine>());+|x|ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|DateHelper::DateHelper(const TermStructure & ts, const Time t);+|x|ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|Real DateHelper::operator()(Real date) const;+|x|ql/termstructures/volatility/swaption/gaussian1dswaptionvolatility.hpp|Real DateHelper::derivative(Real date) const;+|v|ql/termstructures/volatility/swaption/interpolatedswaptionvolatilitycube.hpp|InterpolatedSwaptionVolatilityCube::InterpolatedSwaptionVolatilityCube(const Handle<SwaptionVolatilityStructure> & atmVolStructure, const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const std::vector<Spread> & strikeSpreads, const std::vector<std::vector<Handle<Quote>>> & volSpreads, const ext::shared_ptr<SwapIndex> & swapIndexBase, const ext::shared_ptr<SwapIndex> & shortSwapIndexBase, bool vegaWeightedSmileFit);+|v|ql/termstructures/volatility/swaption/interpolatedswaptionvolatilitycube.hpp|const Matrix & InterpolatedSwaptionVolatilityCube::volSpreads(Size i) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|static Real XabrModelTraits::extractGamma(const ext::shared_ptr<typename Model::Interpolation> &);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|static ext::shared_ptr<typename Model::SmileSection> XabrModelTraits::createSmileSection(Time optionTime, Real forward, const std::vector<Real> & params, Real shift, VolatilityType volatilityType);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Cube::Cube();+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Cube::Cube(const std::vector<Date> & optionDates, const std::vector<Period> & swapTenors, const std::vector<Time> & optionTimes, const std::vector<Time> & swapLengths, Size nLayers, bool extrapolation = true, bool backwardFlat = false);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Cube & Cube::operator=(const Cube & o);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Cube::Cube(const Cube &);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void Cube::setElement(Size IndexOfLayer, Size IndexOfRow, Size IndexOfColumn, Real x);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void Cube::setPoints(const std::vector<Matrix> & x);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void Cube::setPoint(const Date & optionDate, const Period & swapTenor, Time optionTime, Time swapLength, const std::vector<Real> & point);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void Cube::setLayer(Size i, const Matrix & x);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void Cube::expandLayers(Size i, bool expandOptionTimes, Size j, bool expandSwapLengths);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|const std::vector<Date> & Cube::optionDates() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|const std::vector<Period> & Cube::swapTenors() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|const std::vector<Time> & Cube::optionTimes() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|const std::vector<Time> & Cube::swapLengths() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|const std::vector<Matrix> & Cube::points() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|std::vector<Real> Cube::operator()(Time optionTime, Time swapLengths) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void Cube::updateInterpolators() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix Cube::browse() const;+|v|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|XabrSwaptionVolatilityCube::XabrSwaptionVolatilityCube<Model>(const Handle<SwaptionVolatilityStructure> & atmVolStructure, const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const std::vector<Spread> & strikeSpreads, const std::vector<std::vector<Handle<Quote>>> & volSpreads, const ext::shared_ptr<SwapIndex> & swapIndexBase, const ext::shared_ptr<SwapIndex> & shortSwapIndexBase, bool vegaWeightedSmileFit, std::vector<std::vector<Handle<Quote>>> parametersGuess, std::vector<bool> isParameterFixed, bool isAtmCalibrated, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), Real maxErrorTolerance = Null<Real>(), ext::shared_ptr<OptimizationMethod> optMethod = ext::shared_ptr<OptimizationMethod>(), Real errorAccept = Null<Real>(), bool useMaxError = false, Size maxGuesses = 50, bool backwardFlat = false, Real cutoffStrike = 0.0001, bool singlePassCalibration = false);+|x|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|const Matrix & XabrSwaptionVolatilityCube::marketVolCube(Size i) const;+|v|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix XabrSwaptionVolatilityCube::sparseSabrParameters() const;+|v|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix XabrSwaptionVolatilityCube::denseSabrParameters() const;+|v|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix XabrSwaptionVolatilityCube::marketVolCube() const;+|v|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix XabrSwaptionVolatilityCube::volCubeAtmCalibrated() const;+|x|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void XabrSwaptionVolatilityCube::sabrCalibrationSection(const Cube & marketVolCube, Cube & parametersCube, const Period & swapTenor) const;+|x|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void XabrSwaptionVolatilityCube::recalibration(Real beta, const Period & swapTenor);+|x|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void XabrSwaptionVolatilityCube::recalibration(const std::vector<Real> & beta, const Period & swapTenor);+|x|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void XabrSwaptionVolatilityCube::recalibration(const std::vector<Period> & swapLengths, const std::vector<Real> & beta, const Period & swapTenor);+|x|ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void XabrSwaptionVolatilityCube::updateAfterRecalibration();+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|PrivateObserver::PrivateObserver(XabrSwaptionVolatilityCube<Model> * v);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|XabrSwaptionVolatilityCube<Model>(const Handle<SwaptionVolatilityStructure> & atmVolStructure, const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const std::vector<Spread> & strikeSpreads, const std::vector<std::vector<Handle<Quote>>> & volSpreads, const ext::shared_ptr<SwapIndex> & swapIndexBase, const ext::shared_ptr<SwapIndex> & shortSwapIndexBase, bool vegaWeightedSmileFit, std::vector<std::vector<Handle<Quote>>> parametersGuess, std::vector<bool> isParameterFixed, bool isAtmCalibrated, ext::shared_ptr<EndCriteria> endCriteria, Real maxErrorTolerance, ext::shared_ptr<OptimizationMethod> optMethod, const Real errorAccept, const bool useMaxError, const Size maxGuesses, const bool backwardFlat, const Real cutoffStrike, const bool singlePassCalibration);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void registerWithParametersGuess();+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void setParameterGuess() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void performCalculations() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|typename XabrSwaptionVolatilityCube<Model>::Cube sabrCalibration(const Cube & marketVolCube) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void fillVolatilityCube(bool marketSpreads) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void createSparseSmiles() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|std::vector<Real> spreadVolInterpolation(const Date & atmOptionDate, const Period & atmSwapTenor, bool marketSpreads) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|ext::shared_ptr<SmileSection> smileSection(Time optionTime, Time swapLength, const Cube & sabrParametersCube) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|ext::shared_ptr<SmileSection> smileSectionImpl(Time optionTime, Time swapLength) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Cube(const std::vector<Date> & optionDates, const std::vector<Period> & swapTenors, const std::vector<Time> & optionTimes, const std::vector<Time> & swapLengths, Size nLayers, bool extrapolation, bool backwardFlat);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Cube(const Cube & o);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|typename XabrSwaptionVolatilityCube<Model>::Cube & operator=(const Cube & o);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|std::vector<Real> operator()(const Time optionTime, const Time swapLength) const;+|v|ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|SpreadedSwaptionVolatility::SpreadedSwaptionVolatility(const Handle<SwaptionVolatilityStructure> &, Handle<Quote> spread);+|?|ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|DayCounter dayCounter() const;+| |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Date maxDate() const;+| |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Time maxTime() const;+| |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|const Date & referenceDate() const;+|?|ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Calendar calendar() const;+| |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Natural settlementDays() const;+|x|ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Rate minStrike() const;+|x|ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Rate maxStrike() const;+| |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|const Period & maxSwapTenor() const;+| |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|Real shiftImpl(Time optionTime, Time swapLength) const;+| |ql/termstructures/volatility/swaption/spreadedswaptionvol.hpp|VolatilityType volatilityType() const;+|v|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|ConstantSwaptionVolatility::ConstantSwaptionVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Handle<Quote> volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real shift = 0.0);+|v|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|ConstantSwaptionVolatility::ConstantSwaptionVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Handle<Quote> volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real shift = 0.0);+|x|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|ConstantSwaptionVolatility::ConstantSwaptionVolatility(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real shift = 0.0);+|x|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|ConstantSwaptionVolatility::ConstantSwaptionVolatility(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, Volatility volatility, const DayCounter & dc, VolatilityType type = ShiftedLognormal, Real shift = 0.0);+| |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Real maxStrike() const;+| |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|const Period & maxSwapTenor() const;+| |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|VolatilityType volatilityType() const;+| |ql/termstructures/volatility/swaption/swaptionconstantvol.hpp|Real shiftImpl(Time optionTime, Time swapLength) const;+| |ql/termstructures/volatility/swaption/swaptionvolcube.hpp|SwaptionVolatilityCube::SwaptionVolatilityCube(const Handle<SwaptionVolatilityStructure> & atmVolStructure, const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const std::vector<Spread> & strikeSpreads, std::vector<std::vector<Handle<Quote>>> volSpreads, ext::shared_ptr<SwapIndex> swapIndexBase, ext::shared_ptr<SwapIndex> shortSwapIndexBase, bool vegaWeightedSmileFit);+|v|ql/termstructures/volatility/swaption/swaptionvolcube.hpp|Rate SwaptionVolatilityCube::atmStrike(const Date & optionDate, const Period & swapTenor) const;+|v|ql/termstructures/volatility/swaption/swaptionvolcube.hpp|Rate SwaptionVolatilityCube::atmStrike(const Period & optionTenor, const Period & swapTenor) const;+|x|ql/termstructures/volatility/swaption/swaptionvolcube.hpp|const std::vector<Spread> & SwaptionVolatilityCube::strikeSpreads() const;+|x|ql/termstructures/volatility/swaption/swaptionvolcube.hpp|const std::vector<std::vector<Handle<Quote>>> & SwaptionVolatilityCube::volSpreads() const;+|x|ql/termstructures/volatility/swaption/swaptionvolcube.hpp|ext::shared_ptr<SwapIndex> SwaptionVolatilityCube::swapIndexBase() const;+|x|ql/termstructures/volatility/swaption/swaptionvolcube.hpp|ext::shared_ptr<SwapIndex> SwaptionVolatilityCube::shortSwapIndexBase() const;+|x|ql/termstructures/volatility/swaption/swaptionvolcube.hpp|bool SwaptionVolatilityCube::vegaWeightedSmileFit() const;+| |ql/termstructures/volatility/swaption/swaptionvolcube.hpp|VolatilityType volatilityType() const;+| |ql/termstructures/volatility/swaption/swaptionvolcube.hpp|Volatility volatilityImpl(Time optionTime, Time swapLength, Rate strike) const;+| |ql/termstructures/volatility/swaption/swaptionvolcube.hpp|Volatility volatilityImpl(const Date & optionDate, const Period & swapTenor, Rate strike) const;+| |ql/termstructures/volatility/swaption/swaptionvolcube.hpp|Real shiftImpl(Time optionTime, Time swapLength) const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|SwaptionVolatilityDiscrete::SwaptionVolatilityDiscrete(const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc);+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|SwaptionVolatilityDiscrete::SwaptionVolatilityDiscrete(const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc);+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|SwaptionVolatilityDiscrete::SwaptionVolatilityDiscrete(const std::vector<Date> & optionDates, const std::vector<Period> & swapTenors, const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc);+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Period> & SwaptionVolatilityDiscrete::optionTenors() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Date> & SwaptionVolatilityDiscrete::optionDates() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Time> & SwaptionVolatilityDiscrete::optionTimes() const;+|x|ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Period> & SwaptionVolatilityDiscrete::swapTenors() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Time> & SwaptionVolatilityDiscrete::swapLengths() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|Date SwaptionVolatilityDiscrete::optionDateFromTime(Time optionTime) const;+|v|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|SwaptionVolatilityMatrix::SwaptionVolatilityMatrix(const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const std::vector<std::vector<Handle<Quote>>> & vols, const DayCounter & dayCounter, bool flatExtrapolation = false, VolatilityType type = ShiftedLognormal, const std::vector<std::vector<Real>> & shifts = std::vector<std::vector<Real>>());+|v|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|SwaptionVolatilityMatrix::SwaptionVolatilityMatrix(const Date & referenceDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const std::vector<std::vector<Handle<Quote>>> & vols, const DayCounter & dayCounter, bool flatExtrapolation = false, VolatilityType type = ShiftedLognormal, const std::vector<std::vector<Real>> & shifts = std::vector<std::vector<Real>>());+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|SwaptionVolatilityMatrix::SwaptionVolatilityMatrix(const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const Matrix & volatilities, const DayCounter & dayCounter, bool flatExtrapolation = false, VolatilityType type = ShiftedLognormal, const Matrix & shifts = Matrix());+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|SwaptionVolatilityMatrix::SwaptionVolatilityMatrix(const Date & referenceDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Period> & optionTenors, const std::vector<Period> & swapTenors, const Matrix & volatilities, const DayCounter & dayCounter, bool flatExtrapolation = false, VolatilityType type = ShiftedLognormal, const Matrix & shifts = Matrix());+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|SwaptionVolatilityMatrix::SwaptionVolatilityMatrix(const Date & referenceDate, const Calendar & calendar, BusinessDayConvention bdc, const std::vector<Date> & optionDates, const std::vector<Period> & swapTenors, const Matrix & volatilities, const DayCounter & dayCounter, bool flatExtrapolation = false, VolatilityType type = ShiftedLognormal, const Matrix & shifts = Matrix());+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|SwaptionVolatilityMatrix::SwaptionVolatilityMatrix(SwaptionVolatilityMatrix &&);+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|SwaptionVolatilityMatrix::SwaptionVolatilityMatrix(const SwaptionVolatilityMatrix &);+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|SwaptionVolatilityMatrix & SwaptionVolatilityMatrix::operator=(SwaptionVolatilityMatrix &&);+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|SwaptionVolatilityMatrix & SwaptionVolatilityMatrix::operator=(const SwaptionVolatilityMatrix &);+|v|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|std::pair<Size, Size> SwaptionVolatilityMatrix::locate(const Date & optionDate, const Period & swapTenor) const;+| |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|std::pair<Size, Size> SwaptionVolatilityMatrix::locate(Time optionTime, Time swapLength) const;+| |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Date maxDate() const;+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Rate minStrike() const;+|x|ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Rate maxStrike() const;+| |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|const Period & maxSwapTenor() const;+| |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Volatility volatilityImpl(Time optionTime, Time swapLength, Rate) const;+| |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|VolatilityType volatilityType() const;+| |ql/termstructures/volatility/swaption/swaptionvolmatrix.hpp|Real shiftImpl(Time optionTime, Time swapLength) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|SwaptionVolatilityStructure::SwaptionVolatilityStructure(BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|SwaptionVolatilityStructure::SwaptionVolatilityStructure(const Date & referenceDate, const Calendar & calendar, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|SwaptionVolatilityStructure::SwaptionVolatilityStructure(Natural settlementDays, const Calendar &, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility SwaptionVolatilityStructure::volatility(const Period & optionTenor, const Period & swapTenor, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility SwaptionVolatilityStructure::volatility(const Date & optionDate, const Period & swapTenor, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility SwaptionVolatilityStructure::volatility(Time optionTime, const Period & swapTenor, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility SwaptionVolatilityStructure::volatility(const Period & optionTenor, Time swapLength, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility SwaptionVolatilityStructure::volatility(const Date & optionDate, Time swapLength, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility SwaptionVolatilityStructure::volatility(Time optionTime, Time swapLength, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::blackVariance(const Period & optionTenor, const Period & swapTenor, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::blackVariance(const Date & optionDate, const Period & swapTenor, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::blackVariance(Time optionTime, const Period & swapTenor, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::blackVariance(const Period & optionTenor, Time swapLength, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::blackVariance(const Date & optionDate, Time swapLength, Rate strike, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::blackVariance(Time optionTime, Time swapLength, Rate strike, bool extrapolate = false) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::shift(const Period & optionTenor, const Period & swapTenor, bool extrapolate = false) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::shift(const Date & optionDate, const Period & swapTenor, bool extrapolate = false) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::shift(Time optionTime, const Period & swapTenor, bool extrapolate = false) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::shift(const Period & optionTenor, Time swapLength, bool extrapolate = false) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::shift(const Date & optionDate, Time swapLength, bool extrapolate = false) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real SwaptionVolatilityStructure::shift(Time optionTime, Time swapLength, bool extrapolate = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> SwaptionVolatilityStructure::smileSection(const Period & optionTenor, const Period & swapTenor, bool extr = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> SwaptionVolatilityStructure::smileSection(const Date & optionDate, const Period & swapTenor, bool extr = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> SwaptionVolatilityStructure::smileSection(Time optionTime, const Period & swapTenor, bool extr = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> SwaptionVolatilityStructure::smileSection(const Period & optionTenor, Time swapLength, bool extr = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> SwaptionVolatilityStructure::smileSection(const Date & optionDate, Time swapLength, bool extr = false) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> SwaptionVolatilityStructure::smileSection(Time optionTime, Time swapLength, bool extr = false) const;+|?|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|const Period & SwaptionVolatilityStructure::maxSwapTenor() const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Time SwaptionVolatilityStructure::maxSwapLength() const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|VolatilityType SwaptionVolatilityStructure::volatilityType() const;+|?|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Time SwaptionVolatilityStructure::swapLength(const Period & swapTenor) const;+|v|ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Time SwaptionVolatilityStructure::swapLength(const Date & start, const Date & end) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility volatility(const Period & optionTenor, const Period & swapTenor, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility volatility(const Period & optionTenor, Time swapLength, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real blackVariance(const Period & optionTenor, const Period & swapTenor, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real blackVariance(const Period & optionTenor, Time swapLength, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shift(const Period & optionTenor, const Period & swapTenor, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shift(const Period & optionTenor, Time swapLength, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> smileSection(const Period & optionTenor, const Period & swapTenor, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real blackVariance(const Date & optionDate, const Period & swapTenor, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real blackVariance(Time optionTime, const Period & swapTenor, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real blackVariance(const Date & optionDate, Time swapLength, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real blackVariance(Time optionTime, Time swapLength, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility volatility(const Date & optionDate, const Period & swapTenor, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility volatility(const Date & optionDate, Time swapLength, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility volatility(Time optionTime, const Period & swapTenor, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility volatility(Time optionTime, Time swapLength, Rate strike, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shift(const Date & optionDate, const Period & swapTenor, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shift(const Date & optionDate, Time swapLength, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shift(Time optionTime, const Period & swapTenor, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shift(Time optionTime, Time swapLength, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> smileSection(const Date & optionDate, const Period & swapTenor, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> smileSection(Time optionTime, const Period & swapTenor, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> smileSection(const Period & optionTenor, Time swapLength, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> smileSection(const Date & optionDate, Time swapLength, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> smileSection(Time optionTime, Time swapLength, bool extrapolate) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|ext::shared_ptr<SmileSection> smileSectionImpl(const Date & optionDate, const Period & swapT) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Volatility volatilityImpl(const Date & optionDate, const Period & swapTenor, Rate strike) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shiftImpl(const Date & optionDate, const Period & swapTenor) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Real shiftImpl(Time, Time) const;+|x|ql/termstructures/volatility/swaption/zabrswaptionvolatilitycube.hpp|static Real extractGamma(const ext::shared_ptr<typename Model::Interpolation> & interp);+|x|ql/termstructures/volatility/swaption/zabrswaptionvolatilitycube.hpp|static ext::shared_ptr<typename Model::SmileSection> createSmileSection(Time optionTime, Real forward, const std::vector<Real> & params, Real shift, VolatilityType);+| |ql/termstructures/volatility/volatilitytype.hpp|std::ostream & operator<<(std::ostream & out, const VolatilityType & t);+| |ql/termstructures/volatility/zabr.hpp|ZabrModel::ZabrModel(Real expiryTime, Real forward, Real alpha, Real beta, Real nu, Real rho, Real gamma);+| |ql/termstructures/volatility/zabr.hpp|Real ZabrModel::localVolatility(Real f) const;+| |ql/termstructures/volatility/zabr.hpp|std::vector<Real> ZabrModel::localVolatility(const std::vector<Real> & f) const;+| |ql/termstructures/volatility/zabr.hpp|Real ZabrModel::fdPrice(Real strike) const;+| |ql/termstructures/volatility/zabr.hpp|std::vector<Real> ZabrModel::fdPrice(const std::vector<Real> & strikes) const;+| |ql/termstructures/volatility/zabr.hpp|Real ZabrModel::fullFdPrice(Real strike) const;+| |ql/termstructures/volatility/zabr.hpp|Real ZabrModel::lognormalVolatility(Real strike) const;+| |ql/termstructures/volatility/zabr.hpp|std::vector<Real> ZabrModel::lognormalVolatility(const std::vector<Real> & strikes) const;+| |ql/termstructures/volatility/zabr.hpp|Real ZabrModel::normalVolatility(Real strike) const;+| |ql/termstructures/volatility/zabr.hpp|std::vector<Real> ZabrModel::normalVolatility(const std::vector<Real> & strikes) const;+|x|ql/termstructures/volatility/zabr.hpp|Real ZabrModel::forward() const;+|x|ql/termstructures/volatility/zabr.hpp|Real ZabrModel::expiryTime() const;+|x|ql/termstructures/volatility/zabr.hpp|Real ZabrModel::alpha() const;+|x|ql/termstructures/volatility/zabr.hpp|Real ZabrModel::beta() const;+| |ql/termstructures/volatility/zabr.hpp|Real ZabrModel::nu() const;+|x|ql/termstructures/volatility/zabr.hpp|Real ZabrModel::rho() const;+|x|ql/termstructures/volatility/zabr.hpp|Real ZabrModel::gamma() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection::ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool isGammaFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection::ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & vols, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed = false, bool isBetaFixed = false, bool isNuFixed = false, bool isRhoFixed = false, bool isGammaFixed = false, bool vegaWeighted = true, ext::shared_ptr<EndCriteria> endCriteria = ext::shared_ptr<EndCriteria>(), ext::shared_ptr<OptimizationMethod> method = ext::shared_ptr<OptimizationMethod>(), const DayCounter & dc = Actual365Fixed());+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::alpha() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::beta() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::nu() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::rho() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::gamma() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::rmsError() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real ZabrInterpolatedSmileSection::maxError() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|EndCriteria::Type ZabrInterpolatedSmileSection::endCriteria() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|void update();+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real volatilityImpl(Rate strike) const;+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real minStrike() const;+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real maxStrike() const;+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real atmLevel() const;+|v|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, Handle<Quote> forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, Handle<Quote> atmVolatility, const std::vector<Handle<Quote>> & volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed, bool isBetaFixed, bool isNuFixed, bool isRhoFixed, bool isGammaFixed, bool vegaWeighted, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<OptimizationMethod> method, const DayCounter & dc);+|x|ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|ZabrInterpolatedSmileSection<Evaluation>(const Date & optionDate, const Rate & forward, const std::vector<Rate> & strikes, bool hasFloatingStrikes, const Volatility & atmVolatility, const std::vector<Volatility> & volHandles, Real alpha, Real beta, Real nu, Real rho, Real gamma, bool isAlphaFixed, bool isBetaFixed, bool isNuFixed, bool isRhoFixed, bool isGammaFixed, bool vegaWeighted, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<OptimizationMethod> method, const DayCounter & dc);+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|void createInterpolation() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|void performCalculations() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real varianceImpl(Real strike) const;+|v|ql/termstructures/volatility/zabrsmilesection.hpp|ZabrSmileSection::ZabrSmileSection<Evaluation>(Time timeToExpiry, Rate forward, std::vector<Real> zabrParameters, const std::vector<Real> & moneyness = std::vector<Real>(), Size fdRefinement = 5);+|v|ql/termstructures/volatility/zabrsmilesection.hpp|ZabrSmileSection::ZabrSmileSection<Evaluation>(const Date & d, Rate forward, std::vector<Real> zabrParameters, const DayCounter & dc = Actual365Fixed(), const std::vector<Real> & moneyness = std::vector<Real>(), Size fdRefinement = 5);+| |ql/termstructures/volatility/zabrsmilesection.hpp|ext::shared_ptr<ZabrModel> ZabrSmileSection::model();+| |ql/termstructures/volatility/zabrsmilesection.hpp|ZabrSmileSection<Evaluation>(Time timeToExpiry, Rate forward, std::vector<Real> zabrParams, const std::vector<Real> & moneyness, const Size fdRefinement);+| |ql/termstructures/volatility/zabrsmilesection.hpp|ZabrSmileSection<Evaluation>(const Date & d, Rate forward, std::vector<Real> zabrParams, const DayCounter & dc, const std::vector<Real> & moneyness, const Size fdRefinement);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init(const std::vector<Real> &, ZabrShortMaturityLognormal);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init(const std::vector<Real> & a, ZabrShortMaturityNormal);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init(const std::vector<Real> & moneyness, ZabrLocalVolatility);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init(const std::vector<Real> & moneyness, ZabrFullFd);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init2(ZabrShortMaturityLognormal);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init2(ZabrShortMaturityNormal);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init2(ZabrLocalVolatility);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init2(ZabrFullFd);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init3(ZabrShortMaturityLognormal);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init3(ZabrShortMaturityNormal);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init3(ZabrLocalVolatility);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|void init3(ZabrFullFd);+|x|ql/termstructures/volatility/zabrsmilesection.hpp|Real optionPrice(Real strike, Option::Type type, Real discount, ZabrShortMaturityLognormal) const;+|x|ql/termstructures/volatility/zabrsmilesection.hpp|Real optionPrice(Real strike, Option::Type type, Real discount, ZabrShortMaturityNormal) const;+|x|ql/termstructures/volatility/zabrsmilesection.hpp|Real optionPrice(Rate strike, Option::Type type, Real discount, ZabrLocalVolatility) const;+|x|ql/termstructures/volatility/zabrsmilesection.hpp|Real optionPrice(Rate strike, Option::Type type, Real discount, ZabrFullFd) const;+|x|ql/termstructures/volatility/zabrsmilesection.hpp|Real volatilityImpl(Rate strike, ZabrShortMaturityLognormal) const;+|x|ql/termstructures/volatility/zabrsmilesection.hpp|Real volatilityImpl(Rate strike, ZabrShortMaturityNormal) const;+|x|ql/termstructures/volatility/zabrsmilesection.hpp|Real volatilityImpl(Rate strike, ZabrLocalVolatility) const;+|x|ql/termstructures/volatility/zabrsmilesection.hpp|Real volatilityImpl(Rate strike, ZabrFullFd) const;+| |ql/termstructures/voltermstructure.hpp|VolatilityTermStructure::VolatilityTermStructure(BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/termstructures/voltermstructure.hpp|VolatilityTermStructure::VolatilityTermStructure(const Date & referenceDate, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+| |ql/termstructures/voltermstructure.hpp|VolatilityTermStructure::VolatilityTermStructure(Natural settlementDays, const Calendar & cal, BusinessDayConvention bdc, const DayCounter & dc = DayCounter());+|x|ql/termstructures/voltermstructure.hpp|BusinessDayConvention VolatilityTermStructure::businessDayConvention() const;+|v|ql/termstructures/voltermstructure.hpp|Date VolatilityTermStructure::optionDateFromTenor(const Period &) const;+|v|ql/termstructures/voltermstructure.hpp|Rate VolatilityTermStructure::minStrike() const;+|v|ql/termstructures/voltermstructure.hpp|Rate VolatilityTermStructure::maxStrike() const;+|v|ql/termstructures/voltermstructure.hpp|Date optionDateFromTenor(const Period & p) const;+|v|ql/termstructures/yield/bondhelpers.hpp|BondHelper::BondHelper(const Handle<Quote> & price, const ext::shared_ptr<Bond> & bond, Bond::Price::Type priceType = Bond::Price::Clean);+|x|ql/termstructures/yield/bondhelpers.hpp|Real BondHelper::impliedQuote() const;+|x|ql/termstructures/yield/bondhelpers.hpp|void BondHelper::setTermStructure(YieldTermStructure *);+|v|ql/termstructures/yield/bondhelpers.hpp|ext::shared_ptr<Bond> BondHelper::bond() const;+|x|ql/termstructures/yield/bondhelpers.hpp|Bond::Price::Type BondHelper::priceType() const;+|x|ql/termstructures/yield/bondhelpers.hpp|void BondHelper::accept(AcyclicVisitor &);+|u|ql/termstructures/yield/bondhelpers.hpp|FixedRateBondHelper::FixedRateBondHelper(const Handle<Quote> & price, Natural settlementDays, Real faceAmount, Schedule schedule, const std::vector<Rate> & coupons, const DayCounter & dayCounter, BusinessDayConvention paymentConv = Following, Real redemption = 100.0, const Date & issueDate = Date(), const Calendar & paymentCalendar = Calendar(), const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false, Bond::Price::Type priceType = Bond::Price::Clean);+|v|ql/termstructures/yield/bondhelpers.hpp|CPIBondHelper::CPIBondHelper(const Handle<Quote> & price, Natural settlementDays, Real faceAmount, Real baseCPI, const Period & observationLag, const ext::shared_ptr<ZeroInflationIndex> & cpiIndex, CPI::InterpolationType observationInterpolation, Schedule schedule, const std::vector<Rate> & fixedRate, const DayCounter & accrualDayCounter, BusinessDayConvention paymentConvention = Following, const Date & issueDate = Date(), const Calendar & paymentCalendar = Calendar(), const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false, Bond::Price::Type priceType = Bond::Price::Clean);+|x|ql/termstructures/yield/bondhelpers.hpp|CPIBondHelper::CPIBondHelper(const Handle<Quote> & price, Natural settlementDays, Real faceAmount, bool growthOnly, Real baseCPI, const Period & observationLag, const ext::shared_ptr<ZeroInflationIndex> & cpiIndex, CPI::InterpolationType observationInterpolation, Schedule schedule, const std::vector<Rate> & fixedRate, const DayCounter & accrualDayCounter, BusinessDayConvention paymentConvention = Following, const Date & issueDate = Date(), const Calendar & paymentCalendar = Calendar(), const Period & exCouponPeriod = Period(), const Calendar & exCouponCalendar = Calendar(), BusinessDayConvention exCouponConvention = Unadjusted, bool exCouponEndOfMonth = false, Bond::Price::Type priceType = Bond::Price::Clean);+| |ql/termstructures/yield/bootstraptraits.hpp|static Date Discount::initialDate(const YieldTermStructure * c);+| |ql/termstructures/yield/bootstraptraits.hpp|static Real Discount::initialValue(const YieldTermStructure *);+| |ql/termstructures/yield/bootstraptraits.hpp|static void Discount::updateGuess(std::vector<Real> & data, Real discount, Size i);+| |ql/termstructures/yield/bootstraptraits.hpp|static Size Discount::maxIterations();+| |ql/termstructures/yield/bootstraptraits.hpp|static Date ZeroYield::initialDate(const YieldTermStructure * c);+| |ql/termstructures/yield/bootstraptraits.hpp|static Real ZeroYield::initialValue(const YieldTermStructure *);+| |ql/termstructures/yield/bootstraptraits.hpp|static void ZeroYield::updateGuess(std::vector<Real> & data, Real rate, Size i);+| |ql/termstructures/yield/bootstraptraits.hpp|static Size ZeroYield::maxIterations();+| |ql/termstructures/yield/bootstraptraits.hpp|static Date ForwardRate::initialDate(const YieldTermStructure * c);+| |ql/termstructures/yield/bootstraptraits.hpp|static Real ForwardRate::initialValue(const YieldTermStructure *);+| |ql/termstructures/yield/bootstraptraits.hpp|static void ForwardRate::updateGuess(std::vector<Real> & data, Real forward, Size i);+| |ql/termstructures/yield/bootstraptraits.hpp|static Size ForwardRate::maxIterations();+| |ql/termstructures/yield/bootstraptraits.hpp|static Date SimpleZeroYield::initialDate(const YieldTermStructure * c);+| |ql/termstructures/yield/bootstraptraits.hpp|static Real SimpleZeroYield::initialValue(const YieldTermStructure *);+| |ql/termstructures/yield/bootstraptraits.hpp|static void SimpleZeroYield::updateGuess(std::vector<Real> & data, Real rate, Size i);+| |ql/termstructures/yield/bootstraptraits.hpp|static Size SimpleZeroYield::maxIterations();+|v|ql/termstructures/yield/compositezeroyieldstructure.hpp|CompositeZeroYieldStructure::CompositeZeroYieldStructure<BinaryFunction>(Handle<YieldTermStructure> h1, Handle<YieldTermStructure> h2, const BinaryFunction & f, Compounding comp = Continuous, Frequency freq = NoFrequency);+|v|ql/termstructures/yield/compositezeroyieldstructure.hpp|CompositeZeroYieldStructure<BinaryFunction>(Handle<YieldTermStructure> h1, Handle<YieldTermStructure> h2, const BinaryFunction & f, Compounding comp, Frequency freq);+|?|ql/termstructures/yield/compositezeroyieldstructure.hpp|DayCounter dayCounter() const;+|?|ql/termstructures/yield/compositezeroyieldstructure.hpp|Calendar calendar() const;+| |ql/termstructures/yield/compositezeroyieldstructure.hpp|Natural settlementDays() const;+| |ql/termstructures/yield/compositezeroyieldstructure.hpp|const Date & referenceDate() const;+| |ql/termstructures/yield/compositezeroyieldstructure.hpp|Date maxDate() const;+| |ql/termstructures/yield/compositezeroyieldstructure.hpp|Time maxTime() const;+| |ql/termstructures/yield/compositezeroyieldstructure.hpp|void update();+| |ql/termstructures/yield/compositezeroyieldstructure.hpp|Rate zeroYieldImpl(Time t) const;+|v|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve::InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & dfs, const DayCounter & dayCounter, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve::InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & dfs, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve::InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & dfs, const DayCounter & dayCounter, const Interpolator & interpolator);+| |ql/termstructures/yield/discountcurve.hpp|const std::vector<Time> & InterpolatedDiscountCurve::times() const;+|x|ql/termstructures/yield/discountcurve.hpp|const std::vector<Date> & InterpolatedDiscountCurve::dates() const;+| |ql/termstructures/yield/discountcurve.hpp|const std::vector<Real> & InterpolatedDiscountCurve::data() const;+| |ql/termstructures/yield/discountcurve.hpp|const std::vector<DiscountFactor> & InterpolatedDiscountCurve::discounts() const;+| |ql/termstructures/yield/discountcurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedDiscountCurve::nodes() const;+| |ql/termstructures/yield/discountcurve.hpp|Date maxDate() const;+| |ql/termstructures/yield/discountcurve.hpp|DiscountFactor discountImpl(Time t) const;+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & discounts, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & discounts, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/yield/discountcurve.hpp|InterpolatedDiscountCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<DiscountFactor> & discounts, const DayCounter & dayCounter, const T & interpolator);+| |ql/termstructures/yield/discountcurve.hpp|void initialize();+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(Natural settlementDays, const Calendar & calendar, std::vector<ext::shared_ptr<BondHelper>> bonds, const DayCounter & dayCounter, const FittingMethod & fittingMethod, Real accuracy = 1.0e-10, Size maxEvaluations = 10000, Array guess = Array(), Real simplexLambda = 1.0, Size maxStationaryStateIterations = 100);+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(const Date & referenceDate, std::vector<ext::shared_ptr<BondHelper>> bonds, const DayCounter & dayCounter, const FittingMethod & fittingMethod, Real accuracy = 1.0e-10, Size maxEvaluations = 10000, Array guess = Array(), Real simplexLambda = 1.0, Size maxStationaryStateIterations = 100);+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(Natural settlementDays, const Calendar & calendar, const FittingMethod & fittingMethod, Array parameters, Date maxDate, const DayCounter & dayCounter);+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|FittedBondDiscountCurve::FittedBondDiscountCurve(const Date & referenceDate, const FittingMethod & fittingMethod, Array parameters, Date maxDate, const DayCounter & dayCounter);+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Size FittedBondDiscountCurve::numberOfBonds() const;+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Date FittedBondDiscountCurve::maxDate() const;+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|const FittingMethod & FittedBondDiscountCurve::fitResults() const;+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|void FittedBondDiscountCurve::resetGuess(const Array & guess);+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Size FittingMethod::size() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array FittingMethod::solution() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Integer FittingMethod::numberOfIterations() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Real FittingMethod::minimumCostValue() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|EndCriteria::Type FittingMethod::errorCode() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|std::unique_ptr<FittingMethod> FittingMethod::clone() const;+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|bool FittingMethod::constrainAtZero() const;+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array FittingMethod::weights() const;+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array FittingMethod::l2() const;+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|ext::shared_ptr<OptimizationMethod> FittingMethod::optimizationMethod() const;+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|const Constraint & FittingMethod::constraint() const;+|v|ql/termstructures/yield/fittedbonddiscountcurve.hpp|DiscountFactor FittingMethod::discount(const Array & x, Time t) const;+|x|ql/termstructures/yield/fittedbonddiscountcurve.hpp|const FittedBondDiscountCurve::FittingMethod & fitResults() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|void update();+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|void setup();+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|DiscountFactor discountImpl(Time t) const;+|v|ql/termstructures/yield/flatforward.hpp|FlatForward::FlatForward(const Date & referenceDate, Handle<Quote> forward, const DayCounter & dayCounter, Compounding compounding = Continuous, Frequency frequency = Annual);+|x|ql/termstructures/yield/flatforward.hpp|FlatForward::FlatForward(const Date & referenceDate, Rate forward, const DayCounter & dayCounter, Compounding compounding = Continuous, Frequency frequency = Annual);+|v|ql/termstructures/yield/flatforward.hpp|FlatForward::FlatForward(Natural settlementDays, const Calendar & calendar, Handle<Quote> forward, const DayCounter & dayCounter, Compounding compounding = Continuous, Frequency frequency = Annual);+|x|ql/termstructures/yield/flatforward.hpp|FlatForward::FlatForward(Natural settlementDays, const Calendar & calendar, Rate forward, const DayCounter & dayCounter, Compounding compounding = Continuous, Frequency frequency = Annual);+|x|ql/termstructures/yield/flatforward.hpp|Compounding FlatForward::compounding() const;+|x|ql/termstructures/yield/flatforward.hpp|Frequency FlatForward::compoundingFrequency() const;+| |ql/termstructures/yield/flatforward.hpp|void update();+| |ql/termstructures/yield/flatforward.hpp|DiscountFactor discountImpl(Time t) const;+| |ql/termstructures/yield/flatforward.hpp|void performCalculations() const;+|v|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve::InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & cal = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve::InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve::InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Interpolator & interpolator);+| |ql/termstructures/yield/forwardcurve.hpp|const std::vector<Time> & InterpolatedForwardCurve::times() const;+|x|ql/termstructures/yield/forwardcurve.hpp|const std::vector<Date> & InterpolatedForwardCurve::dates() const;+| |ql/termstructures/yield/forwardcurve.hpp|const std::vector<Real> & InterpolatedForwardCurve::data() const;+| |ql/termstructures/yield/forwardcurve.hpp|const std::vector<Rate> & InterpolatedForwardCurve::forwards() const;+| |ql/termstructures/yield/forwardcurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedForwardCurve::nodes() const;+| |ql/termstructures/yield/forwardcurve.hpp|Date maxDate() const;+| |ql/termstructures/yield/forwardcurve.hpp|Rate zeroYieldImpl(Time t) const;+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/yield/forwardcurve.hpp|InterpolatedForwardCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & forwards, const DayCounter & dayCounter, const T & interpolator);+| |ql/termstructures/yield/forwardcurve.hpp|void initialize();+|v|ql/termstructures/yield/forwardspreadedtermstructure.hpp|ForwardSpreadedTermStructure::ForwardSpreadedTermStructure(Handle<YieldTermStructure>, Handle<Quote> spread);+|v|ql/termstructures/yield/forwardspreadedtermstructure.hpp|ForwardSpreadedTermStructure(Handle<YieldTermStructure> h, Handle<Quote> spread);+|?|ql/termstructures/yield/forwardspreadedtermstructure.hpp|DayCounter dayCounter() const;+|?|ql/termstructures/yield/forwardspreadedtermstructure.hpp|Calendar calendar() const;+| |ql/termstructures/yield/forwardspreadedtermstructure.hpp|Natural settlementDays() const;+| |ql/termstructures/yield/forwardspreadedtermstructure.hpp|const Date & referenceDate() const;+| |ql/termstructures/yield/forwardspreadedtermstructure.hpp|Date maxDate() const;+| |ql/termstructures/yield/forwardspreadedtermstructure.hpp|Time maxTime() const;+| |ql/termstructures/yield/forwardspreadedtermstructure.hpp|void update();+| |ql/termstructures/yield/forwardspreadedtermstructure.hpp|Rate zeroYieldImpl(Time t) const;+| |ql/termstructures/yield/forwardstructure.hpp|ForwardRateStructure::ForwardRateStructure(const DayCounter & dayCounter = DayCounter());+| |ql/termstructures/yield/forwardstructure.hpp|ForwardRateStructure::ForwardRateStructure(const Date & referenceDate, const Calendar & cal = Calendar(), const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/yield/forwardstructure.hpp|ForwardRateStructure::ForwardRateStructure(Natural settlementDays, const Calendar & cal, const DayCounter & dayCounter = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+|v|ql/termstructures/yield/impliedtermstructure.hpp|ImpliedTermStructure::ImpliedTermStructure(Handle<YieldTermStructure>, const Date & referenceDate);+|v|ql/termstructures/yield/impliedtermstructure.hpp|ImpliedTermStructure(Handle<YieldTermStructure> h, const Date & referenceDate);+|?|ql/termstructures/yield/impliedtermstructure.hpp|DayCounter dayCounter() const;+|?|ql/termstructures/yield/impliedtermstructure.hpp|Calendar calendar() const;+| |ql/termstructures/yield/impliedtermstructure.hpp|Natural settlementDays() const;+| |ql/termstructures/yield/impliedtermstructure.hpp|Date maxDate() const;+| |ql/termstructures/yield/impliedtermstructure.hpp|void update();+| |ql/termstructures/yield/impliedtermstructure.hpp|DiscountFactor discountImpl(Time t) const;+|v|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve::InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { });+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve::InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve::InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Interpolator & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Time> & InterpolatedSimpleZeroCurve::times() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Date> & InterpolatedSimpleZeroCurve::dates() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Real> & InterpolatedSimpleZeroCurve::data() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Rate> & InterpolatedSimpleZeroCurve::zeroRates() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedSimpleZeroCurve::nodes() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|Date maxDate() const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|DiscountFactor discountImpl(Time t) const;+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|v|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|InterpolatedSimpleZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/interpolatedsimplezerocurve.hpp|void initialize();+|v|ql/termstructures/yield/multipleresetsswaphelper.hpp|MultipleResetsSwapRateHelper::MultipleResetsSwapRateHelper(Natural settlementDays, const Period & tenor, const std::variant<Rate, Handle<Quote>> & fixedRate, const ext::shared_ptr<IborIndex> & iborIndex, Size resetsPerCoupon, Handle<YieldTermStructure> discountingCurve = { }, RateAveraging::Type averagingMethod = RateAveraging::Compound, Spread spread = 0.0, Frequency fixedFrequency = NoFrequency, const DayCounter & fixedDayCount = DayCounter(), BusinessDayConvention fixedConvention = ModifiedFollowing);+|x|ql/termstructures/yield/multipleresetsswaphelper.hpp|Real MultipleResetsSwapRateHelper::impliedQuote() const;+|x|ql/termstructures/yield/multipleresetsswaphelper.hpp|void MultipleResetsSwapRateHelper::setTermStructure(YieldTermStructure *);+|x|ql/termstructures/yield/multipleresetsswaphelper.hpp|void MultipleResetsSwapRateHelper::accept(AcyclicVisitor &);+|v|ql/termstructures/yield/nonlinearfittingmethods.hpp|ExponentialSplinesFitting::ExponentialSplinesFitting(bool constrainAtZero = true, const Array & weights = Array(), const ext::shared_ptr<OptimizationMethod> & optimizationMethod = { }, const Array & l2 = Array(), Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Size numCoeffs = 9, Real fixedKappa = Null<Real>(), Constraint constraint = NoConstraint());+|x|ql/termstructures/yield/nonlinearfittingmethods.hpp|ExponentialSplinesFitting::ExponentialSplinesFitting(bool constrainAtZero, const Array & weights, const Array & l2, Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Size numCoeffs = 9, Real fixedKappa = Null<Real>(), Constraint constraint = NoConstraint());+|x|ql/termstructures/yield/nonlinearfittingmethods.hpp|ExponentialSplinesFitting::ExponentialSplinesFitting(bool constrainAtZero, Size numCoeffs, Real fixedKappa, const Array & weights = Array(), Constraint constraint = NoConstraint());+|v|ql/termstructures/yield/nonlinearfittingmethods.hpp|NelsonSiegelFitting::NelsonSiegelFitting(const Array & weights = Array(), const ext::shared_ptr<OptimizationMethod> & optimizationMethod = { }, const Array & l2 = Array(), Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+|x|ql/termstructures/yield/nonlinearfittingmethods.hpp|NelsonSiegelFitting::NelsonSiegelFitting(const Array & weights, const Array & l2, Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+|v|ql/termstructures/yield/nonlinearfittingmethods.hpp|SvenssonFitting::SvenssonFitting(const Array & weights = Array(), const ext::shared_ptr<OptimizationMethod> & optimizationMethod = { }, const Array & l2 = Array(), Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+|x|ql/termstructures/yield/nonlinearfittingmethods.hpp|SvenssonFitting::SvenssonFitting(const Array & weights, const Array & l2, Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+|v|ql/termstructures/yield/nonlinearfittingmethods.hpp|CubicBSplinesFitting::CubicBSplinesFitting(const std::vector<Time> & knotVector, bool constrainAtZero = true, const Array & weights = Array(), const ext::shared_ptr<OptimizationMethod> & optimizationMethod = { }, const Array & l2 = Array(), Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+|x|ql/termstructures/yield/nonlinearfittingmethods.hpp|CubicBSplinesFitting::CubicBSplinesFitting(const std::vector<Time> & knotVector, bool constrainAtZero, const Array & weights, const Array & l2, Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+| |ql/termstructures/yield/nonlinearfittingmethods.hpp|Real CubicBSplinesFitting::basisFunction(Integer i, Time t) const;+| |ql/termstructures/yield/nonlinearfittingmethods.hpp|NaturalCubicFitting::NaturalCubicFitting(const std::vector<Time> & knotTimes, const Array & weights = Array(), const ext::shared_ptr<OptimizationMethod> & optimizationMethod = { }, const Array & l2 = Array(), Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+| |ql/termstructures/yield/nonlinearfittingmethods.hpp|NaturalCubicFitting::NaturalCubicFitting(const std::vector<Time> & knotTimes, const Array & weights, const Array & l2, Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+|v|ql/termstructures/yield/nonlinearfittingmethods.hpp|SimplePolynomialFitting::SimplePolynomialFitting(Natural degree, bool constrainAtZero = true, const Array & weights = Array(), const ext::shared_ptr<OptimizationMethod> & optimizationMethod = { }, const Array & l2 = Array(), Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+|x|ql/termstructures/yield/nonlinearfittingmethods.hpp|SimplePolynomialFitting::SimplePolynomialFitting(Natural degree, bool constrainAtZero, const Array & weights, const Array & l2, Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL, Constraint constraint = NoConstraint());+| |ql/termstructures/yield/nonlinearfittingmethods.hpp|SpreadFittingMethod::SpreadFittingMethod(const ext::shared_ptr<FittingMethod> & method, Handle<YieldTermStructure> discountCurve, Real minCutoffTime = 0.0, Real maxCutoffTime = QL_MAX_REAL);+|v|ql/termstructures/yield/oisratehelper.hpp|OISRateHelper::OISRateHelper(Natural settlementDays, const Period & tenor, const std::variant<Rate, Handle<Quote>> & fixedRate, const ext::shared_ptr<OvernightIndex> & overnightIndex, Handle<YieldTermStructure> discountingCurve = { }, bool telescopicValueDates = false, Integer paymentLag = 0, BusinessDayConvention paymentConvention = Following, Frequency paymentFrequency = Annual, Calendar paymentCalendar = Calendar(), const Period & forwardStart = 0 * Days, const std::variant<Spread, Handle<Quote>> & overnightSpread = Spread(0.0), Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), RateAveraging::Type averagingMethod = RateAveraging::Compound, std::optional<bool> endOfMonth = std::nullopt, std::optional<Frequency> fixedPaymentFrequency = std::nullopt, Calendar fixedCalendar = Calendar(), Natural lookbackDays = Null<Natural>(), Natural lockoutDays = 0, bool applyObservationShift = false, ext::shared_ptr<FloatingRateCouponPricer> pricer = { }, DateGeneration::Rule rule = DateGeneration::Backward, Calendar overnightCalendar = Calendar(), BusinessDayConvention convention = ModifiedFollowing, DayCounter fixedDayCount = DayCounter());+|v|ql/termstructures/yield/oisratehelper.hpp|OISRateHelper::OISRateHelper(const Date & startDate, const Date & endDate, const std::variant<Rate, Handle<Quote>> & fixedRate, const ext::shared_ptr<OvernightIndex> & overnightIndex, Handle<YieldTermStructure> discountingCurve = { }, bool telescopicValueDates = false, Integer paymentLag = 0, BusinessDayConvention paymentConvention = Following, Frequency paymentFrequency = Annual, Calendar paymentCalendar = Calendar(), const std::variant<Spread, Handle<Quote>> & overnightSpread = Spread(0.0), Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), RateAveraging::Type averagingMethod = RateAveraging::Compound, std::optional<bool> endOfMonth = std::nullopt, std::optional<Frequency> fixedPaymentFrequency = std::nullopt, Calendar fixedCalendar = Calendar(), Natural lookbackDays = Null<Natural>(), Natural lockoutDays = 0, bool applyObservationShift = false, ext::shared_ptr<FloatingRateCouponPricer> pricer = { }, DateGeneration::Rule rule = DateGeneration::Backward, Calendar overnightCalendar = Calendar(), BusinessDayConvention convention = ModifiedFollowing, DayCounter fixedDayCount = DayCounter());+|x|ql/termstructures/yield/oisratehelper.hpp|Real OISRateHelper::impliedQuote() const;+|x|ql/termstructures/yield/oisratehelper.hpp|void OISRateHelper::setTermStructure(YieldTermStructure *);+|v|ql/termstructures/yield/oisratehelper.hpp|ext::shared_ptr<OvernightIndexedSwap> OISRateHelper::swap() const;+|x|ql/termstructures/yield/oisratehelper.hpp|void OISRateHelper::accept(AcyclicVisitor &);+|v|ql/termstructures/yield/overnightindexfutureratehelper.hpp|OvernightIndexFutureRateHelper::OvernightIndexFutureRateHelper(const Handle<Quote> & price, const Date & valueDate, const Date & maturityDate, const ext::shared_ptr<OvernightIndex> & overnightIndex, const Handle<Quote> & convexityAdjustment = { }, RateAveraging::Type averagingMethod = RateAveraging::Compound, Pillar::Choice pillar = Pillar::LastRelevantDate, const Date & customPillarDate = Date());+|x|ql/termstructures/yield/overnightindexfutureratehelper.hpp|Real OvernightIndexFutureRateHelper::impliedQuote() const;+|x|ql/termstructures/yield/overnightindexfutureratehelper.hpp|void OvernightIndexFutureRateHelper::setTermStructure(YieldTermStructure *);+|x|ql/termstructures/yield/overnightindexfutureratehelper.hpp|void OvernightIndexFutureRateHelper::accept(AcyclicVisitor &);+|v|ql/termstructures/yield/overnightindexfutureratehelper.hpp|Real OvernightIndexFutureRateHelper::convexityAdjustment() const;+|v|ql/termstructures/yield/overnightindexfutureratehelper.hpp|SofrFutureRateHelper::SofrFutureRateHelper(const std::variant<Rate, Handle<Quote>> & price, Month referenceMonth, Year referenceYear, Frequency referenceFreq, const std::variant<Rate, Handle<Quote>> & convexityAdjustment = 0.0, Pillar::Choice pillar = Pillar::LastRelevantDate, const Date & customPillarDate = Date());+|v|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure::InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Interpolator factory = Interpolator());+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure::InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, const DayCounter & dc, Interpolator factory = Interpolator());+|v|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, T factory);+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|InterpolatedPiecewiseForwardSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, const DayCounter & dc, T factory);+|?|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|DayCounter dayCounter() const;+|?|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Calendar calendar() const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Natural settlementDays() const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|const Date & referenceDate() const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Date maxDate() const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Rate zeroYieldImpl(Time t) const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Spread calcSpread(Time t) const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Spread calcSpreadPrimitive(Time t) const;+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|void update();+|x|ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|void updateInterpolation();+|v|ql/termstructures/yield/piecewisespreadyieldcurve.hpp|PiecewiseSpreadYieldCurve::PiecewiseSpreadYieldCurve<Traits, Interpolator, Bootstrap>(Handle<YieldTermStructure> baseCurve, std::vector<ext::shared_ptr<typename traits_type::helper>> instruments, const Interpolator & i = { }, typename base_curve::bootstrap_type bootstrap = { });+|?|ql/termstructures/yield/piecewiseyieldcurve.hpp|PiecewiseYieldCurve::PiecewiseYieldCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & i = { }, bootstrap_type bootstrap = { });+|?|ql/termstructures/yield/piecewiseyieldcurve.hpp|PiecewiseYieldCurve::PiecewiseYieldCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, const Interpolator & i, bootstrap_type bootstrap = { });+|?|ql/termstructures/yield/piecewiseyieldcurve.hpp|PiecewiseYieldCurve::PiecewiseYieldCurve<Traits, Interpolator, Bootstrap>(const Date & referenceDate, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, bootstrap_type bootstrap);+|v|ql/termstructures/yield/piecewiseyieldcurve.hpp|PiecewiseYieldCurve::PiecewiseYieldCurve<Traits, Interpolator, Bootstrap>(Natural settlementDays, const Calendar & calendar, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & i = { }, bootstrap_type bootstrap = { });+|?|ql/termstructures/yield/piecewiseyieldcurve.hpp|PiecewiseYieldCurve::PiecewiseYieldCurve<Traits, Interpolator, Bootstrap>(Natural settlementDays, const Calendar & calendar, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, const Interpolator & i, bootstrap_type bootstrap = { });+|?|ql/termstructures/yield/piecewiseyieldcurve.hpp|PiecewiseYieldCurve::PiecewiseYieldCurve<Traits, Interpolator, Bootstrap>(Natural settlementDays, const Calendar & calendar, std::vector<ext::shared_ptr<typename Traits::helper>> instruments, const DayCounter & dayCounter, bootstrap_type bootstrap);+|x|ql/termstructures/yield/piecewiseyieldcurve.hpp|Date PiecewiseYieldCurve::maxDate() const;+|x|ql/termstructures/yield/piecewiseyieldcurve.hpp|const std::vector<Time> & PiecewiseYieldCurve::times() const;+|x|ql/termstructures/yield/piecewiseyieldcurve.hpp|const std::vector<Date> & PiecewiseYieldCurve::dates() const;+|x|ql/termstructures/yield/piecewiseyieldcurve.hpp|const std::vector<Real> & PiecewiseYieldCurve::data() const;+|x|ql/termstructures/yield/piecewiseyieldcurve.hpp|std::vector<std::pair<Date, Real>> PiecewiseYieldCurve::nodes() const;+| |ql/termstructures/yield/piecewiseyieldcurve.hpp|void update();+| |ql/termstructures/yield/piecewiseyieldcurve.hpp|DiscountFactor discountImpl(Time t) const;+| |ql/termstructures/yield/piecewiseyieldcurve.hpp|void performCalculations() const;+|v|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure::InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp = Continuous, Frequency freq = NoFrequency, Interpolator factory = Interpolator());+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure::InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure>, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp, Frequency freq, const DayCounter & dc, Interpolator factory = Interpolator());+|v|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp, Frequency freq, T factory);+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|InterpolatedPiecewiseZeroSpreadedTermStructure<Interpolator>(Handle<YieldTermStructure> h, std::vector<Handle<Quote>> spreads, std::vector<Date> dates, Compounding comp, Frequency freq, const DayCounter & dc, T factory);+|?|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|DayCounter dayCounter() const;+|?|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Calendar calendar() const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Natural settlementDays() const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|const Date & referenceDate() const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Date maxDate() const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Rate zeroYieldImpl(Time t) const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Spread calcSpread(Time t) const;+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|void update();+|x|ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|void updateInterpolation();+|v|ql/termstructures/yield/quantotermstructure.hpp|QuantoTermStructure::QuantoTermStructure(const Handle<YieldTermStructure> & underlyingDividendTS, Handle<YieldTermStructure> riskFreeTS, Handle<YieldTermStructure> foreignRiskFreeTS, Handle<BlackVolTermStructure> underlyingBlackVolTS, Real strike, Handle<BlackVolTermStructure> exchRateBlackVolTS, Real exchRateATMlevel, Real underlyingExchRateCorrelation);+|?|ql/termstructures/yield/quantotermstructure.hpp|DayCounter dayCounter() const;+|?|ql/termstructures/yield/quantotermstructure.hpp|Calendar calendar() const;+| |ql/termstructures/yield/quantotermstructure.hpp|Natural settlementDays() const;+| |ql/termstructures/yield/quantotermstructure.hpp|const Date & referenceDate() const;+| |ql/termstructures/yield/quantotermstructure.hpp|Date maxDate() const;+| |ql/termstructures/yield/quantotermstructure.hpp|Rate zeroYieldImpl(Time t) const;+|v|ql/termstructures/yield/ratehelpers.hpp|FuturesRateHelper::FuturesRateHelper(const std::variant<Real, Handle<Quote>> & price, const Date & iborStartDate, Natural lengthInMonths, const Calendar & calendar, BusinessDayConvention convention, bool endOfMonth, const DayCounter & dayCounter, const std::variant<Real, Handle<Quote>> & convexityAdjustment = 0.0, Futures::Type type = Futures::IMM);+|v|ql/termstructures/yield/ratehelpers.hpp|FuturesRateHelper::FuturesRateHelper(const std::variant<Real, Handle<Quote>> & price, const Date & iborStartDate, const Date & iborEndDate, const DayCounter & dayCounter, const std::variant<Real, Handle<Quote>> & convexityAdjustment = 0.0, Futures::Type type = Futures::IMM);+|v|ql/termstructures/yield/ratehelpers.hpp|FuturesRateHelper::FuturesRateHelper(const std::variant<Real, Handle<Quote>> & price, const Date & iborStartDate, const ext::shared_ptr<IborIndex> & iborIndex, const std::variant<Real, Handle<Quote>> & convexityAdjustment = 0.0, Futures::Type type = Futures::IMM);+|x|ql/termstructures/yield/ratehelpers.hpp|Real FuturesRateHelper::impliedQuote() const;+|v|ql/termstructures/yield/ratehelpers.hpp|Real FuturesRateHelper::convexityAdjustment() const;+|x|ql/termstructures/yield/ratehelpers.hpp|void FuturesRateHelper::accept(AcyclicVisitor &);+|v|ql/termstructures/yield/ratehelpers.hpp|DepositRateHelper::DepositRateHelper(const std::variant<Rate, Handle<Quote>> & rate, const Period & tenor, Natural fixingDays, const Calendar & calendar, BusinessDayConvention convention, bool endOfMonth, const DayCounter & dayCounter);+|v|ql/termstructures/yield/ratehelpers.hpp|DepositRateHelper::DepositRateHelper(const std::variant<Rate, Handle<Quote>> & rate, const ext::shared_ptr<IborIndex> & iborIndex);+|v|ql/termstructures/yield/ratehelpers.hpp|DepositRateHelper::DepositRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Date fixingDate, const ext::shared_ptr<IborIndex> & iborIndex);+|x|ql/termstructures/yield/ratehelpers.hpp|Real DepositRateHelper::impliedQuote() const;+|x|ql/termstructures/yield/ratehelpers.hpp|void DepositRateHelper::setTermStructure(YieldTermStructure *);+|x|ql/termstructures/yield/ratehelpers.hpp|void DepositRateHelper::accept(AcyclicVisitor &);+|v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Natural monthsToStart, Natural monthsToEnd, Natural fixingDays, const Calendar & calendar, BusinessDayConvention convention, bool endOfMonth, const DayCounter & dayCounter, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);+|v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Natural monthsToStart, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);+|v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Period periodToStart, Natural lengthInMonths, Natural fixingDays, const Calendar & calendar, BusinessDayConvention convention, bool endOfMonth, const DayCounter & dayCounter, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);+|v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Period periodToStart, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);+|v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Natural immOffsetStart, Natural immOffsetEnd, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);+|v|ql/termstructures/yield/ratehelpers.hpp|FraRateHelper::FraRateHelper(const std::variant<Rate, Handle<Quote>> & rate, Date startDate, Date endDate, const ext::shared_ptr<IborIndex> & iborIndex, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool useIndexedCoupon = true);+|x|ql/termstructures/yield/ratehelpers.hpp|Real FraRateHelper::impliedQuote() const;+|x|ql/termstructures/yield/ratehelpers.hpp|void FraRateHelper::setTermStructure(YieldTermStructure *);+|x|ql/termstructures/yield/ratehelpers.hpp|void FraRateHelper::accept(AcyclicVisitor &);+|v|ql/termstructures/yield/ratehelpers.hpp|SwapRateHelper::SwapRateHelper(const std::variant<Rate, Handle<Quote>> & rate, const ext::shared_ptr<SwapIndex> & swapIndex, Handle<Quote> spread = { }, const Period & fwdStart = 0 * Days, Handle<YieldTermStructure> discountingCurve = { }, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool endOfMonth = false, const std::optional<bool> & useIndexedCoupons = std::nullopt, const ext::shared_ptr<FloatingRateCouponPricer> & couponPricer = { });+|v|ql/termstructures/yield/ratehelpers.hpp|SwapRateHelper::SwapRateHelper(const std::variant<Rate, Handle<Quote>> & rate, const Period & tenor, Calendar calendar, Frequency fixedFrequency, BusinessDayConvention fixedConvention, DayCounter fixedDayCount, const ext::shared_ptr<IborIndex> & iborIndex, Handle<Quote> spread = { }, const Period & fwdStart = 0 * Days, Handle<YieldTermStructure> discountingCurve = { }, Natural settlementDays = Null<Natural>(), Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool endOfMonth = false, const std::optional<bool> & useIndexedCoupons = std::nullopt, const std::optional<BusinessDayConvention> & floatConvention = std::nullopt, const ext::shared_ptr<FloatingRateCouponPricer> & couponPricer = { });+|v|ql/termstructures/yield/ratehelpers.hpp|SwapRateHelper::SwapRateHelper(const std::variant<Rate, Handle<Quote>> & rate, const Date & startDate, const Date & endDate, Calendar calendar, Frequency fixedFrequency, BusinessDayConvention fixedConvention, DayCounter fixedDayCount, const ext::shared_ptr<IborIndex> & iborIndex, Handle<Quote> spread = { }, Handle<YieldTermStructure> discountingCurve = { }, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date(), bool endOfMonth = false, const std::optional<bool> & useIndexedCoupons = std::nullopt, const std::optional<BusinessDayConvention> & floatConvention = std::nullopt, const ext::shared_ptr<FloatingRateCouponPricer> & couponPricer = { });+|x|ql/termstructures/yield/ratehelpers.hpp|Real SwapRateHelper::impliedQuote() const;+|x|ql/termstructures/yield/ratehelpers.hpp|void SwapRateHelper::setTermStructure(YieldTermStructure *);+|x|ql/termstructures/yield/ratehelpers.hpp|Spread SwapRateHelper::spread() const;+|v|ql/termstructures/yield/ratehelpers.hpp|ext::shared_ptr<VanillaSwap> SwapRateHelper::swap() const;+|x|ql/termstructures/yield/ratehelpers.hpp|const Period & SwapRateHelper::forwardStart() const;+|x|ql/termstructures/yield/ratehelpers.hpp|void SwapRateHelper::accept(AcyclicVisitor &);+|?|ql/termstructures/yield/ratehelpers.hpp|BMASwapRateHelper::BMASwapRateHelper(const Handle<Quote> & liborFraction, const Period & tenor, Natural settlementDays, Calendar calendar, const Period & bmaPeriod, BusinessDayConvention bmaConvention, DayCounter bmaDayCount, ext::shared_ptr<BMAIndex> bmaIndex, ext::shared_ptr<IborIndex> index);+| |ql/termstructures/yield/ratehelpers.hpp|Real BMASwapRateHelper::impliedQuote() const;+| |ql/termstructures/yield/ratehelpers.hpp|void BMASwapRateHelper::setTermStructure(YieldTermStructure *);+| |ql/termstructures/yield/ratehelpers.hpp|void BMASwapRateHelper::accept(AcyclicVisitor &);+|v|ql/termstructures/yield/ratehelpers.hpp|FxSwapRateHelper::FxSwapRateHelper(const Handle<Quote> & fwdPoint, Handle<Quote> spotFx, const Period & tenor, Natural fixingDays, Calendar calendar, BusinessDayConvention convention, bool endOfMonth, bool isFxBaseCurrencyCollateralCurrency, Handle<YieldTermStructure> collateralCurve, Calendar tradingCalendar = Calendar());+|v|ql/termstructures/yield/ratehelpers.hpp|FxSwapRateHelper::FxSwapRateHelper(const Handle<Quote> & fwdPoint, Handle<Quote> spotFx, const Date & startDate, const Date & endDate, bool isFxBaseCurrencyCollateralCurrency, Handle<YieldTermStructure> collateralCurve);+|x|ql/termstructures/yield/ratehelpers.hpp|Real FxSwapRateHelper::impliedQuote() const;+|x|ql/termstructures/yield/ratehelpers.hpp|void FxSwapRateHelper::setTermStructure(YieldTermStructure *);+|x|ql/termstructures/yield/ratehelpers.hpp|Real FxSwapRateHelper::spot() const;+|x|ql/termstructures/yield/ratehelpers.hpp|Period FxSwapRateHelper::tenor() const;+|x|ql/termstructures/yield/ratehelpers.hpp|Natural FxSwapRateHelper::fixingDays() const;+|x|ql/termstructures/yield/ratehelpers.hpp|Calendar FxSwapRateHelper::calendar() const;+|x|ql/termstructures/yield/ratehelpers.hpp|BusinessDayConvention FxSwapRateHelper::businessDayConvention() const;+|x|ql/termstructures/yield/ratehelpers.hpp|bool FxSwapRateHelper::endOfMonth() const;+|x|ql/termstructures/yield/ratehelpers.hpp|bool FxSwapRateHelper::isFxBaseCurrencyCollateralCurrency() const;+|x|ql/termstructures/yield/ratehelpers.hpp|Calendar FxSwapRateHelper::tradingCalendar() const;+|x|ql/termstructures/yield/ratehelpers.hpp|Calendar FxSwapRateHelper::adjustmentCalendar() const;+|x|ql/termstructures/yield/ratehelpers.hpp|void FxSwapRateHelper::accept(AcyclicVisitor &);+|v|ql/termstructures/yield/spreaddiscountcurve.hpp|InterpolatedSpreadDiscountCurve::InterpolatedSpreadDiscountCurve<Interpolator>(Handle<YieldTermStructure> baseCurve, std::vector<Date> dates, std::vector<DiscountFactor> dfs, const Interpolator & interpolator = { });+|x|ql/termstructures/yield/spreaddiscountcurve.hpp|const Handle<YieldTermStructure> & InterpolatedSpreadDiscountCurve::baseCurve() const;+|x|ql/termstructures/yield/spreaddiscountcurve.hpp|const std::vector<Time> & InterpolatedSpreadDiscountCurve::times() const;+|x|ql/termstructures/yield/spreaddiscountcurve.hpp|const std::vector<Date> & InterpolatedSpreadDiscountCurve::dates() const;+|x|ql/termstructures/yield/spreaddiscountcurve.hpp|const std::vector<Real> & InterpolatedSpreadDiscountCurve::data() const;+|x|ql/termstructures/yield/spreaddiscountcurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedSpreadDiscountCurve::nodes() const;+|v|ql/termstructures/yield/spreaddiscountcurve.hpp|InterpolatedSpreadDiscountCurve<Interpolator>(Handle<YieldTermStructure> baseCurve, std::vector<Date> dates, std::vector<DiscountFactor> dfs, const T & interpolator);+| |ql/termstructures/yield/spreaddiscountcurve.hpp|InterpolatedSpreadDiscountCurve<Interpolator>(Handle<YieldTermStructure> baseCurve, const T & interpolator);+|?|ql/termstructures/yield/spreaddiscountcurve.hpp|DayCounter dayCounter() const;+|?|ql/termstructures/yield/spreaddiscountcurve.hpp|Calendar calendar() const;+| |ql/termstructures/yield/spreaddiscountcurve.hpp|Natural settlementDays() const;+| |ql/termstructures/yield/spreaddiscountcurve.hpp|const Date & referenceDate() const;+| |ql/termstructures/yield/spreaddiscountcurve.hpp|Date maxDate() const;+| |ql/termstructures/yield/spreaddiscountcurve.hpp|DiscountFactor discountImpl(Time t) const;+| |ql/termstructures/yield/spreaddiscountcurve.hpp|DiscountFactor calcSpread(Time t) const;+| |ql/termstructures/yield/spreaddiscountcurve.hpp|void update();+| |ql/termstructures/yield/spreaddiscountcurve.hpp|void updateInterpolation();+|v|ql/termstructures/yield/ultimateforwardtermstructure.hpp|UltimateForwardTermStructure::UltimateForwardTermStructure(Handle<YieldTermStructure>, Handle<Quote> lastLiquidForwardRate, Handle<Quote> ultimateForwardRate, const Period & firstSmoothingPoint, Real alpha, const std::optional<Integer> & roundingDigits = std::nullopt, Compounding compounding = Compounded, Frequency frequency = Annual);+|v|ql/termstructures/yield/ultimateforwardtermstructure.hpp|UltimateForwardTermStructure(Handle<YieldTermStructure> h, Handle<Quote> lastLiquidForwardRate, Handle<Quote> ultimateForwardRate, const Period & firstSmoothingPoint, Real alpha, const std::optional<Integer> & roundingDigits, Compounding compounding, Frequency frequency);+|?|ql/termstructures/yield/ultimateforwardtermstructure.hpp|DayCounter dayCounter() const;+|?|ql/termstructures/yield/ultimateforwardtermstructure.hpp|Calendar calendar() const;+| |ql/termstructures/yield/ultimateforwardtermstructure.hpp|Natural settlementDays() const;+| |ql/termstructures/yield/ultimateforwardtermstructure.hpp|const Date & referenceDate() const;+| |ql/termstructures/yield/ultimateforwardtermstructure.hpp|Date maxDate() const;+| |ql/termstructures/yield/ultimateforwardtermstructure.hpp|void update();+| |ql/termstructures/yield/ultimateforwardtermstructure.hpp|Rate applyRounding(Rate r, Time t) const;+| |ql/termstructures/yield/ultimateforwardtermstructure.hpp|Rate zeroYieldImpl(Time t) const;+|u|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve::InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar = Calendar(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { }, const Interpolator & interpolator = { }, Compounding compounding = Continuous, Frequency frequency = Annual);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve::InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const Interpolator & interpolator, Compounding compounding = Continuous, Frequency frequency = Annual);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve::InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Interpolator & interpolator, Compounding compounding = Continuous, Frequency frequency = Annual);+| |ql/termstructures/yield/zerocurve.hpp|const std::vector<Time> & InterpolatedZeroCurve::times() const;+|x|ql/termstructures/yield/zerocurve.hpp|const std::vector<Date> & InterpolatedZeroCurve::dates() const;+| |ql/termstructures/yield/zerocurve.hpp|const std::vector<Real> & InterpolatedZeroCurve::data() const;+| |ql/termstructures/yield/zerocurve.hpp|const std::vector<Rate> & InterpolatedZeroCurve::zeroRates() const;+| |ql/termstructures/yield/zerocurve.hpp|std::vector<std::pair<Date, Real>> InterpolatedZeroCurve::nodes() const;+| |ql/termstructures/yield/zerocurve.hpp|Date maxDate() const;+| |ql/termstructures/yield/zerocurve.hpp|Rate zeroYieldImpl(Time t) const;+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const DayCounter & dayCounter, const T & interpolator);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const Date & referenceDate, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(Natural settlementDays, const Calendar & calendar, const DayCounter & dayCounter, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator);+|u|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const std::vector<Handle<Quote>> & jumps, const std::vector<Date> & jumpDates, const T & interpolator, Compounding compounding, Frequency frequency);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const Calendar & calendar, const T & interpolator, Compounding compounding, Frequency frequency);+|x|ql/termstructures/yield/zerocurve.hpp|InterpolatedZeroCurve<Interpolator>(const std::vector<Date> & dates, const std::vector<Rate> & yields, const DayCounter & dayCounter, const T & interpolator, Compounding compounding, Frequency frequency);+| |ql/termstructures/yield/zerocurve.hpp|void initialize(const Compounding & compounding, const Frequency & frequency);+|v|ql/termstructures/yield/zerospreadedtermstructure.hpp|ZeroSpreadedTermStructure::ZeroSpreadedTermStructure(Handle<YieldTermStructure>, Handle<Quote> spread, Compounding comp = Continuous, Frequency freq = NoFrequency);+|x|ql/termstructures/yield/zerospreadedtermstructure.hpp|ZeroSpreadedTermStructure::ZeroSpreadedTermStructure(Handle<YieldTermStructure>, Handle<Quote> spread, Compounding comp, Frequency freq, const DayCounter & dc);+|v|ql/termstructures/yield/zerospreadedtermstructure.hpp|ZeroSpreadedTermStructure(Handle<YieldTermStructure> h, Handle<Quote> spread, Compounding comp, Frequency freq);+|x|ql/termstructures/yield/zerospreadedtermstructure.hpp|ZeroSpreadedTermStructure(Handle<YieldTermStructure> h, Handle<Quote> spread, Compounding comp, Frequency freq, const DayCounter & dc);+|?|ql/termstructures/yield/zerospreadedtermstructure.hpp|DayCounter dayCounter() const;+|?|ql/termstructures/yield/zerospreadedtermstructure.hpp|Calendar calendar() const;+| |ql/termstructures/yield/zerospreadedtermstructure.hpp|Natural settlementDays() const;+| |ql/termstructures/yield/zerospreadedtermstructure.hpp|const Date & referenceDate() const;+| |ql/termstructures/yield/zerospreadedtermstructure.hpp|Date maxDate() const;+| |ql/termstructures/yield/zerospreadedtermstructure.hpp|Time maxTime() const;+| |ql/termstructures/yield/zerospreadedtermstructure.hpp|void update();+| |ql/termstructures/yield/zerospreadedtermstructure.hpp|Rate zeroYieldImpl(Time t) const;+| |ql/termstructures/yield/zeroyieldstructure.hpp|ZeroYieldStructure::ZeroYieldStructure(const DayCounter & dc = DayCounter());+| |ql/termstructures/yield/zeroyieldstructure.hpp|ZeroYieldStructure::ZeroYieldStructure(const Date & referenceDate, const Calendar & calendar = Calendar(), const DayCounter & dc = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/yield/zeroyieldstructure.hpp|ZeroYieldStructure::ZeroYieldStructure(Natural settlementDays, const Calendar & calendar, const DayCounter & dc = DayCounter(), const std::vector<Handle<Quote>> & jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/yield/zeroyieldstructure.hpp|DiscountFactor discountImpl(Time t) const;+| |ql/termstructures/yieldtermstructure.hpp|YieldTermStructure::YieldTermStructure(const DayCounter & dc = DayCounter());+| |ql/termstructures/yieldtermstructure.hpp|YieldTermStructure::YieldTermStructure(const Date & referenceDate, const Calendar & cal = Calendar(), const DayCounter & dc = DayCounter(), std::vector<Handle<Quote>> jumps = { }, const std::vector<Date> & jumpDates = { });+| |ql/termstructures/yieldtermstructure.hpp|YieldTermStructure::YieldTermStructure(Natural settlementDays, const Calendar & cal, const DayCounter & dc = DayCounter(), std::vector<Handle<Quote>> jumps = { }, const std::vector<Date> & jumpDates = { });+|v|ql/termstructures/yieldtermstructure.hpp|DiscountFactor YieldTermStructure::discount(const Date & d, bool extrapolate = false) const;+|v|ql/termstructures/yieldtermstructure.hpp|DiscountFactor YieldTermStructure::discount(Time t, bool extrapolate = false) const;+|v|ql/termstructures/yieldtermstructure.hpp|InterestRate YieldTermStructure::zeroRate(const Date & d, const DayCounter & resultDayCounter, Compounding comp, Frequency freq = Annual, bool extrapolate = false) const;+|v|ql/termstructures/yieldtermstructure.hpp|InterestRate YieldTermStructure::zeroRate(Time t, Compounding comp, Frequency freq = Annual, bool extrapolate = false) const;+|v|ql/termstructures/yieldtermstructure.hpp|InterestRate YieldTermStructure::forwardRate(const Date & d1, const Date & d2, const DayCounter & resultDayCounter, Compounding comp, Frequency freq = Annual, bool extrapolate = false) const;+|x|ql/termstructures/yieldtermstructure.hpp|InterestRate YieldTermStructure::forwardRate(const Date & d, const Period & p, const DayCounter & resultDayCounter, Compounding comp, Frequency freq = Annual, bool extrapolate = false) const;+|v|ql/termstructures/yieldtermstructure.hpp|InterestRate YieldTermStructure::forwardRate(Time t1, Time t2, Compounding comp, Frequency freq = Annual, bool extrapolate = false) const;+| |ql/termstructures/yieldtermstructure.hpp|const std::vector<Date> & YieldTermStructure::jumpDates() const;+| |ql/termstructures/yieldtermstructure.hpp|const std::vector<Time> & YieldTermStructure::jumpTimes() const;+| |ql/termstructures/yieldtermstructure.hpp|DiscountFactor discount(const Date & d, bool extrapolate) const;+| |ql/termstructures/yieldtermstructure.hpp|InterestRate forwardRate(const Date & d, const Period & p, const DayCounter & dayCounter, Compounding comp, Frequency freq, bool extrapolate) const;+| |ql/time/asx.hpp|static bool ASX::isASXdate(const Date & d, bool mainCycle = true);+| |ql/time/asx.hpp|static bool ASX::isASXcode(const std::string & in, bool mainCycle = true);+| |ql/time/asx.hpp|static std::string ASX::code(const Date & asxDate);+| |ql/time/asx.hpp|static Date ASX::date(const std::string & asxCode, const Date & referenceDate = Date());+| |ql/time/asx.hpp|static Date ASX::nextDate(const Date & d = Date(), bool mainCycle = true);+| |ql/time/asx.hpp|static Date ASX::nextDate(const std::string & asxCode, bool mainCycle = true, const Date & referenceDate = Date());+| |ql/time/asx.hpp|static std::string ASX::nextCode(const Date & d = Date(), bool mainCycle = true);+| |ql/time/asx.hpp|static std::string ASX::nextCode(const std::string & asxCode, bool mainCycle = true, const Date & referenceDate = Date());+| |ql/time/businessdayconvention.hpp|std::ostream & operator<<(std::ostream &, BusinessDayConvention);+| |ql/time/calendar.hpp|std::string Impl::name() const;+| |ql/time/calendar.hpp|bool Impl::isBusinessDay(const Date &) const;+| |ql/time/calendar.hpp|bool Impl::isWeekend(Weekday) const;+|?|ql/time/calendar.hpp|Calendar::Calendar();+| |ql/time/calendar.hpp|bool Calendar::empty() const;+|v|ql/time/calendar.hpp|std::string Calendar::name() const;+| |ql/time/calendar.hpp|const std::set<Date> & Calendar::addedHolidays() const;+| |ql/time/calendar.hpp|const std::set<Date> & Calendar::removedHolidays() const;+| |ql/time/calendar.hpp|void Calendar::resetAddedAndRemovedHolidays();+|v|ql/time/calendar.hpp|bool Calendar::isBusinessDay(const Date & d) const;+|v|ql/time/calendar.hpp|bool Calendar::isHoliday(const Date & d) const;+|v|ql/time/calendar.hpp|bool Calendar::isWeekend(Weekday w) const;+| |ql/time/calendar.hpp|bool Calendar::isStartOfMonth(const Date & d) const;+| |ql/time/calendar.hpp|Date Calendar::startOfMonth(const Date & d) const;+|v|ql/time/calendar.hpp|bool Calendar::isEndOfMonth(const Date & d) const;+|v|ql/time/calendar.hpp|Date Calendar::endOfMonth(const Date & d) const;+|v|ql/time/calendar.hpp|void Calendar::addHoliday(const Date &);+|v|ql/time/calendar.hpp|void Calendar::removeHoliday(const Date &);+|?|ql/time/calendar.hpp|std::vector<Date> Calendar::holidayList(const Date & from, const Date & to, bool includeWeekEnds = false) const;+| |ql/time/calendar.hpp|std::vector<Date> Calendar::businessDayList(const Date & from, const Date & to) const;+|v|ql/time/calendar.hpp|Date Calendar::adjust(const Date &, BusinessDayConvention convention = Following) const;+|v|ql/time/calendar.hpp|Date Calendar::advance(const Date &, Integer n, TimeUnit unit, BusinessDayConvention convention = Following, bool endOfMonth = false) const;+|?|ql/time/calendar.hpp|Date Calendar::advance(const Date & date, const Period & period, BusinessDayConvention convention = Following, bool endOfMonth = false) const;+|v|ql/time/calendar.hpp|Date::serial_type Calendar::businessDaysBetween(const Date & from, const Date & to, bool includeFirst = true, bool includeLast = false) const;+| |ql/time/calendar.hpp|static Day WesternImpl::easterMonday(Year);+| |ql/time/calendar.hpp|static Day OrthodoxImpl::easterMonday(Year);+| |ql/time/calendar.hpp|bool operator==(const Calendar &, const Calendar &);+| |ql/time/calendar.hpp|bool operator!=(const Calendar &, const Calendar &);+| |ql/time/calendar.hpp|std::ostream & operator<<(std::ostream &, const Calendar &);+|x|ql/time/calendar.hpp|bool operator==(const Calendar & c1, const Calendar & c2);+|x|ql/time/calendar.hpp|bool operator!=(const Calendar & c1, const Calendar & c2);+|x|ql/time/calendar.hpp|std::ostream & operator<<(std::ostream & out, const Calendar & c);+|v|ql/time/calendars/argentina.hpp|Argentina::Argentina(Market m = Merval);+|v|ql/time/calendars/australia.hpp|Australia::Australia(Market market = Settlement);+|v|ql/time/calendars/austria.hpp|Austria::Austria(Market market = Settlement);+|x|ql/time/calendars/bespokecalendar.hpp|Impl::Impl(std::string name = "");+|x|ql/time/calendars/bespokecalendar.hpp|std::string Impl::name() const;+|x|ql/time/calendars/bespokecalendar.hpp|bool Impl::isWeekend(Weekday) const;+|x|ql/time/calendars/bespokecalendar.hpp|bool Impl::isBusinessDay(const Date &) const;+|x|ql/time/calendars/bespokecalendar.hpp|void Impl::addWeekend(Weekday);+|?|ql/time/calendars/bespokecalendar.hpp|BespokeCalendar::BespokeCalendar(const std::string & name = "");+|x|ql/time/calendars/bespokecalendar.hpp|void BespokeCalendar::addWeekend(Weekday);+|v|ql/time/calendars/botswana.hpp|std::string Impl::name() const;+|v|ql/time/calendars/botswana.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/botswana.hpp|Botswana::Botswana();+|v|ql/time/calendars/brazil.hpp|Brazil::Brazil(Market market = Settlement);+|v|ql/time/calendars/canada.hpp|Canada::Canada(Market market = Settlement);+|v|ql/time/calendars/chile.hpp|Chile::Chile(Market m = SSE);+|v|ql/time/calendars/china.hpp|IbImpl::IbImpl();+|v|ql/time/calendars/china.hpp|China::China(Market m = SSE);+|v|ql/time/calendars/croatia.hpp|Croatia::Croatia(Market m = ZSE);+|v|ql/time/calendars/czechrepublic.hpp|CzechRepublic::CzechRepublic(Market m = PSE);+|v|ql/time/calendars/denmark.hpp|std::string Impl::name() const;+|v|ql/time/calendars/denmark.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/denmark.hpp|Denmark::Denmark();+|v|ql/time/calendars/finland.hpp|std::string Impl::name() const;+|v|ql/time/calendars/finland.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/finland.hpp|Finland::Finland();+|v|ql/time/calendars/france.hpp|France::France(Market market = Settlement);+|v|ql/time/calendars/germany.hpp|Germany::Germany(Market market = FrankfurtStockExchange);+|v|ql/time/calendars/hongkong.hpp|HongKong::HongKong(Market m = HKEx);+|v|ql/time/calendars/hungary.hpp|std::string Impl::name() const;+|v|ql/time/calendars/hungary.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/hungary.hpp|Hungary::Hungary();+|v|ql/time/calendars/iceland.hpp|Iceland::Iceland(Market m = ICEX);+|v|ql/time/calendars/india.hpp|India::India(Market m = NSE);+|v|ql/time/calendars/indonesia.hpp|Indonesia::Indonesia(Market m = IDX);+| |ql/time/calendars/islamicholidays.hpp|bool isEidAlFitr(const Date &);+| |ql/time/calendars/islamicholidays.hpp|bool isEidAlAdha(const Date &);+|v|ql/time/calendars/israel.hpp|Israel::Israel(Market market = TASE);+|v|ql/time/calendars/italy.hpp|Italy::Italy(Market market = Settlement);+|v|ql/time/calendars/japan.hpp|std::string Impl::name() const;+|v|ql/time/calendars/japan.hpp|bool Impl::isWeekend(Weekday) const;+|v|ql/time/calendars/japan.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/japan.hpp|Japan::Japan();+|x|ql/time/calendars/jointcalendar.hpp|Impl::Impl(const Calendar &, const Calendar &, JointCalendarRule);+|x|ql/time/calendars/jointcalendar.hpp|Impl::Impl(const Calendar &, const Calendar &, const Calendar &, JointCalendarRule);+|x|ql/time/calendars/jointcalendar.hpp|Impl::Impl(const Calendar &, const Calendar &, const Calendar &, const Calendar &, JointCalendarRule);+|x|ql/time/calendars/jointcalendar.hpp|Impl::Impl(std::vector<Calendar>, JointCalendarRule);+|x|ql/time/calendars/jointcalendar.hpp|std::string Impl::name() const;+|x|ql/time/calendars/jointcalendar.hpp|bool Impl::isWeekend(Weekday) const;+|x|ql/time/calendars/jointcalendar.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/jointcalendar.hpp|JointCalendar::JointCalendar(const Calendar &, const Calendar &, JointCalendarRule = JoinHolidays);+|v|ql/time/calendars/jointcalendar.hpp|JointCalendar::JointCalendar(const Calendar &, const Calendar &, const Calendar &, JointCalendarRule = JoinHolidays);+|v|ql/time/calendars/jointcalendar.hpp|JointCalendar::JointCalendar(const Calendar &, const Calendar &, const Calendar &, const Calendar &, JointCalendarRule = JoinHolidays);+|?|ql/time/calendars/jointcalendar.hpp|JointCalendar::JointCalendar(const std::vector<Calendar> &, JointCalendarRule = JoinHolidays);+|v|ql/time/calendars/malta.hpp|Malta::Malta(Market market = MSE);+|v|ql/time/calendars/mexico.hpp|Mexico::Mexico(Market m = BMV);+|v|ql/time/calendars/montenegro.hpp|Montenegro::Montenegro(Market m = MNSE);+|v|ql/time/calendars/newzealand.hpp|NewZealand::NewZealand(Market market = Wellington);+|v|ql/time/calendars/northmacedonia.hpp|NorthMacedonia::NorthMacedonia(Market m = MSE);+|v|ql/time/calendars/norway.hpp|std::string Impl::name() const;+|v|ql/time/calendars/norway.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/norway.hpp|Norway::Norway();+|v|ql/time/calendars/nullcalendar.hpp|std::string Impl::name() const;+|v|ql/time/calendars/nullcalendar.hpp|bool Impl::isWeekend(Weekday) const;+|v|ql/time/calendars/nullcalendar.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/nullcalendar.hpp|NullCalendar::NullCalendar();+|v|ql/time/calendars/poland.hpp|Poland::Poland(Market market = Settlement);+|v|ql/time/calendars/romania.hpp|Romania::Romania(Market market = BVB);+|v|ql/time/calendars/russia.hpp|Russia::Russia(Market = Settlement);+|v|ql/time/calendars/saudiarabia.hpp|SaudiArabia::SaudiArabia(Market m = Tadawul);+|v|ql/time/calendars/serbia.hpp|Serbia::Serbia(Market m = BSE);+|v|ql/time/calendars/singapore.hpp|Singapore::Singapore(Market m = SGX);+|v|ql/time/calendars/slovakia.hpp|Slovakia::Slovakia(Market m = BSSE);+|v|ql/time/calendars/slovenia.hpp|Slovenia::Slovenia(Market m = LSE);+|v|ql/time/calendars/southafrica.hpp|std::string Impl::name() const;+|v|ql/time/calendars/southafrica.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/southafrica.hpp|SouthAfrica::SouthAfrica();+|v|ql/time/calendars/southkorea.hpp|SouthKorea::SouthKorea(Market m = KRX);+|v|ql/time/calendars/sweden.hpp|std::string Impl::name() const;+|v|ql/time/calendars/sweden.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/sweden.hpp|Sweden::Sweden();+|v|ql/time/calendars/switzerland.hpp|std::string Impl::name() const;+|v|ql/time/calendars/switzerland.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/switzerland.hpp|Switzerland::Switzerland();+|v|ql/time/calendars/taiwan.hpp|Taiwan::Taiwan(Market m = TSEC);+|v|ql/time/calendars/target.hpp|std::string Impl::name() const;+|v|ql/time/calendars/target.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/target.hpp|TARGET::TARGET();+|v|ql/time/calendars/thailand.hpp|Thailand::Thailand();+|v|ql/time/calendars/turkey.hpp|std::string Impl::name() const;+|v|ql/time/calendars/turkey.hpp|bool Impl::isWeekend(Weekday) const;+|v|ql/time/calendars/turkey.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/turkey.hpp|Turkey::Turkey();+|v|ql/time/calendars/ukraine.hpp|Ukraine::Ukraine(Market m = USE);+|v|ql/time/calendars/unitedkingdom.hpp|UnitedKingdom::UnitedKingdom(Market market = Settlement);+|v|ql/time/calendars/unitedstates.hpp|UnitedStates::UnitedStates(Market market);+|v|ql/time/calendars/uzbekistan.hpp|std::string Impl::name() const;+|v|ql/time/calendars/uzbekistan.hpp|bool Impl::isBusinessDay(const Date &) const;+|v|ql/time/calendars/uzbekistan.hpp|Uzbekistan::Uzbekistan(Market market = UZSE);+| |ql/time/calendars/weekendsonly.hpp|std::string Impl::name() const;+| |ql/time/calendars/weekendsonly.hpp|bool Impl::isBusinessDay(const Date &) const;+| |ql/time/calendars/weekendsonly.hpp|WeekendsOnly::WeekendsOnly();+| |ql/time/date.hpp|std::ostream & operator<<(std::ostream &, Month);+| |ql/time/date.hpp|Date::Date();+| |ql/time/date.hpp|Date::Date(Date::serial_type serialNumber);+| |ql/time/date.hpp|Date::Date(Day d, Month m, Year y);+| |ql/time/date.hpp|Weekday Date::weekday() const;+|v|ql/time/date.hpp|Day Date::dayOfMonth() const;+|v|ql/time/date.hpp|Day Date::dayOfYear() const;+|v|ql/time/date.hpp|Month Date::month() const;+|v|ql/time/date.hpp|Year Date::year() const;+| |ql/time/date.hpp|Date::serial_type Date::serialNumber() const;+| |ql/time/date.hpp|Date & Date::operator+=(Date::serial_type days);+| |ql/time/date.hpp|Date & Date::operator+=(const Period &);+| |ql/time/date.hpp|Date & Date::operator-=(Date::serial_type days);+| |ql/time/date.hpp|Date & Date::operator-=(const Period &);+| |ql/time/date.hpp|Date & Date::operator++();+| |ql/time/date.hpp|Date Date::operator++(int);+| |ql/time/date.hpp|Date & Date::operator--();+| |ql/time/date.hpp|Date Date::operator--(int);+| |ql/time/date.hpp|Date Date::operator+(Date::serial_type days) const;+| |ql/time/date.hpp|Date Date::operator+(const Period &) const;+| |ql/time/date.hpp|Date Date::operator-(Date::serial_type days) const;+| |ql/time/date.hpp|Date Date::operator-(const Period &) const;+| |ql/time/date.hpp|static Date Date::todaysDate();+|v|ql/time/date.hpp|static Date Date::minDate();+|v|ql/time/date.hpp|static Date Date::maxDate();+| |ql/time/date.hpp|static bool Date::isLeap(Year y);+| |ql/time/date.hpp|static Date Date::startOfMonth(const Date & d);+| |ql/time/date.hpp|static bool Date::isStartOfMonth(const Date & d);+|v|ql/time/date.hpp|static Date Date::endOfMonth(const Date & d);+|v|ql/time/date.hpp|static bool Date::isEndOfMonth(const Date & d);+|v|ql/time/date.hpp|static Date Date::nextWeekday(const Date & d, Weekday w);+|v|ql/time/date.hpp|static Date Date::nthWeekday(Size n, Weekday w, Month m, Year y);+| |ql/time/date.hpp|Date::serial_type operator-(const Date &, const Date &);+| |ql/time/date.hpp|Time daysBetween(const Date &, const Date &);+| |ql/time/date.hpp|bool operator==(const Date &, const Date &);+| |ql/time/date.hpp|bool operator!=(const Date &, const Date &);+| |ql/time/date.hpp|bool operator<(const Date &, const Date &);+| |ql/time/date.hpp|bool operator<=(const Date &, const Date &);+| |ql/time/date.hpp|bool operator>(const Date &, const Date &);+| |ql/time/date.hpp|bool operator>=(const Date &, const Date &);+|x|ql/time/date.hpp|std::size_t hash_value(const Date & d);+|x|ql/time/date.hpp|std::ostream & operator<<(std::ostream &, const Date &);+|x|ql/time/date.hpp|short_date_holder::short_date_holder(const Date d);+|x|ql/time/date.hpp|std::ostream & operator<<(std::ostream &, const short_date_holder &);+|x|ql/time/date.hpp|long_date_holder::long_date_holder(const Date & d);+|x|ql/time/date.hpp|std::ostream & operator<<(std::ostream &, const long_date_holder &);+|x|ql/time/date.hpp|iso_date_holder::iso_date_holder(const Date & d);+|x|ql/time/date.hpp|std::ostream & operator<<(std::ostream &, const iso_date_holder &);+|x|ql/time/date.hpp|formatted_date_holder::formatted_date_holder(const Date & d, std::string f);+|x|ql/time/date.hpp|std::ostream & operator<<(std::ostream &, const formatted_date_holder &);+|x|ql/time/date.hpp|detail::short_date_holder short_date(const Date &);+|x|ql/time/date.hpp|detail::long_date_holder long_date(const Date &);+|x|ql/time/date.hpp|detail::iso_date_holder iso_date(const Date &);+|x|ql/time/date.hpp|detail::formatted_date_holder formatted_date(const Date &, const std::string & fmt);+|x|ql/time/date.hpp|std::size_t hash::operator()(const QuantLib::Date & d) const;+|x|ql/time/dategenerationrule.hpp|std::ostream & operator<<(std::ostream &, DateGeneration::Rule);+|x|ql/time/daycounter.hpp|std::string Impl::name() const;+| |ql/time/daycounter.hpp|Date::serial_type Impl::dayCount(const Date & d1, const Date & d2) const;+| |ql/time/daycounter.hpp|Time Impl::yearFraction(const Date & d1, const Date & d2, const Date & refPeriodStart, const Date & refPeriodEnd) const;+|?|ql/time/daycounter.hpp|DayCounter::DayCounter();+| |ql/time/daycounter.hpp|bool DayCounter::empty() const;+|v|ql/time/daycounter.hpp|std::string DayCounter::name() const;+|v|ql/time/daycounter.hpp|Date::serial_type DayCounter::dayCount(const Date &, const Date &) const;+|v|ql/time/daycounter.hpp|Time DayCounter::yearFraction(const Date &, const Date &, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date()) const;+| |ql/time/daycounter.hpp|bool operator==(const DayCounter &, const DayCounter &);+| |ql/time/daycounter.hpp|bool operator!=(const DayCounter &, const DayCounter &);+| |ql/time/daycounter.hpp|std::ostream & operator<<(std::ostream &, const DayCounter &);+| |ql/time/daycounter.hpp|bool operator==(const DayCounter & d1, const DayCounter & d2);+| |ql/time/daycounter.hpp|bool operator!=(const DayCounter & d1, const DayCounter & d2);+| |ql/time/daycounter.hpp|std::ostream & operator<<(std::ostream & out, const DayCounter & d);+|x|ql/time/daycounters/actual360.hpp|Impl::Impl(const bool includeLastDay);+|x|ql/time/daycounters/actual360.hpp|std::string Impl::name() const;+|x|ql/time/daycounters/actual360.hpp|Date::serial_type Impl::dayCount(const Date & d1, const Date & d2) const;+|v|ql/time/daycounters/actual360.hpp|Actual360::Actual360(const bool includeLastDay = false);+|x|ql/time/daycounters/actual364.hpp|std::string Impl::name() const;+|v|ql/time/daycounters/actual364.hpp|Actual364::Actual364();+|x|ql/time/daycounters/actual36525.hpp|Impl::Impl(const bool includeLastDay);+|x|ql/time/daycounters/actual36525.hpp|std::string Impl::name() const;+|x|ql/time/daycounters/actual36525.hpp|Date::serial_type Impl::dayCount(const Date & d1, const Date & d2) const;+|v|ql/time/daycounters/actual36525.hpp|Actual36525::Actual36525(const bool includeLastDay = false);+|v|ql/time/daycounters/actual365fixed.hpp|Actual365Fixed::Actual365Fixed(Convention c = Actual365Fixed::Standard);+|x|ql/time/daycounters/actual365fixed.hpp|std::string Impl::name() const;+|x|ql/time/daycounters/actual366.hpp|Impl::Impl(const bool includeLastDay);+|x|ql/time/daycounters/actual366.hpp|std::string Impl::name() const;+|x|ql/time/daycounters/actual366.hpp|Date::serial_type Impl::dayCount(const Date & d1, const Date & d2) const;+|v|ql/time/daycounters/actual366.hpp|Actual366::Actual366(const bool includeLastDay = false);+|x|ql/time/daycounters/actualactual.hpp|ISMA_Impl::ISMA_Impl(Schedule schedule);+|v|ql/time/daycounters/actualactual.hpp|ActualActual::ActualActual(Convention c, Schedule schedule = Schedule());+|x|ql/time/daycounters/business252.hpp|std::string Impl::name() const;+|x|ql/time/daycounters/business252.hpp|Date::serial_type Impl::dayCount(const Date & d1, const Date & d2) const;+|x|ql/time/daycounters/business252.hpp|Impl::Impl(Calendar c);+|v|ql/time/daycounters/business252.hpp|Business252::Business252(const Calendar & c = Brazil());+|x|ql/time/daycounters/one.hpp|std::string Impl::name() const;+|x|ql/time/daycounters/one.hpp|Date::serial_type Impl::dayCount(const Date & d1, const Date & d2) const;+|x|ql/time/daycounters/one.hpp|OneDayCounter::OneDayCounter();+|x|ql/time/daycounters/simpledaycounter.hpp|std::string Impl::name() const;+|x|ql/time/daycounters/simpledaycounter.hpp|Date::serial_type Impl::dayCount(const Date & d1, const Date & d2) const;+| |ql/time/daycounters/simpledaycounter.hpp|SimpleDayCounter::SimpleDayCounter();+|x|ql/time/daycounters/thirty360.hpp|ISDA_Impl::ISDA_Impl(const Date & terminationDate);+|v|ql/time/daycounters/thirty360.hpp|Thirty360::Thirty360(Convention c, const Date & terminationDate = Date());+|x|ql/time/daycounters/thirty365.hpp|std::string Impl::name() const;+|x|ql/time/daycounters/thirty365.hpp|Date::serial_type Impl::dayCount(const Date & d1, const Date & d2) const;+|v|ql/time/daycounters/thirty365.hpp|Thirty365::Thirty365();+| |ql/time/daycounters/yearfractiontodate.hpp|Date yearFractionToDate(const DayCounter & dayCounter, const Date & referenceDate, Time t);+|?|ql/time/ecb.hpp|static const std::set<Date> & ECB::knownDates();+|v|ql/time/ecb.hpp|static void ECB::addDate(const Date & d);+|v|ql/time/ecb.hpp|static void ECB::removeDate(const Date & d);+|v|ql/time/ecb.hpp|static Date ECB::date(Month m, Year y);+|v|ql/time/ecb.hpp|static Date ECB::date(const std::string & ecbCode, const Date & referenceDate = Date());+|v|ql/time/ecb.hpp|static std::string ECB::code(const Date & ecbDate);+|v|ql/time/ecb.hpp|static Date ECB::nextDate(const Date & d = Date());+|v|ql/time/ecb.hpp|static Date ECB::nextDate(const std::string & ecbCode, const Date & referenceDate = Date());+|?|ql/time/ecb.hpp|static std::vector<Date> ECB::nextDates(const Date & d = Date());+|?|ql/time/ecb.hpp|static std::vector<Date> ECB::nextDates(const std::string & ecbCode, const Date & referenceDate = Date());+|v|ql/time/ecb.hpp|static bool ECB::isECBdate(const Date & d);+|v|ql/time/ecb.hpp|static bool ECB::isECBcode(const std::string & in);+|v|ql/time/ecb.hpp|static std::string ECB::nextCode(const Date & d = Date());+|v|ql/time/ecb.hpp|static std::string ECB::nextCode(const std::string & ecbCode);+| |ql/time/frequency.hpp|std::ostream & operator<<(std::ostream & out, Frequency f);+|v|ql/time/imm.hpp|static bool IMM::isIMMdate(const Date & d, bool mainCycle = true);+|v|ql/time/imm.hpp|static bool IMM::isIMMcode(const std::string & in, bool mainCycle = true);+|v|ql/time/imm.hpp|static std::string IMM::code(const Date & immDate);+|v|ql/time/imm.hpp|static Date IMM::date(const std::string & immCode, const Date & referenceDate = Date());+|v|ql/time/imm.hpp|static Date IMM::nextDate(const Date & d = Date(), bool mainCycle = true);+|v|ql/time/imm.hpp|static Date IMM::nextDate(const std::string & immCode, bool mainCycle = true, const Date & referenceDate = Date());+|v|ql/time/imm.hpp|static std::string IMM::nextCode(const Date & d = Date(), bool mainCycle = true);+|v|ql/time/imm.hpp|static std::string IMM::nextCode(const std::string & immCode, bool mainCycle = true, const Date & referenceDate = Date());+|x|ql/time/period.hpp|Period::Period();+|x|ql/time/period.hpp|Period::Period(Integer n, TimeUnit units);+|x|ql/time/period.hpp|Period::Period(Frequency f);+|x|ql/time/period.hpp|Integer Period::length() const;+|x|ql/time/period.hpp|TimeUnit Period::units() const;+|x|ql/time/period.hpp|Frequency Period::frequency() const;+|x|ql/time/period.hpp|Period & Period::operator+=(const Period &);+|x|ql/time/period.hpp|Period & Period::operator-=(const Period &);+|x|ql/time/period.hpp|Period & Period::operator*=(Integer);+|x|ql/time/period.hpp|Period & Period::operator/=(Integer);+|x|ql/time/period.hpp|void Period::normalize();+|x|ql/time/period.hpp|Period Period::normalized() const;+|x|ql/time/period.hpp|Real years(const Period &);+|x|ql/time/period.hpp|Real months(const Period &);+|x|ql/time/period.hpp|Real weeks(const Period &);+|x|ql/time/period.hpp|Real days(const Period &);+|x|ql/time/period.hpp|Period operator-(const Period &);+|x|ql/time/period.hpp|Period operator*(Integer n, const Period &);+|x|ql/time/period.hpp|Period operator*(const Period &, Integer n);+|x|ql/time/period.hpp|Period operator/(const Period &, Integer n);+|x|ql/time/period.hpp|Period operator+(const Period &, const Period &);+|x|ql/time/period.hpp|Period operator-(const Period &, const Period &);+|x|ql/time/period.hpp|bool operator<(const Period &, const Period &);+|x|ql/time/period.hpp|bool operator==(const Period &, const Period &);+|x|ql/time/period.hpp|bool operator!=(const Period &, const Period &);+|x|ql/time/period.hpp|bool operator>(const Period &, const Period &);+|x|ql/time/period.hpp|bool operator<=(const Period &, const Period &);+|x|ql/time/period.hpp|bool operator>=(const Period &, const Period &);+|x|ql/time/period.hpp|std::ostream & operator<<(std::ostream &, const Period &);+|x|ql/time/period.hpp|long_period_holder::long_period_holder(const Period & p);+|x|ql/time/period.hpp|std::ostream & operator<<(std::ostream &, const long_period_holder &);+|x|ql/time/period.hpp|short_period_holder::short_period_holder(Period p);+|x|ql/time/period.hpp|std::ostream & operator<<(std::ostream &, const short_period_holder &);+|x|ql/time/period.hpp|detail::long_period_holder long_period(const Period &);+|x|ql/time/period.hpp|detail::short_period_holder short_period(const Period &);+|x|ql/time/period.hpp|Period operator-(const Period & p);+|x|ql/time/period.hpp|Period operator*(Integer n, const Period & p);+|x|ql/time/period.hpp|Period operator*(const Period & p, Integer n);+|x|ql/time/period.hpp|bool operator==(const Period & p1, const Period & p2);+|x|ql/time/period.hpp|bool operator!=(const Period & p1, const Period & p2);+|x|ql/time/period.hpp|bool operator>(const Period & p1, const Period & p2);+|x|ql/time/period.hpp|bool operator<=(const Period & p1, const Period & p2);+|x|ql/time/period.hpp|bool operator>=(const Period & p1, const Period & p2);+|u|ql/time/schedule.hpp|Schedule::Schedule(const std::vector<Date> &, Calendar calendar = NullCalendar(), BusinessDayConvention convention = Unadjusted, const std::optional<BusinessDayConvention> & terminationDateConvention = std::nullopt, const std::optional<Period> & tenor = std::nullopt, const std::optional<DateGeneration::Rule> & rule = std::nullopt, const std::optional<bool> & endOfMonth = std::nullopt, std::vector<bool> isRegular = std::vector<bool>(0));+|v|ql/time/schedule.hpp|Schedule::Schedule(Date effectiveDate, const Date & terminationDate, const Period & tenor, Calendar calendar, BusinessDayConvention convention, BusinessDayConvention terminationDateConvention, DateGeneration::Rule rule, bool endOfMonth, const Date & firstDate = Date(), const Date & nextToLastDate = Date());+|?|ql/time/schedule.hpp|Schedule::Schedule();+|x|ql/time/schedule.hpp|Size Schedule::size() const;+|x|ql/time/schedule.hpp|const Date & Schedule::operator[](Size i) const;+|x|ql/time/schedule.hpp|const Date & Schedule::at(Size i) const;+|x|ql/time/schedule.hpp|const Date & Schedule::date(Size i) const;+|x|ql/time/schedule.hpp|const std::vector<Date> & Schedule::dates() const;+|x|ql/time/schedule.hpp|bool Schedule::empty() const;+|x|ql/time/schedule.hpp|const Date & Schedule::front() const;+|x|ql/time/schedule.hpp|const Date & Schedule::back() const;+|x|ql/time/schedule.hpp|Date Schedule::previousDate(const Date & refDate) const;+|x|ql/time/schedule.hpp|Date Schedule::nextDate(const Date & refDate) const;+|x|ql/time/schedule.hpp|bool Schedule::hasIsRegular() const;+|x|ql/time/schedule.hpp|bool Schedule::isRegular(Size i) const;+|x|ql/time/schedule.hpp|const std::vector<bool> & Schedule::isRegular() const;+|x|ql/time/schedule.hpp|const Calendar & Schedule::calendar() const;+|x|ql/time/schedule.hpp|const Date & Schedule::startDate() const;+|x|ql/time/schedule.hpp|const Date & Schedule::endDate() const;+|x|ql/time/schedule.hpp|bool Schedule::hasTenor() const;+|x|ql/time/schedule.hpp|const Period & Schedule::tenor() const;+|x|ql/time/schedule.hpp|BusinessDayConvention Schedule::businessDayConvention() const;+|x|ql/time/schedule.hpp|bool Schedule::hasTerminationDateBusinessDayConvention() const;+|x|ql/time/schedule.hpp|BusinessDayConvention Schedule::terminationDateBusinessDayConvention() const;+|x|ql/time/schedule.hpp|bool Schedule::hasRule() const;+|x|ql/time/schedule.hpp|DateGeneration::Rule Schedule::rule() const;+|x|ql/time/schedule.hpp|bool Schedule::hasEndOfMonth() const;+|x|ql/time/schedule.hpp|bool Schedule::endOfMonth() const;+|x|ql/time/schedule.hpp|const_iterator Schedule::begin() const;+|x|ql/time/schedule.hpp|const_iterator Schedule::end() const;+|x|ql/time/schedule.hpp|const_iterator Schedule::lower_bound(const Date & d = Date()) const;+|x|ql/time/schedule.hpp|Schedule Schedule::after(const Date & truncationDate) const;+|v|ql/time/schedule.hpp|Schedule Schedule::until(const Date & truncationDate) const;+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::from(const Date & effectiveDate);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::to(const Date & terminationDate);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::withTenor(const Period &);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::withFrequency(Frequency);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::withCalendar(const Calendar &);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::withConvention(BusinessDayConvention);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::withTerminationDateConvention(BusinessDayConvention);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::withRule(DateGeneration::Rule);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::forwards();+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::backwards();+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::endOfMonth(bool flag = true);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::withFirstDate(const Date & d);+| |ql/time/schedule.hpp|MakeSchedule & MakeSchedule::withNextToLastDate(const Date & d);+| |ql/time/schedule.hpp|Date previousTwentieth(const Date & d, DateGeneration::Rule rule);+| |ql/time/schedule.hpp|bool allowsEndOfMonth(const Period & tenor);+| |ql/time/schedule.hpp|const Date & operator[](Size i) const;+| |ql/time/timeunit.hpp|std::ostream & operator<<(std::ostream &, const TimeUnit &);+| |ql/time/weekday.hpp|std::ostream & operator<<(std::ostream &, const Weekday &);+| |ql/time/weekday.hpp|long_weekday_holder::long_weekday_holder(Weekday d);+| |ql/time/weekday.hpp|std::ostream & operator<<(std::ostream &, const long_weekday_holder &);+| |ql/time/weekday.hpp|short_weekday_holder::short_weekday_holder(Weekday d);+| |ql/time/weekday.hpp|std::ostream & operator<<(std::ostream &, const short_weekday_holder &);+| |ql/time/weekday.hpp|shortest_weekday_holder::shortest_weekday_holder(Weekday d);+| |ql/time/weekday.hpp|std::ostream & operator<<(std::ostream &, const shortest_weekday_holder &);+| |ql/time/weekday.hpp|detail::long_weekday_holder long_weekday(Weekday);+| |ql/time/weekday.hpp|detail::short_weekday_holder short_weekday(Weekday);+| |ql/time/weekday.hpp|detail::shortest_weekday_holder shortest_weekday(Weekday);+|?|ql/timegrid.hpp|TimeGrid::TimeGrid();+|v|ql/timegrid.hpp|TimeGrid::TimeGrid(Time end, Size steps);+|?|ql/timegrid.hpp|TimeGrid::TimeGrid(std::initializer_list<Time> times);+|v|ql/timegrid.hpp|TimeGrid::TimeGrid(std::initializer_list<Time> times, Size steps);+|x|ql/timegrid.hpp|Size TimeGrid::index(Time t) const;+|x|ql/timegrid.hpp|Size TimeGrid::closestIndex(Time t) const;+|x|ql/timegrid.hpp|Time TimeGrid::closestTime(Time t) const;+|x|ql/timegrid.hpp|const std::vector<Time> & TimeGrid::mandatoryTimes() const;+|x|ql/timegrid.hpp|Time TimeGrid::dt(Size i) const;+|x|ql/timegrid.hpp|Time TimeGrid::operator[](Size i) const;+|v|ql/timegrid.hpp|Time TimeGrid::at(Size i) const;+|v|ql/timegrid.hpp|Size TimeGrid::size() const;+|x|ql/timegrid.hpp|bool TimeGrid::empty() const;+|x|ql/timegrid.hpp|const_iterator TimeGrid::begin() const;+|x|ql/timegrid.hpp|const_iterator TimeGrid::end() const;+|x|ql/timegrid.hpp|const_reverse_iterator TimeGrid::rbegin() const;+|x|ql/timegrid.hpp|const_reverse_iterator TimeGrid::rend() const;+|x|ql/timegrid.hpp|Time TimeGrid::front() const;+|x|ql/timegrid.hpp|Time TimeGrid::back() const;+| |ql/timeseries.hpp|TimeSeries::TimeSeries<T, Container>();+| |ql/timeseries.hpp|Date TimeSeries::firstDate() const;+| |ql/timeseries.hpp|Date TimeSeries::lastDate() const;+| |ql/timeseries.hpp|Size TimeSeries::size() const;+| |ql/timeseries.hpp|bool TimeSeries::empty() const;+| |ql/timeseries.hpp|T TimeSeries::operator[](const Date & d) const;+| |ql/timeseries.hpp|T & TimeSeries::operator[](const Date & d);+| |ql/timeseries.hpp|reverse::reverse<container, iterator_category>(const container & c);+| |ql/timeseries.hpp|const_reverse_iterator reverse::rbegin() const;+| |ql/timeseries.hpp|const_reverse_iterator reverse::rend() const;+| |ql/timeseries.hpp|TimeSeries::reverse<container, std::bidirectional_iterator_tag>(const container & c);+| |ql/timeseries.hpp|const_reverse_iterator TimeSeries::rbegin() const;+| |ql/timeseries.hpp|const_reverse_iterator TimeSeries::rend() const;+| |ql/timeseries.hpp|const_iterator TimeSeries::cbegin() const;+| |ql/timeseries.hpp|const_iterator TimeSeries::cend() const;+| |ql/timeseries.hpp|const_iterator TimeSeries::begin() const;+| |ql/timeseries.hpp|const_iterator TimeSeries::end() const;+| |ql/timeseries.hpp|const_reverse_iterator TimeSeries::crbegin() const;+| |ql/timeseries.hpp|const_reverse_iterator TimeSeries::crend() const;+| |ql/timeseries.hpp|const_iterator TimeSeries::find(const Date &);+| |ql/timeseries.hpp|std::vector<Date> TimeSeries::dates() const;+| |ql/timeseries.hpp|std::vector<T> TimeSeries::values() const;+| |ql/timeseries.hpp|typename TimeSeries<T, C>::const_iterator cbegin() const;+| |ql/timeseries.hpp|typename TimeSeries<T, C>::const_iterator cend() const;+| |ql/timeseries.hpp|typename TimeSeries<T, C>::const_iterator find(const Date & d);+|x|ql/utilities/clone.hpp|Clone::Clone<T>();+|x|ql/utilities/clone.hpp|Clone::Clone<T>(std::unique_ptr<T> &&);+|x|ql/utilities/clone.hpp|Clone::Clone<T>(const T &);+|x|ql/utilities/clone.hpp|Clone::Clone<T>(const Clone<T> &);+|x|ql/utilities/clone.hpp|Clone::Clone<T>(Clone<T> &&);+|x|ql/utilities/clone.hpp|Clone<T> & Clone::operator=(const T &);+|x|ql/utilities/clone.hpp|Clone<T> & Clone::operator=(const Clone<T> &);+|x|ql/utilities/clone.hpp|Clone<T> & Clone::operator=(Clone<T> &&);+|x|ql/utilities/clone.hpp|T & Clone::operator*() const;+|x|ql/utilities/clone.hpp|T * Clone::operator->() const;+|x|ql/utilities/clone.hpp|bool Clone::empty() const;+|x|ql/utilities/clone.hpp|void Clone::swap(Clone<T> & t);+|x|ql/utilities/clone.hpp|Clone<T>(std::unique_ptr<T> && p);+|x|ql/utilities/clone.hpp|Clone<T>(const T & t);+|x|ql/utilities/clone.hpp|Clone<T>(const Clone<T> & t);+|x|ql/utilities/clone.hpp|Clone<T>(Clone<T> && t);+|x|ql/utilities/clone.hpp|Clone<T> & operator=(const T & t);+|x|ql/utilities/clone.hpp|Clone<T> & operator=(const Clone<T> & t);+|x|ql/utilities/clone.hpp|Clone<T> & operator=(Clone<T> && t);+|x|ql/utilities/clone.hpp|T & operator*() const;+|x|ql/utilities/clone.hpp|T * operator->() const;+| |ql/utilities/dataformatters.hpp|null_checker::null_checker<T>(T value);+| |ql/utilities/dataformatters.hpp|ordinal_holder::ordinal_holder(Size n);+| |ql/utilities/dataformatters.hpp|std::ostream & operator<<(std::ostream &, const ordinal_holder &);+| |ql/utilities/dataformatters.hpp|power_of_two_holder::power_of_two_holder<T>(T n);+| |ql/utilities/dataformatters.hpp|percent_holder::percent_holder(Real value);+| |ql/utilities/dataformatters.hpp|std::ostream & operator<<(std::ostream &, const percent_holder &);+| |ql/utilities/dataformatters.hpp|sequence_holder::sequence_holder<InputIterator>(InputIterator begin, InputIterator end);+| |ql/utilities/dataformatters.hpp|detail::ordinal_holder ordinal(Size);+| |ql/utilities/dataformatters.hpp|detail::percent_holder percent(Real);+| |ql/utilities/dataformatters.hpp|detail::percent_holder rate(Rate);+| |ql/utilities/dataformatters.hpp|detail::percent_holder volatility(Volatility);+| |ql/utilities/dataformatters.hpp|detail::ordinal_holder ordinal(Size n);+| |ql/utilities/dataformatters.hpp|detail::percent_holder percent(Real x);+| |ql/utilities/dataformatters.hpp|detail::percent_holder rate(Rate r);+| |ql/utilities/dataformatters.hpp|detail::percent_holder volatility(Volatility v);+|?|ql/utilities/dataparsers.hpp|static Period PeriodParser::parse(const std::string & str);+| |ql/utilities/dataparsers.hpp|static Date DateParser::parseFormatted(const std::string & str, const std::string & fmt);+| |ql/utilities/dataparsers.hpp|static Date DateParser::parseISO(const std::string & str);+|x|ql/utilities/observablevalue.hpp|ObservableValue::ObservableValue<T>();+|x|ql/utilities/observablevalue.hpp|ObservableValue::ObservableValue<T>(T &&);+|x|ql/utilities/observablevalue.hpp|ObservableValue::ObservableValue<T>(const T &);+|x|ql/utilities/observablevalue.hpp|ObservableValue::ObservableValue<T>(const ObservableValue<T> &);+|x|ql/utilities/observablevalue.hpp|ObservableValue<T> & ObservableValue::operator=(T &&);+|x|ql/utilities/observablevalue.hpp|ObservableValue<T> & ObservableValue::operator=(const T &);+|x|ql/utilities/observablevalue.hpp|ObservableValue<T> & ObservableValue::operator=(const ObservableValue<T> &);+|x|ql/utilities/observablevalue.hpp|const T & ObservableValue::value() const;+|x|ql/utilities/observablevalue.hpp|ObservableValue<T>();+|x|ql/utilities/observablevalue.hpp|ObservableValue<T>(T && t);+|x|ql/utilities/observablevalue.hpp|ObservableValue<T>(const T & t);+|x|ql/utilities/observablevalue.hpp|ObservableValue<T>(const ObservableValue<T> & t);+|x|ql/utilities/observablevalue.hpp|ObservableValue<T> & operator=(T && t);+|x|ql/utilities/observablevalue.hpp|ObservableValue<T> & operator=(const T & t);+|x|ql/utilities/observablevalue.hpp|ObservableValue<T> & operator=(const ObservableValue<T> & t);+|x|ql/utilities/steppingiterator.hpp|step_iterator::step_iterator<Iterator>();+|x|ql/utilities/steppingiterator.hpp|step_iterator::step_iterator<Iterator>(const step_iterator<Iterator> & other);+|x|ql/utilities/steppingiterator.hpp|step_iterator::step_iterator<Iterator>(const Iterator & base, Size step);+|x|ql/utilities/steppingiterator.hpp|Size step_iterator::step() const;+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> & step_iterator::operator=(const step_iterator<Iterator> & other);+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> & step_iterator::operator++();+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> step_iterator::operator++(int);+|x|ql/utilities/steppingiterator.hpp|reference step_iterator::operator*() const;+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> & step_iterator::operator--();+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> step_iterator::operator--(int);+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> & step_iterator::operator+=(Size n);+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> & step_iterator::operator-=(Size n);+|x|ql/utilities/steppingiterator.hpp|reference step_iterator::operator[](Size n) const;+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> step_iterator::operator+(const step_iterator<Iterator> & i, Size n);+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> step_iterator::operator+(Size n, const step_iterator<Iterator> & i);+|x|ql/utilities/steppingiterator.hpp|step_iterator<Iterator> step_iterator::operator-(const step_iterator<Iterator> & i, Size n);+|x|ql/utilities/steppingiterator.hpp|difference_type step_iterator::operator-(const step_iterator<Iterator> & lhs, const step_iterator<Iterator> & rhs);+|x|ql/utilities/steppingiterator.hpp|bool step_iterator::operator==(const step_iterator<Iterator> & lhs, const step_iterator<Iterator> & rhs);+|x|ql/utilities/steppingiterator.hpp|bool step_iterator::operator!=(const step_iterator<Iterator> & lhs, const step_iterator<Iterator> & rhs);+|x|ql/utilities/steppingiterator.hpp|bool step_iterator::operator<(const step_iterator<Iterator> & lhs, const step_iterator<Iterator> & rhs);+|x|ql/utilities/steppingiterator.hpp|bool step_iterator::operator>(const step_iterator<Iterator> & lhs, const step_iterator<Iterator> & rhs);+|x|ql/utilities/steppingiterator.hpp|bool step_iterator::operator<=(const step_iterator<Iterator> & lhs, const step_iterator<Iterator> & rhs);+|x|ql/utilities/steppingiterator.hpp|bool step_iterator::operator>=(const step_iterator<Iterator> & lhs, const step_iterator<Iterator> & rhs);+|x|ql/utilities/tracing.hpp|void Tracing::enable();+|x|ql/utilities/tracing.hpp|void Tracing::disable();+|x|ql/utilities/tracing.hpp|void Tracing::setStream(std::ostream & stream);+|x|ql/utilities/tracing.hpp|bool Tracing::enabled() const;+|x|ql/utilities/tracing.hpp|std::ostream & Tracing::stream();+|x|ql/utilities/tracing.hpp|Integer Tracing::depth() const;+|x|ql/utilities/tracing.hpp|void Tracing::down();+|x|ql/utilities/tracing.hpp|void Tracing::up();+|x|ql/version.hpp|std::size_t compiledBoostVersion();+|u|ql/volatilitymodel.hpp|TimeSeries<Volatility> LocalVolatilityEstimator::calculate(const TimeSeries<T> & quoteSeries);+|u|ql/volatilitymodel.hpp|time_series VolatilityCompositor::calculate(const time_series & volatilitySeries);+|x|ql/volatilitymodel.hpp|void VolatilityCompositor::calibrate(const time_series & volatilitySeries);+|v|ql/models/equity/hestonslvmcmodel.hpp|HestonSLVMCModel::HestonSLVMCModel(Handle<LocalVolTermStructure> localVol, Handle<HestonModel> hestonModel, ext::shared_ptr<BrownianGeneratorFactory> brownianGeneratorFactory, const Date & endDate, Size timeStepsPerYear = 365, Size nBins = 201, Size calibrationPaths = (1 << 15), const std::vector<Date> & mandatoryDates = std::vector<Date>(), Real mixingFactor = 1.0);+| |ql/cashflows/coupon.hpp|Real nominal() const;+| |ql/cashflows/coupon.hpp|const Date & accrualStartDate() const;+| |ql/cashflows/coupon.hpp|const Date & accrualEndDate() const;+| |ql/cashflows/coupon.hpp|const Date & referencePeriodStart() const;+| |ql/cashflows/coupon.hpp|const Date & referencePeriodEnd() const;+| |ql/cashflows/couponpricer.hpp|const Handle<OptionletVolatilityStructure> & IborCouponPricer::capletVolatility() const;+|x|ql/cashflows/couponpricer.hpp|const Handle<SwaptionVolatilityStructure> & CmsCouponPricer::swaptionVolatility() const;+| |ql/cashflows/couponpricer.hpp|Real swapletPrice() const;+| |ql/cashflows/couponpricer.hpp|Rate swapletRate() const;+| |ql/cashflows/couponpricer.hpp|Real capletPrice(Rate effectiveCap) const;+| |ql/cashflows/couponpricer.hpp|Rate capletRate(Rate effectiveCap) const;+| |ql/cashflows/couponpricer.hpp|Real floorletPrice(Rate effectiveFloor) const;+| |ql/cashflows/couponpricer.hpp|Rate floorletRate(Rate effectiveFloor) const;+| |ql/cashflows/cpicoupon.hpp|Real fixedRate() const;+| |ql/cashflows/cpicoupon.hpp|Rate adjustedIndexGrowth() const;+| |ql/cashflows/cpicoupon.hpp|Rate baseCPI() const;+| |ql/cashflows/cpicoupon.hpp|CPI::InterpolationType observationInterpolation() const;+| |ql/cashflows/cpicoupon.hpp|ext::shared_ptr<ZeroInflationIndex> cpiIndex() const;+| |ql/cashflows/floatingratecoupon.hpp|const ext::shared_ptr<InterestRateIndex> & index() const;+| |ql/cashflows/floatingratecoupon.hpp|Rate convexityAdjustment() const;+| |ql/cashflows/floatingratecoupon.hpp|Rate adjustedFixing() const;+| |ql/cashflows/floatingratecoupon.hpp|ext::shared_ptr<FloatingRateCouponPricer> pricer() const;+| |ql/cashflows/iborcoupon.hpp|IborLeg & IborLeg::withStubIndexSelection(const StubIndexSelection &);+| |ql/cashflows/inflationcoupon.hpp|ext::shared_ptr<InflationCouponPricer> pricer() const;+| |ql/cashflows/overnightindexedcouponpricer.hpp|const Handle<OptionletVolatilityStructure> & OvernightIndexedCouponPricer::capletVolatility() const;+|v|ql/cashflows/stubiborcoupon.hpp|StubIndexSelection::StubIndexSelection();+|v|ql/cashflows/stubiborcoupon.hpp|StubIndexSelection::StubIndexSelection(Convention convention, std::vector<ext::shared_ptr<IborIndex>> indices);+|x|ql/cashflows/stubiborcoupon.hpp|bool StubIndexSelection::empty() const;+|x|ql/cashflows/stubiborcoupon.hpp|Convention StubIndexSelection::convention() const;+|x|ql/cashflows/stubiborcoupon.hpp|const std::vector<ext::shared_ptr<IborIndex>> & StubIndexSelection::indices() const;+|x|ql/cashflows/stubiborcoupon.hpp|WeightedIndex::WeightedIndex(std::vector<Component> components);+|v|ql/cashflows/stubiborcoupon.hpp|const std::vector<Component> & WeightedIndex::components() const;+|v|ql/cashflows/stubiborcoupon.hpp|StubIborCoupon::StubIborCoupon(const Date & paymentDate, Real nominal, const Date & startDate, const Date & endDate, Natural fixingDays, const StubIndexSelection & stubIndexSelection, Real gearing = 1.0, Spread spread = 0.0, const Date & refPeriodStart = Date(), const Date & refPeriodEnd = Date(), const DayCounter & dayCounter = DayCounter(), bool isInArrears = false, const Date & exCouponDate = Date(), BusinessDayConvention fixingConvention = Preceding);+|x|ql/cashflows/stubiborcoupon.hpp|const StubIndexSelection & StubIborCoupon::stubIndexSelection() const;+| |ql/cashflows/yoyinflationcoupon.hpp|const ext::shared_ptr<YoYInflationIndex> & yoyIndex() const;+| |ql/cashflows/yoyinflationcoupon.hpp|CPI::InterpolationType interpolation() const;+| |ql/cashflows/yoyinflationcoupon.hpp|Rate adjustedFixing() const;+| |ql/currency.hpp|const std::string & name() const;+| |ql/currency.hpp|const std::string & code() const;+| |ql/currency.hpp|Integer numericCode() const;+| |ql/currency.hpp|const std::string & symbol() const;+| |ql/currency.hpp|const std::string & fractionSymbol() const;+| |ql/currency.hpp|Integer fractionsPerUnit() const;+| |ql/currency.hpp|const Rounding & rounding() const;+| |ql/currency.hpp|bool empty() const;+| |ql/currency.hpp|const Currency & triangulationCurrency() const;+| |ql/currency.hpp|const std::set<std::string> & minorUnitCodes() const;+| |ql/discretizedasset.hpp|void rollback(Time to);+| |ql/discretizedasset.hpp|void partialRollback(Time to);+| |ql/discretizedasset.hpp|Real presentValue();+| |ql/discretizedasset.hpp|void preAdjustValues();+| |ql/discretizedasset.hpp|void postAdjustValues();+| |ql/discretizedasset.hpp|void reset(Size size);+| |ql/discretizedasset.hpp|std::vector<Time> mandatoryTimes() const;+| |ql/exchangerate.hpp|ExchangeRate();+| |ql/exchangerate.hpp|ExchangeRate(Currency source, Currency target, Decimal rate);+| |ql/exchangerate.hpp|const Currency & source() const;+| |ql/exchangerate.hpp|const Currency & target() const;+| |ql/exchangerate.hpp|Decimal rate() const;+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & withSteps(Size steps);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & withSamples(Size samples);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/experimental/barrieroption/mcdoublebarrierengine.hpp|MakeMCDoubleBarrierEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|Date optionDateFromTenor(const Period & optionTenor) const;+| |ql/experimental/callablebonds/callablebondvolstructure.hpp|ext::shared_ptr<SmileSection> smileSection(const Period & optionTenor, const Period & bondTenor) const;+| |ql/experimental/catbonds/montecarlocatbondengine.hpp|const Handle<YieldTermStructure> & MonteCarloCatBondEngine::discountCurve() const;+| |ql/experimental/commodities/commoditycurve.hpp|const CommodityType & commodityType() const;+| |ql/experimental/commodities/commoditycurve.hpp|const UnitOfMeasure & unitOfMeasure() const;+| |ql/experimental/commodities/commoditycurve.hpp|const Currency & currency() const;+| |ql/experimental/commodities/commoditycurve.hpp|const std::string & name() const;+| |ql/experimental/commodities/commoditycurve.hpp|const std::vector<Real> & prices() const;+| |ql/experimental/commodities/commoditycurve.hpp|bool empty() const;+| |ql/experimental/commodities/commoditycurve.hpp|const ext::shared_ptr<CommodityCurve> & basisOfCurve() const;+| |ql/experimental/commodities/commoditycurve.hpp|Real basisOfPrice(const Date & d) const;+| |ql/experimental/commodities/commoditycurve.hpp|Real price(const Date & d, const ext::shared_ptr<ExchangeContracts> & exchangeContracts, Integer nearbyOffset) const;+| |ql/experimental/commodities/commoditycurve.hpp|Date underlyingPriceDate(const Date & date, const ext::shared_ptr<ExchangeContracts> & exchangeContracts, Integer nearbyOffset) const;+| |ql/experimental/commodities/commodityindex.hpp|const CommodityType & commodityType() const;+| |ql/experimental/commodities/commodityindex.hpp|const UnitOfMeasure & unitOfMeasure() const;+| |ql/experimental/commodities/commodityindex.hpp|const Currency & currency() const;+| |ql/experimental/commodities/commodityindex.hpp|Real lotQuantity() const;+| |ql/experimental/commodities/commodityindex.hpp|const ext::shared_ptr<CommodityCurve> & forwardCurve() const;+| |ql/experimental/commodities/commodityindex.hpp|Real forwardPrice(const Date & date) const;+| |ql/experimental/commodities/commodityindex.hpp|Date lastQuoteDate() const;+| |ql/experimental/commodities/commodityindex.hpp|bool empty() const;+| |ql/experimental/commodities/commodityindex.hpp|bool forwardCurveEmpty() const;+| |ql/experimental/commodities/commoditypricinghelpers.hpp|static Real calculateUomConversionFactor(const CommodityType & commodityType, const UnitOfMeasure & fromUnitOfMeasure, const UnitOfMeasure & toUnitOfMeasure);+| |ql/experimental/commodities/commoditypricinghelpers.hpp|static Real calculateFxConversionFactor(const Currency & fromCurrency, const Currency & toCurrency, const Date & evaluationDate);+| |ql/experimental/commodities/commoditypricinghelpers.hpp|static Real calculateUnitCost(const CommodityType & commodityType, const CommodityUnitCost & unitCost, const Currency & baseCurrency, const UnitOfMeasure & baseUnitOfMeasure, const Date & evaluationDate);+|v|ql/experimental/commodities/commoditytype.hpp|CommodityType::CommodityType(const std::string & name, const std::string & code);+| |ql/experimental/commodities/commoditytype.hpp|const std::string & code() const;+| |ql/experimental/commodities/commoditytype.hpp|const std::string & name() const;+| |ql/experimental/commodities/commoditytype.hpp|bool empty() const;+| |ql/experimental/commodities/exchangecontract.hpp|ExchangeContract(std::string code, Date expirationDate, Date underlyingStartDate, Date underlyingEndDate);+| |ql/experimental/commodities/exchangecontract.hpp|const std::string & code() const;+| |ql/experimental/commodities/exchangecontract.hpp|const Date & expirationDate() const;+| |ql/experimental/commodities/exchangecontract.hpp|const Date & underlyingStartDate() const;+| |ql/experimental/commodities/exchangecontract.hpp|const Date & underlyingEndDate() const;+| |ql/experimental/commodities/paymentterm.hpp|const std::string & name() const;+| |ql/experimental/commodities/paymentterm.hpp|Integer offsetDays() const;+| |ql/experimental/commodities/paymentterm.hpp|const Calendar & calendar() const;+| |ql/experimental/commodities/paymentterm.hpp|Date getPaymentDate(const Date & date) const;+| |ql/experimental/commodities/paymentterm.hpp|bool empty() const;+| |ql/experimental/commodities/quantity.hpp|Quantity(CommodityType commodityType, UnitOfMeasure unitOfMeasure, Real amount);+| |ql/experimental/commodities/quantity.hpp|const CommodityType & commodityType() const;+| |ql/experimental/commodities/quantity.hpp|const UnitOfMeasure & unitOfMeasure() const;+| |ql/experimental/commodities/quantity.hpp|Real amount() const;+| |ql/experimental/commodities/quantity.hpp|Quantity rounded() const;+| |ql/experimental/commodities/unitofmeasure.hpp|const std::string & name() const;+| |ql/experimental/commodities/unitofmeasure.hpp|const std::string & code() const;+| |ql/experimental/commodities/unitofmeasure.hpp|const Rounding & rounding() const;+| |ql/experimental/commodities/unitofmeasure.hpp|bool empty() const;+| |ql/experimental/commodities/unitofmeasure.hpp|const UnitOfMeasure & triangulationUnitOfMeasure() const;+| |ql/experimental/commodities/unitofmeasureconversion.hpp|const CommodityType & commodityType() const;+| |ql/experimental/commodities/unitofmeasureconversion.hpp|const UnitOfMeasure & source() const;+| |ql/experimental/commodities/unitofmeasureconversion.hpp|const UnitOfMeasure & target() const;+| |ql/experimental/commodities/unitofmeasureconversion.hpp|Real conversionFactor() const;+| |ql/experimental/commodities/unitofmeasureconversion.hpp|const std::string & code() const;+| |ql/experimental/coupons/cmsspreadcoupon.hpp|const Handle<Quote> & CmsSpreadCouponPricer::correlation() const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void checkTrancheTenors() const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void checkLosses() const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void initializeTrancheTimes() const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void checkInputs(Size volRows, Size volsColumns) const;+| |ql/experimental/credit/basecorrelationstructure.hpp|void registerWithMarketData();+| |ql/experimental/credit/basecorrelationstructure.hpp|void updateMatrix() const;+| |ql/experimental/credit/basket.hpp|const std::vector<Real> & notionals() const;+| |ql/experimental/credit/basket.hpp|std::vector<DefaultProbKey> defaultKeys() const;+| |ql/experimental/credit/basket.hpp|const ext::shared_ptr<Pool> & pool() const;+| |ql/experimental/credit/basket.hpp|const std::vector<Size> & liveList() const;+| |ql/experimental/credit/basket.hpp|Real remainingDetachmentAmount() const;+| |ql/experimental/credit/basket.hpp|Real remainingAttachmentAmount() const;+| |ql/experimental/credit/basket.hpp|const std::vector<std::string> & remainingNames() const;+| |ql/experimental/credit/basket.hpp|const std::vector<Real> & remainingNotionals() const;+| |ql/experimental/credit/basket.hpp|Real cumulatedLoss() const;+| |ql/experimental/credit/basket.hpp|Real settledLoss() const;+| |ql/experimental/credit/basket.hpp|const std::vector<DefaultProbKey> & remainingDefaultKeys() const;+| |ql/experimental/credit/defaultprobabilitylatentmodel.hpp|Real defaultCorrelation(const Date & d, Size iNamei, Size iNamej) const;+| |ql/experimental/credit/gaussianlhplossmodel.hpp|Real GaussianLHPLossModel::expectedShortfall(const Date & d, Probability perctl) const;+| |ql/experimental/credit/gaussianlhplossmodel.hpp|Probability GaussianLHPLossModel::averageProb(const Date & d) const;+| |ql/experimental/credit/gaussianlhplossmodel.hpp|Real GaussianLHPLossModel::averageRecovery(const Date & d) const;+| |ql/experimental/credit/interpolatedaffinehazardratecurve.hpp|const std::vector<Rate> & hazardRates() const;+| |ql/experimental/credit/onefactorcopula.hpp|Real correlation() const;+| |ql/experimental/credit/recoveryratequote.hpp|Seniority seniority() const;+| |ql/experimental/credit/recoveryratequote.hpp|std::map<Seniority, Real> makeIsdaConvMap();+| |ql/experimental/credit/recursivelossmodel.hpp|std::vector<Real> lossProbability(const Date & date) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Probability probOverPortfLoss(const Date & d, Real loss) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Probability probDensity(const Date & d, Real loss) const;+| |ql/experimental/credit/saddlepointlossmodel.hpp|Real percentile(const Date & d, Probability percentile) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|void resetBasket(const ext::shared_ptr<Basket> & basket) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Probability conditionalDefaultProbability(const Date & date, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Probability conditionalDefaultProbability(Probability prob, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Probability conditionalDefaultProbabilityInvP(Real invCumYProb, Size iName, const std::vector<Real> & m) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real expCondRecovery(const Date & d, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real expCondRecoveryP(Real uncondDefP, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real expCondRecoveryInvPinvRR(Real invUncondDefP, Real invUncondRR, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real conditionalRecovery(Real latentVarSample, Size iName, const Date & d) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real latentRRVarValue(const std::vector<Real> & allFactors, Size iName) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real conditionalExpLossRR(const Date & d, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real conditionalExpLossRRInv(Real invP, Real invRR, Size iName, const std::vector<Real> & mktFactors) const;+| |ql/experimental/credit/spotlosslatentmodel.hpp|Real expectedLoss(const Date & d, Size iName) const;+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & withSteps(Size steps);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & withSamples(Size samples);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/experimental/exoticoptions/mceverestengine.hpp|MakeMCEverestEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & withSamples(Size samples);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/experimental/exoticoptions/mchimalayaengine.hpp|MakeMCHimalayaEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & withSamples(Size samples);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/experimental/exoticoptions/mcpagodaengine.hpp|MakeMCPagodaEngine<RNG, S> & withSeed(BigNatural seed);+|v|ql/experimental/fx/discountingmtmcrosscurrencybasisswapengine.hpp|DiscountingMtMCrossCurrencyBasisSwapEngine::DiscountingMtMCrossCurrencyBasisSwapEngine(Currency domesticCcy, const Handle<YieldTermStructure> & domesticCcyDiscountCurve, Currency foreignCcy, const Handle<YieldTermStructure> & foreignCcyDiscountCurve, const Handle<Quote> & spotFX, std::optional<bool> includeSettlementDateFlows = std::nullopt, const Date & settlementDate = Date(), const Date & npvDate = Date(), const Date & spotFXSettleDate = Date());+|x|ql/experimental/fx/discountingmtmcrosscurrencybasisswapengine.hpp|void DiscountingMtMCrossCurrencyBasisSwapEngine::calculate() const;+|x|ql/experimental/fx/discountingmtmcrosscurrencybasisswapengine.hpp|const Handle<YieldTermStructure> & DiscountingMtMCrossCurrencyBasisSwapEngine::domesticCcyDiscountCurve() const;+|x|ql/experimental/fx/discountingmtmcrosscurrencybasisswapengine.hpp|const Handle<YieldTermStructure> & DiscountingMtMCrossCurrencyBasisSwapEngine::foreignCcyDiscountCurve() const;+|x|ql/experimental/fx/discountingmtmcrosscurrencybasisswapengine.hpp|const Currency & DiscountingMtMCrossCurrencyBasisSwapEngine::domesticCurrency() const;+|x|ql/experimental/fx/discountingmtmcrosscurrencybasisswapengine.hpp|const Currency & DiscountingMtMCrossCurrencyBasisSwapEngine::foreignCurrency() const;+|x|ql/experimental/fx/discountingmtmcrosscurrencybasisswapengine.hpp|const Handle<Quote> & DiscountingMtMCrossCurrencyBasisSwapEngine::spotFX() const;+|v|ql/experimental/fx/fxresetcashflows.hpp|FxReset::FxReset(Date fixingDate, Date valueDate);+|v|ql/experimental/fx/fxresetcashflows.hpp|const Date & FxReset::fixingDate() const;+|v|ql/experimental/fx/fxresetcashflows.hpp|const Date & FxReset::valueDate() const;+|v|ql/experimental/fx/fxresetcashflows.hpp|FxResetConvention::FxResetConvention(Natural fixingDays = 0, Calendar fixingCalendar = Calendar());+|v|ql/experimental/fx/fxresetcashflows.hpp|FxReset FxResetConvention::reset(const Date & valueDate) const;+|v|ql/experimental/fx/fxresetcashflows.hpp|Date FxResetConvention::valueDate(const Date & fixingDate) const;+|x|ql/experimental/fx/fxresetcashflows.hpp|Natural FxResetConvention::fixingDays() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|const Calendar & FxResetConvention::fixingCalendar() const;+|v|ql/experimental/fx/fxresetcashflows.hpp|Real FxResetPricer::fxRate(const FxReset & reset) const;+|v|ql/experimental/fx/fxresetcashflows.hpp|DiscountingFxResetPricer::DiscountingFxResetPricer(Currency constantLegCurrency, Currency resettableLegCurrency, Handle<YieldTermStructure> constantLegCurve, Handle<YieldTermStructure> resettableLegCurve, Handle<Quote> spotFx, bool spotIsResettablePerConstant, Date spotFxSettleDate = Date());+|x|ql/experimental/fx/fxresetcashflows.hpp|const Currency & DiscountingFxResetPricer::constantLegCurrency() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|const Currency & DiscountingFxResetPricer::resettableLegCurrency() const;+|v|ql/experimental/fx/fxresetcashflows.hpp|FxResetCoupon::FxResetCoupon(const ext::shared_ptr<FloatingRateCoupon> & underlying, Real constantLegNotional, FxReset fxReset);+|x|ql/experimental/fx/fxresetcashflows.hpp|const ext::shared_ptr<FloatingRateCoupon> & FxResetCoupon::underlying() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|Real FxResetCoupon::constantLegNotional() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|const FxReset & FxResetCoupon::fxReset() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|Date FxResetCoupon::fxResetDate() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|Date FxResetCoupon::fxResetValueDate() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|const ext::shared_ptr<FxResetPricer> & FxResetCoupon::fxResetPricer() const;+|v|ql/experimental/fx/fxresetcashflows.hpp|void FxResetCoupon::setFxResetPricer(const ext::shared_ptr<FxResetPricer> & pricer);+|v|ql/experimental/fx/fxresetcashflows.hpp|FxResetNotionalExchange::FxResetNotionalExchange(const Date & paymentDate, Real constantLegNotional, std::optional<FxReset> previousReset, std::optional<FxReset> currentReset);+|x|ql/experimental/fx/fxresetcashflows.hpp|Real FxResetNotionalExchange::constantLegNotional() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|const std::optional<FxReset> & FxResetNotionalExchange::previousReset() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|const std::optional<FxReset> & FxResetNotionalExchange::currentReset() const;+|x|ql/experimental/fx/fxresetcashflows.hpp|const ext::shared_ptr<FxResetPricer> & FxResetNotionalExchange::fxResetPricer() const;+|v|ql/experimental/fx/fxresetcashflows.hpp|void FxResetNotionalExchange::setFxResetPricer(const ext::shared_ptr<FxResetPricer> & pricer);+|v|ql/experimental/fx/fxresetcashflows.hpp|void setFxResetPricer(const Leg & leg, const ext::shared_ptr<FxResetPricer> & pricer);+|v|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|MtMCrossCurrencyBasisSwap::MtMCrossCurrencyBasisSwap(Type type, Real fxBaseNominal, Currency fxBaseCurrency, Schedule fxBaseSchedule, const ext::shared_ptr<IborIndex> & fxBaseIndex, Spread fxBaseSpread, Real fxBaseGearing, Real fxQuoteNominal, Currency fxQuoteCurrency, Schedule fxQuoteSchedule, const ext::shared_ptr<IborIndex> & fxQuoteIndex, Spread fxQuoteSpread, Real fxQuoteGearing, bool isFxBaseCurrencyLegResettable, Natural fxResetFixingDays = 0, const Calendar & fxResetFixingCalendar = Calendar(), Integer fxBasePaymentLag = 0, Integer fxQuotePaymentLag = 0, BusinessDayConvention fxBasePaymentConvention = Following, BusinessDayConvention fxQuotePaymentConvention = Following, bool fxBaseCompoundSpread = false, Natural fxBaseLookbackDays = Null<Natural>(), bool fxBaseObservationShift = false, Natural fxBaseLockoutDays = 0, RateAveraging::Type fxBaseAveragingMethod = RateAveraging::Compound, bool fxQuoteCompoundSpread = false, Natural fxQuoteLookbackDays = Null<Natural>(), bool fxQuoteObservationShift = false, Natural fxQuoteLockoutDays = 0, RateAveraging::Type fxQuoteAveragingMethod = RateAveraging::Compound, bool telescopicValueDates = false, std::optional<bool> useIndexedCoupons = std::nullopt, StubIndexSelection fxBaseStubIndexSelection = { }, StubIndexSelection fxQuoteStubIndexSelection = { });+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Type MtMCrossCurrencyBasisSwap::type() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|bool MtMCrossCurrencyBasisSwap::paysFxBaseCurrency() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Real MtMCrossCurrencyBasisSwap::fxBaseNominal() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Currency & MtMCrossCurrencyBasisSwap::fxBaseCurrency() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Schedule & MtMCrossCurrencyBasisSwap::fxBaseSchedule() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const ext::shared_ptr<IborIndex> & MtMCrossCurrencyBasisSwap::fxBaseIndex() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Spread MtMCrossCurrencyBasisSwap::fxBaseSpread() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Real MtMCrossCurrencyBasisSwap::fxBaseGearing() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const StubIndexSelection & MtMCrossCurrencyBasisSwap::fxBaseStubIndexSelection() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const StubIndexSelection & MtMCrossCurrencyBasisSwap::fxQuoteStubIndexSelection() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Real MtMCrossCurrencyBasisSwap::fxQuoteNominal() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Currency & MtMCrossCurrencyBasisSwap::fxQuoteCurrency() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Schedule & MtMCrossCurrencyBasisSwap::fxQuoteSchedule() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const ext::shared_ptr<IborIndex> & MtMCrossCurrencyBasisSwap::fxQuoteIndex() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Spread MtMCrossCurrencyBasisSwap::fxQuoteSpread() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Real MtMCrossCurrencyBasisSwap::fxQuoteGearing() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Real MtMCrossCurrencyBasisSwap::payNominal() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Currency & MtMCrossCurrencyBasisSwap::payCurrency() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Schedule & MtMCrossCurrencyBasisSwap::paySchedule() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const ext::shared_ptr<IborIndex> & MtMCrossCurrencyBasisSwap::payIndex() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Spread MtMCrossCurrencyBasisSwap::paySpread() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Real MtMCrossCurrencyBasisSwap::payGearing() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Real MtMCrossCurrencyBasisSwap::recNominal() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Currency & MtMCrossCurrencyBasisSwap::recCurrency() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Schedule & MtMCrossCurrencyBasisSwap::recSchedule() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const ext::shared_ptr<IborIndex> & MtMCrossCurrencyBasisSwap::recIndex() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Spread MtMCrossCurrencyBasisSwap::recSpread() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Real MtMCrossCurrencyBasisSwap::recGearing() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|bool MtMCrossCurrencyBasisSwap::isFxBaseCurrencyLegResettable() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Size MtMCrossCurrencyBasisSwap::resettingLegIndex() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Size MtMCrossCurrencyBasisSwap::constantLegIndex() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Leg & MtMCrossCurrencyBasisSwap::resettingLeg() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const Leg & MtMCrossCurrencyBasisSwap::constantLeg() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Real MtMCrossCurrencyBasisSwap::constantLegNotional() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Natural MtMCrossCurrencyBasisSwap::fxResetFixingDays() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Calendar MtMCrossCurrencyBasisSwap::fxResetFixingCalendar() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|BusinessDayConvention MtMCrossCurrencyBasisSwap::fxBasePaymentConvention() const;+|x|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|BusinessDayConvention MtMCrossCurrencyBasisSwap::fxQuotePaymentConvention() const;+|v|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const std::vector<Real> & MtMCrossCurrencyBasisSwap::fxResetRates() const;+|v|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|const std::vector<Real> & MtMCrossCurrencyBasisSwap::fxResetNotionals() const;+|v|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Spread MtMCrossCurrencyBasisSwap::fairFxBaseSpread() const;+|v|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Spread MtMCrossCurrencyBasisSwap::fairFxQuoteSpread() const;+|v|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Spread MtMCrossCurrencyBasisSwap::fairPaySpread() const;+|v|ql/experimental/fx/mtmcrosscurrencybasisswap.hpp|Spread MtMCrossCurrencyBasisSwap::fairRecSpread() const;+| |ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real price(const Date & d, Rate k) const;+| |ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real capPrice(const Date & d, Rate k) const;+| |ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real floorPrice(const Date & d, Rate k) const;+| |ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Period observationLag() const;+| |ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Frequency frequency() const;+| |ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Rate baseRate() const;+| |ql/experimental/inflation/cpicapfloortermpricesurface.hpp|Real nominal() const;+| |ql/experimental/inflation/kinterpolatedyoyoptionletvolatilitysurface.hpp|std::pair<std::vector<Rate>, std::vector<Volatility>> Dslice(const Date & d) const;+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|bool indexIsInterpolated() const;+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Period observationLag() const;+| |ql/experimental/inflation/yoycapfloortermpricesurface.hpp|Frequency frequency() const;+| |ql/experimental/math/latentmodel.hpp|const sample_type & nextSequence() const;+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withSteps(Size steps);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withStepsPerYear(Size steps);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withSamples(Size samples);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withAbsoluteTolerance(Real tolerance);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withMaxSamples(Size samples);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withSeed(BigNatural seed);+| |ql/experimental/mcbasket/mcamericanpathengine.hpp|MakeMCAmericanPathEngine<RNG> & withCalibrationSamples(Size samples);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & withSteps(Size steps);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & withSamples(Size samples);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/experimental/mcbasket/mcpathbasketengine.hpp|MakeMCPathBasketEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/experimental/swaptions/irregularswap.hpp|const Leg & fixedLeg() const;+| |ql/experimental/swaptions/irregularswap.hpp|const Leg & floatingLeg() const;+|v|ql/experimental/termstructures/basisswapratehelpers.hpp|OvernightOvernightBasisSwapRateHelper::OvernightOvernightBasisSwapRateHelper(const Handle<Quote> & basis, const Period & tenor, Natural settlementDays, Calendar calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<OvernightIndex> & baseIndex, const ext::shared_ptr<OvernightIndex> & otherIndex, Handle<YieldTermStructure> discountHandle = Handle<YieldTermStructure>(), bool bootstrapBaseCurve = false, Integer paymentLag = 0, Frequency paymentFrequency = Annual, RateAveraging::Type baseAveragingMethod = RateAveraging::Compound, RateAveraging::Type otherAveragingMethod = RateAveraging::Compound, bool telescopicValueDates = false, DateGeneration::Rule rule = DateGeneration::Backward);+| |ql/experimental/termstructures/basisswapratehelpers.hpp|Real OvernightOvernightBasisSwapRateHelper::impliedQuote() const;+| |ql/experimental/termstructures/basisswapratehelpers.hpp|void OvernightOvernightBasisSwapRateHelper::accept(AcyclicVisitor &);+|v|ql/experimental/termstructures/basisswapratehelpers.hpp|ext::shared_ptr<Swap> OvernightOvernightBasisSwapRateHelper::swap() const;+| |ql/experimental/termstructures/crosscurrencyratehelpers.hpp|const ext::shared_ptr<ConstNotionalCrossCurrencyBasisSwap> & ConstNotionalCrossCurrencyBasisSwapRateHelper::swap() const;+| |ql/experimental/termstructures/crosscurrencyratehelpers.hpp|const ext::shared_ptr<MtMCrossCurrencyBasisSwap> & MtMCrossCurrencyBasisSwapRateHelper::swap() const;+|x|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|Natural MtMCrossCurrencyBasisSwapRateHelper::fxResetFixingDays() const;+|x|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|const Calendar & MtMCrossCurrencyBasisSwapRateHelper::fxResetFixingCalendar() const;+|v|ql/experimental/termstructures/crosscurrencyratehelpers.hpp|const ext::shared_ptr<ConstNotionalCrossCurrencyFixedVsFloatingSwap> & ConstNotionalCrossCurrencySwapRateHelper::swap() const;+|v|ql/experimental/termstructures/overnightindexedfundingratehelper.hpp|OvernightIndexedFundingRateHelper::OvernightIndexedFundingRateHelper(const std::variant<Spread, Handle<Quote>> & margin, const Period & tenor, Natural settlementDays, Calendar calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<OvernightIndex> & overnightIndex, const Period & paymentTenor, DayCounter paymentDayCounter, Integer paymentLag = 0, bool telescopicValueDates = false, DateGeneration::Rule rule = DateGeneration::Backward, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());+|v|ql/experimental/termstructures/overnightindexedfundingratehelper.hpp|OvernightIndexedFundingRateHelper::OvernightIndexedFundingRateHelper(const std::variant<Spread, Handle<Quote>> & margin, const Date & startDate, const Date & endDate, Calendar calendar, BusinessDayConvention convention, bool endOfMonth, const ext::shared_ptr<OvernightIndex> & overnightIndex, const Period & paymentTenor, DayCounter paymentDayCounter, Integer paymentLag = 0, bool telescopicValueDates = false, DateGeneration::Rule rule = DateGeneration::Backward, Pillar::Choice pillar = Pillar::LastRelevantDate, Date customPillarDate = Date());+| |ql/experimental/termstructures/overnightindexedfundingratehelper.hpp|Real OvernightIndexedFundingRateHelper::impliedQuote() const;+| |ql/experimental/termstructures/overnightindexedfundingratehelper.hpp|void OvernightIndexedFundingRateHelper::setTermStructure(YieldTermStructure *);+| |ql/experimental/termstructures/overnightindexedfundingratehelper.hpp|void OvernightIndexedFundingRateHelper::accept(AcyclicVisitor &);+|v|ql/experimental/termstructures/overnightindexedfundingratehelper.hpp|ext::shared_ptr<Swap> OvernightIndexedFundingRateHelper::swap() const;+| |ql/experimental/varianceoption/varianceoption.hpp|Date startDate() const;+| |ql/experimental/varianceoption/varianceoption.hpp|Date maturityDate() const;+| |ql/experimental/varianceoption/varianceoption.hpp|Real notional() const;+| |ql/experimental/varianceoption/varianceoption.hpp|ext::shared_ptr<Payoff> payoff() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Period> & optionTenors() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Period> & optionTenorsInInterpolation() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Date> & optionDates() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|const std::vector<Time> & optionTimes() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|std::vector<Real> k() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real k(Time t) const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real a() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real b() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real c() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real d() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real rmsError() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|Real maxError() const;+| |ql/experimental/volatility/abcdatmvolcurve.hpp|EndCriteria::Type endCriteria() const;+| |ql/experimental/volatility/interestratevolsurface.hpp|const ext::shared_ptr<InterestRateIndex> & index() const;+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real alpha() const;+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real beta() const;+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real nu() const;+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real rho() const;+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real rmsError() const;+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|Real maxError() const;+| |ql/experimental/volatility/noarbsabrinterpolatedsmilesection.hpp|EndCriteria::Type endCriteria() const;+| |ql/experimental/volatility/sabrvolsurface.hpp|const Handle<BlackAtmVolCurve> & atmCurve() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real a() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real b() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real sigma() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real rho() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real m() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real rmsError() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|Real maxError() const;+| |ql/experimental/volatility/sviinterpolatedsmilesection.hpp|EndCriteria::Type endCriteria() const;+| |ql/experimental/volatility/volcube.hpp|const std::vector<Handle<InterestRateVolSurface>> & surfaces() const;+| |ql/experimental/volatility/volcube.hpp|const std::vector<Handle<AbcdAtmVolCurve>> & curves() const;+| |ql/handle.hpp|Link(const ext::shared_ptr<T> & h, bool registerAsObserver);+| |ql/handle.hpp|Link(ext::shared_ptr<T> && h, bool registerAsObserver);+| |ql/handle.hpp|const ext::shared_ptr<T> & currentLink() const;+| |ql/handle.hpp|bool empty() const;+| |ql/index.hpp|bool hasHistoricalFixing(const Date & fixingDate) const;+| |ql/index.hpp|Real pastFixing(const Date & fixingDate) const;+| |ql/indexes/bmaindex.hpp|const Handle<YieldTermStructure> & BMAIndex::forwardingTermStructure() const;+|x|ql/indexes/equityindex.hpp|const Handle<YieldTermStructure> & EquityIndex::equityInterestRateCurve() const;+|x|ql/indexes/equityindex.hpp|const Handle<YieldTermStructure> & EquityIndex::equityDividendCurve() const;+| |ql/indexes/equityindex.hpp|const Handle<Quote> & EquityIndex::spot() const;+| |ql/indexes/iborindex.hpp|const Handle<YieldTermStructure> & IborIndex::forwardingTermStructure() const;+| |ql/indexes/iborindex.hpp|const Handle<YieldTermStructure> & forwardingTermStructure() const;+| |ql/indexes/inflationindex.hpp|const Handle<ZeroInflationTermStructure> & ZeroInflationIndex::zeroInflationTermStructure() const;+| |ql/indexes/inflationindex.hpp|const Handle<YoYInflationTermStructure> & YoYInflationIndex::yoyInflationTermStructure() const;+| |ql/indexes/inflationindex.hpp|std::string familyName() const;+| |ql/indexes/inflationindex.hpp|Region region() const;+| |ql/indexes/inflationindex.hpp|bool revised() const;+| |ql/indexes/inflationindex.hpp|Frequency frequency() const;+| |ql/indexes/inflationindex.hpp|Period availabilityLag() const;+| |ql/indexes/inflationindex.hpp|Currency currency() const;+| |ql/indexes/inflationindex.hpp|const Handle<ZeroInflationTermStructure> & zeroInflationTermStructure() const;+| |ql/indexes/inflationindex.hpp|bool interpolated() const;+| |ql/indexes/inflationindex.hpp|bool ratio() const;+| |ql/indexes/inflationindex.hpp|ext::shared_ptr<ZeroInflationIndex> underlyingIndex() const;+| |ql/indexes/inflationindex.hpp|const Handle<YoYInflationTermStructure> & yoyInflationTermStructure() const;+| |ql/indexes/interestrateindex.hpp|Date fixingDate(const Date & valueDate) const;+| |ql/indexes/interestrateindex.hpp|Date valueDate(const Date & fixingDate) const;+| |ql/indexes/region.hpp|const std::string & name() const;+| |ql/indexes/region.hpp|const std::string & code() const;+| |ql/indexes/swapindex.hpp|const Handle<YieldTermStructure> & SwapIndex::forwardingTermStructure() const;+|x|ql/indexes/swapindex.hpp|const Handle<YieldTermStructure> & SwapIndex::discountingTermStructure() const;+| |ql/indexes/swapindex.hpp|BusinessDayConvention fixedLegConvention() const;+| |ql/indexes/swapindex.hpp|bool exogenousDiscount() const;+| |ql/indexes/swapindex.hpp|ext::shared_ptr<OvernightIndex> overnightIndex() const;+| |ql/instrument.hpp|const std::map<std::string, std::any> & Instrument::additionalResults() const;+| |ql/instrument.hpp|Real NPV() const;+| |ql/instrument.hpp|Real errorEstimate() const;+| |ql/instrument.hpp|const Date & valuationDate() const;+| |ql/instrument.hpp|const ext::shared_ptr<PricingEngine> & pricingEngine() const;+| |ql/instrument.hpp|const std::map<std::string, std::any> & additionalResults() const;+| |ql/instruments/bond.hpp|const Calendar & calendar() const;+| |ql/instruments/bond.hpp|const std::vector<Real> & notionals() const;+| |ql/instruments/bond.hpp|const Leg & cashflows() const;+| |ql/instruments/bond.hpp|const Leg & redemptions() const;+| |ql/instruments/bond.hpp|Date issueDate() const;+| |ql/instruments/bonds/btp.hpp|const std::vector<ext::shared_ptr<BTP>> & btps() const;+| |ql/instruments/bonds/btp.hpp|const std::vector<Handle<Quote>> & cleanPriceQuotes() const;+| |ql/instruments/bonds/btp.hpp|Rate yield() const;+| |ql/instruments/bonds/btp.hpp|Time duration() const;+| |ql/instruments/bonds/btp.hpp|const std::vector<Rate> & yields() const;+| |ql/instruments/bonds/btp.hpp|const std::vector<Time> & durations() const;+| |ql/instruments/bonds/btp.hpp|const std::vector<Time> & swapLengths() const;+| |ql/instruments/bonds/btp.hpp|const std::vector<Rate> & swapRates() const;+| |ql/instruments/bonds/btp.hpp|const std::vector<Rate> & swapYields() const;+| |ql/instruments/bonds/btp.hpp|const std::vector<Time> & swapDurations() const;+| |ql/instruments/bonds/btp.hpp|ext::shared_ptr<VanillaSwap> equivalentSwap() const;+| |ql/instruments/bonds/btp.hpp|Rate equivalentSwapRate() const;+| |ql/instruments/bonds/btp.hpp|Rate equivalentSwapYield() const;+| |ql/instruments/bonds/btp.hpp|Time equivalentSwapDuration() const;+| |ql/instruments/bonds/btp.hpp|Time equivalentSwapLength() const;+| |ql/instruments/bonds/btp.hpp|Spread equivalentSwapSpread() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|const StubIndexSelection & ConstNotionalCrossCurrencyBasisSwap::payStubIndexSelection() const;+|x|ql/instruments/constnotionalcrosscurrencybasisswap.hpp|const StubIndexSelection & ConstNotionalCrossCurrencyBasisSwap::recStubIndexSelection() const;+|x|ql/instruments/constnotionalcrosscurrencyfixedvsfloatingswap.hpp|const StubIndexSelection & ConstNotionalCrossCurrencyFixedVsFloatingSwap::floatStubIndexSelection() const;+| |ql/instruments/cpiswap.hpp|Real nominal() const;+| |ql/instruments/cpiswap.hpp|bool subtractInflationNominal() const;+| |ql/instruments/cpiswap.hpp|Spread spread() const;+| |ql/instruments/cpiswap.hpp|const DayCounter & floatDayCount() const;+| |ql/instruments/cpiswap.hpp|const Schedule & floatSchedule() const;+| |ql/instruments/cpiswap.hpp|const BusinessDayConvention & floatPaymentRoll() const;+| |ql/instruments/cpiswap.hpp|Natural fixingDays() const;+| |ql/instruments/cpiswap.hpp|const ext::shared_ptr<IborIndex> & floatIndex() const;+| |ql/instruments/cpiswap.hpp|Rate fixedRate() const;+| |ql/instruments/cpiswap.hpp|Real baseCPI() const;+| |ql/instruments/cpiswap.hpp|const DayCounter & fixedDayCount() const;+| |ql/instruments/cpiswap.hpp|const Schedule & fixedSchedule() const;+| |ql/instruments/cpiswap.hpp|const BusinessDayConvention & fixedPaymentRoll() const;+| |ql/instruments/cpiswap.hpp|Period observationLag() const;+| |ql/instruments/cpiswap.hpp|const ext::shared_ptr<ZeroInflationIndex> & fixedIndex() const;+| |ql/instruments/cpiswap.hpp|CPI::InterpolationType observationInterpolation() const;+| |ql/instruments/cpiswap.hpp|Real inflationNominal() const;+| |ql/instruments/cpiswap.hpp|const Leg & cpiLeg() const;+| |ql/instruments/cpiswap.hpp|const Leg & floatLeg() const;+|v|ql/instruments/crosscurrencyswap.hpp|CrossCurrencySwap::CrossCurrencySwap(const Leg & firstLeg, const Currency & firstLegCcy, const Leg & secondLeg, const Currency & secondLegCcy);+|v|ql/instruments/crosscurrencyswap.hpp|CrossCurrencySwap::CrossCurrencySwap(const std::vector<Leg> & legs, const std::vector<bool> & payer, const std::vector<Currency> & currencies);+|v|ql/instruments/crosscurrencyswap.hpp|const Currency & CrossCurrencySwap::legCurrency(Size j) const;+|v|ql/instruments/crosscurrencyswap.hpp|Real CrossCurrencySwap::inCcyLegBPS(Size j) const;+|v|ql/instruments/crosscurrencyswap.hpp|Real CrossCurrencySwap::inCcyLegNPV(Size j) const;+|v|ql/instruments/crosscurrencyswap.hpp|DiscountFactor CrossCurrencySwap::npvDateDiscounts(Size j) const;+|x|ql/instruments/fixedvsfloatingswap.hpp|Integer FixedVsFloatingSwap::paymentLag() const;+|x|ql/instruments/fixedvsfloatingswap.hpp|const Calendar & FixedVsFloatingSwap::paymentCalendar() const;+| |ql/instruments/fixedvsfloatingswap.hpp|Real nominal() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const std::vector<Real> & nominals() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const std::vector<Real> & fixedNominals() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const Schedule & fixedSchedule() const;+| |ql/instruments/fixedvsfloatingswap.hpp|Rate fixedRate() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const DayCounter & fixedDayCount() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const std::vector<Real> & floatingNominals() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const Schedule & floatingSchedule() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const ext::shared_ptr<IborIndex> & iborIndex() const;+| |ql/instruments/fixedvsfloatingswap.hpp|Spread spread() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const DayCounter & floatingDayCount() const;+| |ql/instruments/fixedvsfloatingswap.hpp|BusinessDayConvention paymentConvention() const;+| |ql/instruments/fixedvsfloatingswap.hpp|Integer paymentLag() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const Calendar & paymentCalendar() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const Leg & fixedLeg() const;+| |ql/instruments/fixedvsfloatingswap.hpp|const Leg & floatingLeg() const;+| |ql/instruments/floatfloatswap.hpp|const std::vector<Real> & nominal1() const;+| |ql/instruments/floatfloatswap.hpp|const std::vector<Real> & nominal2() const;+| |ql/instruments/floatfloatswap.hpp|const Schedule & schedule1() const;+| |ql/instruments/floatfloatswap.hpp|const Schedule & schedule2() const;+| |ql/instruments/floatfloatswap.hpp|const ext::shared_ptr<InterestRateIndex> & index1() const;+| |ql/instruments/floatfloatswap.hpp|const ext::shared_ptr<InterestRateIndex> & index2() const;+| |ql/instruments/floatfloatswap.hpp|std::vector<Real> spread1() const;+| |ql/instruments/floatfloatswap.hpp|std::vector<Real> spread2() const;+| |ql/instruments/floatfloatswap.hpp|std::vector<Real> gearing1() const;+| |ql/instruments/floatfloatswap.hpp|std::vector<Real> gearing2() const;+| |ql/instruments/floatfloatswap.hpp|const DayCounter & dayCount1() const;+| |ql/instruments/floatfloatswap.hpp|const DayCounter & dayCount2() const;+| |ql/instruments/floatfloatswap.hpp|BusinessDayConvention paymentConvention1() const;+| |ql/instruments/floatfloatswap.hpp|BusinessDayConvention paymentConvention2() const;+| |ql/instruments/floatfloatswap.hpp|const Leg & leg1() const;+| |ql/instruments/floatfloatswap.hpp|const Leg & leg2() const;+| |ql/instruments/forward.hpp|const Handle<YieldTermStructure> & Forward::discountCurve() const;+| |ql/instruments/forward.hpp|const Handle<YieldTermStructure> & Forward::incomeDiscountCurve() const;+| |ql/instruments/forward.hpp|const Calendar & calendar() const;+| |ql/instruments/forward.hpp|const Handle<YieldTermStructure> & discountCurve() const;+| |ql/instruments/forward.hpp|const Handle<YieldTermStructure> & incomeDiscountCurve() const;+| |ql/instruments/forwardrateagreement.hpp|const Handle<YieldTermStructure> & ForwardRateAgreement::discountCurve() const;+| |ql/instruments/forwardrateagreement.hpp|const Calendar & calendar() const;+| |ql/instruments/forwardrateagreement.hpp|const Handle<YieldTermStructure> & discountCurve() const;+| |ql/instruments/forwardvanillaoption.hpp|void validate() const;+| |ql/instruments/makecapfloor.hpp|MakeCapFloor::MakeCapFloor(CapFloor::Type capFloorType, const Period & capFloorTenor, const ext::shared_ptr<IborIndex> & iborIndex);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withStrike(Rate k);+| |ql/instruments/makecapfloor.hpp|MakeCapFloor & MakeCapFloor::withForwardStart(const Period & f);+| |ql/instruments/makecms.hpp|MakeCms::MakeCms(const Period & swapTenor, const ext::shared_ptr<SwapIndex> & swapIndex, const ext::shared_ptr<IborIndex> & iborIndex = { });+| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withIborSpread(Rate s);+| |ql/instruments/makecms.hpp|MakeCms & MakeCms::withForwardStart(const Period & f);+| |ql/instruments/makeois.hpp|MakeOIS::MakeOIS(const Period & swapTenor, const ext::shared_ptr<OvernightIndex> & overnightIndex);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withFixedRate(Rate k);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withForwardStart(const Period & f);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withSettlementCalendar(const Calendar & cal);+| |ql/instruments/makeois.hpp|MakeOIS & MakeOIS::withRoundingPrecision(const std::optional<Integer> & roundingPrecision);+| |ql/instruments/makevanillaswap.hpp|MakeVanillaSwap::MakeVanillaSwap(const Period & swapTenor, const ext::shared_ptr<IborIndex> & iborIndex);+| |ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withFixedRate(Rate k);+| |ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withForwardStart(const Period & f);+| |ql/instruments/makevanillaswap.hpp|MakeVanillaSwap & MakeVanillaSwap::withSettlementCalendar(const Calendar & cal);+|v|ql/instruments/nonstandardswap.hpp|NonstandardSwap::NonstandardSwap(Swap::Type type, std::vector<Real> fixedNominal, std::vector<Real> floatingNominal, Schedule fixedSchedule, std::vector<Real> fixedRate, DayCounter fixedDayCount, Schedule floatingSchedule, ext::shared_ptr<IborIndex> iborIndex, std::vector<Real> gearing, std::vector<Spread> spread, DayCounter floatingDayCount, bool intermediateCapitalExchange = false, bool finalCapitalExchange = false, std::optional<BusinessDayConvention> paymentConvention = std::nullopt, Integer paymentLag = 0, Calendar paymentCalendar = Calendar());+|x|ql/instruments/nonstandardswap.hpp|Integer NonstandardSwap::paymentLag() const;+|x|ql/instruments/nonstandardswap.hpp|const Calendar & NonstandardSwap::paymentCalendar() const;+| |ql/instruments/nonstandardswap.hpp|const std::vector<Real> & fixedNominal() const;+| |ql/instruments/nonstandardswap.hpp|const std::vector<Real> & floatingNominal() const;+| |ql/instruments/nonstandardswap.hpp|const Schedule & fixedSchedule() const;+| |ql/instruments/nonstandardswap.hpp|const std::vector<Real> & fixedRate() const;+| |ql/instruments/nonstandardswap.hpp|const DayCounter & fixedDayCount() const;+| |ql/instruments/nonstandardswap.hpp|const Schedule & floatingSchedule() const;+| |ql/instruments/nonstandardswap.hpp|const ext::shared_ptr<IborIndex> & iborIndex() const;+| |ql/instruments/nonstandardswap.hpp|Spread spread() const;+| |ql/instruments/nonstandardswap.hpp|Real gearing() const;+| |ql/instruments/nonstandardswap.hpp|const std::vector<Spread> & spreads() const;+| |ql/instruments/nonstandardswap.hpp|const std::vector<Real> & gearings() const;+| |ql/instruments/nonstandardswap.hpp|const DayCounter & floatingDayCount() const;+| |ql/instruments/nonstandardswap.hpp|BusinessDayConvention paymentConvention() const;+| |ql/instruments/nonstandardswap.hpp|Integer paymentLag() const;+| |ql/instruments/nonstandardswap.hpp|const Calendar & paymentCalendar() const;+| |ql/instruments/nonstandardswap.hpp|const Leg & fixedLeg() const;+| |ql/instruments/nonstandardswap.hpp|const Leg & floatingLeg() const;+|v|ql/instruments/overnightindexedswap.hpp|OvernightIndexedSwap::OvernightIndexedSwap(Type type, const std::vector<Real> & nominals, const Schedule & schedule, Rate fixedRate, DayCounter fixedDC, const ext::shared_ptr<OvernightIndex> & overnightIndex, Spread spread = 0.0, Integer paymentLag = 0, BusinessDayConvention paymentAdjustment = Following, const Calendar & paymentCalendar = Calendar(), bool telescopicValueDates = false, RateAveraging::Type averagingMethod = RateAveraging::Compound, Natural lookbackDays = Null<Natural>(), Natural lockoutDays = 0, bool applyObservationShift = false, const std::optional<Integer> & roundingPrecision = std::nullopt);+|x|ql/instruments/overnightindexedswap.hpp|std::optional<Integer> OvernightIndexedSwap::roundingPrecision() const;+| |ql/instruments/varianceswap.hpp|Date startDate() const;+| |ql/instruments/varianceswap.hpp|Date maturityDate() const;+| |ql/instruments/varianceswap.hpp|Real strike() const;+| |ql/instruments/varianceswap.hpp|Real notional() const;+| |ql/instruments/varianceswap.hpp|Position::Type position() const;+| |ql/instruments/yearonyearinflationswap.hpp|Real nominal() const;+| |ql/instruments/yearonyearinflationswap.hpp|const Schedule & fixedSchedule() const;+| |ql/instruments/yearonyearinflationswap.hpp|Rate fixedRate() const;+| |ql/instruments/yearonyearinflationswap.hpp|const DayCounter & fixedDayCount() const;+| |ql/instruments/yearonyearinflationswap.hpp|const Schedule & yoySchedule() const;+| |ql/instruments/yearonyearinflationswap.hpp|const ext::shared_ptr<YoYInflationIndex> & yoyInflationIndex() const;+| |ql/instruments/yearonyearinflationswap.hpp|Spread spread() const;+| |ql/instruments/yearonyearinflationswap.hpp|const DayCounter & yoyDayCount() const;+| |ql/instruments/yearonyearinflationswap.hpp|BusinessDayConvention paymentConvention() const;+| |ql/instruments/yearonyearinflationswap.hpp|const Leg & fixedLeg() const;+| |ql/instruments/yearonyearinflationswap.hpp|const Leg & yoyLeg() const;+|v|ql/interestrate.hpp|Real InterestRate::discountFactorFirstDerivative(Time t) const;+|v|ql/interestrate.hpp|Real InterestRate::discountFactorSecondDerivative(Time t) const;+| |ql/math/abcdmathfunction.hpp|Real derivative(Time t) const;+| |ql/math/abcdmathfunction.hpp|Real primitive(Time t) const;+| |ql/math/abcdmathfunction.hpp|Real maximumValue() const;+| |ql/math/array.hpp|Array(Size size);+| |ql/math/array.hpp|Array(Size size, Real value);+| |ql/math/array.hpp|Array(Size size, Real value, Real increment);+| |ql/math/array.hpp|Real front() const;+| |ql/math/array.hpp|Real back() const;+| |ql/math/array.hpp|Real & front();+| |ql/math/array.hpp|Real & back();+| |ql/math/array.hpp|bool empty() const;+| |ql/math/array.hpp|void resize(Size n);+| |ql/math/distributions/binomialdistribution.hpp|BinomialDistribution(Real p, BigNatural n);+| |ql/math/distributions/binomialdistribution.hpp|CumulativeBinomialDistribution(Real p, BigNatural n);+| |ql/math/distributions/normaldistribution.hpp|Real derivative(Real x) const;+| |ql/math/distributions/poissondistribution.hpp|PoissonDistribution(Real mu);+| |ql/math/distributions/studenttdistribution.hpp|InverseCumulativeStudent::InverseCumulativeStudent(Integer n);+| |ql/math/distributions/studenttdistribution.hpp|InverseCumulativeStudent::InverseCumulativeStudent(Integer n, Real, Size = 50);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::gaussLaguerre(Size integrationOrder = 128);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::gaussLegendre(Size integrationOrder = 128);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::gaussChebyshev(Size integrationOrder = 128);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::gaussChebyshev2nd(Size integrationOrder = 128);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::gaussLobatto(Real relTolerance, Real absTolerance, Size maxEvaluations = 1000, bool useConvergenceEstimate = false);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::gaussKronrod(Real absTolerance, Size maxEvaluations = 1000);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::simpson(Real absTolerance, Size maxEvaluations = 1000);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::trapezoid(Real absTolerance, Size maxEvaluations = 1000);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::discreteSimpson(Size evaluation = 1000);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::discreteTrapezoid(Size evaluation = 1000);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::expSinh(Real relTolerance = 1e-8);+|v|ql/math/integrals/fourierintegration.hpp|static FourierIntegration FourierIntegration::tanhSinh(Real relTolerance = 1e-8);+|x|ql/math/integrals/fourierintegration.hpp|static Real FourierIntegration::andersenPiterbargIntegrationLimit(Real c_inf, Real epsilon, Real v0, Real t);+|x|ql/math/integrals/fourierintegration.hpp|Real FourierIntegration::calculate(Real c_inf, const std::function<Real (Real)> & f, const std::function<Real ()> & maxBound = { }, Real scaling = 1.0) const;+|x|ql/math/integrals/fourierintegration.hpp|Real FourierIntegration::calculate(Real c_inf, const std::function<Real (Real)> & f, Real maxBound) const;+|x|ql/math/integrals/fourierintegration.hpp|Size FourierIntegration::numberOfEvaluations() const;+|x|ql/math/integrals/fourierintegration.hpp|bool FourierIntegration::isAdaptiveIntegration() const;+| |ql/math/integrals/gaussianorthogonalpolynomial.hpp|Real GaussianOrthogonalPolynomial::logW(Real x) const;+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|Real value(Real x) const;+| |ql/math/interpolations/convexmonotoneinterpolation.hpp|Real primitive(Real x) const;+| |ql/math/interpolations/multicubicspline.hpp|void set_shared_increments() const;+| |ql/math/matrix.hpp|Matrix();+| |ql/math/matrix.hpp|Matrix(Size rows, Size columns);+| |ql/math/matrix.hpp|Matrix(Size rows, Size columns, Real value);+| |ql/math/matrix.hpp|Array diagonal() const;+| |ql/math/matrix.hpp|Size rows() const;+| |ql/math/matrix.hpp|Size columns() const;+| |ql/math/matrix.hpp|Size size1() const;+| |ql/math/matrix.hpp|Size size2() const;+| |ql/math/matrix.hpp|bool empty() const;+| |ql/math/ode/fractionaladams.hpp|FractionalAdams::FractionalAdams<T>(Real alpha);+| |ql/math/ode/fractionaladams.hpp|std::vector<T> FractionalAdams::solve(const OdeFct & ode, const T & y0, Real tMax, Size steps) const;+| |ql/math/ode/fractionaladams.hpp|RiemannLiouvilleWeights::RiemannLiouvilleWeights(Real alpha, Size steps);+| |ql/math/ode/fractionaladams.hpp|Real RiemannLiouvilleWeights::alpha() const;+| |ql/math/ode/fractionaladams.hpp|RiemannLiouvilleWeights(Real alpha, Size steps);+| |ql/math/ode/fractionalkernelapproximation.hpp|Real expm1OverX(Real y);+| |ql/math/ode/fractionalkernelapproximation.hpp|Real fractionalKernelNorm(Real b);+| |ql/math/ode/fractionalkernelapproximation.hpp|FractionalKernelApproximation::FractionalKernelApproximation(Real alpha, Size n, Time tMax);+| |ql/math/ode/fractionalkernelapproximation.hpp|const Array & FractionalKernelApproximation::weights() const;+| |ql/math/ode/fractionalkernelapproximation.hpp|const Array & FractionalKernelApproximation::rates() const;+| |ql/math/ode/fractionalkernelapproximation.hpp|Size FractionalKernelApproximation::size() const;+| |ql/math/ode/fractionalkernelapproximation.hpp|FractionalKernelApproximation(Real alpha, Size n, Time tMax);+| |ql/math/ode/fractionalkernelapproximation.hpp|void build(Real alpha, Size n, Real etaLo, Real etaHi);+| |ql/math/optimization/cmaes.hpp|Configuration & Configuration::withPopulationSize(Size n);+| |ql/math/optimization/cmaes.hpp|Configuration & Configuration::withSigma(Real s);+| |ql/math/optimization/cmaes.hpp|Configuration & Configuration::withBounds(const Array & lo, const Array & up);+| |ql/math/optimization/cmaes.hpp|Configuration & Configuration::withInitialMean(const Array & m);+| |ql/math/optimization/cmaes.hpp|Cmaes::Cmaes(Configuration configuration = Configuration());+| |ql/math/optimization/cmaes.hpp|const Configuration & Cmaes::configuration() const;+| |ql/math/optimization/problem.hpp|Real value(const Array & x);+| |ql/math/optimization/problem.hpp|Array values(const Array & x);+| |ql/math/optimization/problem.hpp|void gradient(Array & grad_f, const Array & x);+| |ql/math/optimization/problem.hpp|Real valueAndGradient(Array & grad_f, const Array & x);+| |ql/math/randomnumbers/zigguratgaussianrng.hpp|ZigguratGaussianRng::ZigguratGaussianRng<RNG>(RNG uint64Generator);+| |ql/math/randomnumbers/zigguratgaussianrng.hpp|Real nextReal() const;+| |ql/math/solver1d.hpp|void setMaxEvaluations(Size evaluations);+| |ql/math/solver1d.hpp|void setLowerBound(Real lowerBound);+| |ql/math/solver1d.hpp|void setUpperBound(Real upperBound);+| |ql/math/statistics/discrepancystatistics.hpp|DiscrepancyStatistics(Size dimension);+| |ql/math/statistics/gaussianstatistics.hpp|Real gaussianRegret(Real target) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real gaussianPercentile(Real percentile) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real gaussianTopPercentile(Real percentile) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real gaussianPotentialUpside(Real percentile) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real gaussianValueAtRisk(Real percentile) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real gaussianExpectedShortfall(Real percentile) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real gaussianShortfall(Real target) const;+| |ql/math/statistics/gaussianstatistics.hpp|Real gaussianAverageShortfall(Real target) const;+| |ql/math/statistics/generalstatistics.hpp|GeneralStatistics();+| |ql/math/statistics/generalstatistics.hpp|Size samples() const;+| |ql/math/statistics/generalstatistics.hpp|const std::vector<std::pair<Real, Real>> & data() const;+| |ql/math/statistics/generalstatistics.hpp|Real standardDeviation() const;+| |ql/math/statistics/generalstatistics.hpp|Real errorEstimate() const;+| |ql/math/statistics/generalstatistics.hpp|Real min() const;+| |ql/math/statistics/generalstatistics.hpp|Real max() const;+| |ql/math/statistics/generalstatistics.hpp|void reserve(Size n) const;+| |ql/math/statistics/generalstatistics.hpp|void sort() const;+| |ql/math/statistics/riskstatistics.hpp|Real semiVariance() const;+| |ql/math/statistics/riskstatistics.hpp|Real semiDeviation() const;+| |ql/math/statistics/riskstatistics.hpp|Real downsideVariance() const;+| |ql/math/statistics/riskstatistics.hpp|Real downsideDeviation() const;+| |ql/math/statistics/riskstatistics.hpp|Real regret(Real target) const;+| |ql/math/statistics/riskstatistics.hpp|Real shortfall(Real target) const;+| |ql/math/statistics/riskstatistics.hpp|Real averageShortfall(Real target) const;+| |ql/math/statistics/sequencestatistics.hpp|Size samples() const;+| |ql/math/statistics/sequencestatistics.hpp|Real weightSum() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> mean() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> variance() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> standardDeviation() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> downsideVariance() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> downsideDeviation() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> semiVariance() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> semiDeviation() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> errorEstimate() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> skewness() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> kurtosis() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> min() const;+| |ql/math/statistics/sequencestatistics.hpp|std::vector<Real> max() const;+| |ql/math/statistics/sequencestatistics.hpp|Matrix covariance() const;+| |ql/math/statistics/sequencestatistics.hpp|Matrix correlation() const;+| |ql/methods/finitedifferences/operators/ninepointlinearop.hpp|NinePointLinearOp(NinePointLinearOp && m);+| |ql/methods/finitedifferences/operators/numericaldifferentiation.hpp|const Array & weights() const;+| |ql/methods/finitedifferences/operators/numericaldifferentiation.hpp|const Array & offsets() const;+| |ql/methods/finitedifferences/operators/triplebandlinearop.hpp|TripleBandLinearOp(TripleBandLinearOp && m);+| |ql/methods/finitedifferences/schemes/trbdf2scheme.hpp|void setStep(Time dt);+| |ql/methods/finitedifferences/schemes/trbdf2scheme.hpp|Size numberOfIterations() const;+| |ql/methods/finitedifferences/solvers/fdmndimsolver.hpp|Real thetaAt(const std::vector<Real> & x) const;+| |ql/methods/finitedifferences/solvers/fdmndimsolver.hpp|Real interpolateAt(const std::vector<Real> & x) const;+| |ql/methods/finitedifferences/solvers/fdmndimsolver.hpp|static void setValue(data_table & f, const std::vector<Size> & x, Real value);+| |ql/methods/finitedifferences/trbdf2.hpp|void step(array_type & a, Time t);+| |ql/methods/finitedifferences/tridiagonaloperator.hpp|void setTime(Time t);+| |ql/methods/lattices/lattice.hpp|const Array & statePrices(Size i) const;+| |ql/methods/lattices/lattice2d.hpp|Size size(Size i) const;+| |ql/methods/lattices/lattice2d.hpp|Size descendant(Size i, Size index, Size branch) const;+| |ql/methods/lattices/lattice2d.hpp|Real probability(Size i, Size index, Size branch) const;+| |ql/methods/lattices/trinomialtree.hpp|Size size(Size i) const;+| |ql/methods/lattices/trinomialtree.hpp|Real underlying(Size i, Size index) const;+| |ql/methods/lattices/trinomialtree.hpp|Size descendant(Size i, Size index, Size branch) const;+| |ql/methods/lattices/trinomialtree.hpp|Branching();+| |ql/methods/lattices/trinomialtree.hpp|Size descendant(Size index, Size branch) const;+| |ql/methods/lattices/trinomialtree.hpp|Real probability(Size index, Size branch) const;+| |ql/methods/lattices/trinomialtree.hpp|Integer jMin() const;+| |ql/methods/lattices/trinomialtree.hpp|Integer jMax() const;+| |ql/methods/lattices/trinomialtree.hpp|void add(Integer k, Real p1, Real p2, Real p3);+| |ql/methods/montecarlo/longstaffschwartzpathpricer.hpp|void calibrate();+| |ql/methods/montecarlo/longstaffschwartzpathpricer.hpp|Real exerciseProbability() const;+| |ql/methods/montecarlo/montecarlomodel.hpp|void addSamples(Size samples);+| |ql/methods/montecarlo/multipath.hpp|MultiPath(Size nAsset, const TimeGrid & timeGrid);+| |ql/methods/montecarlo/multipath.hpp|MultiPath(std::vector<Path> multiPath);+| |ql/methods/montecarlo/path.hpp|bool empty() const;+| |ql/methods/montecarlo/path.hpp|Size length() const;+| |ql/methods/montecarlo/path.hpp|Real value(Size i) const;+| |ql/methods/montecarlo/path.hpp|Real & value(Size i);+| |ql/methods/montecarlo/path.hpp|Real front() const;+| |ql/methods/montecarlo/path.hpp|Real & front();+| |ql/methods/montecarlo/path.hpp|Real back() const;+| |ql/methods/montecarlo/path.hpp|Real & back();+| |ql/methods/montecarlo/path.hpp|Time time(Size i) const;+| |ql/methods/montecarlo/path.hpp|const TimeGrid & timeGrid() const;+| |ql/models/calibrationhelper.hpp|const Handle<Quote> & BlackCalibrationHelper::volatility() const;+|v|ql/models/equity/roughhestonmodel.hpp|RoughHestonModel::RoughHestonModel(const ext::shared_ptr<HestonProcess> & process, Real hurst);+|v|ql/models/equity/roughhestonmodel.hpp|Real RoughHestonModel::theta() const;+|v|ql/models/equity/roughhestonmodel.hpp|Real RoughHestonModel::kappa() const;+|v|ql/models/equity/roughhestonmodel.hpp|Real RoughHestonModel::sigma() const;+|v|ql/models/equity/roughhestonmodel.hpp|Real RoughHestonModel::rho() const;+|v|ql/models/equity/roughhestonmodel.hpp|Real RoughHestonModel::v0() const;+|v|ql/models/equity/roughhestonmodel.hpp|Real RoughHestonModel::hurst() const;+|v|ql/models/equity/roughhestonmodel.hpp|ext::shared_ptr<HestonProcess> RoughHestonModel::process() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<Period> & fixingPeriods() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<Date> & skippedDates() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<std::string> & skippedDatesErrorMessage() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<Date> & failedDates() const;+| |ql/models/marketmodels/historicalforwardratesanalysis.hpp|const std::vector<std::string> & failedDatesErrorMessage() const;+| |ql/models/marketmodels/historicalratesanalysis.hpp|const std::vector<Date> & skippedDates() const;+| |ql/models/marketmodels/historicalratesanalysis.hpp|const std::vector<std::string> & skippedDatesErrorMessage() const;+| |ql/models/marketmodels/historicalratesanalysis.hpp|const ext::shared_ptr<SequenceStatistics> & stats() const;+| |ql/models/marketmodels/models/capletcoterminalalphacalibration.hpp|const std::vector<Real> & alpha() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & mktCapletVols() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & mdlCapletVols() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & mktSwaptionVols() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Volatility> & mdlSwaptionVols() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Natural failures() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real deformationSize() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real capletRmsError() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real capletMaxError() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real swaptionRmsError() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|Real swaptionMaxError() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const std::vector<Matrix> & swapPseudoRoots() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const Matrix & swapPseudoRoot(Size i) const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|const ext::shared_ptr<CurveState> & curveState() const;+| |ql/models/marketmodels/models/ctsmmcapletcalibration.hpp|std::vector<Spread> displacements() const;+| |ql/models/marketmodels/piecewiseconstantcorrelation.hpp|const Matrix & correlation(Size i) const;+| |ql/models/marketmodels/products/multistep/exerciseadapter.hpp|const MarketModelExerciseValue & exerciseValue() const;+| |ql/models/model.hpp|const ext::shared_ptr<Constraint> & constraint() const;+| |ql/models/shortrate/onefactormodel.hpp|Real OneFactorAffineModel::discountBond(Time now, Time maturity, Rate rate) const;+|v|ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|Real Gaussian1dModel::compoundedRate(const OvernightIndexedCoupon & coupon, const Date & referenceDate = Date(), Real y = 0.0, const Handle<YieldTermStructure> & yts = Handle<YieldTermStructure>()) const;+| |ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp|ext::shared_ptr<StochasticProcess1D> stateProcess() const;+| |ql/models/shortrate/onefactormodels/gsr.hpp|Real numeraireTime() const;+| |ql/money.hpp|Money(Currency currency, Decimal value);+| |ql/money.hpp|Money(Decimal value, Currency currency);+| |ql/money.hpp|const Currency & currency() const;+| |ql/money.hpp|Decimal value() const;+| |ql/money.hpp|Money rounded() const;+| |ql/patterns/lazyobject.hpp|LazyObject();+| |ql/patterns/lazyobject.hpp|void recalculate();+| |ql/patterns/lazyobject.hpp|void freeze();+| |ql/patterns/lazyobject.hpp|void unfreeze();+| |ql/patterns/lazyobject.hpp|void forwardFirstNotificationOnly();+| |ql/patterns/lazyobject.hpp|void alwaysForwardNotifications();+| |ql/patterns/lazyobject.hpp|bool isCalculated() const;+| |ql/patterns/observable.hpp|Observable(const Observable &);+| |ql/patterns/observable.hpp|void unregisterWithAll();+| |ql/patterns/singleton.hpp|static T & instance();+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_price.hpp|MakeMCDiscreteArithmeticAPEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & withSteps(Size steps);+| |ql/pricingengines/asian/mc_discr_arith_av_price_heston.hpp|MakeMCDiscreteArithmeticAPHestonEngine<RNG, S, P> & withStepsPerYear(Size steps);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_arith_av_strike.hpp|MakeMCDiscreteArithmeticASEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_geom_av_price.hpp|MakeMCDiscreteGeometricAPEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & withSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & withMaxSamples(Size samples);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & withSeed(BigNatural seed);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & withSteps(Size steps);+| |ql/pricingengines/asian/mc_discr_geom_av_price_heston.hpp|MakeMCDiscreteGeometricAPHestonEngine<RNG, S, P> & withStepsPerYear(Size steps);+| |ql/pricingengines/bacheliercalculator.hpp|Real thetaPerDay(Real spot, Time maturity) const;+| |ql/pricingengines/bacheliercalculator.hpp|Real itmCashProbability() const;+| |ql/pricingengines/bacheliercalculator.hpp|Real itmAssetProbability() const;+| |ql/pricingengines/bacheliercalculator.hpp|Real alpha() const;+| |ql/pricingengines/bacheliercalculator.hpp|Real beta() const;+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & withSteps(Size steps);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/barrier/mcbarrierengine.hpp|MakeMCBarrierEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withSteps(Size steps);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withStepsPerYear(Size steps);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withSamples(Size samples);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withMaxSamples(Size samples);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withSeed(BigNatural seed);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withCalibrationSamples(Size samples);+| |ql/pricingengines/basket/mcamericanbasketengine.hpp|MakeMCAmericanBasketEngine<RNG> & withBasisSystem(LsmBasisSystem::PolynomialType polynomialType);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & withSteps(Size steps);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/basket/mceuropeanbasketengine.hpp|MakeMCEuropeanBasketEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/blackcalculator.hpp|Real thetaPerDay(Real spot, Time maturity) const;+| |ql/pricingengines/blackcalculator.hpp|Real itmCashProbability() const;+| |ql/pricingengines/blackcalculator.hpp|Real itmAssetProbability() const;+| |ql/pricingengines/blackcalculator.hpp|Real alpha() const;+| |ql/pricingengines/blackcalculator.hpp|Real beta() const;+| |ql/pricingengines/blackscholescalculator.hpp|Real delta() const;+| |ql/pricingengines/blackscholescalculator.hpp|Real elasticity() const;+| |ql/pricingengines/blackscholescalculator.hpp|Real gamma() const;+| |ql/pricingengines/blackscholescalculator.hpp|Real theta(Time maturity) const;+| |ql/pricingengines/blackscholescalculator.hpp|Real thetaPerDay(Time maturity) const;+| |ql/pricingengines/bond/discountingbondengine.hpp|const Handle<YieldTermStructure> & DiscountingBondEngine::discountCurve() const;+| |ql/pricingengines/bond/discretizedconvertible.hpp|DiscretizedConvertible::DiscretizedConvertible(ConvertibleBond::arguments, ext::shared_ptr<GeneralizedBlackScholesProcess> process, const DividendSchedule & dividends, Handle<Quote> creditSpread, const TimeGrid & grid = TimeGrid());+| |ql/pricingengines/bond/riskybondengine.hpp|const Handle<DefaultProbabilityTermStructure> & RiskyBondEngine::defaultTS() const;+| |ql/pricingengines/bond/riskybondengine.hpp|const Handle<YieldTermStructure> & RiskyBondEngine::yieldTS() const;+| |ql/pricingengines/bond/riskybondengine.hpp|const Handle<DefaultProbabilityTermStructure> & defaultTS() const;+| |ql/pricingengines/bond/riskybondengine.hpp|Real recoveryRate() const;+| |ql/pricingengines/bond/riskybondengine.hpp|const Handle<YieldTermStructure> & yieldTS() const;+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/capfloor/mchullwhiteengine.hpp|MakeMCHullWhiteCapFloorEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/cliquet/mcperformanceengine.hpp|MakeMCPerformanceEngine<RNG, S> & withSeed(BigNatural seed);+|x|ql/pricingengines/credit/isdacdsengine.hpp|const Handle<YieldTermStructure> & IsdaCdsEngine::isdaRateCurve() const;+|x|ql/pricingengines/credit/isdacdsengine.hpp|const Handle<DefaultProbabilityTermStructure> & IsdaCdsEngine::isdaCreditCurve() const;+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & withSteps(Size steps);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/forward/mcforwardeuropeanbsengine.hpp|MakeMCForwardEuropeanBSEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & withSteps(Size steps);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & withStepsPerYear(Size steps);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & withSamples(Size samples);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & withMaxSamples(Size samples);+| |ql/pricingengines/forward/mcforwardeuropeanhestonengine.hpp|MakeMCForwardEuropeanHestonEngine<RNG, S, P> & withSeed(BigNatural seed);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & withSteps(Size steps);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/forward/mcvarianceswapengine.hpp|MakeMCVarianceSwapEngine<RNG, S> & withSeed(BigNatural seed);+|x|ql/pricingengines/futures/discountingperpetualfuturesengine.hpp|const Handle<YieldTermStructure> & DiscountingPerpetualFuturesEngine::domesticDiscountCurve() const;+|x|ql/pricingengines/futures/discountingperpetualfuturesengine.hpp|const Handle<YieldTermStructure> & DiscountingPerpetualFuturesEngine::foreignDiscountCurve() const;+|x|ql/pricingengines/futures/discountingperpetualfuturesengine.hpp|const Handle<Quote> & DiscountingPerpetualFuturesEngine::assetSpot() const;+| |ql/pricingengines/inflation/inflationcapfloorengines.hpp|const Handle<YoYOptionletVolatilitySurface> & YoYInflationCapFloorEngine::volatility() const;+| |ql/pricingengines/inflation/inflationcapfloorengines.hpp|const Handle<YieldTermStructure> & YoYInflationCapFloorEngine::nominalTermStructure() const;+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & withSteps(Size steps);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & withStepsPerYear(Size steps);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & withSamples(Size samples);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/lookback/mclookbackengine.hpp|MakeMCLookbackEngine<I, RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/mcsimulation.hpp|void calculate(Real requiredTolerance, Size requiredSamples, Size maxSamples) const;+| |ql/pricingengines/swap/discountingswapengine.hpp|const Handle<YieldTermStructure> & DiscountingSwapEngine::discountCurve() const;+|x|ql/pricingengines/swaption/gaussian1dfloatfloatswaptionengine.hpp|const Handle<YieldTermStructure> & Gaussian1dFloatFloatSwaptionEngine::discountingCurve() const;+|v|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|AnalyticRoughHestonEngine::AnalyticRoughHestonEngine(const ext::shared_ptr<RoughHestonModel> & model, Size integrationOrder = 128, Size timeSteps = 256, Approximation approximation = AdamsPredictorCorrector, Size nFactors = 20);+|v|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|AnalyticRoughHestonEngine::AnalyticRoughHestonEngine(const ext::shared_ptr<RoughHestonModel> & model, Integration integration, Size timeSteps = 256, Real andersenPiterbargEpsilon = 1e-25, Real alpha = - 0.5, Approximation approximation = AdamsPredictorCorrector, Size nFactors = 20);+|x|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|void AnalyticRoughHestonEngine::update();+|x|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|void AnalyticRoughHestonEngine::calculate() const;+|v|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|Real AnalyticRoughHestonEngine::priceVanillaPayoff(const ext::shared_ptr<PlainVanillaPayoff> & payoff, const Date & maturity) const;+|v|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|Real AnalyticRoughHestonEngine::priceVanillaPayoff(const ext::shared_ptr<PlainVanillaPayoff> & payoff, Time maturity) const;+|v|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|std::complex<Real> AnalyticRoughHestonEngine::chF(const std::complex<Real> & z, Time t) const;+|v|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|std::complex<Real> AnalyticRoughHestonEngine::lnChF(const std::complex<Real> & z, Time t) const;+|v|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|std::complex<Real> AnalyticRoughHestonEngine::riccatiSolution(const std::complex<Real> & z, Time t) const;+|v|ql/pricingengines/vanilla/analyticroughhestonengine.hpp|Size AnalyticRoughHestonEngine::numberOfEvaluations() const;+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withPolynomialOrder(Size polynomialOrder);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withSteps(Size steps);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withSamples(Size samples);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mcamericanengine.hpp|MakeMCAmericanEngine<RNG, S, RNG_Calibration> & withSeedCalibration(BigNatural seed);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & withSteps(Size steps);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mcdigitalengine.hpp|MakeMCDigitalEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & withSteps(Size steps);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|MakeMCEuropeanEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeanengine.hpp|EuropeanPathPricer(Option::Type type, Real strike, DiscountFactor discount);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & withSteps(Size steps);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|MakeMCEuropeanGJRGARCHEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeangjrgarchengine.hpp|EuropeanGJRGARCHPathPricer(Option::Type type, Real strike, DiscountFactor discount);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & withSteps(Size steps);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & withSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|MakeMCEuropeanHestonEngine<RNG, S, P> & withSeed(BigNatural seed);+| |ql/pricingengines/vanilla/mceuropeanhestonengine.hpp|EuropeanHestonPathPricer(Option::Type type, Real strike, DiscountFactor discount);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & withSteps(Size steps);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & withStepsPerYear(Size steps);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & withSamples(Size samples);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & withAbsoluteTolerance(Real tolerance);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & withMaxSamples(Size samples);+| |ql/pricingengines/vanilla/mchestonhullwhiteengine.hpp|MakeMCHestonHullWhiteEngine<RNG, S> & withSeed(BigNatural seed);+| |ql/processes/coxingersollrossprocess.hpp|Real speed() const;+| |ql/processes/coxingersollrossprocess.hpp|Real volatility() const;+| |ql/processes/coxingersollrossprocess.hpp|Real level() const;+| |ql/processes/gsrprocess.hpp|void flushCache() const;+| |ql/processes/ornsteinuhlenbeckprocess.hpp|Real speed() const;+| |ql/processes/ornsteinuhlenbeckprocess.hpp|Real volatility() const;+| |ql/processes/ornsteinuhlenbeckprocess.hpp|Real level() const;+| |ql/rebatedexercise.hpp|Real rebate(Size index) const;+| |ql/rebatedexercise.hpp|Date rebatePaymentDate(Size index) const;+| |ql/settings.hpp|bool & includeReferenceDateEvents();+| |ql/settings.hpp|bool includeReferenceDateEvents() const;+| |ql/settings.hpp|std::optional<bool> & includeTodaysCashFlows();+| |ql/settings.hpp|std::optional<bool> includeTodaysCashFlows() const;+| |ql/settings.hpp|bool & enforcesTodaysHistoricFixings();+| |ql/settings.hpp|bool enforcesTodaysHistoricFixings() const;+| |ql/stochasticprocess.hpp|Array initialValues() const;+| |ql/stochasticprocess.hpp|Array drift(Time t, const Array & x) const;+| |ql/stochasticprocess.hpp|Matrix diffusion(Time t, const Array & x) const;+| |ql/stochasticprocess.hpp|Array expectation(Time t0, const Array & x0, Time dt) const;+| |ql/stochasticprocess.hpp|Matrix stdDeviation(Time t0, const Array & x0, Time dt) const;+| |ql/stochasticprocess.hpp|Matrix covariance(Time t0, const Array & x0, Time dt) const;+| |ql/stochasticprocess.hpp|Array evolve(Time t0, const Array & x0, Time dt, const Array & dw) const;+| |ql/stochasticprocess.hpp|Array apply(const Array & x0, const Array & dx) const;+| |ql/termstructures/bootstraphelper.hpp|Date earliestDate() const;+| |ql/termstructures/bootstraphelper.hpp|Date maturityDate() const;+| |ql/termstructures/bootstraphelper.hpp|Date latestRelevantDate() const;+| |ql/termstructures/bootstraphelper.hpp|Date pillarDate() const;+| |ql/termstructures/bootstraphelper.hpp|Date latestDate() const;+| |ql/termstructures/credit/interpolateddefaultdensitycurve.hpp|const std::vector<Real> & defaultDensities() const;+| |ql/termstructures/credit/interpolatedhazardratecurve.hpp|const std::vector<Rate> & hazardRates() const;+| |ql/termstructures/credit/interpolatedsurvivalprobabilitycurve.hpp|const std::vector<Probability> & survivalProbabilities() const;+| |ql/termstructures/defaulttermstructure.hpp|const std::vector<Date> & jumpDates() const;+| |ql/termstructures/defaulttermstructure.hpp|const std::vector<Time> & jumpTimes() const;+|u|ql/termstructures/globalbootstrap.hpp|GlobalBootstrap::GlobalBootstrap<Curve>(std::vector<ext::shared_ptr<typename Traits::helper>> additionalHelpers, std::function<std::vector<Date> ()> additionalDates, std::function<Array ()> additionalPenalties, Real accuracy = Null<Real>(), ext::shared_ptr<OptimizationMethod> optimizer = nullptr, ext::shared_ptr<EndCriteria> endCriteria = nullptr, ext::shared_ptr<AdditionalBootstrapVariables> additionalVariables = nullptr, std::vector<Real> instrumentWeights = { }, InitialGuessFn initialGuessFn = nullptr);+|u|ql/termstructures/globalbootstrap.hpp|GlobalBootstrap<Curve>(std::vector<ext::shared_ptr<typename Traits::helper>> additionalHelpers, std::function<std::vector<Date> ()> additionalDates, std::function<Array ()> additionalPenalties, Real accuracy, ext::shared_ptr<OptimizationMethod> optimizer, ext::shared_ptr<EndCriteria> endCriteria, ext::shared_ptr<AdditionalBootstrapVariables> additionalVariables, std::vector<Real> instrumentWeights, InitialGuessFn initialGuessFn);+| |ql/termstructures/globalbootstrap.hpp|void setParentBootstrapper(const ext::shared_ptr<MultiCurveBootstrap> & b) const;+| |ql/termstructures/globalbootstrap.hpp|void setToValid() const;+| |ql/termstructures/globalbootstrap.hpp|void setup(Curve * ts);+| |ql/termstructures/globalbootstrap.hpp|Array setupCostFunction() const;+| |ql/termstructures/globalbootstrap.hpp|Array makeInitialGuess() const;+| |ql/termstructures/globalbootstrap.hpp|Array evaluateCostFunction() const;+| |ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|const std::vector<Rate> & rates() const;+| |ql/termstructures/inflation/interpolatedyoyinflationcurve.hpp|std::vector<std::pair<Date, Rate>> nodes() const;+| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|const std::vector<Rate> & rates() const;+| |ql/termstructures/inflation/interpolatedzeroinflationcurve.hpp|std::vector<std::pair<Date, Rate>> nodes() const;+| |ql/termstructures/inflationtermstructure.hpp|Frequency frequency() const;+| |ql/termstructures/inflationtermstructure.hpp|Rate baseRate() const;+| |ql/termstructures/inflationtermstructure.hpp|ext::shared_ptr<Seasonality> seasonality() const;+| |ql/termstructures/inflationtermstructure.hpp|bool hasSeasonality() const;+| |ql/termstructures/iterativebootstrap.hpp|void setup(Curve * ts);+| |ql/termstructures/localbootstrap.hpp|void setup(Curve * ts);+| |ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|const std::vector<Period> & optionTenors() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|const std::vector<Date> & optionDates() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolcurve.hpp|const std::vector<Time> & optionTimes() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Period> & optionTenors() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Date> & optionDates() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Time> & optionTimes() const;+| |ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp|const std::vector<Rate> & strikes() const;+| |ql/termstructures/volatility/equityfx/localconstantvol.hpp|LocalConstantVol(const Date & referenceDate, Volatility volatility, DayCounter dayCounter);+| |ql/termstructures/volatility/equityfx/localconstantvol.hpp|LocalConstantVol(const Date & referenceDate, Handle<Quote> volatility, DayCounter dayCounter);+| |ql/termstructures/volatility/optionlet/optionletstripper.hpp|Natural OptionletStripper::paymentLag() const;+| |ql/termstructures/volatility/optionlet/strippedoptionletadapter.hpp|ext::shared_ptr<OptionletStripper> optionletStripper() const;+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real alpha() const;+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real beta() const;+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real nu() const;+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real rho() const;+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real rmsError() const;+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|Real maxError() const;+| |ql/termstructures/volatility/sabrinterpolatedsmilesection.hpp|EndCriteria::Type endCriteria() const;+| |ql/termstructures/volatility/smilesection.hpp|Real variance(Rate strike) const;+| |ql/termstructures/volatility/smilesection.hpp|Volatility volatility(Rate strike) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void updateAfterRecalibration();+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Real calibratedAtmAlpha(Time optionTime, Rate forward, Volatility atmVol, std::vector<Real> parameters, Real shift) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|std::pair<Real, Real> smileErrors(Time optionTime, Rate forward, const std::vector<Real> & parameters, Real shift, const std::vector<Real> & strikes, const std::vector<Real> & volatilities, const std::vector<Real> & weights) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void sabrCalibrationSection(const Cube & marketVolCube, Cube & parametersCube, const Period & swapTenor) const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix sparseSabrParameters() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix denseSabrParameters() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix marketVolCube() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix volCubeAtmCalibrated() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void recalibration(Real beta, const Period & swapTenor);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void recalibration(const std::vector<Real> & beta, const Period & swapTenor);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void recalibration(const std::vector<Period> & swapLengths, const std::vector<Real> & beta, const Period & swapTenor);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void setElement(Size IndexOfLayer, Size IndexOfRow, Size IndexOfColumn, Real x);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void setPoints(const std::vector<Matrix> & x);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void setLayer(Size i, const Matrix & x);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void setPoint(const Date & optionDate, const Period & swapTenor, Time optionTime, Time swapLength, const std::vector<Real> & point);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void expandLayers(Size i, bool expandOptionTimes, Size j, bool expandSwapLengths);+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|const std::vector<Matrix> & points() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|const std::vector<Time> & optionTimes() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|const std::vector<Time> & swapLengths() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|void updateInterpolators() const;+| |ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp|Matrix browse() const;+|x|ql/termstructures/volatility/swaption/swaptionvolcube.hpp|const Handle<SwaptionVolatilityStructure> & SwaptionVolatilityCube::atmVol() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Period> & optionTenors() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Date> & optionDates() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Time> & optionTimes() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Period> & swapTenors() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|const std::vector<Time> & swapLengths() const;+| |ql/termstructures/volatility/swaption/swaptionvoldiscrete.hpp|Date optionDateFromTime(Time optionTime) const;+| |ql/termstructures/volatility/swaption/swaptionvolstructure.hpp|Time maxSwapLength() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real alpha() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real beta() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real nu() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real rho() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real gamma() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real rmsError() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|Real maxError() const;+| |ql/termstructures/volatility/zabrinterpolatedsmilesection.hpp|EndCriteria::Type endCriteria() const;+| |ql/termstructures/yield/bondhelpers.hpp|ext::shared_ptr<Bond> bond() const;+| |ql/termstructures/yield/bondhelpers.hpp|Bond::Price::Type priceType() const;+| |ql/termstructures/yield/derivedtermstructure.hpp|DayCounter DerivedYieldTermStructure::dayCounter() const;+| |ql/termstructures/yield/derivedtermstructure.hpp|Date DerivedYieldTermStructure::maxDate() const;+| |ql/termstructures/yield/derivedtermstructure.hpp|const Date & RelativeDerivedYieldTermStructure::referenceDate() const;+| |ql/termstructures/yield/derivedtermstructure.hpp|Calendar RelativeDerivedYieldTermStructure::calendar() const;+| |ql/termstructures/yield/derivedtermstructure.hpp|Natural RelativeDerivedYieldTermStructure::settlementDays() const;+| |ql/termstructures/yield/derivedtermstructure.hpp|void setupExtrapolation();+| |ql/termstructures/yield/discountcurve.hpp|const std::vector<DiscountFactor> & discounts() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Size numberOfBonds() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Integer numberOfIterations() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Real minimumCostValue() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|EndCriteria::Type errorCode() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array solution() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|bool constrainAtZero() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array weights() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|Array l2() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|ext::shared_ptr<OptimizationMethod> optimizationMethod() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|const Constraint & constraint() const;+| |ql/termstructures/yield/fittedbonddiscountcurve.hpp|DiscountFactor discount(const Array & x, Time t) const;+| |ql/termstructures/yield/forwardcurve.hpp|const std::vector<Rate> & forwards() const;+|v|ql/termstructures/yield/impliedtermstructure.hpp|ImpliedTermStructure::ImpliedTermStructure(Handle<YieldTermStructure>, Natural settlementDays, const Calendar &);+|v|ql/termstructures/yield/impliedtermstructure.hpp|ImpliedTermStructure(Handle<YieldTermStructure> h, Natural settlementDays, const Calendar & calendar);+| |ql/termstructures/yield/interpolatedsimplezerocurve.hpp|const std::vector<Rate> & zeroRates() const;+|v|ql/termstructures/yield/multipleresetsswaphelper.hpp|ext::shared_ptr<MultipleResetsSwap> MultipleResetsSwapRateHelper::swap() const;+|v|ql/termstructures/yield/overnightindexfutureratehelper.hpp|ext::shared_ptr<OvernightIndexFuture> OvernightIndexFutureRateHelper::future() const;+| |ql/termstructures/yield/piecewiseforwardspreadedtermstructure.hpp|Date InterpolatedPiecewiseForwardSpreadedTermStructure::maxDate() const;+| |ql/termstructures/yield/piecewisezerospreadedtermstructure.hpp|Date InterpolatedPiecewiseZeroSpreadedTermStructure::maxDate() const;+| |ql/termstructures/yield/quantotermstructure.hpp|QuantoTermStructure(const Handle<YieldTermStructure> & underlyingDividendTS, Handle<YieldTermStructure> riskFreeTS, Handle<YieldTermStructure> foreignRiskFreeTS, Handle<BlackVolTermStructure> underlyingBlackVolTS, Real strike, Handle<BlackVolTermStructure> exchRateBlackVolTS, Real exchRateATMlevel, Real underlyingExchRateCorrelation);+|v|ql/termstructures/yield/ratehelpers.hpp|ext::shared_ptr<BMASwap> BMASwapRateHelper::swap() const;+| |ql/termstructures/yield/ratehelpers.hpp|Spread spread() const;+| |ql/termstructures/yield/ratehelpers.hpp|ext::shared_ptr<VanillaSwap> swap() const;+| |ql/termstructures/yield/ratehelpers.hpp|const Period & forwardStart() const;+| |ql/termstructures/yield/spreaddiscountcurve.hpp|Date InterpolatedSpreadDiscountCurve::maxDate() const;+| |ql/termstructures/yield/spreaddiscountcurve.hpp|const Handle<YieldTermStructure> & baseCurve() const;+| |ql/termstructures/yield/ultimateforwardtermstructure.hpp|Date UltimateForwardTermStructure::maxDate() const;+| |ql/termstructures/yield/zerocurve.hpp|const std::vector<Rate> & zeroRates() const;+| |ql/termstructures/yieldtermstructure.hpp|const std::vector<Date> & jumpDates() const;+| |ql/termstructures/yieldtermstructure.hpp|const std::vector<Time> & jumpTimes() const;+| |ql/time/calendar.hpp|bool empty() const;+| |ql/time/calendar.hpp|const std::set<Date> & addedHolidays() const;+| |ql/time/calendar.hpp|const std::set<Date> & removedHolidays() const;+| |ql/time/calendar.hpp|bool isBusinessDay(const Date & d) const;+| |ql/time/calendar.hpp|bool isStartOfMonth(const Date & d) const;+| |ql/time/calendar.hpp|Date startOfMonth(const Date & d) const;+| |ql/time/calendar.hpp|bool isEndOfMonth(const Date & d) const;+| |ql/time/calendar.hpp|Date endOfMonth(const Date & d) const;+| |ql/time/calendar.hpp|bool isHoliday(const Date & d) const;+| |ql/time/calendar.hpp|bool isWeekend(Weekday w) const;+|v|ql/time/calendars/malaysia.hpp|Malaysia::Malaysia(Market m = KLSE);+|v|ql/time/calendars/philippines.hpp|Philippines::Philippines(Market m = PSE);+| |ql/time/date.hpp|static Date startOfMonth(const Date & d);+| |ql/time/date.hpp|static bool isStartOfMonth(const Date & d);+| |ql/time/date.hpp|Weekday weekday() const;+| |ql/time/date.hpp|Day dayOfMonth() const;+| |ql/time/date.hpp|Day dayOfYear() const;+| |ql/time/date.hpp|Date::serial_type serialNumber() const;+| |ql/time/date.hpp|static Date endOfMonth(const Date & d);+| |ql/time/date.hpp|static bool isEndOfMonth(const Date & d);+| |ql/time/date.hpp|Time daysBetween(const Date & d1, const Date & d2);+| |ql/time/daycounter.hpp|bool empty() const;+| |ql/time/daycounter.hpp|Date::serial_type dayCount(const Date & d1, const Date & d2) const;+| |ql/time/daycounter.hpp|Time yearFraction(const Date & d1, const Date & d2, const Date & refPeriodStart, const Date & refPeriodEnd) const;+| |ql/time/daycounters/yearfractiontodate.hpp|Date roundToDayStart(const Date & d);+| |ql/time/period.hpp|Period normalized() const;+| |ql/time/schedule.hpp|const Date & date(Size i) const;+| |ql/time/schedule.hpp|const Date & at(Size i) const;+| |ql/time/schedule.hpp|const Date & front() const;+| |ql/time/schedule.hpp|const Date & back() const;+| |ql/time/schedule.hpp|const Calendar & calendar() const;+| |ql/time/schedule.hpp|const Date & startDate() const;+| |ql/time/schedule.hpp|const Date & endDate() const;+| |ql/time/schedule.hpp|bool hasTenor() const;+| |ql/time/schedule.hpp|const Period & tenor() const;+| |ql/time/schedule.hpp|bool hasTerminationDateBusinessDayConvention() const;+| |ql/time/schedule.hpp|BusinessDayConvention terminationDateBusinessDayConvention() const;+| |ql/time/schedule.hpp|bool hasRule() const;+| |ql/time/schedule.hpp|DateGeneration::Rule rule() const;+| |ql/time/schedule.hpp|bool hasEndOfMonth() const;+| |ql/time/schedule.hpp|bool endOfMonth() const;+| |ql/timeseries.hpp|Date firstDate() const;+| |ql/timeseries.hpp|Date lastDate() const;+| |ql/timeseries.hpp|bool empty() const;+| |ql/timeseries.hpp|std::vector<Date> dates() const;+| |ql/timeseries.hpp|std::vector<T> values() const;+| |ql/utilities/clone.hpp|bool empty() const;+| |ql/utilities/clone.hpp|void swap(Clone<T> & t);+|x|ql/utilities/null.hpp|Null::Null<T>();+| |ql/utilities/observablevalue.hpp|const T & value() const;
+ tools/quantlib-1.44-audit.md view
@@ -0,0 +1,106 @@+# QuantLib 1.44 binding audit++Source: upstream tag `v1.44-rc` (`2897626`), compared with `v1.43`. The `v1.44` release+(`ab4cb47`) differs from the RC only in `ql/version.hpp`, so this audit applies unchanged.+`ql-methods-1.44.txt` is extracted from the complete RC header tree with+`dump_signatures.py`; `reconcile_signatures.py` carries the curated 1.43 statuses.+The extractor filters deprecated and duplicate inherited methods; out-of-line template+definitions can also appear in the inventory and require review against the header.+The status audit checks the actual declarations in `cbits/*.h`.++## New neighboring bindings++- InterestRate: first and second discount-factor derivatives with respect to the rate.+- Gaussian1dModel: compounded overnight coupon rate.+- OvernightIndexedSwap now sits under FixedVsFloatingSwap, so `swaption` and+  `nonstandardSwapFromVanilla` accept it for the 1.44 RFR Gaussian1d engines. QuantLib 1.43 would+  price it as Ibor coupons, so both refuse an OIS there with `UnsupportedQuantLibVersion`.+- ImpliedTermStructure: settlement-days/calendar construction.+- OvernightOvernightBasisSwapRateHelper and OvernightIndexedFundingRateHelper:+  constructors returning the existing RateHelper type, with fixing-dependency extraction.+- Malaysia and Philippines calendars, with stable enum ordinals on both supported versions.+- StubIndexSelection and standalone StubIborCoupon construction returning IborCoupon.+  Composite stub fixing dependencies resolve to their component index histories.+- RoughHestonModel and AnalyticRoughHestonEngine: calibrated parameters, all three Riccati+  approximations, all twelve Fourier integration configurations, direct date/time pricing,+  characteristic/log-characteristic functions, Riccati solutions and evaluation counts.+- MtMCrossCurrencyBasisSwap and its discounting engine: default and full options constructors,+  fair spreads, reset rates/notionals, and currency-denominated leg results shared with+  constant-notional swaps through capability classes.+- FX reset observations and conventions, discounting FX reset pricers, FX reset coupons and+  netted notional exchanges, including per-flow and whole-leg pricer assignment. Coupon.nominal+  is now bound because FX reset coupons calculate their notional from the observed/projected FX rate.+- PricingEngine is now a GenPricingEngine family. Instrument and calibration-helper wiring+  accept GenPricingEngine pe; existing factories still return the PricingEngine alias.++## Added arguments++| Upstream API | Added configuration |+| --- | --- |+| OvernightIndexedSwap | Rounding precision |+| NonstandardSwap | Payment lag and calendar |+| IborLeg | Stub index selection |+| IborIborBasisSwapRateHelper | Indexed coupons, schedule rule, payment lag, two stub selections |+| OvernightIborBasisSwapRateHelper | Curve to bootstrap, payment lag/frequency, indexed coupons, rule, averaging, telescopic dates, basis leg, stub selection |+| Constant-notional XCCY basis swap/helper | Indexed coupons, lag on notional exchanges, two stub selections |+| MTM XCCY basis helper | FX reset days/calendar, indexed coupons, two stub selections |+| Constant-notional XCCY fixed/floating swap/helper | Indexed coupons and stub selection; helper floating payment frequency |+| OISRateHelper | Fixed-leg day counter |+| SpreadCdsHelper / UpfrontCdsHelper | Trade date |+| OptionletStripper1 (including the fused Stripper2 constructor) | Payment lag |+| SABR, no-arbitrage SABR and ZABR cubes | Single-pass calibration |+| GlobalBootstrap, including spread curves | Whole-curve initial guess; full additional-helper form also exposes instrument weights |++Existing small tails are widened; wide constructor options records gain fields. Initial guesses+receive borrowed times and previous data, return one trait-specific value per non-reference+pillar, and retain native shared ownership for lazy calculation and recalculation.+On 1.43, new arguments accept only their upstream 1.44 defaults, meaning whatever the linked+QuantLib does; any other value, including a stub selection, reports `UnsupportedQuantLibVersion`+for the public call. The bootstrap initial guess is the exception: it is skipped without execution.+New calls report `UnsupportedQuantLibVersion` on 1.43. Direct mixed-compounding restrictions and non-finite+fair-rate/spread guards apply to both supported versions.++## Reviewed scope++The new overnight helpers' instrument accessors serve the existing fixing-dependency visitor. They do not+require new public helper leaf types. Stub coupons return the existing IborCoupon type;+WeightedIndex remains internal to native stub selection and the fixing-dependency visitor.+FX reset observations/conventions and Fourier integration configuration are structural values,+materialized by the native consumers; they have no separate held-object interface.++Rough Heston belongs directly to CalibratedModel. Its engine retains a concrete native interface+under GenPricingEngine. MTM swaps belong to GenSwap; the new upstream CrossCurrencySwap base+is represented by shared result capabilities so the 1.43 hierarchy remains usable. All public+1.44 cash-flow additions are covered; the older cash-flow backlog is unchanged.++Constructor-echo getters remain excluded per producer. The detector was also run on+fxresetcashflows.hpp, mtmcrosscurrencybasisswap.hpp, discountingmtmcrosscurrencybasisswapengine.hpp+and stubiborcoupon.hpp. It confirmed the new field-echo exclusions in the inventories. MTM+pay/receive aliases and reset leg/index selectors were reviewed individually: they select+construction inputs or duplicate Swap.leg with the construction-time reset flag. FX reset+observation aliases and attached-pricer getters likewise echo inputs/wiring. Engine update/calculate+are reached through normal observer wiring and Instrument.npv. FourierIntegration's callback+calculation primitives and internal inspectors are outside the construction/pricing surface.++`detect_trivial_getters.py` verified nine new exclusions against the RC declarations and+implementations: `StubIndexSelection::convention/indices`, `StubIborCoupon::stubIndexSelection`,+the MTM basis helper's `fxResetFixingDays/fxResetFixingCalendar`, the constant-notional basis+swap's `payStubIndexSelection/recStubIndexSelection`, the fixed/floating swap's+`floatStubIndexSelection`, and `OvernightIndexedSwap::roundingPrecision`.++Signature reconciliation treats `ext::optional` and `std::optional` as equivalent and+preserves parameter prefixes when choosing among widened overloads. Reviewed curve-handle+echo getters retain their exclusions when upstream changes their return type to a const reference.++## Verification++Pricing regressions use the 1.44 Rough Heston reference prices and Hurst calibration, and the MTM+helper-curve repricing fixture across all collateral/basis/reset flag combinations. FX reset tests+check overnight accrual scaling, netted exchanges, historical direct/inverse/triangulated rates,+spot settlement, and component fixing dependencies. Both 1.43 version errors and 1.44 calculations+run in the normal Hspec suite; ownership and integration-factory dispatch have separate smoke probes.++The combined overnight/stub options fixture checks payment dates, component dependencies and+currency-leg NPV against independently discounted live cash flows. With compoundSpread enabled,+1.44's BPS-based fair spread does not exactly reprice that fixture; a raw C++ reproduction+matches the binding. Ordinary non-compounded fair-spread repricing remains covered separately.