Public Member Functions | Private Member Functions | Private Attributes
mp_permmatrix Class Reference

Public Member Functions

 mp_permmatrix ()
 
 mp_permmatrix (matrix, ring)
 
 mp_permmatrix (mp_permmatrix *)
 
 ~mp_permmatrix ()
 
int mpGetRow ()
 
int mpGetCol ()
 
int mpGetRdim ()
 
int mpGetCdim ()
 
int mpGetSign ()
 
void mpSetSearch (int s)
 
void mpSaveArray ()
 
poly mpGetElem (int, int)
 
void mpSetElem (poly, int, int)
 
void mpDelElem (int, int)
 
void mpElimBareiss (poly)
 
int mpPivotBareiss (row_col_weight *)
 
int mpPivotRow (row_col_weight *, int)
 
void mpToIntvec (intvec *)
 
void mpRowReorder ()
 
void mpColReorder ()
 

Private Member Functions

void mpInitMat ()
 
polympRowAdr (int r)
 
polympColAdr (int c)
 
void mpRowWeight (float *)
 
void mpColWeight (float *)
 
void mpRowSwap (int, int)
 
void mpColSwap (int, int)
 

Private Attributes

int a_m
 
int a_n
 
int s_m
 
int s_n
 
int sign
 
int piv_s
 
int * qrow
 
int * qcol
 
polyXarray
 
ring _R
 

Detailed Description

Definition at line 837 of file matpol.cc.

Constructor & Destructor Documentation

§ mp_permmatrix() [1/3]

mp_permmatrix::mp_permmatrix ( )
inline

Definition at line 854 of file matpol.cc.

854 : a_m(0) {}

§ mp_permmatrix() [2/3]

mp_permmatrix::mp_permmatrix ( matrix  A,
ring  R 
)

Definition at line 875 of file matpol.cc.

875  : sign(1)
876 {
877  a_m = A->nrows;
878  a_n = A->ncols;
879  this->mpInitMat();
880  Xarray = A->m;
881  _R=R;
882 }
int ncols
Definition: matpol.h:22
poly * Xarray
Definition: matpol.cc:842
poly * m
Definition: matpol.h:19
int nrows
Definition: matpol.h:21
const ring R
Definition: DebugPrint.cc:36
void mpInitMat()
Definition: matpol.cc:997

§ mp_permmatrix() [3/3]

mp_permmatrix::mp_permmatrix ( mp_permmatrix M)

Definition at line 884 of file matpol.cc.

885 {
886  poly p, *athis, *aM;
887  int i, j;
888 
889  _R=M->_R;
890  a_m = M->s_m;
891  a_n = M->s_n;
892  sign = M->sign;
893  this->mpInitMat();
894  Xarray = (poly *)omAlloc0(a_m*a_n*sizeof(poly));
895  for (i=a_m-1; i>=0; i--)
896  {
897  athis = this->mpRowAdr(i);
898  aM = M->mpRowAdr(i);
899  for (j=a_n-1; j>=0; j--)
900  {
901  p = aM[M->qcol[j]];
902  if (p)
903  {
904  athis[j] = p_Copy(p,_R);
905  }
906  }
907  }
908 }
int * qcol
Definition: matpol.cc:841
return P p
Definition: myNF.cc:203
poly * mpRowAdr(int r)
Definition: matpol.cc:845
static poly p_Copy(poly p, const ring r)
returns a copy of p
Definition: p_polys.h:804
poly * Xarray
Definition: matpol.cc:842
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
void mpInitMat()
Definition: matpol.cc:997
polyrec * poly
Definition: hilb.h:10
#define omAlloc0(size)
Definition: omAllocDecl.h:211

§ ~mp_permmatrix()

mp_permmatrix::~mp_permmatrix ( )

Definition at line 910 of file matpol.cc.

