My Project  debian-1:4.1.1-p2+ds-4build3
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 18 of file rmodulon.h.

Data Fields
mpz_ptr base
unsigned long exp

Function Documentation

◆ nrnInitChar()

BOOLEAN nrnInitChar ( coeffs  r,
void *   
)

Definition at line 903 of file rmodulon.cc.

904 {
905  assume( (getCoeffType(r) == n_Zn) || (getCoeffType (r) == n_Znm) );
906  ZnmInfo * info= (ZnmInfo *) p;
907  r->modBase= (mpz_ptr)nrnCopy((number)info->base, r); //this circumvents the problem
908  //in bigintmat.cc where we cannot create a "legal" nrn that can be freed.
909  //If we take a copy, we can do whatever we want.
910 
911  nrnInitExp (info->exp, r);
912 
913  /* next computation may yield wrong characteristic as r->modNumber
914  is a GMP number */
915  r->ch = mpz_get_ui(r->modNumber);
916 
917  r->is_field=FALSE;
918  r->is_domain=FALSE;
919  r->rep=n_rep_gmp;
920 
921 
922  r->cfCoeffString = nrnCoeffString;
923 
924  r->cfInit = nrnInit;
925  r->cfDelete = nrnDelete;
926  r->cfCopy = nrnCopy;
927  r->cfSize = nrnSize;
928  r->cfInt = nrnInt;
929  r->cfAdd = nrnAdd;
930  r->cfSub = nrnSub;
931  r->cfMult = nrnMult;
932  r->cfDiv = nrnDiv;
933  r->cfAnn = nrnAnn;
934  r->cfIntMod = nrnMod;
935  r->cfExactDiv = nrnDiv;
936  r->cfInpNeg = nrnNeg;
937  r->cfInvers = nrnInvers;
938  r->cfDivBy = nrnDivBy;
939  r->cfDivComp = nrnDivComp;
940  r->cfGreater = nrnGreater;
941  r->cfEqual = nrnEqual;
942  r->cfIsZero = nrnIsZero;
943  r->cfIsOne = nrnIsOne;
944  r->cfIsMOne = nrnIsMOne;
945  r->cfGreaterZero = nrnGreaterZero;
946  r->cfWriteLong = nrnWrite;
947  r->cfRead = nrnRead;
948  r->cfPower = nrnPower;
949  r->cfSetMap = nrnSetMap;
950  //r->cfNormalize = ndNormalize;
951  r->cfLcm = nrnLcm;
952  r->cfGcd = nrnGcd;
953  r->cfIsUnit = nrnIsUnit;
954  r->cfGetUnit = nrnGetUnit;
955  r->cfExtGcd = nrnExtGcd;
956  r->cfXExtGcd = nrnXExtGcd;
957  r->cfQuotRem = nrnQuotRem;
958  r->cfCoeffName = nrnCoeffName;
959  r->cfCoeffWrite = nrnCoeffWrite;
960  r->nCoeffIsEqual = nrnCoeffsEqual;
961  r->cfKillChar = nrnKillChar;
962  r->cfQuot1 = nrnQuot1;
963 #ifdef LDEBUG
964  r->cfDBTest = nrnDBTest;
965 #endif
966  return FALSE;
967 }

◆ nrnMapGMP()

number nrnMapGMP ( number  from,
const  coeffs,
const coeffs  dst 
)

Definition at line 680 of file rmodulon.cc.

681 {
682  mpz_ptr erg = (mpz_ptr)omAllocBin(gmp_nrz_bin);
683  mpz_init(erg);
684  mpz_mod(erg, (mpz_ptr)from, dst->modNumber);
685  return (number)erg;
686 }

◆ nrnSetMap()

nMapFunc nrnSetMap ( const coeffs  src,
const coeffs  dst 
)

Definition at line 744 of file rmodulon.cc.

