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();
133 ((
intvec *)d)->show(t,spaces);
138 const ring
r = (
const ring)d;
277 if (bb!=
NULL) { bb->blackbox_Print(bb,d); }
278 else {
::Print(
"Print: blackbox %d(bb=NULL)",t); }
283 if ((store!=
NULL)&&(store!=
this))
415 return (
void*)
n2Copy((number2)d);
427 return (
void *)
idCopy((ideal)d);
440 return (
void *)
nCopy((number)d);
471 if (b!=
NULL)
return b->blackbox_Copy(b,d);
475 Warn(
"s_internalCopy: cannot copy type %s(%d)",
493 number2 n=(number2)d;
573 Print(
"currRing? ref=%d\n",R->ref);
586 if (cmd->arg1.rtyp!=0) cmd->arg1.CleanUp(r);
587 if (cmd->arg2.rtyp!=0) cmd->arg2.CleanUp(r);
588 if (cmd->arg3.rtyp!=0) cmd->arg3.CleanUp(r);
621 if (b!=
NULL) b->blackbox_destroy(b,d);
625 Warn(
"s_internalDelete: cannot delete type %s(%d)",
642 else if (e->next==
NULL)
664 void *d=source->
Data();
693 x=(
void *)
p_Copy(A->qideal->m[0], A);
729 if (((
command)data)->arg1.rtyp!=0)
731 if (((
command)data)->arg2.rtyp!=0)
733 if (((
command)data)->arg3.rtyp==0)
750 sprintf(s,
"int(%d)",(
int)(
long)d);
755 sprintf(s,
"%d",(
int)(
long)d);
767 s = (
char*)
omAlloc(strlen((
char*) d) + 3);
768 sprintf(s,
"\"%s\"", (
char*) d);
781 s = (
char*)
omAlloc(strlen(ps) + 10);
782 sprintf(s,
"%s(%s)", (t ==
POLY_CMD ?
"poly" :
"vector"), ps);
809 number n=(number)data;
819 number n=
nCopy((number)d);
839 char* ns = (
char*)
omAlloc(strlen(s) + 40);
840 sprintf(ns,
"matrix(ideal(%s),%d,%d)", s,
856 char* ns = (
char*)
omAlloc(strlen(s) + 10);
857 sprintf(ns,
"%s(%s)", (t==
MODUL_CMD ?
"module" :
"ideal"), s);
873 ns = (
char*)
omAlloc(strlen(s) + 40);
874 sprintf(ns,
"intmat(intvec(%s),%d,%d)", s, v->
rows(), v->
cols());
878 ns = (
char*)
omAlloc(strlen(s) + 10);
879 sprintf(ns,
"intvec(%s)", s);
894 char* ns = (
char*)
omAlloc0(strlen(s) + 40);
895 sprintf(ns,
"bigintmat(bigintvec(%s),%d,%d)", s, bim->
rows(), bim->
cols());
914 ns = (
char*)
omAlloc(strlen(s) + strlen(
id) + 20);
915 sprintf(ns,
"\"%s\";%sideal(%s)", s,(dim == 2 ?
"\n" :
" "),
id);
919 ns = (
char*)
omAlloc(strlen(s) + 4);
920 sprintf(ns,
"\"%s\"", s);
939 s = (pi->
data.s.body);
944 char* ns = (
char*)
omAlloc(strlen(s) + 4);
945 sprintf(ns,
"\"%s\"", s);
956 char* ns = (
char*)
omAlloc(strlen(s) + 10);
957 sprintf(ns,
"link(\"%s\")", s);
971 if (bb!=
NULL)
return bb->blackbox_String(bb,d);
1063 if ((0<
e->start)&&(
e->start<=l->
nr+1))
1065 Subexpr tmp=l->
m[
e->start-1].
e;
1066 l->
m[
e->start-1].
e=
e->next;
1067 r=l->
m[
e->start-1].
Typ();
1068 e->next=l->
m[
e->start-1].
e;
1069 l->
m[
e->start-1].
e=tmp;
1099 if ((0<
e->start)&&(
e->start<=l->
nr+1))
1101 l->
m[
e->start-1].
e=
e->next;
1102 r=l->
m[
e->start-1].
LTyp();
1153 return (
void *)A->qideal->m[0];
1156 return (
void *)
currRing->cf->nNULL;
1190 if ((index<1)||(index>iv->
length()))
1193 Werror(
"wrong range[%d] in intvec %s(%d)",index,this->
Name(),iv->
length());
1196 r=(
char *)(
long)((*iv)[index-1]);
1203 ||(index>iv->
rows())
1204 ||(
e->next->start<1)
1205 ||(
e->next->start>iv->
cols()))
1208 Werror(
"wrong range[%d,%d] in intmat %s(%dx%d)",index,
e->next->start,
1209 this->Name(),iv->
rows(),iv->
cols());
1212 r=(
char *)(
long)(
IMATELEM((*iv),index,
e->next->start));
1220 ||(
e->next->start<1)
1221 ||(
e->next->start>m->
cols()))
1224 Werror(
"wrong range[%d,%d] in bigintmat %s(%dx%d)",index,
e->next->start,
1237 ||(
e->next->start<1)
1238 ||(
e->next->start>m->
cols()))
1241 Werror(
"wrong range[%d,%d] in matrix %s(%dx%d)",index,
e->next->start,
1248 r=(
char*)&iiNumber2Data[iiCmatrix_index];
1249 iiCmatrix_index=(iiCmatrix_index+1) % 4;
1259 if ((index<1)||(index>
IDELEMS(I)))
1265 r=(
char *)I->m[index-1];
1277 if ((index>0)&& (index<=(int)strlen((
char *)d)))
1279 r[0]=*(((
char *)d)+index-1);
1294 memcpy(
this,&tmp,
sizeof(tmp));
1314 ||(
e->next->start<1)
1318 Werror(
"wrong range[%d,%d] in matrix %s(%dx%d)",
1319 index,
e->next->start,
1337 if ((0<index)&&(index<=l->
nr+1))
1343 char *dd=(
char *)l->
m[index-1].
data;
1344 int j=
e->next->start-1;
1346 if ((
j>=0) && (
j<(
int)strlen(dd)))
1358 Subexpr tmp=l->
m[index-1].
e;
1359 l->
m[index-1].
e=
e->next;
1360 r=(
char *)l->
m[index-1].
Data();
1361 e->next=l->
m[index-1].
e;
1362 l->
m[index-1].
e=tmp;
1366 Werror(
"wrong range[%d] in list %s(%d)",index,this->
Name(),l->
nr+1);
1414 if ((0>=
e->start)||(
e->start>l->
nr+1))
1418 l->
m[
e->start-1].
e=
e->next;
1423 return &(l->
m[
e->start-1]);
1430 leftv sleftv::LHdl()
1442 if ((0>=
e->start)||(
e->start>l->
nr+1))
1446 l->
m[
e->start-1].
e=
e->next;
1451 return &(l->
m[
e->start-1]);
1472 Warn(
"%s is no standard basis",h->
Name());
1501 if ((*
id<
' ')||(*
id>(
char)126))
1503 Print(
"wrong id :%s:\n",
id);
1520 if (!isdigit(
id[0]))
1522 if (strcmp(
id,
"basering")==0)
1536 else if (strcmp(
id,
"Current")==0)
1577 v->
data = (
void *)p;
1588 if (ok && (p!=
NULL))
1715 if (strcmp(
id,
"_")==0)
1718 v->
Copy(&sLastPrinted);
1740 v->
data = (
char *)h;
1766 char *what=(
char *)(d->arg1.Data());
1784 else if (d->op==
'=')
1792 const char *n=d->arg1.name;
1793 nok=(n ==
NULL) || d->arg2.Eval();
1796 int save_typ=d->arg1.rtyp;
1798 if (d->arg1.rtyp!=
IDHDL)
1801 if (d->arg1.rtyp==
IDHDL)
1816 memcpy(&d->arg1,&t,
sizeof(
sleftv));
1818 nok=nok||
iiAssign(&d->arg1,&d->arg2);
1823 memset(&d->arg1,0,
sizeof(
sleftv));
1835 if ((toktype==
CMD_M)
1841 if (d->argc>=1) nok=d->arg1.Eval();
1842 if ((!nok) && (d->argc>=2))
1846 memcpy(d->arg1.next,&d->arg2,
sizeof(
sleftv));
1849 if ((!nok) && (d->argc==3))
1853 memcpy(d->arg1.next->next,&d->arg3,
sizeof(
sleftv));
1867 else if (d->argc==1)
1875 nok=nok||d->arg2.Eval();
1881 nok=nok||d->arg2.Eval();
1882 nok=nok||d->arg3.Eval();
1883 nok=nok||
iiExprArith3(&tmp,d->op,&d->arg1,&d->arg2,&d->arg3);
1895 memcpy(
this,&tmp,
sizeof(tmp));
1923 ideal
id=(ideal)
Data();
1925 int i=
id->ncols*
id->nrows-1;
1926 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(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)
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'
static snumber2 iiNumber2Data[4]
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
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)