911 {
912  int k;
913 
914  if (a_m != 0)
915  {
916  omFreeSize((ADDRESS)qrow,a_m*sizeof(int));
917  omFreeSize((ADDRESS)qcol,a_n*sizeof(int));
918  if (Xarray != NULL)
919  {
920  for (k=a_m*a_n-1; k>=0; k--)
921  p_Delete(&Xarray[k],_R);
922  omFreeSize((ADDRESS)Xarray,a_m*a_n*sizeof(poly));
923  }
924  }
925 }
int * qcol
Definition: matpol.cc:841
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
void * ADDRESS
Definition: auxiliary.h:115
int k
Definition: cfEzgcd.cc:93
poly * Xarray
Definition: matpol.cc:842
int * qrow
Definition: matpol.cc:841
static void p_Delete(poly *p, const ring r)
Definition: p_polys.h:843
#define NULL
Definition: omList.c:10
polyrec * poly
Definition: hilb.h:10

Member Function Documentation

§ mpColAdr()

poly* mp_permmatrix::mpColAdr ( int  c)
inlineprivate

Definition at line 847 of file matpol.cc.

848  { return &(Xarray[qcol[c]]); }
int * qcol
Definition: matpol.cc:841
poly * Xarray
Definition: matpol.cc:842

§ mpColReorder()

void mp_permmatrix::mpColReorder ( )

Definition at line 1010 of file matpol.cc.

1011 {
1012  int k, j, j1, j2;
1013 
1014  if (a_n > a_m)
1015  k = a_n - a_m;
1016  else
1017  k = 0;
1018  for (j=a_n-1; j>=k; j--)
1019  {
1020  j1 = qcol[j];
1021  if (j1 != j)
1022  {
1023  this->mpColSwap(j1, j);
1024  j2 = 0;
1025  while (qcol[j2] != j) j2++;
1026  qcol[j2] = j1;
1027  }
1028  }
1029 }
int * qcol
Definition: matpol.cc:841
int k
Definition: cfEzgcd.cc:93
int j
Definition: myNF.cc:70
void mpColSwap(int, int)
Definition: matpol.cc:983

§ mpColSwap()

void mp_permmatrix::mpColSwap ( int  j1,
int  j2 
)
private

Definition at line 983 of file matpol.cc.

984 {
985  poly p, *a1, *a2;
986  int i, k = a_n*a_m;
987 
988  a1 = &(Xarray[j1]);
989  a2 = &(Xarray[j2]);
990  for (i=0; i< k; i+=a_n)
991  {
992  p = a1[i];
993  a1[i] = a2[i];
994  a2[i] = p;
995  }
996 }
return P p
Definition: myNF.cc:203
int k
Definition: cfEzgcd.cc:93
poly * Xarray
Definition: matpol.cc:842
int i
Definition: cfEzgcd.cc:123
polyrec * poly
Definition: hilb.h:10

§ mpColWeight()

void mp_permmatrix::mpColWeight ( float *  wcol)
private

Definition at line 929 of file matpol.cc.

930 {
931  poly p, *a;
932  int i, j;
933  float count;
934 
935  for (j=s_n; j>=0; j--)
936  {
937  a = this->mpColAdr(j);
938  count = 0.0;
939  for(i=s_m; i>=0; i--)
940  {
941  p = a[a_n*qrow[i]];
942  if (p)
943  count += mp_PolyWeight(p,_R);
944  }
945  wcol[j] = count;
946  }
947 }
int status int void size_t count
Definition: si_signals.h:59
const poly a
Definition: syzextra.cc:212
return P p
Definition: myNF.cc:203
poly * mpColAdr(int c)
Definition: matpol.cc:847
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
int * qrow
Definition: matpol.cc:841
polyrec * poly
Definition: hilb.h:10
static float mp_PolyWeight(poly p, const ring r)
Definition: matpol.cc:1214

§ mpDelElem()

void mp_permmatrix::mpDelElem ( int  ,
int   
)

§ mpElimBareiss()

void mp_permmatrix::mpElimBareiss ( poly  div)

Definition at line 1156 of file matpol.cc.

