13 #include <flint/flint.h> 14 #include <flint/fmpq_poly.h> 15 #include "factory/factory.h" 31 while (*s >=
'0' && *s <=
'9') s++;
34 mpz_set_str(i,start,10);
40 mpz_set_str(i,start,10);
120 fmpq_poly_set_si(res,i);
127 fmpq_poly_set_mpz(res,i);
146 long nl=mpz_get_si(num);
147 if (mpz_cmp_si(num,nl)!=0) nl=0;
148 long dl=mpz_get_si(den);
149 if ((dl!=1)||(mpz_cmp_si(den,dl)!=0)) nl=0;
167 mpq_get_num(result,m);
169 int dl=(int)mpz_get_si(den);
170 if ((dl!=1)||(mpz_cmp_si(den,(
long)dl)!=0)) mpz_set_ui(result,0);
242 int l=mpz_sizeinbase(num,10);
243 l=
si_max(l,(
int)mpz_sizeinbase(den,10));
246 char *z=mpz_get_str(s,10,num);
248 ||(mpz_cmp_si(num,1)!=0)
249 ||(mpz_cmp_si(den,1)!=0))
252 if (mpz_cmp_si(den,1)!=0)
255 z=mpz_get_str(s,10,den);
272 static const char*
Read(
const char * st, number * a,
const coeffs r)
277 *a=(number)
omAlloc(
sizeof(fmpq_poly_t));
280 if (*s==
'-') { neg=
TRUE; s++;}
295 else if(strncmp(s,r->pParameterNames[0],strlen(r->pParameterNames[0]))==0)
298 s+=strlen(r->pParameterNames[0]);
345 if (mpz_cmp_si(num,(
long)-1)!=0) result=
FALSE;
350 int dl=(int)mpz_get_si(den);
351 if ((dl!=1)||(mpz_cmp_si(den,(
long)dl)!=0)) result=
FALSE;
376 fmpq_poly_set_fmpz(res,den);
385 fmpq_poly_scalar_mul_fmpz(res,res,den);
437 fmpq_poly_set_mpz(res,i->z);
446 WerrorS(
"not yet: ChineseRemainder");
456 fmpq_poly_set_coeff_si(res,1,1);
463 int l=fmpq_poly_length(aa);
470 for(
int i=l;
i>=0;
i--)
494 for (
int i=l;
i>=0;
i--)
501 fmpq_poly_set_coeff_mpq(aa,
i,m);
511 WerrorS(
"not yet: ConvFactoryNSingN");
515 WerrorS(
"not yet: ConvSingNFactoryN");
520 sprintf(CoeffName_flint_Q,
"flint:QQ[%s]",r->pParameterNames[0]);
521 return (
char*)CoeffName_flint_Q;
526 char *
buf=(
char*)
omAlloc(12+strlen(r->pParameterNames[0]));
527 sprintf(buf,
"flintQ(\"%s\")",r->pParameterNames[0]);
536 const char start[]=
"flint:QQ[";
537 const int start_len=strlen(start);
538 if (strncmp(s,start,start_len)==0)
542 int l=sscanf(s,
"%s",st);
545 while (st[strlen(st)-1]==
']') st[strlen(st)-1]=
'\0';
560 omFreeSize(cf->pParameterNames,
sizeof(
char*));
564 char *
pp=(
char*)infoStruct;
628 cf->iNumberOfParameters = 1;
629 char **pn=(
char**)
omAlloc0(
sizeof(
char*));
631 cf->pParameterNames = (
const char **)pn;
632 cf->has_simple_Inverse=
FALSE;
633 cf->has_simple_Alloc=
FALSE;
BOOLEAN flintQ_InitChar(coeffs cf, void *infoStruct)
static number IntMod(number a, number b, const coeffs c)
static number Copy(number a, const coeffs r)
const CanonicalForm int s
static int ParDeg(number x, const coeffs r)
static long Int(number &n, const coeffs r)
coeffs flintQInitCfByName(char *s, n_coeffType n)
static number Parameter(const int i, const coeffs r)
static BOOLEAN Equal(number a, number b, const coeffs r)
static void WriteShort(number a, const coeffs r)
char * CoeffName(const coeffs r)
static nMapFunc SetMap(const coeffs src, const coeffs dst)
#define omFreeSize(addr, size)
char * nEati(char *s, int *i, int m)
divide by the first (leading) number and return it, i.e. make monic
static int Size(number n, const coeffs r)
static number Neg(number a, const coeffs r)
static char * nlEatLong(char *s, mpz_ptr i)
static number GetDenom(number &n, const coeffs r)
static number GetNumerator(number &n, const coeffs r)
static CanonicalForm ConvSingNFactoryN(number n, BOOLEAN setChar, const coeffs r)
static const char * Read(const char *st, number *a, const coeffs r)
void WerrorS(const char *s)
void s_readmpz_base(s_buff F, mpz_ptr a, int base)
static void Power(number a, int i, number *result, const coeffs r)
Coefficient rings, fields and other domains suitable for Singular polynomials.
static void Normalize(number &a, const coeffs r)
The main handler for Singular numbers which are suitable for Singular polynomials.
int status int void * buf
static number ExtGcd(number a, number b, number *s, number *t, const coeffs r)
void StringAppendS(const char *st)
static number ChineseRemainder(number *x, number *q, int rl, BOOLEAN sym, CFArray &inv_cache, const coeffs)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
static char * CoeffString(const coeffs r)
static void MPZ(mpz_t result, number &n, const coeffs r)
static BOOLEAN IsMOne(number k, const coeffs r)
const char *const nDivBy0
static int si_max(const int a, const int b)
void PrintS(const char *s)
static number ExactDiv(number a, number b, const coeffs c)
static number ConvFactoryNSingN(const CanonicalForm n, const coeffs r)
static void Delete(number *a, const coeffs r)
static number Gcd(number a, number b, const coeffs r)
static BOOLEAN IsOne(number a, const coeffs r)
static number Invers(number a, const coeffs r)
static number Init(long i, const coeffs r)
static BOOLEAN Greater(number a, number b, const coeffs r)
static BOOLEAN DBTest(number a, const char *f, const int l, const coeffs r)
static number Div(number a, number b, const coeffs c)
static void KillChar(coeffs cf)
static number Sub(number a, number b, const coeffs c)
static BOOLEAN GreaterZero(number k, const coeffs r)
static void WriteFd(number a, const ssiInfo *d, const coeffs)
static void SetChar(const coeffs r)
static number Farey(number p, number n, const coeffs)
static BOOLEAN IsZero(number a, const coeffs r)
static number InitMPZ(mpz_t i, const coeffs r)
static void CoeffWrite(const coeffs r, BOOLEAN details)
static number ReadFd(const ssiInfo *d, const coeffs)
static BOOLEAN CoeffIsEqual(const coeffs r, n_coeffType n, void *parameter)
fmpq_poly_struct * fmpq_poly_ptr
static number Add(number a, number b, const coeffs c)
static number Mult(number a, number b, const coeffs c)
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static number Init_bigint(number i, const coeffs dummy, const coeffs dst)
static number Lcm(number a, number b, const coeffs r)