11#define TRANSEXT_PRIVATES
74#ifdef HAVE_GETTIMEOFDAY
121 cf->extRing->ShortOut = shortOut;
123 cf =
cf->extRing->cf;
135 number one =
nInit(1);
136 number nn=
nMult(n,one);
171 Werror(
"type %d too complex...set minpoly before",
IDTYP(
h));
break;
182 WerrorS(
"cannot set minpoly for these coeffients");
188 WerrorS(
"only univariate minpoly allowed");
209 WerrorS(
"Could not construct the alg. extension: minpoly==0");
214 if (DEN((fraction)(
p)) !=
NULL)
216 poly n=DEN((fraction)(
p));
219 WarnS(
"denominator must be constant - ignoring it");
222 DEN((fraction)(
p))=
NULL;
225 q->m[0] =
NUM((fraction)
p);
235 WerrorS(
"Could not construct the alg. extension: illegal minpoly?");
248 WarnS(
"Set minpoly over non-transcendental ground field to 0?!");
257 WarnS(
"Trying to set minpoly over non-transcendental ground field...");
260 WerrorS(
"cannot set minpoly for these coeffients");
267 WerrorS(
"only univarite minpoly allowed");
274 redefine_from_algext=(
currRing->cf->extRing->qideal!=
NULL);
299 WarnS(
"minpoly is already 0...");
303 WarnS(
"cannot set minpoly to 0 / alg. extension?");
324 WerrorS(
"Could not construct the alg. extension: minpoly==0");
329 if (!redefine_from_algext && (DEN((fraction)(
p)) !=
NULL))
331 poly n=DEN((fraction)(
p));
334 WarnS(
"denominator must be constant - ignoring it");
337 DEN((fraction)(
p))=
NULL;
340 if (redefine_from_algext) q->m[0]=(poly)
p;
341 else q->m[0] =
NUM((fraction)
p);
345 PrintS(
"\nTrying to conver the currRing into an algebraic field: ");
346 PrintS(
"Ground poly. ring: \n");
348 PrintS(
"\nGiven MinPOLY: ");
355 if (!redefine_from_algext)
365 WerrorS(
"Could not construct the alg. extension: llegal minpoly?");
431 Werror(
"index[%d] must be positive",
i+1);
440 (*iv1)[
i]=(int)((
long)(a->
Data()));
444 res->data=(
void *)ivn;
447 (*iv)[
i]=(int)((
long)(a->
Data()));
451 int c=e->next->start;
452 if ((
i>=iv->
rows())||(c<1)||(c>iv->
cols()))
454 Werror(
"wrong range [%d,%d] in intmat %s(%d,%d)",
i+1,c,
res->Name(),iv->
rows(),iv->
cols());
472 old_r=(ring)(
res-1)->data;
500 number2 nn=(number2)
res->data;
511 Werror(
"index[%d] must be positive",
i+1);
517 WerrorS(
"only one index given");
522 int c=e->next->start;
523 if ((
i>=iv->rows())||(c<1)||(c>iv->cols()))
525 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",
i+1,c,
res->Name(),iv->rows(),iv->cols());
528 else if (iv->basecoeffs()==n->cf)
549 number2 nn=(number2)
res->data;
550 number2 n=n2Init((
long)a->
Data(),nn->cf);
556 WerrorS(
"no Ring avialable for conversion from int");
565 Werror(
"index[%d] must be positive",
i+1);
571 WerrorS(
"only one index given");
576 int c=e->next->start;
577 if ((
i>=iv->rows())||(c<1)||(c>iv->cols()))
579 Werror(
"wrong range [%d,%d] in cmatrix %s(%d,%d)",
i+1,c,
res->Name(),iv->rows(),iv->cols());
597 number2 nn=(number2)
res->data;
598 number2 n=(number2)
omAlloc(
sizeof(*n));
606 number2 n=(number2)
omAlloc(
sizeof(*n));
622 poly2 nn=(poly2)
res->data;
633 Werror(
"index[%d] must be positive",
i+1);
648 poly2 nn=(poly2)
res->data;
649 poly2 n=(poly2)
omAlloc(
sizeof(*n));
657 poly2 n=(poly2)
omAlloc(
sizeof(*n));
680 Werror(
"index[%d] must be positive",
i+1);
686 WerrorS(
"only one index given");
694 if ((
i>=iv->
rows())||(c<1)||(c>iv->
cols()))
696 Werror(
"wrong range [%d,%d] in bigintmat/bigintvec %s(%d,%d)",
i+1,c,
res->Name(),iv->
rows(),iv->
cols());
711 number
p=(number)a->
Data();
719 WerrorS(
"cannot assign to bigint");
729 WerrorS(
"cannot assign to bigint");
742 Werror(
"index[%d] must be positive",
i+1);
748 WerrorS(
"only one index given");
756 if ((
i>=iv->
rows())||(c<1)||(c>iv->
cols()))
758 Werror(
"wrong range [%d,%d] in bigintmat/bigintvec %s(%d,%d)",
i+1,c,
res->Name(),iv->
rows(),iv->
cols());
776 int add_row_shift = 0;
778 if (weights!=
NULL) add_row_shift=weights->
min_in();
829 Werror(
"index[%d] must be positive",
j);
869 if ((am->
rows()!=1) || (am->
cols()!=1))
878 int j=e->next->start;
901 int j=e->next->start;
913 void* tmp =
res->data;
920 char *
s=(
char *)
res->data;
921 if ((e->start>0)&&(e->start<=(
int)strlen(
s)))
922 s[e->start-1]=(char)(*((
char *)a->
Data()));
925 Werror(
"string index %d out of range 1..%d",e->start,(
int)strlen(
s));
934 const char *procname,
int line,
978 for(
int i=0;
i<
b->cols();
i++)
982 res->data=(
void *)iv;
1005 res->data=(
void*)bim;
1064 res->data=(
void *)I;
1084 res->data=(
void *)
m;
1098 Werror(
"rank of module is %ld in assignment to ideal",
m->rank);
1105 res->data=(
void *)
m;
1124 res->data = (
void *)
l;
1154 char *rn=
f->preimage;
1174 ring old_ring=(ring)
res->Data();
1177 ideal
id = (ideal)a->
Data();
1192 if (
qr->cf != newcf )
1206 int *perm = (
int *)
omAlloc0((
qr->N+1)*
sizeof(
int));
1208 for(
i=
qr->N;
i>0;
i--)
1249 Warn(
"%s is no twosided standard basis",a->
Name());
1276 ring r=(ring)a->
Data();
1288 if (e==
NULL)
res->data=(
char *)r;
1307 res->data=(
void *)0;
1324#define NULL_VAL NULL
1348 WarnS(
"right side is not a datum, assignment ignored");
1380 else if (
l->name!=
NULL)
1409 WerrorS(
"error in assign: left side is not an l-value");
1415#ifdef BLACKBOX_DEVEL
1416 Print(
"bb-assign: bb=%lx\n",bb);
1418 return (bb==
NULL) || bb->blackbox_Assign(
l,r);
1489 Werror(
"`%s`(%s) = `%s` is not supported",
1492 Werror(
"`%s` = `%s` is not supported"
1501 Werror(
"expected `%s` = `%s`"
1569 Werror(
"`%s` = `%s` is not supported"
1578 Werror(
"expected `%s` = `%s`"
1596 memset(&t,0,
sizeof(
sleftv));
1600 t.
data=(
char *)(
long)(*iv)[
i];
1605 if (nok)
return TRUE;
1622 memset(&t,0,
sizeof(
sleftv));
1632 t.
data=(
char *)I->m[
i];
1682 Werror(
"`%s` is undefined",
h->Fullname());
1730 Warn(
"expression list length(%d) does not match intmat size(%d)",
1737 (*iv)[
i++] = (int)((
long)(hh->
Data()));
1746 (*iv)[
i++] = (*ivv)[ll++];
1780 Warn(
"expression list length(%d) does not match bigintmat size(%d x %d)",
1793 bim->
set(
i++, (number)(hh->
Data()));
1830 Warn(
"expression list length(%d) does not match bigintvec size(%d)",
1843 bim->
set(
i++, (number)(hh->
Data()));
1871 sl += strlen((
char *)hh->
Data());
1879 t=(
char *)hh->
Data();
1900 memset(&t,0,
sizeof(
sleftv));
1906 while ((
i<mxn )&&(
l!=
NULL))
1932 WarnS(
"list length mismatch in assign (l>r)");
1939 WarnS(
"list length mismatch in assign (l<r)");
1977 char *
s=(
char *)r->
Data();
1980 memset(&t,0,
sizeof(
sleftv));
1982 while ((
i<sl)&&(
l!=
NULL))
2004 int i=
l->e->start-1;
2007 Werror(
"index[%d] must be positive",
i+1);
2010 if(
l->attribute!=
NULL)
2032 memset(&(li->
m[li->
nr+1]),0,(
i-li->
nr)*
sizeof(
sleftv));
2042 memset(&tmp,0,
sizeof(
sleftv));
2045 && (ld->
Typ()!=r->
Typ()))
2052 memcpy(ld,&tmp,
sizeof(
sleftv));
2054 else if ((ld->
e==
NULL)
2064 memcpy(ld,&tmp,
sizeof(
sleftv));
2069 if (
l->e!=
NULL)
l->e->next=ld->
e;
2092 }
while ((!
b)&&(
l!=
NULL));
2100 int ll=
l->listLength();
2108 Werror(
"`%s` is read-only",
l->Name());
2119 else if (
l->attribute!=
NULL)
2146 if(bb->blackbox_CheckAssign(bb,
l,r))
return TRUE;
2149 if((!
b) && (like_lists==2))
2173#ifdef BLACKBOX_DEVEL
2174 Print(
"bb-assign: bb=%lx\n",bb);
2176 return (bb==
NULL) || bb->blackbox_Assign(
l,r);
2266 Werror(
"length of lists in assignment does not match (l:%d,r:%d)",
2305 WerrorS(
"expected ring-name");
2311 WerrorS(
"expected image ideal");
2331 char *pr=((
map)olm)->preimage;
2348 Warn(
"expression list length(%d) does not match matrix size(%d)",el,
num);
2404 for(
k=0;
k<
j;
k++,
i++)
2428 if (module_assign) lm->
rank=rk;
2429 else if (map_assign) ((
map)lm)->preimage=pr;
2447 Werror(
"cannot assign to %s",
l->Fullname());
2465 ideal I0=(ideal)I->
Data();
2501 poly p2=
kNF(F,r->qideal,
p);
2514 char *vn=(
char *)
v->Name();
2521 WarnS(
"source and destination packages are identical");
2533 memset(&h_expr,0,
sizeof(h_expr));
2537 return iiAssign(&tmp_expr,&h_expr);
2541 Werror(
"`%s` not found in `%s`",
v->Name(), u->
Name());
struct for passing initialization parameters to naInitChar
void * atGet(idhdl root, const char *name, int t, void *defaultReturnValue)
static int si_max(const int a, const int b)
static int si_min(const int a, const int b)
#define BIMATELEM(M, I, J)
blackbox * getBlackboxStuff(const int t)
return the structure to the type given by t
CanonicalForm map(const CanonicalForm &primElem, const Variable &alpha, const CanonicalForm &F, const Variable &beta)
map from to such that is mapped onto
coeffs basecoeffs() const
void set(int i, int j, number n, const coeffs C=NULL)
replace an entry with a copy (delete old + copy new!). NOTE: starts at [1,1]
Class used for (list of) interpreter objects.
void CleanUp(ring r=currRing)
void Clean(ring r=currRing)
INLINE_THIS void Init(int l=0)
Coefficient rings, fields and other domains suitable for Singular polynomials.
static FORCE_INLINE coeffs n_CoeffRingQuot1(number c, const coeffs r)
static FORCE_INLINE long n_Int(number &n, const coeffs r)
conversion of n to an int; 0 if not possible in Z/pZ: the representing int lying in (-p/2 ....
static FORCE_INLINE number n_Copy(number n, const coeffs r)
return a copy of 'n'
static FORCE_INLINE BOOLEAN nCoeff_is_Extension(const coeffs r)
@ n_algExt
used for all algebraic extensions, i.e., the top-most extension in an extension tower is algebraic
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static FORCE_INLINE BOOLEAN n_IsZero(number n, const coeffs r)
TRUE iff 'n' represents the zero element.
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
static FORCE_INLINE BOOLEAN nCoeff_is_algExt(const coeffs r)
TRUE iff r represents an algebraic extension field.
@ n_rep_gap_rat
(number), see longrat.h
@ n_rep_int
(int), see modulop.h
@ n_rep_gmp
(mpz_ptr), see rmodulon,h
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
static FORCE_INLINE void n_Normalize(number &n, const coeffs r)
inplace-normalization of n; produces some canonical representation of n;
void nKillChar(coeffs r)
undo all initialisations
static FORCE_INLINE BOOLEAN nCoeff_is_transExt(const coeffs r)
TRUE iff r represents a transcendental extension field.
const CanonicalForm int s
const Variable & v
< [in] a sqrfree bivariate poly
void WerrorS(const char *s)
VAR char my_yylinebuf[80]
int iiTestConvert(int inputType, int outputType)
const char * Tok2Cmdname(int tok)
static int RingDependend(int t)
#define idDelete(H)
delete an ideal
#define idSimpleAdd(A, B)
static ideal idVec2Ideal(poly vec)
#define idPosConstant(I)
index of generator with leading term in ground ring (if any); otherwise -1
static BOOLEAN length(leftv result, leftv arg)
intvec * ivAdd(intvec *a, intvec *b)
#define IMATELEM(M, I, J)
static BOOLEAN jiA_1x1INTMAT(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_BIGINT_N(leftv res, leftv a, Subexpr e)
static BOOLEAN jjA_L_BIGINTVEC(leftv l, leftv r, bigintmat *bim)
static BOOLEAN jiA_INTVEC(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_IDEAL_Mo(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_MATRIX_L(leftv l, leftv r)
static BOOLEAN jiA_PACKAGE(leftv res, leftv a, Subexpr)
void jjNormalizeQRingId(leftv I)
static BOOLEAN jiA_1x1MATRIX(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_INTVEC_BI(leftv res, leftv a, Subexpr)
static ring jjCheck_FLAG_OTHER_RING(leftv res)
static BOOLEAN jjPRINTLEVEL(leftv, leftv a)
static BOOLEAN jjMINPOLY(leftv, leftv a)
static BOOLEAN jjTRACE(leftv, leftv a)
static BOOLEAN jiA_VECTOR_L(leftv l, leftv r)
static BOOLEAN jiA_BIGINT(leftv res, leftv a, Subexpr e)
static BOOLEAN iiAssign_sys(leftv l, leftv r)
static BOOLEAN jiA_POLY(leftv res, leftv a, Subexpr e)
static BOOLEAN jjCOLMAX(leftv, leftv a)
static BOOLEAN jiAssign_rec(leftv l, leftv r)
static BOOLEAN jjECHO(leftv, leftv a)
poly jj_NormalizeQRingP(poly p, const ring r)
static BOOLEAN jiAssign_1(leftv l, leftv r, int rt, BOOLEAN toplevel, BOOLEAN is_qring=FALSE)
static BOOLEAN jiA_BUCKET(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_RESOLUTION(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_CRING(leftv res, leftv a, Subexpr)
static BOOLEAN jjMAXDEG(leftv, leftv a)
static BOOLEAN jjA_L_LIST(leftv l, leftv r)
static void jiAssignAttr(leftv l, leftv r)
BOOLEAN jjIMPORTFROM(leftv, leftv u, leftv v)
static BOOLEAN jjRTIMER(leftv, leftv a)
static BOOLEAN jiA_RING(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_MAP(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_INT(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_STRING_L(leftv l, leftv r)
static BOOLEAN jjA_L_BIGINTMAT(leftv l, leftv r, bigintmat *bim)
static void jjMINPOLY_red(idhdl h)
static BOOLEAN jiA_DEF(leftv res, leftv, Subexpr)
static BOOLEAN jiA_IDEAL(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_MODUL_P(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_BIGINTMAT(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_NUMBER(leftv res, leftv a, Subexpr)
static BOOLEAN jiAssign_list(leftv l, leftv r)
static BOOLEAN jjA_L_STRING(leftv l, leftv r)
static BOOLEAN jiA_LIST_RES(leftv res, leftv a, Subexpr)
coeffs jjSetMinpoly(coeffs cf, number a)
static BOOLEAN jiA_LINK(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_MAP_ID(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_STRING(leftv res, leftv a, Subexpr e)
static BOOLEAN jjSHORTOUT(leftv, leftv a)
static BOOLEAN jjNOETHER(leftv, leftv a)
BOOLEAN iiAssign(leftv l, leftv r, BOOLEAN toplevel)
static BOOLEAN jiA_IDEAL_M(leftv res, leftv a, Subexpr)
static BOOLEAN jiA_INTVEC_L(leftv l, leftv r)
static BOOLEAN jiA_QRING(leftv res, leftv a, Subexpr e)
static BOOLEAN jiA_LIST(leftv res, leftv a, Subexpr)
static BOOLEAN jjMAXMULT(leftv, leftv a)
static BOOLEAN jjTIMER(leftv, leftv a)
static BOOLEAN jiA_BIGINTVEC_IV(leftv res, leftv a, Subexpr)
static BOOLEAN jjA_L_INTVEC(leftv l, leftv r, intvec *iv)
static BOOLEAN jiA_PROC(leftv res, leftv a, Subexpr)
BOOLEAN iiConvert(int inputType, int outputType, int index, leftv input, leftv output, const struct sConvertTypes *dConvertTypes)
void killhdl2(idhdl h, idhdl *ih, ring r)
void killhdl(idhdl h, package proot)
void * idrecDataInit(int t)
void ipMoveId(idhdl tomove)
BOOLEAN piKill(procinfov pi)
EXTERN_VAR omBin sleftv_bin
#define jjNormalizeQRingP(p)
procinfo * iiInitSingularProcinfo(procinfov pi, const char *libname, const char *procname, int, long pos, BOOLEAN pstatic)
int iiDeclCommand(leftv sy, leftv name, int lev, int t, idhdl *root, BOOLEAN isring, BOOLEAN init_b)
int exprlist_length(leftv v)
lists syConvRes(syStrategy syzstr, BOOLEAN toDel, int add_row_shift)
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
static bool rIsSCA(const ring r)
bool nc_SetupQuotient(ring rGR, const ring rG=NULL, bool bCopy=false)
BOOLEAN lRingDependend(lists L)
poly p_MinPolyNormalize(poly p, const ring r)
matrix mpNew(int r, int c)
create a r x c zero-matrix
#define MATELEM(mat, i, j)
1-based access to matrix
#define SMATELEM(A, i, j, R)
The main handler for Singular numbers which are suitable for Singular polynomials.
#define omreallocSize(addr, o_size, size)
#define omFreeBin(addr, bin)
#define omFreeBinAddr(addr)
#define TEST_V_ASSIGN_NONE
poly p_PermPoly(poly p, const int *perm, const ring oldRing, const ring dst, nMapFunc nMap, const int *par_perm, int OldPar, BOOLEAN use_mult)
void p_Normalize(poly p, const ring r)
void pEnlargeSet(poly **p, int l, int increment)
void p_Write(poly p, ring lmRing, ring tailRing)
static BOOLEAN p_IsConstant(const poly p, const ring r)
static void p_Delete(poly *p, const ring r)
void rChangeCurrRing(ring r)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Compatibility layer for legacy polynomial operations (over currRing)
#define pGetComp(p)
Component.
ideal idrCopyR(ideal id, ring src_r, ring dest_r)
void PrintS(const char *s)
void Werror(const char *fmt,...)
void rWrite(ring r, BOOLEAN details)
void rDelete(ring r)
unconditionally deletes fields in r
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
static ring rIncRefCnt(ring r)
static void rDecRefCnt(ring r)
static short rVar(const ring r)
#define rVar(r) (r->N)
#define rField_is_Ring(R)
void sBucketDestroyAdd(sBucket_pt bucket, poly *p, int *length)
void slCleanUp(si_link l)
BOOLEAN slInit(si_link l, char *istr)
static si_link slCopy(si_link l)
ideal idInit(int idsize, int rank)
initialise an ideal / module
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
void id_Normalize(ideal I, const ring r)
normialize all polys in id
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
void id_Shift(ideal M, int s, const ring r)
static int idElem(const ideal F)
number of non-zero polys in F
BOOLEAN assumeStdFlag(leftv h)
void syKillComputation(syStrategy syzstr, ring r=currRing)
const struct sValAssign dAssign[]
const struct sValAssign_sys dAssign_sys[]
VAR omBin fractionObjectBin