Typedefs | Functions | Variables
flintcf_Zn.cc File Reference
#include <ctype.h>
#include <misc/auxiliary.h>
#include <flint/flint.h>
#include <flint/nmod_poly.h>
#include <factory/factory.h>
#include <omalloc/omalloc.h>
#include <coeffs/coeffs.h>
#include <coeffs/numbers.h>
#include <coeffs/longrat.h>
#include <coeffs/modulop.h>
#include <coeffs/flintcf_Zn.h>

Go to the source code of this file.

Typedefs

typedef nmod_poly_struct * nmod_poly_ptr
 

Functions

static const char * Eati (const char *s, int *i)
 
static void CoeffWrite (const coeffs r, BOOLEAN details)
 
static BOOLEAN CoeffIsEqual (const coeffs r, n_coeffType n, void *parameter)
 
static void KillChar (coeffs r)
 
static void SetChar (const coeffs r)
 
static number Mult (number a, number b, const coeffs c)
 
static number Sub (number a, number b, const coeffs c)
 
static number Add (number a, number b, const coeffs c)
 
static number Div (number a, number b, const coeffs c)
 
static number ExactDiv (number a, number b, const coeffs c)
 
static number IntMod (number a, number b, const coeffs c)
 
static number Init (long i, const coeffs r)
 
static number InitMPZ (mpz_t i, const coeffs r)
 
static int Size (number n, const coeffs r)
 
static long Int (number &n, const coeffs r)
 
static void MPZ (mpz_t result, number &n, const coeffs r)
 
static number Neg (number a, const coeffs r)
 
static number Invers (number a, const coeffs r)
 
static number Copy (number a, const coeffs r)
 
static BOOLEAN IsOne (number a, const coeffs r)
 
static BOOLEAN IsZero (number a, const coeffs r)
 
static void WriteShort (number a, const coeffs r)
 
static const char * Read (const char *st, number *a, const coeffs r)
 
static void Normalize (number &a, const coeffs r)
 
static BOOLEAN Greater (number a, number b, const coeffs r)
 
static BOOLEAN Equal (number a, number b, const coeffs r)
 
static BOOLEAN IsMOne (number k, const coeffs r)
 
static BOOLEAN GreaterZero (number k, const coeffs r)
 
static void Power (number a, int i, number *result, const coeffs r)
 
static number Gcd (number a, number b, const coeffs r)
 
static number ExtGcd (number a, number b, number *s, number *t, const coeffs r)
 
static number Lcm (number a, number b, const coeffs r)
 
static void Delete (number *a, const coeffs r)
 
static nMapFunc SetMap (const coeffs src, const coeffs dst)
 
static number Init_bigint (number i, const coeffs dummy, const coeffs dst)
 
static number Farey (number p, number n, const coeffs)
 
static number ChineseRemainder (number *x, number *q, int rl, BOOLEAN sym, CFArray &inv_cache, const coeffs)
 
static int ParDeg (number x, const coeffs r)
 
static number Parameter (const int i, const coeffs r)
 
static number ConvFactoryNSingN (const CanonicalForm n, const coeffs r)
 
static CanonicalForm ConvSingNFactoryN (number n, BOOLEAN setChar, const coeffs r)
 
static char * CoeffName (const coeffs r)
 
static char * CoeffString (const coeffs r)
 
static void WriteFd (number a, FILE *f, const coeffs)
 
static number ReadFd (s_buff f, const coeffs r)
 
static BOOLEAN DBTest (number a, const char *f, const int l, const coeffs r)
 
BOOLEAN flintZn_InitChar (coeffs cf, void *infoStruct)
 

Variables

static char CoeffName_flint_Zn [20]
 

Typedef Documentation

§ nmod_poly_ptr

typedef nmod_poly_struct* nmod_poly_ptr

Definition at line 26 of file flintcf_Zn.cc.

Function Documentation

§ Add()

static number Add ( number  a,
number  b,
const coeffs  c 
)
static

Definition at line 85 of file flintcf_Zn.cc.

86 {
87  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
88  nmod_poly_init(res,c->ch);
89  nmod_poly_add(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
90  return (number)res;
91 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const poly b
Definition: syzextra.cc:213

§ ChineseRemainder()

static number ChineseRemainder ( number *  x,
number *  q,
int  rl,
BOOLEAN  sym,
CFArray inv_cache,
const coeffs   
)
static

Definition at line 400 of file flintcf_Zn.cc.

401 {
402  WerrorS("not yet: ChineseRemainder");
403 }
void WerrorS(const char *s)
Definition: feFopen.cc:24

§ CoeffIsEqual()

static BOOLEAN CoeffIsEqual ( const coeffs  r,
n_coeffType  n,
void *  parameter 
)
static

Definition at line 56 of file flintcf_Zn.cc.

57 {
58  flintZn_struct *pp=(flintZn_struct*)parameter;
59  return (r->type==n) &&(r->ch==pp->ch)
60  &&(r->pParameterNames!=NULL)
61  &&(strcmp(r->pParameterNames[0],pp->name)==0);
62 }
poly pp
Definition: myNF.cc:296
#define NULL
Definition: omList.c:10

§ CoeffName()

static char* CoeffName ( const coeffs  r)
static

Definition at line 424 of file flintcf_Zn.cc.

425 {
426  sprintf(CoeffName_flint_Zn,"flint:Z/%d[%s]",r->ch,r->pParameterNames[0]);
427  return (char*)CoeffName_flint_Zn;
428 }
static char CoeffName_flint_Zn[20]
Definition: flintcf_Zn.cc:51

§ CoeffString()

static char* CoeffString ( const coeffs  r)
static

Definition at line 429 of file flintcf_Zn.cc.

430 {
431  char *buf=(char*)omAlloc(12+10 /*ch*/+strlen(r->pParameterNames[0]));
432  sprintf(buf,"flintZ(%d,\"%s\")",r->ch,r->pParameterNames[0]);
433  return buf;
434 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
int status int void * buf
Definition: si_signals.h:59

§ CoeffWrite()

static void CoeffWrite ( const coeffs  r,
BOOLEAN  details 
)
static

Definition at line 52 of file flintcf_Zn.cc.

53 {
54  Print("// coefficients: flint:Z/%d[%s]\n",r->ch,r->pParameterNames[0]);
55 }
#define Print
Definition: emacs.cc:83

§ ConvFactoryNSingN()

static number ConvFactoryNSingN ( const CanonicalForm  n,
const coeffs  r 
)
static

Definition at line 417 of file flintcf_Zn.cc.

418 {
419 }

§ ConvSingNFactoryN()

static CanonicalForm ConvSingNFactoryN ( number  n,
BOOLEAN  setChar,
const coeffs  r 
)
static

Definition at line 420 of file flintcf_Zn.cc.

421 {
422  WerrorS("not yet: ConvSingNFactoryN");
423 }
void WerrorS(const char *s)
Definition: feFopen.cc:24

§ Copy()

static number Copy ( number  a,
const coeffs  r 
)
static

Definition at line 205 of file flintcf_Zn.cc.

206 {
207  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
208  nmod_poly_init(res,r->ch);
209  nmod_poly_set(res,(nmod_poly_ptr)a);
210  return (number)res;
211 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26

§ DBTest()

static BOOLEAN DBTest ( number  a,
const char *  f,
const int  l,
const coeffs  r 
)
static

Definition at line 462 of file flintcf_Zn.cc.

463 {
464  return TRUE;
465 }
#define TRUE
Definition: auxiliary.h:101

§ Delete()

static void Delete ( number *  a,
const coeffs  r 
)
static

Definition at line 356 of file flintcf_Zn.cc.

357 {
358  if ((*a)!=NULL)
359  {
361  omFree(*a);
362  *a=NULL;
363  }
364 }
const poly a
Definition: syzextra.cc:212
nmod_poly_clear(FLINTmipo)
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
#define omFree(addr)
Definition: omAllocDecl.h:261
#define NULL
Definition: omList.c:10

§ Div()

static number Div ( number  a,
number  b,
const coeffs  c 
)
static

Definition at line 92 of file flintcf_Zn.cc.

93 {
94  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
95  nmod_poly_init(res,c->ch);
96  if(nmod_poly_is_zero((nmod_poly_ptr)b))
97  {
99  }
100  else
101  {
102  nmod_poly_div(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
103  nmod_poly_t mod;
104  nmod_poly_init(mod,c->ch);
105  nmod_poly_rem(mod,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
106  if (!nmod_poly_is_zero((nmod_poly_ptr)mod))
107  {
108  WerrorS("cannot divide");
109  }
110  nmod_poly_clear(mod);
111  }
112  return (number)res;
113 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
CF_NO_INLINE CanonicalForm mod(const CanonicalForm &, const CanonicalForm &)
Definition: cf_inline.cc:564
nmod_poly_clear(FLINTmipo)
void WerrorS(const char *s)
Definition: feFopen.cc:24
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const char *const nDivBy0
Definition: numbers.h:83
const poly b
Definition: syzextra.cc:213

§ Eati()

static const char* Eati ( const char *  s,
int *  i 
)
static

Definition at line 31 of file flintcf_Zn.cc.

32 {
33 
34  if (((*s) >= '0') && ((*s) <= '9'))
35  {
36  unsigned long ii=0L;
37  do
38  {
39  ii *= 10;
40  ii += *s++ - '0';
41  }
42  while (((*s) >= '0') && ((*s) <= '9'));
43  *i=(int)ii;
44  }
45  else (*i) = 1;
46  return s;
47 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
int i
Definition: cfEzgcd.cc:123

§ Equal()

static BOOLEAN Equal ( number  a,
number  b,
const coeffs  r 
)
static

Definition at line 305 of file flintcf_Zn.cc.

306 {
307  return (nmod_poly_equal((nmod_poly_ptr)a,(nmod_poly_ptr)b));
308 }
const poly a
Definition: syzextra.cc:212
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const poly b
Definition: syzextra.cc:213

§ ExactDiv()

static number ExactDiv ( number  a,
number  b,
const coeffs  c 
)
static

Definition at line 114 of file flintcf_Zn.cc.

115 {
116  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
117  nmod_poly_init(res,c->ch);
118  if(nmod_poly_is_zero((nmod_poly_ptr)b))
119  {
120  WerrorS(nDivBy0);
121  }
122  else
123  nmod_poly_div(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
124  return (number)res;
125 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
void WerrorS(const char *s)
Definition: feFopen.cc:24
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const char *const nDivBy0
Definition: numbers.h:83
const poly b
Definition: syzextra.cc:213

§ ExtGcd()

static number ExtGcd ( number  a,
number  b,
number *  s,
number *  t,
const coeffs  r 
)
static

Definition at line 343 of file flintcf_Zn.cc.

344 {
345  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
346  nmod_poly_init(res,r->ch);
347  nmod_poly_init((nmod_poly_ptr)*s,r->ch);
348  nmod_poly_init((nmod_poly_ptr)*t,r->ch);
349  nmod_poly_xgcd(res,(nmod_poly_ptr)*s,(nmod_poly_ptr)*t,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
350  return (number)res;
351 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const CanonicalForm int s
Definition: facAbsFact.cc:55
const poly a
Definition: syzextra.cc:212
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const poly b
Definition: syzextra.cc:213

§ Farey()

static number Farey ( number  p,
number  n,
const coeffs   
)
static

Definition at line 396 of file flintcf_Zn.cc.

397 {
398  WerrorS("not yet: Farey");
399 }
void WerrorS(const char *s)
Definition: feFopen.cc:24

§ flintZn_InitChar()

BOOLEAN flintZn_InitChar ( coeffs  cf,
void *  infoStruct 
)

Definition at line 467 of file flintcf_Zn.cc.

468 {
469  flintZn_struct *pp=(flintZn_struct*)infoStruct;
470  cf->ch=pp->ch;
471 
472  cf->cfCoeffString = CoeffString;
473  cf->cfCoeffName = CoeffName;
474  cf->cfCoeffWrite = CoeffWrite;
475  cf->nCoeffIsEqual = CoeffIsEqual;
476  cf->cfKillChar = KillChar;
477  cf->cfSetChar = SetChar;
478  cf->cfMult = Mult;
479  cf->cfSub = Sub;
480  cf->cfAdd = Add;
481  cf->cfDiv = Div;
482  cf->cfExactDiv = ExactDiv; // ???
483  cf->cfInit =Init;
484  cf->cfInitMPZ =InitMPZ;
485  cf->cfSize = Size;
486  cf->cfInt = Int;
487  cf->cfMPZ = MPZ;
488  cf->cfInpNeg = Neg;
489  cf->cfInvers = Invers;
490  cf->cfCopy = Copy;
491  cf->cfRePart = Copy;
492  // default: cf->cfImPart = ndReturn0;
493  cf->cfWriteLong = WriteShort; //WriteLong;
494  cf->cfWriteShort = WriteShort;
495  cf->cfRead = Read;
496  cf->cfNormalize = Normalize;
497 
498  //cf->cfDivComp=
499  //cf->cfIsUnit=
500  //cf->cfGetUnit=
501  //cf->cfDivBy=
502 
503  cf->cfGreater=Greater;
504  cf->cfEqual =Equal;
505  cf->cfIsZero =IsZero;
506  cf->cfIsOne =IsOne;
507  cf->cfIsMOne =IsMOne;
508  cf->cfGreaterZero=GreaterZero;
509 
510  cf->cfPower = Power;
511  //default: cf->cfGetDenom = GetDenom;
512  //default: cf->cfGetNumerator = GetNumerator;
513  cf->cfGcd = Gcd;
514  cf->cfExtGcd = ExtGcd;
515  cf->cfLcm = Lcm;
516  cf->cfDelete = Delete;
517  cf->cfSetMap = SetMap;
518  // default: cf->cfInpMult
519  // default: cf->cfInpAdd
520  cf->cfFarey =Farey;
521  cf->cfChineseRemainder=ChineseRemainder;
522  cf->cfParDeg = ParDeg;
523  cf->cfParameter = Parameter;
524  // cf->cfClearContent = ClearContent;
525  // cf->cfClearDenominators = ClearDenominators;
526  cf->convFactoryNSingN=ConvFactoryNSingN;
527  cf->convSingNFactoryN=ConvSingNFactoryN;
528  cf->cfWriteFd = WriteFd;
529  cf->cfReadFd = ReadFd;
530 #ifdef LDEBUG
531  cf->cfDBTest = DBTest;
532 #endif
533 
534  cf->iNumberOfParameters = 1;
535  char **pn=(char**)omAlloc0(sizeof(char*));
536  pn[0]=(char*)omStrDup(pp->name);
537  cf->pParameterNames = (const char **)pn;
538  cf->has_simple_Inverse= FALSE;
539  cf->has_simple_Alloc= FALSE;
540  cf->is_field=FALSE;
541 
542  return FALSE;
543 }
static void WriteShort(number a, const coeffs r)
Definition: flintcf_Zn.cc:223
static number Mult(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:71
static void KillChar(coeffs r)
Definition: flintcf_Zn.cc:63
static number Sub(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:78
static const char * Read(const char *st, number *a, const coeffs r)
Definition: flintcf_Zn.cc:253
static BOOLEAN DBTest(number a, const char *f, const int l, const coeffs r)
Definition: flintcf_Zn.cc:462
static number Init(long i, const coeffs r)
Definition: flintcf_Zn.cc:133
static void Delete(number *a, const coeffs r)
Definition: flintcf_Zn.cc:356
#define FALSE
Definition: auxiliary.h:97
static number Lcm(number a, number b, const coeffs r)
Definition: flintcf_Zn.cc:352
static number Farey(number p, number n, const coeffs)
Definition: flintcf_Zn.cc:396
static number ExtGcd(number a, number b, number *s, number *t, const coeffs r)
Definition: flintcf_Zn.cc:343
static long Int(number &n, const coeffs r)
Definition: flintcf_Zn.cc:157
static BOOLEAN IsOne(number a, const coeffs r)
Definition: flintcf_Zn.cc:313
static BOOLEAN CoeffIsEqual(const coeffs r, n_coeffType n, void *parameter)
Definition: flintcf_Zn.cc:56
static number InitMPZ(mpz_t i, const coeffs r)
Definition: flintcf_Zn.cc:142
poly pp
Definition: myNF.cc:296
static number ReadFd(s_buff f, const coeffs r)
Definition: flintcf_Zn.cc:447
static BOOLEAN Greater(number a, number b, const coeffs r)
Definition: flintcf_Zn.cc:290
static int Size(number n, const coeffs r)
Definition: flintcf_Zn.cc:153
static void Normalize(number &a, const coeffs r)
Definition: flintcf_Zn.cc:287
static int ParDeg(number x, const coeffs r)
Definition: flintcf_Zn.cc:404
static void Power(number a, int i, number *result, const coeffs r)
Definition: flintcf_Zn.cc:329
static void WriteFd(number a, FILE *f, const coeffs)
Definition: flintcf_Zn.cc:435
static number ChineseRemainder(number *x, number *q, int rl, BOOLEAN sym, CFArray &inv_cache, const coeffs)
Definition: flintcf_Zn.cc:400
static void CoeffWrite(const coeffs r, BOOLEAN details)
Definition: flintcf_Zn.cc:52
static BOOLEAN GreaterZero(number k, const coeffs r)
Definition: flintcf_Zn.cc:323
static number Neg(number a, const coeffs r)
Definition: flintcf_Zn.cc:177
static number Parameter(const int i, const coeffs r)
Definition: flintcf_Zn.cc:408
static number ConvFactoryNSingN(const CanonicalForm n, const coeffs r)
Definition: flintcf_Zn.cc:417
static BOOLEAN IsZero(number a, const coeffs r)
Definition: flintcf_Zn.cc:309
static char * CoeffName(const coeffs r)
Definition: flintcf_Zn.cc:424
static char * CoeffString(const coeffs r)
Definition: flintcf_Zn.cc:429
static BOOLEAN IsMOne(number k, const coeffs r)
Definition: flintcf_Zn.cc:317
static number Add(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:85
static void MPZ(mpz_t result, number &n, const coeffs r)
Definition: flintcf_Zn.cc:167
static number Div(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:92
static number Invers(number a, const coeffs r)
Definition: flintcf_Zn.cc:182
static number Gcd(number a, number b, const coeffs r)
Definition: flintcf_Zn.cc:336
static CanonicalForm ConvSingNFactoryN(number n, BOOLEAN setChar, const coeffs r)
Definition: flintcf_Zn.cc:420
static void SetChar(const coeffs r)
Definition: flintcf_Zn.cc:67
static number ExactDiv(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:114
static nMapFunc SetMap(const coeffs src, const coeffs dst)
Definition: flintcf_Zn.cc:365
#define omAlloc0(size)
Definition: omAllocDecl.h:211
static number Copy(number a, const coeffs r)
Definition: flintcf_Zn.cc:205
static BOOLEAN Equal(number a, number b, const coeffs r)
Definition: flintcf_Zn.cc:305
#define omStrDup(s)
Definition: omAllocDecl.h:263

§ Gcd()

static number Gcd ( number  a,
number  b,
const coeffs  r 
)
static

Definition at line 336 of file flintcf_Zn.cc.

337 {
338  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
339  nmod_poly_init(res,r->ch);
340  nmod_poly_gcd(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
341  return (number)res;
342 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const poly b
Definition: syzextra.cc:213

§ Greater()

static BOOLEAN Greater ( number  a,
number  b,
const coeffs  r 
)
static

Definition at line 290 of file flintcf_Zn.cc.

291 {
292  if (nmod_poly_length((nmod_poly_ptr)a)>nmod_poly_length((nmod_poly_ptr)b))
293  return TRUE;
294  else if (nmod_poly_length((nmod_poly_ptr)a)<nmod_poly_length((nmod_poly_ptr)b))
295  return FALSE;
296  for(int i=nmod_poly_length((nmod_poly_ptr)a);i>=0;i--)
297  {
298  slong ac=nmod_poly_get_coeff_ui((nmod_poly_ptr)a,i);
299  slong bc=nmod_poly_get_coeff_ui((nmod_poly_ptr)b,i);
300  if (ac>bc) return TRUE;
301  else if (ac<bc) return FALSE;
302  }
303  return FALSE;
304 }
const poly a
Definition: syzextra.cc:212
#define FALSE
Definition: auxiliary.h:97
#define TRUE
Definition: auxiliary.h:101
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int i
Definition: cfEzgcd.cc:123
#define slong
const poly b
Definition: syzextra.cc:213

§ GreaterZero()

static BOOLEAN GreaterZero ( number  k,
const coeffs  r 
)
static

Definition at line 323 of file flintcf_Zn.cc.

324 {
325  // does it have a leading sign?
326  // no: 0 and 1 do not have, everything else is in (...)
327  return TRUE;
328 }
#define TRUE
Definition: auxiliary.h:101

§ Init()

static number Init ( long  i,
const coeffs  r 
)
static

Definition at line 133 of file flintcf_Zn.cc.

134 {
135  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
136  nmod_poly_init(res,r->ch);
137  i= i%r->ch;
138  if (i<0) i+=r->ch;
139  nmod_poly_set_coeff_ui(res,0,i);
140  return (number)res;
141 }
nmod_poly_init(FLINTmipo, getCharacteristic())
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int i
Definition: cfEzgcd.cc:123

§ Init_bigint()

static number Init_bigint ( number  i,
const coeffs  dummy,
const coeffs  dst 
)
static

Definition at line 376 of file flintcf_Zn.cc.

377 {
378  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
379  nmod_poly_init(res,dst->ch);
380  long ii;
381  if (SR_HDL(i) & SR_INT)
382  {
383  ii=SR_TO_INT(i) % dst->ch;
384  }
385  else
386  {
387  mpz_t tmp;
388  mpz_init(tmp);
389  ii=mpz_mod_ui(tmp,i->z,dst->ch);
390  mpz_clear(tmp);
391  }
392  if (ii<0) ii+=dst->ch;
393  nmod_poly_set_coeff_ui(res,0,ii);
394  return (number)res;
395 }
nmod_poly_init(FLINTmipo, getCharacteristic())
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int i
Definition: cfEzgcd.cc:123
#define SR_TO_INT(SR)
Definition: longrat.h:70
#define SR_INT
Definition: longrat.h:68
#define SR_HDL(A)
Definition: tgb.cc:35

§ InitMPZ()

static number InitMPZ ( mpz_t  i,
const coeffs  r 
)
static

Definition at line 142 of file flintcf_Zn.cc.

143 {
144  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
145  nmod_poly_init(res,r->ch);
146  mpz_t tmp;
147  mpz_init(tmp);
148  slong ii=mpz_mod_ui(tmp,i,r->ch);
149  mpz_clear(tmp);
150  nmod_poly_set_coeff_ui(res,0,ii);
151  return (number)res;
152 }
nmod_poly_init(FLINTmipo, getCharacteristic())
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int i
Definition: cfEzgcd.cc:123
#define slong

§ Int()

static long Int ( number &  n,
const coeffs  r 
)
static

Definition at line 157 of file flintcf_Zn.cc.

158 {
159  if (nmod_poly_degree((nmod_poly_ptr)n)==0)
160  {
161  slong m;
162  m=nmod_poly_get_coeff_ui((nmod_poly_ptr)n,0);
163  return (long)m;
164  }
165  return 0;
166 }
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int m
Definition: cfEzgcd.cc:119
#define slong

§ IntMod()

static number IntMod ( number  a,
number  b,
const coeffs  c 
)
static

Definition at line 126 of file flintcf_Zn.cc.

127 {
128  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
129  nmod_poly_init(res,c->ch);
130  nmod_poly_rem(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
131  return (number)res;
132 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const poly b
Definition: syzextra.cc:213

§ Invers()

static number Invers ( number  a,
const coeffs  r 
)
static

Definition at line 182 of file flintcf_Zn.cc.

183 {
184  if(nmod_poly_is_zero((nmod_poly_ptr)a))
185  {
186  WerrorS(nDivBy0);
187  return NULL;
188  }
189  if (nmod_poly_degree((nmod_poly_ptr)a)==0)
190  {
191  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
192  nmod_poly_init(res,r->ch);
193  slong c=nmod_poly_get_coeff_ui((nmod_poly_ptr)a,0);
194  extern number nvInvers (number c, const coeffs r);
195  c=(slong)nvInvers((number)c,r);
196  nmod_poly_set_coeff_ui((nmod_poly_ptr)a,0,c);
197  return (number)res;
198  }
199  else
200  {
201  WerrorS("not invertable");
202  return NULL;
203  }
204 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
number nvInvers(number c, const coeffs r)
Definition: modulop.cc:896
void WerrorS(const char *s)
Definition: feFopen.cc:24
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const ring r
Definition: syzextra.cc:208
The main handler for Singular numbers which are suitable for Singular polynomials.
const char *const nDivBy0
Definition: numbers.h:83
#define NULL
Definition: omList.c:10
#define slong

§ IsMOne()

static BOOLEAN IsMOne ( number  k,
const coeffs  r 
)
static

Definition at line 317 of file flintcf_Zn.cc.

318 {
319  if (nmod_poly_length((nmod_poly_ptr)k)>0) return FALSE;
320  slong m=nmod_poly_get_coeff_ui((nmod_poly_ptr)k,0);
321  return (m+1==r->ch);
322 }
#define FALSE
Definition: auxiliary.h:97
int k
Definition: cfEzgcd.cc:93
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int m
Definition: cfEzgcd.cc:119
#define slong

§ IsOne()

static BOOLEAN IsOne ( number  a,
const coeffs  r 
)
static

Definition at line 313 of file flintcf_Zn.cc.

314 {
315  return nmod_poly_is_one((nmod_poly_ptr)a);
316 }
const poly a
Definition: syzextra.cc:212
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26

§ IsZero()

static BOOLEAN IsZero ( number  a,
const coeffs  r 
)
static

Definition at line 309 of file flintcf_Zn.cc.

310 {
311  return nmod_poly_is_zero((nmod_poly_ptr)a);
312 }
const poly a
Definition: syzextra.cc:212
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26

§ KillChar()

static void KillChar ( coeffs  r)
static

Definition at line 63 of file flintcf_Zn.cc.

64 {
65  // not yet
66 }

§ Lcm()

static number Lcm ( number  a,
number  b,
const coeffs  r 
)
static

Definition at line 352 of file flintcf_Zn.cc.

353 {
354  WerrorS("not yet: Lcm");
355 }
void WerrorS(const char *s)
Definition: feFopen.cc:24

§ MPZ()

static void MPZ ( mpz_t  result,
number &  n,
const coeffs  r 
)
static

Definition at line 167 of file flintcf_Zn.cc.

168 {
169  mpz_init(result);
170  if (nmod_poly_degree((nmod_poly_ptr)n)==0)
171  {
172  slong m;
173  m=nmod_poly_get_coeff_ui((nmod_poly_ptr)n,0);
174  mpz_set_ui(result,m);
175  }
176 }
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int m
Definition: cfEzgcd.cc:119
#define slong
return result
Definition: facAbsBiFact.cc:76

§ Mult()

static number Mult ( number  a,
number  b,
const coeffs  c 
)
static

Definition at line 71 of file flintcf_Zn.cc.

72 {
73  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(*res));
74  nmod_poly_init(res,c->ch);
75  nmod_poly_mul(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
76  return (number)res;
77 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const poly b
Definition: syzextra.cc:213

§ Neg()

static number Neg ( number  a,
const coeffs  r 
)
static

Definition at line 177 of file flintcf_Zn.cc.

178 {
179  nmod_poly_neg((nmod_poly_ptr)a,(nmod_poly_ptr)a);
180  return a;
181 }
const poly a
Definition: syzextra.cc:212
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26

§ Normalize()

static void Normalize ( number &  a,
const coeffs  r 
)
static

Definition at line 287 of file flintcf_Zn.cc.

288 {
289 }

§ Parameter()

static number Parameter ( const int  i,
const coeffs  r 
)
static

Definition at line 408 of file flintcf_Zn.cc.

409 {
410  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
411  nmod_poly_init(res,r->ch);
412  nmod_poly_set_coeff_ui(res,1,1);
413  return (number)res;
414 }
nmod_poly_init(FLINTmipo, getCharacteristic())
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26

§ ParDeg()

static int ParDeg ( number  x,
const coeffs  r 
)
static

Definition at line 404 of file flintcf_Zn.cc.

405 {
406  return nmod_poly_degree((nmod_poly_ptr)x);
407 }
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
Variable x
Definition: cfModGcd.cc:4023

§ Power()

static void Power ( number  a,
int  i,
number *  result,
const coeffs  r 
)
static

Definition at line 329 of file flintcf_Zn.cc.

330 {
331  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
332  nmod_poly_init(res,r->ch);
333  *result=(number)res;
334  nmod_poly_pow((nmod_poly_ptr)(*result),(nmod_poly_ptr)a,i);
335 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int i
Definition: cfEzgcd.cc:123
return result
Definition: facAbsBiFact.cc:76

§ Read()

static const char* Read ( const char *  st,
number *  a,
const coeffs  r 
)
static

Definition at line 253 of file flintcf_Zn.cc.

254 {
255 // we only read "monomials" (i.e. [-][digits][parameter]),
256 // everythings else (+,*,^,()) is left to the singular interpreter
257  const char *s=st;
258  *a=(number)omAlloc(sizeof(nmod_poly_t));
259  nmod_poly_init((nmod_poly_ptr)(*a),r->ch);
260  BOOLEAN neg=FALSE;
261  if (*s=='-') { neg=TRUE; s++;}
262  if (isdigit(*s))
263  {
264  int z;
265  s=Eati((char *)s, &z);
266  nmod_poly_set_coeff_ui((nmod_poly_ptr)(*a),0,z);
267  }
268  else if(strncmp(s,r->pParameterNames[0],strlen(r->pParameterNames[0]))==0)
269  {
270  nmod_poly_set_coeff_ui((nmod_poly_ptr)(*a),1,1);
271  s+=strlen(r->pParameterNames[0]);
272  if(isdigit(*s))
273  {
274  int i=1;
275  s=Eati(s,&i);
276  if (i!=1)
277  {
278  nmod_poly_set_coeff_ui((nmod_poly_ptr)(*a),1,0);
279  nmod_poly_set_coeff_ui((nmod_poly_ptr)(*a),i,1);
280  }
281  }
282  }
283  if (neg)
284  nmod_poly_neg((nmod_poly_ptr)(*a),(nmod_poly_ptr)(*a));
285  return s;
286 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const CanonicalForm int s
Definition: facAbsFact.cc:55
const poly a
Definition: syzextra.cc:212
#define FALSE
Definition: auxiliary.h:97
#define TRUE
Definition: auxiliary.h:101
#define omAlloc(size)
Definition: omAllocDecl.h:210
static const char * Eati(const char *s, int *i)
Definition: flintcf_Zn.cc:31
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int i
Definition: cfEzgcd.cc:123
int BOOLEAN
Definition: auxiliary.h:88

§ ReadFd()

static number ReadFd ( s_buff  f,
const coeffs  r 
)
static

Definition at line 447 of file flintcf_Zn.cc.

448 {
449  // format: len a_len .. a_0
450  nmod_poly_ptr aa=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
451  nmod_poly_init(aa,r->ch);
452  int l=s_readint(f);
453  unsigned long ul;
454  for (int i=l;i>=0;i--)
455  {
456  unsigned long ul=s_readlong(f);
457  nmod_poly_set_coeff_ui(aa,i,ul);
458  }
459  return (number)aa;
460 }
nmod_poly_init(FLINTmipo, getCharacteristic())
#define omAlloc(size)
Definition: omAllocDecl.h:210
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
int s_readint(s_buff F)
Definition: s_buff.cc:119
FILE * f
Definition: checklibs.c:7
int i
Definition: cfEzgcd.cc:123
long s_readlong(s_buff F)
Definition: s_buff.cc:147
int l
Definition: cfEzgcd.cc:94

§ SetChar()

static void SetChar ( const coeffs  r)
static

Definition at line 67 of file flintcf_Zn.cc.

68 {
69  // dummy
70 }

§ SetMap()

static nMapFunc SetMap ( const coeffs  src,
const coeffs  dst 
)
static

Definition at line 365 of file flintcf_Zn.cc.

366 {
367  WerrorS("not yet: SetMap");
368  return NULL;
369 }
void WerrorS(const char *s)
Definition: feFopen.cc:24
#define NULL
Definition: omList.c:10

§ Size()

static int Size ( number  n,
const coeffs  r 
)
static

Definition at line 153 of file flintcf_Zn.cc.

154 {
155  return nmod_poly_degree((nmod_poly_ptr)n);
156 }
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26

§ Sub()

static number Sub ( number  a,
number  b,
const coeffs  c 
)
static

Definition at line 78 of file flintcf_Zn.cc.

79 {
80  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
81  nmod_poly_init(res,c->ch);
82  nmod_poly_sub(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
83  return (number)res;
84 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
#define omAlloc(size)
Definition: omAllocDecl.h:210
poly res
Definition: myNF.cc:322
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
const poly b
Definition: syzextra.cc:213

§ WriteFd()

static void WriteFd ( number  a,
FILE *  f,
const coeffs   
)
static

Definition at line 435 of file flintcf_Zn.cc.

436 {
437  // format: len a_len .. a_0
439  int l=nmod_poly_length(aa);
440  fprintf(f,"%d ",l);
441  for(int i=l; i>=0; i--)
442  {
443  ulong ul=nmod_poly_get_coeff_ui(aa,i);
444  fprintf(f,"%lu ", ul);
445  }
446 }
const poly a
Definition: syzextra.cc:212
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
FILE * f
Definition: checklibs.c:7
int i
Definition: cfEzgcd.cc:123
int l
Definition: cfEzgcd.cc:94

§ WriteShort()

static void WriteShort ( number  a,
const coeffs  r 
)
static

Definition at line 223 of file flintcf_Zn.cc.

224 {
225  //nmod_poly_print_pretty((nmod_poly_ptr)a,r->pParameterNames[0]);
226  if (IsOne(a,r)) StringAppendS("1");
227  else if (IsZero(a,r)) StringAppendS("0");
228  else
229  {
230  StringAppendS("(");
231  BOOLEAN need_plus=FALSE;
232  for(int i=nmod_poly_length((nmod_poly_ptr)a);i>=0;i--)
233  {
234  slong m=nmod_poly_get_coeff_ui((nmod_poly_ptr)a,i);
235  if (m!=0)
236  {
237  if (need_plus) StringAppendS("+");
238  need_plus=TRUE;
239  if (i>0)
240  {
241  if (m!=1) StringAppend("%d*",(int)m);
242  if (i>1)
243  StringAppend("%s^%d",r->pParameterNames[0],i);
244  else if (i==1)
245  StringAppend("%s",r->pParameterNames[0]);
246  }
247  else StringAppend("%d",(int)m);
248  }
249  }
250  StringAppendS(")");
251  }
252 }
const poly a
Definition: syzextra.cc:212
#define FALSE
Definition: auxiliary.h:97
#define TRUE
Definition: auxiliary.h:101
static BOOLEAN IsOne(number a, const coeffs r)
Definition: flintcf_Zn.cc:313
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:26
void StringAppendS(const char *st)
Definition: reporter.cc:107
int m
Definition: cfEzgcd.cc:119
#define StringAppend
Definition: emacs.cc:82
int i
Definition: cfEzgcd.cc:123
static BOOLEAN IsZero(number a, const coeffs r)
Definition: flintcf_Zn.cc:309
#define slong
int BOOLEAN
Definition: auxiliary.h:88

Variable Documentation

§ CoeffName_flint_Zn

char CoeffName_flint_Zn[20]
static

Definition at line 51 of file flintcf_Zn.cc.