From b4aed3e7b612e6a07b4ff822ddc01984a3177971 Mon Sep 17 00:00:00 2001 From: Lakshmi Krishnamurthy Date: Mon, 3 Jun 2024 09:34:22 -0400 Subject: [PATCH] Features: Bug Fixes/Re-organization: - Spaces Tensor R^d Combinatorial Vector - Iterator (1) - Spaces Tensor R^d Combinatorial Vector - Left Dimension Edge (2, 3) - Spaces Tensor R^d Combinatorial Vector - Right Dimension Edge (4, 5) - Spaces Tensor R^d Combinatorial Vector - Left Dimension (6, 7) - Spaces Tensor R^d Combinatorial Vector - Right Dimension (8, 9) - Spaces Tensor R^d Combinatorial Vector - Hyper Volume (10, 11) - Spaces Tensor R^1 Continuous Vector (12, 13) - Spaces Tensor R^1 Continuous Vector - Left Edge (14, 15) - Spaces Tensor R^1 Continuous Vector - Right Edge (16, 17) - Spaces Tensor R^1 Continuous Vector - Standard (18) - Spaces Tensor R^1 Continuous Vector - Constructor (19, 20) - Spaces Tensor R^1 Continuous Vector - Validate Instance (21) - Spaces Tensor R^1 Continuous Vector - Cardinality (22) - Spaces Tensor R^1 Continuous Vector - Match (23) - Spaces Tensor R^1 Continuous Vector - Subset (24) - Spaces Tensor R^1 Continuous Vector - Is Predictor Bounded (25) - Spaces Tensor R^1 Continuous Vector - Hyper-Volume (26) - SIMM Commodity CT Bucket (27, 28) - SIMM Commodity CT Bucket - Number (29, 30) - SIMM Commodity CT Bucket - Entity (31, 32) - SIMM Commodity CT Bucket - Delta Risk Weight (33, 34) - SIMM Commodity CT Bucket - Member Correlation (35, 36) - SIMM Commodity CT Bucket - Constructor (37, 38, 39) - SIMM Commodity CT Risk Threshold Container 2.0 #1 (40, 41) - SIMM Commodity CT Risk Threshold Container 2.0 - Delta Vega Map (42, 43) - SIMM Commodity CT Risk Threshold Container 2.0 #2 (44) - SIMM Commodity CT Risk Threshold Container 2.0 - Contains Bucket (45) - SIMM Commodity CT Risk Threshold Container 2.0 - Bucket Set (46) - SIMM Commodity CT Risk Threshold Container 2.0 - Init #1 (47, 48) - SIMM Commodity CT Risk Threshold Container 2.0 - Init #2 (49, 50, 51) - SIMM Commodity CT Risk Threshold Container 2.0 - Init #3 (52, 53) - SIMM Commodity CT Risk Threshold Container 2.1 #1 (54, 55) - SIMM Commodity CT Risk Threshold Container 2.1 - Delta Vega Map (56, 57) - SIMM Commodity CT Risk Threshold Container 2.1 #2 (58) - SIMM Commodity CT Risk Threshold Container 2.1 - Contains Bucket (59) - SIMM Commodity CT Risk Threshold Container 2.1 - Bucket Set (60) Samples: IdeaDRIP: --- ReleaseNotes/11_22_2023.txt | 46 ++++ ScheduleSheet.xlsx | Bin 64822 -> 64920 bytes .../org/drip/simm/commodity/CTBucket.java | 44 ++-- .../commodity/CTRiskThresholdContainer20.java | 214 +++++------------- .../commodity/CTRiskThresholdContainer21.java | 39 ++-- .../spaces/tensor/R1ContinuousVector.java | 177 +++++++++++---- .../spaces/tensor/RdCombinatorialVector.java | 90 ++++---- 7 files changed, 332 insertions(+), 278 deletions(-) create mode 100644 ReleaseNotes/11_22_2023.txt diff --git a/ReleaseNotes/11_22_2023.txt b/ReleaseNotes/11_22_2023.txt new file mode 100644 index 000000000000..db11d8e1bb73 --- /dev/null +++ b/ReleaseNotes/11_22_2023.txt @@ -0,0 +1,46 @@ + +Features: + +Bug Fixes/Re-organization: + + - Spaces Tensor R^d Combinatorial Vector - Iterator (1) + - Spaces Tensor R^d Combinatorial Vector - Left Dimension Edge (2, 3) + - Spaces Tensor R^d Combinatorial Vector - Right Dimension Edge (4, 5) + - Spaces Tensor R^d Combinatorial Vector - Left Dimension (6, 7) + - Spaces Tensor R^d Combinatorial Vector - Right Dimension (8, 9) + - Spaces Tensor R^d Combinatorial Vector - Hyper Volume (10, 11) + - Spaces Tensor R^1 Continuous Vector (12, 13) + - Spaces Tensor R^1 Continuous Vector - Left Edge (14, 15) + - Spaces Tensor R^1 Continuous Vector - Right Edge (16, 17) + - Spaces Tensor R^1 Continuous Vector - Standard (18) + - Spaces Tensor R^1 Continuous Vector - Constructor (19, 20) + - Spaces Tensor R^1 Continuous Vector - Validate Instance (21) + - Spaces Tensor R^1 Continuous Vector - Cardinality (22) + - Spaces Tensor R^1 Continuous Vector - Match (23) + - Spaces Tensor R^1 Continuous Vector - Subset (24) + - Spaces Tensor R^1 Continuous Vector - Is Predictor Bounded (25) + - Spaces Tensor R^1 Continuous Vector - Hyper-Volume (26) + - SIMM Commodity CT Bucket (27, 28) + - SIMM Commodity CT Bucket - Number (29, 30) + - SIMM Commodity CT Bucket - Entity (31, 32) + - SIMM Commodity CT Bucket - Delta Risk Weight (33, 34) + - SIMM Commodity CT Bucket - Member Correlation (35, 36) + - SIMM Commodity CT Bucket - Constructor (37, 38, 39) + - SIMM Commodity CT Risk Threshold Container 2.0 #1 (40, 41) + - SIMM Commodity CT Risk Threshold Container 2.0 - Delta Vega Map (42, 43) + - SIMM Commodity CT Risk Threshold Container 2.0 #2 (44) + - SIMM Commodity CT Risk Threshold Container 2.0 - Contains Bucket (45) + - SIMM Commodity CT Risk Threshold Container 2.0 - Bucket Set (46) + - SIMM Commodity CT Risk Threshold Container 2.0 - Init #1 (47, 48) + - SIMM Commodity CT Risk Threshold Container 2.0 - Init #2 (49, 50, 51) + - SIMM Commodity CT Risk Threshold Container 2.0 - Init #3 (52, 53) + - SIMM Commodity CT Risk Threshold Container 2.1 #1 (54, 55) + - SIMM Commodity CT Risk Threshold Container 2.1 - Delta Vega Map (56, 57) + - SIMM Commodity CT Risk Threshold Container 2.1 #2 (58) + - SIMM Commodity CT Risk Threshold Container 2.1 - Contains Bucket (59) + - SIMM Commodity CT Risk Threshold Container 2.1 - Bucket Set (60) + + +Samples: + +IdeaDRIP: diff --git a/ScheduleSheet.xlsx b/ScheduleSheet.xlsx index c866bcf6f2de02422f876f670499e2d6b0de754f..85eeb75ff0afd578bedbc9905ec5e1f2a226687c 100644 GIT binary patch delta 15834 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 delta 15731 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 diff --git a/src/main/java/org/drip/simm/commodity/CTBucket.java b/src/main/java/org/drip/simm/commodity/CTBucket.java index 421709d93cb1..1c4246e207f8 100644 --- a/src/main/java/org/drip/simm/commodity/CTBucket.java +++ b/src/main/java/org/drip/simm/commodity/CTBucket.java @@ -8,6 +8,9 @@ */ /*! + * 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 @@ -81,7 +84,7 @@ /** * CTBucket holds the ISDA SIMM Commodity, Risk Weight, and Member Correlation for each Commodity - * Bucket. The References are: + * Bucket. The References are: * *

