82 ch[0]=c->op;ch[1]=
'\0';
85 ::Print(
"##command %d(%s), %d args\n",
88 c->arg1.Print(
NULL,spaces+2);
92 c->arg2.Print(
NULL,spaces+2);
94 c->arg3.Print(
NULL,spaces+2);
101 const char *n=
Name();
105 if ((store!=
NULL)&&(store!=
this))
135 ((
intvec *)d)->show(t,spaces);
141 const ring
r = (
const ring)d;
280 if (bb!=
NULL) { bb->blackbox_Print(bb,d); }
281 else {
::Print(
"Print: blackbox %d(bb=NULL)",t); }
413 return (
void*)
n2Copy((number2)d);
425 return (
void *)
idCopy((ideal)d);
438 return (
void *)
nCopy((number)d);
451 if (r!=
NULL) r->ref++;
467 if (b!=
NULL)
return b->blackbox_Copy(b,d);
471 Warn(
"s_internalCopy: cannot copy type %s(%d)",
489 number2 n=(number2)d;
570 Print(
"currRing? ref=%d\n",R->ref);
583 if (cmd->arg1.rtyp!=0) cmd->arg1.CleanUp(r);
584 if (cmd->arg2.rtyp!=0) cmd->arg2.CleanUp(r);
585 if (cmd->arg3.rtyp!=0) cmd->arg3.CleanUp(r);
618 if (b!=
NULL) b->blackbox_destroy(b,d);
622 Warn(
"s_internalDelete: cannot delete type %s(%d)",
639 else if (e->next==
NULL)
661 void *d=source->
Data();
690 x=(
void *)
p_Copy(A->qideal->m[0], A);
726 if (((
command)data)->arg1.rtyp!=0)
728 if (((
command)data)->arg2.rtyp!=0)
730 if (((
command)data)->arg3.rtyp==0)
747 sprintf(s,
"int(%d)",(
int)(
long)d);
752 sprintf(s,
"%d",(
int)(
long)d);
764 s = (
char*)
omAlloc(strlen((
char*) d) + 3);
765 sprintf(s,
"\"%s\"", (
char*) d);
778 s = (
char*)
omAlloc(strlen(ps) + 10);
779 sprintf(s,
"%s(%s)", (t ==
POLY_CMD ?
"poly" :
"vector"), ps);
806 number n=(number)data;
816 number n=
nCopy((number)d);
836 char* ns = (
char*)
omAlloc(strlen(s) + 40);
837 sprintf(ns,
"matrix(ideal(%s),%d,%d)", s,
853 char* ns = (
char*)
omAlloc(strlen(s) + 10);
854 sprintf(ns,
"%s(%s)", (t==
MODUL_CMD ?
"module" :
"ideal"), s);
870 ns = (
char*)
omAlloc(strlen(s) + 40);
871 sprintf(ns,
"intmat(intvec(%s),%d,%d)", s, v->
rows(), v->
cols());
875 ns = (
char*)
omAlloc(strlen(s) + 10);
876 sprintf(ns,
"intvec(%s)", s);
891 char* ns = (
char*)
omAlloc0(strlen(s) + 40);
892 sprintf(ns,
"bigintmat(bigintvec(%s),%d,%d)", s, bim->
rows(), bim->
cols());
911 ns = (
char*)
omAlloc(strlen(s) + strlen(
id) + 20);
912 sprintf(ns,
"\"%s\";%sideal(%s)", s,(dim == 2 ?
"\n" :
" "),
id);
916 ns = (
char*)
omAlloc(strlen(s) + 4);
917 sprintf(ns,
"\"%s\"", s);
936 s = (pi->
data.s.body);
941 char* ns = (
char*)
omAlloc(strlen(s) + 4);
942 sprintf(ns,
"\"%s\"", s);
953 char* ns = (
char*)
omAlloc(strlen(s) + 10);
954 sprintf(ns,
"link(\"%s\")", s);
968 if (bb!=
NULL)
return bb->blackbox_String(bb,d);
1060 if ((0<
e->start)&&(
e->start<=l->
nr+1))
1062 Subexpr tmp=l->
m[
e->start-1].
e;
1063 l->
m[
e->start-1].
e=
e->next;
1064 r=l->
m[
e->start-1].
Typ();
1065 e->next=l->
m[
e->start-1].
e;
1066 l->
m[
e->start-1].
e=tmp;
1096 if ((0<
e->start)&&(
e->start<=l->
nr+1))
1098 l->
m[
e->start-1].
e=
e->next;
1099 r=l->
m[
e->start-1].
LTyp();
1150 return (
void *)A->qideal->m[0];
1153 return (
void *)
currRing->cf->nNULL;
1187 if ((index<1)||(index>iv->
length()))
1190 Werror(
"wrong range[%d] in intvec %s(%d)",index,this->
Name(),iv->
length());
1193 r=(
char *)(
long)((*iv)[index-1]);
1200 ||(index>iv->
rows())
1201 ||(
e->next->start<1)
1202 ||(
e->next->start>iv->
cols()))
1205 Werror(
"wrong range[%d,%d] in intmat %s(%dx%d)",index,
e->next->start,
1206 this->Name(),iv->
rows(),iv->
cols());
1209 r=(
char *)(
long)(
IMATELEM((*iv),index,
e->next->start));
1217 ||(
e->next->start<1)
1218 ||(
e->next->start>m->
cols()))
1221 Werror(
"wrong range[%d,%d] in bigintmat %s(%dx%d)",index,
e->next->start,
1234 ||(
e->next->start<1)
1235 ||(
e->next->start>m->
cols()))
1238 Werror(
"wrong range[%d,%d] in matrix %s(%dx%d)",index,
e->next->start,
1245 r=(
char*)&iiNumber2Data[iiCmatrix_index];
1246 iiCmatrix_index=(iiCmatrix_index+1) % 4;
1256 if ((index<1)||(index>
IDELEMS(I)))
1262 r=(
char *)I->m[index-1];
1274 if ((index>0)&& (index<=(int)strlen((
char *)d)))
1276 r[0]=*(((
char *)d)+index-1);
1291 memcpy(
this,&tmp,
sizeof(tmp));
1311 ||(
e->next->start<1)
1315 Werror(
"wrong range[%d,%d] in matrix %s(%dx%d)",
1316 index,
e->next->start,
1334 if ((0<index)&&(index<=l->
nr+1))
1340 char *dd=(
char *)l->
m[index-1].
data;
1341 int j=
e->next->start-1;
1343 if ((
j>=0) && (
j<(
int)strlen(dd)))
1355 Subexpr tmp=l->
m[index-1].
e;
1356 l->
m[index-1].
e=
e->next;
1357 r=(
char *)l->
m[index-1].
Data();
1358 e->next=l->
m[index-1].
e;
1359 l->
m[index-1].
e=tmp;
1363 Werror(
"wrong range[%d] in list %s(%d)",index,this->
Name(),l->
nr+1);
1411 if ((0>=
e->start)||(
e->start>l->
nr+1))
1415 l->
m[
e->start-1].
e=
e->next;
1420 return &(l->
m[
e->start-1]);
1427 leftv sleftv::LHdl()
1439 if ((0>=
e->start)||(
e->start>l->
nr+1))
1443 l->
m[
e->start-1].
e=
e->next;
1448 return &(l->
m[
e->start-1]);
1469 Warn(
"%s is no standard basis",h->
Name());
1498 if ((*
id<
' ')||(*
id>(
char)126))
1500 Print(
"wrong id :%s:\n",
id);
1517 if (!isdigit(
id[0]))
1519 if (strcmp(
id,
"basering")==0)
1533 else if (strcmp(
id,
"Current")==0)
1574 v->
data = (
void *)p;
1585 if (ok && (p!=
NULL))
1712 if (strcmp(
id,
"_")==0)
1715 v->
Copy(&sLastPrinted);
1737 v->
data = (
char *)h;
1763 char *what=(
char *)(d->arg1.Data());
1781 else if (d->op==
'=')
1789 const char *n=d->arg1.name;
1790 nok=(n ==
NULL) || d->arg2.Eval();
1793 int save_typ=d->arg1.rtyp;
1795 if (d->arg1.rtyp!=
IDHDL)
1798 if (d->arg1.rtyp==
IDHDL)
1813 memcpy(&d->arg1,&t,
sizeof(
sleftv));
1815 nok=nok||
iiAssign(&d->arg1,&d->arg2);
1820 memset(&d->arg1,0,
sizeof(
sleftv));
1832 if ((toktype==
CMD_M)
1838 if (d->argc>=1) nok=d->arg1.Eval();
1839 if ((!nok) && (d->argc>=2))
1843 memcpy(d->arg1.next,&d->arg2,
sizeof(
sleftv));
1846 if ((!nok) && (d->argc==3))
1850 memcpy(d->arg1.next->next,&d->arg3,
sizeof(
sleftv));
1864 else if (d->argc==1)
1872 nok=nok||d->arg2.Eval();
1878 nok=nok||d->arg2.Eval();
1879 nok=nok||d->arg3.Eval();
1880 nok=nok||
iiExprArith3(&tmp,d->op,&d->arg1,&d->arg2,&d->arg3);
1892 memcpy(
this,&tmp,
sizeof(tmp));
1920 ideal
id=(ideal)
Data();
1922 int i=
id->ncols*
id->nrows-1;
1923 for(;i>=0;i--)
pTest(id->m[i]);
CanonicalForm map(const CanonicalForm &primElem, const Variable &alpha, const CanonicalForm &F, const Variable &beta)
map from to such that is mapped onto
BOOLEAN yyInRingConstruction
static FORCE_INLINE char const ** n_ParameterNames(const coeffs r)
Returns a (const!) pointer to (const char*) names of parameters.
void * slInternalCopy(leftv source, const int t, void *d, Subexpr e)
const CanonicalForm int s
void jjNormalizeQRingP(poly &p)
#define omCheckAddrSize(addr, size)
Class used for (list of) interpreter objects.
void killAll(const ring r)
BOOLEAN iiExprArith1(leftv res, leftv a, int op)
Compatiblity layer for legacy polynomial operations (over currRing)
BOOLEAN iiExprArith3(leftv res, int op, leftv a, leftv b, leftv c)
lists syConvRes(syStrategy syzstr, BOOLEAN toDel, int add_row_shift)
void n2Delete(number2 &d)
#define omCheckIf(cond, test)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
intvec * ivCopy(const intvec *o)
BOOLEAN iiExprArithM(leftv res, leftv a, int op)
void syPrint(syStrategy syzstr, const char *currRingName)
procinfov piCopy(procinfov pi)
static BOOLEAN rField_is_GF(const ring r)
const char * slStatus(si_link l, const char *request)
char * lString(lists l, BOOLEAN typed, int dim)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
BOOLEAN piKill(procinfov pi)
void Print(leftv store=NULL, int spaces=0)
Called by type_cmd (e.g. "r;") or as default in jPRINT.
static poly p_Copy(poly p, const ring r)
returns a copy of p
void iiWriteMatrix(matrix im, const char *n, int dim, const ring r, int spaces)
set spaces to zero by default
char * String(int dim=2) const
char * String(void *d=NULL, BOOLEAN typed=FALSE, int dim=1)
Called for conversion to string (used by string(..), write(..),..)
static FORCE_INLINE int n_NumberOfParameters(const coeffs r)
Returns the number of parameters.
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
void nfShowMipo(const coeffs r)
Show the mininimal polynom.... NOTE: this is used by char * sleftv::String(void *d, BOOLEAN typed, int dim) (from Singular/subexpr.cc) for printing minpoly.
BOOLEAN iiMake_proc(idhdl pn, package pack, sleftv *sl)
int r_IsRingVar(const char *n, char **names, int N)
static FORCE_INLINE BOOLEAN nCoeff_is_algExt(const coeffs r)
TRUE iff r represents an algebraic extension field.
const char * iiTwoOps(int t)
const char * piProcinfo(procinfov pi, const char *request)
bigintmat * bimCopy(const bigintmat *b)
same as copy constructor - apart from it being able to accept NULL as input
#define omFreeBinAddr(addr)
The main handler for Singular numbers which are suitable for Singular polynomials.
void StringSetS(const char *st)
void StringAppendS(const char *st)
static FORCE_INLINE void n_Write(number &n, const coeffs r, const BOOLEAN bShortOut=TRUE)
#define n_Test(a, r)
BOOLEAN n_Test(number a, const coeffs r)
void s_internalDelete(const int t, void *d, const ring r)
#define pIsConstant(p)
like above, except that Comp might be != 0
package paCopy(package pack)
BOOLEAN assumeStdFlag(leftv h)
void PrintS(const char *s)
char * slString(si_link l)
void rWrite(ring r, BOOLEAN details)
static int iiCmatrix_index
static FORCE_INLINE BOOLEAN nCoeff_is_GF(const coeffs r)
static void * s_internalCopy(const int t, void *d)
static int index(p_Length length, p_Ord ord)
#define BIMATELEM(M, I, J)
number2 n2Copy(const number2 d)
int iiDeclCommand(leftv sy, leftv name, int lev, int t, idhdl *root, BOOLEAN isring, BOOLEAN init_b)
static void p_Delete(poly *p, const ring r)
#define omGetSpecBin(size)
void paPrint(const char *n, package p)
BOOLEAN iiCheckRing(int i)
const Variable & v
< [in] a sqrfree bivariate poly
void jjNormalizeQRingId(leftv I)
static FORCE_INLINE number n_Copy(number n, const coeffs r)
return a copy of 'n'
static snumber2 iiNumber2Data[4]
syStrategy syCopy(syStrategy syzstr)
const char * Tok2Cmdname(int tok)
void killhdl(idhdl h, package proot)
char * String()
IO: String returns a singular string containing the matrix, needs freeing afterwards.
coeffs basecoeffs() const
void CleanUp(ring r=currRing)
void Clean(ring r=currRing)
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced ...
matrix mp_Copy(matrix a, const ring r)
copies matrix a (from ring r to r)
map maCopy(map theMap, const ring r)
#define omCheckAddr(addr)
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
static FORCE_INLINE char * nCoeffString(const coeffs cf)
TODO: make it a virtual method of coeffs, together with: Decompose & Compose, rParameter & rPar...
#define omFreeBin(addr, bin)
#define IMATELEM(M, I, J)
char * iiStringMatrix(matrix im, int dim, const ring r, char ch)
BOOLEAN iiExprArith2(leftv res, leftv a, int op, leftv b, BOOLEAN proccall)
void syMake(leftv v, const char *id, package pa)
BOOLEAN lRingDependend(lists L)
void nKillChar(coeffs r)
undo all initialisations
const char * iiSleftv2name(leftv v)
void Werror(const char *fmt,...)
void syKillComputation(syStrategy syzstr, ring r=currRing)
void PrintNSpaces(const int n)
idhdl ggetid(const char *n, BOOLEAN, idhdl *packhdl)
static omBin size_two_bin
char * n2String(number2 d, BOOLEAN typed)
si_link slCopy(si_link l)
#define pCopy(p)
return a copy of the poly
#define MATELEM(mat, i, j)
blackbox * getBlackboxStuff(const int t)
return the structure to the type given by t
BOOLEAN iiAssign(leftv l, leftv r, BOOLEAN toplevel)