745 {
746  /* dst = nrn */
747  if ((src->rep==n_rep_gmp) && nCoeff_is_Ring_Z(src))
748  {
749  return nrnMapZ;
750  }
751  if ((src->rep==n_rep_gap_gmp) /*&& nCoeff_is_Ring_Z(src)*/)
752  {
753  return nrnMapZ;
754  }
755  if (src->rep==n_rep_gap_rat) /*&& nCoeff_is_Q(src)) or Z*/
756  {
757  return nrnMapQ;
758  }
759  // Some type of Z/n ring / field
760  if (nCoeff_is_Ring_ModN(src) || nCoeff_is_Ring_PtoM(src) ||
761  nCoeff_is_Ring_2toM(src) || nCoeff_is_Zp(src))
762  {
763  if ( (!nCoeff_is_Zp(src))
764  && (mpz_cmp(src->modBase, dst->modBase) == 0)
765  && (src->modExponent == dst->modExponent)) return nrnMapGMP;
766  else
767  {
768  mpz_ptr nrnMapModul = (mpz_ptr) omAllocBin(gmp_nrz_bin);
769  // Computing the n of Z/n
770  if (nCoeff_is_Zp(src))
771  {
772  mpz_init_set_si(nrnMapModul, src->ch);
773  }
774  else
775  {
776  mpz_init(nrnMapModul);
777  mpz_set(nrnMapModul, src->modNumber);
778  }
779  // nrnMapCoef = 1 in dst if dst is a subring of src
780  // nrnMapCoef = 0 in dst / src if src is a subring of dst
781  if (nrnMapCoef == NULL)
782  {
783  nrnMapCoef = (mpz_ptr) omAllocBin(gmp_nrz_bin);
784  mpz_init(nrnMapCoef);
785  }
786  if (mpz_divisible_p(nrnMapModul, dst->modNumber))
787  {
788  mpz_set_ui(nrnMapCoef, 1);
789  }
790  else
791  if (nrnDivBy(NULL, (number) nrnMapModul,dst))
792  {
793  mpz_divexact(nrnMapCoef, dst->modNumber, nrnMapModul);
794  mpz_ptr tmp = dst->modNumber;
795  dst->modNumber = nrnMapModul;
796  if (!nrnIsUnit((number) nrnMapCoef,dst))
797  {
798  dst->modNumber = tmp;
799  nrnDelete((number*) &nrnMapModul, dst);
800  return NULL;
801  }
802  mpz_ptr inv = (mpz_ptr) nrnInvers((number) nrnMapCoef,dst);
803  dst->modNumber = tmp;
804  mpz_mul(nrnMapCoef, nrnMapCoef, inv);
805  mpz_mod(nrnMapCoef, nrnMapCoef, dst->modNumber);
806  nrnDelete((number*) &inv, dst);
807  }
808  else
809  {
810  nrnDelete((number*) &nrnMapModul, dst);
811  return NULL;
812  }
813  nrnDelete((number*) &nrnMapModul, dst);
814  if (nCoeff_is_Ring_2toM(src))
815  return nrnMap2toM;
816  else if (nCoeff_is_Zp(src))
817  return nrnMapZp;
818  else
819  return nrnMapModN;
820  }
821  }
822  return NULL; // default
823 }
getCoeffType
static FORCE_INLINE n_coeffType getCoeffType(const coeffs r)
Returns the type of coeffs domain.
Definition: coeffs.h:422
n_rep_gap_rat
@ n_rep_gap_rat
(number), see longrat.h
Definition: coeffs.h:112
nrnMult
static number nrnMult(number a, number b, const coeffs r)
Definition: rmodulon.cc:181
FALSE
#define FALSE
Definition: auxiliary.h:94
n_rep_gmp
@ n_rep_gmp
(mpz_ptr), see rmodulon,h
Definition: coeffs.h:116
n_Zn
@ n_Zn
only used if HAVE_RINGS is defined
Definition: coeffs.h:45
nrnGreaterZero
static BOOLEAN nrnGreaterZero(number k, const coeffs)
Definition: rmodulon.cc:481
nrnMapCoef
static mpz_ptr nrnMapCoef
Definition: rmodulon.cc:654
nCoeff_is_Zp
static FORCE_INLINE BOOLEAN nCoeff_is_Zp(const coeffs r)
Definition: coeffs.h:831
nrnCoeffName
static char * nrnCoeffName(const coeffs r)
Definition: rmodulon.cc:51
nCoeff_is_Ring_2toM
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_2toM(const coeffs r)
Definition: coeffs.h:747
nrnMapZp
static number nrnMapZp(number from, const coeffs, const coeffs dst)
Definition: rmodulon.cc:670
nrnIsMOne
static BOOLEAN nrnIsMOne(number a, const coeffs r)
Definition: rmodulon.cc:463
nrnDivBy
static BOOLEAN nrnDivBy(number a, number b, const coeffs r)
Definition: rmodulon.cc:507
nrnSize
static int nrnSize(number a, const coeffs)
Definition: rmodulon.cc:164
nrnGetUnit
static number nrnGetUnit(number k, const coeffs r)
Definition: rmodulon.cc:326
nrnInvers
static number nrnInvers(number c, const coeffs r)
Definition: rmodulon.cc:232
nrnInt
static long nrnInt(number &n, const coeffs)
Definition: rmodulon.cc:173
nrnIsZero
static BOOLEAN nrnIsZero(number a, const coeffs)
Definition: rmodulon.cc:216
nrnMod
static number nrnMod(number a, number b, const coeffs r)
Definition: rmodulon.cc:562
nrnGreater
static BOOLEAN nrnGreater(number a, number b, const coeffs)
Definition: rmodulon.cc:476
omAllocBin
#define omAllocBin(bin)
Definition: omAllocDecl.h:205
n_Znm
@ n_Znm
only used if HAVE_RINGS is defined
Definition: coeffs.h:46
nrnInitExp
static void nrnInitExp(unsigned long m, coeffs r)
Definition: rmodulon.cc:841
nrnSetMap
nMapFunc nrnSetMap(const coeffs src, const coeffs dst)
Definition: rmodulon.cc:744
nrnQuotRem
static number nrnQuotRem(number a, number b, number *rem, const coeffs r)
Definition: rmodulon.cc:618
nrnMap2toM
static number nrnMap2toM(number from, const coeffs, const coeffs dst)
Definition: rmodulon.cc:661
nrnDiv
static number nrnDiv(number a, number b, const coeffs r)
Definition: rmodulon.cc:529
gmp_nrz_bin
omBin gmp_nrz_bin
Definition: rintegers.cc:31
nrnIsOne
static BOOLEAN nrnIsOne(number a, const coeffs)
Definition: rmodulon.cc:313
nrnSub
static number nrnSub(number a, number b, const coeffs r)
Definition: rmodulon.cc:207
nCoeff_is_Ring_ModN
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_ModN(const coeffs r)
Definition: coeffs.h:750
nrnQuot1
static coeffs nrnQuot1(number c, const coeffs r)
Definition: rmodulon.cc:93
nrnGcd
static number nrnGcd(number a, number b, const coeffs r)
Definition: rmodulon.cc:244
nrnRead
static const char * nrnRead(const char *s, number *a, const coeffs r)
Definition: rmodulon.cc:891
nrnKillChar
static void nrnKillChar(coeffs r)
Definition: rmodulon.cc:85
nrnIsUnit
static BOOLEAN nrnIsUnit(number a, const coeffs r)
Definition: rmodulon.cc:486
nCoeff_is_Ring_PtoM
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_PtoM(const coeffs r)
Definition: coeffs.h:753
nrnMapModN
static number nrnMapModN(number from, const coeffs, const coeffs dst)
Definition: rmodulon.cc:656
nrnLcm
static number nrnLcm(number a, number b, const coeffs r)
Definition: rmodulon.cc:264
nrnDivComp
static int nrnDivComp(number a, number b, const coeffs r)
Definition: rmodulon.cc:521
nrnAnn
static number nrnAnn(number k, const coeffs r)
Definition: rmodulon.cc:494
nrnCopy
static number nrnCopy(number a, const coeffs)
Definition: rmodulon.cc:138
nrnMapZ
static number nrnMapZ(number from, const coeffs src, const coeffs dst)
Definition: rmodulon.cc:710
nrnMapQ
static number nrnMapQ(number from, const coeffs src, const coeffs dst)
Definition: rmodulon.cc:688
nrnCoeffString
static char * nrnCoeffString(const coeffs r)
Definition: rmodulon.cc:73
nrnMapGMP
number nrnMapGMP(number from, const coeffs, const coeffs dst)
Definition: rmodulon.cc:680
assume
#define assume(x)
Definition: mod2.h:390
NULL
#define NULL
Definition: omList.c:10
nrnXExtGcd
static number nrnXExtGcd(number a, number b, number *s, number *t, number *u, number *v, const coeffs r)
Definition: rmodulon.cc:372
nrnInit
static number nrnInit(long i, const coeffs r)
Definition: rmodulon.cc:148
p
int p
Definition: cfModGcd.cc:4019
ZnmInfo
Definition: rmodulon.h:18
nrnExtGcd
static number nrnExtGcd(number a, number b, number *s, number *t, const coeffs r)
Definition: rmodulon.cc:297
nrnCoeffWrite
static void nrnCoeffWrite(const coeffs r, BOOLEAN)
Definition: rmodulon.cc:38
nrnNeg
static number nrnNeg(number c, const coeffs r)
Definition: rmodulon.cc:224
nrnCoeffsEqual
static BOOLEAN nrnCoeffsEqual(const coeffs r, n_coeffType n, void *parameter)
Definition: rmodulon.cc:67
nCoeff_is_Ring_Z
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_Z(const coeffs r)
Definition: coeffs.h:756
info
const ExtensionInfo & info
< [in] sqrfree poly
Definition: facFqFactorize.h:38
nrnAdd
static number nrnAdd(number a, number b, const coeffs r)
Definition: rmodulon.cc:198
nrnPower
static void nrnPower(number a, int i, number *result, const coeffs r)
Definition: rmodulon.cc:190
nrnDBTest
BOOLEAN nrnDBTest(number a, const char *f, const int l, const coeffs r)
Definition: rmodulon.cc:852
nrnWrite
#define nrnWrite
Definition: rmodulon.cc:28
nrnEqual
static BOOLEAN nrnEqual(number a, number b, const coeffs)
Definition: rmodulon.cc:321
nrnDelete
static void nrnDelete(number *a, const coeffs)
Definition: rmodulon.cc:156
n_rep_gap_gmp
@ n_rep_gap_gmp
(), see rinteger.h, new impl.
Definition: coeffs.h:113