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();
137 ((
intvec *)d)->show(t,spaces);
142 const ring
r = (
const ring)d;
290 if (bb!=
NULL) { bb->blackbox_Print(bb,d); }
291 else {
::Print(
"Print: blackbox %d(bb=NULL)",t); }
296 if ((store!=
NULL)&&(store!=
this))
427 return (
void*)n2Copy((number2)d);
429 return (
void*)p2Copy((poly2)d);
441 return (
void *)
idCopy((ideal)d);
454 return (
void *)
nCopy((number)d);
485 if (b!=
NULL)
return b->blackbox_Copy(b,d);
489 Warn(
"s_internalCopy: cannot copy type %s(%d)",
517 number2 n=(number2)d;
603 Print(
"currRing? ref=%d\n",R->ref);
616 if (cmd->arg1.rtyp!=0) cmd->arg1.CleanUp(r);
617 if (cmd->arg2.rtyp!=0) cmd->arg2.CleanUp(r);
618 if (cmd->arg3.rtyp!=0) cmd->arg3.CleanUp(r);
650 if (b!=
NULL) b->blackbox_destroy(b,d);
654 Warn(
"s_internalDelete: cannot delete type %s(%d)",
671 else if (e->next==
NULL)
693 void *d=source->
Data();
722 x=(
void *)
p_Copy(A->qideal->m[0], A);
758 if (((
command)data)->arg1.rtyp!=0)
760 if (((
command)data)->arg2.rtyp!=0)
762 if (((
command)data)->arg3.rtyp==0)
779 sprintf(s,
"int(%d)",(
int)(
long)d);
784 sprintf(s,
"%d",(
int)(
long)d);
796 s = (
char*)
omAlloc(strlen((
char*) d) + 3);
797 sprintf(s,
"\"%s\"", (
char*) d);
810 s = (
char*)
omAlloc(strlen(ps) + 10);
811 sprintf(s,
"%s(%s)", (t ==
POLY_CMD ?
"poly" :
"vector"), ps);
822 return n2String((number2)d,typed);
856 char* ns = (
char*)
omAlloc(strlen(s) + 40);
857 sprintf(ns,
"matrix(ideal(%s),%d,%d)", s,
873 char* ns = (
char*)
omAlloc(strlen(s) + 10);
874 sprintf(ns,
"%s(%s)", (t==
MODUL_CMD ?
"module" :
"ideal"), s);
890 ns = (
char*)
omAlloc(strlen(s) + 40);
891 sprintf(ns,
"intmat(intvec(%s),%d,%d)", s, v->
rows(), v->
cols());
895 ns = (
char*)
omAlloc(strlen(s) + 10);
896 sprintf(ns,
"intvec(%s)", s);
911 char* ns = (
char*)
omAlloc0(strlen(s) + 40);
912 sprintf(ns,
"bigintmat(bigintvec(%s),%d,%d)", s, bim->
rows(), bim->
cols());
931 ns = (
char*)
omAlloc(strlen(s) + strlen(
id) + 20);
932 sprintf(ns,
"\"%s\";%sideal(%s)", s,(dim == 2 ?
"\n" :
" "),
id);
936 ns = (
char*)
omAlloc(strlen(s) + 4);
937 sprintf(ns,
"\"%s\"", s);
956 s = (pi->
data.s.body);
961 char* ns = (
char*)
omAlloc(strlen(s) + 4);
962 sprintf(ns,
"\"%s\"", s);
973 char* ns = (
char*)
omAlloc(strlen(s) + 10);
974 sprintf(ns,
"link(\"%s\")", s);
988 if (bb!=
NULL)
return bb->blackbox_String(bb,d);
1080 if ((0<
e->start)&&(
e->start<=l->
nr+1))
1082 Subexpr tmp=l->
m[
e->start-1].
e;
1083 l->
m[
e->start-1].
e=
e->next;
1084 r=l->
m[
e->start-1].
Typ();
1085 e->next=l->
m[
e->start-1].
e;
1086 l->
m[
e->start-1].
e=tmp;
1116 if ((0<
e->start)&&(
e->start<=l->
nr+1))
1118 l->
m[
e->start-1].
e=
e->next;
1119 r=l->
m[
e->start-1].
LTyp();
1135 static snumber2 iiNumber2Data[4];
1136 static int iiCmatrix_index=0;
1170 return (
void *)A->qideal->m[0];
1173 return (
void *)
currRing->cf->nNULL;
1207 if ((index<1)||(index>iv->
length()))
1210 Werror(
"wrong range[%d] in intvec %s(%d)",index,this->
Name(),iv->
length());
1213 r=(
char *)(
long)((*iv)[index-1]);
1220 ||(index>iv->
rows())
1221 ||(
e->next->start<1)
1222 ||(
e->next->start>iv->
cols()))
1225 Werror(
"wrong range[%d,%d] in intmat %s(%dx%d)",index,
e->next->start,
1226 this->Name(),iv->
rows(),iv->
cols());
1229 r=(
char *)(
long)(
IMATELEM((*iv),index,
e->next->start));
1237 ||(
e->next->start<1)
1238 ||(
e->next->start>m->
cols()))
1241 Werror(
"wrong range[%d,%d] in bigintmat %s(%dx%d)",index,
e->next->start,
1254 ||(
e->next->start<1)
1255 ||(
e->next->start>m->
cols()))
1258 Werror(
"wrong range[%d,%d] in matrix %s(%dx%d)",index,
e->next->start,
1263 iiNumber2Data[iiCmatrix_index].cf=m->
basecoeffs();
1264 iiNumber2Data[iiCmatrix_index].n=
BIMATELEM((*m),index,
e->next->start);
1265 r=(
char*)&iiNumber2Data[iiCmatrix_index];
1266 iiCmatrix_index=(iiCmatrix_index+1) % 4;
1276 if ((index<1)||(index>
IDELEMS(I)))
1282 r=(
char *)I->m[index-1];
1294 if ((index>0)&& (index<=(int)strlen((
char *)d)))
1296 r[0]=*(((
char *)d)+index-1);
1311 memcpy(
this,&tmp,
sizeof(tmp));
1331 ||(
e->next->start<1)
1335 Werror(
"wrong range[%d,%d] in matrix %s(%dx%d)",
1336 index,
e->next->start,
1354 if ((0<index)&&(index<=l->
nr+1))
1360 char *dd=(
char *)l->
m[index-1].
data;
1361 int j=
e->next->start-1;
1363 if ((
j>=0) && (
j<(
int)strlen(dd)))
1375 Subexpr tmp=l->
m[index-1].
e;
1376 l->
m[index-1].
e=
e->next;
1377 r=(
char *)l->
m[index-1].
Data();
1378 e->next=l->
m[index-1].
e;
1379 l->
m[index-1].
e=tmp;
1383 Werror(
"wrong range[%d] in list %s(%d)",index,this->
Name(),l->
nr+1);
1431 if ((0>=
e->start)||(
e->start>l->
nr+1))
1435 l->
m[
e->start-1].
e=
e->next;
1440 return &(l->
m[
e->start-1]);
1447 leftv sleftv::LHdl()
1459 if ((0>=
e->start)||(
e->start>l->
nr+1))
1463 l->
m[
e->start-1].
e=
e->next;
1468 return &(l->
m[
e->start-1]);
1489 Warn(
"%s is no standard basis",h->
Name());
1518 if ((*
id<
' ')||(*
id>(
char)126))
1520 Print(
"wrong id :%s:\n",
id);
1537 if (!isdigit(
id[0]))
1539 if (strcmp(
id,
"basering")==0)
1553 else if (strcmp(
id,
"Current")==0)
1594 v->
data = (
void *)p;
1605 if (ok && (p!=
NULL))
1732 if (strcmp(
id,
"_")==0)
1735 v->
Copy(&sLastPrinted);
1757 v->
data = (
char *)h;
1783 char *what=(
char *)(d->arg1.Data());
1801 else if (d->op==
'=')
1809 const char *n=d->arg1.name;
1810 nok=(n ==
NULL) || d->arg2.Eval();
1813 int save_typ=d->arg1.rtyp;
1815 if (d->arg1.rtyp!=
IDHDL)
1818 if (d->arg1.rtyp==
IDHDL)
1833 memcpy(&d->arg1,&t,
sizeof(
sleftv));
1835 nok=nok||
iiAssign(&d->arg1,&d->arg2);
1840 memset(&d->arg1,0,
sizeof(
sleftv));
1852 if ((toktype==
CMD_M)
1858 if (d->argc>=1) nok=d->arg1.Eval();
1859 if ((!nok) && (d->argc>=2))
1863 memcpy(d->arg1.next,&d->arg2,
sizeof(
sleftv));
1866 if ((!nok) && (d->argc==3))
1870 memcpy(d->arg1.next->next,&d->arg3,
sizeof(
sleftv));
1884 else if (d->argc==1)
1892 nok=nok||d->arg2.Eval();
1898 nok=nok||d->arg2.Eval();
1899 nok=nok||d->arg3.Eval();
1900 nok=nok||
iiExprArith3(&tmp,d->op,&d->arg1,&d->arg2,&d->arg3);
1912 memcpy(
this,&tmp,
sizeof(tmp));
1940 ideal
id=(ideal)
Data();
1942 int i=
id->ncols*
id->nrows-1;
1943 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)
#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
real floating point (GMP) numbers
void iiWriteMatrix(matrix im, const char *n, int dim, const ring r, int spaces)
set spaces to zero by default
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)
complex floating point (GMP) numbers
static FORCE_INLINE char * nCoeffName(const coeffs cf)
#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 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)
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)
char * String(int dim=2) const
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'
syStrategy syCopy(syStrategy syzstr)
const char * Tok2Cmdname(int tok)
void killhdl(idhdl h, package proot)
coeffs basecoeffs() const
char * String()
IO: String returns a singular string containing the matrix, needs freeing afterwards.
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
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)