1157 {
1158  poly piv, elim, q1, q2, *ap, *a;
1159  int i, j, jj;
1160 
1161  ap = this->mpRowAdr(s_m);
1162  piv = ap[qcol[s_n]];
1163  for(i=s_m-1; i>=0; i--)
1164  {
1165  a = this->mpRowAdr(i);
1166  elim = a[qcol[s_n]];
1167  if (elim != NULL)
1168  {
1169  elim = p_Neg(elim,_R);
1170  for (j=s_n-1; j>=0; j--)
1171  {
1172  q2 = NULL;
1173  jj = qcol[j];
1174  if (ap[jj] != NULL)
1175  {
1176  q2 = SM_MULT(ap[jj], elim, div,_R);
1177  if (a[jj] != NULL)
1178  {
1179  q1 = SM_MULT(a[jj], piv, div,_R);
1180  p_Delete(&a[jj],_R);
1181  q2 = p_Add_q(q2, q1, _R);
1182  }
1183  }
1184  else if (a[jj] != NULL)
1185  {
1186  q2 = SM_MULT(a[jj], piv, div, _R);
1187  }
1188  if ((q2!=NULL) && div)
1189  SM_DIV(q2, div, _R);
1190  a[jj] = q2;
1191  }
1192  p_Delete(&a[qcol[s_n]], _R);
1193  }
1194  else
1195  {
1196  for (j=s_n-1; j>=0; j--)
1197  {
1198  jj = qcol[j];
1199  if (a[jj] != NULL)
1200  {
1201  q2 = SM_MULT(a[jj], piv, div, _R);
1202  p_Delete(&a[jj], _R);
1203  if (div)
1204  SM_DIV(q2, div, _R);
1205  a[jj] = q2;
1206  }
1207  }
1208  }
1209  }
1210 }
int * qcol
Definition: matpol.cc:841
const poly a
Definition: syzextra.cc:212
poly * mpRowAdr(int r)
Definition: matpol.cc:845
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
static void p_Delete(poly *p, const ring r)
Definition: p_polys.h:843
CF_NO_INLINE CanonicalForm div(const CanonicalForm &, const CanonicalForm &)
CF_INLINE CanonicalForm div, mod ( const CanonicalForm & lhs, const CanonicalForm & rhs ) ...
Definition: cf_inline.cc:553
#define NULL
Definition: omList.c:10
#define SM_MULT
Definition: sparsmat.h:23
#define SM_DIV
Definition: sparsmat.h:24
static poly p_Neg(poly p, const ring r)
Definition: p_polys.h:1013
polyrec * poly
Definition: hilb.h:10
static poly p_Add_q(poly p, poly q, const ring r)
Definition: p_polys.h:877

§ mpGetCdim()

int mp_permmatrix::mpGetCdim ( )
inline

Definition at line 861 of file matpol.cc.

861 { return s_n; }

§ mpGetCol()

int mp_permmatrix::mpGetCol ( )

§ mpGetElem()

poly mp_permmatrix::mpGetElem ( int  r,
int  c 
)

Definition at line 1148 of file matpol.cc.

1149 {
1150  return Xarray[a_n*qrow[r]+qcol[c]];
1151 }
int * qcol
Definition: matpol.cc:841
poly * Xarray
Definition: matpol.cc:842
const ring r
Definition: syzextra.cc:208
int * qrow
Definition: matpol.cc:841

§ mpGetRdim()

int mp_permmatrix::mpGetRdim ( )
inline

Definition at line 860 of file matpol.cc.

860 { return s_m; }

§ mpGetRow()

int mp_permmatrix::mpGetRow ( )

§ mpGetSign()

int mp_permmatrix::mpGetSign ( )
inline

Definition at line 862 of file matpol.cc.

862 { return sign; }

§ mpInitMat()

void mp_permmatrix::mpInitMat ( )
private

Definition at line 997 of file matpol.cc.

998 {
999  int k;
1000 
1001  s_m = a_m;
1002  s_n = a_n;
1003  piv_s = 0;
1004  qrow = (int *)omAlloc(a_m*sizeof(int));
1005  qcol = (int *)omAlloc(a_n*sizeof(int));
1006  for (k=a_m-1; k>=0; k--) qrow[k] = k;
1007  for (k=a_n-1; k>=0; k--) qcol[k] = k;
1008 }
int * qcol
Definition: matpol.cc:841
int k
Definition: cfEzgcd.cc:93
#define omAlloc(size)
Definition: omAllocDecl.h:210
int * qrow
Definition: matpol.cc:841

