14#include <flint/flint.h>
15#include <flint/fmpz.h>
16#include <flint/fmpq.h>
17#include <flint/fmpq_poly.h>
34 while (*
s >=
'0' && *
s <=
'9')
s++;
37 mpz_set_str(
i,start,10);
43 mpz_set_str(
i,start,10);
125 fmpq_poly_set_si(
res,
i);
132 fmpq_poly_fit_length(
res, 1);
133 fmpz_set_mpz(
res->coeffs,
i);
135 _fmpq_poly_set_length(
res, 1);
136 _fmpq_poly_normalise(
res);
150 long nl=fmpz_get_si(fmpq_numref(
m));
151 if (fmpz_cmp_si(fmpq_numref(
m),nl)!=0) nl=0;
152 long dl=fmpz_get_si(fmpq_denref(
m));
153 if ((dl!=1)||(fmpz_cmp_si(fmpq_denref(
m),dl)!=0)) nl=0;
164#if __FLINT_RELEASE >= 20503
171 int dl=(int)mpz_get_si(
den);
172 if ((dl!=1)||(mpz_cmp_si(
den,(
long)dl)!=0)) mpz_set_ui(
result,0);
183 int dl=(int)mpz_get_si(
den);
184 if ((dl!=1)||(mpz_cmp_si(
den,(
long)dl)!=0)) mpz_set_ui(
result,0);
241#if __FLINT_RELEASE >= 20503
248 if (!fmpq_is_zero(
m))
250 if (need_plus && (fmpq_cmp_ui(
m,0)>0))
253 int l=fmpz_sizeinbase(fmpq_numref(
m),10);
254 l=
si_max(
l,(
int)fmpz_sizeinbase(fmpq_denref(
m),10));
257 char *z=fmpz_get_str(
s,10,fmpq_numref(
m));
259 ||(fmpz_cmp_si(fmpq_numref(
m),1)!=0)
260 ||(fmpz_cmp_si(fmpq_denref(
m),1)!=0))
263 if (fmpz_cmp_si(fmpq_denref(
m),1)!=0)
266 z=fmpz_get_str(
s,10,fmpq_denref(
m));
295 int l=mpz_sizeinbase(
num,10);
299 char *z=mpz_get_str(
s,10,
num);
301 ||(mpz_cmp_si(
num,1)!=0)
302 ||(mpz_cmp_si(
den,1)!=0))
305 if (mpz_cmp_si(
den,1)!=0)
308 z=mpz_get_str(
s,10,
den);
326static const char*
Read(
const char * st, number * a,
const coeffs r)
331 *a=(number)
omAlloc(
sizeof(fmpq_poly_t));
334 if (*
s==
'-') { neg=
TRUE;
s++;}
354 else if(strncmp(
s,r->pParameterNames[0],strlen(r->pParameterNames[0]))==0)
357 s+=strlen(r->pParameterNames[0]);
401 if (fmpz_cmp_si(fmpq_numref(
m),(
long)-1)!=0)
result=
FALSE;
404 int dl=(int)fmpz_get_si(fmpq_denref(
m));
405 if ((dl!=1)||(fmpz_cmp_si(fmpq_denref(
m),(
long)dl)!=0))
result=
FALSE;
428 fmpq_poly_set_fmpz(
res,
den);
491 fmpq_poly_set_mpz(
res,
i->z);
502 WerrorS(
"not yet: ChineseRemainder");
513 fmpq_poly_set_coeff_si(
res,1,1);
520 int l=fmpq_poly_length(aa);
522#if __FLINT_RELEASE >= 20503
528 for(
int i=
l;
i>=0;
i--)
546 for(
int i=
l;
i>=0;
i--)
574 for (
int i=
l;
i>=0;
i--)
577 fmpz_set_mpz(
num, tmp);
579 fmpz_set_mpz(
den, tmp);
581 fmpq_poly_set_coeff_fmpq(aa,
i,
m);
593 WerrorS(
"not yet: ConvFactoryNSingN");
598 WerrorS(
"not yet: ConvSingNFactoryN");
604 sprintf(CoeffName_flint_Q,
"flintQp[%s]",r->pParameterNames[0]);
605 return (
char*)CoeffName_flint_Q;
610 const char start[]=
"flintQp[";
611 const int start_len=strlen(start);
612 if (strncmp(
s,start,start_len)==0)
616 int l=sscanf(
s,
"%s",st);
619 while (st[strlen(st)-1]==
']') st[strlen(st)-1]=
'\0';
638 char *
pp=(
char*)infoStruct;
700 cf->iNumberOfParameters = 1;
701 char **pn=(
char**)
omAlloc0(
sizeof(
char*));
703 cf->pParameterNames = (
const char **)pn;
static int si_max(const int a, const int b)
Coefficient rings, fields and other domains suitable for Singular polynomials.
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
const CanonicalForm int s
‘factory.h’ is the user interface to Factory.
void WerrorS(const char *s)
static number ExtGcd(number a, number b, number *s, number *t, const coeffs)
static void WriteShort(number a, const coeffs r)
static number Copy(number a, const coeffs)
static number ChineseRemainder(number *, number *, int, BOOLEAN, CFArray &, const coeffs)
static void Normalize(number &a, const coeffs)
static void SetChar(const coeffs)
static nMapFunc SetMap(const coeffs, const coeffs)
static number Farey(number, number, const coeffs)
static number GetDenom(number &n, const coeffs)
static const char * Read(const char *st, number *a, const coeffs r)
static BOOLEAN IsOne(number a, const coeffs)
char * CoeffName(const coeffs r)
static number ConvFactoryNSingN(const CanonicalForm, const coeffs)
BOOLEAN flintQ_InitChar(coeffs cf, void *infoStruct)
fmpq_poly_struct * fmpq_poly_ptr
static number InitMPZ(mpz_t i, const coeffs)
static int Size(number n, const coeffs)
static number Add(number a, number b, const coeffs)
static number Div(number a, number b, const coeffs)
static void WriteFd(number a, const ssiInfo *d, const coeffs)
coeffs flintQInitCfByName(char *s, n_coeffType n)
static void Delete(number *a, const coeffs)
static number Parameter(const int, const coeffs)
static BOOLEAN DBTest(number, const char *, const int, const coeffs)
static void KillChar(coeffs cf)
static CanonicalForm ConvSingNFactoryN(number, BOOLEAN, const coeffs)
static number Init(long i, const coeffs)
static void MPZ(mpz_t result, number &n, const coeffs)
static number ReadFd(const ssiInfo *d, const coeffs)
static number ExactDiv(number a, number b, const coeffs)
static void Power(number a, int i, number *result, const coeffs)
static BOOLEAN IsMOne(number k, const coeffs)
static number Sub(number a, number b, const coeffs)
static number GetNumerator(number &n, const coeffs)
static BOOLEAN GreaterZero(number, const coeffs)
static number Gcd(number a, number b, const coeffs)
static BOOLEAN CoeffIsEqual(const coeffs r, n_coeffType n, void *)
static number Mult(number a, number b, const coeffs)
static number Invers(number a, const coeffs)
static number Lcm(number, number, const coeffs)
static int ParDeg(number x, const coeffs)
static BOOLEAN IsZero(number a, const coeffs)
static number Neg(number a, const coeffs)
static BOOLEAN Equal(number a, number b, const coeffs)
static BOOLEAN Greater(number a, number b, const coeffs)
static long Int(number &n, const coeffs)
static char * nlEatLong(char *s, mpz_ptr i)
static number Init_bigint(number i, const coeffs dummy, const coeffs dst)
static number IntMod(number a, number b, const coeffs c)
static bool Greater(mono_type m1, mono_type m2)
The main handler for Singular numbers which are suitable for Singular polynomials.
char * nEati(char *s, int *i, int m)
divide by the first (leading) number and return it, i.e. make monic
const char *const nDivBy0
#define omFreeSize(addr, size)
void StringAppendS(const char *st)
void s_readmpz_base(s_buff F, mpz_ptr a, int base)