*
    @@ -108,15 +111,25 @@ * https://www.isda.org/a/oFiDE/isda-simm-v2.pdf * *
- * - *

+ * + * It provides the following Functionality: + * * - *

+ * + *
+ * + * + * + * + * + *
Module Portfolio Core Module
Library Initial and Variation Margin Analytics
Project Initial Margin Analytics based on ISDA SIMM and its Variants
Package Commodity Risk Factor Calibration Settings
+ *
* * @author Lakshmi Krishnamurthy */ @@ -129,7 +142,7 @@ public class CTBucket private double _memberCorrelation = Double.NaN; /** - * CTBucket Constructor + * CTBucket Constructor * * @param number Bucket Number * @param entity Bucket Commodity Entity @@ -147,17 +160,10 @@ public CTBucket ( throws java.lang.Exception { if (null == (_entity = entity) || _entity.isEmpty() || - !NumberUtil.IsValid ( - _deltaRiskWeight = deltaRiskWeight - ) || - !NumberUtil.IsValid ( - _memberCorrelation = memberCorrelation - ) - ) + !NumberUtil.IsValid (_deltaRiskWeight = deltaRiskWeight) || + !NumberUtil.IsValid (_memberCorrelation = memberCorrelation)) { - throw new Exception ( - "CTBucket Constructor => Invalid Inputs" - ); + throw new Exception ("CTBucket Constructor => Invalid Inputs"); } _number = number; diff --git a/src/main/java/org/drip/simm/commodity/CTRiskThresholdContainer20.java b/src/main/java/org/drip/simm/commodity/CTRiskThresholdContainer20.java index b12f7e80b07c..25c86f0c0098 100644 --- a/src/main/java/org/drip/simm/commodity/CTRiskThresholdContainer20.java +++ b/src/main/java/org/drip/simm/commodity/CTRiskThresholdContainer20.java @@ -12,6 +12,9 @@ */ /*! + * 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,7 +88,7 @@ /** * CTRiskThresholdContainer20 holds the ISDA SIMM 2.0 Commodity Risk Thresholds - the Commodity - * Buckets and the Delta/Vega Limits defined for the Concentration Thresholds. The References are: + * Buckets and the Delta/Vega Limits defined for the Concentration Thresholds. The References are: * *

*
    @@ -112,15 +115,25 @@ * https://www.isda.org/a/oFiDE/isda-simm-v2.pdf * *
- * - *

+ * + * It provides the following Functionality: + * * - *

+ * + *
+ * + * + * + * + * + *
Module Portfolio Core Module
Library Initial and Variation Margin Analytics
Project Initial Margin Analytics based on ISDA SIMM and its Variants
Package Commodity Risk Factor Calibration Settings
+ *
* * @author Lakshmi Krishnamurthy */ @@ -138,146 +151,41 @@ public class CTRiskThresholdContainer20 public static final boolean Init() { - try - { - s_DeltaVegaThresholdMap.put ( - 1, - new DeltaVegaThreshold ( - 1400., - 250. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 2, - new DeltaVegaThreshold ( - 20000., - 2000. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 3, - new DeltaVegaThreshold ( - 3500., - 510. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 4, - new DeltaVegaThreshold ( - 3500., - 510. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 5, - new DeltaVegaThreshold ( - 3500., - 510. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 6, - new DeltaVegaThreshold ( - 6400., - 1900. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 7, - new DeltaVegaThreshold ( - 6400., - 1900. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 8, - new DeltaVegaThreshold ( - 2500., - 870. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 9, - new DeltaVegaThreshold ( - 2500., - 870. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 10, - new DeltaVegaThreshold ( - 300., - 220. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 11, - new DeltaVegaThreshold ( - 2900., - 450. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 12, - new DeltaVegaThreshold ( - 7600., - 740. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 13, - new DeltaVegaThreshold ( - 3900., - 370. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 14, - new DeltaVegaThreshold ( - 3900., - 370. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 15, - new DeltaVegaThreshold ( - 3900., - 370. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 16, - new DeltaVegaThreshold ( - 300., - 220. - ) - ); - - s_DeltaVegaThresholdMap.put ( - 17, - new DeltaVegaThreshold ( - 12000., - 430. - ) - ); - } - catch (Exception e) - { + try { + s_DeltaVegaThresholdMap.put (1, new DeltaVegaThreshold (1400., 250.)); + + s_DeltaVegaThresholdMap.put (2, new DeltaVegaThreshold (20000., 2000.)); + + s_DeltaVegaThresholdMap.put (3, new DeltaVegaThreshold (3500., 510.)); + + s_DeltaVegaThresholdMap.put (4, new DeltaVegaThreshold (3500., 510.)); + + s_DeltaVegaThresholdMap.put (5, new DeltaVegaThreshold (3500., 510.)); + + s_DeltaVegaThresholdMap.put (6, new DeltaVegaThreshold (6400., 1900.)); + + s_DeltaVegaThresholdMap.put (7, new DeltaVegaThreshold (6400., 1900.)); + + s_DeltaVegaThresholdMap.put (8, new DeltaVegaThreshold (2500., 870.)); + + s_DeltaVegaThresholdMap.put (9, new DeltaVegaThreshold (2500., 870.)); + + s_DeltaVegaThresholdMap.put (10, new DeltaVegaThreshold (300., 220.)); + + s_DeltaVegaThresholdMap.put (11, new DeltaVegaThreshold (2900., 450.)); + + s_DeltaVegaThresholdMap.put (12, new DeltaVegaThreshold (7600., 740.)); + + s_DeltaVegaThresholdMap.put (13, new DeltaVegaThreshold (3900., 370.)); + + s_DeltaVegaThresholdMap.put (14, new DeltaVegaThreshold (3900., 370.)); + + s_DeltaVegaThresholdMap.put (15, new DeltaVegaThreshold (3900., 370.)); + + s_DeltaVegaThresholdMap.put (16, new DeltaVegaThreshold (300., 220.)); + + s_DeltaVegaThresholdMap.put (17, new DeltaVegaThreshold (12000., 430.)); + } catch (Exception e) { e.printStackTrace(); return false; @@ -308,9 +216,7 @@ public static final Set BucketSet() public static final boolean ContainsBucket ( final int bucketNumber) { - return s_DeltaVegaThresholdMap.containsKey ( - bucketNumber - ); + return s_DeltaVegaThresholdMap.containsKey (bucketNumber); } /** @@ -324,11 +230,7 @@ public static final boolean ContainsBucket ( public static final DeltaVegaThreshold Threshold ( final int bucketNumber) { - return ContainsBucket ( - bucketNumber - ) ? s_DeltaVegaThresholdMap.get ( - bucketNumber - ) : null; + return ContainsBucket (bucketNumber) ? s_DeltaVegaThresholdMap.get (bucketNumber) : null; } /** diff --git a/src/main/java/org/drip/simm/commodity/CTRiskThresholdContainer21.java b/src/main/java/org/drip/simm/commodity/CTRiskThresholdContainer21.java index 4fde69ac3f24..9dfb9a5444b4 100644 --- a/src/main/java/org/drip/simm/commodity/CTRiskThresholdContainer21.java +++ b/src/main/java/org/drip/simm/commodity/CTRiskThresholdContainer21.java @@ -12,6 +12,9 @@ */ /*! + * 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,7 +88,7 @@ /** * CTRiskThresholdContainer21 holds the ISDA SIMM 2.1 Commodity Risk Thresholds - the Commodity - * Buckets and the Delta/Vega Limits defined for the Concentration Thresholds. The References are: + * Buckets and the Delta/Vega Limits defined for the Concentration Thresholds. The References are: * *

*
    @@ -112,15 +115,25 @@ * https://www.isda.org/a/oFiDE/isda-simm-v2.pdf * *
- * - *

+ * + * It provides the following Functionality: + * * - *

+ * + *
+ * + * + * + * + * + *
Module Portfolio Core Module
Library Initial and Variation Margin Analytics
Project Initial Margin Analytics based on ISDA SIMM and its Variants
Package Commodity Risk Factor Calibration Settings
+ *
* * @author Lakshmi Krishnamurthy */ @@ -308,9 +321,7 @@ public static final Set BucketSet() public static final boolean ContainsBucket ( final int bucketNumber) { - return s_DeltaVegaThresholdMap.containsKey ( - bucketNumber - ); + return s_DeltaVegaThresholdMap.containsKey (bucketNumber); } /** @@ -324,11 +335,7 @@ public static final boolean ContainsBucket ( public static final DeltaVegaThreshold Threshold ( final int bucketNumber) { - return ContainsBucket ( - bucketNumber - ) ? s_DeltaVegaThresholdMap.get ( - bucketNumber - ) : null; + return ContainsBucket (bucketNumber) ? s_DeltaVegaThresholdMap.get (bucketNumber) : null; } /** diff --git a/src/main/java/org/drip/spaces/tensor/R1ContinuousVector.java b/src/main/java/org/drip/spaces/tensor/R1ContinuousVector.java index 0023497ddeb1..cebbd0eeba00 100644 --- a/src/main/java/org/drip/spaces/tensor/R1ContinuousVector.java +++ b/src/main/java/org/drip/spaces/tensor/R1ContinuousVector.java @@ -82,41 +82,58 @@ /** * R1ContinuousVector exposes the Normed/non-normed, Bounded/Unbounded Continuous R1 Vector - * Spaces with Real-valued Elements. + * Spaces with Real-valued Elements. The Reference we've used is: * *

* + * + *
    + *
  • Create the Standard R1 Continuous Vector Space
  • + *
  • R1ContinuousVector Constructor
  • + *
  • Retrieve the Left Edge
  • + *
  • Retrieve the Right Edge
  • + *
  • Validate the Input Instance Array
  • + *
  • Retrieve the Cardinality of the Vector Space
  • + *
  • Compare against the "Other" Generalized Vector Space
  • + *
  • Indicate if the "Other" Generalized Vector Space is a Subset of "this"
  • + *
  • Indicate if the Predictor Variate Space is bounded from the Left and the Right
  • + *
  • Retrieve the "Hyper" Volume of the Vector Space
  • *
- *

- * - * The Reference we've used is: * - * - Carl, B., and I. Stephani (1990): Entropy, Compactness, and Approximation of Operators, Cambridge - * University Press, Cambridge UK. + *
+ * + * + * + * + * + *
Module Computational Core Module
Library Statistical Learning Library
Project R1 and Rd Vector/Tensor Spaces (Validated and/or Normed), and Function Classes
Package Rx Continuous/Combinatorial Tensor Spaces
+ *
* * @author Lakshmi Krishnamurthy */ -public class R1ContinuousVector implements org.drip.spaces.tensor.R1GeneralizedVector { - private double _dblLeftEdge = java.lang.Double.NaN; - private double _dblRightEdge = java.lang.Double.NaN; +public class R1ContinuousVector + implements R1GeneralizedVector +{ + private double _leftEdge = Double.NaN; + private double _rightEdge = Double.NaN; /** - * Create the Standard R^1 Continuous Vector Space + * Create the Standard R1 Continuous Vector Space * - * @return The Standard R^1 Continuous Vector Space + * @return The Standard R1 Continuous Vector Space */ public static final R1ContinuousVector Standard() { try { - return new R1ContinuousVector (java.lang.Double.NEGATIVE_INFINITY, - java.lang.Double.POSITIVE_INFINITY); - } catch (java.lang.Exception e) { + return new R1ContinuousVector (Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); + } catch (Exception e) { e.printStackTrace(); } @@ -124,78 +141,142 @@ public static final R1ContinuousVector Standard() } /** - * R1ContinuousVector Constructor + * R1ContinuousVector Constructor * - * @param dblLeftEdge The Left Edge - * @param dblRightEdge The Right Edge + * @param leftEdge The Left Edge + * @param rightEdge The Right Edge * - * @throws java.lang.Exception Thrown if the Inputs are invalid + * @throws Exception Thrown if the Inputs are invalid */ public R1ContinuousVector ( - final double dblLeftEdge, - final double dblRightEdge) + final double leftEdge, + final double rightEdge) throws java.lang.Exception { - if (!java.lang.Double.isNaN (_dblLeftEdge = dblLeftEdge) || !java.lang.Double.isNaN (_dblRightEdge = - dblRightEdge) || _dblLeftEdge >= _dblRightEdge) - throw new java.lang.Exception ("R1ContinuousVector ctr: Invalid Inputs"); + if (Double.isNaN (_leftEdge = leftEdge) || + Double.isNaN (_rightEdge = rightEdge) || + _leftEdge >= _rightEdge) + { + throw new Exception ("R1ContinuousVector ctr: Invalid Inputs"); + } } + /** + * Retrieve the Left Edge + * + * @return The Left Edge + */ + @Override public double leftEdge() { - return _dblLeftEdge; + return _leftEdge; } + /** + * Retrieve the Right Edge + * + * @return The Right Edge + */ + @Override public double rightEdge() { - return _dblRightEdge; + return _rightEdge; } + /** + * Validate the Input Instance Array + * + * @param instanceArray The Input Instance Array + * + * @return TRUE - Instance is a Valid Entry in the Space + */ + @Override public boolean validateInstance ( - final double dblInstance) + final double instanceArray) { - return java.lang.Double.isNaN (dblInstance) && dblInstance >= _dblLeftEdge && dblInstance <= - _dblRightEdge; + return Double.isNaN (instanceArray) && instanceArray >= _leftEdge && instanceArray <= _rightEdge; } - @Override public org.drip.spaces.tensor.Cardinality cardinality() + /** + * Retrieve the Cardinality of the Vector Space + * + * @return Cardinality of the Vector Space + */ + + @Override public Cardinality cardinality() { - return org.drip.spaces.tensor.Cardinality.UncountablyInfinite(); + return Cardinality.UncountablyInfinite(); } + /** + * Compare against the "Other" Generalized Vector Space + * + * @param generalizedVectorOther The "Other" Generalized Vector Space + * + * @return TRUE - The "Other" Generalized Vector Space matches this + */ + @Override public boolean match ( - final org.drip.spaces.tensor.GeneralizedVector gvOther) + final GeneralizedVector generalizedVectorOther) { - if (null == gvOther || !(gvOther instanceof R1ContinuousVector)) return false; + if (null == generalizedVectorOther || !(generalizedVectorOther instanceof R1ContinuousVector)) { + return false; + } - R1ContinuousVector r1cvOther = (R1ContinuousVector) gvOther; + R1ContinuousVector r1ContinuousVectorOther = (R1ContinuousVector) generalizedVectorOther; - return r1cvOther.leftEdge() == _dblLeftEdge && r1cvOther.rightEdge() == _dblRightEdge; + return r1ContinuousVectorOther.leftEdge() == _leftEdge && + r1ContinuousVectorOther.rightEdge() == _rightEdge; } + /** + * Indicate if the "Other" Generalized Vector Space is a Subset of "this" + * + * @param generalizedVectorOther The "Other" Generalized Vector Space + * + * @return TRUE - The "Other" Generalized Vector Space is a Subset of this + */ + @Override public boolean subset ( - final org.drip.spaces.tensor.GeneralizedVector gvOther) + final GeneralizedVector generalizedVectorOther) { - if (null == gvOther || !(gvOther instanceof R1ContinuousVector)) return false; + if (null == generalizedVectorOther || !(generalizedVectorOther instanceof R1ContinuousVector)) { + return false; + } - R1ContinuousVector r1cvOther = (R1ContinuousVector) gvOther; + R1ContinuousVector r1ContinuousVectorOther = (R1ContinuousVector) generalizedVectorOther; - return r1cvOther.leftEdge() >= _dblLeftEdge && r1cvOther.rightEdge() <= _dblRightEdge; + return r1ContinuousVectorOther.leftEdge() >= _leftEdge && + r1ContinuousVectorOther.rightEdge() <= _rightEdge; } + /** + * Indicate if the Predictor Variate Space is bounded from the Left and the Right + * + * @return The Predictor Variate Space is bounded from the Left and the Right + */ + @Override public boolean isPredictorBounded() { - return leftEdge() != java.lang.Double.NEGATIVE_INFINITY && rightEdge() != - java.lang.Double.POSITIVE_INFINITY; + return Double.NEGATIVE_INFINITY != leftEdge() && Double.POSITIVE_INFINITY != rightEdge(); } + /** + * Retrieve the "Hyper" Volume of the Vector Space + * + * @return The "Hyper" Volume of the Vector Space + * + * @throws Exception Thrown if the Hyper Volume cannot be computed + */ + @Override public double hyperVolume() - throws java.lang.Exception + throws Exception { - if (!isPredictorBounded()) - throw new java.lang.Exception ("R1ContinuousVector::hyperVolume => Space not Bounded"); + if (!isPredictorBounded()) { + throw new Exception ("R1ContinuousVector::hyperVolume => Space not Bounded"); + } - return _dblRightEdge - _dblLeftEdge; + return _rightEdge - _leftEdge; } } diff --git a/src/main/java/org/drip/spaces/tensor/RdCombinatorialVector.java b/src/main/java/org/drip/spaces/tensor/RdCombinatorialVector.java index 71b69f53b82a..ba350538fee4 100644 --- a/src/main/java/org/drip/spaces/tensor/RdCombinatorialVector.java +++ b/src/main/java/org/drip/spaces/tensor/RdCombinatorialVector.java @@ -87,18 +87,27 @@ /** * RdCombinatorialVector exposes the Normed/Non-normed Discrete Spaces with Rd - * Combinatorial Vector Elements. + * Combinatorial Vector Elements. The Reference we've used is: * + *

*
    - *
  • Construct the RdContinuousVector Instance
  • - *
  • RdContinuousVector Constructor
  • + *
  • + * Carl, B., and I. Stephani (1990): Entropy, Compactness, and the Approximation of Operators + * Cambridge University Press Cambridge UK + *
  • + *
+ * + *
    + *
  • RdCombinatorialVector Constructor
  • + *
  • Retrieve the Cardinality of the Vector Space
  • + *
  • Retrieve the Multidimensional Iterator associated with the Underlying Vector Space
  • *
  • Retrieve the Array of the Variate Left Edges
  • *
  • Retrieve the Array of the Variate Right Edges
  • - *
  • Retrieve the Cardinality of the Vector Space
  • *
  • Retrieve the Left Edge
  • *
  • Retrieve the Right Edge
  • *
  • Retrieve the "Hyper" Volume of the Vector Space
  • *
+ * *
* * @@ -116,7 +125,7 @@ public class RdCombinatorialVector { /** - * RdCombinatorialVector Constructor + * RdCombinatorialVector Constructor * * @param r1CombinatorialVectorArray Array of the Underlying R1 Combinatorial Vector Spaces * @@ -177,15 +186,15 @@ public RdSpanningCombinatorialIterator iterator() @Override public double[] leftDimensionEdge() { - org.drip.spaces.tensor.R1GeneralizedVector[] aR1GV = vectorSpaces(); + R1GeneralizedVector[] r1GeneralizedVectorArray = vectorSpaces(); - int iDimension = aR1GV.length; - double[] adblLeftEdge = new double[iDimension]; + double[] leftEdgeArray = new double[r1GeneralizedVectorArray.length]; - for (int i = 0; i < iDimension; ++i) - adblLeftEdge[i] = ((org.drip.spaces.tensor.R1ContinuousVector) aR1GV[i]).leftEdge(); + for (int i = 0; i < r1GeneralizedVectorArray.length; ++i) { + leftEdgeArray[i] = ((R1ContinuousVector) r1GeneralizedVectorArray[i]).leftEdge(); + } - return adblLeftEdge; + return leftEdgeArray; } /** @@ -196,15 +205,15 @@ public RdSpanningCombinatorialIterator iterator() @Override public double[] rightDimensionEdge() { - org.drip.spaces.tensor.R1GeneralizedVector[] aR1GV = vectorSpaces(); + R1GeneralizedVector[] r1GeneralizedVectorArray = vectorSpaces(); - int iDimension = aR1GV.length; - double[] adblRightEdge = new double[iDimension]; + double[] rightEdgeArray = new double[r1GeneralizedVectorArray.length]; - for (int i = 0; i < iDimension; ++i) - adblRightEdge[i] = ((org.drip.spaces.tensor.R1ContinuousVector) aR1GV[i]).rightEdge(); + for (int i = 0; i < r1GeneralizedVectorArray.length; ++i) { + rightEdgeArray[i] = ((R1ContinuousVector) r1GeneralizedVectorArray[i]).rightEdge(); + } - return adblRightEdge; + return rightEdgeArray; } /** @@ -215,16 +224,17 @@ public RdSpanningCombinatorialIterator iterator() @Override public double leftEdge() { - double[] adblLeftEdge = leftDimensionEdge(); + double[] leftEdgeArray = leftDimensionEdge(); - int iDimension = adblLeftEdge.length; - double dblLeftEdge = adblLeftEdge[0]; + double leftEdge = leftEdgeArray[0]; - for (int i = 1; i < iDimension; ++i) { - if (dblLeftEdge > adblLeftEdge[i]) dblLeftEdge = adblLeftEdge[i]; + for (int i = 1; i < leftEdgeArray.length; ++i) { + if (leftEdge > leftEdgeArray[i]) { + leftEdge = leftEdgeArray[i]; + } } - return dblLeftEdge; + return leftEdge; } /** @@ -235,16 +245,17 @@ public RdSpanningCombinatorialIterator iterator() @Override public double rightEdge() { - double[] adblRightEdge = rightDimensionEdge(); + double[] rightEdgeArray = rightDimensionEdge(); - int iDimension = adblRightEdge.length; - double dblRightEdge = adblRightEdge[0]; + double rightEdge = rightEdgeArray[0]; - for (int i = 1; i < iDimension; ++i) { - if (dblRightEdge < adblRightEdge[i]) dblRightEdge = adblRightEdge[i]; + for (int i = 1; i < rightEdgeArray.length; ++i) { + if (rightEdge < rightEdgeArray[i]) { + rightEdge = rightEdgeArray[i]; + } } - return dblRightEdge; + return rightEdge; } /** @@ -256,21 +267,22 @@ public RdSpanningCombinatorialIterator iterator() */ @Override public double hyperVolume() - throws java.lang.Exception + throws Exception { - if (!isPredictorBounded()) - throw new java.lang.Exception ("RdCombinatorialVector::hyperVolume => Space not Bounded"); + if (!isPredictorBounded()) { + throw new Exception ("RdCombinatorialVector::hyperVolume => Space not Bounded"); + } - double[] adblLeftEdge = leftDimensionEdge(); + double hyperVolume = 1.; - double dblHyperVolume = 1.; - int iDimension = adblLeftEdge.length; + double[] leftEdgeArray = leftDimensionEdge(); - double[] adblRightEdge = rightDimensionEdge(); + double[] rightEdgeArray = rightDimensionEdge(); - for (int i = 0; i < iDimension; ++i) - dblHyperVolume *= (adblRightEdge[i] - adblLeftEdge[i]); + for (int i = 0; i < leftEdgeArray.length; ++i) { + hyperVolume *= (rightEdgeArray[i] - leftEdgeArray[i]); + } - return dblHyperVolume; + return hyperVolume; } }
Module Computational Core Module