#include "selectiontotale.h"
-#include "ioutils.h"
+#include "test_utils.h"
+#include <stdlib.h>
-mwSize main(mwSize argc, char** argv)
+int main(int argc, char** argv)
{
- // read dimensions
- const Int nbDims = 5;
- Int* dimensions = readArray_int("dimensions",&nbDims,1);
- mwSize n = dimensions[0];
- mwSize p = dimensions[1];
- mwSize m = dimensions[2];
- mwSize k = dimensions[3];
- mwSize L = dimensions[4];
+ int* dimensions = readArray_int("dimensions");
+ int n = dimensions[0];
+ int p = dimensions[1];
+ int m = dimensions[2];
+ int k = dimensions[3];
+ int L = dimensions[4];
free(dimensions);
- mwSize lengthOne = 1;
-
+
////////////
// INPUTS //
+ Real* phiInit = readArray_real("phiInit");
+ Real* rhoInit = readArray_real("rhoInit");
+ Real* piInit = readArray_real("piInit");
+ Real* gamInit = readArray_real("gamInit");
+ int mini = read_int("mini");
+ int maxi = read_int("maxi");
+ Real gamma = read_real("gamma");
+ Real* glambda = readArray_real("glambda");
+ Real* X = readArray_real("X");
+ Real* Y = readArray_real("Y");
+ Real seuil = read_real("seuil");
+ Real tau = read_real("tau");
////////////
- // phiInit
- const mwSize dimPhiInit[] = {p, m, k};
- Real* phiInit = readArray_real("phiInit",dimPhiInit,3);
-
- // rhoInit
- const mwSize dimRhoInit[] = {m, m, k};
- Real* rhoInit = readArray_real("rhoInit",dimRhoInit,3);
-
- // piInit
- Real* piInit = readArray_real("piInit",&k,1);
-
- // gamInit
- const mwSize dimGamInit[] = {n, k};
- Real* gamInit = readArray_real("gamInit",dimGamInit, 2);
-
- // min number of iterations
- Int* pmini = readArray_int("mini",&lengthOne,1);
- Int mini = *pmini;
- free(pmini);
-
- // max number of iterations
- Int* pmaxi = readArray_int("maxi",&lengthOne,1);
- Int maxi = *pmaxi;
- free(pmaxi);
-
- // gamma
- Real* pgamma = readArray_real("gamma",&lengthOne,1);
- Real gamma = *pgamma;
- free(pgamma);
-
- // lambda
- Real* glambda = readArray_real("glambda",&L,1);
-
- // X
- const mwSize dimX[] = {n, p};
- Real* X = readArray_real("X",dimX,2);
-
- // Y
- const mwSize dimY[] = {n, m};
- Real* Y = readArray_real("Y",dimY,2);
-
- // seuil
- Real* pseuil = readArray_real("seuil",&lengthOne,1);
- Real seuil = *pseuil;
- free(pseuil);
-
- // tau
- Real* ptau = readArray_real("tau",&lengthOne,1);
- Real tau = *ptau;
- free(ptau);
-
/////////////
// OUTPUTS //
+ int* A1 = (int*)malloc(p*(m+1)*L*sizeof(int));
+ int* A2 = (int*)malloc(p*(m+1)*L*sizeof(int));
+ Real* Rho = (Real*)malloc(m*m*k*L*sizeof(Real));
+ Real* Pi = (Real*)malloc(k*L*sizeof(Real));
/////////////
- // A1
- const mwSize dimA[] = {p, m+1, L};
- Int* A1 = (Int*)malloc(dimA[0]*dimA[1]*dimA[2]*sizeof(Int));
-
- // A2
- Int* A2 = (Int*)malloc(dimA[0]*dimA[1]*dimA[2]*sizeof(Int));
-
- // rho
- const mwSize dimRho[] = {m, m, k, L};
- Real* Rho = (Real*)malloc(dimRho[0]*dimRho[1]*dimRho[2]*dimRho[3]*sizeof(Real));
-
- // pi
- const mwSize dimPi[] = {k, L};
- Real* Pi = (Real*)malloc(dimPi[0]*dimPi[1]*sizeof(Real));
-
- //////////////////////////////////////////////
- // Main call to constructionModelesLassoMLE //
- //////////////////////////////////////////////
-
- selectiontotale(
+ /////////////////////////////////////////
+ // Call to constructionModelesLassoMLE //
+ selectiontotale_core(
phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda,X,Y,seuil,tau,
A1,A2,Rho,Pi,
n,p,m,k,L);
-
- // free input pointers
+ /////////////////////////////////////////
+
free(phiInit);
free(rhoInit);
free(piInit);
free(glambda);
free(X);
free(Y);
-
+
// Compare to reference outputs
- Int* ref_A1 = readArray_int("A1",dimA, 3);
- compareArray_int("A1", A1, ref_A1, dimA[0]*dimA[1]*dimA[2]);
+ int* ref_A1 = readArray_int("A1");
+ compareArray_int("A1", A1, ref_A1, p*(m+1)*L);
free(A1);
free(ref_A1);
-
- // A2
- Int* ref_A2 = readArray_int("A2",dimA, 3);
- compareArray_int("A2", A2, ref_A2, dimA[0]*dimA[1]*dimA[2]);
+
+ int* ref_A2 = readArray_int("A2");
+ compareArray_int("A2", A2, ref_A2, p*(m+1)*L);
free(A2);
free(ref_A2);
-
- // Rho
- Real* ref_Rho = readArray_real("Rho",dimRho, 4);
- compareArray_real("Rho", Rho, ref_Rho, dimRho[0]*dimRho[1]*dimRho[2]*dimRho[3]);
+
+ Real* ref_Rho = readArray_real("Rho");
+ compareArray_real("Rho", Rho, ref_Rho, m*m*k*L);
free(Rho);
free(ref_Rho);
-
- // Pi
- Real* ref_Pi = readArray_real("Pi",dimPi, 2);
- compareArray_real("Pi", Pi, ref_Pi, dimPi[0]*dimPi[1]);
+
+ Real* ref_Pi = readArray_real("Pi");
+ compareArray_real("Pi", Pi, ref_Pi, k*L);
free(Pi);
free(ref_Pi);
-
+
return 0;
}