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;
1066 res->data=(
void *)I;
1086 res->data=(
void *)
m;
1100 Werror(
"rank of module is %ld in assignment to ideal",
m->rank);
1107 res->data=(
void *)
m;
1126 res->data = (
void *)
l;
1156 char *rn=
f->preimage;
1176 ring old_ring=(ring)
res->Data();
1179 ideal
id = (ideal)a->
Data();
1194 if (
qr->cf != newcf )
1208 int *perm = (
int *)
omAlloc0((
qr->N+1)*
sizeof(
int));
1210 for(
i=
qr->N;
i>0;
i--)
1251 Warn(
"%s is no twosided standard basis",a->
Name());
1278 ring r=(ring)a->
Data();
1290 if (e==
NULL)
res->data=(
char *)r;
1309 res->data=(
void *)0;
1326#define NULL_VAL NULL
1350 Warn(
"right side is not a datum, assignment to `%s` ignored",
l->Name());
1382 else if (
l->name!=
NULL)
1411 WerrorS(
"error in assign: left side is not an l-value");
1417#ifdef BLACKBOX_DEVEL
1418 Print(
"bb-assign: bb=%lx\n",bb);
1420 return (bb==
NULL) || bb->blackbox_Assign(
l,r);
1491 Werror(
"`%s`(%s) = `%s` is not supported",
1494 Werror(
"`%s` = `%s` is not supported"
1503 Werror(
"expected `%s` = `%s`"
1571 Werror(
"`%s` = `%s` is not supported"
1580 Werror(
"expected `%s` = `%s`"
1598 memset(&t,0,
sizeof(
sleftv));
1602 t.
data=(
char *)(
long)(*iv)[
i];
1607 if (nok)
return TRUE;
1624 memset(&t,0,
sizeof(
sleftv));
1634 t.
data=(
char *)I->m[
i];
1684 Werror(
"`%s` is undefined",
h->Fullname());
1732 Warn(
"expression list length(%d) does not match intmat size(%d)",
1739 (*iv)[
i++] = (int)((
long)(hh->
Data()));
1748 (*iv)[
i++] = (*ivv)[ll++];
1782 Warn(
"expression list length(%d) does not match bigintmat size(%d x %d)",
1795 bim->
set(
i++, (number)(hh->
Data()));
1832 Warn(
"expression list length(%d) does not match bigintvec size(%d)",
1845 bim->
set(
i++, (number)(hh->
Data()));
1873 sl += strlen((
char *)hh->
Data());
1881 t=(
char *)hh->
Data();
1902 memset(&t,0,
sizeof(
sleftv));
1908 while ((
i<mxn )&&(
l!=
NULL))
1934 WarnS(
"list length mismatch in assign (l>r)");
1941 WarnS(
"list length mismatch in assign (l<r)");
1979 char *
s=(
char *)r->
Data();
1982 memset(&t,0,
sizeof(
sleftv));
1984 while ((
i<sl)&&(
l!=
NULL))
2006 int i=
l->e->start-1;
2009 Werror(
"index[%d] must be positive",
i+1);
2012 if(
l->attribute!=
NULL)
2034 memset(&(li->
m[li->
nr+1]),0,(
i-li->
nr)*
sizeof(
sleftv));
2044 memset(&tmp,0,
sizeof(
sleftv));
2047 && (ld->
Typ()!=r->
Typ()))
2054 memcpy(ld,&tmp,
sizeof(
sleftv));
2056 else if ((ld->
e==
NULL)
2066 memcpy(ld,&tmp,
sizeof(
sleftv));
2071 if (
l->e!=
NULL)
l->e->next=ld->
e;
2094 }
while ((!
b)&&(
l!=
NULL));
2102 int ll=
l->listLength();
2110 Werror(
"`%s` is read-only",
l->Name());
2121 else if (
l->attribute!=
NULL)
2148 if(bb->blackbox_CheckAssign(bb,
l,r))
return TRUE;
2151 if((!
b) && (like_lists==2))
2175#ifdef BLACKBOX_DEVEL
2176 Print(
"bb-assign: bb=%lx\n",bb);
2178 return (bb==
NULL) || bb->blackbox_Assign(
l,r);
2268 Werror(
"length of lists in assignment does not match (l:%d,r:%d)",
2307 WerrorS(
"expected ring-name");
2313 WerrorS(
"expected image ideal");
2333 char *pr=((
map)olm)->preimage;
2350 Warn(
"expression list length(%d) does not match matrix size(%d)",el,
num);
2406 for(
k=0;
k<
j;
k++,
i++)
2430 if (module_assign) lm->
rank=rk;
2431 else if (map_assign) ((
map)lm)->preimage=pr;
2449 Werror(
"cannot assign to %s",
l->Fullname());
2467 ideal I0=(ideal)I->
Data();
2503 poly p2=
kNF(F,r->qideal,
p);
2516 char *vn=(
char *)
v->Name();
2523 WarnS(
"source and destination packages are identical");
2535 memset(&h_expr,0,
sizeof(h_expr));
2539 return iiAssign(&tmp_expr,&h_expr);
2543 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