All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Data Structures | Functions
rmodulon.h File Reference
#include <misc/auxiliary.h>
#include <coeffs/coeffs.h>
#include <coeffs/rintegers.h>

Go to the source code of this file.

Data Structures

struct  ZnmInfo
 

Functions

BOOLEAN nrnInitChar (coeffs r, void *)
 
number nrnMapGMP (number from, const coeffs, const coeffs dst)
 
nMapFunc nrnSetMap (const coeffs src, const coeffs dst)
 

Data Structure Documentation

struct ZnmInfo

Definition at line 19 of file rmodulon.h.

Data Fields
mpz_ptr base
unsigned long exp

Function Documentation

BOOLEAN nrnInitChar ( coeffs  r,
void *   
)

Definition at line 167 of file rmodulon.cc.

168 {
169  assume( (getCoeffType(r) == n_Zn) || (getCoeffType (r) == n_Znm) );
170  ZnmInfo * info= (ZnmInfo *) p;
171  r->modBase= (mpz_ptr)nrnCopy((number)info->base, r); //this circumvents the problem
172  //in bigintmat.cc where we cannot create a "legal" nrn that can be freed.
173  //If we take a copy, we can do whatever we want.
174 
175  nrnInitExp (info->exp, r);
176 
177  /* next computation may yield wrong characteristic as r->modNumber
178  is a GMP number */
179  r->ch = mpz_get_ui(r->modNumber);
180 
181  r->is_field=FALSE;
182  r->is_domain=FALSE;
183  r->rep=n_rep_gmp;
184 
185 
186  r->cfCoeffString = nrnCoeffString;
187 
188  r->cfInit = nrnInit;
189  r->cfDelete = nrnDelete;
190  r->cfCopy = nrnCopy;
191  r->cfSize = nrnSize;
192  r->cfInt = nrnInt;
193  r->cfAdd = nrnAdd;
194  r->cfSub = nrnSub;
195  r->cfMult = nrnMult;
196  r->cfDiv = nrnDiv;
197  r->cfAnn = nrnAnn;
198  r->cfIntMod = nrnMod;
199  r->cfExactDiv = nrnDiv;
200  r->cfInpNeg = nrnNeg;
201  r->cfInvers = nrnInvers;
202  r->cfDivBy = nrnDivBy;
203  r->cfDivComp = nrnDivComp;
204  r->cfGreater = nrnGreater;
205  r->cfEqual = nrnEqual;
206  r->cfIsZero = nrnIsZero;
207  r->cfIsOne = nrnIsOne;
208  r->cfIsMOne = nrnIsMOne;
209  r->cfGreaterZero = nrnGreaterZero;
210  r->cfWriteLong = nrnWrite;
211  r->cfRead = nrnRead;
212  r->cfPower = nrnPower;
213  r->cfSetMap = nrnSetMap;
214  //r->cfNormalize = ndNormalize;
215  r->cfLcm = nrnLcm;
216  r->cfGcd = nrnGcd;
217  r->cfIsUnit = nrnIsUnit;
218  r->cfGetUnit = nrnGetUnit;
219  r->cfExtGcd = nrnExtGcd;
220  r->cfXExtGcd = nrnXExtGcd;
221  r->cfQuotRem = nrnQuotRem;
222  r->cfCoeffWrite = nrnCoeffWrite;
223  r->nCoeffIsEqual = nrnCoeffsEqual;
224  r->cfKillChar = nrnKillChar;
225  r->cfQuot1 = nrnQuot1;
226 #ifdef LDEBUG
227  r->cfDBTest = nrnDBTest;
228 #endif
229  return FALSE;
230 }
mpz_ptr base
Definition: rmodulon.h:19
only used if HAVE_RINGS is defined
Definition: coeffs.h:44
number nrnMult(number a, number b, const coeffs r)
Definition: rmodulon.cc:275
number nrnQuotRem(number a, number b, number *s, const coeffs r)
Definition: rmodulon.cc:706
#define FALSE
Definition: auxiliary.h:97
return P p
Definition: myNF.cc:203
number nrnExtGcd(number a, number b, number *s, number *t, const coeffs r)
Definition: rmodulon.cc:377
number nrnLcm(number a, number b, const coeffs r)
Definition: rmodulon.cc:330
BOOLEAN nrnIsMOne(number a, const coeffs r)
Definition: rmodulon.cc:509
BOOLEAN nrnDivBy(number a, number b, const coeffs r)
Definition: rmodulon.cc:595
static BOOLEAN nrnCoeffsEqual(const coeffs r, n_coeffType n, void *parameter)
Definition: rmodulon.cc:89
number nrnMod(number a, number b, const coeffs r)
Definition: rmodulon.cc:650
BOOLEAN nrnGreaterZero(number k, const coeffs r)
Definition: rmodulon.cc:532
void nrnInitExp(unsigned long c, const coeffs r)
Definition: rmodulon.cc:929
number nrnDiv(number a, number b, const coeffs r)
Definition: rmodulon.cc:617
void nrnDelete(number *a, const coeffs r)
Definition: rmodulon.cc:243
number nrnAnn(number a, const coeffs r)
Definition: rmodulon.cc:582
const ring r
Definition: syzextra.cc:208
static char * nrnCoeffString(const coeffs r)
Definition: rmodulon.cc:95
BOOLEAN nrnIsUnit(number a, const coeffs r)
Definition: rmodulon.cc:537
only used if HAVE_RINGS is defined
Definition: coeffs.h:45
const char * nrnRead(const char *s, number *a, const coeffs r)
Definition: rmodulon.cc:978
#define assume(x)
Definition: mod2.h:403
BOOLEAN nrnDBTest(number a, const char *f, const int l, const coeffs r)
Definition: rmodulon.cc:940
int nrnSize(number a, const coeffs r)
Definition: rmodulon.cc:258
unsigned long exp
Definition: rmodulon.h:19
#define info
Definition: libparse.cc:1254
(mpz_ptr), see rmodulon,h
Definition: coeffs.h:115
static FORCE_INLINE n_coeffType getCoeffType(const coeffs r)
Returns the type of coeffs domain.
Definition: coeffs.h:425
void nrnPower(number a, int i, number *result, const coeffs r)
Definition: rmodulon.cc:284
number nrnAdd(number a, number b, const coeffs r)
Definition: rmodulon.cc:292
BOOLEAN nrnGreater(number a, number b, const coeffs r)
Definition: rmodulon.cc:527
static void nrnKillChar(coeffs r)
Definition: rmodulon.cc:113
number nrnXExtGcd(number a, number b, number *s, number *t, number *u, number *v, const coeffs r)
Definition: rmodulon.cc:401
number nrnCopy(number a, const coeffs r)
Definition: rmodulon.cc:251
number nrnGetUnit(number a, const coeffs r)
Definition: rmodulon.cc:545
number nrnSub(number a, number b, const coeffs r)
Definition: rmodulon.cc:301
BOOLEAN nrnIsOne(number a, const coeffs r)
Definition: rmodulon.cc:501
BOOLEAN nrnIsZero(number a, const coeffs r)
Definition: rmodulon.cc:493
int nrnDivComp(number a, number b, const coeffs r)
Definition: rmodulon.cc:609
nMapFunc nrnSetMap(const coeffs src, const coeffs dst)
Definition: rmodulon.cc:832
BOOLEAN nrnEqual(number a, number b, const coeffs r)
Definition: rmodulon.cc:522
#define nrnWrite
Definition: rmodulon.cc:59
number nrnInit(long i, const coeffs r)
Definition: rmodulon.cc:235
number nrnInvers(number c, const coeffs r)
Definition: rmodulon.cc:318
void nrnCoeffWrite(const coeffs r, BOOLEAN details)
Definition: rmodulon.cc:77
long nrnInt(number &n, const coeffs r)
Definition: rmodulon.cc:267
number nrnNeg(number c, const coeffs r)
Definition: rmodulon.cc:310
number nrnGcd(number a, number b, const coeffs r)
Definition: rmodulon.cc:343
coeffs nrnQuot1(number c, const coeffs r)
Definition: rmodulon.cc:121
number nrnMapGMP ( number  from,
const coeffs  ,
const coeffs  dst 
)