§ mpPivotBareiss()

int mp_permmatrix::mpPivotBareiss ( row_col_weight C)

Definition at line 1071 of file matpol.cc.

1072 {
1073  poly p, *a;
1074  int i, j, iopt, jopt;
1075  float sum, f1, f2, fo, r, ro, lp;
1076  float *dr = C->wrow, *dc = C->wcol;
1077 
1078  fo = 1.0e20;
1079  ro = 0.0;
1080  iopt = jopt = -1;
1081 
1082  s_n--;
1083  s_m--;
1084  if (s_m == 0)
1085  return 0;
1086  if (s_n == 0)
1087  {
1088  for(i=s_m; i>=0; i--)
1089  {
1090  p = this->mpRowAdr(i)[qcol[0]];
1091  if (p)
1092  {
1093  f1 = mp_PolyWeight(p,_R);
1094  if (f1 < fo)
1095  {
1096  fo = f1;
1097  if (iopt >= 0)
1098  p_Delete(&(this->mpRowAdr(iopt)[qcol[0]]),_R);
1099  iopt = i;
1100  }
1101  else
1102  p_Delete(&(this->mpRowAdr(i)[qcol[0]]),_R);
1103  }
1104  }
1105  if (iopt >= 0)
1106  mpReplace(iopt, s_m, sign, qrow);
1107  return 0;
1108  }
1109  this->mpRowWeight(dr);
1110  this->mpColWeight(dc);
1111  sum = 0.0;
1112  for(i=s_m; i>=0; i--)
1113  sum += dr[i];
1114  for(i=s_m; i>=0; i--)
1115  {
1116  r = dr[i];
1117  a = this->mpRowAdr(i);
1118  for(j=s_n; j>=0; j--)
1119  {
1120  p = a[qcol[j]];
1121  if (p)
1122  {
1123  lp = mp_PolyWeight(p,_R);
1124  ro = r - lp;
1125  f1 = ro * (dc[j]-lp);
1126  if (f1 != 0.0)
1127  {
1128  f2 = lp * (sum - ro - dc[j]);
1129  f2 += f1;
1130  }
1131  else
1132  f2 = lp-r-dc[j];
1133  if (f2 < fo)
1134  {
1135  fo = f2;
1136  iopt = i;
1137  jopt = j;
1138  }
1139  }
1140  }
1141  }
1142  if (iopt < 0)
1143  return 0;
1144  mpReplace(iopt, s_m, sign, qrow);
1145  mpReplace(jopt, s_n, sign, qcol);
1146  return 1;
1147 }
int * qcol
Definition: matpol.cc:841
const poly a
Definition: syzextra.cc:212
return P p
Definition: myNF.cc:203
float * wcol
Definition: matpol.cc:805
void mpColWeight(float *)
Definition: matpol.cc:929
void mpRowWeight(float *)
Definition: matpol.cc:948
poly * mpRowAdr(int r)
Definition: matpol.cc:845
static void mpReplace(int j, int n, int &sign, int *perm)
Definition: matpol.cc:1056
const ring r
Definition: syzextra.cc:208
int j
Definition: myNF.cc:70
float * wrow
Definition: matpol.cc:805
int i
Definition: cfEzgcd.cc:123
int * qrow
Definition: matpol.cc:841
static void p_Delete(poly *p, const ring r)
Definition: p_polys.h:843
polyrec * poly
Definition: hilb.h:10
static float mp_PolyWeight(poly p, const ring r)
Definition: matpol.cc:1214

§ mpPivotRow()

int mp_permmatrix::mpPivotRow ( row_col_weight ,
int   
)

§ mpRowAdr()

poly* mp_permmatrix::mpRowAdr ( int  r)
inlineprivate

Definition at line 845 of file matpol.cc.

846  { return &(Xarray[a_n*qrow[r]]); }
poly * Xarray
Definition: matpol.cc:842
const ring r
Definition: syzextra.cc:208
int * qrow
Definition: matpol.cc:841

§ mpRowReorder()

void mp_permmatrix::mpRowReorder ( )

