14 #include <gfanlib/gfanlib.h> 15 #include <gfanlib/gfanlib_q.h> 22 gfan::ZMatrix
i=c.getInequalities();
23 gfan::ZMatrix e=c.getEquations();
24 s<<
"AMBIENT_DIM"<<std::endl;
25 s<<c.ambientDimension()-1<<std::endl;
26 s<<
"INEQUALITIES"<<std::endl;
28 s<<
"EQUATIONS"<<std::endl;
35 return (
void*)(
new gfan::ZCone());
45 gfan::ZCone* zd = (gfan::ZCone*)
l->Data();
48 newZc =
new gfan::ZCone();
50 else if (
r->Typ()==
l->Typ())
54 gfan::ZCone* zd = (gfan::ZCone*)
l->Data();
57 gfan::ZCone* zc = (gfan::ZCone*)
r->Data();
58 newZc =
new gfan::ZCone(*zc);
77 Werror(
"assign Type(%d) = Type(%d) not implemented",
l->Typ(),
r->Typ());
87 l->data=(
void *)newZc;
96 gfan::ZCone* zc = (gfan::ZCone*)d;
106 gfan::ZCone* zc = (gfan::ZCone*) d;
113 gfan::ZCone* zc = (gfan::ZCone*)d;
114 gfan::ZCone* newZc =
new gfan::ZCone(*zc);
134 gfan::ZCone* zc =
new gfan::ZCone();
135 *zc = gfan::ZCone::givenByRays(*zm, gfan::ZMatrix(0, zm->getWidth()));
137 res->data = (
void*) zc;
164 int k = (int)(
long)
v->Data();
166 if ((
k < 0) || (
k > 1))
168 WerrorS(
"expected int argument in [0..1]");
173 gfan::ZCone* zc =
new gfan::ZCone();
174 *zc = gfan::ZCone::givenByRays(*zm,gfan::ZMatrix(0, zm->getWidth()));
177 res->data = (
void*) zc;
192 gfan::initializeCddlibIfRequired();
194 gfan::deinitializeCddlibIfRequired();
202 gfan::initializeCddlibIfRequired();
204 gfan::deinitializeCddlibIfRequired();
209 WerrorS(
"polytopeViaPoints: unexpected parameters");
226 gfan::ZCone* zc =
new gfan::ZCone(*zm, gfan::ZMatrix(0, zm->getWidth()));
231 res->data = (
void*) zc;
260 Werror(
"expected same number of columns but got %d vs. %d",
266 gfan::ZCone* zc =
new gfan::ZCone(*zm1, *zm2);
275 res->data = (
void*) zc;
306 Werror(
"expected same number of columns but got %d vs. %d",
310 int k = (int)(
long)
w->Data();
311 if ((
k < 0) || (
k > 3))
313 WerrorS(
"expected int argument in [0..3]");
318 gfan::ZCone* zc =
new gfan::ZCone(*zm1, *zm2,
k);
327 res->data = (
void*) zc;
338 gfan::initializeCddlibIfRequired();
340 gfan::deinitializeCddlibIfRequired();
349 gfan::initializeCddlibIfRequired();
351 gfan::deinitializeCddlibIfRequired();
360 gfan::initializeCddlibIfRequired();
362 gfan::deinitializeCddlibIfRequired();
366 WerrorS(
"polytopeViaInequalities: unexpected parameters");
375 gfan::initializeCddlibIfRequired();
376 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
377 gfan::ZMatrix zmat = zc->extremeRays();
380 gfan::deinitializeCddlibIfRequired();
383 WerrorS(
"vertices: unexpected parameters");
389 return zc->ambientDimension()-1;
394 return zc->codimension();
399 return zc->dimension()-1;
404 gfan::ZVector zv(d+1);
406 for(
int j=1;
j<=d;
j++)
416 gfan::ZMatrix zm(0,
N+1);
417 int *leadexpv = (
int*)
omAlloc((
N+1)*
sizeof(int));
426 gfan::ZCone Delta = gfan::ZCone::givenByRays(zm,gfan::ZMatrix(0, zm.getWidth()));
435 gfan::initializeCddlibIfRequired();
439 gfan::deinitializeCddlibIfRequired();
442 WerrorS(
"newtonPolytope: unexpected parameters");
454 gfan::initializeCddlibIfRequired();
455 int s = (int)(
long) u->
Data();
456 gfan::ZCone* zp = (gfan::ZCone*)
v->Data();
457 gfan::ZMatrix zm = zp->extremeRays();
458 for (
int i=0;
i<zm.getHeight();
i++)
459 for (
int j=1;
j<zm.getWidth();
j++)
461 gfan::ZCone* zq =
new gfan::ZCone();
462 *zq = gfan::ZCone::givenByRays(zm,gfan::ZMatrix(0, zm.getWidth()));
464 res->data = (
void*) zq;
465 gfan::deinitializeCddlibIfRequired();
469 WerrorS(
"scalePolytope: unexpected parameters");
478 gfan::initializeCddlibIfRequired();
479 gfan::ZCone* zp = (gfan::ZCone*) u->
Data();
480 gfan::ZCone* zq =
new gfan::ZCone(zp->dualCone());
482 res->data = (
void*) zq;
483 gfan::deinitializeCddlibIfRequired();
486 WerrorS(
"dualPolytope: unexpected parameters");
495 gfan::initializeCddlibIfRequired();
498 std::vector<gfan::IntMatrix>
P(
k);
499 for (
int i=0;
i<
k;
i++)
503 gfan::ZCone*
p = (gfan::ZCone*)
l->m[
i].Data();
504 gfan::ZMatrix pv =
p->extremeRays();
505 int r = pv.getHeight();
506 int c = pv.getWidth();
507 gfan::IntMatrix pw(
r,c-1);
508 for (
int n=0; n<
r; n++)
509 for (
int m=1;
m<c;
m++)
510 pw[n][
m-1] = pv[n][
m].toInt();
511 P[
i]=pw.transposed();
516 gfan::IntMatrix pw(0,
N);
517 int *leadexpv = (
int*)
omAlloc((
N+1)*
sizeof(int));
521 gfan::IntVector zv(
N);
522 for (
int i=0;
i<
N;
i++)
523 zv[
i] = leadexpv[
i+1];
527 P[
i]=pw.transposed();
532 WerrorS(
"mixedVolume: entries of unsupported type in list");
533 gfan::deinitializeCddlibIfRequired();
541 gfan::deinitializeCddlibIfRequired();
544 WerrorS(
"mixedVolume: unexpected parameters");
552 blackbox *
b=(blackbox*)
omAlloc0(
sizeof(blackbox));
BOOLEAN mixedVolume(leftv res, leftv args)
const CanonicalForm int s
Class used for (list of) interpreter objects.
BOOLEAN dualPolytope(leftv res, leftv args)
BOOLEAN bbpolytope_Assign(leftv l, leftv r)
BOOLEAN scalePolytope(leftv res, leftv args)
void * bbpolytope_Init(blackbox *)
bigintmat * iv2bim(intvec *b, const coeffs C)
bigintmat * zMatrixToBigintmat(const gfan::ZMatrix &zm)
static void p_GetExpV(poly p, int *ev, const ring r)
#define omFreeSize(addr, size)
static BOOLEAN ppCONENORMALS3(leftv res, leftv u, leftv v, leftv w)
static short rVar(const ring r)
#define rVar(r) (r->N)
static BOOLEAN ppCONERAYS1(leftv res, leftv v)
void WerrorS(const char *s)
gfan::ZVector intStar2ZVectorWithLeadingOne(const int d, const int *i)
int getDimension(gfan::ZCone *zc)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
static BOOLEAN ppCONENORMALS2(leftv res, leftv u, leftv v)
const CanonicalForm CFMap CFMap & N
gfan::ZMatrix * bigintmatToZMatrix(const bigintmat &bim)
void bbpolytope_destroy(blackbox *, void *d)
BOOLEAN vertices(leftv res, leftv args)
BOOLEAN polytopeViaNormals(leftv res, leftv args)
number integerToNumber(const gfan::Integer &I)
std::string bbpolytopeToString(gfan::ZCone const &c)
const Variable & v
< [in] a sqrfree bivariate poly
BOOLEAN polytopeViaVertices(leftv res, leftv args)
BOOLEAN rays(leftv res, leftv args)
int getCodimension(gfan::ZCone *zc)
int getAmbientDimension(gfan::ZCone *zc)
gfan::ZCone newtonPolytope(poly p, ring r)
static BOOLEAN ppCONENORMALS1(leftv res, leftv v)
std::string toString(const gfan::ZCone *const c)
char * bbpolytope_String(blackbox *, void *d)
int setBlackboxStuff(blackbox *bb, const char *n)
define a new type
static BOOLEAN ppCONERAYS3(leftv res, leftv u, leftv v)
void * bbpolytope_Copy(blackbox *, void *d)
void Werror(const char *fmt,...)
void bbpolytope_setup(SModulFunctions *p)