20 #include <gfanlib/gfanlib.h> 21 #include <gfanlib/gfanlib_q.h> 31 s<<
"AMBIENT_DIM"<<std::endl;
32 s<<c->ambientDimension()<<std::endl;
34 gfan::ZMatrix
i=c->getInequalities();
36 if (c->areFacetsKnown())
37 s<<
"FACETS"<<std::endl;
39 s<<
"INEQUALITIES"<<std::endl;
46 gfan::ZMatrix e=c->getEquations();
48 if (c->areImpliedEquationsKnown())
49 s<<
"LINEAR_SPAN"<<std::endl;
51 s<<
"EQUATIONS"<<std::endl;
58 if (c->areExtremeRaysKnown())
60 gfan::ZMatrix
r=c->extremeRays();
68 gfan::ZMatrix
l=c->generatorsOfLinealitySpace();
70 s<<
"LINEALITY_SPACE"<<std::endl;
83 return (
void*)(
new gfan::ZCone());
93 gfan::ZCone* zd = (gfan::ZCone*)l->
Data();
96 newZc =
new gfan::ZCone();
98 else if (r->
Typ()==l->
Typ())
102 gfan::ZCone* zd = (gfan::ZCone*)l->
Data();
105 newZc = (gfan::ZCone*)r->
CopyD();
109 int ambientDim = (int)(
long)r->
Data();
112 Werror(
"expected an int >= 0, but got %d", ambientDim);
117 gfan::ZCone* zd = (gfan::ZCone*)l->
Data();
120 newZc =
new gfan::ZCone(ambientDim);
124 Werror(
"assign Type(%d) = Type(%d) not implemented",l->
Typ(),r->
Typ());
134 l->
data=(
void *)newZc;
153 gfan::ZCone* zc = (gfan::ZCone*) d;
160 gfan::ZCone* zc = (gfan::ZCone*)d;
161 gfan::ZCone* newZc =
new gfan::ZCone(*zc);
167 gfan::ZCone* zp = (gfan::ZCone*) i1->
Data();
174 gfan::ZCone* zq = (gfan::ZCone*) i2->
Data();
175 int d1 = zp->ambientDimension();
176 int d2 = zq->ambientDimension();
179 WerrorS(
"mismatching ambient dimensions");
182 gfan::ZCone* zs =
new gfan::ZCone();
183 *zs = gfan::intersection(*zp, *zq);
186 res->
data = (
void*) zs;
195 gfan::ZCone* zq = (gfan::ZCone*) i2->
Data();
196 int d1 = zp->ambientDimension();
197 int d2 = zq->ambientDimension();
200 WerrorS(
"mismatching ambient dimensions");
203 gfan::ZMatrix
rays = zp->extremeRays();
204 rays.append(zq->extremeRays());
205 gfan::ZMatrix lineality = zp->generatorsOfLinealitySpace();
206 lineality.append(zq->generatorsOfLinealitySpace());
207 gfan::ZCone* zs =
new gfan::ZCone();
208 *zs = gfan::ZCone::givenByRays(rays,lineality);
211 res->
data = (
void*) zs;
220 gfan::ZCone* zq = (gfan::ZCone*) i2->
Data();
223 bool b = !((*zp)!=(*zq));
225 res->
data = (
void*) b;
251 gfan::ZCone* zc =
new gfan::ZCone(*zm, gfan::ZMatrix(0, zm->getWidth()));
256 res->
data = (
void*) zc;
285 Werror(
"expected same number of columns but got %d vs. %d",
291 gfan::ZCone* zc =
new gfan::ZCone(*zm1, *zm2);
299 res->
data = (
void*) zc;
329 Werror(
"expected same number of columns but got %d vs. %d",
333 int k = (int)(
long)w->
Data();
334 if ((k < 0) || (k > 3))
336 WerrorS(
"expected int argument in [0..3]");
341 gfan::ZCone* zc =
new gfan::ZCone(*zm1, *zm2, k);
349 res->
data = (
void*) zc;
355 gfan::initializeCddlibIfRequired();
362 gfan::deinitializeCddlibIfRequired();
372 gfan::deinitializeCddlibIfRequired();
382 gfan::deinitializeCddlibIfRequired();
386 WerrorS(
"coneViaInequalities: unexpected parameters");
406 gfan::ZCone* zc =
new gfan::ZCone();
407 *zc = gfan::ZCone::givenByRays(*zm, gfan::ZMatrix(0, zm->getWidth()));
409 res->
data = (
void*) zc;
443 if (rays->
cols() != linSpace->
cols())
445 Werror(
"expected same number of columns but got %d vs. %d",
451 gfan::ZCone* zc =
new gfan::ZCone();
452 *zc = gfan::ZCone::givenByRays(*zm1, *zm2);
454 res->
data = (
void*) zc;
495 if (rays->
cols() != linSpace->
cols())
497 Werror(
"expected same number of columns but got %d vs. %d",
501 int k = (int)(
long)w->
Data();
502 if ((k < 0) || (k > 3))
504 WerrorS(
"expected int argument in [0..3]");
509 gfan::ZCone* zc =
new gfan::ZCone();
510 *zc = gfan::ZCone::givenByRays(*zm1, *zm2);
513 res->
data = (
void*) zc;
526 gfan::initializeCddlibIfRequired();
533 gfan::deinitializeCddlibIfRequired();
542 gfan::deinitializeCddlibIfRequired();
551 gfan::deinitializeCddlibIfRequired();
557 WerrorS(
"coneViaPoints: unexpected parameters");
566 gfan::initializeCddlibIfRequired();
567 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
568 gfan::ZMatrix zmat = zc->getInequalities();
571 gfan::deinitializeCddlibIfRequired();
574 WerrorS(
"inequalities: unexpected parameters");
583 gfan::initializeCddlibIfRequired();
584 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
585 gfan::ZMatrix zmat = zc->getEquations();
588 gfan::deinitializeCddlibIfRequired();
591 WerrorS(
"equations: unexpected parameters");
600 gfan::initializeCddlibIfRequired();
601 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
602 gfan::ZMatrix zm = zc->getFacets();
605 gfan::deinitializeCddlibIfRequired();
608 WerrorS(
"facets: unexpected parameters");
617 gfan::initializeCddlibIfRequired();
618 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
619 gfan::ZMatrix zmat = zc->getImpliedEquations();
622 gfan::deinitializeCddlibIfRequired();
625 WerrorS(
"span: unexpected parameters");
634 gfan::initializeCddlibIfRequired();
635 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
636 gfan::ZMatrix zmat = zc->generatorsOfSpan();
639 gfan::deinitializeCddlibIfRequired();
642 WerrorS(
"generatorsOfSpan: unexpected parameters");
651 gfan::initializeCddlibIfRequired();
652 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
653 gfan::ZMatrix zmat = zc->generatorsOfLinealitySpace();
656 gfan::deinitializeCddlibIfRequired();
659 WerrorS(
"generatorsOfLinealitySpace: unexpected parameters");
668 gfan::initializeCddlibIfRequired();
669 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
670 gfan::ZMatrix zm = zc->extremeRays();
673 gfan::deinitializeCddlibIfRequired();
678 gfan::initializeCddlibIfRequired();
679 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
680 gfan::ZMatrix zmat =
rays(zf);
683 gfan::deinitializeCddlibIfRequired();
686 WerrorS(
"rays: unexpected parameters");
695 gfan::initializeCddlibIfRequired();
696 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
697 gfan::ZMatrix zmat = zc->quotientLatticeBasis();
700 gfan::deinitializeCddlibIfRequired();
703 WerrorS(
"quotientLatticeBasis: unexpected parameters");
712 gfan::initializeCddlibIfRequired();
713 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
714 gfan::ZMatrix zmat = zc->getLinearForms();
717 gfan::deinitializeCddlibIfRequired();
720 WerrorS(
"getLinearForms: unexpected parameters");
729 gfan::initializeCddlibIfRequired();
730 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
732 res->
data = (
void*) (
long) zc->ambientDimension();
733 gfan::deinitializeCddlibIfRequired();
738 gfan::initializeCddlibIfRequired();
739 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
742 gfan::deinitializeCddlibIfRequired();
747 gfan::initializeCddlibIfRequired();
748 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
751 gfan::deinitializeCddlibIfRequired();
754 WerrorS(
"ambientDimension: unexpected parameters");
763 gfan::initializeCddlibIfRequired();
764 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
766 res->
data = (
void*) (
long) zc->dimension();
767 gfan::deinitializeCddlibIfRequired();
772 gfan::initializeCddlibIfRequired();
773 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
776 gfan::deinitializeCddlibIfRequired();
781 gfan::initializeCddlibIfRequired();
782 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
785 gfan::deinitializeCddlibIfRequired();
788 WerrorS(
"dimension: unexpected parameters");
797 gfan::initializeCddlibIfRequired();
798 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
800 res->
data = (
void*) (
long) zc->codimension();
801 gfan::deinitializeCddlibIfRequired();
806 gfan::initializeCddlibIfRequired();
807 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
810 gfan::deinitializeCddlibIfRequired();
815 gfan::initializeCddlibIfRequired();
816 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
819 gfan::deinitializeCddlibIfRequired();
822 WerrorS(
"getCodimension: unexpected parameters");
831 gfan::initializeCddlibIfRequired();
832 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
834 res->
data = (
void*) (
long) zc->dimensionOfLinealitySpace();
835 gfan::deinitializeCddlibIfRequired();
840 gfan::initializeCddlibIfRequired();
841 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
844 gfan::deinitializeCddlibIfRequired();
847 WerrorS(
"linealityDimension: unexpected parameters");
856 gfan::initializeCddlibIfRequired();
857 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
860 res->
data = (
void*) i;
861 gfan::deinitializeCddlibIfRequired();
864 WerrorS(
"getMultiplicity: unexpected parameters");
873 gfan::initializeCddlibIfRequired();
874 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
875 int i = zc->isOrigin();
877 res->
data = (
void*) (
long)
i;
878 gfan::deinitializeCddlibIfRequired();
881 WerrorS(
"isOrigin: unexpected parameters");
890 gfan::initializeCddlibIfRequired();
891 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
892 int i = zc->isFullSpace();
894 res->
data = (
void*) (
long)
i;
895 gfan::deinitializeCddlibIfRequired();
898 WerrorS(
"isFullSpace: unexpected parameters");
907 gfan::initializeCddlibIfRequired();
908 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
909 int b = zc->isSimplicial();
911 res->
data = (
void*) (
long)
b;
912 gfan::deinitializeCddlibIfRequired();
917 gfan::initializeCddlibIfRequired();
918 gfan::ZFan* zf = (gfan::ZFan*) u->
Data();
921 res->
data = (
void*) (
long)
b;
922 gfan::deinitializeCddlibIfRequired();
925 WerrorS(
"isSimplicial: unexpected parameters");
934 gfan::initializeCddlibIfRequired();
935 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
936 int i = zc->containsPositiveVector();
938 res->
data = (
void*) (
long)
i;
939 gfan::deinitializeCddlibIfRequired();
942 WerrorS(
"containsPositiveVector: unexpected parameters");
951 gfan::initializeCddlibIfRequired();
952 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
953 gfan::ZCone* zd =
new gfan::ZCone(zc->linealitySpace());
955 res->
data = (
void*) zd;
956 gfan::deinitializeCddlibIfRequired();
959 WerrorS(
"linealitySpace: unexpected parameters");
968 gfan::initializeCddlibIfRequired();
969 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
970 gfan::ZCone* zd =
new gfan::ZCone(zc->dualCone());
972 res->
data = (
void*) zd;
973 gfan::deinitializeCddlibIfRequired();
976 WerrorS(
"dual: unexpected parameters");
985 gfan::initializeCddlibIfRequired();
986 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
987 gfan::ZCone* zd =
new gfan::ZCone(zc->negated());
989 res->
data = (
void*) zd;
990 gfan::deinitializeCddlibIfRequired();
993 WerrorS(
"negatedCone: unexpected parameters");
1002 gfan::initializeCddlibIfRequired();
1003 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1004 int d = zc->dimension();
1005 int dLS = zc->dimensionOfLinealitySpace();
1008 gfan::ZVector zv = zc->semiGroupGeneratorOfRay();
1011 gfan::deinitializeCddlibIfRequired();
1014 gfan::deinitializeCddlibIfRequired();
1015 Werror(
"expected dim of cone one larger than dim of lin space\n" 1016 "but got dimensions %d and %d", d, dLS);
1018 WerrorS(
"semigroupGenerator: unexpected parameters");
1027 gfan::initializeCddlibIfRequired();
1028 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1029 gfan::ZVector zv = zc->getRelativeInteriorPoint();
1032 gfan::deinitializeCddlibIfRequired();
1035 WerrorS(
"relativeInteriorPoint: unexpected parameters");
1044 gfan::initializeCddlibIfRequired();
1045 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1046 gfan::ZVector zv = zc->getUniquePoint();
1049 gfan::deinitializeCddlibIfRequired();
1052 WerrorS(
"uniquePoint: unexpected parameters");
1058 gfan::ZVector rp = gfan::ZVector(zc->ambientDimension());
1060 gfan::ZMatrix
rays = zc->extremeRays();
1061 for (
int i=0;
i<rays.getHeight();
i++)
1064 rp = rp + n * rays[
i].toVector();
1067 gfan::ZMatrix lins = zc->generatorsOfLinealitySpace();
1068 for (
int i=0;
i<lins.getHeight();
i++)
1071 rp = rp + n * lins[
i].toVector();
1082 gfan::initializeCddlibIfRequired();
1083 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1087 gfan::deinitializeCddlibIfRequired();
1090 WerrorS(
"randomPoint: unexpected parameters");
1099 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1103 gfan::initializeCddlibIfRequired();
1104 int val = (int)(
long)v->
Data();
1105 zc->setMultiplicity(gfan::Integer(val));
1108 gfan::deinitializeCddlibIfRequired();
1112 WerrorS(
"setMultiplicity: unexpected parameters");
1121 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1125 gfan::initializeCddlibIfRequired();
1135 zc->setLinearForms(*zm);
1142 gfan::deinitializeCddlibIfRequired();
1146 WerrorS(
"setLinearForms: unexpected parameters");
1150 gfan::ZMatrix
liftUp(
const gfan::ZMatrix &zm)
1152 int r=zm.getHeight();
1153 int c=zm.getWidth();
1154 gfan::ZMatrix zn(r+1,c+1);
1156 for (
int i=0;
i<
r;
i++)
1157 for (
int j=0;
j<c;
j++)
1158 zn[
i+1][
j+1]=zm[
i][
j];
1164 gfan::ZMatrix ineq=zc.getInequalities();
1165 gfan::ZMatrix eq=zc.getEquations();
1175 gfan::initializeCddlibIfRequired();
1176 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
1177 gfan::ZMatrix ineq=zc->getInequalities();
1178 gfan::ZMatrix eq=zc->getEquations();
1179 gfan::ZCone* zd =
new gfan::ZCone(
liftUp(ineq),
liftUp(eq));
1181 res->
data = (
void*) zd;
1182 gfan::deinitializeCddlibIfRequired();
1185 WerrorS(
"makePolytope: unexpected parameters");
1197 gfan::initializeCddlibIfRequired();
1198 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1199 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1200 int d1 = zc1->ambientDimension();
1201 int d2 = zc2->ambientDimension();
1204 Werror(
"expected ambient dims of both cones to coincide\n" 1205 "but got %d and %d", d1, d2);
1206 gfan::deinitializeCddlibIfRequired();
1209 gfan::ZCone zc3 = gfan::intersection(*zc1, *zc2);
1212 res->
data = (
void *)
new gfan::ZCone(zc3);
1213 gfan::deinitializeCddlibIfRequired();
1218 gfan::initializeCddlibIfRequired();
1219 gfan::ZCone* zc11 = (gfan::ZCone*)u->
Data();
1220 gfan::ZCone zc1 =
liftUp(*zc11);
1221 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1222 int d1 = zc1.ambientDimension();
1223 int d2 = zc2->ambientDimension();
1226 Werror(
"expected ambient dims of both cones to coincide\n" 1227 "but got %d and %d", d1, d2);
1228 gfan::deinitializeCddlibIfRequired();
1231 gfan::ZCone zc3 = gfan::intersection(zc1, *zc2);
1234 res->
data = (
void *)
new gfan::ZCone(zc3);
1235 gfan::deinitializeCddlibIfRequired();
1244 gfan::initializeCddlibIfRequired();
1245 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1246 gfan::ZCone* zc22 = (gfan::ZCone*)v->
Data();
1247 gfan::ZCone zc2 =
liftUp(*zc22);
1248 int d1 = zc1->ambientDimension();
1249 int d2 = zc2.ambientDimension();
1252 Werror(
"expected ambient dims of both cones to coincide\n" 1253 "but got %d and %d", d1, d2);
1254 gfan::deinitializeCddlibIfRequired();
1257 gfan::ZCone zc3 = gfan::intersection(*zc1, zc2);
1260 res->
data = (
void *)
new gfan::ZCone(zc3);
1261 gfan::deinitializeCddlibIfRequired();
1266 gfan::initializeCddlibIfRequired();
1267 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1268 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1269 int d1 = zc1->ambientDimension();
1270 int d2 = zc2->ambientDimension();
1273 Werror(
"expected ambient dims of both cones to coincide\n" 1274 "but got %d and %d", d1, d2);
1275 gfan::deinitializeCddlibIfRequired();
1278 gfan::ZCone zc3 = gfan::intersection(*zc1, *zc2);
1281 res->
data = (
void *)
new gfan::ZCone(zc3);
1282 gfan::deinitializeCddlibIfRequired();
1286 WerrorS(
"convexIntersection: unexpected parameters");
1298 gfan::initializeCddlibIfRequired();
1299 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1300 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1301 int d1 = zc1->ambientDimension();
1302 int d2 = zc2->ambientDimension();
1305 Werror(
"expected ambient dims of both cones to coincide\n" 1306 "but got %d and %d", d1, d2);
1307 gfan::deinitializeCddlibIfRequired();
1310 gfan::ZMatrix zm1 = zc1->extremeRays();
1311 gfan::ZMatrix zm2 = zc2->extremeRays();
1312 gfan::ZMatrix zn1 = zc1->generatorsOfLinealitySpace();
1313 gfan::ZMatrix zn2 = zc2->generatorsOfLinealitySpace();
1314 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1315 gfan::ZMatrix zn = combineOnTop(zn1,zn2);
1316 gfan::ZCone* zc =
new gfan::ZCone();
1317 *zc = gfan::ZCone::givenByRays(zm, zn);
1319 res->
data = (
void*) zc;
1320 gfan::deinitializeCddlibIfRequired();
1325 gfan::initializeCddlibIfRequired();
1326 gfan::ZCone* zc11 = (gfan::ZCone*)u->
Data();
1327 gfan::ZCone zc1 =
liftUp(*zc11);
1328 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1329 int d1 = zc1.ambientDimension()-1;
1330 int d2 = zc2->ambientDimension()-1;
1333 Werror(
"expected ambient dims of both cones to coincide\n" 1334 "but got %d and %d", d1, d2);
1335 gfan::deinitializeCddlibIfRequired();
1338 gfan::ZMatrix zm1 = zc1.extremeRays();
1339 gfan::ZMatrix zm2 = zc2->extremeRays();
1340 gfan::ZMatrix zn = zc1.generatorsOfLinealitySpace();
1341 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1342 gfan::ZCone* zc =
new gfan::ZCone();
1343 *zc = gfan::ZCone::givenByRays(zm, zn);
1345 res->
data = (
void*) zc;
1346 gfan::deinitializeCddlibIfRequired();
1355 gfan::initializeCddlibIfRequired();
1356 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1357 gfan::ZCone* zc22 = (gfan::ZCone*)v->
Data();
1358 gfan::ZCone zc2 =
liftUp(*zc22);
1359 int d1 = zc1->ambientDimension()-1;
1360 int d2 = zc2.ambientDimension()-1;
1363 Werror(
"expected ambient dims of both cones to coincide\n" 1364 "but got %d and %d", d1, d2);
1365 gfan::deinitializeCddlibIfRequired();
1368 gfan::ZMatrix zm1 = zc1->extremeRays();
1369 gfan::ZMatrix zm2 = zc2.extremeRays();
1370 gfan::ZMatrix zn = zc2.generatorsOfLinealitySpace();
1371 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1372 gfan::ZCone* zc =
new gfan::ZCone();
1373 *zc = gfan::ZCone::givenByRays(zm,gfan::ZMatrix(0, zm.getWidth()));
1375 res->
data = (
void*) zc;
1376 gfan::deinitializeCddlibIfRequired();
1381 gfan::initializeCddlibIfRequired();
1382 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1383 gfan::ZCone* zc2 = (gfan::ZCone*)v->
Data();
1384 int d1 = zc1->ambientDimension()-1;
1385 int d2 = zc2->ambientDimension()-1;
1388 Werror(
"expected ambient dims of both cones to coincide\n" 1389 "but got %d and %d", d1, d2);
1390 gfan::deinitializeCddlibIfRequired();
1393 gfan::ZMatrix zm1 = zc1->extremeRays();
1394 gfan::ZMatrix zm2 = zc2->extremeRays();
1395 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1396 gfan::ZCone* zc =
new gfan::ZCone();
1397 *zc = gfan::ZCone::givenByRays(zm,gfan::ZMatrix(0, zm.getWidth()));
1399 res->
data = (
void*) zc;
1400 gfan::deinitializeCddlibIfRequired();
1404 WerrorS(
"convexHull: unexpected parameters");
1416 gfan::initializeCddlibIfRequired();
1417 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1427 int d1 = zc->ambientDimension();
1428 int d2 = zv->size();
1431 Werror(
"expected ambient dim of cone and size of vector\n" 1432 " to be equal but got %d and %d", d1, d2);
1433 gfan::deinitializeCddlibIfRequired();
1436 if(!zc->contains(*zv))
1438 WerrorS(
"the provided intvec does not lie in the cone");
1439 gfan::deinitializeCddlibIfRequired();
1442 gfan::ZCone* zd =
new gfan::ZCone(zc->link(*zv));
1444 res->
data = (
void *) zd;
1449 gfan::deinitializeCddlibIfRequired();
1453 WerrorS(
"coneLink: unexpected parameters");
1465 gfan::initializeCddlibIfRequired();
1466 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1467 gfan::ZCone* zd = (gfan::ZCone*)v->
Data();
1468 int d1 = zc->ambientDimension();
1469 int d2 = zd->ambientDimension();
1472 Werror(
"expected cones with same ambient dimensions\n but got" 1473 " dimensions %d and %d", d1, d2);
1474 gfan::deinitializeCddlibIfRequired();
1477 bool b = (zc->contains(*zd) ? 1 : 0);
1479 res->
data = (
void*) (
long)
b;
1480 gfan::deinitializeCddlibIfRequired();
1485 gfan::initializeCddlibIfRequired();
1486 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1497 int d1 = zc->ambientDimension();
1498 int d2 = zv->size();
1501 Werror(
"expected cones with same ambient dimensions\n but got" 1502 " dimensions %d and %d", d1, d2);
1503 gfan::deinitializeCddlibIfRequired();
1506 int b = zc->contains(*zv);
1508 res->
data = (
void*) (
long)
b;
1513 gfan::deinitializeCddlibIfRequired();
1517 WerrorS(
"containsInSupport: unexpected parameters");
1529 gfan::initializeCddlibIfRequired();
1530 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1540 int d1 = zc->ambientDimension();
1541 int d2 = zv->size();
1544 bool b = (zc->containsRelatively(*zv) ? 1 : 0);
1546 res->
data = (
void *) b;
1550 gfan::deinitializeCddlibIfRequired();
1556 gfan::deinitializeCddlibIfRequired();
1557 Werror(
"expected ambient dim of cone and size of vector\n" 1558 "to be equal but got %d and %d", d1, d2);
1561 WerrorS(
"containsRelatively: unexpected parameters");
1573 gfan::initializeCddlibIfRequired();
1574 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1575 gfan::ZCone* zd = (gfan::ZCone*)v->
Data();
1576 bool b = zc->hasFace(*zd);
1578 res->
data = (
void*) (
long)
b;
1579 gfan::deinitializeCddlibIfRequired();
1588 gfan::initializeCddlibIfRequired();
1589 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1590 gfan::ZCone* zd = (gfan::ZCone*)v->
Data();
1591 bool b = zc->hasFace(*zd);
1593 res->
data = (
void*) (
long)
b;
1594 gfan::deinitializeCddlibIfRequired();
1598 WerrorS(
"containsAsFace: unexpected parameters");
1607 gfan::initializeCddlibIfRequired();
1608 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1609 gfan::ZCone* zd =
new gfan::ZCone(*zc);
1612 res->
data = (
void*) zd;
1613 gfan::deinitializeCddlibIfRequired();
1616 WerrorS(
"canonicalizeCone: unexpected parameters");
1628 gfan::initializeCddlibIfRequired();
1630 gfan::ZCone* zc = (gfan::ZCone*) v->
Data();
1637 WerrorS(
"containsCone: entries of wrong type in list");
1638 gfan::deinitializeCddlibIfRequired();
1641 gfan::ZCone* ll = (gfan::ZCone*) l->
m[
i].
Data();
1643 if (!((*ll) != (*zc)))
1650 res->
data = (
char*) (
long)
b;
1651 gfan::deinitializeCddlibIfRequired();
1655 WerrorS(
"containsCone: unexpected parameters");
1667 gfan::initializeCddlibIfRequired();
1668 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
1680 if (!zc->contains(*point))
1682 WerrorS(
"faceContaining: point not in cone");
1686 res->
data = (
void*)
new gfan::ZCone(zc->faceContaining(*point));
1691 gfan::deinitializeCddlibIfRequired();
1695 WerrorS(
"faceContaining: unexpected parameters");
1706 gfan::ZMatrix
equations = zc.getImpliedEquations();
1707 int r = inequalities.getHeight();
1708 int c = inequalities.getWidth();
1711 gfan::ZMatrix relativeInteriorPoints = gfan::ZMatrix(0,c);
1712 if (r==0)
return relativeInteriorPoints;
1717 gfan::ZMatrix newInequalities = inequalities.submatrix(1,0,r,c);
1719 newEquations.appendRow(inequalities[0]);
1720 gfan::ZCone
facet = gfan::ZCone(newInequalities,newEquations);
1721 facet.canonicalize();
1722 gfan::ZVector interiorPoint = facet.getRelativeInteriorPoint();
1723 if (exceptThese.count(interiorPoint)==0)
1724 relativeInteriorPoints.appendRow(interiorPoint);
1727 for (
int i=1;
i<r-1;
i++)
1729 newInequalities = inequalities.submatrix(0,0,
i,c);
1730 newInequalities.append(inequalities.submatrix(
i+1,0,r,c));
1732 newEquations.appendRow(inequalities[
i]);
1733 facet = gfan::ZCone(newInequalities,newEquations);
1734 facet.canonicalize();
1735 interiorPoint = facet.getRelativeInteriorPoint();
1736 if (exceptThese.count(interiorPoint)==0)
1737 relativeInteriorPoints.appendRow(interiorPoint);
1741 newInequalities = inequalities.submatrix(0,0,r-1,c);
1743 newEquations.appendRow(inequalities[r-1]);
1744 facet = gfan::ZCone(newInequalities,newEquations);
1745 facet.canonicalize();
1746 interiorPoint = facet.getRelativeInteriorPoint();
1747 if (exceptThese.count(interiorPoint)==0)
1748 relativeInteriorPoints.appendRow(interiorPoint);
1750 return relativeInteriorPoints;
1760 gfan::ZMatrix
equations = zc.getImpliedEquations();
1761 int r = inequalities.getHeight();
1762 int c = inequalities.getWidth();
1765 gfan::ZMatrix relativeInteriorPoints = gfan::ZMatrix(0,c);
1766 gfan::ZMatrix outerFacetNormals = gfan::ZMatrix(0,c);
1768 return std::make_pair(relativeInteriorPoints,outerFacetNormals);
1773 gfan::ZMatrix newInequalities = inequalities.submatrix(1,0,r,c);
1775 newEquations.appendRow(inequalities[0]);
1776 gfan::ZCone
facet = gfan::ZCone(newInequalities,newEquations);
1777 gfan::ZVector interiorPoint = facet.getRelativeInteriorPoint();
1778 if (onlyLowerHalfSpace==
false || interiorPoint[0].
sign()<0)
1780 if (exceptThesePoints.count(interiorPoint)==0)
1782 relativeInteriorPoints.appendRow(interiorPoint);
1783 outerFacetNormals.appendRow(-inequalities[0].toVector());
1788 for (
int i=1;
i<r-1;
i++)
1790 newInequalities = inequalities.submatrix(0,0,
i,c);
1791 newInequalities.append(inequalities.submatrix(
i+1,0,r,c));
1793 newEquations.appendRow(inequalities[
i]);
1794 facet = gfan::ZCone(newInequalities,newEquations);
1795 interiorPoint = facet.getRelativeInteriorPoint();
1796 if (onlyLowerHalfSpace==
false || interiorPoint[0].
sign()<0)
1798 if (exceptThesePoints.count(interiorPoint)==0)
1800 relativeInteriorPoints.appendRow(interiorPoint);
1801 outerFacetNormals.appendRow(-inequalities[i].toVector());
1807 newInequalities = inequalities.submatrix(0,0,r-1,c);
1809 newEquations.appendRow(inequalities[r-1]);
1810 facet = gfan::ZCone(newInequalities,newEquations);
1811 interiorPoint = facet.getRelativeInteriorPoint();
1812 if (onlyLowerHalfSpace==
false || interiorPoint[0].
sign()<0)
1814 if (exceptThesePoints.count(interiorPoint)==0)
1816 relativeInteriorPoints.appendRow(interiorPoint);
1817 outerFacetNormals.appendRow(-inequalities[r-1].toVector());
1821 return std::make_pair(relativeInteriorPoints,outerFacetNormals);
1837 fprintf(dd->
f_write,
"%d %d ",M.getHeight(),M.getWidth());
1839 for (
int i=0;
i<M.getHeight();
i++)
1841 for (
int j=0;
j<M.getWidth();
j++)
1853 memset(&
l,0,
sizeof(
l));
1855 l.data=(
void*)
"cone";
1858 gfan::ZCone *Z = (gfan::ZCone*) d;
1859 fprintf(dd->
f_write,
"%d ",Z->areImpliedEquationsKnown()+Z->areFacetsKnown()*2);
1861 gfan::ZMatrix
i=Z->getInequalities();
1864 gfan::ZMatrix e=Z->getEquations();
1876 gfan::Integer n(tmp);
1886 gfan::ZMatrix
M(r,c);
1887 for (
int i=0;
i<
r;
i++)
1889 for (
int j=0;
j<c;
j++)
1908 gfan::ZCone* Z =
new gfan::ZCone(i,e,preassumptions);
1916 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 bbcone_deserialize(blackbox **b, void **d, si_link f)
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)
BOOLEAN coneViaRays(leftv res, leftv args)
void WerrorS(const char *s)
void s_readmpz_base(s_buff F, mpz_ptr a, int base)
bigintmat * zVectorToBigintmat(const gfan::ZVector &zv)
BOOLEAN containsInSupport(leftv res, leftv args)
BOOLEAN blackboxDefaultOp2(int, leftv, leftv, leftv)
default procedure blackboxDefaultOp2, to be called as "default:" branch
std::pair< gfan::ZMatrix, gfan::ZMatrix > interiorPointsAndNormalsOfFacets(const gfan::ZCone zc, const std::set< gfan::ZVector > &exceptThesePoints, const bool onlyLowerHalfSpace)
static gfan::ZMatrix gfanZMatrixReadFd(ssiInfo *dd)
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 bbcone_serialize(blackbox *b, void *d, si_link f)
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)
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)
const Variable & v
< [in] a sqrfree bivariate poly
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)
static void gfanIntegerWriteFd(gfan::Integer n, ssiInfo *dd)
static void gfanZMatrixWriteFd(gfan::ZMatrix M, ssiInfo *dd)
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 faceContaining(leftv res, leftv args)
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)
static gfan::Integer gfanIntegerReadFd(ssiInfo *dd)