33 interiorPoint(gfan::ZVector()),
34 facetNormal(gfan::ZVector())
44 gfan::ZCone c = f.
eta;
47 assume(c.ambientDimension() == (int)v.size());
48 assume(c.ambientDimension() == (int)w.size());
54 facet::facet(
const gfan::ZCone &c,
const gfan::ZVector &
v,
const gfan::ZVector &
w):
60 assume(c.ambientDimension() == (int)v.size());
61 assume(c.ambientDimension() == (int)w.size());
70 gfan::ZCone c = this->
eta;
73 assume(c.ambientDimension() == (int)v.size());
74 assume(c.ambientDimension() == (int)w.size());
82 std::pair<facets::iterator,bool>
check(newFacets.begin(),
false);
83 for(facets::iterator
p=newFacets.begin();
p!=newFacets.end();
p++)
94 static gfan::ZCone
subcone(
const lists &cones,
const gfan::ZVector &point)
96 gfan::ZCone sigma = gfan::ZCone(gfan::ZMatrix(1,point.size()), gfan::ZMatrix(1,point.size()));
98 for (
int i=0;
i<=cones->
nr;
i++)
100 zc = (gfan::ZCone*) cones->
m[
i].
Data();
101 if (zc->contains(point))
102 sigma = gfan::intersection(sigma,*zc);
110 gfan::ZMatrix
equations = zc.getImpliedEquations();
111 int r = inequalities.getHeight();
112 int c = inequalities.getWidth();
124 gfan::ZMatrix newInequalities = inequalities.submatrix(1,0,r,c);
126 newEquations.appendRow(inequalities[0]);
127 gfan::ZCone
eta = gfan::ZCone(newInequalities,newEquations);
129 gfan::ZVector
v = eta.getRelativeInteriorPoint();
130 gfan::ZVector
w = inequalities[0];
132 if (bound.containsRelatively(v))
136 for (
int i=1;
i<r-1;
i++)
138 newInequalities = inequalities.submatrix(0,0,
i,c);
139 newInequalities.append(inequalities.submatrix(
i+1,0,r,c));
141 newEquations.appendRow(inequalities[
i]);
142 eta = gfan::ZCone(newInequalities,newEquations);
144 v = eta.getRelativeInteriorPoint();
146 if (bound.containsRelatively(v))
151 newInequalities = inequalities.submatrix(0,0,r-1,c);
153 newEquations.appendRow(inequalities[r-1]);
154 eta = gfan::ZCone(newInequalities,newEquations);
157 v = eta.getRelativeInteriorPoint();
158 w = inequalities[r-1];
159 if (bound.containsRelatively(v))
176 gfan::ZCone support = gfan::ZCone::givenByRays(*zm, gfan::ZMatrix(0, zm->getWidth()));
187 gfan::ZCone
lambda; gfan::ZVector point;
191 lambda =
subcone(cones, point);
193 while (lambda.dimension() < lambda.ambientDimension());
194 int iterationNumber = 1;
195 std::cout <<
"cones found: " << iterationNumber++ << std::endl;
197 lambda.canonicalize();
198 gfan::ZFan* Sigma =
new gfan::ZFan(lambda.ambientDimension());
199 Sigma->insert(lambda);
204 res->
data = (
void*) Sigma;
230 while (!support.containsRelatively(point))
237 while ((lambda.dimension() < lambda.ambientDimension()) && !(lambda.contains(interiorPoint)))
243 std::cout <<
"cones found: " << iterationNumber++ << std::endl;
249 lambda.canonicalize();
250 Sigma->insert(lambda);
256 res->
data = (
void*) Sigma;
260 WerrorS(
"refineCones: unexpected parameters");
269 gfan::Integer
num = 1;
270 gfan::Integer
den = 1;
271 for (
int i=1;
i<=
k;
i++)
273 for (
int j=n-k+1;
j<=n;
j++)
275 gfan::Integer bin = num/
den;
284 for (
int i=0;
i<n;
i++)
301 int n = (int)(
long) u->
Data();
302 int k = (int)(
long) v->
Data();
304 for (
int i=0;
i<
k;
i++)
310 while (!(v & (1<<n)))
319 v = (t + 1) | (((~t & -~t) - 1) >> (__builtin_ctz(v) + 1));
322 res->
data = (
void*) L;
326 WerrorS(
"listOfAfacesToCheck: unexpected parameter");
348 af |= 1<<((*aface)[
i]-1);
350 unsigned int t = af | (af - 1);
351 af = (t + 1) | (((~t & -~t) - 1) >> (__builtin_ctz(af) + 1));
353 if (af & (1<<ambientDimension))
366 WerrorS(
"nextAfaceToCheck: unexpected parameter");
int status int void size_t count
static int binomial(int n, int k)
Class used for (list of) interpreter objects.
static CanonicalForm bound(const CFMatrix &M)
void mu(int **points, int sizePoints)
gfan::ZVector facetNormal
void WerrorS(const char *s)
BOOLEAN listOfAfacesToCheck(leftv res, leftv args)
gfan::ZVector randomPoint(const gfan::ZCone *zc)
void mergeFacets(facets &F, const facets &newFacets)
gfan::ZVector getFacetNormal()
BOOLEAN inequalities(leftv res, leftv args)
gfan::ZMatrix * bigintmatToZMatrix(const bigintmat &bim)
std::set< facet, facet_compare > facets
BOOLEAN nextAfaceToCheck(leftv res, leftv args)
gfan::ZVector getInteriorPoint()
INLINE_THIS void Init(int l=0)
const Variable & v
< [in] a sqrfree bivariate poly
BOOLEAN dimension(leftv res, leftv args)
gfan::ZVector interiorPoint
static gfan::ZCone subcone(const lists &cones, const gfan::ZVector &point)
BOOLEAN equations(leftv res, leftv args)
void lambda(int **points, int sizePoints)
BOOLEAN ambientDimension(leftv res, leftv args)
void gitfan_setup(SModulFunctions *p)
int(* iiAddCproc)(const char *libname, const char *procname, BOOLEAN pstatic, BOOLEAN(*func)(leftv res, leftv v))
intvec * intToAface(unsigned int v0, int n, int k)
BOOLEAN refineCones(leftv res, leftv args)
static gitfan::facets interiorFacets(const gfan::ZCone &zc, const gfan::ZCone &bound)