/********************************************************************** * * * Template file xperm.tm to link the xperm.c code to xPerm.nb * * * * Jose M. Martin-Garcia (C) 2003-2011 * * * * jose@xAct.es * * http://www.xAct.es/ * * * **********************************************************************/ #include #include #include #include #include #include /********************************************************************** * PACKAGE * **********************************************************************/ #include "xperm.c" /********************************************************************** * INTERFACE * **********************************************************************/ /**********************************************************************/ void ML_schreier_sims P(( intp_nt, long, intp_nt, long, int )); :Begin: :Function: ML_schreier_sims :Pattern: xAct`xPerm`Private`MLSchreierSims[ xAct`xPerm`Private`base_List, xAct`xPerm`Private`GS_List, xAct`xPerm`Private`n_Integer] :Arguments: {xAct`xPerm`Private`base, xAct`xPerm`Private`GS, xAct`xPerm`Private`n} :ArgumentTypes: {IntegerList, IntegerList, Integer} :ReturnType: Manual :End: :Evaluate: void ML_schreier_sims( int *base, long bl, int *GS, long m, int n) { int newbase[n]; int nbl; int **newGS = NULL; int *pointer = NULL; int nm; int num=0; pointer = malloc(m*n*sizeof(int)); newGS = &pointer; schreier_sims(base, bl, GS, m/n, n, newbase, &nbl, newGS, &nm, &num); MLPutFunction(stdlink, "StrongGenSet", 3); MLPutIntegerList(stdlink, newbase, nbl); MLPutIntegerList(stdlink, *newGS, nm*n); MLPutInteger(stdlink, n); free(pointer); return; } /**********************************************************************/ void ML_orbit P(( int, intp_nt, long, int)); :Begin: :Function: ML_orbit :Pattern: xAct`xPerm`Private`MLOrbit[ xAct`xPerm`Private`point_Integer, xAct`xPerm`Private`GS_List, xAct`xPerm`Private`n_Integer] :Arguments: {xAct`xPerm`Private`point, xAct`xPerm`Private`GS, xAct`xPerm`Private`n} :ArgumentTypes: {Integer, IntegerList, Integer} :ReturnType: Manual :End: :Evaluate: void ML_orbit( int point, int *GS, long m, int n) { int orbit[n]; int ol; one_orbit(point, GS, m/n, n, orbit, &ol); MLPutIntegerList(stdlink, orbit, ol); return; } /**********************************************************************/ void ML_canonical_perm P(( intp_nt, long, int, int, intp_nt, long, intp_nt, long, intp_nt, long, intp_nt, long, intp_nt, long, intp_nt, long, intp_nt, long, intp_nt, long )); :Begin: :Function: ML_canonical_perm :Pattern: xAct`xPerm`Private`MLCanonicalPerm[ xAct`xPerm`Private`perm_List, xAct`xPerm`Private`deg_Integer, xAct`xPerm`Private`SGSQ_Integer, xAct`xPerm`Private`base_List, xAct`xPerm`Private`GS_List, xAct`xPerm`Private`freeps_List, xAct`xPerm`Private`vds_List, xAct`xPerm`Private`dummies_List, xAct`xPerm`Private`mQ_List, xAct`xPerm`Private`vrs_List, xAct`xPerm`Private`repes_List] :Arguments: { xAct`xPerm`Private`perm, xAct`xPerm`Private`deg, xAct`xPerm`Private`SGSQ, xAct`xPerm`Private`base, xAct`xPerm`Private`GS, xAct`xPerm`Private`freeps, xAct`xPerm`Private`vds, xAct`xPerm`Private`dummies, xAct`xPerm`Private`mQ, xAct`xPerm`Private`vrs, xAct`xPerm`Private`repes } :ArgumentTypes: { IntegerList, Integer, Integer, IntegerList, IntegerList, IntegerList, IntegerList, IntegerList, IntegerList, IntegerList, IntegerList } :ReturnType: Manual :End: :Evaluate: void ML_canonical_perm( int *perm, long nn, int deg, int SGSQ, int *base, long bl, int *GS, long m, int *freeps, long fl, int *vds, long vdsl, int *dummies, long dl, int *mQ, long mQl, int *vrs, long vrsl, int *repes, long rl) { int *cperm= (int*)malloc(nn*sizeof(int)); int error; canonical_perm_ext( perm, deg, SGSQ, base, bl, GS, m/deg, freeps, fl, vds, vdsl, dummies, dl, mQ, vrs, vrsl, repes, rl, cperm); error = MLError(stdlink); if(error) { MLPutFunction(stdlink, "Print", 1); MLPutString(stdlink, MLErrorMessage(stdlink)); } else { MLPutFunction(stdlink, "xAct`xPerm`Private`ToSign", 2); MLPutFunction(stdlink, "Images", 1); MLPutIntegerList(stdlink, cperm, deg); MLPutInteger(stdlink, deg-2); } free(cperm); return; } /**********************************************************************/ void ML_set_stabilizer P(( intp_nt, long, int, intp_nt, long, intp_nt, long )); :Begin: :Function: ML_set_stabilizer :Pattern: xAct`xPerm`Private`MLSetStabilizer[ xAct`xPerm`Private`list_List, xAct`xPerm`Private`deg_Integer, xAct`xPerm`Private`base_List, xAct`xPerm`Private`GS_List] :Arguments: { xAct`xPerm`Private`list, xAct`xPerm`Private`deg, xAct`xPerm`Private`base, xAct`xPerm`Private`GS } :ArgumentTypes: { IntegerList, Integer, IntegerList, IntegerList } :ReturnType: Manual :End: :Evaluate: void ML_set_stabilizer( int *list, long nn, int n, int *base, long bl, int *GS, long m) { int num=0; int *charac=NULL, i; int *pointer=NULL; int **GSK=NULL, mK; pointer= malloc(m*sizeof(int)); GSK = &pointer; charac= malloc(n*sizeof(int)); /* Convert list of points into a characteristic function */ zeros(charac,n); for(i=0; i