72 ch[0]=c->op;ch[1]=
'\0';
75 ::Print(
"##command %d(%s), %d args\n",
78 c->arg1.Print(
NULL,spaces+2);
82 c->arg2.Print(
NULL,spaces+2);
84 c->arg3.Print(
NULL,spaces+2);
145 ((
intvec *)d)->show(t,spaces);
150 const ring r = (
const ring)d;
305 if (bb!=
NULL) { bb->blackbox_Print(bb,d); }
306 else {
::Print(
"Print: blackbox %d(bb=NULL)",t); }
311 if ((store!=
NULL)&&(store!=
this))
442 return (
void*)n2Copy((number2)d);
444 return (
void*)p2Copy((poly2)d);
459 return (
void *)
idCopy((ideal)d);
468 return (
void *)
pCopy((poly)d);
472 return (
void *)
nCopy((number)d);
503 if (b!=
NULL)
return b->blackbox_Copy(b,d);
507 Warn(
"s_internalCopy: cannot copy type %s(%d)",
535 number2 n=(number2)d;
628 Print(
"currRing? ref=%d\n",R->ref);
641 if (cmd->arg1.rtyp!=0) cmd->arg1.CleanUp(r);
642 if (cmd->arg2.rtyp!=0) cmd->arg2.CleanUp(r);
643 if (cmd->arg3.rtyp!=0) cmd->arg3.CleanUp(r);
675 if (b!=
NULL) b->blackbox_destroy(b,d);
679 Warn(
"s_internalDelete: cannot delete type %s(%d)",
696 else if (e->next==
NULL)
718 void *d=source->
Data();
753 x=(
void *)
p_Copy(A->qideal->m[0], A);
789 if (((
command)data)->arg1.rtyp!=0)
791 if (((
command)data)->arg2.rtyp!=0)
793 if (((
command)data)->arg3.rtyp==0)
810 sprintf(s,
"int(%d)",(
int)(
long)d);
815 sprintf(s,
"%d",(
int)(
long)d);
827 s = (
char*)
omAlloc(strlen((
char*) d) + 3);
828 sprintf(s,
"\"%s\"", (
char*) d);
841 s = (
char*)
omAlloc(strlen(ps) + 10);
842 sprintf(s,
"%s(%s)", (t ==
POLY_CMD ?
"poly" :
"vector"), ps);
853 return n2String((number2)d,typed);
888 char* ns = (
char*)
omAlloc(strlen(s) + 40);
889 sprintf(ns,
"matrix(ideal(%s),%d,%d)", s,
906 char* ns = (
char*)
omAlloc(strlen(s) + 10);
908 sprintf(ns,
"ideal(%s)", s);
910 sprintf(ns,
"module(%s)", s);
927 ns = (
char*)
omAlloc(strlen(s) + 40);
928 sprintf(ns,
"intmat(intvec(%s),%d,%d)", s, v->
rows(), v->
cols());
932 ns = (
char*)
omAlloc(strlen(s) + 10);
933 sprintf(ns,
"intvec(%s)", s);
948 char* ns = (
char*)
omAlloc0(strlen(s) + 40);
949 sprintf(ns,
"bigintmat(bigintvec(%s),%d,%d)", s, bim->
rows(), bim->
cols());
968 ns = (
char*)
omAlloc(strlen(s) + strlen(
id) + 20);
969 sprintf(ns,
"\"%s\";%sideal(%s)", s,(dim == 2 ?
"\n" :
" "),
id);
973 ns = (
char*)
omAlloc(strlen(s) + 4);
974 sprintf(ns,
"\"%s\"", s);
993 s = (pi->
data.s.body);
998 char* ns = (
char*)
omAlloc(strlen(s) + 4);
999 sprintf(ns,
"\"%s\"", s);
1010 char* ns = (
char*)
omAlloc(strlen(s) + 10);
1011 sprintf(ns,
"link(\"%s\")", s);
1025 if (bb!=
NULL)
return bb->blackbox_String(bb,d);
1118 if ((0<
e->start)&&(
e->start<=l->
nr+1))
1120 Subexpr tmp=l->
m[
e->start-1].
e;
1121 l->
m[
e->start-1].
e=
e->next;
1122 r=l->
m[
e->start-1].
Typ();
1123 e->next=l->
m[
e->start-1].
e;
1124 l->
m[
e->start-1].
e=tmp;
1154 if ((0<
e->start)&&(
e->start<=l->
nr+1))
1156 l->
m[
e->start-1].
e=
e->next;
1157 r=l->
m[
e->start-1].
LTyp();
1173 static snumber2 iiNumber2Data[4];
1174 static int iiCmatrix_index=0;
1208 return (
void *)A->qideal->m[0];
1211 return (
void *)
nInit(0);
1245 if ((index<1)||(index>iv->
length()))
1248 Werror(
"wrong range[%d] in intvec %s(%d)",index,this->
Name(),iv->
length());
1251 r=(
char *)(
long)((*iv)[index-1]);
1258 ||(index>iv->
rows())
1259 ||(
e->next->start<1)
1260 ||(
e->next->start>iv->
cols()))
1263 Werror(
"wrong range[%d,%d] in intmat %s(%dx%d)",index,
e->next->start,
1264 this->Name(),iv->
rows(),iv->
cols());
1267 r=(
char *)(
long)(
IMATELEM((*iv),index,
e->next->start));
1275 ||(
e->next->start<1)
1276 ||(
e->next->start>m->
cols()))
1279 Werror(
"wrong range[%d,%d] in bigintmat %s(%dx%d)",index,
e->next->start,
1292 ||(
e->next->start<1)
1293 ||(
e->next->start>m->
cols()))
1296 Werror(
"wrong range[%d,%d] in matrix %s(%dx%d)",index,
e->next->start,
1301 iiNumber2Data[iiCmatrix_index].cf=m->
basecoeffs();
1302 iiNumber2Data[iiCmatrix_index].n=
BIMATELEM((*m),index,
e->next->start);
1303 r=(
char*)&iiNumber2Data[iiCmatrix_index];
1304 iiCmatrix_index=(iiCmatrix_index+1) % 4;
1314 if ((index<1)||(index>
IDELEMS(I)))
1320 r=(
char *)I->m[index-1];
1330 if ((index>0)&& (index<=I->rank)
1332 && ((c=
e->next->start)>0) &&(c<=
IDELEMS(I)))
1346 memcpy(
this,&tmp,
sizeof(tmp));
1371 if ((index>0)&& (index<=(int)strlen((
char *)d)))
1373 r[0]=*(((
char *)d)+index-1);
1388 memcpy(
this,&tmp,
sizeof(tmp));
1408 ||(
e->next->start<1)
1412 Werror(
"wrong range[%d,%d] in matrix %s(%dx%d)",
1413 index,
e->next->start,
1431 if ((0<index)&&(index<=l->
nr+1))
1437 char *dd=(
char *)l->
m[index-1].
data;
1438 int j=
e->next->start-1;
1440 if ((
j>=0) && (
j<(
int)strlen(dd)))
1452 Subexpr tmp=l->
m[index-1].
e;
1453 l->
m[index-1].
e=
e->next;
1454 r=(
char *)l->
m[index-1].
Data();
1455 e->next=l->
m[index-1].
e;
1456 l->
m[index-1].
e=tmp;
1460 Werror(
"wrong range[%d] in list %s(%d)",index,this->
Name(),l->
nr+1);
1508 if ((0>=
e->start)||(
e->start>l->
nr+1))
1512 l->
m[
e->start-1].
e=
e->next;
1517 return &(l->
m[
e->start-1]);
1524 leftv sleftv::LHdl()
1536 if ((0>=
e->start)||(
e->start>l->
nr+1))
1540 l->
m[
e->start-1].
e=
e->next;
1541 leftv r=l->
m[
e->start-1].LHdl();
1545 return &(l->
m[
e->start-1]);
1566 Warn(
"%s is no standard basis",h->
Name());
1595 if ((*
id<
' ')||(*
id>(
char)126))
1597 Print(
"wrong id :%s:\n",
id);
1614 if (!isdigit(
id[0]))
1616 if (strcmp(
id,
"basering")==0)
1630 else if (strcmp(
id,
"Current")==0)
1671 v->
data = (
void *)p;
1682 if (ok && (p!=
NULL))
1701 #ifdef HAVE_SHIFTBBA
1808 if (strcmp(
id,
"_")==0)
1811 v->
Copy(&sLastPrinted);
1833 v->
data = (
char *)h;
1859 char *what=(
char *)(d->arg1.Data());
1877 else if (d->op==
'=')
1885 const char *n=d->arg1.name;
1886 nok=(n ==
NULL) || d->arg2.Eval();
1889 int save_typ=d->arg1.rtyp;
1891 if (d->arg1.rtyp!=
IDHDL)
1894 if (d->arg1.rtyp==
IDHDL)
1909 memcpy(&d->arg1,&t,
sizeof(
sleftv));
1911 nok=nok||
iiAssign(&d->arg1,&d->arg2);
1916 memset(&d->arg1,0,
sizeof(
sleftv));
1928 if ((toktype==
CMD_M)
1934 if (d->argc>=1) nok=d->arg1.Eval();
1935 if ((!nok) && (d->argc>=2))
1939 memcpy(d->arg1.next,&d->arg2,
sizeof(
sleftv));
1942 if ((!nok) && (d->argc==3))
1946 memcpy(d->arg1.next->next,&d->arg3,
sizeof(
sleftv));
1960 else if (d->argc==1)
1968 nok=nok||d->arg2.Eval();
1974 nok=nok||d->arg2.Eval();
1975 nok=nok||d->arg3.Eval();
1976 nok=nok||
iiExprArith3(&tmp,d->op,&d->arg1,&d->arg2,&d->arg3);
1988 memcpy(
this,&tmp,
sizeof(tmp));
2016 ideal
id=(ideal)
Data();
2018 int i=
id->ncols*
id->nrows-1;
2019 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)
idhdl ggetid(const char *n)
#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)
ideal id_Copy(ideal h1, const ring r)
copy an ideal
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)
void sBucketPrint(sBucket_pt bucket)
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.
#define SMATELEM(A, i, j, R)
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.
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.
int r_IsRingVar(const char *n, char **names, int N)
static si_link slCopy(si_link l)
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)
void ipPrint_MA0(matrix m, const char *name)
#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 must be 0
package paCopy(package pack)
BOOLEAN assumeStdFlag(leftv h)
void PrintS(const char *s)
matrix id_Module2Matrix(ideal mod, const ring R)
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)
BOOLEAN iiMake_proc(idhdl pn, package pack, leftv sl)
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.
char * sBucketString(sBucket_pt bucket)
void sBucketDeleteAndDestroy(sBucket_pt *bucket_pt)
void CleanUp(ring r=currRing)
void Clean(ring r=currRing)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
poly sBucketPeek(sBucket_pt b)
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)
BOOLEAN pa(leftv res, leftv args)
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)
static char * slString(si_link l)
#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
void Werror(const char *fmt,...)
void syKillComputation(syStrategy syzstr, ring r=currRing)
void PrintNSpaces(const int n)
static omBin size_two_bin
#define pCopy(p)
return a copy of the poly
#define MATELEM(mat, i, j)
1-based access to matrix
blackbox * getBlackboxStuff(const int t)
return the structure to the type given by t
BOOLEAN iiAssign(leftv l, leftv r, BOOLEAN toplevel)
sBucket_pt sBucketCopy(const sBucket_pt bucket)
Copy sBucket non-intrusive!!!