18 #include <gfanlib/gfanlib.h>
19 #include <gfanlib/gfanlib_q.h>
29 s<<
"AMBIENT_DIM"<<std::endl;
30 s<<c->ambientDimension()<<std::endl;
32 gfan::ZMatrix
i=c->getInequalities();
34 if (c->areFacetsKnown())
35 s<<
"FACETS"<<std::endl;
37 s<<
"INEQUALITIES"<<std::endl;
44 gfan::ZMatrix e=c->getEquations();
46 if (c->areImpliedEquationsKnown())
47 s<<
"LINEAR_SPAN"<<std::endl;
49 s<<
"EQUATIONS"<<std::endl;
56 if (c->areExtremeRaysKnown())
58 gfan::ZMatrix
r=c->extremeRays();
66 gfan::ZMatrix
l=c->generatorsOfLinealitySpace();
68 s<<
"LINEALITY_SPACE"<<std::endl;
81 return (
void*)(
new gfan::ZCone());
91 gfan::ZCone* zd = (gfan::ZCone*)l->
Data();
94 newZc =
new gfan::ZCone();
96 else if (r->
Typ()==l->
Typ())
100 gfan::ZCone* zd = (gfan::ZCone*)l->
Data();
103 newZc = (gfan::ZCone*)r->
CopyD();
107 int ambientDim = (int)(
long)r->
Data();
110 Werror(
"expected an int >= 0, but got %d", ambientDim);
115 gfan::ZCone* zd = (gfan::ZCone*)l->
Data();
118 newZc =
new gfan::ZCone(ambientDim);
122 Werror(
"assign Type(%d) = Type(%d) not implemented",l->
Typ(),r->
Typ());
132 l->
data=(
void *)newZc;
151 gfan::ZCone* zc = (gfan::ZCone*) d;
158 gfan::ZCone* zc = (gfan::ZCone*)d;
159 gfan::ZCone* newZc =
new gfan::ZCone(*zc);
165 gfan::ZCone* zp = (gfan::ZCone*) i1->
Data();
172 gfan::ZCone* zq = (gfan::ZCone*) i2->
Data();
173 int d1 = zp->ambientDimension();
174 int d2 = zq->ambientDimension();
177 WerrorS(
"mismatching ambient dimensions");
180 gfan::ZCone* zs =
new gfan::ZCone();
181 *zs = gfan::intersection(*zp, *zq);
184 res->
data = (
void*) zs;
193 gfan::ZCone* zq = (gfan::ZCone*) i2->
Data();
194 int d1 = zp->ambientDimension();
195 int d2 = zq->ambientDimension();
198 WerrorS(
"mismatching ambient dimensions");
201 gfan::ZMatrix
rays = zp->extremeRays();
202 rays.append(zq->extremeRays());
203 gfan::ZMatrix lineality = zp->generatorsOfLinealitySpace();
204 lineality.append(zq->generatorsOfLinealitySpace());
205 gfan::ZCone* zs =
new gfan::ZCone();
206 *zs = gfan::ZCone::givenByRays(rays,lineality);
209 res->
data = (
void*) zs;
218 gfan::ZCone* zq = (gfan::ZCone*) i2->
Data();
221 bool b = !((*zp)!=(*zq));
223 res->
data = (
void*) b;
249 gfan::ZCone* zc =
new gfan::ZCone(*zm, gfan::ZMatrix(0, zm->getWidth()));
254 res->
data = (
void*) zc;
283 Werror(
"expected same number of columns but got %d vs. %d",
289 gfan::ZCone* zc =
new gfan::ZCone(*zm1, *zm2);
297 res->
data = (
void*) zc;
327 Werror(
"expected same number of columns but got %d vs. %d",
331 int k = (int)(
long)w->
Data();
332 if ((k < 0) || (k > 3))
334 WerrorS(
"expected int argument in [0..3]");
339 gfan::ZCone* zc =
new gfan::ZCone(*zm1, *zm2, k);
347 res->
data = (
void*) zc;
368 WerrorS(
"coneViaInequalities: unexpected parameters");
388 gfan::ZCone* zc =
new gfan::ZCone();
389 *zc = gfan::ZCone::givenByRays(*zm, gfan::ZMatrix(0, zm->getWidth()));
391 res->
data = (
void*) zc;
425 if (rays->
cols() != linSpace->
cols())
427 Werror(
"expected same number of columns but got %d vs. %d",
433 gfan::ZCone* zc =
new gfan::ZCone();
434 *zc = gfan::ZCone::givenByRays(*zm1, *zm2);
436 res->
data = (
void*) zc;
477 if (rays->
cols() != linSpace->
cols())
479 Werror(
"expected same number of columns but got %d vs. %d",
483 int k = (int)(
long)w->
Data();
484 if ((k < 0) || (k > 3))
486 WerrorS(
"expected int argument in [0..3]");
491 gfan::ZCone* zc =
new gfan::ZCone();
492 *zc = gfan::ZCone::givenByRays(*zm1, *zm2);
495 res->
data = (
void*) zc;
523 WerrorS(
"coneViaPoints: unexpected parameters");
532 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
534 gfan::ZMatrix zmat = zc->getInequalities();
539 WerrorS(
"inequalities: unexpected parameters");
548 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
549 gfan::ZMatrix zmat = zc->getEquations();
554 WerrorS(
"equations: unexpected parameters");
563 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
564 gfan::ZMatrix zm = zc->getFacets();
569 WerrorS(
"facets: unexpected parameters");
578 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
579 gfan::ZMatrix zmat = zc->getImpliedEquations();
584 WerrorS(
"span: unexpected parameters");
593 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
594 gfan::ZMatrix zmat = zc->generatorsOfSpan();
599 WerrorS(
"generatorsOfSpan: unexpected parameters");
608 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
609 gfan::ZMatrix zmat = zc->generatorsOfLinealitySpace();
614 WerrorS(
"generatorsOfLinealitySpace: unexpected parameters");
623 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
624 gfan::ZMatrix zm = zc->extremeRays();
631 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
632 gfan::ZMatrix zmat =
rays(zf);
637 WerrorS(
"rays: unexpected parameters");
646 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
647 gfan::ZMatrix zmat = zc->quotientLatticeBasis();
652 WerrorS(
"quotientLatticeBasis: unexpected parameters");
661 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
662 gfan::ZMatrix zmat = zc->getLinearForms();
667 WerrorS(
"getLinearForms: unexpected parameters");
676 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
678 res->
data = (
void*) (
long) zc->ambientDimension();
683 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
690 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
695 WerrorS(
"ambientDimension: unexpected parameters");
704 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
706 res->
data = (
void*) (
long) zc->dimension();
711 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
718 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
723 WerrorS(
"dimension: unexpected parameters");
732 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
734 res->
data = (
void*) (
long) zc->codimension();
739 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
746 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
751 WerrorS(
"getCodimension: unexpected parameters");
760 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
762 res->
data = (
void*) (
long) zc->dimensionOfLinealitySpace();
767 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
772 WerrorS(
"linealityDimension: unexpected parameters");
781 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
784 res->
data = (
void*) i;
787 WerrorS(
"getMultiplicity: unexpected parameters");
796 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
797 int i = zc->isOrigin();
799 res->
data = (
void*) (
long)
i;
802 WerrorS(
"isOrigin: unexpected parameters");
811 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
812 int i = zc->isFullSpace();
814 res->
data = (
void*) (
long)
i;
817 WerrorS(
"isFullSpace: unexpected parameters");
826 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
827 int b = zc->isSimplicial();
829 res->
data = (
void*) (
long)
b;
834 gfan::ZFan* zf = (gfan::ZFan*) u->
Data();
837 res->
data = (
void*) (
long)
b;
840 WerrorS(
"isSimplicial: unexpected parameters");
849 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
850 int i = zc->containsPositiveVector();
852 res->
data = (
void*) (
long)
i;
855 WerrorS(
"containsPositiveVector: unexpected parameters");
864 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
865 gfan::ZCone* zd =
new gfan::ZCone(zc->linealitySpace());
867 res->
data = (
void*) zd;
870 WerrorS(
"linealitySpace: unexpected parameters");
879 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
880 gfan::ZCone* zd =
new gfan::ZCone(zc->dualCone());
882 res->
data = (
void*) zd;
885 WerrorS(
"dual: unexpected parameters");
894 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
895 gfan::ZCone* zd =
new gfan::ZCone(zc->negated());
897 res->
data = (
void*) zd;
900 WerrorS(
"negatedCone: unexpected parameters");
909 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
910 int d = zc->dimension();
911 int dLS = zc->dimensionOfLinealitySpace();
914 gfan::ZVector zv = zc->semiGroupGeneratorOfRay();
919 Werror(
"expected dim of cone one larger than dim of lin space\n"
920 "but got dimensions %d and %d", d, dLS);
922 WerrorS(
"semigroupGenerator: unexpected parameters");
931 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
932 gfan::ZVector zv = zc->getRelativeInteriorPoint();
937 WerrorS(
"relativeInteriorPoint: unexpected parameters");
946 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
947 gfan::ZVector zv = zc->getUniquePoint();
952 WerrorS(
"uniquePoint: unexpected parameters");
958 gfan::ZVector rp = gfan::ZVector(zc->ambientDimension());
960 gfan::ZMatrix
rays = zc->extremeRays();
961 for (
int i=0;
i<rays.getHeight();
i++)
964 rp = rp + n * rays[
i];
967 gfan::ZMatrix lins = zc->generatorsOfLinealitySpace();
968 for (
int i=0;
i<lins.getHeight();
i++)
971 rp = rp + n * lins[
i];
982 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
988 WerrorS(
"randomPoint: unexpected parameters");
997 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1001 int val = (int)(
long)v->
Data();
1002 zc->setMultiplicity(gfan::Integer(val));
1008 WerrorS(
"setMultiplicity: unexpected parameters");
1017 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1030 zc->setLinearForms(*zm);
1040 WerrorS(
"setLinearForms: unexpected parameters");
1044 gfan::ZMatrix
liftUp(
const gfan::ZMatrix &zm)
1046 int r=zm.getHeight();
1047 int c=zm.getWidth();
1048 gfan::ZMatrix zn(r+1,c+1);
1050 for (
int i=0;
i<
r;
i++)
1051 for (
int j=0;
j<c;
j++)
1052 zn[
i+1][
j+1]=zm[
i][
j];
1058 gfan::ZMatrix ineq=zc.getInequalities();
1059 gfan::ZMatrix eq=zc.getEquations();
1069 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
1070 gfan::ZMatrix ineq=zc->getInequalities();
1071 gfan::ZMatrix eq=zc->getEquations();
1072 gfan::ZCone* zd =
new gfan::ZCone(
liftUp(ineq),
liftUp(eq));
1074 res->
data = (
void*) zd;
1077 WerrorS(
"makePolytope: unexpected parameters");
1089 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1090 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1091 int d1 = zc1->ambientDimension();
1092 int d2 = zc2->ambientDimension();
1095 Werror(
"expected ambient dims of both cones to coincide\n"
1096 "but got %d and %d", d1, d2);
1099 gfan::ZCone zc3 = gfan::intersection(*zc1, *zc2);
1102 res->
data = (
void *)
new gfan::ZCone(zc3);
1107 gfan::ZCone* zc11 = (gfan::ZCone*)u->
Data();
1108 gfan::ZCone zc1 =
liftUp(*zc11);
1109 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1110 int d1 = zc1.ambientDimension();
1111 int d2 = zc2->ambientDimension();
1114 Werror(
"expected ambient dims of both cones to coincide\n"
1115 "but got %d and %d", d1, d2);
1118 gfan::ZCone zc3 = gfan::intersection(zc1, *zc2);
1121 res->
data = (
void *)
new gfan::ZCone(zc3);
1130 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1131 gfan::ZCone* zc22 = (gfan::ZCone*)v->
Data();
1132 gfan::ZCone zc2 =
liftUp(*zc22);
1133 int d1 = zc1->ambientDimension();
1134 int d2 = zc2.ambientDimension();
1137 Werror(
"expected ambient dims of both cones to coincide\n"
1138 "but got %d and %d", d1, d2);
1141 gfan::ZCone zc3 = gfan::intersection(*zc1, zc2);
1144 res->
data = (
void *)
new gfan::ZCone(zc3);
1149 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1150 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1151 int d1 = zc1->ambientDimension();
1152 int d2 = zc2->ambientDimension();
1155 Werror(
"expected ambient dims of both cones to coincide\n"
1156 "but got %d and %d", d1, d2);
1159 gfan::ZCone zc3 = gfan::intersection(*zc1, *zc2);
1162 res->
data = (
void *)
new gfan::ZCone(zc3);
1166 WerrorS(
"convexIntersection: unexpected parameters");
1178 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1179 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1180 int d1 = zc1->ambientDimension();
1181 int d2 = zc2->ambientDimension();
1184 Werror(
"expected ambient dims of both cones to coincide\n"
1185 "but got %d and %d", d1, d2);
1188 gfan::ZMatrix zm1 = zc1->extremeRays();
1189 gfan::ZMatrix zm2 = zc2->extremeRays();
1190 gfan::ZMatrix zn1 = zc1->generatorsOfLinealitySpace();
1191 gfan::ZMatrix zn2 = zc2->generatorsOfLinealitySpace();
1192 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1193 gfan::ZMatrix zn = combineOnTop(zn1,zn2);
1194 gfan::ZCone* zc =
new gfan::ZCone();
1195 *zc = gfan::ZCone::givenByRays(zm, zn);
1197 res->
data = (
void*) zc;
1202 gfan::ZCone* zc11 = (gfan::ZCone*)u->
Data();
1203 gfan::ZCone zc1 =
liftUp(*zc11);
1204 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1205 int d1 = zc1.ambientDimension()-1;
1206 int d2 = zc2->ambientDimension()-1;
1209 Werror(
"expected ambient dims of both cones to coincide\n"
1210 "but got %d and %d", d1, d2);
1213 gfan::ZMatrix zm1 = zc1.extremeRays();
1214 gfan::ZMatrix zm2 = zc2->extremeRays();
1215 gfan::ZMatrix zn = zc1.generatorsOfLinealitySpace();
1216 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1217 gfan::ZCone* zc =
new gfan::ZCone();
1218 *zc = gfan::ZCone::givenByRays(zm, zn);
1220 res->
data = (
void*) zc;
1229 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1230 gfan::ZCone* zc22 = (gfan::ZCone*)v->
Data();
1231 gfan::ZCone zc2 =
liftUp(*zc22);
1232 int d1 = zc1->ambientDimension()-1;
1233 int d2 = zc2.ambientDimension()-1;
1236 Werror(
"expected ambient dims of both cones to coincide\n"
1237 "but got %d and %d", d1, d2);
1240 gfan::ZMatrix zm1 = zc1->extremeRays();
1241 gfan::ZMatrix zm2 = zc2.extremeRays();
1242 gfan::ZMatrix zn = zc2.generatorsOfLinealitySpace();
1243 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1244 gfan::ZCone* zc =
new gfan::ZCone();
1245 *zc = gfan::ZCone::givenByRays(zm,gfan::ZMatrix(0, zm.getWidth()));
1247 res->
data = (
void*) zc;
1252 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1253 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1254 int d1 = zc1->ambientDimension()-1;
1255 int d2 = zc2->ambientDimension()-1;
1258 Werror(
"expected ambient dims of both cones to coincide\n"
1259 "but got %d and %d", d1, d2);
1262 gfan::ZMatrix zm1 = zc1->extremeRays();
1263 gfan::ZMatrix zm2 = zc2->extremeRays();
1264 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1265 gfan::ZCone* zc =
new gfan::ZCone();
1266 *zc = gfan::ZCone::givenByRays(zm,gfan::ZMatrix(0, zm.getWidth()));
1268 res->
data = (
void*) zc;
1272 WerrorS(
"convexHull: unexpected parameters");
1284 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1294 int d1 = zc->ambientDimension();
1295 int d2 = zv->size();
1298 Werror(
"expected ambient dim of cone and size of vector\n"
1299 " to be equal but got %d and %d", d1, d2);
1302 if(!zc->contains(*zv))
1304 WerrorS(
"the provided intvec does not lie in the cone");
1307 gfan::ZCone* zd =
new gfan::ZCone(zc->link(*zv));
1309 res->
data = (
void *) zd;
1317 WerrorS(
"coneLink: unexpected parameters");
1329 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1330 gfan::ZCone* zd = (gfan::ZCone*)v->
Data();
1331 int d1 = zc->ambientDimension();
1332 int d2 = zd->ambientDimension();
1335 Werror(
"expected cones with same ambient dimensions\n but got"
1336 " dimensions %d and %d", d1, d2);
1339 bool b = (zc->contains(*zd) ? 1 : 0);
1341 res->
data = (
void*) (
long)
b;
1346 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1357 int d1 = zc->ambientDimension();
1358 int d2 = zv->size();
1361 Werror(
"expected cones with same ambient dimensions\n but got"
1362 " dimensions %d and %d", d1, d2);
1365 int b = zc->contains(*zv);
1367 res->
data = (
void*) (
long)
b;
1375 WerrorS(
"containsInSupport: unexpected parameters");
1387 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1397 int d1 = zc->ambientDimension();
1398 int d2 = zv->size();
1401 bool b = (zc->containsRelatively(*zv) ? 1 : 0);
1403 res->
data = (
void *) b;
1412 Werror(
"expected ambient dim of cone and size of vector\n"
1413 "to be equal but got %d and %d", d1, d2);
1416 WerrorS(
"containsRelatively: unexpected parameters");
1428 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1429 gfan::ZCone* zd = (gfan::ZCone*)v->
Data();
1430 bool b = zc->hasFace(*zd);
1432 res->
data = (
void*) (
long)
b;
1441 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1442 gfan::ZCone* zd = (gfan::ZCone*)v->
Data();
1443 bool b = zc->hasFace(*zd);
1445 res->
data = (
void*) (
long)
b;
1449 WerrorS(
"containsAsFace: unexpected parameters");
1458 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1459 gfan::ZCone* zd =
new gfan::ZCone(*zc);
1462 res->
data = (
void*) zd;
1465 WerrorS(
"canonicalizeCone: unexpected parameters");
1478 gfan::ZCone* zc = (gfan::ZCone*) v->
Data();
1485 WerrorS(
"containsCone: entries of wrong type in list");
1488 gfan::ZCone* ll = (gfan::ZCone*) l->
m[
i].
Data();
1490 if (!((*ll) != (*zc)))
1497 res->
data = (
char*) (
long)
b;
1501 WerrorS(
"containsCone: unexpected parameters");
1509 gfan::ZMatrix
equations = zc.getImpliedEquations();
1511 int r = inequalities.getHeight();
1512 int c = inequalities.getWidth();
1517 gfan::ZMatrix newInequalities = inequalities.submatrix(1,0,r,c);
1519 newEquations.appendRow(inequalities[0]);
1520 L->
m[0].
rtyp =
coneID; L->
m[0].
data=(
void*)
new gfan::ZCone(newInequalities,newEquations);
1523 for (
int i=1;
i<r-1;
i++)
1525 newInequalities = inequalities.submatrix(0,0,
i-1,c);
1526 newInequalities.append(inequalities.submatrix(
i+1,0,r,c));
1528 newEquations.appendRow(inequalities[
i]);
1529 L->
m[
i].
rtyp =
coneID; L->
m[
i].
data=(
void*)
new gfan::ZCone(newInequalities,newEquations);
1533 newInequalities = inequalities.submatrix(0,0,r-1,c);
1535 newEquations.appendRow(inequalities[r]);
1536 L->
m[r-1].
rtyp =
coneID; L->
m[r-1].
data=(
void*)
new gfan::ZCone(newInequalities,newEquations);
1547 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
1550 res->
data = (
void*) L;
1553 WerrorS(
"listOfFacets: unexpected parameters");
1569 gfan::ZMatrix
facets = zc->getFacets();
1570 for (
int i=0;
i<facets.getHeight();
i++)
1572 gfan::ZVector
facet = facets[
i];
1573 if (dot(facet,*zv) == (long) 0)
1574 return new gfan::ZVector(facet);
1576 return new gfan::ZVector(zc->ambientDimension());
1588 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
1612 WerrorS(
"facetContaining: unexpected parameters");
1623 gfan::ZMatrix
equations = zc.getImpliedEquations();
1624 int r = inequalities.getHeight();
1625 int c = inequalities.getWidth();
1628 gfan::ZMatrix relativeInteriorPoints = gfan::ZMatrix(0,c);
1629 if (r==0)
return relativeInteriorPoints;
1634 gfan::ZMatrix newInequalities = inequalities.submatrix(1,0,r,c);
1636 newEquations.appendRow(inequalities[0]);
1637 gfan::ZCone
facet = gfan::ZCone(newInequalities,newEquations);
1638 facet.canonicalize();
1639 gfan::ZVector interiorPoint = facet.getRelativeInteriorPoint();
1640 if (exceptThese.count(interiorPoint)==0)
1641 relativeInteriorPoints.appendRow(interiorPoint);
1644 for (
int i=1;
i<r-1;
i++)
1646 newInequalities = inequalities.submatrix(0,0,
i,c);
1647 newInequalities.append(inequalities.submatrix(
i+1,0,r,c));
1649 newEquations.appendRow(inequalities[
i]);
1650 facet = gfan::ZCone(newInequalities,newEquations);
1651 facet.canonicalize();
1652 interiorPoint = facet.getRelativeInteriorPoint();
1653 if (exceptThese.count(interiorPoint)==0)
1654 relativeInteriorPoints.appendRow(interiorPoint);
1658 newInequalities = inequalities.submatrix(0,0,r-1,c);
1660 newEquations.appendRow(inequalities[r-1]);
1661 facet = gfan::ZCone(newInequalities,newEquations);
1662 facet.canonicalize();
1663 interiorPoint = facet.getRelativeInteriorPoint();
1664 if (exceptThese.count(interiorPoint)==0)
1665 relativeInteriorPoints.appendRow(interiorPoint);
1667 return relativeInteriorPoints;
1677 gfan::ZMatrix
equations = zc.getImpliedEquations();
1678 int r = inequalities.getHeight();
1679 int c = inequalities.getWidth();
1682 gfan::ZMatrix relativeInteriorPoints = gfan::ZMatrix(0,c);
1683 gfan::ZMatrix outerFacetNormals = gfan::ZMatrix(0,c);
1685 return std::make_pair(relativeInteriorPoints,outerFacetNormals);
1690 gfan::ZMatrix newInequalities = inequalities.submatrix(1,0,r,c);
1692 newEquations.appendRow(inequalities[0]);
1693 gfan::ZCone
facet = gfan::ZCone(newInequalities,newEquations);
1694 gfan::ZVector interiorPoint = facet.getRelativeInteriorPoint();
1695 if (onlyLowerHalfSpace==
false || interiorPoint[0].
sign()<0)
1697 if (exceptThesePoints.count(interiorPoint)==0)
1699 relativeInteriorPoints.appendRow(interiorPoint);
1700 outerFacetNormals.appendRow(-inequalities[0]);
1705 for (
int i=1;
i<r-1;
i++)
1707 newInequalities = inequalities.submatrix(0,0,
i,c);
1708 newInequalities.append(inequalities.submatrix(
i+1,0,r,c));
1710 newEquations.appendRow(inequalities[
i]);
1711 facet = gfan::ZCone(newInequalities,newEquations);
1712 interiorPoint = facet.getRelativeInteriorPoint();
1713 if (onlyLowerHalfSpace==
false || interiorPoint[0].
sign()<0)
1715 if (exceptThesePoints.count(interiorPoint)==0)
1717 relativeInteriorPoints.appendRow(interiorPoint);
1718 outerFacetNormals.appendRow(-inequalities[i]);
1724 newInequalities = inequalities.submatrix(0,0,r-1,c);
1726 newEquations.appendRow(inequalities[r-1]);
1727 facet = gfan::ZCone(newInequalities,newEquations);
1728 interiorPoint = facet.getRelativeInteriorPoint();
1729 if (onlyLowerHalfSpace==
false || interiorPoint[0].
sign()<0)
1731 if (exceptThesePoints.count(interiorPoint)==0)
1733 relativeInteriorPoints.appendRow(interiorPoint);
1734 outerFacetNormals.appendRow(-inequalities[r-1]);
1738 return std::make_pair(relativeInteriorPoints,outerFacetNormals);
1746 memset(&
l,0,
sizeof(
l));
1748 l.data=(
void*)
"cone";
1750 gfan::ZCone *Z=((gfan::ZCone*) d;
1751 fprintf(dd->
f_write(
"%d ",Z->ambientDimension());
1752 fprintf(dd->
f_write(
"%d ",Z->areFacetsKnown());
1753 gfan::ZMatrix
i=Z->getInequalities();
1755 fprintf(dd->
f_write(
"%d ",Z->areImpliedEquationsKnown());
1756 gfan::ZMatrix e=Z->getEquations();
1759 gfan::ZMatrix
r=Z->extremeRays();
1762 gfan::ZMatrix
l=Z->generatorsOfLinealitySpace();
1777 if(areImpliedEquationsKnown)
1789 blackbox *b=(blackbox*)
omAlloc0(
sizeof(blackbox));
BOOLEAN isFullSpace(leftv res, leftv args)
const CanonicalForm int s
BOOLEAN coneViaNormals(leftv res, leftv args)
Class used for (list of) interpreter objects.
BOOLEAN getMultiplicity(leftv res, leftv args)
BOOLEAN dualCone(leftv res, leftv args)
BOOLEAN containsPositiveVector(leftv res, leftv args)
gfan::ZMatrix liftUp(const gfan::ZMatrix &zm)
BOOLEAN containsRelatively(leftv res, leftv args)
BOOLEAN canonicalizeCone(leftv res, leftv args)
BOOLEAN quotientLatticeBasis(leftv res, leftv args)
BOOLEAN coneToPolytope(leftv res, leftv args)
BOOLEAN generatorsOfSpan(leftv res, leftv args)
bigintmat * iv2bim(intvec *b, const coeffs C)
bigintmat * zMatrixToBigintmat(const gfan::ZMatrix &zm)
const CanonicalForm CFMap CFMap int &both_non_zero int n
gfan::ZVector * facetContaining(gfan::ZCone *zc, gfan::ZVector *zv)
BOOLEAN coneViaRays(leftv res, leftv args)
void WerrorS(const char *s)
bigintmat * zVectorToBigintmat(const gfan::ZVector &zv)
BOOLEAN containsInSupport(leftv res, leftv args)
std::pair< gfan::ZMatrix, gfan::ZMatrix > interiorPointsAndNormalsOfFacets(const gfan::ZCone zc, const std::set< gfan::ZVector > &exceptThesePoints, const bool onlyLowerHalfSpace)
static BOOLEAN bbcone_Op2(int op, leftv res, leftv i1, leftv i2)
gfan::ZVector randomPoint(const gfan::ZCone *zc)
int getAmbientDimension(gfan::ZFan *zf)
BOOLEAN inequalities(leftv res, leftv args)
BOOLEAN linealitySpace(leftv res, leftv args)
BOOLEAN relativeInteriorPoint(leftv res, leftv args)
static BOOLEAN jjCONERAYS1(leftv res, leftv v)
BOOLEAN semigroupGenerator(leftv res, leftv args)
gfan::ZMatrix * bigintmatToZMatrix(const bigintmat &bim)
BOOLEAN isSimplicial(leftv res, leftv args)
BOOLEAN codimension(leftv res, leftv args)
BOOLEAN coneLink(leftv res, leftv args)
BOOLEAN negatedCone(leftv res, leftv args)
BOOLEAN getLinearForms(leftv res, leftv args)
BOOLEAN blackboxDefaultOp2(int op, leftv, leftv r1, leftv)
default procedure blackboxDefaultOp2, to be called as "default:" branch
static BOOLEAN jjCONERAYS2(leftv res, leftv u, leftv v)
number integerToNumber(const gfan::Integer &I)
int getCodimension(gfan::ZFan *zf)
static BOOLEAN jjCONENORMALS2(leftv res, leftv u, leftv v)
INLINE_THIS void Init(int l=0)
const Variable & v
< [in] a sqrfree bivariate poly
lists listOfFacets(const gfan::ZCone &zc)
BOOLEAN rays(leftv res, leftv args)
void bbcone_destroy(blackbox *, void *d)
BOOLEAN dimension(leftv res, leftv args)
void bbcone_setup(SModulFunctions *p)
void * bbcone_Init(blackbox *)
BOOLEAN containsCone(leftv res, leftv args)
static BOOLEAN jjCONERAYS3(leftv res, leftv u, leftv v, leftv w)
static BOOLEAN jjCONENORMALS3(leftv res, leftv u, leftv v, leftv w)
BOOLEAN uniquePoint(leftv res, leftv args)
BOOLEAN equations(leftv res, leftv args)
BOOLEAN facets(leftv res, leftv args)
BOOLEAN setLinearForms(leftv res, leftv args)
BOOLEAN ambientDimension(leftv res, leftv args)
char * bbcone_String(blackbox *, void *d)
BOOLEAN isOrigin(leftv res, leftv args)
int getLinealityDimension(gfan::ZFan *zf)
int getDimension(gfan::ZFan *zf)
BOOLEAN bbcone_Assign(leftv l, leftv r)
BOOLEAN linealityDimension(leftv res, leftv args)
std::string toString(const gfan::ZCone *const c)
static BOOLEAN jjCONENORMALS1(leftv res, leftv v)
BOOLEAN convexHull(leftv res, leftv args)
int(* iiAddCproc)(const char *libname, const char *procname, BOOLEAN pstatic, BOOLEAN(*func)(leftv res, leftv v))
BOOLEAN generatorsOfLinealitySpace(leftv res, leftv args)
BOOLEAN impliedEquations(leftv res, leftv args)
BOOLEAN hasFace(leftv res, leftv args)
BOOLEAN intersectCones(leftv res, leftv args)
int setBlackboxStuff(blackbox *bb, const char *n)
define a new type
void * bbcone_Copy(blackbox *, void *d)
void Werror(const char *fmt,...)
gfan::ZMatrix interiorPointsOfFacets(const gfan::ZCone &zc, const std::set< gfan::ZVector > &exceptThese)
gfan::ZVector * bigintmatToZVector(const bigintmat &bim)
BOOLEAN setMultiplicity(leftv res, leftv args)