NormedRxToNormedR1Finite.java

  1. package org.drip.spaces.functionclass;

  2. /*
  3.  * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  4.  */

  5. /*!
  6.  * Copyright (C) 2020 Lakshmi Krishnamurthy
  7.  * Copyright (C) 2019 Lakshmi Krishnamurthy
  8.  * Copyright (C) 2018 Lakshmi Krishnamurthy
  9.  * Copyright (C) 2017 Lakshmi Krishnamurthy
  10.  * Copyright (C) 2016 Lakshmi Krishnamurthy
  11.  * Copyright (C) 2015 Lakshmi Krishnamurthy
  12.  *
  13.  *  This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics,
  14.  *      asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment
  15.  *      analytics, and portfolio construction analytics within and across fixed income, credit, commodity,
  16.  *      equity, FX, and structured products. It also includes auxiliary libraries for algorithm support,
  17.  *      numerical analysis, numerical optimization, spline builder, model validation, statistical learning,
  18.  *      and computational support.
  19.  *  
  20.  *      https://lakshmidrip.github.io/DROP/
  21.  *  
  22.  *  DROP is composed of three modules:
  23.  *  
  24.  *  - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/
  25.  *  - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/
  26.  *  - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/
  27.  *
  28.  *  DROP Product Core implements libraries for the following:
  29.  *  - Fixed Income Analytics
  30.  *  - Loan Analytics
  31.  *  - Transaction Cost Analytics
  32.  *
  33.  *  DROP Portfolio Core implements libraries for the following:
  34.  *  - Asset Allocation Analytics
  35.  *  - Asset Liability Management Analytics
  36.  *  - Capital Estimation Analytics
  37.  *  - Exposure Analytics
  38.  *  - Margin Analytics
  39.  *  - XVA Analytics
  40.  *
  41.  *  DROP Computational Core implements libraries for the following:
  42.  *  - Algorithm Support
  43.  *  - Computation Support
  44.  *  - Function Analysis
  45.  *  - Model Validation
  46.  *  - Numerical Analysis
  47.  *  - Numerical Optimizer
  48.  *  - Spline Builder
  49.  *  - Statistical Learning
  50.  *
  51.  *  Documentation for DROP is Spread Over:
  52.  *
  53.  *  - Main                     => https://lakshmidrip.github.io/DROP/
  54.  *  - Wiki                     => https://github.com/lakshmiDRIP/DROP/wiki
  55.  *  - GitHub                   => https://github.com/lakshmiDRIP/DROP
  56.  *  - Repo Layout Taxonomy     => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md
  57.  *  - Javadoc                  => https://lakshmidrip.github.io/DROP/Javadoc/index.html
  58.  *  - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal
  59.  *  - Release Versions         => https://lakshmidrip.github.io/DROP/version.html
  60.  *  - Community Credits        => https://lakshmidrip.github.io/DROP/credits.html
  61.  *  - Issues Catalog           => https://github.com/lakshmiDRIP/DROP/issues
  62.  *  - JUnit                    => https://lakshmidrip.github.io/DROP/junit/index.html
  63.  *  - Jacoco                   => https://lakshmidrip.github.io/DROP/jacoco/index.html
  64.  *
  65.  *  Licensed under the Apache License, Version 2.0 (the "License");
  66.  *      you may not use this file except in compliance with the License.
  67.  *  
  68.  *  You may obtain a copy of the License at
  69.  *      http://www.apache.org/licenses/LICENSE-2.0
  70.  *  
  71.  *  Unless required by applicable law or agreed to in writing, software
  72.  *      distributed under the License is distributed on an "AS IS" BASIS,
  73.  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  74.  *  
  75.  *  See the License for the specific language governing permissions and
  76.  *      limitations under the License.
  77.  */

  78. /**
  79.  * <i>NormedRxToNormedR1Finite</i> implements the Class F with f E f : Normed R<sup>x</sup> To Normed
  80.  * R<sup>1</sup> Space of Finite Functions. The Reference we've used is:
  81.  *
  82.  * <br><br>
  83.  *  <ul>
  84.  *      <li>
  85.  *          Carl, B., and I. Stephani (1990): <i>Entropy, Compactness, and the Approximation of Operators</i>
  86.  *              <b>Cambridge University Press</b> Cambridge UK
  87.  *      </li>
  88.  *  </ul>
  89.  *
  90.  * <br><br>
  91.  *  <ul>
  92.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ComputationalCore.md">Computational Core Module</a></li>
  93.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/StatisticalLearningLibrary.md">Statistical Learning Library</a></li>
  94.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/spaces/README.md">R<sup>1</sup> and R<sup>d</sup> Vector/Tensor Spaces (Validated and/or Normed), and Function Classes</a></li>
  95.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/spaces/functionclass/README.md">Normed Finite Spaces Function Class</a></li>
  96.  *  </ul>
  97.  * <br><br>
  98.  *
  99.  * @author Lakshmi Krishnamurthy
  100.  */

  101. public class NormedRxToNormedR1Finite extends org.drip.spaces.functionclass.NormedRxToNormedRxFinite {
  102.     private org.drip.spaces.rxtor1.NormedRxToNormedR1[] _aNormedRxToNormedR1 = null;

  103.     protected NormedRxToNormedR1Finite (
  104.         final double dblMaureyConstant,
  105.         final org.drip.spaces.rxtor1.NormedRxToNormedR1[] aNormedRxToNormedR1)
  106.         throws java.lang.Exception
  107.     {
  108.         super (dblMaureyConstant);

  109.         int iClassSize = null == (_aNormedRxToNormedR1 = aNormedRxToNormedR1) ? 0 :
  110.             _aNormedRxToNormedR1.length;

  111.         if (null != _aNormedRxToNormedR1 && 0 == iClassSize)
  112.             throw new java.lang.Exception ("NormedRxToNormedR1Finite ctr: Invalid Inputs");

  113.         for (int i = 0; i < iClassSize; ++i) {
  114.             if (null == _aNormedRxToNormedR1[i])
  115.                 throw new java.lang.Exception ("NormedRxToNormedR1Finite ctr: Invalid Inputs");
  116.         }
  117.     }

  118.     @Override public org.drip.spaces.cover.FunctionClassCoveringBounds agnosticCoveringNumberBounds()
  119.     {
  120.         return null;
  121.     }

  122.     @Override public org.drip.spaces.metric.GeneralizedMetricVectorSpace inputMetricVectorSpace()
  123.     {
  124.         return null == _aNormedRxToNormedR1 ? null : _aNormedRxToNormedR1[0].inputMetricVectorSpace();
  125.     }

  126.     @Override public org.drip.spaces.metric.R1Normed outputMetricVectorSpace()
  127.     {
  128.         return null == _aNormedRxToNormedR1 ? null : _aNormedRxToNormedR1[0].outputMetricVectorSpace();
  129.     }

  130.     /**
  131.      * Retrieve the Array of Function Spaces in the Class
  132.      *
  133.      * @return The Array of Function Spaces in the Class
  134.      */

  135.     public org.drip.spaces.rxtor1.NormedRxToNormedR1[] functionSpaces()
  136.     {
  137.         return _aNormedRxToNormedR1;
  138.     }

  139.     /**
  140.      * Estimate for the Function Class Population Covering Number
  141.      *
  142.      * @param dblCover The Size of the Cover
  143.      *
  144.      * @return Function Class Population Covering Number Estimate
  145.      *
  146.      * @throws java.lang.Exception Thrown if the Inputs are Invalid
  147.      */

  148.     public double populationCoveringNumber (
  149.         final double dblCover)
  150.         throws java.lang.Exception
  151.     {
  152.         if (null == _aNormedRxToNormedR1)
  153.             throw new java.lang.Exception
  154.                 ("NormedRxToNormedR1Finite::populationCoveringNumber => Finite Function Set Unspecified");

  155.         int iFunctionSpaceSize = _aNormedRxToNormedR1.length;

  156.         double dblPopulationCoveringNumber = _aNormedRxToNormedR1[0].populationCoveringNumber (dblCover);

  157.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblPopulationCoveringNumber))
  158.             throw new java.lang.Exception
  159.                 ("NormedRxToNormedR1Finite::populationCoveringNumber => Cannot Compute Population Covering Number");

  160.         for (int i = 1; i < iFunctionSpaceSize; ++i) {
  161.             double dblFunctionPopulationCoveringNumber = _aNormedRxToNormedR1[i].populationCoveringNumber
  162.                 (dblCover);

  163.             if (!org.drip.numerical.common.NumberUtil.IsValid (dblFunctionPopulationCoveringNumber))
  164.                 throw new java.lang.Exception
  165.                     ("NormedRxToNormedR1Finite::populationCoveringNumber => Cannot Compute Population Covering Number");

  166.             if (dblPopulationCoveringNumber < dblFunctionPopulationCoveringNumber)
  167.                 dblPopulationCoveringNumber = dblFunctionPopulationCoveringNumber;
  168.         }

  169.         return dblPopulationCoveringNumber;
  170.     }

  171.     /**
  172.      * Estimate for the Function Class Population Supremum Covering Number
  173.      *
  174.      * @param dblCover The Size of the Cover
  175.      *
  176.      * @return Function Class Population Supremum Covering Number Estimate
  177.      *
  178.      * @throws java.lang.Exception Thrown if the Inputs are Invalid
  179.      */

  180.     public double populationSupremumCoveringNumber (
  181.         final double dblCover)
  182.         throws java.lang.Exception
  183.     {
  184.         if (null == _aNormedRxToNormedR1)
  185.             throw new java.lang.Exception
  186.                 ("NormedRxToNormedR1Finite::populationSupremumCoveringNumber => Finite Function Set Unspecified");

  187.         int iFunctionSpaceSize = _aNormedRxToNormedR1.length;

  188.         double dblPopulationSupremumCoveringNumber = _aNormedRxToNormedR1[0].populationSupremumCoveringNumber
  189.             (dblCover);

  190.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblPopulationSupremumCoveringNumber))
  191.             throw new java.lang.Exception
  192.                 ("NormedRxToNormedR1Finite::populationSupremumCoveringNumber => Cannot Compute Population Supremum Covering Number");

  193.         for (int i = 1; i < iFunctionSpaceSize; ++i) {
  194.             double dblFunctionPopulationSupremumCoveringNumber =
  195.                 _aNormedRxToNormedR1[i].populationSupremumCoveringNumber (dblCover);

  196.             if (!org.drip.numerical.common.NumberUtil.IsValid (dblFunctionPopulationSupremumCoveringNumber))
  197.                 throw new java.lang.Exception
  198.                     ("NormedRxToNormedR1Finite::populationSupremumCoveringNumber => Cannot Compute Population Supremum Covering Number");

  199.             if (dblPopulationSupremumCoveringNumber < dblFunctionPopulationSupremumCoveringNumber)
  200.                 dblPopulationSupremumCoveringNumber = dblFunctionPopulationSupremumCoveringNumber;
  201.         }

  202.         return dblPopulationSupremumCoveringNumber;
  203.     }

  204.     /**
  205.      * Estimate for the Scale-Sensitive Sample Covering Number for the specified Cover Size
  206.      *
  207.      * @param gvvi The Validated Instance Vector Sequence
  208.      * @param dblCover The Size of the Cover
  209.      *
  210.      * @return The Scale-Sensitive Sample Covering Number for the specified Cover Size
  211.      *
  212.      * @throws java.lang.Exception Thrown if the Inputs are Invalid
  213.      */

  214.     public double sampleCoveringNumber (
  215.         final org.drip.spaces.instance.GeneralizedValidatedVector gvvi,
  216.         final double dblCover)
  217.         throws java.lang.Exception
  218.     {
  219.         if (null == _aNormedRxToNormedR1)
  220.             throw new java.lang.Exception
  221.                 ("NormedRxToNormedR1Finite::sampleCoveringNumber => Finite Function Set Unspecified");

  222.         int iFunctionSpaceSize = _aNormedRxToNormedR1.length;

  223.         double dblSampleCoveringNumber = _aNormedRxToNormedR1[0].sampleCoveringNumber (gvvi, dblCover);

  224.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblSampleCoveringNumber))
  225.             throw new java.lang.Exception
  226.                 ("NormedRxToNormedR1Finite::sampleCoveringNumber => Cannot Compute Sample Covering Number");

  227.         for (int i = 1; i < iFunctionSpaceSize; ++i) {
  228.             double dblFunctionSampleCoveringNumber = _aNormedRxToNormedR1[i].sampleCoveringNumber (gvvi,
  229.                 dblCover);

  230.             if (!org.drip.numerical.common.NumberUtil.IsValid (dblFunctionSampleCoveringNumber))
  231.                 throw new java.lang.Exception
  232.                     ("NormedRxToNormedR1Finite::sampleCoveringNumber => Cannot Compute Sample Covering Number");

  233.             if (dblSampleCoveringNumber < dblFunctionSampleCoveringNumber)
  234.                 dblSampleCoveringNumber = dblFunctionSampleCoveringNumber;
  235.         }

  236.         return dblSampleCoveringNumber;
  237.     }

  238.     /**
  239.      * Estimate for the Scale-Sensitive Sample Supremum Covering Number for the specified Cover Size
  240.      *
  241.      * @param gvvi The Validated Instance Vector Sequence
  242.      * @param dblCover The Size of the Cover
  243.      *
  244.      * @return The Scale-Sensitive Sample Supremum Covering Number for the specified Cover Size
  245.      *
  246.      * @throws java.lang.Exception Thrown if the Inputs are Invalid
  247.      */

  248.     public double sampleSupremumCoveringNumber (
  249.         final org.drip.spaces.instance.GeneralizedValidatedVector gvvi,
  250.         final double dblCover)
  251.         throws java.lang.Exception
  252.     {
  253.         if (null == _aNormedRxToNormedR1)
  254.             throw new java.lang.Exception
  255.                 ("NormedRxToNormedR1Finite::sampleSupremumCoveringNumber => Finite Function Set Unspecified");

  256.         int iFunctionSpaceSize = _aNormedRxToNormedR1.length;

  257.         double dblSampleSupremumCoveringNumber = _aNormedRxToNormedR1[0].sampleSupremumCoveringNumber (gvvi,
  258.             dblCover);

  259.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblSampleSupremumCoveringNumber))
  260.             throw new java.lang.Exception
  261.                 ("NormedRxToNormedR1Finite::sampleSupremumCoveringNumber => Cannot Compute Sample Supremum Covering Number");

  262.         for (int i = 1; i < iFunctionSpaceSize; ++i) {
  263.             double dblFunctionSampleSupremumCoveringNumber =
  264.                 _aNormedRxToNormedR1[i].sampleSupremumCoveringNumber (gvvi, dblCover);

  265.             if (!org.drip.numerical.common.NumberUtil.IsValid (dblFunctionSampleSupremumCoveringNumber))
  266.                 throw new java.lang.Exception
  267.                     ("NormedRxToNormedR1Finite::sampleSupremumCoveringNumber => Cannot Compute Sample Supremum Covering Number");

  268.             if (dblSampleSupremumCoveringNumber < dblFunctionSampleSupremumCoveringNumber)
  269.                 dblSampleSupremumCoveringNumber = dblFunctionSampleSupremumCoveringNumber;
  270.         }

  271.         return dblSampleSupremumCoveringNumber;
  272.     }

  273.     @Override public double operatorPopulationMetricNorm()
  274.         throws java.lang.Exception
  275.     {
  276.         if (null == _aNormedRxToNormedR1)
  277.             throw new java.lang.Exception
  278.                 ("NormedRxToNormedR1Finite::operatorPopulationMetricNorm => Finite Function Set Unspecified");

  279.         int iNumFunction = _aNormedRxToNormedR1.length;

  280.         double dblOperatorPopulationMetricNorm = _aNormedRxToNormedR1[0].populationMetricNorm();

  281.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblOperatorPopulationMetricNorm))
  282.             throw new java.lang.Exception
  283.                 ("NormedRxToNormedR1Finite::operatorPopulationMetricNorm => Cannot compute Population Metric Norm for Function #"
  284.                     + 0);

  285.         for (int i = 1; i < iNumFunction; ++i) {
  286.             double dblPopulationMetricNorm = _aNormedRxToNormedR1[i].populationMetricNorm();

  287.             if (!org.drip.numerical.common.NumberUtil.IsValid (dblPopulationMetricNorm))
  288.                 throw new java.lang.Exception
  289.                     ("NormedRxToNormedR1Finite::operatorPopulationMetricNorm => Cannot compute Population Metric Norm for Function #"
  290.                         + i);

  291.             if (dblOperatorPopulationMetricNorm > dblPopulationMetricNorm)
  292.                 dblOperatorPopulationMetricNorm = dblPopulationMetricNorm;
  293.         }

  294.         return dblOperatorPopulationMetricNorm;
  295.     }

  296.     @Override public double operatorPopulationSupremumNorm()
  297.         throws java.lang.Exception
  298.     {
  299.         if (null == _aNormedRxToNormedR1)
  300.             throw new java.lang.Exception
  301.                 ("NormedRxToNormedR1Finite::operatorPopulationSupremumNorm => Finite Function Set Unspecified");

  302.         int iNumFunction = _aNormedRxToNormedR1.length;

  303.         double dblOperatorPopulationSupremumNorm = _aNormedRxToNormedR1[0].populationESS();

  304.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblOperatorPopulationSupremumNorm))
  305.             throw new java.lang.Exception
  306.                 ("NormedRxToNormedR1Finite::operatorPopulationSupremumNorm => Cannot compute Population Supremum Norm for Function #"
  307.                     + 0);

  308.         for (int i = 1; i < iNumFunction; ++i) {
  309.             double dblPopulationSupremumNorm = _aNormedRxToNormedR1[i].populationESS();

  310.             if (!org.drip.numerical.common.NumberUtil.IsValid (dblPopulationSupremumNorm))
  311.                 throw new java.lang.Exception
  312.                     ("NormedRxToNormedR1Finite::operatorPopulationSupremumNorm => Cannot compute Population Supremum Norm for Function #"
  313.                         + i);

  314.             if (dblOperatorPopulationSupremumNorm > dblPopulationSupremumNorm)
  315.                 dblOperatorPopulationSupremumNorm = dblPopulationSupremumNorm;
  316.         }

  317.         return dblOperatorPopulationSupremumNorm;
  318.     }

  319.     @Override public double operatorSampleMetricNorm (
  320.         final org.drip.spaces.instance.GeneralizedValidatedVector gvvi)
  321.         throws java.lang.Exception
  322.     {
  323.         if (null == _aNormedRxToNormedR1)
  324.             throw new java.lang.Exception
  325.                 ("NormedRxToNormedR1Finite::operatorSampleMetricNorm => Finite Function Set Unspecified");

  326.         int iNumFunction = _aNormedRxToNormedR1.length;

  327.         double dblOperatorSampleMetricNorm = _aNormedRxToNormedR1[0].sampleMetricNorm (gvvi);

  328.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblOperatorSampleMetricNorm))
  329.             throw new java.lang.Exception
  330.                 ("NormedRxToNormedR1Finite::operatorSampleMetricNorm => Cannot compute Sample Metric Norm for Function #"
  331.                     + 0);

  332.         for (int i = 1; i < iNumFunction; ++i) {
  333.             double dblSampleMetricNorm = _aNormedRxToNormedR1[i].sampleMetricNorm (gvvi);

  334.             if (!org.drip.numerical.common.NumberUtil.IsValid (dblSampleMetricNorm))
  335.                 throw new java.lang.Exception
  336.                     ("NormedRxToNormedR1Finite::operatorSampleMetricNorm => Cannot compute Sample Metric Norm for Function #"
  337.                         + i);

  338.             if (dblOperatorSampleMetricNorm > dblSampleMetricNorm)
  339.                 dblOperatorSampleMetricNorm = dblSampleMetricNorm;
  340.         }

  341.         return dblOperatorSampleMetricNorm;
  342.     }

  343.     @Override public double operatorSampleSupremumNorm (
  344.         final org.drip.spaces.instance.GeneralizedValidatedVector gvvi)
  345.         throws java.lang.Exception
  346.     {
  347.         if (null == _aNormedRxToNormedR1)
  348.             throw new java.lang.Exception
  349.                 ("NormedRxToNormedR1Finite::operatorSampleSupremumNorm => Finite Function Set Unspecified");

  350.         int iNumFunction = _aNormedRxToNormedR1.length;

  351.         double dblOperatorSampleSupremumNorm = _aNormedRxToNormedR1[0].sampleSupremumNorm (gvvi);

  352.         if (!org.drip.numerical.common.NumberUtil.IsValid (dblOperatorSampleSupremumNorm))
  353.             throw new java.lang.Exception
  354.                 ("NormedRxToNormedR1Finite::operatorSampleSupremumNorm => Cannot compute Sample Supremum Norm for Function #"
  355.                     + 0);

  356.         for (int i = 1; i < iNumFunction; ++i) {
  357.             double dblSampleSupremumNorm = _aNormedRxToNormedR1[i].sampleSupremumNorm (gvvi);

  358.             if (!org.drip.numerical.common.NumberUtil.IsValid (dblSampleSupremumNorm))
  359.                 throw new java.lang.Exception
  360.                     ("NormedRxToNormedR1Finite::operatorSampleSupremumNorm => Cannot compute Sample Supremum Norm for Function #"
  361.                         + i);

  362.             if (dblOperatorSampleSupremumNorm > dblSampleSupremumNorm)
  363.                 dblOperatorSampleSupremumNorm = dblSampleSupremumNorm;
  364.         }

  365.         return dblOperatorSampleSupremumNorm;
  366.     }
  367. }