diff --git a/ReleaseNotes/03_01_2023.txt b/ReleaseNotes/03_01_2023.txt new file mode 100644 index 000000000000..64a8f8466a8b --- /dev/null +++ b/ReleaseNotes/03_01_2023.txt @@ -0,0 +1,37 @@ + +Features: + + - State Curve Basis Spline Forward Rate - Constructor (1, 2) + - State Curve Basis Spline Forward Rate (3, 4, 5) + - State Curve Basis Spline Forward Rate - Jack D Manifest Measure (6) + - State Curve Basis Spline FX Forward #1 (7, 8) + - State Curve Basis Spline FX Forward - Span (9) + - State Curve Basis Spline FX Forward - Spot (10, 11) + - State Curve Basis Spline FX Forward - Node (12, 13, 14) + - State Curve Basis Spline FX Forward - Constructor (15, 16, 17) + - State Curve Basis Spline FX Forward #2 (18, 19, 20) + - State Curve Basis Spline FX Forward - Zero (21, 22, 23) + - State Curve Basis Spline FX Forward - Bootstrap (24, 25, 26) + - State Curve Basis Spline FX Forward - Implied Node Rates (27, 28, 29) + - State Curve Basis Spline FX Forward - Bootstrap Discount Curve (30, 31, 32) + - State Curve Basis Spline FX Forward #3 (33, 34, 35) + - State Curve Basis Spline FX Forward - Jack D Manifest Measure (36, 37) + - State Curve Basis Spline Govvie Yield (38, 39, 40) + - State Curve Basis Spline Govvie Yield - Span (41) + - State Curve Basis Spline Govvie Yield - Constructor (42, 43) + - State Curve Basis Spline Govvie Yield - Yld (44, 45, 46) + - State Curve Basis Spline Govvie Yield - Jack D Forward Manifest Measure (47) + - State Curve Basis Spline Govvie Yield - Flat Forward Discount (48) + - State Curve Basis Spline Govvie Yield - Flat Forward (49, 50, 51) + - State Curve Basis Spline Market Surface (52, 53) + - State Curve Basis Spline Market Surface - Wire Stretch (54) + - State Curve Basis Spline Market Surface - Constructor (55, 56, 57) + - State Curve Basis Spline Market Surface - Node (58) + - State Curve Basis Spline Market Surface - x Anchor Term Structure (59, 60) + + +Bug Fixes/Re-organization: + +Samples: + +IdeaDRIP: diff --git a/ScheduleSheet.xlsx b/ScheduleSheet.xlsx index d53336ea41cd..b7d5b1810151 100644 Binary files a/ScheduleSheet.xlsx and b/ScheduleSheet.xlsx differ diff --git a/src/main/java/org/drip/state/curve/BasisSplineFXForward.java b/src/main/java/org/drip/state/curve/BasisSplineFXForward.java index a3705f1b8661..8136752f8a6b 100644 --- a/src/main/java/org/drip/state/curve/BasisSplineFXForward.java +++ b/src/main/java/org/drip/state/curve/BasisSplineFXForward.java @@ -1,11 +1,25 @@ package org.drip.state.curve; +import org.drip.analytics.date.JulianDate; +import org.drip.numerical.differentiation.WengertJacobian; +import org.drip.param.valuation.ValuationParams; +import org.drip.product.fx.FXForwardComponent; +import org.drip.product.params.CurrencyPair; +import org.drip.service.common.StringUtil; +import org.drip.spline.grid.Span; +import org.drip.state.creator.ScenarioDiscountCurveBuilder; +import org.drip.state.discount.MergedDiscountForwardCurve; +import org.drip.state.fx.FXCurve; + /* * -*- 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 +97,96 @@ /** * BasisSplineFXForward manages the Basis Latent State, using the Basis as the State Response - * Representation. + * 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 BasisSplineFXForward extends org.drip.state.fx.FXCurve { - private org.drip.spline.grid.Span _span = null; - private double _dblFXSpot = java.lang.Double.NaN; +public class BasisSplineFXForward extends FXCurve +{ + private Span _span = null; + private double _fxSpot = Double.NaN; private double nodeBasis ( - final int iNodeDate, - final org.drip.param.valuation.ValuationParams valParam, - final org.drip.state.discount.MergedDiscountForwardCurve dcNum, - final org.drip.state.discount.MergedDiscountForwardCurve dcDenom, - final boolean bBasisOnDenom) - throws java.lang.Exception + final int nodeDate, + final ValuationParams valuationParams, + final MergedDiscountForwardCurve numeratorDiscountCurve, + final MergedDiscountForwardCurve denominatorDiscountCurve, + final boolean basisOnDenominator) + throws Exception { - return new org.drip.product.fx.FXForwardComponent ("FXFWD_" + - org.drip.service.common.StringUtil.GUID(), currencyPair(), epoch().julian(), iNodeDate, 1., - null).discountCurveBasis (valParam, dcNum, dcDenom, _dblFXSpot, fx (iNodeDate), - bBasisOnDenom); + return new FXForwardComponent ( + "FXFWD_" + StringUtil.GUID(), + currencyPair(), + epoch().julian(), + nodeDate, + 1., + null + ).discountCurveBasis ( + valuationParams, + numeratorDiscountCurve, + denominatorDiscountCurve, + _fxSpot, + fx (nodeDate), + basisOnDenominator + ); } /** * BasisSplineFXForward constructor * - * @param cp The Currency Pair + * @param currencyPair The Currency Pair * @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 BasisSplineFXForward ( - final org.drip.product.params.CurrencyPair cp, - final org.drip.spline.grid.Span span) - throws java.lang.Exception + final CurrencyPair currencyPair, + final Span span) + throws Exception { - super ((int) span.left(), cp); + super ((int) span.left(), currencyPair); - _span = span; - - _dblFXSpot = _span.calcResponseValue (_span.left()); + _fxSpot = (_span = span).calcResponseValue (_span.left()); } @Override public double fx ( - 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); } /** @@ -159,130 +197,172 @@ public BasisSplineFXForward ( public double fxSpot() { - return _dblFXSpot; + return _fxSpot; } @Override public double[] zeroBasis ( - final int[] aiDateNode, - final org.drip.param.valuation.ValuationParams valParams, - final org.drip.state.discount.MergedDiscountForwardCurve dcNum, - final org.drip.state.discount.MergedDiscountForwardCurve dcDenom, - final boolean bBasisOnDenom) + final int[] nodeDateArray, + final ValuationParams valuationParams, + final MergedDiscountForwardCurve numeratorDiscountCurve, + final MergedDiscountForwardCurve denominatorDiscountCurve, + final boolean basisOnDenominator) { - if (null == aiDateNode) return null; + if (null == nodeDateArray) { + return null; + } - int iNumBasis = aiDateNode.length; - double[] adblBasis = new double[iNumBasis]; + int nodeCount = nodeDateArray.length; + double[] basisArray = new double[nodeCount]; - if (0 == iNumBasis) return null; + if (0 == nodeCount) { + return null; + } - for (int i = 0; i < iNumBasis; ++i) { + for (int nodeIndex = 0; nodeIndex < nodeCount; ++nodeIndex) { try { - adblBasis[i] = nodeBasis (aiDateNode[i], valParams, dcNum, dcDenom, bBasisOnDenom); - } catch (java.lang.Exception e) { + basisArray[nodeIndex] = nodeBasis ( + nodeDateArray[nodeIndex], + valuationParams, + numeratorDiscountCurve, + denominatorDiscountCurve, + basisOnDenominator + ); + } catch (Exception e) { e.printStackTrace(); return null; } } - return adblBasis; + return basisArray; } @Override public double[] bootstrapBasis ( - final int[] aiDateNode, - final org.drip.param.valuation.ValuationParams valParams, - final org.drip.state.discount.MergedDiscountForwardCurve dcNum, - final org.drip.state.discount.MergedDiscountForwardCurve dcDenom, - final boolean bBasisOnDenom) + final int[] nodeDateArray, + final ValuationParams valuationParams, + final MergedDiscountForwardCurve numeratorDiscountCurve, + final MergedDiscountForwardCurve denominatorDiscountCurve, + final boolean basisOnDenominator) { - if (null == aiDateNode) return null; + if (null == nodeDateArray) { + return null; + } - int iNumBasis = aiDateNode.length; - double[] adblBasis = new double[iNumBasis]; - org.drip.state.discount.MergedDiscountForwardCurve dcBasis = bBasisOnDenom ? dcDenom : dcNum; + int nodeCount = nodeDateArray.length; + double[] basisArray = new double[nodeCount]; + MergedDiscountForwardCurve basisDiscountCurve = basisOnDenominator ? denominatorDiscountCurve : + numeratorDiscountCurve; - if (0 == iNumBasis || null == dcBasis) return null; + if (0 == nodeCount || null == basisDiscountCurve) { + return null; + } - for (int i = 0; i < iNumBasis; ++i) { + for (int nodeIndex = 0; nodeIndex < nodeCount; ++nodeIndex) { try { - if (bBasisOnDenom) - adblBasis[i] = nodeBasis (aiDateNode[i], valParams, dcNum, dcBasis, true); - else - adblBasis[i] = nodeBasis (aiDateNode[i], valParams, dcBasis, dcDenom, false); - } catch (java.lang.Exception e) { + basisArray[nodeIndex] = nodeBasis ( + nodeDateArray[nodeIndex], + valuationParams, + basisOnDenominator ? numeratorDiscountCurve : basisDiscountCurve, + basisOnDenominator ? basisDiscountCurve : denominatorDiscountCurve, + true + ); + } catch (Exception e) { e.printStackTrace(); return null; } } - return adblBasis; + return basisArray; } @Override public double[] impliedNodeRates ( - final int[] aiDateNode, - final org.drip.param.valuation.ValuationParams valParams, - final org.drip.state.discount.MergedDiscountForwardCurve dcNum, - final org.drip.state.discount.MergedDiscountForwardCurve dcDenom, - final boolean bBasisOnDenom) + final int[] nodeDateArray, + final ValuationParams valuationParams, + final MergedDiscountForwardCurve numeratorDiscountCurve, + final MergedDiscountForwardCurve denominatorDiscountCurve, + final boolean basisOnDenominator) { - if (null == aiDateNode) return null; + if (null == nodeDateArray) { + return null; + } - int iNumBasis = aiDateNode.length; - double[] adblImpliedNodeRate = new double[iNumBasis]; + int nodeCount = nodeDateArray.length; + double[] impliedNodeRateArray = new double[nodeCount]; - if (0 == iNumBasis) return null; + if (0 == nodeCount) { + return null; + } - for (int i = 0; i < iNumBasis; ++i) { + for (int nodeIndex = 0; nodeIndex < nodeCount; ++nodeIndex) { try { - double dblBaseImpliedRate = java.lang.Double.NaN; - - if (bBasisOnDenom) - dblBaseImpliedRate = dcNum.zero (aiDateNode[i]); - else - dblBaseImpliedRate = dcDenom.zero (aiDateNode[i]); - - adblImpliedNodeRate[i] = dblBaseImpliedRate + nodeBasis (i, valParams, dcNum, dcDenom, - bBasisOnDenom); - } catch (java.lang.Exception e) { + impliedNodeRateArray[nodeIndex] = ( + basisOnDenominator ? numeratorDiscountCurve.zero (nodeDateArray[nodeIndex]) : + denominatorDiscountCurve.zero (nodeDateArray[nodeIndex]) + ) + nodeBasis ( + nodeIndex, + valuationParams, + numeratorDiscountCurve, + denominatorDiscountCurve, + basisOnDenominator + ); + } catch (Exception e) { e.printStackTrace(); } } - return adblImpliedNodeRate; + return impliedNodeRateArray; } - @Override public org.drip.state.discount.MergedDiscountForwardCurve bootstrapBasisDC ( - final int[] aiDateNode, - final org.drip.param.valuation.ValuationParams valParams, - final org.drip.state.discount.MergedDiscountForwardCurve dcNum, - final org.drip.state.discount.MergedDiscountForwardCurve dcDenom, - final boolean bBasisOnDenom) + @Override public MergedDiscountForwardCurve bootstrapBasisDC ( + final int[] nodeDateArray, + final ValuationParams valuationParams, + final MergedDiscountForwardCurve numeratorDiscountCurve, + final MergedDiscountForwardCurve denominatorDiscountCurve, + final boolean basisOnDenominator) { - double[] adblImpliedRate = impliedNodeRates (aiDateNode, valParams, dcNum, dcDenom, bBasisOnDenom); - - if (null == adblImpliedRate) return null; + double[] impliedRateArray = impliedNodeRates ( + nodeDateArray, + valuationParams, + numeratorDiscountCurve, + denominatorDiscountCurve, + basisOnDenominator + ); + + if (null == impliedRateArray) { + return null; + } - int iNumDF = adblImpliedRate.length; - double[] adblDF = new double[iNumDF]; - org.drip.state.discount.MergedDiscountForwardCurve dc = bBasisOnDenom ? dcDenom : dcNum; + int impliedRateArrayCount = impliedRateArray.length; + double[] discountFactorArray = new double[impliedRateArrayCount]; + MergedDiscountForwardCurve discountCurve = basisOnDenominator ? denominatorDiscountCurve : + numeratorDiscountCurve; - if (0 == iNumDF) return null; + if (0 == impliedRateArrayCount) { + return null; + } - int iSpotDate = valParams.valueDate(); + int spotDate = valuationParams.valueDate(); - java.lang.String strCurrency = dc.currency(); + String currency = discountCurve.currency(); - for (int i = 0; i < iNumDF; ++i) - adblDF[i] = java.lang.Math.exp (-1. * adblImpliedRate[i] * (aiDateNode[i] - iSpotDate) / - 365.25); + for (int impliedRateArrayIndex = 0; impliedRateArrayIndex < impliedRateArrayCount; + ++impliedRateArrayIndex) { + discountFactorArray[impliedRateArrayIndex] = Math.exp ( + -1. * impliedRateArray[impliedRateArrayIndex] * + (nodeDateArray[impliedRateArrayIndex] - spotDate) / 365.25 + ); + } try { - return org.drip.state.creator.ScenarioDiscountCurveBuilder.CubicPolynomialDiscountCurve - (strCurrency + "::BASIS", new org.drip.analytics.date.JulianDate (iSpotDate), strCurrency, - aiDateNode, adblDF); - } catch (java.lang.Exception e) { + return ScenarioDiscountCurveBuilder.CubicPolynomialDiscountCurve ( + currency + "::BASIS", + new JulianDate (spotDate), + currency, + nodeDateArray, + discountFactorArray + ); + } catch (Exception e) { e.printStackTrace(); } @@ -290,27 +370,33 @@ public double fxSpot() } @Override public double rate ( - final int[] aiDateNode, - final org.drip.param.valuation.ValuationParams valParams, - final org.drip.state.discount.MergedDiscountForwardCurve dcNum, - final org.drip.state.discount.MergedDiscountForwardCurve dcDenom, - final int iDate, - final boolean bBasisOnDenom) - throws java.lang.Exception + final int[] nodeDateArray, + final ValuationParams valuationParams, + final MergedDiscountForwardCurve numeratorDiscountCurve, + final MergedDiscountForwardCurve denominatorDiscountCurve, + final int date, + final boolean basisOnDenominator) + throws Exception { - org.drip.state.discount.MergedDiscountForwardCurve dcImplied = bootstrapBasisDC (aiDateNode, valParams, dcNum, - dcDenom, bBasisOnDenom); - - if (null == dcImplied) - throw new java.lang.Exception ("BasisSplineFXForward::rate: Cannot imply basis DC!"); + MergedDiscountForwardCurve impliedDiscountCurve = bootstrapBasisDC ( + nodeDateArray, + valuationParams, + numeratorDiscountCurve, + denominatorDiscountCurve, + basisOnDenominator + ); + + if (null == impliedDiscountCurve) { + throw new Exception ("BasisSplineFXForward::rate: Cannot imply basis DC!"); + } - return dcImplied.zero (iDate); + return impliedDiscountCurve.zero (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/BasisSplineForwardRate.java b/src/main/java/org/drip/state/curve/BasisSplineForwardRate.java index a0ab97c26680..4c9348e215f7 100644 --- a/src/main/java/org/drip/state/curve/BasisSplineForwardRate.java +++ b/src/main/java/org/drip/state/curve/BasisSplineForwardRate.java @@ -1,8 +1,11 @@ package org.drip.state.curve; +import org.drip.numerical.differentiation.WengertJacobian; +import org.drip.spline.grid.OverlappingStretchSpan; import org.drip.spline.grid.Span; import org.drip.state.forward.ForwardCurve; +import org.drip.state.identifier.ForwardLabel; /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -121,41 +124,45 @@ public class BasisSplineForwardRate extends ForwardCurve { /** * BasisSplineForwardRate constructor * - * @param fri The Floating Rate Index + * @param forwardLabel The Floating Rate Index Forward Label * @param span The Span over which the Forward Rate Representation is valid * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public BasisSplineForwardRate ( - final org.drip.state.identifier.ForwardLabel fri, - final org.drip.spline.grid.OverlappingStretchSpan span) - throws java.lang.Exception + final ForwardLabel forwardLabel, + final OverlappingStretchSpan span) + throws Exception { - super ((int) span.left(), fri); + super ((int) span.left(), forwardLabel); _span = span; } @Override public double forward ( - 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/BasisSplineGovvieYield.java b/src/main/java/org/drip/state/curve/BasisSplineGovvieYield.java index 2de84a90f041..afd88f9f9446 100644 --- a/src/main/java/org/drip/state/curve/BasisSplineGovvieYield.java +++ b/src/main/java/org/drip/state/curve/BasisSplineGovvieYield.java @@ -1,11 +1,20 @@ package org.drip.state.curve; +import org.drip.analytics.date.JulianDate; +import org.drip.numerical.differentiation.WengertJacobian; +import org.drip.spline.grid.Span; +import org.drip.state.govvie.GovvieCurve; +import org.drip.state.nonlinear.FlatForwardDiscountCurve; + /* * -*- 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,108 +92,127 @@ /** * BasisSplineGovvieYield manages the Basis Spline Latent State, using the Basis as the State Response - * Representation, for the Govvie Curve with Yield Quantification Metric. + * Representation, for the Govvie Curve with Yield Quantification Metric. 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 BasisSplineGovvieYield extends org.drip.state.govvie.GovvieCurve { - private org.drip.spline.grid.Span _span = null; +public class BasisSplineGovvieYield extends GovvieCurve +{ + private Span _span = null; /** - * BasisSplineGovvieYield Constructor + * BasisSplineGovvieYield Constructor * - * @param strTreasuryCode Treasury Code - * @param strCurrency Currency + * @param treasuryCode Treasury Code + * @param currency Currency * @param span Govvie Curve Span * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public BasisSplineGovvieYield ( - final java.lang.String strTreasuryCode, - final java.lang.String strCurrency, - final org.drip.spline.grid.Span span) - throws java.lang.Exception + final String treasuryCode, + final String currency, + final Span span) + throws Exception { - super ((int) span.left(), strTreasuryCode, strCurrency); + super ((int) span.left(), treasuryCode, currency); _span = span; } @Override public double yld ( - 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); } /** * Construct a Flat Forward Instance of the Curve at the specified Date Nodes * - * @param aiDate Array of Date Nodes + * @param dateArray Array of Date Nodes * * @return The Flat Forward Instance */ - public org.drip.state.nonlinear.FlatForwardDiscountCurve flatForward ( - final int[] aiDate) + public FlatForwardDiscountCurve flatForward ( + final int[] dateArray) { - return flatForward (dayCount(), freq(), aiDate); + return flatForward (dayCount(), freq(), dateArray); } /** * Construct a Flat Forward Instance of the Curve at the specified Date Node Tenors * - * @param astrTenor Array of Date Node Tenors + * @param tenorArray Array of Date Node Tenors * * @return The Flat Forward Instance */ - public org.drip.state.nonlinear.FlatForwardDiscountCurve flatForward ( - final java.lang.String[] astrTenor) + public FlatForwardDiscountCurve flatForward ( + final String[] tenorArray) { - if (null == astrTenor) return null; + if (null == tenorArray) { + return null; + } - int iNumTenor = astrTenor.length; - int[] aiDate = 0 == iNumTenor ? null : new int[iNumTenor]; + int tenorCount = tenorArray.length; + int[] dateArray = 0 == tenorCount ? null : new int[tenorCount]; - org.drip.analytics.date.JulianDate dtEpoch = epoch(); + JulianDate epochDate = epoch(); - for (int i = 0; i < iNumTenor; ++i) { + for (int tenorIndex = 0; tenorIndex < tenorCount; ++tenorIndex) { try { - aiDate[i] = dtEpoch.addTenor (astrTenor[i]).julian(); - } catch (java.lang.Exception e) { + dateArray[tenorIndex] = epochDate.addTenor (tenorArray[tenorIndex]).julian(); + } catch (Exception e) { e.printStackTrace(); return null; } } - return flatForward (dayCount(), freq(), aiDate); + return flatForward (dayCount(), freq(), dateArray); } } diff --git a/src/main/java/org/drip/state/curve/BasisSplineMarketSurface.java b/src/main/java/org/drip/state/curve/BasisSplineMarketSurface.java index c93079f4f00f..9fccaf0de989 100644 --- a/src/main/java/org/drip/state/curve/BasisSplineMarketSurface.java +++ b/src/main/java/org/drip/state/curve/BasisSplineMarketSurface.java @@ -1,11 +1,19 @@ package org.drip.state.curve; +import org.drip.analytics.definition.MarketSurface; +import org.drip.analytics.definition.NodeStructure; +import org.drip.spline.multidimensional.WireSurfaceStretch; +import org.drip.state.identifier.CustomLabel; + /* * -*- 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,60 +93,69 @@ * BasisSplineMarketSurface implements the Market surface that holds the latent state Dynamics * parameters. * - *