Definition at line 1031 of file matpol.cc.

1032 {
1033  int k, i, i1, i2;
1034 
1035  if (a_m > a_n)
1036  k = a_m - a_n;
1037  else
1038  k = 0;
1039  for (i=a_m-1; i>=k; i--)
1040  {
1041  i1 = qrow[i];
1042  if (i1 != i)
1043  {
1044  this->mpRowSwap(i1, i);
1045  i2 = 0;
1046  while (qrow[i2] != i) i2++;
1047  qrow[i2] = i1;
1048  }
1049  }
1050 }
void mpRowSwap(int, int)
Definition: matpol.cc:968
int k
Definition: cfEzgcd.cc:93
int i
Definition: cfEzgcd.cc:123
int * qrow
Definition: matpol.cc:841

§ mpRowSwap()

void mp_permmatrix::mpRowSwap ( int  i1,
int  i2 
)
private

Definition at line 968 of file matpol.cc.

969 {
970  poly p, *a1, *a2;
971  int j;
972 
973  a1 = &(Xarray[a_n*i1]);
974  a2 = &(Xarray[a_n*i2]);
975  for (j=a_n-1; j>= 0; j--)
976  {
977  p = a1[j];
978  a1[j] = a2[j];
979  a2[j] = p;
980  }
981 }
return P p
Definition: myNF.cc:203
poly * Xarray
Definition: matpol.cc:842
int j
Definition: myNF.cc:70
polyrec * poly
Definition: hilb.h:10

§ mpRowWeight()

void mp_permmatrix::mpRowWeight ( float *  wrow)
private

Definition at line 948 of file matpol.cc.

949 {
950  poly p, *a;
951  int i, j;
952  float count;
953 
954  for (i=s_m; i>=0; i--)
955  {
956  a = this->mpRowAdr(i);
957  count = 0.0;
958  for(j=s_n; j>=0; j--)
959  {
960  p = a[qcol[j]];
961  if (p)
962  count += mp_PolyWeight(p,_R);
963  }
964  wrow[i] = count;
965  }
966 }
int status int void size_t count
Definition: si_signals.h:59
int * qcol
Definition: matpol.cc:841
const poly a
Definition: syzextra.cc:212
return P p
Definition: myNF.cc:203
poly * mpRowAdr(int r)
Definition: matpol.cc:845
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
polyrec * poly
Definition: hilb.h:10
static float mp_PolyWeight(poly p, const ring r)
Definition: matpol.cc:1214

§ mpSaveArray()

void mp_permmatrix::mpSaveArray ( )
inline

Definition at line 864 of file matpol.cc.

864 { Xarray = NULL; }
poly * Xarray
Definition: matpol.cc:842
#define NULL
Definition: omList.c:10

§ mpSetElem()

void mp_permmatrix::mpSetElem ( poly  ,
int  ,
int   
)

§ mpSetSearch()

void mp_permmatrix::mpSetSearch ( int  s)

§ mpToIntvec()

void mp_permmatrix::mpToIntvec ( intvec )

Field Documentation

§ _R

ring mp_permmatrix::_R
private

Definition at line 843 of file matpol.cc.

§ a_m

int mp_permmatrix::a_m
private

Definition at line 840 of file matpol.cc.

§ a_n

int mp_permmatrix::a_n
private

Definition at line 840 of file matpol.cc.

§ piv_s

int mp_permmatrix::piv_s
private

Definition at line 840 of file matpol.cc.

§ qcol

int * mp_permmatrix::qcol
private

Definition at line 841 of file matpol.cc.

§ qrow

int* mp_permmatrix::qrow
private

Definition at line 841 of file matpol.cc.

§ s_m

int mp_permmatrix::s_m
private

Definition at line 840 of file matpol.cc.

§ s_n

int mp_permmatrix::s_n
private

Definition at line 840 of file matpol.cc.

§ sign

int mp_permmatrix::sign
private

Definition at line 840 of file matpol.cc.

§ Xarray

poly* mp_permmatrix::Xarray
private

Definition at line 842 of file matpol.cc.


The documentation for this class was generated from the following file: