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 25 of file flintcf_Zn.cc.

Function Documentation

◆ Add()

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

Definition at line 84 of file flintcf_Zn.cc.

85 {
86  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
87  nmod_poly_init(res,c->ch);
88  nmod_poly_add(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
89  return (number)res;
90 }
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:25
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 399 of file flintcf_Zn.cc.

400 {
401  WerrorS("not yet: ChineseRemainder");
402 }
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 55 of file flintcf_Zn.cc.

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

◆ CoeffName()

static char* CoeffName ( const coeffs  r)
static

Definition at line 423 of file flintcf_Zn.cc.

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

◆ CoeffString()

static char* CoeffString ( const coeffs  r)
static

Definition at line 428 of file flintcf_Zn.cc.

429 {
430  char *buf=(char*)omAlloc(12+10 /*ch*/+strlen(r->pParameterNames[0]));
431  sprintf(buf,"flintZ(%d,\"%s\")",r->ch,r->pParameterNames[0]);
432  return buf;
433 }
#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 51 of file flintcf_Zn.cc.

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

◆ ConvFactoryNSingN()

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

Definition at line 416 of file flintcf_Zn.cc.

417 {
418 }

◆ ConvSingNFactoryN()

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

Definition at line 419 of file flintcf_Zn.cc.

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

◆ Copy()

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

Definition at line 204 of file flintcf_Zn.cc.

205 {
206  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
207  nmod_poly_init(res,r->ch);
208  nmod_poly_set(res,(nmod_poly_ptr)a);
209  return (number)res;
210 }
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:25

◆ DBTest()

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

Definition at line 461 of file flintcf_Zn.cc.

462 {
463  return TRUE;
464 }
#define TRUE
Definition: auxiliary.h:98

◆ Delete()

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

Definition at line 355 of file flintcf_Zn.cc.

356 {
357  if ((*a)!=NULL)
358  {
360  omFree(*a);
361  *a=NULL;
362  }
363 }
const poly a
Definition: syzextra.cc:212
nmod_poly_clear(FLINTmipo)
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:25
#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 91 of file flintcf_Zn.cc.

92 {
93  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
94  nmod_poly_init(res,c->ch);
95  if(nmod_poly_is_zero((nmod_poly_ptr)b))
96  {
98  }
99  else
100  {
101  nmod_poly_div(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
102  nmod_poly_t mod;
103  nmod_poly_init(mod,c->ch);
104  nmod_poly_rem(mod,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
105  if (!nmod_poly_is_zero((nmod_poly_ptr)mod))
106  {
107  WerrorS("cannot divide");
108  }
109  nmod_poly_clear(mod);
110  }
111  return (number)res;
112 }
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:25
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 30 of file flintcf_Zn.cc.

31 {
32 
33  if (((*s) >= '0') && ((*s) <= '9'))
34  {
35  unsigned long ii=0L;
36  do
37  {
38  ii *= 10;
39  ii += *s++ - '0';
40  }
41  while (((*s) >= '0') && ((*s) <= '9'));
42  *i=(int)ii;
43  }
44  else (*i) = 1;
45  return s;
46 }
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 304 of file flintcf_Zn.cc.

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

◆ ExactDiv()

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

Definition at line 113 of file flintcf_Zn.cc.

114 {
115  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
116  nmod_poly_init(res,c->ch);
117  if(nmod_poly_is_zero((nmod_poly_ptr)b))
118  {
119  WerrorS(nDivBy0);
120  }
121  else
122  nmod_poly_div(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
123  return (number)res;
124 }
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:25
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 342 of file flintcf_Zn.cc.

343 {
344  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
345  nmod_poly_init(res,r->ch);
346  nmod_poly_init((nmod_poly_ptr)*s,r->ch);
347  nmod_poly_init((nmod_poly_ptr)*t,r->ch);
348  nmod_poly_xgcd(res,(nmod_poly_ptr)*s,(nmod_poly_ptr)*t,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
349  return (number)res;
350 }
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:25
const poly b
Definition: syzextra.cc:213

◆ Farey()

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

Definition at line 395 of file flintcf_Zn.cc.

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

◆ flintZn_InitChar()

BOOLEAN flintZn_InitChar ( coeffs  cf,
void *  infoStruct 
)

Definition at line 466 of file flintcf_Zn.cc.

467 {
468  flintZn_struct *pp=(flintZn_struct*)infoStruct;
469  cf->ch=pp->ch;
470 
471  cf->cfCoeffString = CoeffString;
472  cf->cfCoeffName = CoeffName;
473  cf->cfCoeffWrite = CoeffWrite;
474  cf->nCoeffIsEqual = CoeffIsEqual;
475  cf->cfKillChar = KillChar;
476  cf->cfSetChar = SetChar;
477  cf->cfMult = Mult;
478  cf->cfSub = Sub;
479  cf->cfAdd = Add;
480  cf->cfDiv = Div;
481  cf->cfExactDiv = ExactDiv; // ???
482  cf->cfInit =Init;
483  cf->cfInitMPZ =InitMPZ;
484  cf->cfSize = Size;
485  cf->cfInt = Int;
486  cf->cfMPZ = MPZ;
487  cf->cfInpNeg = Neg;
488  cf->cfInvers = Invers;
489  cf->cfCopy = Copy;
490  cf->cfRePart = Copy;
491  // default: cf->cfImPart = ndReturn0;
492  cf->cfWriteLong = WriteShort; //WriteLong;
493  cf->cfWriteShort = WriteShort;
494  cf->cfRead = Read;
495  cf->cfNormalize = Normalize;
496 
497  //cf->cfDivComp=
498  //cf->cfIsUnit=
499  //cf->cfGetUnit=
500  //cf->cfDivBy=
501 
502  cf->cfGreater=Greater;
503  cf->cfEqual =Equal;
504  cf->cfIsZero =IsZero;
505  cf->cfIsOne =IsOne;
506  cf->cfIsMOne =IsMOne;
507  cf->cfGreaterZero=GreaterZero;
508 
509  cf->cfPower = Power;
510  //default: cf->cfGetDenom = GetDenom;
511  //default: cf->cfGetNumerator = GetNumerator;
512  cf->cfGcd = Gcd;
513  cf->cfExtGcd = ExtGcd;
514  cf->cfLcm = Lcm;
515  cf->cfDelete = Delete;
516  cf->cfSetMap = SetMap;
517  // default: cf->cfInpMult
518  // default: cf->cfInpAdd
519  cf->cfFarey =Farey;
520  cf->cfChineseRemainder=ChineseRemainder;
521  cf->cfParDeg = ParDeg;
522  cf->cfParameter = Parameter;
523  // cf->cfClearContent = ClearContent;
524  // cf->cfClearDenominators = ClearDenominators;
525  cf->convFactoryNSingN=ConvFactoryNSingN;
526  cf->convSingNFactoryN=ConvSingNFactoryN;
527  cf->cfWriteFd = WriteFd;
528  cf->cfReadFd = ReadFd;
529 #ifdef LDEBUG
530  cf->cfDBTest = DBTest;
531 #endif
532 
533  cf->iNumberOfParameters = 1;
534  char **pn=(char**)omAlloc0(sizeof(char*));
535  pn[0]=(char*)omStrDup(pp->name);
536  cf->pParameterNames = (const char **)pn;
537  cf->has_simple_Inverse= FALSE;
538  cf->has_simple_Alloc= FALSE;
539  cf->is_field=FALSE;
540 
541  return FALSE;
542 }
static void WriteShort(number a, const coeffs r)
Definition: flintcf_Zn.cc:222
static number Mult(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:70
static void KillChar(coeffs r)
Definition: flintcf_Zn.cc:62
static number Sub(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:77
static const char * Read(const char *st, number *a, const coeffs r)
Definition: flintcf_Zn.cc:252
static BOOLEAN DBTest(number a, const char *f, const int l, const coeffs r)
Definition: flintcf_Zn.cc:461
static number Init(long i, const coeffs r)
Definition: flintcf_Zn.cc:132
static void Delete(number *a, const coeffs r)
Definition: flintcf_Zn.cc:355
#define FALSE
Definition: auxiliary.h:94
static number Lcm(number a, number b, const coeffs r)
Definition: flintcf_Zn.cc:351
static number Farey(number p, number n, const coeffs)
Definition: flintcf_Zn.cc:395
static number ExtGcd(number a, number b, number *s, number *t, const coeffs r)
Definition: flintcf_Zn.cc:342
static long Int(number &n, const coeffs r)
Definition: flintcf_Zn.cc:156
static BOOLEAN IsOne(number a, const coeffs r)
Definition: flintcf_Zn.cc:312
static BOOLEAN CoeffIsEqual(const coeffs r, n_coeffType n, void *parameter)
Definition: flintcf_Zn.cc:55
static number InitMPZ(mpz_t i, const coeffs r)
Definition: flintcf_Zn.cc:141
poly pp
Definition: myNF.cc:296
static number ReadFd(s_buff f, const coeffs r)
Definition: flintcf_Zn.cc:446
static BOOLEAN Greater(number a, number b, const coeffs r)
Definition: flintcf_Zn.cc:289
static int Size(number n, const coeffs r)
Definition: flintcf_Zn.cc:152
static void Normalize(number &a, const coeffs r)
Definition: flintcf_Zn.cc:286
static int ParDeg(number x, const coeffs r)
Definition: flintcf_Zn.cc:403
static void Power(number a, int i, number *result, const coeffs r)
Definition: flintcf_Zn.cc:328
static void WriteFd(number a, FILE *f, const coeffs)
Definition: flintcf_Zn.cc:434
static number ChineseRemainder(number *x, number *q, int rl, BOOLEAN sym, CFArray &inv_cache, const coeffs)
Definition: flintcf_Zn.cc:399
static void CoeffWrite(const coeffs r, BOOLEAN details)
Definition: flintcf_Zn.cc:51
static BOOLEAN GreaterZero(number k, const coeffs r)
Definition: flintcf_Zn.cc:322
static number Neg(number a, const coeffs r)
Definition: flintcf_Zn.cc:176
static number Parameter(const int i, const coeffs r)
Definition: flintcf_Zn.cc:407
static number ConvFactoryNSingN(const CanonicalForm n, const coeffs r)
Definition: flintcf_Zn.cc:416
static BOOLEAN IsZero(number a, const coeffs r)
Definition: flintcf_Zn.cc:308
static char * CoeffName(const coeffs r)
Definition: flintcf_Zn.cc:423
static char * CoeffString(const coeffs r)
Definition: flintcf_Zn.cc:428
static BOOLEAN IsMOne(number k, const coeffs r)
Definition: flintcf_Zn.cc:316
static number Add(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:84
static void MPZ(mpz_t result, number &n, const coeffs r)
Definition: flintcf_Zn.cc:166
static number Div(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:91
static number Invers(number a, const coeffs r)
Definition: flintcf_Zn.cc:181
static number Gcd(number a, number b, const coeffs r)
Definition: flintcf_Zn.cc:335
static CanonicalForm ConvSingNFactoryN(number n, BOOLEAN setChar, const coeffs r)
Definition: flintcf_Zn.cc:419
static void SetChar(const coeffs r)
Definition: flintcf_Zn.cc:66
static number ExactDiv(number a, number b, const coeffs c)
Definition: flintcf_Zn.cc:113
static nMapFunc SetMap(const coeffs src, const coeffs dst)
Definition: flintcf_Zn.cc:364
#define omAlloc0(size)
Definition: omAllocDecl.h:211
static number Copy(number a, const coeffs r)
Definition: flintcf_Zn.cc:204
static BOOLEAN Equal(number a, number b, const coeffs r)
Definition: flintcf_Zn.cc:304
#define omStrDup(s)
Definition: omAllocDecl.h:263

◆ Gcd()

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

Definition at line 335 of file flintcf_Zn.cc.

336 {
337  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
338  nmod_poly_init(res,r->ch);
339  nmod_poly_gcd(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
340  return (number)res;
341 }
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:25
const poly b
Definition: syzextra.cc:213

◆ Greater()

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

Definition at line 289 of file flintcf_Zn.cc.

290 {
291  if (nmod_poly_length((nmod_poly_ptr)a)>nmod_poly_length((nmod_poly_ptr)b))
292  return TRUE;
293  else if (nmod_poly_length((nmod_poly_ptr)a)<nmod_poly_length((nmod_poly_ptr)b))
294  return FALSE;
295  for(int i=nmod_poly_length((nmod_poly_ptr)a);i>=0;i--)
296  {
297  slong ac=nmod_poly_get_coeff_ui((nmod_poly_ptr)a,i);
298  slong bc=nmod_poly_get_coeff_ui((nmod_poly_ptr)b,i);
299  if (ac>bc) return TRUE;
300  else if (ac<bc) return FALSE;
301  }
302  return FALSE;
303 }
const poly a
Definition: syzextra.cc:212
#define FALSE
Definition: auxiliary.h:94
#define TRUE
Definition: auxiliary.h:98
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:25
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 322 of file flintcf_Zn.cc.

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

◆ Init()

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

Definition at line 132 of file flintcf_Zn.cc.

133 {
134  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
135  nmod_poly_init(res,r->ch);
136  i= i%r->ch;
137  if (i<0) i+=r->ch;
138  nmod_poly_set_coeff_ui(res,0,i);
139  return (number)res;
140 }
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:25
int i
Definition: cfEzgcd.cc:123

◆ Init_bigint()

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

Definition at line 375 of file flintcf_Zn.cc.

376 {
377  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
378  nmod_poly_init(res,dst->ch);
379  long ii;
380  if (SR_HDL(i) & SR_INT)
381  {
382  ii=SR_TO_INT(i) % dst->ch;
383  }
384  else
385  {
386  mpz_t tmp;
387  mpz_init(tmp);
388  ii=mpz_mod_ui(tmp,i->z,dst->ch);
389  mpz_clear(tmp);
390  }
391  if (ii<0) ii+=dst->ch;
392  nmod_poly_set_coeff_ui(res,0,ii);
393  return (number)res;
394 }
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:25
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 141 of file flintcf_Zn.cc.

142 {
143  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
144  nmod_poly_init(res,r->ch);
145  mpz_t tmp;
146  mpz_init(tmp);
147  slong ii=mpz_mod_ui(tmp,i,r->ch);
148  mpz_clear(tmp);
149  nmod_poly_set_coeff_ui(res,0,ii);
150  return (number)res;
151 }
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:25
int i
Definition: cfEzgcd.cc:123
#define slong

◆ Int()

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

Definition at line 156 of file flintcf_Zn.cc.

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

◆ IntMod()

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

Definition at line 125 of file flintcf_Zn.cc.

126 {
127  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
128  nmod_poly_init(res,c->ch);
129  nmod_poly_rem(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
130  return (number)res;
131 }
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:25
const poly b
Definition: syzextra.cc:213

◆ Invers()

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

Definition at line 181 of file flintcf_Zn.cc.

182 {
183  if(nmod_poly_is_zero((nmod_poly_ptr)a))
184  {
185  WerrorS(nDivBy0);
186  return NULL;
187  }
188  if (nmod_poly_degree((nmod_poly_ptr)a)==0)
189  {
190  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
191  nmod_poly_init(res,r->ch);
192  slong c=nmod_poly_get_coeff_ui((nmod_poly_ptr)a,0);
193  extern number nvInvers (number c, const coeffs r);
194  c=(slong)nvInvers((number)c,r);
195  nmod_poly_set_coeff_ui((nmod_poly_ptr)a,0,c);
196  return (number)res;
197  }
198  else
199  {
200  WerrorS("not invertable");
201  return NULL;
202  }
203 }
nmod_poly_init(FLINTmipo, getCharacteristic())
const poly a
Definition: syzextra.cc:212
number nvInvers(number c, const coeffs r)
Definition: modulop.cc:871
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:25
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 316 of file flintcf_Zn.cc.

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

◆ IsOne()

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

Definition at line 312 of file flintcf_Zn.cc.

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

◆ IsZero()

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

Definition at line 308 of file flintcf_Zn.cc.

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

◆ KillChar()

static void KillChar ( coeffs  r)
static

Definition at line 62 of file flintcf_Zn.cc.

63 {
64  // not yet
65 }

◆ Lcm()

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

Definition at line 351 of file flintcf_Zn.cc.

352 {
353  WerrorS("not yet: Lcm");
354 }
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 166 of file flintcf_Zn.cc.

167 {
168  mpz_init(result);
169  if (nmod_poly_degree((nmod_poly_ptr)n)==0)
170  {
171  slong m;
172  m=nmod_poly_get_coeff_ui((nmod_poly_ptr)n,0);
173  mpz_set_ui(result,m);
174  }
175 }
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:25
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 70 of file flintcf_Zn.cc.

71 {
72  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(*res));
73  nmod_poly_init(res,c->ch);
74  nmod_poly_mul(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
75  return (number)res;
76 }
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:25
const poly b
Definition: syzextra.cc:213

◆ Neg()

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

Definition at line 176 of file flintcf_Zn.cc.

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

◆ Normalize()

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

Definition at line 286 of file flintcf_Zn.cc.

287 {
288 }

◆ Parameter()

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

Definition at line 407 of file flintcf_Zn.cc.

408 {
409  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
410  nmod_poly_init(res,r->ch);
411  nmod_poly_set_coeff_ui(res,1,1);
412  return (number)res;
413 }
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:25

◆ ParDeg()

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

Definition at line 403 of file flintcf_Zn.cc.

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

◆ Power()

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

Definition at line 328 of file flintcf_Zn.cc.

329 {
330  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
331  nmod_poly_init(res,r->ch);
332  *result=(number)res;
333  nmod_poly_pow((nmod_poly_ptr)(*result),(nmod_poly_ptr)a,i);
334 }
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:25
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 252 of file flintcf_Zn.cc.

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

◆ ReadFd()

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

Definition at line 446 of file flintcf_Zn.cc.

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

◆ SetChar()

static void SetChar ( const coeffs  r)
static

Definition at line 66 of file flintcf_Zn.cc.

67 {
68  // dummy
69 }

◆ SetMap()

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

Definition at line 364 of file flintcf_Zn.cc.

365 {
366  WerrorS("not yet: SetMap");
367  return NULL;
368 }
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 152 of file flintcf_Zn.cc.

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

◆ Sub()

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

Definition at line 77 of file flintcf_Zn.cc.

78 {
79  nmod_poly_ptr res=(nmod_poly_ptr)omAlloc(sizeof(nmod_poly_t));
80  nmod_poly_init(res,c->ch);
81  nmod_poly_sub(res,(nmod_poly_ptr)a,(nmod_poly_ptr)b);
82  return (number)res;
83 }
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:25
const poly b
Definition: syzextra.cc:213

◆ WriteFd()

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

Definition at line 434 of file flintcf_Zn.cc.

435 {
436  // format: len a_len .. a_0
438  int l=nmod_poly_length(aa);
439  fprintf(f,"%d ",l);
440  for(int i=l; i>=0; i--)
441  {
442  ulong ul=nmod_poly_get_coeff_ui(aa,i);
443  fprintf(f,"%lu ", ul);
444  }
445 }
const poly a
Definition: syzextra.cc:212
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:25
FILE * f
Definition: checklibs.c:9
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 222 of file flintcf_Zn.cc.

223 {
224  //nmod_poly_print_pretty((nmod_poly_ptr)a,r->pParameterNames[0]);
225  if (IsOne(a,r)) StringAppendS("1");
226  else if (IsZero(a,r)) StringAppendS("0");
227  else
228  {
229  StringAppendS("(");
230  BOOLEAN need_plus=FALSE;
231  for(int i=nmod_poly_length((nmod_poly_ptr)a);i>=0;i--)
232  {
233  slong m=nmod_poly_get_coeff_ui((nmod_poly_ptr)a,i);
234  if (m!=0)
235  {
236  if (need_plus) StringAppendS("+");
237  need_plus=TRUE;
238  if (i>0)
239  {
240  if (m!=1) StringAppend("%d*",(int)m);
241  if (i>1)
242  StringAppend("%s^%d",r->pParameterNames[0],i);
243  else if (i==1)
244  StringAppend("%s",r->pParameterNames[0]);
245  }
246  else StringAppend("%d",(int)m);
247  }
248  }
249  StringAppendS(")");
250  }
251 }
const poly a
Definition: syzextra.cc:212
#define FALSE
Definition: auxiliary.h:94
#define TRUE
Definition: auxiliary.h:98
static BOOLEAN IsOne(number a, const coeffs r)
Definition: flintcf_Zn.cc:312
nmod_poly_struct * nmod_poly_ptr
Definition: flintcf_Zn.cc:25
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:308
#define slong
int BOOLEAN
Definition: auxiliary.h:85

Variable Documentation

◆ CoeffName_flint_Zn

char CoeffName_flint_Zn[20]
static

Definition at line 50 of file flintcf_Zn.cc.