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

§ ZnmInfo

struct ZnmInfo

Definition at line 19 of file rmodulon.h.

Data Fields
mpz_ptr base
unsigned long exp

Function Documentation

§ nrnInitChar()

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
const ExtensionInfo & info
< [in] sqrfree poly
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
(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

§ nrnMapGMP()

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

§ nrnSetMap()

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