Typedefs | Functions
flintcf_Q.cc File Reference
#include <ctype.h>
#include "misc/auxiliary.h"
#include <flint/flint.h>
#include <flint/fmpq_poly.h>
#include "factory/factory.h"
#include "omalloc/omalloc.h"
#include "coeffs/coeffs.h"
#include "coeffs/numbers.h"
#include "coeffs/longrat.h"

Go to the source code of this file.

Typedefs

typedef fmpq_poly_struct * fmpq_poly_ptr
 
typedef fmpz * fmpz_ptr
 

Functions

static char * nlEatLong (char *s, mpz_ptr i)
 
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 GetDenom (number &n, const coeffs r)
 
static number GetNumerator (number &n, 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 void WriteFd (number a, FILE *f, const coeffs)
 
static number ReadFd (s_buff f, const coeffs)
 
static number ConvFactoryNSingN (const CanonicalForm n, const coeffs r)
 
static CanonicalForm ConvSingNFactoryN (number n, BOOLEAN setChar, const coeffs r)
 
char * CoeffName (const coeffs r)
 
static char * CoeffString (const coeffs r)
 
static BOOLEAN DBTest (number a, const char *f, const int l, const coeffs r)
 
BOOLEAN flintQ_InitChar (coeffs cf, void *infoStruct)
 

Typedef Documentation

◆ fmpq_poly_ptr

typedef fmpq_poly_struct* fmpq_poly_ptr

Definition at line 23 of file flintcf_Q.cc.

◆ fmpz_ptr

typedef fmpz* fmpz_ptr

Definition at line 24 of file flintcf_Q.cc.

Function Documentation

◆ Add()

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

Definition at line 97 of file flintcf_Q.cc.

98 {
99  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
100  fmpq_poly_init(res);
101  fmpq_poly_add(res,(fmpq_poly_ptr)a,(fmpq_poly_ptr)b);
102  return (number)res;
103 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm b
Definition: cfModGcd.cc:4044
CanonicalForm res
Definition: facAbsFact.cc:64
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ ChineseRemainder()

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

Definition at line 473 of file flintcf_Q.cc.

474 {
475  WerrorS("not yet: ChineseRemainder");
476 }
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 71 of file flintcf_Q.cc.

72 {
73  return (r->type==n);
74 }

◆ CoeffName()

char* CoeffName ( const coeffs  r)

Definition at line 546 of file flintcf_Q.cc.

547 {
548  return (char*)"flint:Q[a]";
549 }

◆ CoeffString()

static char* CoeffString ( const coeffs  r)
static

Definition at line 550 of file flintcf_Q.cc.

551 {
552  return omStrDup(CoeffName(r));
553 }
char * CoeffName(const coeffs r)
Definition: flintcf_Q.cc:546
#define omStrDup(s)
Definition: omAllocDecl.h:263

◆ CoeffWrite()

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

Definition at line 67 of file flintcf_Q.cc.

68 {
69  PrintS("flint fmpq_poly");
70 }
void PrintS(const char *s)
Definition: reporter.cc:284

◆ ConvFactoryNSingN()

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

Definition at line 538 of file flintcf_Q.cc.

539 {
540  WerrorS("not yet: ConvFactoryNSingN");
541 }
void WerrorS(const char *s)
Definition: feFopen.cc:24

◆ ConvSingNFactoryN()

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

Definition at line 542 of file flintcf_Q.cc.

543 {
544  WerrorS("not yet: ConvSingNFactoryN");
545 }
void WerrorS(const char *s)
Definition: feFopen.cc:24

◆ Copy()

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

Definition at line 229 of file flintcf_Q.cc.

230 {
231  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
232  fmpq_poly_init(res);
233  fmpq_poly_set(res,(fmpq_poly_ptr)a);
234  return (number)res;
235 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm res
Definition: facAbsFact.cc:64
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ DBTest()

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

Definition at line 555 of file flintcf_Q.cc.

556 {
557  return TRUE;
558 }
#define TRUE
Definition: auxiliary.h:98

◆ Delete()

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

Definition at line 437 of file flintcf_Q.cc.

438 {
439  if ((*a)!=NULL)
440  {
441  fmpq_poly_clear((fmpq_poly_ptr)*a);
442  omFree(*a);
443  *a=NULL;
444  }
445 }
#define omFree(addr)
Definition: omAllocDecl.h:261
#define NULL
Definition: omList.c:10
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Div()

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

Definition at line 104 of file flintcf_Q.cc.

105 {
106  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
107  fmpq_poly_init(res);
108  if(fmpq_poly_is_zero((fmpq_poly_ptr)b))
109  {
110  WerrorS(nDivBy0);
111  }
112  else
113  {
114  fmpq_poly_div(res,(fmpq_poly_ptr)a,(fmpq_poly_ptr)b);
115  fmpq_poly_t mod;
116  fmpq_poly_init(mod);
117  fmpq_poly_rem(mod,(fmpq_poly_ptr)a,(fmpq_poly_ptr)b);
118  if (!fmpq_poly_is_zero((fmpq_poly_ptr)mod))
119  {
120  WerrorS("cannot divide");
121  }
122  fmpq_poly_clear(mod);
123  }
124  return (number)res;
125 }
CF_NO_INLINE CanonicalForm mod(const CanonicalForm &, const CanonicalForm &)
Definition: cf_inline.cc:564
void WerrorS(const char *s)
Definition: feFopen.cc:24
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm b
Definition: cfModGcd.cc:4044
CanonicalForm res
Definition: facAbsFact.cc:64
const char *const nDivBy0
Definition: numbers.h:89
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Eati()

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

Definition at line 47 of file flintcf_Q.cc.

48 {
49 
50  if (((*s) >= '0') && ((*s) <= '9'))
51  {
52  unsigned long ii=0L;
53  do
54  {
55  ii *= 10;
56  ii += *s++ - '0';
57  }
58  while (((*s) >= '0') && ((*s) <= '9'));
59  *i=(int)ii;
60  }
61  else (*i) = 1;
62  return s;
63 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
int i
Definition: cfEzgcd.cc:125

◆ Equal()

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

Definition at line 351 of file flintcf_Q.cc.

352 {
353  return (fmpq_poly_equal((fmpq_poly_ptr)a,(fmpq_poly_ptr)b));
354 }
CanonicalForm b
Definition: cfModGcd.cc:4044
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ ExactDiv()

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

Definition at line 126 of file flintcf_Q.cc.

127 {
128  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
129  fmpq_poly_init(res);
130  if(fmpq_poly_is_zero((fmpq_poly_ptr)b))
131  {
132  WerrorS(nDivBy0);
133  }
134  else
135  fmpq_poly_div(res,(fmpq_poly_ptr)a,(fmpq_poly_ptr)b);
136  return (number)res;
137 }
void WerrorS(const char *s)
Definition: feFopen.cc:24
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm b
Definition: cfModGcd.cc:4044
CanonicalForm res
Definition: facAbsFact.cc:64
const char *const nDivBy0
Definition: numbers.h:89
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ ExtGcd()

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

Definition at line 424 of file flintcf_Q.cc.

425 {
426  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
427  fmpq_poly_init(res);
428  fmpq_poly_init((fmpq_poly_ptr)*s);
429  fmpq_poly_init((fmpq_poly_ptr)*t);
430  fmpq_poly_xgcd(res,(fmpq_poly_ptr)*s,(fmpq_poly_ptr)*t,(fmpq_poly_ptr)a,(fmpq_poly_ptr)b);
431  return (number)res;
432 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm b
Definition: cfModGcd.cc:4044
CanonicalForm res
Definition: facAbsFact.cc:64
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Farey()

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

Definition at line 469 of file flintcf_Q.cc.

470 {
471  WerrorS("not yet: Farey");
472 }
void WerrorS(const char *s)
Definition: feFopen.cc:24

◆ flintQ_InitChar()

BOOLEAN flintQ_InitChar ( coeffs  cf,
void *  infoStruct 
)

Definition at line 560 of file flintcf_Q.cc.

561 {
562  cf->cfCoeffString = CoeffString;
563  cf->cfCoeffName = CoeffName;
564  cf->cfCoeffWrite = CoeffWrite;
565  cf->nCoeffIsEqual = CoeffIsEqual;
566  cf->cfKillChar = KillChar;
567  cf->cfSetChar = SetChar;
568  cf->ch=0; //char 0
569  cf->cfMult = Mult;
570  cf->cfSub = Sub;
571  cf->cfAdd = Add;
572  cf->cfDiv = Div;
573  cf->cfExactDiv = ExactDiv; // ???
574  cf->cfInit =Init;
575  cf->cfInitMPZ =InitMPZ;
576  cf->cfSize = Size;
577  cf->cfInt = Int;
578  cf->cfMPZ = MPZ;
579  cf->cfInpNeg = Neg;
580  cf->cfInvers = Invers;
581  cf->cfCopy = Copy;
582  cf->cfRePart = Copy;
583  // default: cf->cfImPart = ndReturn0;
584  cf->cfWriteLong = WriteShort; //WriteLong;
585  cf->cfWriteShort = WriteShort;
586  cf->cfRead = Read;
587  cf->cfNormalize = Normalize;
588 
589  //cf->cfDivComp=
590  //cf->cfIsUnit=
591  //cf->cfGetUnit=
592  //cf->cfDivBy=
593 
594  cf->cfGreater=Greater;
595  cf->cfEqual =Equal;
596  cf->cfIsZero =IsZero;
597  cf->cfIsOne =IsOne;
598  cf->cfIsMOne =IsMOne;
599  cf->cfGreaterZero=GreaterZero;
600 
601  cf->cfPower = Power;
602  cf->cfGetDenom = GetDenom;
603  cf->cfGetNumerator = GetNumerator;
604  cf->cfGcd = Gcd;
605  cf->cfExtGcd = ExtGcd;
606  cf->cfLcm = Lcm;
607  cf->cfDelete = Delete;
608  cf->cfSetMap = SetMap;
609  // default: cf->cfInpMult
610  // default: cf->cfInpAdd
611  cf->cfFarey =Farey;
612  cf->cfChineseRemainder=ChineseRemainder;
613  cf->cfParDeg = ParDeg;
614  cf->cfParameter = Parameter;
615  // cf->cfClearContent = ClearContent;
616  // cf->cfClearDenominators = ClearDenominators;
617  cf->convFactoryNSingN=ConvFactoryNSingN;
618  cf->convSingNFactoryN=ConvSingNFactoryN;
619  cf->cfWriteFd = WriteFd;
620  cf->cfReadFd = ReadFd;
621 #ifdef LDEBUG
622  cf->cfDBTest = DBTest;
623 #endif
624 
625  cf->iNumberOfParameters = 1;
626  char **pn=(char**)omAlloc0(sizeof(char*));
627  pn[0]=(char*)omStrDup("a");
628  cf->pParameterNames = (const char **)pn;
629  cf->has_simple_Inverse= FALSE;
630  cf->has_simple_Alloc= FALSE;
631  cf->is_field=FALSE;
632 
633  return FALSE;
634 }
static number ReadFd(s_buff f, const coeffs)
Definition: flintcf_Q.cc:513
static number Copy(number a, const coeffs r)
Definition: flintcf_Q.cc:229
static int ParDeg(number x, const coeffs r)
Definition: flintcf_Q.cc:477
static long Int(number &n, const coeffs r)
Definition: flintcf_Q.cc:163
static number Parameter(const int i, const coeffs r)
Definition: flintcf_Q.cc:481
#define FALSE
Definition: auxiliary.h:94
static BOOLEAN Equal(number a, number b, const coeffs r)
Definition: flintcf_Q.cc:351
static void WriteShort(number a, const coeffs r)
Definition: flintcf_Q.cc:247
char * CoeffName(const coeffs r)
Definition: flintcf_Q.cc:546
static nMapFunc SetMap(const coeffs src, const coeffs dst)
Definition: flintcf_Q.cc:446
static int Size(number n, const coeffs r)
Definition: flintcf_Q.cc:159
static number Neg(number a, const coeffs r)
Definition: flintcf_Q.cc:204
static number GetDenom(number &n, const coeffs r)
Definition: flintcf_Q.cc:400
static number GetNumerator(number &n, const coeffs r)
Definition: flintcf_Q.cc:408
static CanonicalForm ConvSingNFactoryN(number n, BOOLEAN setChar, const coeffs r)
Definition: flintcf_Q.cc:542
static const char * Read(const char *st, number *a, const coeffs r)
Definition: flintcf_Q.cc:301
static void KillChar(coeffs r)
Definition: flintcf_Q.cc:75
static void Power(number a, int i, number *result, const coeffs r)
Definition: flintcf_Q.cc:393
static void Normalize(number &a, const coeffs r)
Definition: flintcf_Q.cc:343
static number ExtGcd(number a, number b, number *s, number *t, const coeffs r)
Definition: flintcf_Q.cc:424
static number ChineseRemainder(number *x, number *q, int rl, BOOLEAN sym, CFArray &inv_cache, const coeffs)
Definition: flintcf_Q.cc:473
static char * CoeffString(const coeffs r)
Definition: flintcf_Q.cc:550
static void MPZ(mpz_t result, number &n, const coeffs r)
Definition: flintcf_Q.cc:186
static BOOLEAN IsMOne(number k, const coeffs r)
Definition: flintcf_Q.cc:363
static void WriteFd(number a, FILE *f, const coeffs)
Definition: flintcf_Q.cc:488
static number ExactDiv(number a, number b, const coeffs c)
Definition: flintcf_Q.cc:126
static number ConvFactoryNSingN(const CanonicalForm n, const coeffs r)
Definition: flintcf_Q.cc:538
static void Delete(number *a, const coeffs r)
Definition: flintcf_Q.cc:437
static number Gcd(number a, number b, const coeffs r)
Definition: flintcf_Q.cc:417
static BOOLEAN IsOne(number a, const coeffs r)
Definition: flintcf_Q.cc:359
static number Invers(number a, const coeffs r)
Definition: flintcf_Q.cc:209
static number Init(long i, const coeffs r)
Definition: flintcf_Q.cc:145
static BOOLEAN Greater(number a, number b, const coeffs r)
Definition: flintcf_Q.cc:347
static BOOLEAN DBTest(number a, const char *f, const int l, const coeffs r)
Definition: flintcf_Q.cc:555
static number Div(number a, number b, const coeffs c)
Definition: flintcf_Q.cc:104
static number Sub(number a, number b, const coeffs c)
Definition: flintcf_Q.cc:90
static BOOLEAN GreaterZero(number k, const coeffs r)
Definition: flintcf_Q.cc:387
static void SetChar(const coeffs r)
Definition: flintcf_Q.cc:79
static number Farey(number p, number n, const coeffs)
Definition: flintcf_Q.cc:469
static BOOLEAN IsZero(number a, const coeffs r)
Definition: flintcf_Q.cc:355
static number InitMPZ(mpz_t i, const coeffs r)
Definition: flintcf_Q.cc:152
static void CoeffWrite(const coeffs r, BOOLEAN details)
Definition: flintcf_Q.cc:67
static BOOLEAN CoeffIsEqual(const coeffs r, n_coeffType n, void *parameter)
Definition: flintcf_Q.cc:71
#define omAlloc0(size)
Definition: omAllocDecl.h:211
static number Add(number a, number b, const coeffs c)
Definition: flintcf_Q.cc:97
static number Mult(number a, number b, const coeffs c)
Definition: flintcf_Q.cc:83
#define omStrDup(s)
Definition: omAllocDecl.h:263
static number Lcm(number a, number b, const coeffs r)
Definition: flintcf_Q.cc:433

◆ Gcd()

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

Definition at line 417 of file flintcf_Q.cc.

418 {
419  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
420  fmpq_poly_init(res);
421  fmpq_poly_gcd(res,(fmpq_poly_ptr)a,(fmpq_poly_ptr)b);
422  return (number)res;
423 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm b
Definition: cfModGcd.cc:4044
CanonicalForm res
Definition: facAbsFact.cc:64
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ GetDenom()

static number GetDenom ( number &  n,
const coeffs  r 
)
static

Definition at line 400 of file flintcf_Q.cc.

401 {
402  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
403  fmpq_poly_init(res);
404  fmpz_ptr den=fmpq_poly_denref(res);
405  fmpq_poly_set_fmpz(res,den);
406  return (number)res;
407 }
fmpz * fmpz_ptr
Definition: flintcf_Q.cc:24
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm res
Definition: facAbsFact.cc:64
CanonicalForm den(const CanonicalForm &f)
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ GetNumerator()

static number GetNumerator ( number &  n,
const coeffs  r 
)
static

Definition at line 408 of file flintcf_Q.cc.

409 {
410  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
411  fmpq_poly_init(res);
412  fmpq_poly_set(res,(fmpq_poly_ptr)n);
413  fmpz_ptr den=fmpq_poly_denref(res);
414  fmpq_poly_scalar_mul_fmpz(res,res,den);
415  return (number)res;
416 }
fmpz * fmpz_ptr
Definition: flintcf_Q.cc:24
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm res
Definition: facAbsFact.cc:64
CanonicalForm den(const CanonicalForm &f)
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Greater()

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

Definition at line 347 of file flintcf_Q.cc.

348 {
349  return (fmpq_poly_cmp((fmpq_poly_ptr)a,(fmpq_poly_ptr)b)>0);
350 }
CanonicalForm b
Definition: cfModGcd.cc:4044
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ GreaterZero()

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

Definition at line 387 of file flintcf_Q.cc.

388 {
389  // does it have a leading sign?
390  // no: 0 and 1 do not have, everything else is in (...)
391  return TRUE;
392 }
#define TRUE
Definition: auxiliary.h:98

◆ Init()

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

Definition at line 145 of file flintcf_Q.cc.

146 {
147  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
148  fmpq_poly_init(res);
149  fmpq_poly_set_si(res,i);
150  return (number)res;
151 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm res
Definition: facAbsFact.cc:64
int i
Definition: cfEzgcd.cc:125
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Init_bigint()

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

Definition at line 457 of file flintcf_Q.cc.

458 {
459  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
460  fmpq_poly_init(res);
461  if (SR_HDL(i) & SR_INT)
462  {
463  fmpq_poly_set_si(res,SR_TO_INT(i));
464  }
465  else
466  fmpq_poly_set_mpz(res,i->z);
467  return (number)res;
468 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm res
Definition: facAbsFact.cc:64
int i
Definition: cfEzgcd.cc:125
#define SR_TO_INT(SR)
Definition: longrat.h:70
#define SR_INT
Definition: longrat.h:68
#define SR_HDL(A)
Definition: tgb.cc:35
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ InitMPZ()

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

Definition at line 152 of file flintcf_Q.cc.

153 {
154  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
155  fmpq_poly_init(res);
156  fmpq_poly_set_mpz(res,i);
157  return (number)res;
158 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm res
Definition: facAbsFact.cc:64
int i
Definition: cfEzgcd.cc:125
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Int()

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

Definition at line 163 of file flintcf_Q.cc.

164 {
165  if (fmpq_poly_degree((fmpq_poly_ptr)n)==0)
166  {
167  mpq_t m;
168  mpq_init(m);
169  fmpq_poly_get_coeff_mpq(m,(fmpq_poly_ptr)n,0);
170  mpz_t num,den;
171  mpz_init(num);
172  mpz_init(den);
173  mpq_get_num(num,m);
174  mpq_get_den(den,m);
175  long nl=mpz_get_si(num);
176  if (mpz_cmp_si(num,nl)!=0) nl=0;
177  long dl=mpz_get_si(den);
178  if ((dl!=1)||(mpz_cmp_si(den,dl)!=0)) nl=0;
179  mpz_clear(num);
180  mpz_clear(den);
181  mpq_clear(m);
182  return nl;
183  }
184  return 0;
185 }
CanonicalForm num(const CanonicalForm &f)
int m
Definition: cfEzgcd.cc:121
CanonicalForm den(const CanonicalForm &f)
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ IntMod()

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

Definition at line 138 of file flintcf_Q.cc.

139 {
140  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
141  fmpq_poly_init(res);
142  fmpq_poly_rem(res,(fmpq_poly_ptr)a,(fmpq_poly_ptr)b);
143  return (number)res;
144 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm b
Definition: cfModGcd.cc:4044
CanonicalForm res
Definition: facAbsFact.cc:64
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Invers()

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

Definition at line 209 of file flintcf_Q.cc.

210 {
211  if(fmpq_poly_is_zero((fmpq_poly_ptr)a))
212  {
213  WerrorS(nDivBy0);
214  return NULL;
215  }
216  if (fmpq_poly_degree((fmpq_poly_ptr)a)==0)
217  {
218  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
219  fmpq_poly_init(res);
220  fmpq_poly_inv(res,(fmpq_poly_ptr)a);
221  return (number)res;
222  }
223  else
224  {
225  WerrorS("not invertable");
226  return NULL;
227  }
228 }
void WerrorS(const char *s)
Definition: feFopen.cc:24
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm res
Definition: facAbsFact.cc:64
const char *const nDivBy0
Definition: numbers.h:89
#define NULL
Definition: omList.c:10
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ IsMOne()

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

Definition at line 363 of file flintcf_Q.cc.

364 {
365  if (fmpq_poly_length((fmpq_poly_ptr)k)>0) return FALSE;
366  fmpq_poly_canonicalise((fmpq_poly_ptr)k);
367  mpq_t m;
368  mpq_init(m);
369  fmpq_poly_get_coeff_mpq(m,(fmpq_poly_ptr)k,0);
370  mpz_t num,den;
371  mpz_init(num);
372  mpq_get_num(num,m);
374  if (mpz_cmp_si(num,(long)-1)!=0) result=FALSE;
375  else
376  {
377  mpz_init(den);
378  mpq_get_den(den,m);
379  int dl=(int)mpz_get_si(den);
380  if ((dl!=1)||(mpz_cmp_si(den,(long)dl)!=0)) result=FALSE;
381  mpz_clear(den);
382  }
383  mpz_clear(num);
384  mpq_clear(m);
385  return (result);
386 }
CanonicalForm num(const CanonicalForm &f)
#define FALSE
Definition: auxiliary.h:94
#define TRUE
Definition: auxiliary.h:98
int k
Definition: cfEzgcd.cc:92
int m
Definition: cfEzgcd.cc:121
CanonicalForm den(const CanonicalForm &f)
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23
int BOOLEAN
Definition: auxiliary.h:85
return result
Definition: facAbsBiFact.cc:76

◆ IsOne()

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

Definition at line 359 of file flintcf_Q.cc.

360 {
361  return fmpq_poly_is_one((fmpq_poly_ptr)a);
362 }
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ IsZero()

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

Definition at line 355 of file flintcf_Q.cc.

356 {
357  return fmpq_poly_is_zero((fmpq_poly_ptr)a);
358 }
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ KillChar()

static void KillChar ( coeffs  r)
static

Definition at line 75 of file flintcf_Q.cc.

76 {
77  // not yet
78 }

◆ Lcm()

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

Definition at line 433 of file flintcf_Q.cc.

434 {
435  WerrorS("not yet: Lcm");
436 }
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 186 of file flintcf_Q.cc.

187 {
188  mpz_init(result);
189  if (fmpq_poly_degree((fmpq_poly_ptr)n)==0)
190  {
191  mpq_t m;
192  mpq_init(m);
193  fmpq_poly_get_coeff_mpq(m,(fmpq_poly_ptr)n,0);
194  mpz_t den;
195  mpz_init(den);
196  mpq_get_num(result,m);
197  mpq_get_den(den,m);
198  int dl=(int)mpz_get_si(den);
199  if ((dl!=1)||(mpz_cmp_si(den,(long)dl)!=0)) mpz_set_ui(result,0);
200  mpz_clear(den);
201  mpq_clear(m);
202  }
203 }
int m
Definition: cfEzgcd.cc:121
CanonicalForm den(const CanonicalForm &f)
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23
return result
Definition: facAbsBiFact.cc:76

◆ Mult()

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

Definition at line 83 of file flintcf_Q.cc.

84 {
85  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
86  fmpq_poly_init(res);
87  fmpq_poly_mul(res,(fmpq_poly_ptr)a,(fmpq_poly_ptr)b);
88  return (number)res;
89 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm b
Definition: cfModGcd.cc:4044
CanonicalForm res
Definition: facAbsFact.cc:64
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Neg()

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

Definition at line 204 of file flintcf_Q.cc.

205 {
206  fmpq_poly_neg((fmpq_poly_ptr)a,(fmpq_poly_ptr)a);
207  return a;
208 }
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ nlEatLong()

static char* nlEatLong ( char *  s,
mpz_ptr  i 
)
static

Definition at line 28 of file flintcf_Q.cc.

29 {
30  const char * start=s;
31 
32  while (*s >= '0' && *s <= '9') s++;
33  if (*s=='\0')
34  {
35  mpz_set_str(i,start,10);
36  }
37  else
38  {
39  char c=*s;
40  *s='\0';
41  mpz_set_str(i,start,10);
42  *s=c;
43  }
44  return s;
45 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
int i
Definition: cfEzgcd.cc:125

◆ Normalize()

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

Definition at line 343 of file flintcf_Q.cc.

344 {
345  fmpq_poly_canonicalise((fmpq_poly_ptr)a);
346 }
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Parameter()

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

Definition at line 481 of file flintcf_Q.cc.

482 {
483  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
484  fmpq_poly_init(res);
485  fmpq_poly_set_coeff_si(res,1,1);
486  return (number)res;
487 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm res
Definition: facAbsFact.cc:64
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ ParDeg()

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

Definition at line 477 of file flintcf_Q.cc.

478 {
479  return fmpq_poly_degree((fmpq_poly_ptr)x);
480 }
Variable x
Definition: cfModGcd.cc:4023
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Power()

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

Definition at line 393 of file flintcf_Q.cc.

394 {
395  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
396  fmpq_poly_init(res);
397  *result=(number)res;
398  fmpq_poly_pow((fmpq_poly_ptr)(*result),(fmpq_poly_ptr)a,i);
399 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm res
Definition: facAbsFact.cc:64
int i
Definition: cfEzgcd.cc:125
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23
return result
Definition: facAbsBiFact.cc:76

◆ Read()

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

Definition at line 301 of file flintcf_Q.cc.

302 {
303 // we only read "monomials" (i.e. [-][digits][parameter]),
304 // everythings else (+,*,^,()) is left to the singular interpreter
305  const char *s=st;
306  *a=(number)omAlloc(sizeof(fmpq_poly_t));
307  fmpq_poly_init((fmpq_poly_ptr)(*a));
308  BOOLEAN neg=FALSE;
309  if (*s=='-') { neg=TRUE; s++;}
310  if (isdigit(*s))
311  {
312  mpz_t z;
313  mpz_init(z);
314  s=nlEatLong((char *)s, z);
315  fmpq_poly_set_mpz((fmpq_poly_ptr)(*a),z);
316  if (*s == '/')
317  {
318  s++;
319  s=nlEatLong((char *)s, z);
320  fmpq_poly_scalar_div_mpz((fmpq_poly_ptr)(*a),(fmpq_poly_ptr)(*a),z);
321  }
322  mpz_clear(z);
323  }
324  else if(strncmp(s,r->pParameterNames[0],strlen(r->pParameterNames[0]))==0)
325  {
326  fmpq_poly_set_coeff_si((fmpq_poly_ptr)(*a),1,1);
327  s+=strlen(r->pParameterNames[0]);
328  if(isdigit(*s))
329  {
330  int i=1;
331  s=Eati(s,&i);
332  if (i!=1)
333  {
334  fmpq_poly_set_coeff_si((fmpq_poly_ptr)(*a),1,0);
335  fmpq_poly_set_coeff_si((fmpq_poly_ptr)(*a),i,1);
336  }
337  }
338  }
339  if (neg)
340  fmpq_poly_neg((fmpq_poly_ptr)(*a),(fmpq_poly_ptr)(*a));
341  return s;
342 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
#define FALSE
Definition: auxiliary.h:94
static char * nlEatLong(char *s, mpz_ptr i)
Definition: flintcf_Q.cc:28
#define TRUE
Definition: auxiliary.h:98
#define omAlloc(size)
Definition: omAllocDecl.h:210
int i
Definition: cfEzgcd.cc:125
static const char * Eati(const char *s, int *i)
Definition: flintcf_Q.cc:47
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23
int BOOLEAN
Definition: auxiliary.h:85

◆ ReadFd()

static number ReadFd ( s_buff  f,
const coeffs   
)
static

Definition at line 513 of file flintcf_Q.cc.

514 {
515  // format: len a_len .. a_0
516  fmpq_poly_ptr aa=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
517  fmpq_poly_init(aa);
518  int l=s_readint(f);
519  mpz_t nm;
520  mpz_init(nm);
521  mpq_t m;
522  mpq_init(m);
523  for (int i=l;i>=0;i--)
524  {
525 
526  s_readmpz_base (f,nm, SSI_BASE);
527  mpq_set_num(m,nm);
528  s_readmpz_base (f,nm, SSI_BASE);
529  mpq_set_den(m,nm);
530  fmpq_poly_set_coeff_mpq(aa,i,m);
531  }
532  mpz_clear(nm);
533  mpq_clear(m);
534  return (number)aa;
535 }
void s_readmpz_base(s_buff F, mpz_ptr a, int base)
Definition: s_buff.cc:207
#define omAlloc(size)
Definition: omAllocDecl.h:210
int s_readint(s_buff F)
Definition: s_buff.cc:110
int m
Definition: cfEzgcd.cc:121
#define SSI_BASE
Definition: auxiliary.h:149
FILE * f
Definition: checklibs.c:9
int i
Definition: cfEzgcd.cc:125
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23
int l
Definition: cfEzgcd.cc:93

◆ SetChar()

static void SetChar ( const coeffs  r)
static

Definition at line 79 of file flintcf_Q.cc.

80 {
81  // dummy
82 }

◆ SetMap()

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

Definition at line 446 of file flintcf_Q.cc.

447 {
448  WerrorS("not yet: SetMap");
449  return NULL;
450 }
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 159 of file flintcf_Q.cc.

160 {
161  return fmpq_poly_degree((fmpq_poly_ptr)n);
162 }
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ Sub()

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

Definition at line 90 of file flintcf_Q.cc.

91 {
92  fmpq_poly_ptr res=(fmpq_poly_ptr)omAlloc(sizeof(fmpq_poly_t));
93  fmpq_poly_init(res);
94  fmpq_poly_sub(res,(fmpq_poly_ptr)a,(fmpq_poly_ptr)b);
95  return (number)res;
96 }
#define omAlloc(size)
Definition: omAllocDecl.h:210
CanonicalForm b
Definition: cfModGcd.cc:4044
CanonicalForm res
Definition: facAbsFact.cc:64
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23

◆ WriteFd()

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

Definition at line 488 of file flintcf_Q.cc.

489 {
490  // format: len a_len(num den) .. a_0
492  int l=fmpq_poly_length(aa);
493  fprintf(f,"%d ",l);
494  mpq_t m;
495  mpq_init(m);
496  mpz_t num,den;
497  mpz_init(num);
498  mpz_init(den);
499  for(int i=l; i>=0; i--)
500  {
501  fmpq_poly_get_coeff_mpq(m,(fmpq_poly_ptr)a,i);
502  mpq_get_num(num,m);
503  mpq_get_den(den,m);
504  mpz_out_str (f,SSI_BASE, num);
505  fputc(' ',f);
506  mpz_out_str (f,SSI_BASE, den);
507  fputc(' ',f);
508  }
509  mpz_clear(den);
510  mpz_clear(num);
511  mpq_clear(m);
512 }
CanonicalForm num(const CanonicalForm &f)
int m
Definition: cfEzgcd.cc:121
#define SSI_BASE
Definition: auxiliary.h:149
FILE * f
Definition: checklibs.c:9
int i
Definition: cfEzgcd.cc:125
CanonicalForm den(const CanonicalForm &f)
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23
int l
Definition: cfEzgcd.cc:93

◆ WriteShort()

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

Definition at line 247 of file flintcf_Q.cc.

248 {
249  //fmpq_poly_print_pretty((fmpq_poly_ptr)a,r->pParameterNames[0]);
250  if (IsOne(a,r)) StringAppendS("1");
251  else if (IsZero(a,r)) StringAppendS("0");
252  else
253  {
254  StringAppendS("(");
255  mpq_t m;
256  mpq_init(m);
257  mpz_t num,den;
258  mpz_init(num);
259  mpz_init(den);
260  BOOLEAN need_plus=FALSE;
261  for(int i=fmpq_poly_length((fmpq_poly_ptr)a);i>=0;i--)
262  {
263  fmpq_poly_get_coeff_mpq(m,(fmpq_poly_ptr)a,i);
264  mpq_get_num(num,m);
265  mpq_get_den(den,m);
266  if (mpz_sgn1(num)!=0)
267  {
268  if (need_plus && (mpz_sgn1(num)>0))
269  StringAppendS("+");
270  need_plus=TRUE;
271  int l=mpz_sizeinbase(num,10);
272  l=si_max(l,(int)mpz_sizeinbase(den,10));
273  l+=2;
274  char *s=(char*)omAlloc(l);
275  char *z=mpz_get_str(s,10,num);
276  if ((i==0)
277  ||(mpz_cmp_si(num,1)!=0)
278  ||(mpz_cmp_si(den,1)!=0))
279  {
280  StringAppendS(z);
281  if (mpz_cmp_si(den,1)!=0)
282  {
283  StringAppendS("/");
284  z=mpz_get_str(s,10,den);
285  StringAppendS(z);
286  }
287  if (i!=0) StringAppendS("*");
288  }
289  if (i>1)
290  StringAppend("%s^%d",r->pParameterNames[0],i);
291  else if (i==1)
292  StringAppend("%s",r->pParameterNames[0]);
293  }
294  }
295  mpz_clear(den);
296  mpz_clear(num);
297  mpq_clear(m);
298  StringAppendS(")");
299  }
300 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
#define mpz_sgn1(A)
Definition: si_gmp.h:13
CanonicalForm num(const CanonicalForm &f)
#define FALSE
Definition: auxiliary.h:94
#define TRUE
Definition: auxiliary.h:98
#define omAlloc(size)
Definition: omAllocDecl.h:210
void StringAppendS(const char *st)
Definition: reporter.cc:107
int m
Definition: cfEzgcd.cc:121
static int si_max(const int a, const int b)
Definition: auxiliary.h:138
#define StringAppend
Definition: emacs.cc:79
int i
Definition: cfEzgcd.cc:125
static BOOLEAN IsOne(number a, const coeffs r)
Definition: flintcf_Q.cc:359
CanonicalForm den(const CanonicalForm &f)
static BOOLEAN IsZero(number a, const coeffs r)
Definition: flintcf_Q.cc:355
fmpq_poly_struct * fmpq_poly_ptr
Definition: flintcf_Q.cc:23
int BOOLEAN
Definition: auxiliary.h:85
int l
Definition: cfEzgcd.cc:93