├── .github
└── workflows
│ ├── JMixtComp.yml
│ ├── MixtComp.yml
│ ├── RMixtComp-eigen34.yml
│ ├── RMixtComp.yml
│ └── pyMixtComp.yml
├── .gitignore
├── .gitmodules
├── JMixtComp
├── README.md
├── build.sh
├── clean.sh
├── data
│ ├── 00-SimpleCase
│ │ ├── learn
│ │ │ ├── algo.json
│ │ │ ├── data.json
│ │ │ └── desc.json
│ │ └── predict
│ │ │ ├── algo.json
│ │ │ ├── data.json
│ │ │ └── desc.json
│ ├── 01-FunctionalCase
│ │ ├── learn
│ │ │ ├── algo.json
│ │ │ ├── data.json
│ │ │ └── desc.json
│ │ └── predict
│ │ │ ├── algo.json
│ │ │ ├── data.json
│ │ │ └── desc.json
│ └── 02-RankCase
│ │ ├── learn
│ │ ├── algo.json
│ │ ├── data.json
│ │ └── desc.json
│ │ └── predict
│ │ ├── algo.json
│ │ ├── data.json
│ │ └── desc.json
├── runTest.sh
├── src
│ ├── CMakeLists.txt
│ ├── CMakeLists.txt.in
│ ├── lib
│ │ ├── CMakeLists.txt
│ │ ├── JSONGraph.cpp
│ │ ├── JSONGraph.h
│ │ ├── jmc.cpp
│ │ ├── jsonIO.h
│ │ ├── translateCPPToJSON.h
│ │ └── translateJSONToCPP.h
│ └── utest
│ │ ├── CMakeLists.txt
│ │ └── JSONGraph.cpp
├── utest.sh
└── valgrindRun.sh
├── LICENCE.md
├── MixtComp
├── .clang-format
├── .gitignore
├── README.md
├── TODO.md
├── archive
│ ├── IO
│ │ ├── AlgType.h
│ │ ├── AlgTypeVisitor.cpp
│ │ ├── AlgTypeVisitor.h
│ │ ├── Dummy.cpp
│ │ ├── Dummy.h
│ │ ├── SGraph.cpp
│ │ └── SGraph.h
│ ├── JSONToSGraph.cpp
│ ├── Makefile
│ ├── Makevars
│ ├── SGraphVisJSON.cpp
│ └── json
│ │ ├── AlgTypeVisJSON.cpp
│ │ ├── AlgTypeVisJSON.h
│ │ ├── JSONToSGraph.cpp
│ │ ├── JSONToSGraph.h
│ │ └── SGraphToJSON.h
├── build.sh
├── clean.sh
├── compile_commands.json
├── docs
│ ├── Graph.md
│ ├── SimpleMixture.md
│ ├── algoDesc.md
│ ├── article
│ │ ├── BigStat.pdf
│ │ ├── SEM.pdf
│ │ ├── discriminativeLevelAndSimilarity.pdf
│ │ ├── functionalModel.pdf
│ │ ├── massiccc.pdf
│ │ ├── ordinalModel.pdf
│ │ ├── rankModel.pdf
│ │ └── similarityClass.pdf
│ ├── dataFormat.md
│ ├── dev
│ │ ├── 140101 - proposal
│ │ │ ├── ProjectSpecifications.txt
│ │ │ ├── Proposal.pdf
│ │ │ ├── Proposal.tex
│ │ │ ├── SoftwareDesign
│ │ │ │ ├── architecture.dia
│ │ │ │ └── architecture.png
│ │ │ ├── StatisticalDocumentation
│ │ │ │ ├── DiagonalMixtures.pdf
│ │ │ │ ├── DiagonalMixtures.tex
│ │ │ │ └── mixture-doc.bib
│ │ │ ├── ens-ustl.cls
│ │ │ ├── frameworkspecification.pdf
│ │ │ ├── frameworkspecification.tex
│ │ │ └── legacy
│ │ │ │ └── doxygen
│ │ │ │ └── MixtComp.doxyfile
│ │ ├── 150817 - ProgrammersGuide
│ │ │ ├── doc.pdf
│ │ │ └── doc.tex
│ │ ├── 170616 - mise à jour majeure
│ │ │ ├── 1 - feuille de route.pdf
│ │ │ ├── 2 - avancement modifications.pdf
│ │ │ ├── 3 - tests intermédiaires.pdf
│ │ │ ├── 4 - probabilités observées.pdf
│ │ │ ├── 5 - présentation.pdf
│ │ │ └── 6 - documentation scientifique.pdf
│ │ └── 180308 - Initialization
│ │ │ └── recap.ods
│ ├── developmentEnvironment.md
│ ├── error.md
│ ├── howToAddModel.md
│ ├── howToAddModelInR.md
│ ├── math.md
│ ├── objectOutput.md
│ └── parallelism.md
├── src
│ ├── CMakeLists.txt
│ ├── CMakeLists.txt.in
│ ├── CodeCoverage.cmake
│ ├── archive
│ │ ├── IO
│ │ │ ├── UTestAlgTypeVisitor.cpp
│ │ │ └── UTestSGraph.cpp
│ │ ├── SGraphToJSON.cpp
│ │ ├── model Ordinal
│ │ │ ├── mixt_BOSNode.cpp
│ │ │ ├── mixt_BOSNode.h
│ │ │ ├── mixt_BOSPath.cpp
│ │ │ ├── mixt_BOSPath.h
│ │ │ └── mixt_Ordinal.h
│ │ └── utest Ordinal
│ │ │ ├── UTestBOSNode.cpp
│ │ │ ├── UTestBOSPath.cpp
│ │ │ └── UTestOrdinal.cpp
│ ├── lib
│ │ ├── CMakeLists.txt
│ │ ├── Composer
│ │ │ ├── ClassDataStat.cpp
│ │ │ ├── ClassDataStat.h
│ │ │ ├── ClassSampler.cpp
│ │ │ ├── ClassSampler.h
│ │ │ ├── MixtureComposer.cpp
│ │ │ ├── MixtureComposer.h
│ │ │ ├── ZClassInd.cpp
│ │ │ └── ZClassInd.h
│ │ ├── Data
│ │ │ ├── AugmentedData.cpp
│ │ │ ├── AugmentedData.h
│ │ │ └── ConfIntDataStat.h
│ │ ├── IO
│ │ │ ├── IO.h
│ │ │ ├── IOFunctions.cpp
│ │ │ ├── IOFunctions.h
│ │ │ ├── MisValParser.h
│ │ │ ├── NamedAlgebra.h
│ │ │ ├── SpecialStr.cpp
│ │ │ └── SpecialStr.h
│ │ ├── LinAlg
│ │ │ ├── ConstIterator.h
│ │ │ ├── EigenMatrixBaseAddons.h
│ │ │ ├── Iterator.h
│ │ │ ├── LinAlg.h
│ │ │ ├── Maths.cpp
│ │ │ ├── Maths.h
│ │ │ ├── Typedef.cpp
│ │ │ ├── Typedef.h
│ │ │ ├── names.cpp
│ │ │ └── names.h
│ │ ├── Manager
│ │ │ └── createAllMixtures.h
│ │ ├── MixtComp.h
│ │ ├── Mixture
│ │ │ ├── Functional
│ │ │ │ ├── FuncCSClass.cpp
│ │ │ │ ├── FuncCSClass.h
│ │ │ │ ├── FuncCSComputation.cpp
│ │ │ │ ├── FuncCSComputation.h
│ │ │ │ ├── FuncCSMixture.h
│ │ │ │ ├── FuncCSProblem.h
│ │ │ │ ├── FuncSharedAlphaCSMixture.h
│ │ │ │ ├── FunctionCS.cpp
│ │ │ │ ├── FunctionCS.h
│ │ │ │ ├── FunctionCSParser.cpp
│ │ │ │ └── FunctionCSParser.h
│ │ │ ├── IMixture.h
│ │ │ ├── Rank
│ │ │ │ ├── RankISRClass.cpp
│ │ │ │ ├── RankISRClass.h
│ │ │ │ ├── RankISRIndividual.cpp
│ │ │ │ ├── RankISRIndividual.h
│ │ │ │ ├── RankISRMixture.h
│ │ │ │ ├── RankISRParser.cpp
│ │ │ │ ├── RankISRParser.h
│ │ │ │ ├── RankISRStat.cpp
│ │ │ │ ├── RankISRStat.h
│ │ │ │ ├── RankVal.cpp
│ │ │ │ └── RankVal.h
│ │ │ └── Simple
│ │ │ │ ├── Gaussian
│ │ │ │ ├── Gaussian.cpp
│ │ │ │ ├── Gaussian.h
│ │ │ │ ├── GaussianLikelihood.cpp
│ │ │ │ ├── GaussianLikelihood.h
│ │ │ │ ├── GaussianSampler.cpp
│ │ │ │ └── GaussianSampler.h
│ │ │ │ ├── Multinomial
│ │ │ │ ├── Multinomial.cpp
│ │ │ │ ├── Multinomial.h
│ │ │ │ ├── MultinomialDataStat.cpp
│ │ │ │ ├── MultinomialDataStat.h
│ │ │ │ ├── MultinomialLikelihood.h
│ │ │ │ ├── MultinomialSampler.cpp
│ │ │ │ └── MultinomialSampler.h
│ │ │ │ ├── NegativeBinomial
│ │ │ │ ├── NegativeBinomial.cpp
│ │ │ │ ├── NegativeBinomial.h
│ │ │ │ ├── NegativeBinomialLikelihood.cpp
│ │ │ │ ├── NegativeBinomialLikelihood.h
│ │ │ │ ├── NegativeBinomialSampler.cpp
│ │ │ │ ├── NegativeBinomialSampler.h
│ │ │ │ ├── NegativeBinomialStatistic.cpp
│ │ │ │ └── NegativeBinomialStatistic.h
│ │ │ │ ├── Poisson
│ │ │ │ ├── Poisson.cpp
│ │ │ │ ├── Poisson.h
│ │ │ │ ├── PoissonLikelihood.cpp
│ │ │ │ ├── PoissonLikelihood.h
│ │ │ │ ├── PoissonSampler.cpp
│ │ │ │ ├── PoissonSampler.h
│ │ │ │ ├── PoissonStatistic.cpp
│ │ │ │ └── PoissonStatistic.h
│ │ │ │ ├── SimpleMixture.h
│ │ │ │ └── Weibull
│ │ │ │ ├── Weibull.cpp
│ │ │ │ ├── Weibull.h
│ │ │ │ ├── WeibullLikelihood.cpp
│ │ │ │ ├── WeibullLikelihood.h
│ │ │ │ ├── WeibullSampler.cpp
│ │ │ │ ├── WeibullSampler.h
│ │ │ │ ├── WeibullStatistic.cpp
│ │ │ │ └── WeibullStatistic.h
│ │ ├── Param
│ │ │ └── ConfIntParamStat.h
│ │ ├── Run
│ │ │ ├── Learn.h
│ │ │ └── Predict.h
│ │ ├── Statistic
│ │ │ ├── ExponentialStatistic.cpp
│ │ │ ├── ExponentialStatistic.h
│ │ │ ├── Functions.h
│ │ │ ├── GaussianStatistic.cpp
│ │ │ ├── GaussianStatistic.h
│ │ │ ├── MultinomialStatistic.cpp
│ │ │ ├── MultinomialStatistic.h
│ │ │ ├── RNG.cpp
│ │ │ ├── RNG.h
│ │ │ ├── Statistic.h
│ │ │ ├── UniformIntStatistic.cpp
│ │ │ ├── UniformIntStatistic.h
│ │ │ ├── UniformStatistic.cpp
│ │ │ └── UniformStatistic.h
│ │ ├── Strategy
│ │ │ ├── GibbsStrategy.h
│ │ │ └── SEMStrategy.h
│ │ └── Various
│ │ │ ├── Constants.cpp
│ │ │ ├── Constants.h
│ │ │ ├── Enum.h
│ │ │ ├── Timer.cpp
│ │ │ ├── Timer.h
│ │ │ ├── Various.cpp
│ │ │ └── Various.h
│ └── utest
│ │ ├── CMakeLists.txt
│ │ ├── CMakeLists.txt.in
│ │ ├── Composer
│ │ └── UTestZClassInd.cpp
│ │ ├── Functional
│ │ ├── UTestFuncCSClass.cpp
│ │ ├── UTestFuncCSComputation.cpp
│ │ ├── UTestFuncCSMixture.cpp
│ │ ├── UTestFunctionCS.cpp
│ │ ├── UTestFunctionCSParser.cpp
│ │ └── UTestOptim.cpp
│ │ ├── IO
│ │ └── MisValParser.cpp
│ │ ├── LinAlgStat
│ │ ├── UTestLinAlg.cpp
│ │ ├── UTestMath.cpp
│ │ ├── UTestStatistics.cpp
│ │ └── names.cpp
│ │ ├── Rank
│ │ ├── UTestRankISRClass.cpp
│ │ ├── UTestRankISRIndividual.cpp
│ │ ├── UTestRankISRParser.cpp
│ │ ├── UTestRankISRStat.cpp
│ │ └── UTestRankVal.cpp
│ │ ├── Simple
│ │ ├── UTestGaussian.cpp
│ │ ├── UTestMultinomial.cpp
│ │ ├── UTestNegativeBinomial.cpp
│ │ ├── UTestPoisson.cpp
│ │ └── UTestWeibull.cpp
│ │ ├── Statistic
│ │ ├── UTestGaussianStatistic.cpp
│ │ ├── UTestMultinomialStatistic.cpp
│ │ ├── UTestNegativeBinomialStatistic.cpp
│ │ ├── UTestPoissonStatistic.cpp
│ │ ├── UTestRNG.cpp
│ │ ├── UTestUniformIntStatistic.cpp
│ │ └── UTestWeibullStatistic.cpp
│ │ └── Various
│ │ ├── UTestMisValParser.cpp
│ │ ├── UTestRegex.cpp
│ │ ├── UTestStandardLibrary.cpp
│ │ └── UTestVarious.cpp
├── utest.sh
├── utestCoverage.sh
└── valgrindRun.sh
├── README.md
├── RJMixtComp
├── .Rbuildignore
├── BinaryFiles
├── DESCRIPTION
├── NAMESPACE
├── R
│ ├── JsonMixtComp.R
│ ├── convertJsonToRobject.R
│ ├── convertRobjectToJson.R
│ └── packageDescription.R
├── README.md
├── RJMixtComp.Rproj
├── inst
│ ├── exeMixtComp
│ │ └── empty
│ └── extdata
│ │ ├── data.json
│ │ ├── desc.json
│ │ ├── functionalData.RData
│ │ └── rankData.RData
├── man
│ ├── JMixtCompLearn.Rd
│ └── RJMixtComp-package.Rd
├── tests
│ ├── testthat.R
│ └── testthat
│ │ ├── test.format.R
│ │ ├── test.run.R
│ │ └── test.writingJson.R
└── update.sh
├── RMixtComp
├── .Rbuildignore
├── DESCRIPTION
├── NAMESPACE
├── NEWS
├── R
│ ├── MIXTCOMP_datasets.R
│ ├── MIXTCOMP_formatData.R
│ ├── MIXTCOMP_hierarchical.R
│ ├── MIXTCOMP_methods.R
│ ├── MIXTCOMP_mixtCompLearn.R
│ ├── PLOT_plotCrit.R
│ ├── RMixtComp-package.R
│ ├── miscellaneous.R
│ └── slopeHeuristic.R
├── README.md
├── RMixtComp.Rproj
├── data
│ ├── CanadianWeather.rda
│ ├── prostate.rda
│ ├── simData.rda
│ └── titanic.rda
├── genDataPackage.R
├── man
│ ├── CanadianWeather.Rd
│ ├── RMixtComp-package.Rd
│ ├── extractMixtCompObject.Rd
│ ├── mixtCompLearn.Rd
│ ├── plot.MixtCompLearn.Rd
│ ├── plotCrit.Rd
│ ├── predict.MixtComp.Rd
│ ├── print.MixtCompLearn.Rd
│ ├── prostate.Rd
│ ├── simData.Rd
│ ├── slopeHeuristic.Rd
│ ├── summary.MixtCompLearn.Rd
│ └── titanic.Rd
├── tests
│ ├── testthat.R
│ └── testthat
│ │ ├── test.hierarchical.R
│ │ ├── test.miscellaneous.R
│ │ ├── test.parameterPretreatment.R
│ │ ├── test.run.R
│ │ ├── test.runWrapper.R
│ │ └── test.slopeHeuristic.R
└── vignettes
│ ├── ClusVis.Rmd
│ ├── MixtComp.Rmd
│ ├── dataFormat.Rmd
│ └── mixtCompObject.Rmd
├── RMixtCompHier
├── .Rbuildignore
├── DESCRIPTION
├── NAMESPACE
├── R
│ ├── RMixtCompHier-package.R
│ ├── aggregate_results.r
│ ├── concatenate.R
│ ├── data_processing_for_mixtcomp.r
│ ├── generate_data.r
│ ├── hierarchicalNewMixtComp.R
│ ├── mixtcomp_hierachical_launch.r
│ ├── toolbox.R
│ └── visualisation.r
├── README.md
├── RMixtCompHier.Rproj
├── inst
│ └── exe
│ │ └── JsonMixtComp
├── man
│ ├── RMixtCompHier-package.Rd
│ ├── aggregate_classification_probabilities.Rd
│ ├── aggregate_clusters.Rd
│ ├── aggregate_completed.Rd
│ ├── convertFunctional.Rd
│ ├── createFunctional.Rd
│ ├── getData.Rd
│ ├── launch_Mixtcomp_Hierarchical.Rd
│ ├── launch_Mixtcomp_Hierarchical_predict.Rd
│ ├── linesFunctional.Rd
│ ├── plotFunctional.Rd
│ ├── plot_categorical_hierarchique.Rd
│ ├── plot_functional_hierarchique.Rd
│ ├── plot_proportion_hierarchique.Rd
│ ├── plot_quality_pred_hierarchique.Rd
│ └── prune_hierarchy.Rd
└── tests
│ ├── testthat.R
│ └── testthat
│ ├── test.concatenate.R
│ ├── test.r
│ └── test_hierachical_launch.r
├── RMixtCompIO
├── .Rbuildignore
├── DESCRIPTION
├── LICENSE.note
├── Makefile
├── NAMESPACE
├── NEWS
├── R
│ ├── GENDATA_dataGeneratorNewIO.R
│ ├── GENDATA_functionalGenerator.R
│ ├── GENDATA_functionalInterPolyGenerator.R
│ ├── GENDATA_ordinalGenerator.R
│ ├── GENDATA_rankGenerator.R
│ ├── GENDATA_simpleModelGenerator.R
│ ├── RMixtCompIO-package.R
│ ├── TEST_SimpleNormalTest.R
│ ├── TEST_functional.R
│ ├── TEST_functionalSharedAlpha.R
│ ├── TEST_paramModel.R
│ ├── TEST_zParam.R
│ └── rmcMultiRun.R
├── README.md
├── RMixtCompIO.Rproj
├── build.sh
├── cleanup
├── inst
│ └── COPYRIGHTS
├── man
│ ├── RMixtCompIO-package.Rd
│ └── rmcMultiRun.Rd
├── src
│ ├── CPPToRMatrixType.h
│ ├── CPPToRVectorType.h
│ ├── RGraph.cpp
│ ├── RGraph.h
│ ├── UTest.cpp
│ ├── rmc.cpp
│ ├── test
│ │ └── test.cpp
│ ├── translateCPPToR.h
│ └── translateRToCPP.h
├── tests
│ ├── testthat.R
│ └── testthat
│ │ ├── test.index.R
│ │ ├── test.io.R
│ │ ├── test.multirun.R
│ │ ├── test.run.R
│ │ └── test.simpleRun.R
└── updateLib.py
├── RMixtCompUtilities
├── .Rbuildignore
├── DESCRIPTION
├── NAMESPACE
├── NEWS
├── R
│ ├── CLUSVIS_plotClasses.R
│ ├── MIXTCOMP_formatFunctions.R
│ ├── MIXTCOMP_formatParameter.R
│ ├── MIXTCOMP_getParam.R
│ ├── MIXTCOMP_getter.R
│ ├── MIXTCOMP_methods.R
│ ├── MIXTCOMP_misc.R
│ ├── PLOT_barplot.R
│ ├── PLOT_extractCIbounds.R
│ ├── PLOT_functionalBounds.R
│ ├── PLOT_heatmap.R
│ ├── PLOT_histAndLine.R
│ ├── PLOT_plotConvergence.R
│ ├── PLOT_plotUnivariateBoxplots.R
│ ├── PLOT_plotUnivariateDistributions.R
│ └── RMixtCompUtilities-package.R
├── README.md
├── RMixtCompUtilities.Rproj
├── man
│ ├── RMixtCompUtilities-package.Rd
│ ├── availableModels.Rd
│ ├── completeAlgo.Rd
│ ├── computeDiscrimPowerVar.Rd
│ ├── computeSimilarityVar.Rd
│ ├── convertFunctionalToVector.Rd
│ ├── createAlgo.Rd
│ ├── createFunctional.Rd
│ ├── formatData.Rd
│ ├── formatModel.Rd
│ ├── getBIC.Rd
│ ├── getCompletedData.Rd
│ ├── getEmpiricTik.Rd
│ ├── getMixtureDensity.Rd
│ ├── getParam.Rd
│ ├── getPartition.Rd
│ ├── getType.Rd
│ ├── heatmapClass.Rd
│ ├── heatmapTikSorted.Rd
│ ├── heatmapVar.Rd
│ ├── histMisclassif.Rd
│ ├── plot.MixtComp.Rd
│ ├── plotConvergence.Rd
│ ├── plotDataBoxplot.Rd
│ ├── plotDataCI.Rd
│ ├── plotDiscrimClass.Rd
│ ├── plotDiscrimVar.Rd
│ ├── plotParamConvergence.Rd
│ ├── plotProportion.Rd
│ ├── print.MixtComp.Rd
│ ├── refactorCategorical.Rd
│ └── summary.MixtComp.Rd
└── tests
│ ├── testthat.R
│ └── testthat
│ ├── test.formatFunction.R
│ ├── test.getParam.R
│ ├── test.misc.R
│ └── test.parameterPretreatment.R
├── architecture.md
├── ci.sh
├── graphArchitecture.png
├── graphArchitecture.xcf
├── mcCleanUpdate.sh
├── pyMixtComp
├── README.md
├── build.sh
├── clean.sh
├── python
│ ├── README.md
│ ├── build.sh
│ ├── notebooks
│ │ ├── functional-example.ipynb
│ │ └── prostate-example.ipynb
│ ├── pyMixtComp
│ │ ├── MixtComp.py
│ │ ├── __init__.py
│ │ ├── bridge
│ │ │ ├── bridge.py
│ │ │ ├── convert.py
│ │ │ └── utils.py
│ │ ├── data
│ │ │ ├── __init__.py
│ │ │ ├── canadian_weather.csv
│ │ │ ├── data.py
│ │ │ ├── iris.csv
│ │ │ ├── prostate.csv
│ │ │ └── simulated_data.csv
│ │ ├── plot
│ │ │ ├── __init__.py
│ │ │ ├── barplot.py
│ │ │ ├── functional.py
│ │ │ ├── heatmap.py
│ │ │ ├── univariate_boxplot.py
│ │ │ └── univariate_distribution.py
│ │ └── utils
│ │ │ ├── __init__.py
│ │ │ ├── convert.py
│ │ │ ├── criterion.py
│ │ │ ├── getter.py
│ │ │ └── sample.py
│ ├── pyproject.toml
│ ├── requirements.txt
│ └── tests
│ │ ├── __init__.py
│ │ ├── mixtcomp_output.pickle
│ │ ├── mixtcomp_output_full.pickle
│ │ ├── mixtcomp_output_functional.pickle
│ │ ├── mixtcomp_output_functional_diff_time.pickle
│ │ ├── test_MixtComp.py
│ │ ├── test_bridge_convert.py
│ │ ├── test_bridge_utils.py
│ │ ├── test_data.py
│ │ ├── test_plot.py
│ │ ├── test_utils_convert.py
│ │ ├── test_utils_getter.py
│ │ └── test_utils_sample.py
├── src
│ ├── CMakeLists.txt
│ ├── lib
│ │ ├── CMakeLists.txt
│ │ ├── PyGraph.cpp
│ │ ├── PyGraph.h
│ │ ├── pmc.cpp
│ │ ├── pmc.h
│ │ ├── pyMixtComp.cpp
│ │ ├── pythonIO.h
│ │ ├── translateCPPToPython.h
│ │ └── translatePythonToCPP.h
│ └── utest
│ │ ├── CMakeLists.txt
│ │ └── UTestPyGraph.cpp
└── utest.sh
└── updateVersion.py
/.github/workflows/JMixtComp.yml:
--------------------------------------------------------------------------------
1 | name: JMixtComp C++ Library
2 | on:
3 | push:
4 | branches:
5 | - master
6 | - staging
7 | paths:
8 | - 'MixtComp/**'
9 | - '!MixtComp/docs/**'
10 | - 'JMixtComp/**'
11 | - '.github/workflows/JMixtComp.yml'
12 | - '!**/README.md'
13 | pull_request:
14 | branches:
15 | - master
16 | - staging
17 | paths:
18 | - 'MixtComp/**'
19 | - '!MixtComp/docs/**'
20 | - 'JMixtComp/**'
21 | - '.github/workflows/JMixtComp.yml'
22 | - '!**/README.md'
23 |
24 | jobs:
25 | build:
26 | runs-on: ubuntu-latest
27 |
28 | steps:
29 | - name: Checkout MixtComp
30 | uses: actions/checkout@v4
31 | with:
32 | submodules: 'true'
33 | - name: Install MixtComp dependencies
34 | run: sudo apt-get install cmake libboost-all-dev libeigen3-dev libxml2-dev lcov valgrind
35 | - name: Compile JMixtComp
36 | working-directory: JMixtComp
37 | run: ./build.sh Debug
38 | - name: Test JMixtComp
39 | working-directory: JMixtComp
40 | run: ./utest.sh
41 | - name: Run valgrind
42 | working-directory: JMixtComp
43 | run: ./valgrindRun.sh
--------------------------------------------------------------------------------
/.github/workflows/MixtComp.yml:
--------------------------------------------------------------------------------
1 | name: MixtComp C++ Library
2 | on:
3 | push:
4 | branches:
5 | - master
6 | - staging
7 | paths:
8 | - 'MixtComp/**'
9 | - '!MixtComp/docs/**'
10 | - '.github/workflows/MixtComp.yml'
11 | - '!**/README.md'
12 | pull_request:
13 | branches:
14 | - master
15 | - staging
16 | paths:
17 | - 'MixtComp/**'
18 | - '!MixtComp/docs/**'
19 | - '.github/workflows/MixtComp.yml'
20 | - '!**/README.md'
21 |
22 | jobs:
23 | build:
24 | runs-on: ubuntu-latest
25 |
26 | steps:
27 | - name: Checkout MixtComp
28 | uses: actions/checkout@v4
29 | with:
30 | submodules: 'true'
31 | - name: Install MixtComp dependencies
32 | run: sudo apt-get install cmake libboost-all-dev libeigen3-dev libxml2-dev lcov valgrind
33 | - name: Compile MixtComp
34 | working-directory: MixtComp
35 | run: ./build.sh Debug
36 | - name: Test MixtComp
37 | working-directory: MixtComp
38 | run: ./utest.sh
39 | - name: Run valgrind
40 | working-directory: MixtComp
41 | run: ./valgrindRun.sh
42 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .svn
2 | .DS_store
3 | .recommenders
4 | *.tar.gz
5 | .project
6 | .vscode
7 | .metadata/*
8 | /.metadata/
9 | RemoteSystemsTempFiles
10 |
11 | # compiled objects
12 | *.o
13 | *.so
14 | *.a
15 | *.d
16 |
17 | # build
18 | report*.xml
19 | build/
20 | MixtComp/log
21 |
22 | JMixtComp/data/*/learn/resLearn.json
23 | JMixtComp/data/*/predict/resPredict.json
24 | RJMixtComp/inst/exeMixtComp/jmc
25 | !RJMixtComp/inst/extdata/*.json
26 |
27 | # RMixtCompIO
28 | RMixtCompIO/R/RcppExports.R
29 | RMixtCompIO/src/RcppExports.cpp
30 | RMixtCompIO/src/Makevars
31 | RMixtCompIO/src/lib
32 | RMixtCompIO/src/test/test
33 | RMixtCompIO/src/libOFiles
34 |
35 | # latex
36 | *.aux
37 | *.bcf
38 | *.out
39 | *.toc
40 | *.log
41 | *.run.xml
42 | *.synctex.gz
43 |
44 | # R
45 | .Rproj.user
46 | .Rhistory
47 | .RData
48 | *.Rcheck
49 |
50 | # python
51 | __pycache__
52 | *.egg-info
53 | dist/
54 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "RMixtCompIO/src/optim"]
2 | path = RMixtCompIO/src/optim
3 | url = https://github.com/modal-inria/CppNumericalSolvers
4 |
--------------------------------------------------------------------------------
/JMixtComp/README.md:
--------------------------------------------------------------------------------
1 | # JMixtComp
2 |
3 | ## Compile JMixtComp
4 |
5 | Run `./build.sh` to compile MixtComp in Debug mode. Run `./build.sh Release` or `./build.sh Coverage` to build in release mode or for code coverage. The build is performed in a build folder.
6 | Run `./utest.sh` to run unit tests .
7 | To clean the build folder, run `./clean.sh`.
8 |
9 | ## Executables
10 |
11 | After compiling, *jmc* executables can be found at the following location: `build/lib/jmc`. It allows to run MixtComp in command line with json as format for input and output files.
12 |
13 | ## Running jmc
14 |
15 | In learning mode, *jmc* requires four parameters: three input files (algo, data and desc, see [Data Format](../MixtComp/docs/dataFormat.md)) and the name of the output file. To have more information about the output format, read the associated [documentation](../MixtComp/docs/objectOutput.md).
16 |
17 | ```bash
18 | jmc algo.json data.json desc.json resLearn.json
19 | ```
20 |
21 | In predict mode, *jmc* requires five parameters: four input files (algo, data and desc, see [Data Format](../MixtComp/docs/dataFormat.md) and a result of a learning run of *jmc*) and the name of the output file.
22 |
23 | ```bash
24 | jmc algo.json data.json desc.json resLearn.json resPredict.json
25 | ```
26 |
27 | ## Examples
28 |
29 | Datasets can be found in the [data folder](data) and can be used with jmc by running the [runTest.sh](runTest.sh) file.
30 |
--------------------------------------------------------------------------------
/JMixtComp/build.sh:
--------------------------------------------------------------------------------
1 | mkdir -p build
2 | cd build
3 | if [ $# -eq 0 ]
4 | then
5 | cmake -DCMAKE_BUILD_TYPE=Debug ../src
6 | else
7 | cmake -DCMAKE_BUILD_TYPE=$1 ../src
8 | fi
9 | cmake --build .
--------------------------------------------------------------------------------
/JMixtComp/clean.sh:
--------------------------------------------------------------------------------
1 | find build ! -name 'empty' -type f -exec rm -f {} +
2 | find build ! -name '.' -type d -exec rm -r -f {} +
--------------------------------------------------------------------------------
/JMixtComp/data/00-SimpleCase/learn/algo.json:
--------------------------------------------------------------------------------
1 | {
2 | "nClass": 2,
3 | "nInd": 200,
4 | "nbBurnInIter": 100,
5 | "nbIter": 100,
6 | "nbGibbsBurnInIter": 100,
7 | "nbGibbsIter": 100,
8 | "nInitPerClass": 20,
9 | "nSemTry": 10,
10 | "confidenceLevel": 0.95,
11 | "ratioStableCriterion": 0.9,
12 | "nStableCriterion": 7,
13 | "mode": "learn",
14 | "notes": "You can add any note you wish in non mandatory fields like this one (notes). They will be copied to the output."
15 | }
16 |
--------------------------------------------------------------------------------
/JMixtComp/data/00-SimpleCase/learn/desc.json:
--------------------------------------------------------------------------------
1 | {
2 | "Gaussian1": {
3 | "type": "Gaussian",
4 | "paramStr": "dummyStrTestGaussian"
5 | },
6 | "Poisson1": {
7 | "type": "Poisson",
8 | "paramStr": "dummyStrTestPoisson"
9 | },
10 | "Categorical1": {
11 | "type": "Multinomial",
12 | "paramStr": ""
13 | },
14 | "nBinom1": {
15 | "type": "NegativeBinomial",
16 | "paramStr": ""
17 | },
18 | "Weibull1": {
19 | "type": "Weibull",
20 | "paramStr": ""
21 | }
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/JMixtComp/data/00-SimpleCase/predict/algo.json:
--------------------------------------------------------------------------------
1 | {
2 | "nClass": 2,
3 | "nInd": 2,
4 | "nbBurnInIter": 100,
5 | "nbIter": 100,
6 | "nbGibbsBurnInIter": 100,
7 | "nbGibbsIter": 100,
8 | "nInitPerClass": 2,
9 | "nSemTry": 10,
10 | "confidenceLevel": 0.95,
11 | "mode": "predict"
12 | }
13 |
--------------------------------------------------------------------------------
/JMixtComp/data/00-SimpleCase/predict/data.json:
--------------------------------------------------------------------------------
1 | {
2 | "Gaussian1": ["1.0", "10.0", "[4.98086:+inf]", "2.28"],
3 | "Poisson1": ["?", "12", "22", "5"],
4 | "Categorical1": ["1", "?", "2", "1"],
5 | "Weibull1": ["1.5", "10.5", "1.5019", "?"],
6 | "nBinom1": ["3", "11", "?", "4"]
7 | }
8 |
--------------------------------------------------------------------------------
/JMixtComp/data/00-SimpleCase/predict/desc.json:
--------------------------------------------------------------------------------
1 | {
2 | "Gaussian1": {
3 | "type": "Gaussian",
4 | "paramStr": ""
5 | },
6 | "Poisson1": {
7 | "type": "Poisson",
8 | "paramStr": ""
9 | },
10 | "Categorical1": {
11 | "type": "Multinomial",
12 | "paramStr": ""
13 | },
14 | "nBinom1": {
15 | "type": "NegativeBinomial",
16 | "paramStr": ""
17 | },
18 | "Weibull1": {
19 | "type": "Weibull",
20 | "paramStr": ""
21 | }
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/JMixtComp/data/01-FunctionalCase/learn/algo.json:
--------------------------------------------------------------------------------
1 | {
2 | "nClass": 2,
3 | "nInd": 200,
4 | "nbBurnInIter": 50,
5 | "nbIter": 50,
6 | "nbGibbsBurnInIter": 50,
7 | "nbGibbsIter": 50,
8 | "nInitPerClass": 50,
9 | "nSemTry": 20,
10 | "confidenceLevel": 0.95,
11 | "ratioStableCriterion": 0.95,
12 | "nStableCriterion": 10,
13 | "mode": "learn"
14 | }
15 |
--------------------------------------------------------------------------------
/JMixtComp/data/01-FunctionalCase/learn/desc.json:
--------------------------------------------------------------------------------
1 | {
2 | "z_class": {
3 | "type": "LatentClass",
4 | "paramStr": ""
5 | },
6 | "Functional1": {
7 | "type": "Func_CS",
8 | "paramStr": "nSub: 2, nCoeff: 2"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/JMixtComp/data/01-FunctionalCase/predict/algo.json:
--------------------------------------------------------------------------------
1 | {
2 | "nClass": 2,
3 | "nInd": 200,
4 | "nbBurnInIter": 50,
5 | "nbIter": 50,
6 | "nbGibbsBurnInIter": 50,
7 | "nbGibbsIter": 50,
8 | "nInitPerClass": 50,
9 | "nSemTry": 20,
10 | "confidenceLevel": 0.95,
11 | "ratioStableCriterion": 0.95,
12 | "nStableCriterion": 10,
13 | "mode": "predict"
14 | }
15 |
--------------------------------------------------------------------------------
/JMixtComp/data/01-FunctionalCase/predict/desc.json:
--------------------------------------------------------------------------------
1 | {
2 | "z_class": {
3 | "type": "LatentClass",
4 | "paramStr": ""
5 | },
6 | "Functional1": {
7 | "type": "Func_CS",
8 | "paramStr": "nSub: 2, nCoeff: 2"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/JMixtComp/data/02-RankCase/learn/algo.json:
--------------------------------------------------------------------------------
1 | {
2 | "nClass": 2,
3 | "nInd": 200,
4 | "nbBurnInIter": 50,
5 | "nbIter": 50,
6 | "nbGibbsBurnInIter": 50,
7 | "nbGibbsIter": 50,
8 | "nInitPerClass": 50,
9 | "nSemTry": 20,
10 | "confidenceLevel": 0.95,
11 | "ratioStableCriterion": 0.95,
12 | "nStableCriterion": 10,
13 | "mode": "learn"
14 | }
15 |
--------------------------------------------------------------------------------
/JMixtComp/data/02-RankCase/learn/desc.json:
--------------------------------------------------------------------------------
1 | {
2 | "z_class": {
3 | "type": "LatentClass",
4 | "paramStr": ""
5 | },
6 | "Rank1": {
7 | "type": "Rank_ISR",
8 | "paramStr": ""
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/JMixtComp/data/02-RankCase/predict/algo.json:
--------------------------------------------------------------------------------
1 | {
2 | "nClass": 2,
3 | "nInd": 200,
4 | "nbBurnInIter": 50,
5 | "nbIter": 50,
6 | "nbGibbsBurnInIter": 50,
7 | "nbGibbsIter": 50,
8 | "nInitPerClass": 50,
9 | "nSemTry": 20,
10 | "confidenceLevel": 0.95,
11 | "ratioStableCriterion": 0.95,
12 | "nStableCriterion": 10,
13 | "mode": "predict"
14 | }
15 |
--------------------------------------------------------------------------------
/JMixtComp/data/02-RankCase/predict/desc.json:
--------------------------------------------------------------------------------
1 | {
2 | "z_class": {
3 | "type": "LatentClass",
4 | "paramStr": ""
5 | },
6 | "Rank1": {
7 | "type": "Rank_ISR",
8 | "paramStr": ""
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/JMixtComp/runTest.sh:
--------------------------------------------------------------------------------
1 | build/lib/jmc data/00-SimpleCase/learn/algo.json data/00-SimpleCase/learn/data.json data/00-SimpleCase/learn/desc.json data/00-SimpleCase/learn/resLearn.json
2 | build/lib/jmc data/00-SimpleCase/predict/algo.json data/00-SimpleCase/predict/data.json data/00-SimpleCase/predict/desc.json data/00-SimpleCase/learn/resLearn.json data/00-SimpleCase/predict/resPredict.json
3 |
4 | build/lib/jmc data/01-FunctionalCase/learn/algo.json data/01-FunctionalCase/learn/data.json data/01-FunctionalCase/learn/desc.json data/01-FunctionalCase/learn/resLearn.json
5 | build/lib/jmc data/01-FunctionalCase/predict/algo.json data/01-FunctionalCase/predict/data.json data/01-FunctionalCase/predict/desc.json data/01-FunctionalCase/learn/resLearn.json data/01-FunctionalCase/predict/resPredict.json
6 |
7 | build/lib/jmc data/02-RankCase/learn/algo.json data/02-RankCase/learn/data.json data/02-RankCase/learn/desc.json data/02-RankCase/learn/resLearn.json
8 | build/lib/jmc data/02-RankCase/predict/algo.json data/02-RankCase/predict/data.json data/02-RankCase/predict/desc.json data/02-RankCase/learn/resLearn.json data/02-RankCase/predict/resPredict.json
9 |
--------------------------------------------------------------------------------
/JMixtComp/src/CMakeLists.txt:
--------------------------------------------------------------------------------
1 |
2 | cmake_minimum_required(VERSION 3.8)
3 |
4 | project(JMixtComp)
5 |
6 | # C++ standard
7 | set(CMAKE_CXX_STANDARD 17)
8 | set(CMAKE_CXX_STANDARD_REQUIRED ON)
9 |
10 | # Compile MixtComp
11 | add_subdirectory(../../MixtComp/src MixtComp)
12 |
13 | # add MixtComp's include directories and definitions
14 | include_directories(${MixtComp_INCLUDE_DIRS})
15 | add_definitions(${MixtComp_DEFINITIONS})
16 |
17 |
18 | # json
19 | include(CMakeLists.txt.in)
20 | include_directories(${CMAKE_BINARY_DIR}/json-src/single_include/nlohmann) # nlohmann is a header-only library
21 |
22 |
23 | # compilation flags
24 | include_directories("${CMAKE_CURRENT_SOURCE_DIR}/lib/")
25 | set(CMAKE_POSITION_INDEPENDENT_CODE ON) # to enable PIC on platforms that need it
26 |
27 | # add json interface code
28 | add_subdirectory(lib)
29 |
30 | # add test
31 | add_subdirectory(utest EXCLUDE_FROM_ALL)
32 |
--------------------------------------------------------------------------------
/JMixtComp/src/CMakeLists.txt.in:
--------------------------------------------------------------------------------
1 |
2 | include(ExternalProject)
3 |
4 | ExternalProject_Add(json
5 | GIT_REPOSITORY https://github.com/nlohmann/json.git
6 | GIT_TAG master
7 | SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/json-src"
8 | BINARY_DIR ""
9 | CONFIGURE_COMMAND ""
10 | BUILD_COMMAND ""
11 | INSTALL_COMMAND ""
12 | TEST_COMMAND ""
13 | )
14 |
15 |
--------------------------------------------------------------------------------
/JMixtComp/src/lib/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # long file list initially generated with "find . -type f -follow -print"
2 | # with "./" prefix deleted
3 |
4 |
5 | add_library(JMixtComp
6 | JSONGraph.cpp
7 | JSONGraph.h
8 | jsonIO.h
9 | translateJSONToCPP.h
10 | translateCPPToJSON.h
11 | )
12 |
13 | add_executable(jmc
14 | jmc.cpp
15 | )
16 |
17 | target_link_libraries(jmc
18 | MixtComp
19 | JMixtComp
20 | ${Boost_LIBRARIES}
21 | )
22 |
--------------------------------------------------------------------------------
/JMixtComp/src/lib/jsonIO.h:
--------------------------------------------------------------------------------
1 | /* MixtComp version 4 - july 2019
2 | * Copyright (C) Inria - Université de Lille - CNRS*/
3 |
4 | /* This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU Affero General Public License as
6 | * published by the Free Software Foundation, either version 3 of the
7 | * License, or (at your option) any later version.
8 | * This program is distributed in the hope that it will be useful,
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | * GNU Affero General Public License for more details.
12 | *
13 | * You should have received a copy of the GNU Affero General Public License
14 | * along with this program. If not, see
15 | **/
16 |
17 | /*
18 | * Project: MixtComp
19 | * Created on: Aug 6, 2018
20 | * Authors: Vincent KUBICKI
21 | **/
22 |
23 | #ifndef JSON_JSONIO_H
24 | #define JSON_JSONIO_H
25 |
26 | #include "JSONGraph.h"
27 | #include "translateCPPToJSON.h"
28 | #include "translateJSONToCPP.h"
29 |
30 | #endif
31 |
--------------------------------------------------------------------------------
/JMixtComp/src/utest/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # google test project is built by MixtComp
2 |
3 | add_executable(runUtestJMC
4 | JSONGraph.cpp
5 | )
6 |
7 | target_link_libraries(runUtestJMC
8 | gtest_main
9 | JMixtComp
10 | MixtComp
11 | )
12 |
--------------------------------------------------------------------------------
/JMixtComp/utest.sh:
--------------------------------------------------------------------------------
1 | cd build/ && make runUtestJMC && cd ..
2 | MC_DETERMINISTIC=T build/utest/runUtestJMC --gtest_output=xml:reportJMC.xml
3 |
--------------------------------------------------------------------------------
/JMixtComp/valgrindRun.sh:
--------------------------------------------------------------------------------
1 | MC_DETERMINISTIC=T valgrind --xml=yes --xml-file=valgrindReportJMC.xml build/utest/runUtestJMC --gtest_output=xml:uTestReportJMC.xml
2 |
--------------------------------------------------------------------------------
/LICENCE.md:
--------------------------------------------------------------------------------
1 | # Licence
2 |
3 | ## MixtComp
4 |
5 | MixtComp is distributed under the [AGPL 3.0 licence](https://www.gnu.org/licenses/agpl-3.0.en.html). It uses the following libraries:
6 |
7 | - [Eigen](http://eigen.tuxfamily.org) distributed under [MPL2 licence](https://www.mozilla.org/en-US/MPL/2.0/)
8 | - [Boost](https://www.boost.org/) distributed under [Boost licence](https://www.boost.org/users/license.html)
9 | - [CppOptimizationLibrary](https://github.com/PatWie/CppNumericalSolvers) distributed under [MIT licence](https://github.com/PatWie/CppNumericalSolvers/blob/master/LICENSE).
10 |
11 | Its JSON interface uses the [nlohmann/json library](https://github.com/nlohmann/json) under [MIT licence](https://github.com/nlohmann/json#license).
12 |
13 | MixtComp is tested using [GoogleTest](https://github.com/google/googletest/) distributed under [BSD-3 licence](https://github.com/google/googletest/blob/main/LICENSE).
14 | Code coverage is done using the [CodeCoverage](https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake) module under [Boost licence](https://github.com/bilke/cmake-modules/blob/master/LICENSE_1_0.txt).
15 |
16 | ## RMixtCompIO
17 |
18 | RMixtCompIO is distributed under the [AGPL 3.0 licence](https://www.gnu.org/licenses/agpl-3.0.en.html). It uses [Rcpp](http://www.rcpp.org/) distributed under [GPL 2.0 licence](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) and [GPL 3.0 licence](https://www.gnu.org/licenses/gpl-3.0.en.html).
19 |
20 | ## RMixtCompUtilities
21 |
22 | RMixtCompUtilities is distributed under the [AGPL 3.0 licence](https://www.gnu.org/licenses/agpl-3.0.en.html).
23 |
24 | ## RMixtComp
25 |
26 | RMixtComp is distributed under the [AGPL 3.0 licence](https://www.gnu.org/licenses/agpl-3.0.en.html).
27 |
28 | ## RJMixtComp
29 |
30 | RJMixtComp is distributed under the [AGPL 3.0 licence](https://www.gnu.org/licenses/agpl-3.0.en.html).
31 |
32 | ## RMixtCompHier
33 |
34 | RMixtCompHier is distributed under the [AGPL 3.0 licence](https://www.gnu.org/licenses/agpl-3.0.en.html).
35 |
--------------------------------------------------------------------------------
/MixtComp/.clang-format:
--------------------------------------------------------------------------------
1 | # https://clang.llvm.org/docs/ClangFormatStyleOptions.html
2 | # https://llvm.org/docs/CodingStandards.html
3 |
4 | BasedOnStyle: LLVM
5 |
6 | AccessModifierOffset: -4
7 | AllowShortIfStatementsOnASingleLine: false
8 | ColumnLimit: 0
9 | FixNamespaceComments: false
10 | IndentCaseLabels: false
11 | IndentWidth: 4
12 | NamespaceIndentation: All
13 | TabWidth: 4
14 | UseTab: Always
15 |
--------------------------------------------------------------------------------
/MixtComp/.gitignore:
--------------------------------------------------------------------------------
1 | .cache
2 |
--------------------------------------------------------------------------------
/MixtComp/archive/IO/AlgType.h:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: August 3, 2018
7 | * Authors: Vincent KUBICKI
8 | **/
9 |
10 | #ifndef ALGTYPE_H
11 | #define ALGTYPE_H
12 |
13 | #include "boost/variant.hpp"
14 | #include
15 | #include "NamedAlgebra.h"
16 |
17 | namespace mixt {
18 |
19 | /**
20 | * boost::variant provides the equivalent of algebraic type. The main advantage vs polymorphism is that the syntax is lighter. The serialization graph is only used to carry the data from the depths of the model to
21 | * the IO module. Therefore using polymorphism would be overkill.
22 | * - Index
23 | * - Real
24 | * - std::string
25 | * - Matrix
26 | */
27 | typedef typename boost::variant, NamedVector, NamedVector, NamedVector, NamedMatrix> AlgType;
28 |
29 | }
30 |
31 | #endif
32 |
--------------------------------------------------------------------------------
/MixtComp/archive/IO/AlgTypeVisitor.cpp:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: August 17, 2018
7 | * Authors: Vincent KUBICKI
8 | **/
9 |
10 | #include "AlgTypeVisitor.h"
11 |
12 | #include
13 |
14 | namespace mixt {
15 |
16 | template<>
17 | Index translation(const Index& in) {
18 | return in;
19 | }
20 |
21 | template<>
22 | Index translation(const Integer& in) {
23 | return in;
24 | }
25 |
26 | template<>
27 | Real translation(const Index& in) {
28 | return in;
29 | }
30 |
31 | template<>
32 | Real translation(const Real& in) {
33 | return in;
34 | }
35 |
36 | template<>
37 | std::string translation(const std::string& in) {
38 | return in;
39 | }
40 |
41 | template<>
42 | std::vector translation, std::vector>(const std::vector& in) {
43 | return in;
44 | }
45 |
46 | template<>
47 | NamedVector translation, NamedVector>(const NamedVector& in) {
48 | return in;
49 | }
50 |
51 | template<>
52 | NamedVector translation, NamedVector>(const NamedVector& in) {
53 | return in;
54 | }
55 |
56 | template<>
57 | NamedVector translation, NamedVector>(const NamedVector& in) {
58 | return in;
59 | }
60 |
61 | template<>
62 | NamedMatrix translation, NamedMatrix>(const NamedMatrix& in) {
63 | return in;
64 | }
65 |
66 | }
67 |
--------------------------------------------------------------------------------
/MixtComp/archive/IO/SGraph.cpp:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: November 14, 2014
7 | * Author: Vincent KUBICKI
8 | **/
9 |
10 | #include "SGraph.h"
11 |
12 | namespace mixt {
13 |
14 | void SGraph::add_payload(const std::string& name, const AlgType& data) {
15 | std::pair::iterator, bool> res = payload_.insert(std::pair(name, data));
16 | if (!res.second) throw std::string("Try to add duplicate key ") + name;
17 | }
18 |
19 | void SGraph::add_child(const std::string& name, const SGraph& data) {
20 | std::pair::iterator, bool> res = children_.insert(std::pair(name, data));
21 | if (!res.second) throw std::string("Try to add duplicate key ") + name;
22 | }
23 |
24 | bool SGraph::exist_payload(const std::string& name) const {
25 | std::map::const_iterator it = payload_.find(name);
26 | return it != payload_.end();
27 | }
28 |
29 | bool SGraph::exist_child(const std::string& name) const {
30 | std::map::const_iterator it = children_.find(name);
31 | return it != children_.end();
32 | }
33 |
34 | void SGraph::listElements() const {
35 | std::cout << "payload:" << std::endl;
36 | for (std::map::const_iterator it = payload_.begin(), itEnd = payload_.end(); it != itEnd; ++it) {
37 | std::cout << "\t" << it->first << std::endl;
38 | }
39 |
40 | std::cout << "children:" << std::endl;
41 | for (std::map::const_iterator it = children_.begin(), itEnd = children_.end(); it != itEnd; ++it) {
42 | std::cout << "\t" << it->first << std::endl;
43 | }
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/MixtComp/archive/JSONToSGraph.cpp:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: August 7, 2018
7 | * Author: Vincent KUBICKI
8 | **/
9 |
10 | #include "gtest/gtest.h"
11 | #include "mixt_MixtComp.h"
12 | #include "jsonIO.h"
13 |
14 | using namespace mixt;
15 |
16 | TEST(JSONToSGraph, basic) {
17 | nlohmann::json expectedJSON = R"({"paramStr":"A parameter","varA":{"A nested real":12.0,"A nested string":"Hello World !"}})"_json;
18 |
19 | nlohmann::json computedJSON = SGraphToJSON(JSONToSGraph(expectedJSON));
20 |
21 | ASSERT_EQ(expectedJSON, computedJSON);
22 | }
23 |
24 | TEST(JSONToSGraph, VectorReal) {
25 | nlohmann::json expectedJSON = R"-({"A named vector":{"ctype":"Vector","data":[1.0,2.0,3.0],"dtype":"Real","nrow":3,"rowNames":["riri","fifi","loulou"]}})-"_json;
26 |
27 | nlohmann::json computedJSON = SGraphToJSON(JSONToSGraph(expectedJSON));
28 |
29 | ASSERT_EQ(expectedJSON, computedJSON);
30 | }
31 |
32 | TEST(JSONToSGraph, MatrixReal) {
33 | nlohmann::json expectedJSON =
34 | R"-({"A named matrix":{"colNames":["1","2","3"],"ctype":"Matrix","data":[[1.0,2.0,3.0],[4.0,5.0,6.0],[7.0,8.0,9.0]],"dtype":"Real","ncol":3,"nrow":3,"rowNames":["A","B","C"]}})-"_json;
35 |
36 | nlohmann::json computedJSON = SGraphToJSON(JSONToSGraph(expectedJSON));
37 |
38 | ASSERT_EQ(expectedJSON, computedJSON);
39 | }
40 |
41 | TEST(JSONToSGraph, VectorOfString) {
42 | nlohmann::json expectedJSON = R"-({"var1":["12.0","-35.90","205.72"]})-"_json;
43 |
44 | nlohmann::json computedJSON = SGraphToJSON(JSONToSGraph(expectedJSON));
45 |
46 | ASSERT_EQ(expectedJSON, computedJSON);
47 | }
48 |
--------------------------------------------------------------------------------
/MixtComp/archive/Makevars:
--------------------------------------------------------------------------------
1 | # flags to be used when MixtComp is not built through R
2 |
3 | # CXXFLAGS = -O0 -g -DMC_DEBUG_NEW -Wall -mtune=core2
4 | # CXXFLAGS = -O3 -DMC_DEBUG_NEW -Wall -mtune=core2
5 |
6 | # CXX = g++ -m64
7 |
8 | CXX = g++
9 | # CXX = clang++
10 | CXXFLAGS = -O2 -g -Wall -DMC_VERBOSE -DMC_TIMERVERBOSE
--------------------------------------------------------------------------------
/MixtComp/archive/json/AlgTypeVisJSON.h:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: Aug 6, 2018
7 | * Author: Vincent KUBICKI
8 | **/
9 |
10 | #ifndef JSON_ALGTYPEVISJSON_H
11 | #define JSON_ALGTYPEVISJSON_H
12 |
13 | #include "json.hpp"
14 | #include "boost/variant.hpp"
15 |
16 | #include
17 |
18 | /**
19 | * Visitor for boost::variant, to perform the correct operation on every payload element in a SGraph
20 | */
21 | namespace mixt {
22 |
23 | class AlgTypeVisJSON: public boost::static_visitor<> {
24 | public:
25 | AlgTypeVisJSON(nlohmann::json& j, const std::string& payloadName);
26 |
27 | void operator()(Index i) const;
28 |
29 | void operator()(Integer i) const;
30 |
31 | void operator()(const Real r) const;
32 |
33 | void operator()(const std::string& str) const;
34 |
35 | void operator()(const std::vector& vec) const;
36 |
37 | void operator()(const NamedVector& vec) const;
38 |
39 | void operator()(const NamedVector& vec) const;
40 |
41 | void operator()(const NamedVector& vec) const;
42 |
43 | void operator()(const NamedMatrix& mat) const;
44 |
45 | private:
46 | nlohmann::json& j_;
47 | const std::string& payloadName_;
48 | };
49 |
50 | }
51 |
52 | #endif
53 |
--------------------------------------------------------------------------------
/MixtComp/archive/json/JSONToSGraph.h:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: Aug 3, 2018
7 | * Author: Vincent KUBICKI
8 | **/
9 |
10 | #ifndef JSONTOSGRAPH_H
11 | #define JSONTOSGRAPH_H
12 |
13 | #include "json.hpp"
14 |
15 | #include
16 |
17 | namespace mixt {
18 |
19 | SGraph JSONToSGraph(const nlohmann::json& j);
20 |
21 | }
22 |
23 | #endif
24 |
--------------------------------------------------------------------------------
/MixtComp/archive/json/SGraphToJSON.h:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: Aug 3, 2018
7 | * Author: Vincent KUBICKI
8 | **/
9 |
10 | #ifndef SGRAPHTOJSON_H
11 | #define SGRAPHTOJSON_H
12 |
13 | #include "json.hpp"
14 |
15 | #include
16 |
17 | namespace mixt {
18 |
19 | /**
20 | * nlohmann::json is recursive, and mixt::SGraph is recursive too. Translation should be easy.
21 | */
22 | nlohmann::json SGraphToJSON(const SGraph& graph);
23 |
24 | }
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/MixtComp/build.sh:
--------------------------------------------------------------------------------
1 | mkdir -p build
2 | cd build
3 | if [ $# -eq 0 ]
4 | then
5 | cmake -DCMAKE_BUILD_TYPE=Debug ../src
6 | else
7 | cmake -DCMAKE_BUILD_TYPE=$1 ../src
8 | fi
9 | cmake --build .
--------------------------------------------------------------------------------
/MixtComp/clean.sh:
--------------------------------------------------------------------------------
1 | find build ! -name 'empty' -type f -exec rm -f {} +
2 | find build ! -name '.' -type d -exec rm -r -f {} +
--------------------------------------------------------------------------------
/MixtComp/compile_commands.json:
--------------------------------------------------------------------------------
1 | build/compile_commands.json
--------------------------------------------------------------------------------
/MixtComp/docs/article/BigStat.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/article/BigStat.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/article/SEM.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/article/SEM.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/article/discriminativeLevelAndSimilarity.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/article/discriminativeLevelAndSimilarity.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/article/functionalModel.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/article/functionalModel.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/article/massiccc.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/article/massiccc.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/article/ordinalModel.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/article/ordinalModel.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/article/rankModel.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/article/rankModel.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/article/similarityClass.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/article/similarityClass.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/140101 - proposal/ProjectSpecifications.txt:
--------------------------------------------------------------------------------
1 | This file contains all the necessary specifications like naming conventions and include patterns.
2 |
3 |
4 |
--------------------------------------------------------------------------------
/MixtComp/docs/dev/140101 - proposal/Proposal.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/140101 - proposal/Proposal.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/140101 - proposal/SoftwareDesign/architecture.dia:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/140101 - proposal/SoftwareDesign/architecture.dia
--------------------------------------------------------------------------------
/MixtComp/docs/dev/140101 - proposal/SoftwareDesign/architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/140101 - proposal/SoftwareDesign/architecture.png
--------------------------------------------------------------------------------
/MixtComp/docs/dev/140101 - proposal/StatisticalDocumentation/DiagonalMixtures.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/140101 - proposal/StatisticalDocumentation/DiagonalMixtures.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/140101 - proposal/frameworkspecification.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/140101 - proposal/frameworkspecification.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/150817 - ProgrammersGuide/doc.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/150817 - ProgrammersGuide/doc.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/170616 - mise à jour majeure/1 - feuille de route.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/170616 - mise à jour majeure/1 - feuille de route.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/170616 - mise à jour majeure/2 - avancement modifications.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/170616 - mise à jour majeure/2 - avancement modifications.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/170616 - mise à jour majeure/3 - tests intermédiaires.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/170616 - mise à jour majeure/3 - tests intermédiaires.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/170616 - mise à jour majeure/4 - probabilités observées.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/170616 - mise à jour majeure/4 - probabilités observées.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/170616 - mise à jour majeure/5 - présentation.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/170616 - mise à jour majeure/5 - présentation.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/170616 - mise à jour majeure/6 - documentation scientifique.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/170616 - mise à jour majeure/6 - documentation scientifique.pdf
--------------------------------------------------------------------------------
/MixtComp/docs/dev/180308 - Initialization/recap.ods:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modal-inria/MixtComp/096093723b823b22d90462791cba602265230b53/MixtComp/docs/dev/180308 - Initialization/recap.ods
--------------------------------------------------------------------------------
/MixtComp/docs/developmentEnvironment.md:
--------------------------------------------------------------------------------
1 | # Development environment
2 |
3 | ## Current
4 |
5 | VS Code with the the following extensions:
6 |
7 | - clangd
8 | - Disable Intellisense from Microsoft C++ extension. The formatting should be automatically handled upon detection of the `.clang-format` file at the root of the project.
9 | - markdownlint
10 |
11 | Enable the "Format on save" option to ensure everything is properly formatted.
12 |
13 | ## Previous
14 |
15 | The general style used is K&R from Eclipse, modified for a line wrap at 200 characters.
16 |
--------------------------------------------------------------------------------
/MixtComp/docs/howToAddModelInR.md:
--------------------------------------------------------------------------------
1 | # Add a model in the different R packages
2 |
3 | Once you have add a model in C++ (check [Statistical model description](./howToAddModel.md)), some functions in different R packages need to be updated to use it.
4 |
5 | ## Documentation to update
6 |
7 | First of all, add the model in the following documentation:
8 |
9 | * [main README](../../README.md)
10 | * [Data format](./dataFormat.md)
11 | * [Output object](./objectOutput.md)
12 |
13 | ## RMixtComp
14 |
15 | Update the documentation in the [mixtCompLearn function](../../RMixtComp/R/MIXTCOMP_mixtCompLearn.R).
16 |
17 | Add the new model in the [getParam function](../../RMixtCompUtilities/R/MIXTCOMP_getParam.R). The function returns a matrix where rows correspond to classes and columns to the estimated parameters.
18 |
19 | Add the new model in the [availableModels function](../../RMixtCompUtilities/R/MIXTCOMP_misc.R). The function returns a data.frame containing all the models and some information (missing data format, hyperparameters...).
20 |
21 | If the model requires some hyperparameters and you want to provide default values, you can add them in the [completeModel function](../../RMixtCompUtilities/R/MIXTCOMP_formatData.R).
22 |
23 | Update [plotDataCI function](../../RMixtCompUtilities/R/PLOT_plotUnivariateDistributions.R) with the new model. It requires to add an [extractCI** function](../../RMixtCompUtilities/R/PLOT_extractCIbounds.R) that compute the theoretical mean and the confidence interval per class.
24 |
25 | Update [plotDataBoxplot function](../../RMixtCompUtilities/R/PLOT_plotUnivariateBoxplots.R) with the new model. It plots a boxplot of the data per class.
26 |
27 | Update [plotParamConvergence function](../../RMixtCompUtilities/R/PLOT_plotConvergence.R) with the new model. It plots the evolution of the estimated parameters during the algorithm's run.
28 |
--------------------------------------------------------------------------------
/MixtComp/docs/math.md:
--------------------------------------------------------------------------------
1 | # Mathematical background of some elements of MixtComp
2 |
3 | ## Initialization of latent and Unobserved variables in initializeLatent()
4 |
5 | The joint distribution of the data $`x`$ and $`w`$ can be used to initialize a latent or unobserved variables (say $`w_i^j`$) of the $`i`$-th individual for the $`j`$-th variable using current estimated parameters. This distribution is:
6 |
7 | ```math
8 | p(w_i^j, x_i^j) = \sum_{k} p(w_i^j, x_i^j | z = k) * p(z = k)
9 | ```
10 |
11 | Sampling according to this law can be done by:
12 |
13 | 1. Sampling the class $`k`$ according to a multinomial with the current proportion $`(p(z = j))_{j=1,...,K}`$ as probabilities
14 | 2. Sampling $`w_i^j`$ according to $`p(w_i^j, x_i^j | z = k)`$
15 |
16 | The first step is done by calling `sampleZProportion()` and the second by calling `sampleUnobservedAndLatent()`.
17 | `sampleZProportion()` first assigns proportion to each row of `tik_` and then calls `sampleZ()`.
18 |
--------------------------------------------------------------------------------
/MixtComp/src/CMakeLists.txt.in:
--------------------------------------------------------------------------------
1 | include(ExternalProject)
2 |
3 | ExternalProject_Add(optim
4 | GIT_REPOSITORY https://github.com/modal-inria/CppNumericalSolvers.git
5 | GIT_TAG master
6 | SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/optim-src"
7 | BINARY_DIR ""
8 | CONFIGURE_COMMAND ""
9 | BUILD_COMMAND ""
10 | INSTALL_COMMAND ""
11 | TEST_COMMAND ""
12 | )
13 |
14 |
--------------------------------------------------------------------------------
/MixtComp/src/archive/IO/UTestAlgTypeVisitor.cpp:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: August 17, 2018
7 | * Author: Vincent KUBICKI
8 | **/
9 |
10 | #include "gtest/gtest.h"
11 | #include "MixtComp.h"
12 |
13 | using namespace mixt;
14 |
15 | TEST(AlgTypeVisitor, BasicTest) {
16 | Index in = 12;
17 |
18 | AlgType obj;
19 | obj = in;
20 |
21 | Real res;
22 |
23 | res = boost::apply_visitor(AlgTypeVisitor(), obj);
24 |
25 | ASSERT_NEAR(Real(in), res, epsilon);
26 | }
27 |
--------------------------------------------------------------------------------
/MixtComp/src/archive/IO/UTestSGraph.cpp:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: August 3, 2018
7 | * Author: Vincent KUBICKI
8 | **/
9 |
10 | #include "gtest/gtest.h"
11 | #include "MixtComp.h"
12 |
13 | using namespace mixt;
14 |
15 | /** Get to get value. */
16 | TEST(SGraph, BasicIOGet) {
17 | SGraph test;
18 |
19 | std::string name = "Quote";
20 | Real val = 12.0;
21 |
22 | test.add_payload(name, val);
23 |
24 | Real res = test.get_payload(name);
25 |
26 | ASSERT_NEAR(val, res, epsilon);
27 | }
28 |
--------------------------------------------------------------------------------
/MixtComp/src/archive/SGraphToJSON.cpp:
--------------------------------------------------------------------------------
1 | /* MixtComp version 2.0 - 13 march 2017
2 | * Copyright (C) Inria - Lille 1 */
3 |
4 | /*
5 | * Project: MixtComp
6 | * Created on: Aug 3, 2018
7 | * Author: Vincent KUBICKI
8 | **/
9 |
10 | #include
11 | #include
12 | #include