From 2fdc99386b98343bb7561f8f28b9779fa9a41b1d Mon Sep 17 00:00:00 2001 From: Lakshmi Krishnamurthy Date: Sun, 24 Dec 2023 22:30:47 -0500 Subject: [PATCH] Features: - State Discount Merged Forward Curve - Set Curve Construction Input (1, 2) - State Discount Merged Forward Curve - Rate Estimator (3) - State Discount Merged Forward Curve - Latent Quantification Metric (4) - State Discount Merged Forward Curve - Jack D Factor Manifest Measure #1 (5, 6) - State Discount Merged Forward Curve - Jack D Factor Manifest Measure #2 (7, 8) - State Discount Merged Forward Curve - Component Jack D Factor Manifest Measure #1 (9, 10, 11) - State Discount Merged Forward Curve - Component Jack D Factor Manifest Measure #2 (12) - State Discount Merged Forward Curve - Jack D Factor Manifest Measure #3 (13, 14, 15) - State Discount Merged Forward Curve - Jack D Factor Manifest Measure #4 (16, 17, 18) - State Discount Merged Forward Curve - Zero Rate Jacobian (19, 20, 21) - State Discount Merged Forward Curve - Canonical Truthness (22, 23, 24) - State Discount Explicit Boot Curve (25, 26) - State Discount Explicit Boot Curve - Constructor (27) - State Discount Explicit Boot Curve - Create Basis Rate Shifted (28) - State Discount Explicit Boot Curve - Construction Input Set (29) - State Discount Explicit Boot Curve - Manifest Measure (30, 31, 32) - State Curve Basis Spline #1 (33, 34) - State Curve Basis Spline - Span (35) - State Curve Basis Spline - Constructor (36, 37, 38) - State Curve Basis Spline #2 (39, 40, 41) - State Curve Basis Spline - Jack D Forward Manifest Measure (42) - State Curve Basis Spline Deterministic Volatility (43, 44) - State Curve Basis Spline Deterministic Volatility - Implied Span (45) - State Curve Basis Spline Deterministic Volatility - Constructor (46, 47, 48) - State Curve Basis Spline Deterministic Volatility - Implied (49, 50, 51) - State Curve Basis Spline Deterministic Volatility - Node (52, 53, 54) - State Curve Basis Spline Deterministic Volatility - Node Derivative (55, 56, 57) - State Curve Basis Spline Forward Rate (58, 59) - State Curve Basis Spline Forward Rate - Span (60) Bug Fixes/Re-organization: Samples: IdeaDRIP: --- ReleaseNotes/02_28_2023.txt | 39 ++ .../state/curve/BasisSplineBasisCurve.java | 84 ++-- .../BasisSplineDeterministicVolatility.java | 124 +++--- .../state/curve/BasisSplineForwardRate.java | 41 +- .../discount/ExplicitBootDiscountCurve.java | 94 ++-- .../discount/MergedDiscountForwardCurve.java | 411 ++++++++++-------- 6 files changed, 467 insertions(+), 326 deletions(-) create mode 100644 ReleaseNotes/02_28_2023.txt diff --git a/ReleaseNotes/02_28_2023.txt b/ReleaseNotes/02_28_2023.txt new file mode 100644 index 000000000000..dfdd489feb73 --- /dev/null +++ b/ReleaseNotes/02_28_2023.txt @@ -0,0 +1,39 @@ + +Features: + + - State Discount Merged Forward Curve - Set Curve Construction Input (1, 2) + - State Discount Merged Forward Curve - Rate Estimator (3) + - State Discount Merged Forward Curve - Latent Quantification Metric (4) + - State Discount Merged Forward Curve - Jack D Factor Manifest Measure #1 (5, 6) + - State Discount Merged Forward Curve - Jack D Factor Manifest Measure #2 (7, 8) + - State Discount Merged Forward Curve - Component Jack D Factor Manifest Measure #1 (9, 10, 11) + - State Discount Merged Forward Curve - Component Jack D Factor Manifest Measure #2 (12) + - State Discount Merged Forward Curve - Jack D Factor Manifest Measure #3 (13, 14, 15) + - State Discount Merged Forward Curve - Jack D Factor Manifest Measure #4 (16, 17, 18) + - State Discount Merged Forward Curve - Zero Rate Jacobian (19, 20, 21) + - State Discount Merged Forward Curve - Canonical Truthness (22, 23, 24) + - State Discount Explicit Boot Curve (25, 26) + - State Discount Explicit Boot Curve - Constructor (27) + - State Discount Explicit Boot Curve - Create Basis Rate Shifted (28) + - State Discount Explicit Boot Curve - Construction Input Set (29) + - State Discount Explicit Boot Curve - Manifest Measure (30, 31, 32) + - State Curve Basis Spline #1 (33, 34) + - State Curve Basis Spline - Span (35) + - State Curve Basis Spline - Constructor (36, 37, 38) + - State Curve Basis Spline #2 (39, 40, 41) + - State Curve Basis Spline - Jack D Forward Manifest Measure (42) + - State Curve Basis Spline Deterministic Volatility (43, 44) + - State Curve Basis Spline Deterministic Volatility - Implied Span (45) + - State Curve Basis Spline Deterministic Volatility - Constructor (46, 47, 48) + - State Curve Basis Spline Deterministic Volatility - Implied (49, 50, 51) + - State Curve Basis Spline Deterministic Volatility - Node (52, 53, 54) + - State Curve Basis Spline Deterministic Volatility - Node Derivative (55, 56, 57) + - State Curve Basis Spline Forward Rate (58, 59) + - State Curve Basis Spline Forward Rate - Span (60) + + +Bug Fixes/Re-organization: + +Samples: + +IdeaDRIP: diff --git a/src/main/java/org/drip/state/curve/BasisSplineBasisCurve.java b/src/main/java/org/drip/state/curve/BasisSplineBasisCurve.java index 1f099d484cf7..5d4e63d57ce9 100644 --- a/src/main/java/org/drip/state/curve/BasisSplineBasisCurve.java +++ b/src/main/java/org/drip/state/curve/BasisSplineBasisCurve.java @@ -1,11 +1,19 @@ package org.drip.state.curve; +import org.drip.numerical.differentiation.WengertJacobian; +import org.drip.spline.grid.Span; +import org.drip.state.basis.BasisCurve; +import org.drip.state.identifier.ForwardLabel; + /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -83,72 +91,76 @@ /** * BasisSplineBasisCurve manages the Basis Latent State, using the Basis as the State Response - * Representation. It exports the following functionality: + * Representation. It exports the following functionality: * - *

* * - *

- * - *

+ *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Latent State Inference and Creation Utilities
Package Basis Spline Based Latent States
* * @author Lakshmi Krishnamurthy */ -public class BasisSplineBasisCurve extends org.drip.state.basis.BasisCurve { - private org.drip.spline.grid.Span _span = null; +public class BasisSplineBasisCurve extends BasisCurve +{ + private Span _span = null; /** * BasisSplineBasisCurve constructor * - * @param friReference The Reference Leg FRI - * @param friDerived The Derived Leg FRI - * @param bBasisOnReference TRUE - Is the Quoted Basis On the Reference Leg/Derived Leg + * @param referenceForwardLabel The Reference Leg Forward Label + * @param derivedForwardLabel The Derived Leg Forward Label + * @param basisOnReference TRUE - Is the Quoted Basis On the Reference Leg/Derived Leg * @param span The Span over which the Basis Representation is valid * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public BasisSplineBasisCurve ( - final org.drip.state.identifier.ForwardLabel friReference, - final org.drip.state.identifier.ForwardLabel friDerived, - final boolean bBasisOnReference, - final org.drip.spline.grid.Span span) - throws java.lang.Exception + final ForwardLabel referenceForwardLabel, + final ForwardLabel derivedForwardLabel, + final boolean basisOnReference, + final Span span) + throws Exception { - super ((int) span.left(), friReference, friDerived, bBasisOnReference); + super ((int) span.left(), referenceForwardLabel, derivedForwardLabel, basisOnReference); _span = span; } @Override public double basis ( - final int iDate) - throws java.lang.Exception + final int date) + throws Exception { - double dblSpanLeft = _span.left(); + double spanLeft = _span.left(); - if (iDate <= dblSpanLeft) return _span.calcResponseValue (dblSpanLeft); + if (date <= spanLeft) return _span.calcResponseValue (spanLeft); - double dblSpanRight = _span.right(); + double spanRight = _span.right(); - if (iDate >= dblSpanRight) return _span.calcResponseValue (dblSpanRight); + if (date >= spanRight) return _span.calcResponseValue (spanRight); - return _span.calcResponseValue (iDate); + return _span.calcResponseValue (date); } - @Override public org.drip.numerical.differentiation.WengertJacobian jackDForwardDManifestMeasure ( - final java.lang.String strManifestMeasure, - final int iDate) + @Override public WengertJacobian jackDForwardDManifestMeasure ( + final String manifestMeasure, + final int date) { - return _span.jackDResponseDManifestMeasure (strManifestMeasure, iDate, 1); + return _span.jackDResponseDManifestMeasure (manifestMeasure, date, 1); } } diff --git a/src/main/java/org/drip/state/curve/BasisSplineDeterministicVolatility.java b/src/main/java/org/drip/state/curve/BasisSplineDeterministicVolatility.java index 3f977108c1ae..456a6d37db13 100644 --- a/src/main/java/org/drip/state/curve/BasisSplineDeterministicVolatility.java +++ b/src/main/java/org/drip/state/curve/BasisSplineDeterministicVolatility.java @@ -1,11 +1,20 @@ package org.drip.state.curve; +import org.drip.function.definition.R1ToR1; +import org.drip.numerical.common.NumberUtil; +import org.drip.spline.grid.Span; +import org.drip.state.identifier.CustomLabel; +import org.drip.state.volatility.VolatilityCurve; + /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -85,96 +94,107 @@ * BasisSplineDeterministicVolatility extends the BasisSplineTermStructure for the specific case of * the Implementation of the Deterministic Volatility Term Structure. * - *

- * - *

+ *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Latent State Inference and Creation Utilities
Package Basis Spline Based Latent States
* * @author Lakshmi Krishnamurthy */ -public class BasisSplineDeterministicVolatility extends org.drip.state.volatility.VolatilityCurve { - private org.drip.spline.grid.Span _spanImpliedVolatility = null; +public class BasisSplineDeterministicVolatility extends VolatilityCurve +{ + private Span _impliedVolatilitySpan = null; /** * BasisSplineDeterministicVolatility Constructor * - * @param iEpochDate The Epoch Date - * @param label Latent State Label - * @param strCurrency The Currency - * @param spanImpliedVolatility The Implied Volatility Span + * @param epochDate The Epoch Date + * @param customLabel Latent State Label + * @param currency The Currency + * @param impliedVolatilitySpan The Implied Volatility Span * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public BasisSplineDeterministicVolatility ( - final int iEpochDate, - final org.drip.state.identifier.CustomLabel label, - final java.lang.String strCurrency, - final org.drip.spline.grid.Span spanImpliedVolatility) - throws java.lang.Exception + final int epochDate, + final CustomLabel customLabel, + final String currency, + final Span impliedVolatilitySpan) + throws Exception { - super (iEpochDate, label, strCurrency); + super (epochDate, customLabel, currency); - if (null == (_spanImpliedVolatility = spanImpliedVolatility)) - throw new java.lang.Exception ("BasisSplineDeterministicVolatility ctr: Invalid Inputs"); + if (null == (_impliedVolatilitySpan = impliedVolatilitySpan)) { + throw new Exception ("BasisSplineDeterministicVolatility ctr: Invalid Inputs"); + } } @Override public double impliedVol ( - final int iDate) - throws java.lang.Exception + final int date) + throws Exception { - double dblSpanLeft = _spanImpliedVolatility.left(); + double spanLeft = _impliedVolatilitySpan.left(); - if (dblSpanLeft >= iDate) return _spanImpliedVolatility.calcResponseValue (dblSpanLeft); + if (spanLeft >= date) { + return _impliedVolatilitySpan.calcResponseValue (spanLeft); + } - double dblSpanRight = _spanImpliedVolatility.right(); + double spanRight = _impliedVolatilitySpan.right(); - if (dblSpanRight <= iDate) return _spanImpliedVolatility.calcResponseValue (dblSpanRight); + if (spanRight <= date) { + return _impliedVolatilitySpan.calcResponseValue (spanRight); + } - return _spanImpliedVolatility.calcResponseValue (iDate); + return _impliedVolatilitySpan.calcResponseValue (date); } @Override public double node ( - final int iDate) - throws java.lang.Exception + final int date) + throws Exception { - double dblImpliedVol = impliedVol (iDate); + double impliedVolatility = impliedVol (date); - return java.lang.Math.sqrt (dblImpliedVol * dblImpliedVol + 2. * dblImpliedVol * (iDate - - epoch().julian()) / 365.25 * _spanImpliedVolatility.calcResponseValueDerivative (iDate, 1)); + return Math.sqrt ( + impliedVolatility * impliedVolatility + 2. * impliedVolatility * ( + date - epoch().julian() + ) / 365.25 * _impliedVolatilitySpan.calcResponseValueDerivative (date, 1) + ); } @Override public double vol ( - final int iDate) - throws java.lang.Exception + final int date) + throws Exception { - return node (iDate); + return node (date); } @Override public double nodeDerivative ( - final int iDate, - final int iOrder) - throws java.lang.Exception + final int date, + final int order) + throws Exception { - if (!org.drip.numerical.common.NumberUtil.IsValid (iDate)) - throw new java.lang.Exception - ("BasisSplineDeterministicVolatility::nodeDerivative => Invalid Inputs"); + if (!NumberUtil.IsValid (date)) { + throw new Exception ("BasisSplineDeterministicVolatility::nodeDerivative => Invalid Inputs"); + } - org.drip.function.definition.R1ToR1 au = new org.drip.function.definition.R1ToR1 - (null) { + return new R1ToR1 (null) { @Override public double evaluate ( - double dblX) - throws java.lang.Exception + double x) + throws Exception { - return node ((int) dblX); + return node ((int) x); } - }; - - return au.derivative (iDate, iOrder); + }.derivative (date, order); } } diff --git a/src/main/java/org/drip/state/curve/BasisSplineForwardRate.java b/src/main/java/org/drip/state/curve/BasisSplineForwardRate.java index 424b5ed09c3d..a0ab97c26680 100644 --- a/src/main/java/org/drip/state/curve/BasisSplineForwardRate.java +++ b/src/main/java/org/drip/state/curve/BasisSplineForwardRate.java @@ -1,11 +1,17 @@ package org.drip.state.curve; +import org.drip.spline.grid.Span; +import org.drip.state.forward.ForwardCurve; + /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -86,30 +92,31 @@ * BasisSplineForwardRate manages the Forward Latent State, using the Forward Rate as the State * Response Representation. It exports the following functionality: * - *

* * - *

- * - *

+ *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Latent State Inference and Creation Utilities
Package Basis Spline Based Latent States
* * @author Lakshmi Krishnamurthy */ -public class BasisSplineForwardRate extends org.drip.state.forward.ForwardCurve { - private org.drip.spline.grid.Span _span = null; +public class BasisSplineForwardRate extends ForwardCurve { + private Span _span = null; /** * BasisSplineForwardRate constructor diff --git a/src/main/java/org/drip/state/discount/ExplicitBootDiscountCurve.java b/src/main/java/org/drip/state/discount/ExplicitBootDiscountCurve.java index d54e427682a7..55d9564ad15e 100644 --- a/src/main/java/org/drip/state/discount/ExplicitBootDiscountCurve.java +++ b/src/main/java/org/drip/state/discount/ExplicitBootDiscountCurve.java @@ -1,11 +1,19 @@ package org.drip.state.discount; +import org.drip.analytics.definition.ExplicitBootCurve; +import org.drip.analytics.input.CurveConstructionInputSet; +import org.drip.analytics.support.CaseInsensitiveTreeMap; +import org.drip.product.definition.CalibratableComponent; + /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -84,83 +92,79 @@ /** * ExplicitBootDiscountCurve exposes the functionality associated with the bootstrapped Discount - * Curve. + * Curve. It implements the following Functionality: * - *

* * - *

- * - *

+ *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Latent State Inference and Creation Utilities
Package Discount Curve Spline Latent State
* * @author Lakshmi Krishnamurthy */ -public abstract class ExplicitBootDiscountCurve extends org.drip.state.discount.MergedDiscountForwardCurve - implements org.drip.analytics.definition.ExplicitBootCurve { +public abstract class ExplicitBootDiscountCurve extends MergedDiscountForwardCurve + implements ExplicitBootCurve { protected ExplicitBootDiscountCurve ( - final int iEpochDate, - final java.lang.String strCurrency) - throws java.lang.Exception + final int epochDate, + final String currency) + throws Exception { - super (iEpochDate, strCurrency, null); + super (epochDate, currency, null); } /** * Create a shifted curve from an array of basis shifts * - * @param aiDate Array of dates - * @param adblBasis Array of basis + * @param dateArray Array of dates + * @param basisArray Array of basis * * @return Discount Curve */ public abstract ExplicitBootDiscountCurve createBasisRateShiftedCurve ( - final int[] aiDate, - final double[] adblBasis); + final int[] dateArray, + final double[] basisArray + ); @Override public boolean setCCIS ( - final org.drip.analytics.input.CurveConstructionInputSet ccis) + final CurveConstructionInputSet curveConstructionInputSet) { - return null != (_curveConstructionInputSet = ccis); + return null != (_curveConstructionInputSet = curveConstructionInputSet); } - @Override public org.drip.product.definition.CalibratableComponent[] calibComp() + @Override public CalibratableComponent[] calibComp() { return null == _curveConstructionInputSet ? null : _curveConstructionInputSet.components(); } - @Override public org.drip.analytics.support.CaseInsensitiveTreeMap manifestMeasure ( - final java.lang.String strInstrumentCode) + @Override public CaseInsensitiveTreeMap manifestMeasure ( + final String instrumentCode) { - if (null == _curveConstructionInputSet) return null; - - org.drip.analytics.support.CaseInsensitiveTreeMap> - mapQuote = _curveConstructionInputSet.quoteMap(); + if (null == _curveConstructionInputSet) { + return null; + } - if (null == mapQuote || !mapQuote.containsKey (strInstrumentCode)) return null; + CaseInsensitiveTreeMap> quoteDoubleMap = + _curveConstructionInputSet.quoteMap(); - return mapQuote.get (strInstrumentCode); + return null != quoteDoubleMap && quoteDoubleMap.containsKey (instrumentCode) ? + quoteDoubleMap.get (instrumentCode) : null; } } diff --git a/src/main/java/org/drip/state/discount/MergedDiscountForwardCurve.java b/src/main/java/org/drip/state/discount/MergedDiscountForwardCurve.java index b01912809981..b2d1f94c9a50 100644 --- a/src/main/java/org/drip/state/discount/MergedDiscountForwardCurve.java +++ b/src/main/java/org/drip/state/discount/MergedDiscountForwardCurve.java @@ -3,15 +3,20 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import org.drip.analytics.cashflow.CompositePeriod; import org.drip.analytics.date.JulianDate; import org.drip.analytics.daycount.Convention; +import org.drip.analytics.definition.LatentStateStatic; import org.drip.analytics.input.CurveConstructionInputSet; import org.drip.analytics.support.CaseInsensitiveTreeMap; import org.drip.analytics.support.CompositePeriodBuilder; import org.drip.numerical.common.NumberUtil; import org.drip.numerical.differentiation.WengertJacobian; import org.drip.param.creator.MarketParamsBuilder; +import org.drip.param.market.CurveSurfaceQuoteContainer; import org.drip.param.period.ComposableFixedUnitSetting; import org.drip.param.period.CompositePeriodSetting; import org.drip.param.period.UnitCouponAccrualSetting; @@ -25,6 +30,7 @@ import org.drip.spline.stretch.MultiSegmentSequence; import org.drip.spline.stretch.MultiSegmentSequenceBuilder; import org.drip.state.forward.ForwardCurve; +import org.drip.state.forward.ForwardRateEstimator; import org.drip.state.identifier.ForwardLabel; import org.drip.state.identifier.FundingLabel; import org.drip.state.identifier.LatentStateLabel; @@ -848,11 +854,13 @@ public double proxyManifestMeasure ( } @Override public boolean setCCIS ( - final org.drip.analytics.input.CurveConstructionInputSet ccis) + final CurveConstructionInputSet curveConstructionInputSet) { - if (null == ccis) return false; + if (null == curveConstructionInputSet) { + return false; + } - _curveConstructionInputSet = ccis; + _curveConstructionInputSet = curveConstructionInputSet; return true; } @@ -860,15 +868,16 @@ public double proxyManifestMeasure ( * Retrieve the Forward Curve that might be implied by the Latent State of this Discount Curve Instance * corresponding to the specified Floating Rate Index * - * @param iDate The Date - * @param fri The Floating Rate Index + * @param date The Date + * @param forwardLabel The Floating Rate Index * * @return The Forward Curve Implied by the Discount Curve Latent State */ - public abstract org.drip.state.forward.ForwardRateEstimator forwardRateEstimator ( - final int iDate, - final org.drip.state.identifier.ForwardLabel fri); + public abstract ForwardRateEstimator forwardRateEstimator ( + final int date, + final ForwardLabel forwardLabel + ); /** * Retrieve the Latent State Quantification Metric @@ -876,57 +885,55 @@ public abstract org.drip.state.forward.ForwardRateEstimator forwardRateEstimator * @return The Latent State Quantification Metric */ - public abstract java.lang.String latentStateQuantificationMetric(); + public abstract String latentStateQuantificationMetric(); /** * Retrieve the Manifest Measure Jacobian of the Discount Factor to the given date * - * @param iDate Date - * @param strManifestMeasure Manifest Measure + * @param date Date + * @param manifestMeasure Manifest Measure * * @return The Manifest Measure Jacobian of the Discount Factor to the given date */ - public abstract org.drip.numerical.differentiation.WengertJacobian jackDDFDManifestMeasure ( - final int iDate, - final java.lang.String strManifestMeasure); + public abstract WengertJacobian jackDDFDManifestMeasure ( + final int date, + final String manifestMeasure + ); /** * Retrieve the Manifest Measure Jacobian of the Discount Factor to the given date * - * @param dt Date - * @param strManifestMeasure Manifest Measure + * @param date Date + * @param manifestMeasure Manifest Measure * * @return The Manifest Measure Jacobian of the Discount Factor to the given date */ - public org.drip.numerical.differentiation.WengertJacobian jackDDFDManifestMeasure ( - final org.drip.analytics.date.JulianDate dt, - final java.lang.String strManifestMeasure) + public WengertJacobian jackDDFDManifestMeasure ( + final JulianDate date, + final String manifestMeasure) { - if (null == dt) return null; - - return jackDDFDManifestMeasure (dt.julian(), strManifestMeasure); + return null == date ? null : jackDDFDManifestMeasure (date.julian(), manifestMeasure); } /** * Retrieve the Manifest Measure Jacobian of the Discount Factor to the date implied by the given Tenor * - * @param strTenor Tenor - * @param strManifestMeasure Manifest Measure + * @param tenor Tenor + * @param manifestMeasure Manifest Measure * * @return The Manifest Measure Jacobian of the Discount Factor to the date implied by the given Tenor */ - public org.drip.numerical.differentiation.WengertJacobian jackDDFDManifestMeasure ( - final java.lang.String strTenor, - final java.lang.String strManifestMeasure) + public WengertJacobian jackDDFDManifestMeasure ( + final String tenor, + final String manifestMeasure) { - if (null == strTenor || strTenor.isEmpty()) return null; - try { - return jackDDFDManifestMeasure (epoch().addTenor (strTenor), strManifestMeasure); - } catch (java.lang.Exception e) { + return null == tenor || tenor.isEmpty() ? null : + jackDDFDManifestMeasure (epoch().addTenor (tenor), manifestMeasure); + } catch (Exception e) { e.printStackTrace(); } @@ -937,284 +944,336 @@ public org.drip.numerical.differentiation.WengertJacobian jackDDFDManifestMeasur * Calculate the Jacobian of PV at the given date to the Manifest Measure of each component in the * calibration set to the DF * - * @param iDate Date for which the Jacobian is needed + * @param date Date for which the Jacobian is needed * * @return The Jacobian */ - public org.drip.numerical.differentiation.WengertJacobian compJackDPVDManifestMeasure ( - final int iDate) + public WengertJacobian compJackDPVDManifestMeasure ( + final int date) { - if (!org.drip.numerical.common.NumberUtil.IsValid (iDate)) return null; + if (!NumberUtil.IsValid (date)) { + return null; + } - org.drip.product.definition.CalibratableComponent[] aCalibComp = calibComp(); + CalibratableComponent[] calibratableComponentArray = calibComp(); - if (null == aCalibComp || 0 == aCalibComp.length) return null; + if (null == calibratableComponentArray || 0 == calibratableComponentArray.length) { + return null; + } - int iNumParameters = 0; - int iNumComponents = aCalibComp.length; - org.drip.numerical.differentiation.WengertJacobian wjCompPVDF = null; + int parameterCount = 0; + WengertJacobian wengertJacobianComponentPVDF = null; + int componentCount = calibratableComponentArray.length; - org.drip.param.valuation.ValuationParams valParams = org.drip.param.valuation.ValuationParams.Spot - (iDate); + ValuationParams valuationParams = ValuationParams.Spot (date); - org.drip.param.market.CurveSurfaceQuoteContainer csqs = - org.drip.param.creator.MarketParamsBuilder.Create (this, null, null, null, null, null, - null, null == _curveConstructionInputSet ? null : _curveConstructionInputSet.fixing()); + CurveSurfaceQuoteContainer curveSurfaceQuoteContainer = MarketParamsBuilder.Create ( + this, + null, + null, + null, + null, + null, + null, + null == _curveConstructionInputSet ? null : _curveConstructionInputSet.fixing() + ); - for (int i = 0; i < iNumComponents; ++i) { - org.drip.numerical.differentiation.WengertJacobian wjCompDDirtyPVDManifestMeasure = - aCalibComp[i].jackDDirtyPVDManifestMeasure (valParams, null, csqs, null); + for (int componentIndex = 0; componentIndex < componentCount; ++componentIndex) { + WengertJacobian wengertJacobianComponentDDirtyPVDManifestMeasure = + calibratableComponentArray[componentIndex].jackDDirtyPVDManifestMeasure ( + valuationParams, + null, + curveSurfaceQuoteContainer, + null + ); - if (null == wjCompDDirtyPVDManifestMeasure) return null; + if (null == wengertJacobianComponentDDirtyPVDManifestMeasure) { + return null; + } - iNumParameters = wjCompDDirtyPVDManifestMeasure.numParameters(); + parameterCount = wengertJacobianComponentDDirtyPVDManifestMeasure.numParameters(); - if (null == wjCompPVDF) { + if (null == wengertJacobianComponentPVDF) { try { - wjCompPVDF = new org.drip.numerical.differentiation.WengertJacobian (iNumComponents, - iNumParameters); - } catch (java.lang.Exception e) { + wengertJacobianComponentPVDF = new WengertJacobian (componentCount, parameterCount); + } catch (Exception e) { e.printStackTrace(); return null; } } - for (int k = 0; k < iNumParameters; ++k) { - if (!wjCompPVDF.accumulatePartialFirstDerivative (i, k, - wjCompDDirtyPVDManifestMeasure.firstDerivative (0, k))) + for (int parameterIndex = 0; parameterIndex < parameterCount; ++parameterIndex) { + if (!wengertJacobianComponentPVDF.accumulatePartialFirstDerivative ( + componentIndex, + parameterIndex, + wengertJacobianComponentDDirtyPVDManifestMeasure.firstDerivative (0, parameterIndex) + )) { return null; + } } } - return wjCompPVDF; + return wengertJacobianComponentPVDF; } /** * Calculate the Jacobian of PV at the given date to the Manifest Measure of each component in the * calibration set to the DF * - * @param dt Date for which the Jacobian is needed + * @param date Date for which the Jacobian is needed * * @return The Jacobian */ - public org.drip.numerical.differentiation.WengertJacobian compJackDPVDManifestMeasure ( - final org.drip.analytics.date.JulianDate dt) + public WengertJacobian compJackDPVDManifestMeasure ( + final JulianDate date) { - return null == dt ? null : compJackDPVDManifestMeasure (dt.julian()); + return null == date ? null : compJackDPVDManifestMeasure (date.julian()); } /** * Retrieve the Jacobian of the Forward Rate to the Manifest Measure between the given dates * - * @param iDate1 Date 1 - * @param iDate2 Date 2 - * @param strManifestMeasure Manifest Measure - * @param dblElapsedYear The Elapsed Year (in the appropriate Day Count) between dates 1 and 2 + * @param date1 Date 1 + * @param date2 Date 2 + * @param manifestMeasure Manifest Measure + * @param elapsedYearFraction The Elapsed Year (in the appropriate Day Count) between dates 1 and 2 * * @return The Jacobian */ - public org.drip.numerical.differentiation.WengertJacobian jackDForwardDManifestMeasure ( - final int iDate1, - final int iDate2, - final java.lang.String strManifestMeasure, - final double dblElapsedYear) + public WengertJacobian jackDForwardDManifestMeasure ( + final int date1, + final int date2, + final String manifestMeasure, + final double elapsedYearFraction) { - if (iDate1 == iDate2) return null; + if (date1 == date2) { + return null; + } - org.drip.numerical.differentiation.WengertJacobian wjDDFDManifestMeasureDate1 = jackDDFDManifestMeasure - (iDate1, strManifestMeasure); + WengertJacobian wengertJacobianDDFDManifestMeasureDate1 = jackDDFDManifestMeasure ( + date1, + manifestMeasure + ); - if (null == wjDDFDManifestMeasureDate1) return null; + if (null == wengertJacobianDDFDManifestMeasureDate1) { + return null; + } - int iNumQuote = wjDDFDManifestMeasureDate1.numParameters(); + int quoteCount = wengertJacobianDDFDManifestMeasureDate1.numParameters(); - if (0 == iNumQuote) return null; + if (0 == quoteCount) { + return null; + } - org.drip.numerical.differentiation.WengertJacobian wjDDFDManifestMeasureDate2 = jackDDFDManifestMeasure - (iDate2, strManifestMeasure); + WengertJacobian wengertJacobianDDFDManifestMeasureDate2 = jackDDFDManifestMeasure ( + date2, + manifestMeasure + ); - if (null == wjDDFDManifestMeasureDate2 || iNumQuote != wjDDFDManifestMeasureDate2.numParameters()) + if (null == wengertJacobianDDFDManifestMeasureDate2 || + quoteCount != wengertJacobianDDFDManifestMeasureDate2.numParameters()) { return null; + } - double dblDF1 = java.lang.Double.NaN; - double dblDF2 = java.lang.Double.NaN; - org.drip.numerical.differentiation.WengertJacobian wjDForwardDManifestMeasure = null; + double discountFactor1 = Double.NaN; + double discountFactor2 = Double.NaN; + WengertJacobian wengertJacobianDForwardDManifestMeasure = null; try { - dblDF1 = df (iDate1); + discountFactor1 = df (date1); - dblDF2 = df (iDate2); + discountFactor2 = df (date2); - wjDForwardDManifestMeasure = new org.drip.numerical.differentiation.WengertJacobian (1, iNumQuote); - } catch (java.lang.Exception e) { + wengertJacobianDForwardDManifestMeasure = new WengertJacobian (1, quoteCount); + } catch (Exception e) { e.printStackTrace(); return null; } - double dblDForwardDManifestMeasure1iScale = 1. / dblDF2; - double dblDForwardDManifestMeasure2iScale = dblDF1 / (dblDF2 * dblDF2); - double dblInverseAnnualizedTenorLength = 1. / dblElapsedYear; - - for (int i = 0; i < iNumQuote; ++i) { - double dblDForwardDQManifestMeasurei = ((wjDDFDManifestMeasureDate1.firstDerivative (0, i) * - dblDForwardDManifestMeasure1iScale) - (wjDDFDManifestMeasureDate2.firstDerivative (0, i) * - dblDForwardDManifestMeasure2iScale)) * dblInverseAnnualizedTenorLength; - - if (!wjDForwardDManifestMeasure.accumulatePartialFirstDerivative (0, i, - dblDForwardDQManifestMeasurei)) + double dForwardDManifestMeasure1Scale = 1. / discountFactor2; + double inverseAnnualizedTenorLength = 1. / elapsedYearFraction; + double dForwardDManifestMeasure2Scale = discountFactor1 / (discountFactor2 * discountFactor2); + + for (int quoteIndex = 0; quoteIndex < quoteCount; ++quoteIndex) { + if (!wengertJacobianDForwardDManifestMeasure.accumulatePartialFirstDerivative ( + 0, + quoteIndex, ( + wengertJacobianDDFDManifestMeasureDate1.firstDerivative (0, quoteIndex) * + dForwardDManifestMeasure1Scale - + wengertJacobianDDFDManifestMeasureDate2.firstDerivative (0, quoteIndex) * + dForwardDManifestMeasure2Scale + ) * inverseAnnualizedTenorLength + )) { return null; + } } - return wjDForwardDManifestMeasure; + return wengertJacobianDForwardDManifestMeasure; } /** * Retrieve the Jacobian of the Forward Rate to the Manifest Measure between the given dates * - * @param dt1 Julian Date 1 - * @param dt2 Julian Date 2 - * @param strManifestMeasure Manifest Measure - * @param dblElapsedYear The Elapsed Year (in the appropriate Day Count) between dates 1 and 2 + * @param date1 Julian Date 1 + * @param date2 Julian Date 2 + * @param manifestMeasure Manifest Measure + * @param elapsedYearFraction The Elapsed Year (in the appropriate Day Count) between dates 1 and 2 * * @return The Jacobian */ - public org.drip.numerical.differentiation.WengertJacobian jackDForwardDManifestMeasure ( - final org.drip.analytics.date.JulianDate dt1, - final org.drip.analytics.date.JulianDate dt2, - final java.lang.String strManifestMeasure, - final double dblElapsedYear) + public WengertJacobian jackDForwardDManifestMeasure ( + final JulianDate date1, + final JulianDate date2, + final String manifestMeasure, + final double elapsedYearFraction) { - if (null == dt1 || null == dt2) return null; - - return jackDForwardDManifestMeasure (dt1.julian(), dt2.julian(), strManifestMeasure, dblElapsedYear); + return null == date1 || null == date2 ? null : jackDForwardDManifestMeasure ( + date1.julian(), + date2.julian(), + manifestMeasure, + elapsedYearFraction + ); } /** * Retrieve the Jacobian of the Forward Rate to the Manifest Measure at the given date * - * @param dt Given Julian Date - * @param strTenor Tenor - * @param strManifestMeasure Manifest Measure - * @param dblElapsedYear The Elapsed Year (in the appropriate Day Count) implied by the Tenor + * @param date Given Julian Date + * @param tenor Tenor + * @param manifestMeasure Manifest Measure + * @param elapsedYearFraction The Elapsed Year (in the appropriate Day Count) implied by the Tenor * * @return The Jacobian */ - public org.drip.numerical.differentiation.WengertJacobian jackDForwardDManifestMeasure ( - final org.drip.analytics.date.JulianDate dt, - final java.lang.String strTenor, - final java.lang.String strManifestMeasure, - final double dblElapsedYear) + public WengertJacobian jackDForwardDManifestMeasure ( + final JulianDate date, + final String tenor, + final String manifestMeasure, + final double elapsedYearFraction) { - if (null == dt || null == strTenor || strTenor.isEmpty()) return null; - - return jackDForwardDManifestMeasure (dt.julian(), dt.addTenor (strTenor).julian(), - strManifestMeasure, dblElapsedYear); + return null == date || null == tenor || tenor.isEmpty() ? null : jackDForwardDManifestMeasure ( + date.julian(), + date.addTenor (tenor).julian(), + manifestMeasure, + elapsedYearFraction + ); } /** * Retrieve the Jacobian for the Zero Rate to the given date * - * @param iDate Date - * @param strManifestMeasure Manifest Measure + * @param date Date + * @param manifestMeasure Manifest Measure * * @return The Jacobian */ - public org.drip.numerical.differentiation.WengertJacobian zeroRateJack ( - final int iDate, - final java.lang.String strManifestMeasure) + public WengertJacobian zeroRateJack ( + final int date, + final String manifestMeasure) { - int iEpochDate = epoch().julian(); + int epochDate = epoch().julian(); - return jackDForwardDManifestMeasure (iEpochDate, iDate, strManifestMeasure, 1. * (iDate - iEpochDate) / - 365.25); + return jackDForwardDManifestMeasure ( + epochDate, + date, + manifestMeasure, + 1. * (date - epochDate) / 365.25 + ); } /** * Retrieve the Jacobian for the Zero Rate to the given date * - * @param dt Julian Date - * @param strManifestMeasure Manifest Measure + * @param date Julian Date + * @param manifestMeasure Manifest Measure * * @return The Jacobian */ - public org.drip.numerical.differentiation.WengertJacobian zeroRateJack ( - final org.drip.analytics.date.JulianDate dt, - final java.lang.String strManifestMeasure) + public WengertJacobian zeroRateJack ( + final JulianDate date, + final String manifestMeasure) { - return null == dt? null : zeroRateJack (dt.julian(), strManifestMeasure); + return null == date ? null : zeroRateJack (date.julian(), manifestMeasure); } /** * Convert the inferred Formulation Constraint into a "Truthness" Entity * - * @param strLatentStateQuantificationMetric Latent State Quantification Metric + * @param latentStateQuantificationMetric Latent State Quantification Metric * * @return Map of the Truthness Entities */ - public java.util.Map canonicalTruthness ( - final java.lang.String strLatentStateQuantificationMetric) + public Map canonicalTruthness ( + final String latentStateQuantificationMetric) { - if (null == strLatentStateQuantificationMetric || - (!org.drip.analytics.definition.LatentStateStatic.DISCOUNT_QM_ZERO_RATE.equalsIgnoreCase - (strLatentStateQuantificationMetric) && ! - org.drip.analytics.definition.LatentStateStatic.DISCOUNT_QM_DISCOUNT_FACTOR.equalsIgnoreCase - (strLatentStateQuantificationMetric))) + if (null == latentStateQuantificationMetric || ( + !LatentStateStatic.DISCOUNT_QM_ZERO_RATE.equalsIgnoreCase (latentStateQuantificationMetric) && + !LatentStateStatic.DISCOUNT_QM_DISCOUNT_FACTOR.equalsIgnoreCase (latentStateQuantificationMetric) + )) { return null; + } - org.drip.product.definition.CalibratableComponent[] aCC = calibComp(); + CalibratableComponent[] calibratableComponentArray = calibComp(); - if (null == aCC) return null; + if (null == calibratableComponentArray) { + return null; + } - int iNumComp = aCC.length; - boolean bFirstCashFlow = true; + boolean firstCashFlow = true; - if (0 == iNumComp) return null; + if (0 == calibratableComponentArray.length) { + return null; + } - java.util.Map mapCanonicalTruthness = new - java.util.TreeMap(); + Map canonicalTruthnessMap = new TreeMap(); - if (org.drip.analytics.definition.LatentStateStatic.DISCOUNT_QM_DISCOUNT_FACTOR.equalsIgnoreCase - (strLatentStateQuantificationMetric)) - mapCanonicalTruthness.put (_epochDate, 1.); + if (LatentStateStatic.DISCOUNT_QM_DISCOUNT_FACTOR.equalsIgnoreCase (latentStateQuantificationMetric)) + { + canonicalTruthnessMap.put (_epochDate, 1.); + } - for (org.drip.product.definition.CalibratableComponent cc : aCC) { - if (null == cc) continue; + for (CalibratableComponent calibratableComponent : calibratableComponentArray) { + if (null == calibratableComponent) { + continue; + } - java.util.List lsCouponPeriod = cc.couponPeriods(); + List couponPeriodList = calibratableComponent.couponPeriods(); - if (null == lsCouponPeriod || 0 == lsCouponPeriod.size()) continue; + if (null == couponPeriodList || 0 == couponPeriodList.size()) continue; - for (org.drip.analytics.cashflow.CompositePeriod cpnPeriod : lsCouponPeriod) { - if (null == cpnPeriod) continue; + for (CompositePeriod compositePeriod : couponPeriodList) { + if (null == compositePeriod) { + continue; + } - int iPeriodPayDate = cpnPeriod.payDate(); + int periodPayDate = compositePeriod.payDate(); - if (iPeriodPayDate >= _epochDate) { + if (periodPayDate >= _epochDate) { try { - if (org.drip.analytics.definition.LatentStateStatic.DISCOUNT_QM_DISCOUNT_FACTOR.equalsIgnoreCase - (strLatentStateQuantificationMetric)) - mapCanonicalTruthness.put (iPeriodPayDate, df (iPeriodPayDate)); - else if (org.drip.analytics.definition.LatentStateStatic.DISCOUNT_QM_ZERO_RATE.equalsIgnoreCase - (strLatentStateQuantificationMetric)) { - if (bFirstCashFlow) { - bFirstCashFlow = false; - - mapCanonicalTruthness.put (_epochDate, zero (iPeriodPayDate)); + if (LatentStateStatic.DISCOUNT_QM_DISCOUNT_FACTOR.equalsIgnoreCase + (latentStateQuantificationMetric)) { + canonicalTruthnessMap.put (periodPayDate, df (periodPayDate)); + } else if (LatentStateStatic.DISCOUNT_QM_ZERO_RATE.equalsIgnoreCase + (latentStateQuantificationMetric)) { + if (firstCashFlow) { + firstCashFlow = false; + + canonicalTruthnessMap.put (_epochDate, zero (periodPayDate)); } - mapCanonicalTruthness.put (iPeriodPayDate, zero (iPeriodPayDate)); + canonicalTruthnessMap.put (periodPayDate, zero (periodPayDate)); } - } catch (java.lang.Exception e) { + } catch (Exception e) { e.printStackTrace(); return null; @@ -1223,6 +1282,6 @@ else if (org.drip.analytics.definition.LatentStateStatic.DISCOUNT_QM_ZERO_RATE.e } } - return mapCanonicalTruthness; + return canonicalTruthnessMap; } }