- * - *

+ *
+ * + * + * + * + * + * + * + *
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 BasisSplineMarketSurface extends org.drip.analytics.definition.MarketSurface { - private org.drip.spline.multidimensional.WireSurfaceStretch _wss = null; +public class BasisSplineMarketSurface extends MarketSurface +{ + private WireSurfaceStretch _wireSurfaceStretch = null; /** * BasisSplineMarketSurface Constructor * - * @param iEpochDate The Starting Date - * @param label The Spline Market Surface Latent State Label - * @param strCurrency The Currency - * @param wss Wire Surface Stretch Instance + * @param epochDate The Starting Date + * @param customLabel The Spline Market Surface Latent State Label + * @param currency The Currency + * @param wireSurfaceStretch Wire Surface Stretch Instance * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public BasisSplineMarketSurface ( - final int iEpochDate, - final org.drip.state.identifier.CustomLabel label, - final java.lang.String strCurrency, - final org.drip.spline.multidimensional.WireSurfaceStretch wss) - throws java.lang.Exception + final int epochDate, + final CustomLabel customLabel, + final String currency, + final WireSurfaceStretch wireSurfaceStretch) + throws Exception { - super (iEpochDate, label, strCurrency); + super (epochDate, customLabel, currency); - _wss = wss; + _wireSurfaceStretch = wireSurfaceStretch; } @Override public double node ( - final double dblStrike, - final double dblDate) - throws java.lang.Exception + final double strike, + final double date) + throws Exception { - return _wss.responseValue (dblStrike, dblDate); + return _wireSurfaceStretch.responseValue (strike, date); } - @Override public org.drip.analytics.definition.NodeStructure xAnchorTermStructure ( - final double dblStrikeAnchor) + @Override public NodeStructure xAnchorTermStructure ( + final double strikeAnchor) { try { - return new BasisSplineTermStructure (epoch().julian(), - org.drip.state.identifier.CustomLabel.Standard (label() + "_" + dblStrikeAnchor), - currency(), _wss.wireSpanXAnchor (dblStrikeAnchor)); - } catch (java.lang.Exception e) { + return new BasisSplineTermStructure ( + epoch().julian(), + CustomLabel.Standard (label() + "_" + strikeAnchor), + currency(), + _wireSurfaceStretch.wireSpanXAnchor (strikeAnchor) + ); + } catch (Exception e) { e.printStackTrace(); } @@ -152,7 +169,7 @@ public BasisSplineMarketSurface ( return new BasisSplineTermStructure (epoch().julian(), org.drip.state.identifier.CustomLabel.Standard (label() + "_" + new org.drip.analytics.date.JulianDate ((int) dblMaturityDateAnchor)), currency(), - _wss.wireSpanYAnchor (dblMaturityDateAnchor)); + _wireSurfaceStretch.wireSpanYAnchor (dblMaturityDateAnchor)); } catch (java.lang.Exception e) { e.printStackTrace(); }