Definition at line 768 of file rmodulon.cc.

769 {
770  mpz_ptr erg = (mpz_ptr)omAllocBin(gmp_nrz_bin);
771  mpz_init(erg);
772  mpz_mod(erg, (mpz_ptr)from, dst->modNumber);
773  return (number)erg;
774 }
#define omAllocBin(bin)
Definition: omAllocDecl.h:205
omBin gmp_nrz_bin
Definition: rintegers.cc:76
nMapFunc nrnSetMap ( const coeffs  src,
const coeffs  dst 
)

Definition at line 832 of file rmodulon.cc.

833 {
834  /* dst = nrn */
835  if ((src->rep==n_rep_gmp) && nCoeff_is_Ring_Z(src))
836  {
837  return nrnMapZ;
838  }
839  if ((src->rep==n_rep_gap_gmp) /*&& nCoeff_is_Ring_Z(src)*/)
840  {
841  return nrnMapZ;
842  }
843  if (src->rep==n_rep_gap_rat) /*&& nCoeff_is_Q(src)) or Z*/
844  {
845  return nrnMapQ;
846  }
847  // Some type of Z/n ring / field
848  if (nCoeff_is_Ring_ModN(src) || nCoeff_is_Ring_PtoM(src) ||
849  nCoeff_is_Ring_2toM(src) || nCoeff_is_Zp(src))
850  {
851  if ( (!nCoeff_is_Zp(src))
852  && (mpz_cmp(src->modBase, dst->modBase) == 0)
853  && (src->modExponent == dst->modExponent)) return nrnMapGMP;
854  else
855  {
856  mpz_ptr nrnMapModul = (mpz_ptr) omAllocBin(gmp_nrz_bin);
857  // Computing the n of Z/n
858  if (nCoeff_is_Zp(src))
859  {
860  mpz_init_set_si(nrnMapModul, src->ch);
861  }
862  else
863  {
864  mpz_init(nrnMapModul);
865  mpz_set(nrnMapModul, src->modNumber);
866  }
867  // nrnMapCoef = 1 in dst if dst is a subring of src
868  // nrnMapCoef = 0 in dst / src if src is a subring of dst
869  if (nrnMapCoef == NULL)
870  {
871  nrnMapCoef = (mpz_ptr) omAllocBin(gmp_nrz_bin);
872  mpz_init(nrnMapCoef);
873  }
874  if (mpz_divisible_p(nrnMapModul, dst->modNumber))
875  {
876  mpz_set_si(nrnMapCoef, 1);
877  }
878  else
879  if (nrnDivBy(NULL, (number) nrnMapModul,dst))
880  {
881  mpz_divexact(nrnMapCoef, dst->modNumber, nrnMapModul);
882  mpz_ptr tmp = dst->modNumber;
883  dst->modNumber = nrnMapModul;
884  if (!nrnIsUnit((number) nrnMapCoef,dst))
885  {
886  dst->modNumber = tmp;
887  nrnDelete((number*) &nrnMapModul, dst);
888  return NULL;
889  }
890  mpz_ptr inv = (mpz_ptr) nrnInvers((number) nrnMapCoef,dst);
891  dst->modNumber = tmp;
892  mpz_mul(nrnMapCoef, nrnMapCoef, inv);
893  mpz_mod(nrnMapCoef, nrnMapCoef, dst->modNumber);
894  nrnDelete((number*) &inv, dst);
895  }
896  else
897  {
898  nrnDelete((number*) &nrnMapModul, dst);
899  return NULL;
900  }
901  nrnDelete((number*) &nrnMapModul, dst);
902  if (nCoeff_is_Ring_2toM(src))
903  return nrnMap2toM;
904  else if (nCoeff_is_Zp(src))
905  return nrnMapZp;
906  else
907  return nrnMapModN;
908  }
909  }
910  return NULL; // default
911 }
#define omAllocBin(bin)
Definition: omAllocDecl.h:205
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_ModN(const coeffs r)
Definition: coeffs.h:753
static FORCE_INLINE BOOLEAN nCoeff_is_Zp(const coeffs r)
Definition: coeffs.h:834
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_Z(const coeffs r)
Definition: coeffs.h:759
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_2toM(const coeffs r)
Definition: coeffs.h:750
(), see rinteger.h, new impl.
Definition: coeffs.h:112
BOOLEAN nrnDivBy(number a, number b, const coeffs r)
Definition: rmodulon.cc:595
mpz_ptr nrnMapCoef
Definition: rmodulon.cc:742
number nrnMapZ(number from, const coeffs src, const coeffs dst)
Definition: rmodulon.cc:789
void nrnDelete(number *a, const coeffs r)
Definition: rmodulon.cc:243
number nrnMap2toM(number from, const coeffs, const coeffs dst)
Definition: rmodulon.cc:749
BOOLEAN nrnIsUnit(number a, const coeffs r)
Definition: rmodulon.cc:537
number nrnMapQ(number from, const coeffs src, const coeffs dst)
Definition: rmodulon.cc:823
omBin gmp_nrz_bin
Definition: rintegers.cc:76
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_PtoM(const coeffs r)
Definition: coeffs.h:756
number nrnMapGMP(number from, const coeffs, const coeffs dst)
Definition: rmodulon.cc:768
(mpz_ptr), see rmodulon,h
Definition: coeffs.h:115
(number), see longrat.h
Definition: coeffs.h:111
#define NULL
Definition: omList.c:10
number nrnMapZp(number from, const coeffs, const coeffs dst)
Definition: rmodulon.cc:758
number nrnInvers(number c, const coeffs r)
Definition: rmodulon.cc:318
number nrnMapModN(number from, const coeffs, const coeffs dst)
Definition: rmodulon.cc:744