From 65a52c66a0a98f14fcb42c3de643774363c0f527 Mon Sep 17 00:00:00 2001 From: David Munger Date: Thu, 15 Oct 2015 17:59:50 -0400 Subject: [PATCH] migrate from TCode to Doxygen --- .gitignore | 2 + README.md | 280 ++ build.gradle | 360 ++ gradle.properties | 42 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53638 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 160 + gradlew.bat | 90 + src/main/docs/Doxyfile | 2330 ++++++++++++ src/main/docs/examples/charts/BoxTest.java | 25 + src/main/docs/examples/charts/ChartTest1.java | 45 + src/main/docs/examples/charts/ChartTest2.java | 67 + .../docs/examples/charts/ContDistPlot.java | 11 + .../docs/examples/charts/DistIntTest.java | 17 + .../examples/charts/EmpiricalChartTest.java | 44 + .../examples/charts/HistogramChartTest.java | 45 + .../docs/examples/charts/HistogramTest1.java | 32 + .../docs/examples/charts/NormalChart.java | 26 + .../norta/ExampleNortaInitDisc.java | 27 + .../norta/ExampleNortaInitDisc.txt | 4 + .../docs/examples/randvar/normaltest.java | 31 + src/main/docs/examples/tutorial/Asian.java | 74 + src/main/docs/examples/tutorial/Asian.txt | 7 + src/main/docs/examples/tutorial/AsianQMC.java | 66 + src/main/docs/examples/tutorial/AsianQMC.txt | 21 + src/main/docs/examples/tutorial/BankEv.java | 114 + src/main/docs/examples/tutorial/BankEv.txt | 8 + .../docs/examples/tutorial/CallCenter.dat | 46 + .../docs/examples/tutorial/CallCenter.java | 197 ++ .../docs/examples/tutorial/CallCenter.txt | 10 + src/main/docs/examples/tutorial/CallEv.dat | 22 + src/main/docs/examples/tutorial/CallEv.java | 195 + src/main/docs/examples/tutorial/CallEv.txt | 23 + .../docs/examples/tutorial/Collision.java | 43 + src/main/docs/examples/tutorial/Collision.txt | 6 + .../docs/examples/tutorial/Inventory.java | 63 + src/main/docs/examples/tutorial/Inventory.txt | 6 + .../docs/examples/tutorial/InventoryCRN.java | 54 + .../docs/examples/tutorial/InventoryCRN.txt | 14 + .../docs/examples/tutorial/Nonuniform.java | 46 + .../docs/examples/tutorial/Nonuniform.txt | 8 + src/main/docs/examples/tutorial/PreyPred.java | 54 + src/main/docs/examples/tutorial/PreyPred.txt | 100 + src/main/docs/examples/tutorial/QueueEv.java | 73 + src/main/docs/examples/tutorial/QueueEv.txt | 8 + .../docs/examples/tutorial/QueueLindley.java | 37 + .../docs/examples/tutorial/QueueLindley.txt | 5 + src/main/docs/examples/tutorial/QueueObs.java | 76 + src/main/docs/examples/tutorial/QueueObs.txt | 47 + src/main/docs/examples/tutorial/Visits.txt | 5 + src/main/docs/examples/tutorial/tutorial.dox | 1363 +++++++ src/main/docs/images/charts_exam_BoxTest.png | Bin 0 -> 8162 bytes src/main/docs/images/charts_overview_01.svg | 145 + src/main/docs/images/charts_overview_02.svg | 174 + src/main/docs/images/charts_overview_03.svg | 118 + src/main/docs/images/charts_overview_04.svg | 229 ++ src/main/docs/images/charts_overview_05.svg | 672 ++++ src/main/docs/images/charts_overview_06.svg | 206 ++ src/main/docs/images/charts_overview_07.svg | 168 + src/main/docs/images/examples_examples_01.svg | 837 +++++ src/main/docs/images/examples_examples_02.svg | 318 ++ src/main/docs/images/rng_randomstream_01.svg | 176 + .../docs/images/simprocs_simprocess_01.svg | 465 +++ src/main/docs/mathjax_config.js | 5 + src/main/docs/ssj.bib | 2163 ++++++++++++ src/main/docs/ssj.css | 33 + src/main/java/umontreal/ssj/charts/Axis.java | 464 +++ .../java/umontreal/ssj/charts/BoxChart.java | 280 ++ .../ssj/charts/BoxSeriesCollection.java | 294 ++ .../umontreal/ssj/charts/CategoryChart.java | 202 ++ .../ssj/charts/ContinuousDistChart.java | 162 + .../ssj/charts/CustomHistogramDataset.java | 711 ++++ .../ssj/charts/DiscreteDistIntChart.java | 245 ++ .../umontreal/ssj/charts/EmpiricalChart.java | 317 ++ .../ssj/charts/EmpiricalRenderer.java | 217 ++ .../ssj/charts/EmpiricalSeriesCollection.java | 409 +++ .../umontreal/ssj/charts/HistogramChart.java | 405 +++ .../ssj/charts/HistogramSeriesCollection.java | 626 ++++ .../ssj/charts/MultipleDatasetChart.java | 456 +++ .../java/umontreal/ssj/charts/PPPlot.java | 130 + .../java/umontreal/ssj/charts/PlotFormat.java | 464 +++ .../java/umontreal/ssj/charts/QQPlot.java | 135 + .../charts/SSJCategorySeriesCollection.java | 274 ++ .../ssj/charts/SSJXYSeriesCollection.java | 325 ++ .../umontreal/ssj/charts/ScatterChart.java | 419 +++ .../java/umontreal/ssj/charts/XYChart.java | 520 +++ .../umontreal/ssj/charts/XYLineChart.java | 476 +++ .../ssj/charts/XYListSeriesCollection.java | 828 +++++ .../java/umontreal/ssj/charts/YListChart.java | 155 + .../ssj/charts/YListSeriesCollection.java | 203 ++ .../java/umontreal/ssj/charts/overview.dox | 1578 +++++++++ .../umontreal/ssj/functionfit/BSpline.java | 543 +++ .../ssj/functionfit/LeastSquares.java | 255 ++ .../umontreal/ssj/functionfit/PolInterp.java | 143 + .../ssj/functionfit/SmoothingCubicSpline.java | 412 +++ .../umontreal/ssj/functionfit/overview.dox | 9 + .../ssj/functions/AverageMathFunction.java | 93 + .../ssj/functions/IdentityMathFunction.java | 51 + .../umontreal/ssj/functions/MathFunction.java | 43 + .../ssj/functions/MathFunctionUtil.java | 436 +++ .../functions/MathFunctionWithDerivative.java | 45 + .../MathFunctionWithFirstDerivative.java | 40 + .../functions/MathFunctionWithIntegral.java | 42 + .../ssj/functions/MultiFunction.java | 42 + .../functions/PiecewiseConstantFunction.java | 74 + .../umontreal/ssj/functions/Polynomial.java | 224 ++ .../ssj/functions/PowerMathFunction.java | 109 + .../ssj/functions/ShiftedMathFunction.java | 84 + .../ssj/functions/SqrtMathFunction.java | 58 + .../ssj/functions/SquareMathFunction.java | 94 + .../java/umontreal/ssj/functions/overview.dox | 12 + src/main/java/umontreal/ssj/gof/FBar.java | 296 ++ src/main/java/umontreal/ssj/gof/FDist.java | 168 + .../java/umontreal/ssj/gof/GofFormat.java | 1032 ++++++ src/main/java/umontreal/ssj/gof/GofStat.java | 1255 +++++++ .../java/umontreal/ssj/gof/KernelDensity.java | 93 + src/main/java/umontreal/ssj/gof/overview.dox | 109 + .../ssj/hups/AntitheticPointSet.java | 90 + .../ssj/hups/BakerTransformedPointSet.java | 110 + .../umontreal/ssj/hups/CachedPointSet.java | 135 + .../umontreal/ssj/hups/ContainerPointSet.java | 171 + .../ssj/hups/CycleBasedPointSet.java | 305 ++ .../ssj/hups/CycleBasedPointSetBase2.java | 214 ++ .../java/umontreal/ssj/hups/DigitalNet.java | 1181 +++++++ .../umontreal/ssj/hups/DigitalNetBase2.java | 662 ++++ .../ssj/hups/DigitalNetBase2FromFile.java | 284 ++ .../ssj/hups/DigitalNetFromFile.java | 649 ++++ .../umontreal/ssj/hups/DigitalSequence.java | 365 ++ .../ssj/hups/DigitalSequenceBase2.java | 284 ++ .../ssj/hups/EmptyRandomization.java | 64 + .../umontreal/ssj/hups/F2wCycleBasedLFSR.java | 148 + .../ssj/hups/F2wCycleBasedPolyLCG.java | 149 + .../java/umontreal/ssj/hups/F2wNetLFSR.java | 114 + .../umontreal/ssj/hups/F2wNetPolyLCG.java | 98 + .../java/umontreal/ssj/hups/F2wStructure.java | 732 ++++ .../umontreal/ssj/hups/FaureSequence.java | 323 ++ .../umontreal/ssj/hups/HaltonSequence.java | 173 + .../ssj/hups/HammersleyPointSet.java | 127 + .../umontreal/ssj/hups/KorobovLattice.java | 125 + .../ssj/hups/KorobovLatticeSequence.java | 110 + .../java/umontreal/ssj/hups/LCGPointSet.java | 116 + .../umontreal/ssj/hups/LMScrambleShift.java | 70 + .../umontreal/ssj/hups/NiedSequenceBase2.java | 153 + .../ssj/hups/NiedXingSequenceBase2.java | 195 + .../umontreal/ssj/hups/PaddedPointSet.java | 313 ++ .../java/umontreal/ssj/hups/PointSet.java | 644 ++++ .../umontreal/ssj/hups/PointSetIterator.java | 184 + .../ssj/hups/PointSetRandomization.java | 66 + .../java/umontreal/ssj/hups/RQMCPointSet.java | 99 + .../umontreal/ssj/hups/RadicalInverse.java | 591 ++++ .../ssj/hups/RandShiftedPointSet.java | 186 + .../java/umontreal/ssj/hups/RandomShift.java | 82 + .../java/umontreal/ssj/hups/RandomStart.java | 88 + .../java/umontreal/ssj/hups/Rank1Lattice.java | 219 ++ .../umontreal/ssj/hups/SMScrambleShift.java | 70 + .../umontreal/ssj/hups/SobolSequence.java | 881 +++++ .../umontreal/ssj/hups/SubsetOfPointSet.java | 367 ++ .../umontreal/ssj/hups/dataLFSR/j1_k11.dat | 20 + .../umontreal/ssj/hups/dataLFSR/j2_k17.dat | 45 + .../umontreal/ssj/hups/dataLFSR/j2_k19.dat | 35 + .../hups/dataSer/Nieder/NiedSequenceBase2.dat | 318 ++ .../hups/dataSer/Nieder/NiedSequenceBase2.ser | Bin 0 -> 38187 bytes .../Nieder/NiedXingSequenceBase2Trans.dat | 3132 +++++++++++++++++ .../Nieder/NiedXingSequenceBase2Trans.ser | Bin 0 -> 62667 bytes src/main/java/umontreal/ssj/hups/overview.dox | 612 ++++ src/main/java/umontreal/ssj/overview.dox | 342 ++ .../ssj/probdist/AndersonDarlingDist.java | 348 ++ .../probdist/AndersonDarlingDistQuick.java | 433 +++ .../umontreal/ssj/probdist/BernoulliDist.java | 277 ++ .../java/umontreal/ssj/probdist/BetaDist.java | 963 +++++ .../ssj/probdist/BetaSymmetricalDist.java | 939 +++++ .../umontreal/ssj/probdist/BinomialDist.java | 838 +++++ .../umontreal/ssj/probdist/CauchyDist.java | 318 ++ .../java/umontreal/ssj/probdist/ChiDist.java | 282 ++ .../umontreal/ssj/probdist/ChiSquareDist.java | 408 +++ .../ssj/probdist/ChiSquareDistQuick.java | 146 + .../ssj/probdist/ChiSquareNoncentralDist.java | 694 ++++ .../umontreal/ssj/probdist/ConstantDist.java | 105 + .../ssj/probdist/ConstantIntDist.java | 75 + .../ssj/probdist/ContinuousDistribution.java | 418 +++ .../ssj/probdist/CramerVonMisesDist.java | 316 ++ .../ssj/probdist/DiscreteDistribution.java | 362 ++ .../ssj/probdist/DiscreteDistributionInt.java | 238 ++ .../umontreal/ssj/probdist/Distribution.java | 86 + .../ssj/probdist/DistributionFactory.java | 462 +++ .../umontreal/ssj/probdist/EmpiricalDist.java | 292 ++ .../umontreal/ssj/probdist/ErlangDist.java | 197 ++ .../ssj/probdist/ExponentialDist.java | 263 ++ .../ssj/probdist/ExponentialDistFromMean.java | 52 + .../ssj/probdist/ExtremeValueDist.java | 360 ++ .../ssj/probdist/FatigueLifeDist.java | 366 ++ .../umontreal/ssj/probdist/FisherFDist.java | 296 ++ .../ssj/probdist/FoldedNormalDist.java | 293 ++ .../umontreal/ssj/probdist/FrechetDist.java | 417 +++ .../umontreal/ssj/probdist/GammaDist.java | 566 +++ .../ssj/probdist/GammaDistFromMoments.java | 60 + .../umontreal/ssj/probdist/GeometricDist.java | 287 ++ .../umontreal/ssj/probdist/GumbelDist.java | 457 +++ .../ssj/probdist/HalfNormalDist.java | 316 ++ .../ssj/probdist/HyperbolicSecantDist.java | 335 ++ .../ssj/probdist/HypergeometricDist.java | 442 +++ .../ssj/probdist/HypoExponentialDist.java | 413 +++ .../probdist/HypoExponentialDistEqual.java | 194 + .../probdist/HypoExponentialDistQuick.java | 297 ++ .../ssj/probdist/InverseDistFromDensity.java | 932 +++++ .../ssj/probdist/InverseGammaDist.java | 286 ++ .../ssj/probdist/InverseGaussianDist.java | 341 ++ .../umontreal/ssj/probdist/JohnsonSBDist.java | 450 +++ .../umontreal/ssj/probdist/JohnsonSLDist.java | 433 +++ .../umontreal/ssj/probdist/JohnsonSUDist.java | 271 ++ .../umontreal/ssj/probdist/JohnsonSystem.java | 138 + .../ssj/probdist/KolmogorovSmirnovDist.java | 447 +++ .../probdist/KolmogorovSmirnovDistQuick.java | 450 +++ .../probdist/KolmogorovSmirnovPlusDist.java | 408 +++ .../umontreal/ssj/probdist/LaplaceDist.java | 297 ++ .../ssj/probdist/LogarithmicDist.java | 304 ++ .../umontreal/ssj/probdist/LogisticDist.java | 389 ++ .../ssj/probdist/LoglogisticDist.java | 398 +++ .../umontreal/ssj/probdist/LognormalDist.java | 322 ++ .../probdist/LognormalDistFromMoments.java | 57 + .../umontreal/ssj/probdist/NakagamiDist.java | 292 ++ .../ssj/probdist/NegativeBinomialDist.java | 913 +++++ .../umontreal/ssj/probdist/NormalDist.java | 592 ++++ .../ssj/probdist/NormalDistQuick.java | 944 +++++ .../probdist/NormalInverseGaussianDist.java | 328 ++ .../umontreal/ssj/probdist/ParetoDist.java | 310 ++ .../umontreal/ssj/probdist/PascalDist.java | 204 ++ .../umontreal/ssj/probdist/Pearson5Dist.java | 290 ++ .../umontreal/ssj/probdist/Pearson6Dist.java | 402 +++ .../PiecewiseLinearEmpiricalDist.java | 280 ++ .../umontreal/ssj/probdist/PoissonDist.java | 613 ++++ .../umontreal/ssj/probdist/PowerDist.java | 327 ++ .../umontreal/ssj/probdist/RayleighDist.java | 351 ++ .../umontreal/ssj/probdist/StudentDist.java | 398 +++ .../ssj/probdist/StudentDistQuick.java | 207 ++ .../ssj/probdist/TriangularDist.java | 375 ++ .../umontreal/ssj/probdist/TruncatedDist.java | 257 ++ .../umontreal/ssj/probdist/UniformDist.java | 292 ++ .../ssj/probdist/UniformIntDist.java | 302 ++ .../umontreal/ssj/probdist/WatsonGDist.java | 687 ++++ .../umontreal/ssj/probdist/WatsonUDist.java | 372 ++ .../umontreal/ssj/probdist/WeibullDist.java | 451 +++ .../java/umontreal/ssj/probdist/overview.dox | 145 + .../ssj/probdistmulti/BiNormalDist.java | 467 +++ .../probdistmulti/BiNormalDonnellyDist.java | 335 ++ .../ssj/probdistmulti/BiNormalGenzDist.java | 296 ++ .../ssj/probdistmulti/BiStudentDist.java | 313 ++ .../ContinuousDistribution2Dim.java | 137 + .../ContinuousDistributionMulti.java | 75 + .../ssj/probdistmulti/DirichletDist.java | 348 ++ .../DiscreteDistributionIntMulti.java | 112 + .../ssj/probdistmulti/MultiNormalDist.java | 297 ++ .../ssj/probdistmulti/MultinomialDist.java | 319 ++ .../NegativeMultinomialDist.java | 517 +++ .../ssj/probdistmulti/norta/NI1.java | 193 + .../ssj/probdistmulti/norta/NI2a.java | 221 ++ .../ssj/probdistmulti/norta/NI2b.java | 198 ++ .../ssj/probdistmulti/norta/NI3.java | 145 + .../probdistmulti/norta/NortaInitDisc.java | 269 ++ .../ssj/probdistmulti/norta/overview.dox | 107 + .../umontreal/ssj/probdistmulti/overview.dox | 81 + .../umontreal/ssj/randvar/BernoulliGen.java | 81 + .../java/umontreal/ssj/randvar/BetaGen.java | 138 + .../randvar/BetaRejectionLoglogisticGen.java | 289 ++ .../randvar/BetaStratifiedRejectionGen.java | 508 +++ .../ssj/randvar/BetaSymmetricalBestGen.java | 162 + .../ssj/randvar/BetaSymmetricalGen.java | 59 + .../ssj/randvar/BetaSymmetricalPolarGen.java | 149 + .../ssj/randvar/BinomialConvolutionGen.java | 89 + .../umontreal/ssj/randvar/BinomialGen.java | 102 + .../java/umontreal/ssj/randvar/CauchyGen.java | 107 + .../java/umontreal/ssj/randvar/ChiGen.java | 90 + .../ssj/randvar/ChiRatioOfUniformsGen.java | 130 + .../umontreal/ssj/randvar/ChiSquareGen.java | 85 + .../randvar/ChiSquareNoncentralGamGen.java | 98 + .../ssj/randvar/ChiSquareNoncentralGen.java | 98 + .../randvar/ChiSquareNoncentralPoisGen.java | 91 + .../umontreal/ssj/randvar/ConstantGen.java | 65 + .../ssj/randvar/ErlangConvolutionGen.java | 80 + .../java/umontreal/ssj/randvar/ErlangGen.java | 97 + .../umontreal/ssj/randvar/ExponentialGen.java | 88 + .../ExponentialInverseFromDensityGen.java | 114 + .../ssj/randvar/ExtremeValueGen.java | 112 + .../umontreal/ssj/randvar/FNoncentralGen.java | 82 + .../umontreal/ssj/randvar/FatigueLifeGen.java | 115 + .../umontreal/ssj/randvar/FisherFGen.java | 97 + .../ssj/randvar/FoldedNormalGen.java | 106 + .../umontreal/ssj/randvar/FrechetGen.java | 121 + .../randvar/GammaAcceptanceRejectionGen.java | 476 +++ .../java/umontreal/ssj/randvar/GammaGen.java | 115 + .../randvar/GammaRejectionLoglogisticGen.java | 174 + .../umontreal/ssj/randvar/GeometricGen.java | 92 + .../java/umontreal/ssj/randvar/GumbelGen.java | 107 + .../umontreal/ssj/randvar/HalfNormalGen.java | 108 + .../ssj/randvar/HyperbolicSecantGen.java | 103 + .../ssj/randvar/HypergeometricGen.java | 115 + .../ssj/randvar/HypoExponentialGen.java | 84 + .../ssj/randvar/InverseFromDensityGen.java | 282 ++ .../ssj/randvar/InverseGammaGen.java | 113 + .../ssj/randvar/InverseGaussianGen.java | 99 + .../ssj/randvar/InverseGaussianMSHGen.java | 103 + .../umontreal/ssj/randvar/JohnsonSBGen.java | 67 + .../umontreal/ssj/randvar/JohnsonSLGen.java | 67 + .../umontreal/ssj/randvar/JohnsonSUGen.java | 67 + .../umontreal/ssj/randvar/JohnsonSystemG.java | 110 + .../ssj/randvar/KernelDensityGen.java | 222 ++ .../randvar/KernelDensityVarCorrectGen.java | 99 + .../umontreal/ssj/randvar/LaplaceGen.java | 108 + .../umontreal/ssj/randvar/LogarithmicGen.java | 176 + .../umontreal/ssj/randvar/LogisticGen.java | 108 + .../umontreal/ssj/randvar/LoglogisticGen.java | 95 + .../umontreal/ssj/randvar/LognormalGen.java | 113 + .../ssj/randvar/LognormalSpecialGen.java | 55 + .../umontreal/ssj/randvar/NakagamiGen.java | 111 + .../ssj/randvar/NegativeBinomialGen.java | 101 + .../umontreal/ssj/randvar/NormalACRGen.java | 158 + .../ssj/randvar/NormalBoxMullerGen.java | 106 + .../java/umontreal/ssj/randvar/NormalGen.java | 151 + .../randvar/NormalInverseFromDensityGen.java | 110 + .../ssj/randvar/NormalInverseGaussianGen.java | 126 + .../randvar/NormalInverseGaussianIGGen.java | 119 + .../randvar/NormalKindermannRamageGen.java | 145 + .../umontreal/ssj/randvar/NormalPolarGen.java | 110 + .../java/umontreal/ssj/randvar/ParetoGen.java | 115 + .../ssj/randvar/PascalConvolutionGen.java | 80 + .../java/umontreal/ssj/randvar/PascalGen.java | 94 + .../umontreal/ssj/randvar/Pearson5Gen.java | 117 + .../umontreal/ssj/randvar/Pearson6Gen.java | 132 + .../umontreal/ssj/randvar/PoissonGen.java | 90 + .../umontreal/ssj/randvar/PoissonTIACGen.java | 284 ++ .../java/umontreal/ssj/randvar/PowerGen.java | 114 + .../umontreal/ssj/randvar/RandUnuran.java | 82 + .../ssj/randvar/RandomVariateGen.java | 139 + .../ssj/randvar/RandomVariateGenInt.java | 91 + .../randvar/RandomVariateGenWithCache.java | 269 ++ .../umontreal/ssj/randvar/RayleighGen.java | 113 + .../umontreal/ssj/randvar/StudentGen.java | 114 + .../ssj/randvar/StudentNoncentralGen.java | 83 + .../ssj/randvar/StudentPolarGen.java | 132 + .../umontreal/ssj/randvar/TriangularGen.java | 136 + .../umontreal/ssj/randvar/UniformGen.java | 106 + .../umontreal/ssj/randvar/UniformIntGen.java | 92 + .../ssj/randvar/UnuranContinuous.java | 109 + .../ssj/randvar/UnuranDiscreteInt.java | 110 + .../ssj/randvar/UnuranEmpirical.java | 171 + .../ssj/randvar/UnuranException.java | 52 + .../umontreal/ssj/randvar/WeibullGen.java | 124 + .../java/umontreal/ssj/randvar/overview.dox | 134 + .../ssj/randvarmulti/DirichletGen.java | 190 + .../ssj/randvarmulti/IIDMultivariateGen.java | 91 + .../randvarmulti/MultinormalCholeskyGen.java | 219 ++ .../ssj/randvarmulti/MultinormalGen.java | 239 ++ .../ssj/randvarmulti/MultinormalPCAGen.java | 271 ++ .../randvarmulti/RandomMultivariateGen.java | 110 + .../umontreal/ssj/randvarmulti/overview.dox | 9 + .../umontreal/ssj/rng/AntitheticStream.java | 114 + .../ssj/rng/BakerTransformedStream.java | 122 + .../ssj/rng/BasicRandomStreamFactory.java | 122 + .../ssj/rng/CloneableRandomStream.java | 45 + src/main/java/umontreal/ssj/rng/F2NL607.java | 519 +++ src/main/java/umontreal/ssj/rng/F2wPoly.java | 425 +++ src/main/java/umontreal/ssj/rng/GenF2w32.java | 557 +++ src/main/java/umontreal/ssj/rng/LFSR113.java | 362 ++ src/main/java/umontreal/ssj/rng/LFSR258.java | 492 +++ src/main/java/umontreal/ssj/rng/MRG31k3p.java | 314 ++ src/main/java/umontreal/ssj/rng/MRG32k3a.java | 357 ++ .../java/umontreal/ssj/rng/MRG32k3aL.java | 314 ++ src/main/java/umontreal/ssj/rng/MT19937.java | 185 + src/main/java/umontreal/ssj/rng/RandMrg.java | 546 +++ .../java/umontreal/ssj/rng/RandRijndael.java | 270 ++ .../umontreal/ssj/rng/RandomPermutation.java | 534 +++ .../java/umontreal/ssj/rng/RandomStream.java | 205 ++ .../umontreal/ssj/rng/RandomStreamBase.java | 226 ++ .../ssj/rng/RandomStreamFactory.java | 59 + .../RandomStreamInstantiationException.java | 117 + .../ssj/rng/RandomStreamManager.java | 128 + .../ssj/rng/RandomStreamWithCache.java | 272 ++ .../umontreal/ssj/rng/Rijndael_Algorithm.java | 860 +++++ .../ssj/rng/Rijndael_Properties.java | 201 ++ .../ssj/rng/TruncatedRandomStream.java | 87 + src/main/java/umontreal/ssj/rng/WELL1024.java | 302 ++ src/main/java/umontreal/ssj/rng/WELL512.java | 282 ++ src/main/java/umontreal/ssj/rng/WELL607.java | 206 ++ .../java/umontreal/ssj/rng/WELL607base.java | 167 + src/main/java/umontreal/ssj/rng/overview.dox | 183 + .../umontreal/ssj/simevents/Accumulate.java | 266 ++ .../umontreal/ssj/simevents/Continuous.java | 237 ++ .../ssj/simevents/ContinuousState.java | 244 ++ .../java/umontreal/ssj/simevents/Event.java | 351 ++ .../ssj/simevents/LinkedListStat.java | 157 + .../umontreal/ssj/simevents/ListWithStat.java | 553 +++ .../java/umontreal/ssj/simevents/Sim.java | 138 + .../umontreal/ssj/simevents/Simulator.java | 249 ++ .../ssj/simevents/eventlist/BinaryTree.java | 764 ++++ .../ssj/simevents/eventlist/DoublyLinked.java | 486 +++ .../ssj/simevents/eventlist/EventList.java | 164 + .../ssj/simevents/eventlist/Henriksen.java | 522 +++ .../ssj/simevents/eventlist/RedblackTree.java | 410 +++ .../ssj/simevents/eventlist/SplayTree.java | 872 +++++ .../ssj/simevents/eventlist/overview.dox | 11 + .../java/umontreal/ssj/simevents/overview.dox | 39 + .../ssj/stat/ObservationListener.java | 41 + .../java/umontreal/ssj/stat/StatProbe.java | 345 ++ src/main/java/umontreal/ssj/stat/Tally.java | 579 +++ .../umontreal/ssj/stat/TallyHistogram.java | 211 ++ .../java/umontreal/ssj/stat/TallyStore.java | 204 ++ .../stat/list/ArrayOfObservationListener.java | 45 + .../ssj/stat/list/ListOfStatProbes.java | 386 ++ .../ssj/stat/list/ListOfTallies.java | 335 ++ .../list/ListOfTalliesWithCovariance.java | 283 ++ .../java/umontreal/ssj/stat/list/overview.dox | 40 + src/main/java/umontreal/ssj/stat/overview.dox | 62 + .../ssj/stochprocess/BrownianMotion.java | 223 ++ .../stochprocess/BrownianMotionBridge.java | 301 ++ .../ssj/stochprocess/BrownianMotionPCA.java | 153 + .../BrownianMotionPCAEqualSteps.java | 148 + .../ssj/stochprocess/CIRProcess.java | 264 ++ .../ssj/stochprocess/CIRProcessEuler.java | 217 ++ .../ssj/stochprocess/GammaProcess.java | 270 ++ .../ssj/stochprocess/GammaProcessBridge.java | 279 ++ .../ssj/stochprocess/GammaProcessPCA.java | 179 + .../stochprocess/GammaProcessPCABridge.java | 192 + .../GammaProcessPCASymmetricalBridge.java | 132 + .../GammaProcessSymmetricalBridge.java | 217 ++ .../stochprocess/GeometricBrownianMotion.java | 180 + .../stochprocess/GeometricLevyProcess.java | 185 + ...GeometricNormalInverseGaussianProcess.java | 134 + .../GeometricVarianceGammaProcess.java | 244 ++ .../stochprocess/InverseGaussianProcess.java | 212 ++ .../InverseGaussianProcessBridge.java | 262 ++ .../InverseGaussianProcessMSH.java | 255 ++ .../InverseGaussianProcessPCA.java | 153 + .../NormalInverseGaussianProcess.java | 358 ++ .../OrnsteinUhlenbeckProcess.java | 226 ++ .../OrnsteinUhlenbeckProcessEuler.java | 133 + .../ssj/stochprocess/StochasticProcess.java | 276 ++ .../stochprocess/VarianceGammaProcess.java | 264 ++ .../VarianceGammaProcessDiff.java | 281 ++ .../VarianceGammaProcessDiffPCA.java | 158 + .../VarianceGammaProcessDiffPCABridge.java | 58 + ...eGammaProcessDiffPCASymmetricalBridge.java | 56 + .../umontreal/ssj/stochprocess/overview.dox | 16 + .../umontreal/ssj/util/AbstractChrono.java | 185 + .../umontreal/ssj/util/ArithmeticMod.java | 497 +++ .../java/umontreal/ssj/util/BitMatrix.java | 505 +++ .../java/umontreal/ssj/util/BitVector.java | 555 +++ src/main/java/umontreal/ssj/util/Chrono.java | 67 + .../ssj/util/ChronoSingleThread.java | 58 + .../java/umontreal/ssj/util/ClassFinder.java | 310 ++ src/main/java/umontreal/ssj/util/DMatrix.java | 933 +++++ .../ssj/util/DoubleArrayComparator.java | 61 + .../ssj/util/GlobalCPUTimeChrono.java | 70 + .../umontreal/ssj/util/Introspection.java | 338 ++ .../java/umontreal/ssj/util/JDBCManager.java | 739 ++++ src/main/java/umontreal/ssj/util/Misc.java | 270 ++ .../ssj/util/MultivariateFunction.java | 91 + .../ssj/util/NameConflictException.java | 80 + .../java/umontreal/ssj/util/NativeUtils.java | 119 + src/main/java/umontreal/ssj/util/Num.java | 1233 +++++++ .../java/umontreal/ssj/util/PrintfFormat.java | 1115 ++++++ .../umontreal/ssj/util/RatioFunction.java | 107 + .../java/umontreal/ssj/util/RootFinder.java | 224 ++ .../umontreal/ssj/util/SystemTimeChrono.java | 53 + src/main/java/umontreal/ssj/util/Systeme.java | 81 + .../java/umontreal/ssj/util/TableFormat.java | 308 ++ .../umontreal/ssj/util/TextDataReader.java | 865 +++++ .../ssj/util/ThreadCPUTimeChrono.java | 98 + .../java/umontreal/ssj/util/TimeUnit.java | 163 + .../umontreal/ssj/util/TransformingList.java | 185 + .../ssj/util/io/AbstractDataReader.java | 199 ++ .../ssj/util/io/AbstractDataWriter.java | 75 + .../ssj/util/io/BinaryDataReader.java | 417 +++ .../ssj/util/io/BinaryDataWriter.java | 409 +++ .../ssj/util/io/CachedDataWriter.java | 176 + .../java/umontreal/ssj/util/io/DataField.java | 283 ++ .../umontreal/ssj/util/io/DataReader.java | 194 + .../umontreal/ssj/util/io/DataWriter.java | 173 + .../umontreal/ssj/util/io/TextDataWriter.java | 287 ++ .../java/umontreal/ssj/util/io/overview.dox | 131 + src/main/java/umontreal/ssj/util/overview.dox | 11 + src/randvar/c/RandUnuran.c | 731 ++++ src/ssjutil/c/Chrono.c | 81 + src/test/java/ChronoTest.java | 11 + src/test/java/CompareOutputs.java | 53 + src/test/java/ExamplesTest.java | 40 + src/test/java/RunClass.java | 157 + src/test/java/UnuranTest.java | 35 + 487 files changed, 124364 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 src/main/docs/Doxyfile create mode 100644 src/main/docs/examples/charts/BoxTest.java create mode 100644 src/main/docs/examples/charts/ChartTest1.java create mode 100644 src/main/docs/examples/charts/ChartTest2.java create mode 100644 src/main/docs/examples/charts/ContDistPlot.java create mode 100644 src/main/docs/examples/charts/DistIntTest.java create mode 100644 src/main/docs/examples/charts/EmpiricalChartTest.java create mode 100644 src/main/docs/examples/charts/HistogramChartTest.java create mode 100644 src/main/docs/examples/charts/HistogramTest1.java create mode 100644 src/main/docs/examples/charts/NormalChart.java create mode 100644 src/main/docs/examples/probdistmulti/norta/ExampleNortaInitDisc.java create mode 100644 src/main/docs/examples/probdistmulti/norta/ExampleNortaInitDisc.txt create mode 100644 src/main/docs/examples/randvar/normaltest.java create mode 100644 src/main/docs/examples/tutorial/Asian.java create mode 100644 src/main/docs/examples/tutorial/Asian.txt create mode 100644 src/main/docs/examples/tutorial/AsianQMC.java create mode 100644 src/main/docs/examples/tutorial/AsianQMC.txt create mode 100644 src/main/docs/examples/tutorial/BankEv.java create mode 100644 src/main/docs/examples/tutorial/BankEv.txt create mode 100644 src/main/docs/examples/tutorial/CallCenter.dat create mode 100644 src/main/docs/examples/tutorial/CallCenter.java create mode 100644 src/main/docs/examples/tutorial/CallCenter.txt create mode 100644 src/main/docs/examples/tutorial/CallEv.dat create mode 100644 src/main/docs/examples/tutorial/CallEv.java create mode 100644 src/main/docs/examples/tutorial/CallEv.txt create mode 100644 src/main/docs/examples/tutorial/Collision.java create mode 100644 src/main/docs/examples/tutorial/Collision.txt create mode 100644 src/main/docs/examples/tutorial/Inventory.java create mode 100644 src/main/docs/examples/tutorial/Inventory.txt create mode 100644 src/main/docs/examples/tutorial/InventoryCRN.java create mode 100644 src/main/docs/examples/tutorial/InventoryCRN.txt create mode 100644 src/main/docs/examples/tutorial/Nonuniform.java create mode 100644 src/main/docs/examples/tutorial/Nonuniform.txt create mode 100644 src/main/docs/examples/tutorial/PreyPred.java create mode 100644 src/main/docs/examples/tutorial/PreyPred.txt create mode 100644 src/main/docs/examples/tutorial/QueueEv.java create mode 100644 src/main/docs/examples/tutorial/QueueEv.txt create mode 100644 src/main/docs/examples/tutorial/QueueLindley.java create mode 100644 src/main/docs/examples/tutorial/QueueLindley.txt create mode 100644 src/main/docs/examples/tutorial/QueueObs.java create mode 100644 src/main/docs/examples/tutorial/QueueObs.txt create mode 100644 src/main/docs/examples/tutorial/Visits.txt create mode 100644 src/main/docs/examples/tutorial/tutorial.dox create mode 100644 src/main/docs/images/charts_exam_BoxTest.png create mode 100644 src/main/docs/images/charts_overview_01.svg create mode 100644 src/main/docs/images/charts_overview_02.svg create mode 100644 src/main/docs/images/charts_overview_03.svg create mode 100644 src/main/docs/images/charts_overview_04.svg create mode 100644 src/main/docs/images/charts_overview_05.svg create mode 100644 src/main/docs/images/charts_overview_06.svg create mode 100644 src/main/docs/images/charts_overview_07.svg create mode 100644 src/main/docs/images/examples_examples_01.svg create mode 100644 src/main/docs/images/examples_examples_02.svg create mode 100644 src/main/docs/images/rng_randomstream_01.svg create mode 100644 src/main/docs/images/simprocs_simprocess_01.svg create mode 100644 src/main/docs/mathjax_config.js create mode 100644 src/main/docs/ssj.bib create mode 100644 src/main/docs/ssj.css create mode 100644 src/main/java/umontreal/ssj/charts/Axis.java create mode 100644 src/main/java/umontreal/ssj/charts/BoxChart.java create mode 100644 src/main/java/umontreal/ssj/charts/BoxSeriesCollection.java create mode 100644 src/main/java/umontreal/ssj/charts/CategoryChart.java create mode 100644 src/main/java/umontreal/ssj/charts/ContinuousDistChart.java create mode 100644 src/main/java/umontreal/ssj/charts/CustomHistogramDataset.java create mode 100644 src/main/java/umontreal/ssj/charts/DiscreteDistIntChart.java create mode 100644 src/main/java/umontreal/ssj/charts/EmpiricalChart.java create mode 100644 src/main/java/umontreal/ssj/charts/EmpiricalRenderer.java create mode 100644 src/main/java/umontreal/ssj/charts/EmpiricalSeriesCollection.java create mode 100644 src/main/java/umontreal/ssj/charts/HistogramChart.java create mode 100644 src/main/java/umontreal/ssj/charts/HistogramSeriesCollection.java create mode 100644 src/main/java/umontreal/ssj/charts/MultipleDatasetChart.java create mode 100644 src/main/java/umontreal/ssj/charts/PPPlot.java create mode 100644 src/main/java/umontreal/ssj/charts/PlotFormat.java create mode 100644 src/main/java/umontreal/ssj/charts/QQPlot.java create mode 100644 src/main/java/umontreal/ssj/charts/SSJCategorySeriesCollection.java create mode 100644 src/main/java/umontreal/ssj/charts/SSJXYSeriesCollection.java create mode 100644 src/main/java/umontreal/ssj/charts/ScatterChart.java create mode 100644 src/main/java/umontreal/ssj/charts/XYChart.java create mode 100644 src/main/java/umontreal/ssj/charts/XYLineChart.java create mode 100644 src/main/java/umontreal/ssj/charts/XYListSeriesCollection.java create mode 100644 src/main/java/umontreal/ssj/charts/YListChart.java create mode 100644 src/main/java/umontreal/ssj/charts/YListSeriesCollection.java create mode 100644 src/main/java/umontreal/ssj/charts/overview.dox create mode 100644 src/main/java/umontreal/ssj/functionfit/BSpline.java create mode 100644 src/main/java/umontreal/ssj/functionfit/LeastSquares.java create mode 100644 src/main/java/umontreal/ssj/functionfit/PolInterp.java create mode 100644 src/main/java/umontreal/ssj/functionfit/SmoothingCubicSpline.java create mode 100644 src/main/java/umontreal/ssj/functionfit/overview.dox create mode 100644 src/main/java/umontreal/ssj/functions/AverageMathFunction.java create mode 100644 src/main/java/umontreal/ssj/functions/IdentityMathFunction.java create mode 100644 src/main/java/umontreal/ssj/functions/MathFunction.java create mode 100644 src/main/java/umontreal/ssj/functions/MathFunctionUtil.java create mode 100644 src/main/java/umontreal/ssj/functions/MathFunctionWithDerivative.java create mode 100644 src/main/java/umontreal/ssj/functions/MathFunctionWithFirstDerivative.java create mode 100644 src/main/java/umontreal/ssj/functions/MathFunctionWithIntegral.java create mode 100644 src/main/java/umontreal/ssj/functions/MultiFunction.java create mode 100644 src/main/java/umontreal/ssj/functions/PiecewiseConstantFunction.java create mode 100644 src/main/java/umontreal/ssj/functions/Polynomial.java create mode 100644 src/main/java/umontreal/ssj/functions/PowerMathFunction.java create mode 100644 src/main/java/umontreal/ssj/functions/ShiftedMathFunction.java create mode 100644 src/main/java/umontreal/ssj/functions/SqrtMathFunction.java create mode 100644 src/main/java/umontreal/ssj/functions/SquareMathFunction.java create mode 100644 src/main/java/umontreal/ssj/functions/overview.dox create mode 100644 src/main/java/umontreal/ssj/gof/FBar.java create mode 100644 src/main/java/umontreal/ssj/gof/FDist.java create mode 100644 src/main/java/umontreal/ssj/gof/GofFormat.java create mode 100644 src/main/java/umontreal/ssj/gof/GofStat.java create mode 100644 src/main/java/umontreal/ssj/gof/KernelDensity.java create mode 100644 src/main/java/umontreal/ssj/gof/overview.dox create mode 100644 src/main/java/umontreal/ssj/hups/AntitheticPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/BakerTransformedPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/CachedPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/ContainerPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/CycleBasedPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/CycleBasedPointSetBase2.java create mode 100644 src/main/java/umontreal/ssj/hups/DigitalNet.java create mode 100644 src/main/java/umontreal/ssj/hups/DigitalNetBase2.java create mode 100644 src/main/java/umontreal/ssj/hups/DigitalNetBase2FromFile.java create mode 100644 src/main/java/umontreal/ssj/hups/DigitalNetFromFile.java create mode 100644 src/main/java/umontreal/ssj/hups/DigitalSequence.java create mode 100644 src/main/java/umontreal/ssj/hups/DigitalSequenceBase2.java create mode 100644 src/main/java/umontreal/ssj/hups/EmptyRandomization.java create mode 100644 src/main/java/umontreal/ssj/hups/F2wCycleBasedLFSR.java create mode 100644 src/main/java/umontreal/ssj/hups/F2wCycleBasedPolyLCG.java create mode 100644 src/main/java/umontreal/ssj/hups/F2wNetLFSR.java create mode 100644 src/main/java/umontreal/ssj/hups/F2wNetPolyLCG.java create mode 100644 src/main/java/umontreal/ssj/hups/F2wStructure.java create mode 100644 src/main/java/umontreal/ssj/hups/FaureSequence.java create mode 100644 src/main/java/umontreal/ssj/hups/HaltonSequence.java create mode 100644 src/main/java/umontreal/ssj/hups/HammersleyPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/KorobovLattice.java create mode 100644 src/main/java/umontreal/ssj/hups/KorobovLatticeSequence.java create mode 100644 src/main/java/umontreal/ssj/hups/LCGPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/LMScrambleShift.java create mode 100644 src/main/java/umontreal/ssj/hups/NiedSequenceBase2.java create mode 100644 src/main/java/umontreal/ssj/hups/NiedXingSequenceBase2.java create mode 100644 src/main/java/umontreal/ssj/hups/PaddedPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/PointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/PointSetIterator.java create mode 100644 src/main/java/umontreal/ssj/hups/PointSetRandomization.java create mode 100644 src/main/java/umontreal/ssj/hups/RQMCPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/RadicalInverse.java create mode 100644 src/main/java/umontreal/ssj/hups/RandShiftedPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/RandomShift.java create mode 100644 src/main/java/umontreal/ssj/hups/RandomStart.java create mode 100644 src/main/java/umontreal/ssj/hups/Rank1Lattice.java create mode 100644 src/main/java/umontreal/ssj/hups/SMScrambleShift.java create mode 100644 src/main/java/umontreal/ssj/hups/SobolSequence.java create mode 100644 src/main/java/umontreal/ssj/hups/SubsetOfPointSet.java create mode 100644 src/main/java/umontreal/ssj/hups/dataLFSR/j1_k11.dat create mode 100644 src/main/java/umontreal/ssj/hups/dataLFSR/j2_k17.dat create mode 100644 src/main/java/umontreal/ssj/hups/dataLFSR/j2_k19.dat create mode 100644 src/main/java/umontreal/ssj/hups/dataSer/Nieder/NiedSequenceBase2.dat create mode 100644 src/main/java/umontreal/ssj/hups/dataSer/Nieder/NiedSequenceBase2.ser create mode 100644 src/main/java/umontreal/ssj/hups/dataSer/Nieder/NiedXingSequenceBase2Trans.dat create mode 100644 src/main/java/umontreal/ssj/hups/dataSer/Nieder/NiedXingSequenceBase2Trans.ser create mode 100644 src/main/java/umontreal/ssj/hups/overview.dox create mode 100644 src/main/java/umontreal/ssj/overview.dox create mode 100644 src/main/java/umontreal/ssj/probdist/AndersonDarlingDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/AndersonDarlingDistQuick.java create mode 100644 src/main/java/umontreal/ssj/probdist/BernoulliDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/BetaDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/BetaSymmetricalDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/BinomialDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/CauchyDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ChiDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ChiSquareDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ChiSquareDistQuick.java create mode 100644 src/main/java/umontreal/ssj/probdist/ChiSquareNoncentralDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ConstantDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ConstantIntDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ContinuousDistribution.java create mode 100644 src/main/java/umontreal/ssj/probdist/CramerVonMisesDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/DiscreteDistribution.java create mode 100644 src/main/java/umontreal/ssj/probdist/DiscreteDistributionInt.java create mode 100644 src/main/java/umontreal/ssj/probdist/Distribution.java create mode 100644 src/main/java/umontreal/ssj/probdist/DistributionFactory.java create mode 100644 src/main/java/umontreal/ssj/probdist/EmpiricalDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ErlangDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ExponentialDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ExponentialDistFromMean.java create mode 100644 src/main/java/umontreal/ssj/probdist/ExtremeValueDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/FatigueLifeDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/FisherFDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/FoldedNormalDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/FrechetDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/GammaDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/GammaDistFromMoments.java create mode 100644 src/main/java/umontreal/ssj/probdist/GeometricDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/GumbelDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/HalfNormalDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/HyperbolicSecantDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/HypergeometricDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/HypoExponentialDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/HypoExponentialDistEqual.java create mode 100644 src/main/java/umontreal/ssj/probdist/HypoExponentialDistQuick.java create mode 100644 src/main/java/umontreal/ssj/probdist/InverseDistFromDensity.java create mode 100644 src/main/java/umontreal/ssj/probdist/InverseGammaDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/InverseGaussianDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/JohnsonSBDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/JohnsonSLDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/JohnsonSUDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/JohnsonSystem.java create mode 100644 src/main/java/umontreal/ssj/probdist/KolmogorovSmirnovDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/KolmogorovSmirnovDistQuick.java create mode 100644 src/main/java/umontreal/ssj/probdist/KolmogorovSmirnovPlusDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/LaplaceDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/LogarithmicDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/LogisticDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/LoglogisticDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/LognormalDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/LognormalDistFromMoments.java create mode 100644 src/main/java/umontreal/ssj/probdist/NakagamiDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/NegativeBinomialDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/NormalDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/NormalDistQuick.java create mode 100644 src/main/java/umontreal/ssj/probdist/NormalInverseGaussianDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/ParetoDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/PascalDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/Pearson5Dist.java create mode 100644 src/main/java/umontreal/ssj/probdist/Pearson6Dist.java create mode 100644 src/main/java/umontreal/ssj/probdist/PiecewiseLinearEmpiricalDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/PoissonDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/PowerDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/RayleighDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/StudentDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/StudentDistQuick.java create mode 100644 src/main/java/umontreal/ssj/probdist/TriangularDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/TruncatedDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/UniformDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/UniformIntDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/WatsonGDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/WatsonUDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/WeibullDist.java create mode 100644 src/main/java/umontreal/ssj/probdist/overview.dox create mode 100644 src/main/java/umontreal/ssj/probdistmulti/BiNormalDist.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/BiNormalDonnellyDist.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/BiNormalGenzDist.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/BiStudentDist.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/ContinuousDistribution2Dim.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/ContinuousDistributionMulti.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/DirichletDist.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/DiscreteDistributionIntMulti.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/MultiNormalDist.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/MultinomialDist.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/NegativeMultinomialDist.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/norta/NI1.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/norta/NI2a.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/norta/NI2b.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/norta/NI3.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/norta/NortaInitDisc.java create mode 100644 src/main/java/umontreal/ssj/probdistmulti/norta/overview.dox create mode 100644 src/main/java/umontreal/ssj/probdistmulti/overview.dox create mode 100644 src/main/java/umontreal/ssj/randvar/BernoulliGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/BetaGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/BetaRejectionLoglogisticGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/BetaStratifiedRejectionGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/BetaSymmetricalBestGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/BetaSymmetricalGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/BetaSymmetricalPolarGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/BinomialConvolutionGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/BinomialGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/CauchyGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ChiGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ChiRatioOfUniformsGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ChiSquareGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ChiSquareNoncentralGamGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ChiSquareNoncentralGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ChiSquareNoncentralPoisGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ConstantGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ErlangConvolutionGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ErlangGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ExponentialGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ExponentialInverseFromDensityGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ExtremeValueGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/FNoncentralGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/FatigueLifeGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/FisherFGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/FoldedNormalGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/FrechetGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/GammaAcceptanceRejectionGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/GammaGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/GammaRejectionLoglogisticGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/GeometricGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/GumbelGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/HalfNormalGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/HyperbolicSecantGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/HypergeometricGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/HypoExponentialGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/InverseFromDensityGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/InverseGammaGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/InverseGaussianGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/InverseGaussianMSHGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/JohnsonSBGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/JohnsonSLGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/JohnsonSUGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/JohnsonSystemG.java create mode 100644 src/main/java/umontreal/ssj/randvar/KernelDensityGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/KernelDensityVarCorrectGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/LaplaceGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/LogarithmicGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/LogisticGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/LoglogisticGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/LognormalGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/LognormalSpecialGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NakagamiGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NegativeBinomialGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NormalACRGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NormalBoxMullerGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NormalGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NormalInverseFromDensityGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NormalInverseGaussianGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NormalInverseGaussianIGGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NormalKindermannRamageGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/NormalPolarGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/ParetoGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/PascalConvolutionGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/PascalGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/Pearson5Gen.java create mode 100644 src/main/java/umontreal/ssj/randvar/Pearson6Gen.java create mode 100644 src/main/java/umontreal/ssj/randvar/PoissonGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/PoissonTIACGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/PowerGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/RandUnuran.java create mode 100644 src/main/java/umontreal/ssj/randvar/RandomVariateGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/RandomVariateGenInt.java create mode 100644 src/main/java/umontreal/ssj/randvar/RandomVariateGenWithCache.java create mode 100644 src/main/java/umontreal/ssj/randvar/RayleighGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/StudentGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/StudentNoncentralGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/StudentPolarGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/TriangularGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/UniformGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/UniformIntGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/UnuranContinuous.java create mode 100644 src/main/java/umontreal/ssj/randvar/UnuranDiscreteInt.java create mode 100644 src/main/java/umontreal/ssj/randvar/UnuranEmpirical.java create mode 100644 src/main/java/umontreal/ssj/randvar/UnuranException.java create mode 100644 src/main/java/umontreal/ssj/randvar/WeibullGen.java create mode 100644 src/main/java/umontreal/ssj/randvar/overview.dox create mode 100644 src/main/java/umontreal/ssj/randvarmulti/DirichletGen.java create mode 100644 src/main/java/umontreal/ssj/randvarmulti/IIDMultivariateGen.java create mode 100644 src/main/java/umontreal/ssj/randvarmulti/MultinormalCholeskyGen.java create mode 100644 src/main/java/umontreal/ssj/randvarmulti/MultinormalGen.java create mode 100644 src/main/java/umontreal/ssj/randvarmulti/MultinormalPCAGen.java create mode 100644 src/main/java/umontreal/ssj/randvarmulti/RandomMultivariateGen.java create mode 100644 src/main/java/umontreal/ssj/randvarmulti/overview.dox create mode 100644 src/main/java/umontreal/ssj/rng/AntitheticStream.java create mode 100644 src/main/java/umontreal/ssj/rng/BakerTransformedStream.java create mode 100644 src/main/java/umontreal/ssj/rng/BasicRandomStreamFactory.java create mode 100644 src/main/java/umontreal/ssj/rng/CloneableRandomStream.java create mode 100644 src/main/java/umontreal/ssj/rng/F2NL607.java create mode 100644 src/main/java/umontreal/ssj/rng/F2wPoly.java create mode 100644 src/main/java/umontreal/ssj/rng/GenF2w32.java create mode 100644 src/main/java/umontreal/ssj/rng/LFSR113.java create mode 100644 src/main/java/umontreal/ssj/rng/LFSR258.java create mode 100644 src/main/java/umontreal/ssj/rng/MRG31k3p.java create mode 100644 src/main/java/umontreal/ssj/rng/MRG32k3a.java create mode 100644 src/main/java/umontreal/ssj/rng/MRG32k3aL.java create mode 100644 src/main/java/umontreal/ssj/rng/MT19937.java create mode 100644 src/main/java/umontreal/ssj/rng/RandMrg.java create mode 100644 src/main/java/umontreal/ssj/rng/RandRijndael.java create mode 100644 src/main/java/umontreal/ssj/rng/RandomPermutation.java create mode 100644 src/main/java/umontreal/ssj/rng/RandomStream.java create mode 100644 src/main/java/umontreal/ssj/rng/RandomStreamBase.java create mode 100644 src/main/java/umontreal/ssj/rng/RandomStreamFactory.java create mode 100644 src/main/java/umontreal/ssj/rng/RandomStreamInstantiationException.java create mode 100644 src/main/java/umontreal/ssj/rng/RandomStreamManager.java create mode 100644 src/main/java/umontreal/ssj/rng/RandomStreamWithCache.java create mode 100644 src/main/java/umontreal/ssj/rng/Rijndael_Algorithm.java create mode 100644 src/main/java/umontreal/ssj/rng/Rijndael_Properties.java create mode 100644 src/main/java/umontreal/ssj/rng/TruncatedRandomStream.java create mode 100644 src/main/java/umontreal/ssj/rng/WELL1024.java create mode 100644 src/main/java/umontreal/ssj/rng/WELL512.java create mode 100644 src/main/java/umontreal/ssj/rng/WELL607.java create mode 100644 src/main/java/umontreal/ssj/rng/WELL607base.java create mode 100644 src/main/java/umontreal/ssj/rng/overview.dox create mode 100644 src/main/java/umontreal/ssj/simevents/Accumulate.java create mode 100644 src/main/java/umontreal/ssj/simevents/Continuous.java create mode 100644 src/main/java/umontreal/ssj/simevents/ContinuousState.java create mode 100644 src/main/java/umontreal/ssj/simevents/Event.java create mode 100644 src/main/java/umontreal/ssj/simevents/LinkedListStat.java create mode 100644 src/main/java/umontreal/ssj/simevents/ListWithStat.java create mode 100644 src/main/java/umontreal/ssj/simevents/Sim.java create mode 100644 src/main/java/umontreal/ssj/simevents/Simulator.java create mode 100644 src/main/java/umontreal/ssj/simevents/eventlist/BinaryTree.java create mode 100644 src/main/java/umontreal/ssj/simevents/eventlist/DoublyLinked.java create mode 100644 src/main/java/umontreal/ssj/simevents/eventlist/EventList.java create mode 100644 src/main/java/umontreal/ssj/simevents/eventlist/Henriksen.java create mode 100644 src/main/java/umontreal/ssj/simevents/eventlist/RedblackTree.java create mode 100644 src/main/java/umontreal/ssj/simevents/eventlist/SplayTree.java create mode 100644 src/main/java/umontreal/ssj/simevents/eventlist/overview.dox create mode 100644 src/main/java/umontreal/ssj/simevents/overview.dox create mode 100644 src/main/java/umontreal/ssj/stat/ObservationListener.java create mode 100644 src/main/java/umontreal/ssj/stat/StatProbe.java create mode 100644 src/main/java/umontreal/ssj/stat/Tally.java create mode 100644 src/main/java/umontreal/ssj/stat/TallyHistogram.java create mode 100644 src/main/java/umontreal/ssj/stat/TallyStore.java create mode 100644 src/main/java/umontreal/ssj/stat/list/ArrayOfObservationListener.java create mode 100644 src/main/java/umontreal/ssj/stat/list/ListOfStatProbes.java create mode 100644 src/main/java/umontreal/ssj/stat/list/ListOfTallies.java create mode 100644 src/main/java/umontreal/ssj/stat/list/ListOfTalliesWithCovariance.java create mode 100644 src/main/java/umontreal/ssj/stat/list/overview.dox create mode 100644 src/main/java/umontreal/ssj/stat/overview.dox create mode 100644 src/main/java/umontreal/ssj/stochprocess/BrownianMotion.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/BrownianMotionBridge.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/BrownianMotionPCA.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/BrownianMotionPCAEqualSteps.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/CIRProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/CIRProcessEuler.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GammaProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GammaProcessBridge.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GammaProcessPCA.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GammaProcessPCABridge.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GammaProcessPCASymmetricalBridge.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GammaProcessSymmetricalBridge.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GeometricBrownianMotion.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GeometricLevyProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GeometricNormalInverseGaussianProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/GeometricVarianceGammaProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/InverseGaussianProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/InverseGaussianProcessBridge.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/InverseGaussianProcessMSH.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/InverseGaussianProcessPCA.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/NormalInverseGaussianProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/OrnsteinUhlenbeckProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/OrnsteinUhlenbeckProcessEuler.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/StochasticProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/VarianceGammaProcess.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/VarianceGammaProcessDiff.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/VarianceGammaProcessDiffPCA.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/VarianceGammaProcessDiffPCABridge.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/VarianceGammaProcessDiffPCASymmetricalBridge.java create mode 100644 src/main/java/umontreal/ssj/stochprocess/overview.dox create mode 100644 src/main/java/umontreal/ssj/util/AbstractChrono.java create mode 100644 src/main/java/umontreal/ssj/util/ArithmeticMod.java create mode 100644 src/main/java/umontreal/ssj/util/BitMatrix.java create mode 100644 src/main/java/umontreal/ssj/util/BitVector.java create mode 100644 src/main/java/umontreal/ssj/util/Chrono.java create mode 100644 src/main/java/umontreal/ssj/util/ChronoSingleThread.java create mode 100644 src/main/java/umontreal/ssj/util/ClassFinder.java create mode 100644 src/main/java/umontreal/ssj/util/DMatrix.java create mode 100644 src/main/java/umontreal/ssj/util/DoubleArrayComparator.java create mode 100644 src/main/java/umontreal/ssj/util/GlobalCPUTimeChrono.java create mode 100644 src/main/java/umontreal/ssj/util/Introspection.java create mode 100644 src/main/java/umontreal/ssj/util/JDBCManager.java create mode 100644 src/main/java/umontreal/ssj/util/Misc.java create mode 100644 src/main/java/umontreal/ssj/util/MultivariateFunction.java create mode 100644 src/main/java/umontreal/ssj/util/NameConflictException.java create mode 100644 src/main/java/umontreal/ssj/util/NativeUtils.java create mode 100644 src/main/java/umontreal/ssj/util/Num.java create mode 100644 src/main/java/umontreal/ssj/util/PrintfFormat.java create mode 100644 src/main/java/umontreal/ssj/util/RatioFunction.java create mode 100644 src/main/java/umontreal/ssj/util/RootFinder.java create mode 100644 src/main/java/umontreal/ssj/util/SystemTimeChrono.java create mode 100644 src/main/java/umontreal/ssj/util/Systeme.java create mode 100644 src/main/java/umontreal/ssj/util/TableFormat.java create mode 100644 src/main/java/umontreal/ssj/util/TextDataReader.java create mode 100644 src/main/java/umontreal/ssj/util/ThreadCPUTimeChrono.java create mode 100644 src/main/java/umontreal/ssj/util/TimeUnit.java create mode 100644 src/main/java/umontreal/ssj/util/TransformingList.java create mode 100644 src/main/java/umontreal/ssj/util/io/AbstractDataReader.java create mode 100644 src/main/java/umontreal/ssj/util/io/AbstractDataWriter.java create mode 100644 src/main/java/umontreal/ssj/util/io/BinaryDataReader.java create mode 100644 src/main/java/umontreal/ssj/util/io/BinaryDataWriter.java create mode 100644 src/main/java/umontreal/ssj/util/io/CachedDataWriter.java create mode 100644 src/main/java/umontreal/ssj/util/io/DataField.java create mode 100644 src/main/java/umontreal/ssj/util/io/DataReader.java create mode 100644 src/main/java/umontreal/ssj/util/io/DataWriter.java create mode 100644 src/main/java/umontreal/ssj/util/io/TextDataWriter.java create mode 100644 src/main/java/umontreal/ssj/util/io/overview.dox create mode 100644 src/main/java/umontreal/ssj/util/overview.dox create mode 100644 src/randvar/c/RandUnuran.c create mode 100644 src/ssjutil/c/Chrono.c create mode 100644 src/test/java/ChronoTest.java create mode 100644 src/test/java/CompareOutputs.java create mode 100644 src/test/java/ExamplesTest.java create mode 100644 src/test/java/RunClass.java create mode 100644 src/test/java/UnuranTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..f8b92c3aa --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.gradle +build diff --git a/README.md b/README.md new file mode 100644 index 000000000..6efea18cf --- /dev/null +++ b/README.md @@ -0,0 +1,280 @@ +# SSJ + +*Stochastic Simulation in Java* + +SSJ is a Java library for stochastic simulation, developed at +[Pierre L'Ecuyer](http://www-labs.iro.umontreal.ca/~lecuyer/)'s +[Simulation and Optimization Laboratory](http://simul.iro.umontreal.ca/), +located at the +[Department of Computer Science and Operations +Research](http://en.diro.umontreal.ca) of Université de Montréal. +It provides facilities for: + +- generating uniform and nonuniform random variates; +- computing different measures related to probability distributions; +- performing goodness-of-fit tests; +- applying quasi-Monte Carlo methods; +- collecting (elementary) statistics; and +- performing event-based discrete-event simulation. + + +## Documentation + +The [SSJ User's Guide](http://umontreal-simul.github.io/ssj/docs/master) +includes: +- the [API documentation](http://umontreal-simul.github.io/ssj/docs/master/namespaces.html); and +- [documented examples](http://umontreal-simul.github.io/ssj/docs/master/examples.html). + + +## Installation + +You can install SSJ either by [adding it as a dependency](#using-maven) +for your Maven- or Gradle-based project, by downloading a [binary +release](#binary-releases) or by [compiling it from +scratch](#compiling-the-source-code). + + +### Using Maven + +**(Recommended approach)** + +If your Java project uses [Maven](http://maven.apache.org/) or +[Gradle](http://gradle.org/), all you need to do is: + +- add `ca.umontreal.iro.simul:ssj:` to the dependencies of your project, where + `` is a + [valid release number](http://github.com/umontreal-simul/ssj/releases) such + as `3.0.0-rc1`; +- add [jCenter](http://bintray.com/bintray/jcenter) to the Maven repositories + (it should already be included); + +and start working on your project right-away, without further ado. + + +##### IDE integration + +The following integrated development environments (IDEs) are known to support +Maven (there may be more): +[Eclipse](http://www.eclipse.org/), +[NetBeans](http://netbeans.org/), +[IntelliJ IDEA](http://www.jetbrains.com/idea/). +When using these, simply create your project as a *Maven project* instead +of a Java project. Then you can add SSJ to the Maven dependencies of the +project (refer to your editor's documentation). + + +### Binary releases + +SSJ is compatible with Java SE5 (JDK 5) and later versions of Java. The latest +Java platform is available at +[Oracle](http://www.oracle.com/technetwork/java/javase/downloads/index.html) +with installation instructions. + +We provide below very general instructions for configuring a project to use +SSJ. +Less experienced users can find +[detailed instructions on the SSJ page](http://simul.iro.umontreal.ca/ssj/indexe.html) +at the Stochastic Simulation and Optimization Laboratory. + + +#### Download a binary archive + +Pre-compiled binaries are available as archives on the +[releases page](http://github.com/umontreal-simul/ssj/releases). +They include: + +- the main SSJ [JAR file](http://en.wikipedia.org/wiki/JAR_%28file_format%29) + (under `ssj/lib`); +- JAR files for the Java libraries used by SSJ (the dependencies) + (under `ssj/lib`); +- dependencies and the [JNI](http://en.wikipedia.org/wiki/Java_Native_Interface) + shared libraries (under the `ssj/lib` directory); +- the user's guide (under `ssj/doc/html`); and +- example source files (under `ssj/doc/examples`). + +Download the latest archive and extract the files in a location of your choice. + + +#### Set the Java class path + +You add to the Java class path every JAR file found under the `ssj/lib` +directory of the binary archive. + +##### On the command line + +If you use Java from the command line, add the full path of every JAR file +under `ssj/lib` to the `CLASSPATH` environment variable, separated with `:` +under Linux or MacOS, or by `;` under Windows. +Means of doing this depends on the system you are using. +For example, under Linux with a Bash-compatible shell, one could use something +like: + +```sh +for f in /full/path/to/ssj/lib/*.jar; do + CLASSPATH=$f:$CLASSPATH +done +export CLASSPATH +``` + + +##### In Eclipse + +In Eclipse, under *Window ‣ Preferences ‣ Java ‣ Build Path ‣ User Libraries*, +click *New…*. Set the name to `SSJ` and click *OK*. Click *Add External +JARs…* navigate to the `ssj/lib` folder of the extracted binary archive, select +all JAR files, and click *OK*. You can now add the SSJ library you have +created from any project, by right-clicking on your project name in the +*Package Explorer*, by selecting *Build Path ‣ Add Libraries… ‣ User Library* +under your project tree and by choosing SSJ. + + +##### In NetBeans + +In NetBeans, under *Tools ‣ Libraries*, press *New Library…*. Set the name to +`SSJ` and click *OK*. Click *Add JAR/Folder…*, navigate to the `ssj/lib` +folder of the extracted binary archive, select all JAR files, and click *Add +JAR/Folder*. You can now add the SSJ library you have created from any +project, by right-clicking on *Libraries* under your project tree in the +*Projects* tab and by choosing SSJ. + + + +## Compiling the source code + +**You do not need to compile the source code if you have already installed +SSJ [using Maven](#using-maven) or a [binary release](#binary-releases).** + +The SSJ library uses [Gradle](http://gradle.org/) as its build system. +You do not need to download it, since the Gradle wrapper executable program is +provided with the source code as the `gradlew` file for Linux and MacOS +platforms, and as `gradlew.bat` for Windows platforms. +The `build.gradle` and `gradle.properties` files at the root of the source tree +contain the configuration for Gradle. + +Although SSJ works with Java SE versions 5 and later, the current Gradle +version requires Java SE version 6 or later. + +In the instructions below, **Windows users** should replace instances of +`./gradlew` with `gradlew.bat`. + + +### Using Gradle + +The general syntax for Gradle is `./gradlew ` where `` is the name +of a Gradle task (run `./gradlew tasks` to obtain a list of available tasks). + +On the command line, from the root of the source tree, type: + +- `./gradlew check` to build and test the library; +- `./gradlew examples` (optionally) to run additional examples; +- `./gradlew distZip` or `./gradlew distTar` to create an binary archive of the + SSJ library, including the SSJ JAR file and its dependencies; +- `./gradlew --gui` to launch the Gradle graphical user interface and choose + from more options. + +All files generated during the build process are placed under the `build` +subdirectory. +The generated binary archives can be found under `build/distributions`. + + +### Building the documentation + +**(Optional)** + +The SSJ library uses [Doxygen](http://www.stack.nl/~dimitri/doxygen/) as its +documentation system. +If Doxygen is available on your system, you can tell Gradle to build the +documentation by adding the following line in `gradle.properties`: + + buildDocs + +Then, run Gradle [as explained above](#using-gradle). + + +### JNI classes + +**(Optional)** + +The classes +[UnuranContinuous](http://umontreal-simul.github.io/ssj/docs/master/html/classumontreal_1_1ssj_1_1randvar_1_1UnuranContinuous.html), +[UnuranDiscreteInt](http://umontreal-simul.github.io/ssj/docs/master/html/classumontreal_1_1ssj_1_1randvar_1_1UnuranDiscreteInt.html), +[UnuranEmpirical](http://umontreal-simul.github.io/ssj/docs/master/html/classumontreal_1_1ssj_1_1randvar_1_1UnuranEmpirical.html) and +[GlobalCPUTimeChrono](http://umontreal-simul.github.io/ssj/docs/master/html/classumontreal_1_1ssj_1_1util_1_1GlobalCPUTimeChrono.html) +make use of native libraries through the +[Java Native Interface (JNI)](http://en.wikipedia.org/wiki/Java_Native_Interface). +These libraries must be compiled with a C compiler (known to work with GCC). + +Note that if you want to build and use the UNU.RAN interface provided with SSJ, +you must first install [UNU.RAN](http://statistik.wu-wien.ac.at/unuran/). + +To tell Gradle to build the JNI libraries, add the following lines in +`gradle.properties`: + + ssjutil.jni.build + randvar.jni.build + unuran.prefix = "/path/to/unuran" + +Make sure to replace `/path/to/unuran` in the above with the installation +prefix of UNU.RAN, i.e., the path under which `include/unuran.h` can be found. +Then, run Gradle [as explained above](#using-gradle). + + +### Cross-compiling + +**(For experts only!)** + +Under Linux with [GCC](http://gcc.gnu.org/) and [MinGW](http://www.mingw.org/), +you can cross-compile the JNI libraries for both Linux and Windows. +This is how we generate the binary archives. + +To enable cross-compilation with Gradle, add the following lines in +`gradle.properties`: + + crossCompile + unuran.prefix.linux64 = "/path/to/unuran" + unuran.prefix.win32 = "/path/to/unuran-mingw32" + +Make sure to replace `/path/to/unuran` and `/path/to/unuran-mingw32` with the +installation prefixes of UNU.RAN compiled for 64-bit Linux and for 32-bit +Windows, respectively. + + +## Dependencies + +SSJ depends on the following libraries. +**You do not need to download them manually if you're using SSJ with Maven or +from a binary release.** + +If you intend to [compile the source code](#compiling-the-source-code) of SSJ, +Gradle will take care of downloading the Java dependencies for you. +Optionally, if you want to use the UNU.RAN interface in SSJ, you need to +install the [UNU.RAN](http://statistik.wu-wien.ac.at/unuran/) before compiling +the associated JNI shared library in SSJ. + +##### [Colt](http://dst.lbl.gov/ACSSoftware/colt/) +The Colt library is used by a few SSJ classes. The library, its source code +and documentation, can be downloaded for free from its home page. The +`colt.jar` archive is already included in the SSJ distribution and it must be +in the CLASSPATH environment variable. + +##### [Nonlinear Optimization Java Package](http://www1.fpl.fs.fed.us/optimization.html) by [Steve Verrill](http://www1.fpl.fs.fed.us/steve.html) +The optimization package of Steve Verrill includes Java translations of the +MINPACK nonlinear least squares routines as well as UNCMIN routines for +unconstrained optimization. They were translated from FORTRAN to Java by +Steve Verrill and are in the public domain. They are included in the SSJ +distribution as the optimization.jar archive. It is used only in the +`probdist` package to compute maximum likelihood estimators. + +##### [JFreeChart](http://www.jfree.org/jfreechart/) +The JFreeChart library is used by the SSJ package charts to draw curves, histograms +and different kinds of plots. JFreeChart is copyrighted under the +[GNU LGPL License](http://www.gnu.org/licenses/lgpl.html). +It is included in the SSJ distribution as the `jfreechart-X.Y.Z.jar` +and the `jcommon-X.Y.Z.jar`, where `X.Y.Z` represents a version number. + +##### [UNU.RAN](http://statistik.wu-wien.ac.at/unuran/) (optional) +The UNURAN library is used by the classes `UnuranContinuous`, +`UnuranDiscrete` and `UnuranEmpirical` in the package called `randvar`. +Downloading, compiling and installing UNURAN is optional. It is required +only if SSJ must be rebuilt. However, the UNURAN documentation is required +to use the SSJ UNURAN interface efficiently. diff --git a/build.gradle b/build.gradle new file mode 100644 index 000000000..c4bc3618b --- /dev/null +++ b/build.gradle @@ -0,0 +1,360 @@ +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'org.ysb33r.gradle:doxygen:0.2' + } +} + +plugins { + id 'java' + id 'c' + id 'org.ysb33r.doxygen' version '0.2' + id 'distribution' + id 'maven-publish' +} + +defaultTasks 'build' + +group = 'ca.umontreal.iro.simul' + +sourceCompatibility = 1.5 +targetCompatibility = 1.5 + +version = '3.0.0-rc1' + +repositories { + jcenter() +} + +dependencies { + compile group: 'jfree', name: 'jfreechart', version: '1.0.12' +// compile group: 'org.jfree', name: 'jfreechart', version: '1.0.19' + compile group: 'colt', name: 'colt', version: '1.2.0' + compile group: 'com.github.rwl', name: 'optimization', version: '1.3' + testCompile group: 'junit', name: 'junit', version: '4.+' +} + +publishing { + publications { + maven(MavenPublication) { + repositories.jcenter() + from components.java + // JNI libraries are added below with whenTaskAdded + pom.withXml { + asNode().appendNode('name', 'SSJ') + asNode().appendNode('description', 'Stochastic Simulation in Java') + asNode().appendNode('url', 'http://umontreal-simul.github.io/ssj/') + def n = asNode().appendNode('organization') + n.appendNode('name', 'DIRO of Université de Montréal') + n.appendNode('url', 'http://simul.iro.umontreal.ca') + } + } + } +} + + +// ****************************** DOCS ****************************** + +doxygen { + generate_html true + outputDir file("$buildDir/docs") + + project_name "SSJ" + project_number project.version + + source new File(projectDir, 'src/main/java') + source new File(projectDir, 'src/main/docs/examples/tutorial') + image_path new File(projectDir, 'src/main/docs/images') + + template 'src/main/docs/Doxyfile' +} + + +// ****************************** JNI ****************************** + +task jniCopy(type: Copy) { + ext.destDir = new File(sourceSets.main.output.classesDir, 'jni') + into ext.destDir + duplicatesStrategy 'exclude' + doFirst { + ext.destDir.mkdirs() + } +} + +def java_library_path = files() + +tasks.whenTaskAdded { task -> + // Catch the JNI tasks when they are created. + ['ssjutil', 'randvar'].each { lib -> + + if (project.hasProperty("${lib}.jni.build")) { + + // Add javah dependency to compilation. + def Lib = lib.substring(0, 1).toUpperCase() + lib.substring(1); + if (task.name ==~ /compile.*${Lib}SharedLibrary${Lib}C/) { + task.inputs.files tasks["${lib}Javah"].outputs + } + + // Add linked library to distribution and set library path for tests. + if (task.name ==~ /link.*${Lib}SharedLibrary/) { + + // add JNI library to jar + tasks.jniCopy.from(task) + + // update library path for test task + java_library_path += files(task.outputs.files*.parent.unique()) + project.test.systemProperty 'java.library.path', java_library_path.asPath + project.test.inputs.files task.outputs + } + } + } +} + +[ + ['ssjutil', 'util.GlobalCPUTimeChrono'], + ['randvar', 'randvar.RandUnuran'], +].each { name, pack -> + task "${name}Javah" { + + ext.outputDir = file("$buildDir/javah") + def className = "umontreal.ssj.$pack" + def classFile = className.replaceAll('\\.', '/') + '.class' + def outputFile = "${ext.outputDir}/" + className.replaceAll('\\.', '_') + '.h' + + inputs.file sourceSets.main.output.asFileTree.matching { + include classFile + } + outputs.file outputFile + + doFirst { + ext.outputDir.mkdirs() + } + + doLast { + ant.javah( + class: className, + outputFile: outputFile, + classpath: sourceSets.main.runtimeClasspath.asPath) + } + } +} + +model { + + buildTypes { + release + } + + platforms { + win32 { + architecture 'x86' + operatingSystem 'windows' + } + linux64 { + architecture 'x86_64' + operatingSystem 'linux' + } + } + + toolChains { + visualCpp(VisualCpp) + gcc(Gcc) + clang(Clang) + mingw(Gcc) { // useful for cross-compiling + target 'win32' + eachPlatform { + cCompiler.executable = 'x86_64-w64-mingw32-gcc' + linker.executable = 'x86_64-w64-mingw32-gcc' + } + } + } + + components { + // util JNI + ssjutil(NativeLibrarySpec) { + + if (project.hasProperty('crossCompile')) { // from gradle.properties + targetPlatform 'win32' + targetPlatform 'linux64' + } + + binaries.withType(StaticLibraryBinarySpec) { + buildable = false + } + + binaries.withType(SharedLibraryBinarySpec) { + def javaHome = ant.properties['java.home'] + def javah = project.ssjutilJavah + if (toolChain in Gcc || toolChain in Clang) { + cCompiler.args "-Wall", "-O2", "-I${javah.outputDir}", "-I${javaHome}/../include", "-I${javaHome}/../include/linux" + } + } + } + // randvar JNI + randvar(NativeLibrarySpec) { + + if (project.hasProperty('crossCompile')) { // from gradle.properties + targetPlatform 'win32' + targetPlatform 'linux64' + } + + binaries.withType(StaticLibraryBinarySpec) { + buildable = false + } + + binaries.withType(SharedLibraryBinarySpec) { + def javaHome = ant.properties['java.home'] + def javah = project.randvarJavah + + // resolve UNU.RAN installation path + def unuran_prefix = null; + def propName = "unuran.prefix.${targetPlatform.name}" + if (project.hasProperty(propName)) + unuran_prefix = project.properties[propName]; + else { + logger.info "Property `${propName}` undefined." + if (project.hasProperty('unuran.prefix')) { + logger.info "Property `$propName` undefined; defaulting to the value of `unuran.prefix`" + unuran_prefix = project.properties['unuran.prefix']; + } + } + + if (toolChain in Gcc || toolChain in Clang) { + if (unuran_prefix) { + cCompiler.args "-I${unuran_prefix}/include" + linker.args "-L${unuran_prefix}/lib" + } + cCompiler.args "-Wall", "-O2", "-I${javah.outputDir}", "-I${javaHome}/../include", "-I${javaHome}/../include/linux" + linker.args "-lunuran" + } + } + } + } +} + + +// ****************************** DATA ****************************** + +// generated data files in rng +task dataRng(type: JavaExec) { + + main 'umontreal.ssj.rng.GenF2w32' + classpath sourceSets.main.runtimeClasspath + + def outputFile = file(sourceSets.main.output.classesDir.path + '/' + main.replaceAll('\\.', '/') + '.dat') + ext.outputDir = file(outputFile.parent) + + inputs.file sourceSets.main.output.asFileTree.matching { + include main.replaceAll('\\.', '/') + '.class' + } + outputs.file outputFile + + args outputFile +} + +// generated data files in hups +task dataHups(type: Copy) { + from sourceSets.main.allSource.asFileTree.matching { + include '**/hups/dataSer/**/*.ser' + include '**/hups/dataLFSR/**/*.dat' + } + into sourceSets.main.output.classesDir +} + +// data meta-task +task data(dependsOn: [dataRng, dataHups]) { + description 'Generates the data files.' +} + + +// ****************************** TEST ****************************** + +sourceSets { + test { + java { + srcDir 'src/main/docs/examples' + } + } +} + +test { + dependsOn data, jniCopy + useJUnit() + workingDir = file(sourceSets.test.java.srcDirs[-1].path) + exclude 'ExamplesTest.class' + if (!project.hasProperty('ssjutil.jni.build')) + exclude 'ChronoTest.class' + if (!project.hasProperty('randvar.jni.build')) + exclude 'UnuranTest.class' +} + +task examples(type: Test) { + description 'Runs the example programs.' + outputs.upToDateWhen { false } + dependsOn data, compileTestJava + useJUnit() + workingDir = temporaryDir + include 'ExamplesTest.class' + doFirst { + workingDir.mkdir() + } +} + + +// ****************************** JAR ****************************** + +jar { + dependsOn data, jniCopy + manifest { + attributes( + "Extension-Name": "SSJ", + "Specification-Title": "Stochastic Simulation in Java", + "Specification-Version": version, + "Specification-Vendor": "DIRO of the Université de Montréal", + "Implementation-Title": "SSJ", + "Implementation-Version": version, + "Implementation-Vendor": "DIRO of the Université de Montréal", + "Class-Path": configurations.compile.collect { it.getName() }.join(' ') + ) + } +} + + +// ****************************** DISTRIBUTION ****************************** + +distributions { + main { + contents { + into('lib') { + from(jar) + from(configurations.runtime) + } + into('doc') { + if (project.hasProperty('buildDocs')) { + from(doxygen) { + include 'html/**' + } + } + from('src/main/docs') { + include 'examples/**' + } + from('.') { + include 'README.md' + } + } + // Contents is also included in the JNI section above, + // with `tasks.whenTaskAdded` + } + } +} +distTar.compression = 'bzip2' +distTar.extension = 'tar.bz2' + + +// ****************************** WRAPPER ****************************** + +task wrapper(type: Wrapper) { + gradleVersion = '2.7' +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 000000000..b85f4b52e --- /dev/null +++ b/gradle.properties @@ -0,0 +1,42 @@ +# Property file for SSJ + + +######################################################################## +# Documentation +######################################################################## + +# Uncomment to build documentation +#buildDocs + + +######################################################################## +# Cross-compilation +######################################################################## + +# Uncomment to enable cross-compilation or run gradle with option # "-PcrossCompile" +#crossCompile + + +######################################################################## +# Native Chrono support +######################################################################## + +# Uncomment to enable building the `GlobalCPUTimeChrono` JNI. +#ssjutil.jni.build + + +######################################################################## +# Native UNU.RAN support +######################################################################## + +# Uncomment to enable building the UNU.RAN JNI. +#randvar.jni.build + +# Path to `include/unuran.h` and to `lib/libunuran.a`. +#unuran.prefix = "/opt/unuran" + +# Equivalent to `unuran.prefix` for each target platform when cross-compilation +# is enabled (with the `crossCompile` property). +# Both properties default to `unuran.prefix`. +#unuran.prefix.linux64 = "/opt/unuran" +#unuran.prefix.win32 = "/opt/unuran-mingw32" diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e8c6bf7bb47dff6b81c2cf7a349eb7e912c9fbe2 GIT binary patch literal 53638 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%0AB1q=av0)K=-*!|(RDoglJ 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 000000000..aec99730b --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/main/docs/Doxyfile b/src/main/docs/Doxyfile new file mode 100644 index 000000000..5687931c9 --- /dev/null +++ b/src/main/docs/Doxyfile @@ -0,0 +1,2330 @@ +# Doxyfile 1.8.8 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "Stochastic Simulation in Java" + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = out + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = NO + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = footnote{1}="\latexonly\footnote\{\1\}\endlatexonly\htmlonly[note]\endhtmlonly" + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = YES + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = YES + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = src/main/docs/ssj.bib + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = NO + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. + +INPUT = + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = src/main/docs/examples + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = *.java *.txt + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = YES + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra stylesheet files is of importance (e.g. the last +# stylesheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = src/main/docs/ssj.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = YES + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = src/main/docs/mathjax_config.js + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /