 |
My Project
debian-1:4.1.1-p2+ds-4build1
|
Go to the source code of this file.
|
void | gitfan::mergeFacets (facets &F, const facets &newFacets) |
|
static gfan::ZCone | subcone (const lists &cones, const gfan::ZVector &point) |
|
static gitfan::facets | interiorFacets (const gfan::ZCone &zc, const gfan::ZCone &bound) |
|
BOOLEAN | refineCones (leftv res, leftv args) |
|
static int | binomial (int n, int k) |
|
intvec * | intToAface (unsigned int v0, int n, int k) |
|
BOOLEAN | listOfAfacesToCheck (leftv res, leftv args) |
|
BOOLEAN | nextAfaceToCheck (leftv res, leftv args) |
|
BOOLEAN | checkSigns (leftv res, leftv args) |
|
BOOLEAN | binaryToBigint (leftv res, leftv args) |
|
BOOLEAN | composeIntvecs (leftv res, leftv args) |
|
BOOLEAN | findPlaceToInsert (leftv res, leftv args) |
|
void | subset (std::vector< int > &arr, int size, int left, int index, std::vector< int > &l, std::vector< std::vector< int > > &L) |
|
BOOLEAN | subsets (leftv res, leftv args) |
|
int SI_MOD_INIT() | gitfan (SModulFunctions *p) |
|
◆ binaryToBigint()
Definition at line 412 of file gitfan.cc.
412 : unexpected parameter
");
417 BOOLEAN binaryToBigint(leftv res, leftv args)
420 if ((u != NULL) && (u->Typ() == INTVEC_CMD) && (u->next == NULL))
422 intvec* iv = (intvec*) u->Data();
423 const int l = (iv->rows())*(iv->cols());
424 number base = n_Init(2,coeffs_BIGINT);
426 n_Power(base,(*iv)[0]-1,&endResult,coeffs_BIGINT);
427 for (int i=1; i<l; i++)
429 number endResultCache;
431 n_Power(base,(*iv)[i]-1,¤tBit,coeffs_BIGINT);
432 endResultCache = n_Add(endResult,currentBit,coeffs_BIGINT);
433 n_Delete(&endResult,coeffs_BIGINT);
434 n_Delete(¤tBit,coeffs_BIGINT);
435 endResult = endResultCache;
436 endResultCache = NULL;
438 n_Delete(&base,coeffs_BIGINT);
439 res->rtyp = BIGINT_CMD;
440 res->data = (void*) endResult;
◆ binomial()
static int binomial |
( |
int |
n, |
|
|
int |
k |
|
) |
| |
|
static |
Definition at line 257 of file gitfan.cc.
257 : unexpected parameters
");
262 static int binomial(int n, int k)
266 gfan::Integer num = 1;
267 gfan::Integer den = 1;
268 for (int i=1; i<=k; i++)
◆ checkSigns()
Definition at line 363 of file gitfan.cc.
363 : unexpected parameter
");
368 BOOLEAN checkSigns(leftv res, leftv args)
371 if ((u != NULL) && (u->Typ()==BIGINTMAT_CMD || u->Typ()==INTMAT_CMD))
374 if ((v != NULL) && (v->Typ() == INTVEC_CMD) && (v->next == NULL))
376 bigintmat* interiorPoint = NULL;
377 if (u->Typ() == INTMAT_CMD)
379 intvec* p0 = (intvec*) u->Data();
380 interiorPoint = iv2bim(p0,coeffs_BIGINT);
383 interiorPoint = (bigintmat*) u->Data();
384 intvec* hash = (intvec*) v->Data();
386 for (int i=0; i<hash->length(); i++)
388 if ( (*hash)[i]<0 && n_GreaterZero((*interiorPoint)[i],interiorPoint->basecoeffs()) )
390 res->data = (void*) (long) 0;
393 if ( (*hash)[i]>0 && !n_IsZero((*interiorPoint)[i],interiorPoint->basecoeffs()) )
395 number neg = n_Copy((*interiorPoint)[i],interiorPoint->basecoeffs());
396 neg = n_InpNeg(neg,interiorPoint->basecoeffs());
397 if (n_GreaterZero(neg,interiorPoint->basecoeffs()))
399 n_Delete(&neg,interiorPoint->basecoeffs());
400 res->data = (void*) (long) 0;
403 n_Delete(&neg,interiorPoint->basecoeffs());
406 res->data = (void*) (long) 1;
407 if (v->Typ() == INTMAT_CMD)
408 delete interiorPoint;
◆ composeIntvecs()
Definition at line 443 of file gitfan.cc.
443 : unexpected parameter
");
448 BOOLEAN composeIntvecs(leftv res, leftv args)
451 if ((u!=NULL) && (u->Typ()==INTVEC_CMD))
454 if ((v!=NULL) && (v->Typ()==INTVEC_CMD) && (v->next==NULL))
456 intvec* iv1 = (intvec*) u->Data();
457 intvec* iv2 = (intvec*) v->Data();
458 int k = iv2->length();
459 intvec* composedIntvec = new intvec(k);
460 for (int i=0; i<k; i++)
461 (*composedIntvec)[i] = (*iv1)[(*iv2)[i]-1];
462 res->rtyp = INTVEC_CMD;
463 res->data = (void*) composedIntvec;
◆ findPlaceToInsert()
Definition at line 467 of file gitfan.cc.
467 : unexpected parameter
");
472 BOOLEAN findPlaceToInsert(leftv res, leftv args)
475 if ((u!=NULL) && (u->Typ()==LIST_CMD))
478 if ((v!=NULL) && (v->Typ()==BIGINT_CMD) && (v->next==NULL))
480 lists listOfNumbers = (lists) u->Data();
481 number numberToInsert = (number) v->Data();
483 int upperBound = lSize(listOfNumbers);
487 res->data = (void*) (long) (lowerBound+1);
491 number lowerNumber = (number) listOfNumbers->m[lowerBound].Data();
492 if (n_Equal(lowerNumber,numberToInsert,coeffs_BIGINT))
495 res->data = (void*) (long) (-1);
498 if (n_Greater(lowerNumber,numberToInsert,coeffs_BIGINT))
501 res->data = (void*) (long) (lowerBound+1);
505 number upperNumber = (number) listOfNumbers->m[upperBound].Data();
506 if (n_Equal(numberToInsert,upperNumber,coeffs_BIGINT))
509 res->data = (void*) (long) (-1);
512 if (n_Greater(numberToInsert,upperNumber,coeffs_BIGINT))
515 res->data = (void*) (long) (upperBound+2);
519 while (lowerBound+1<upperBound)
521 int middle = lowerBound + (upperBound-lowerBound) / 2;
522 number lowerNumber = (number) listOfNumbers->m[lowerBound].Data();
523 number upperNumber = (number) listOfNumbers->m[upperBound].Data();
524 number middleNumber = (number) listOfNumbers->m[middle].Data();
525 if ((n_Equal(lowerNumber,numberToInsert,coeffs_BIGINT)) ||
526 (n_Equal(middleNumber,numberToInsert,coeffs_BIGINT)) ||
527 (n_Equal(upperNumber,numberToInsert,coeffs_BIGINT)))
530 res->data = (void*) (long) -1;
533 if (n_Greater(numberToInsert,middleNumber,coeffs_BIGINT))
535 if (n_Greater(middleNumber,numberToInsert,coeffs_BIGINT))
540 res->data = (void*) (long) (upperBound+1);
◆ gitfan()
Definition at line 603 of file gitfan.cc.
603 : unexpected parameter
");
608 extern "C
" int SI_MOD_INIT(gitfan) (SModulFunctions* p)
610 gfan::initializeCddlibIfRequired();
◆ interiorFacets()
Definition at line 104 of file gitfan.cc.
107 gfan::ZMatrix
equations = zc.getImpliedEquations();
121 gfan::ZMatrix newInequalities =
inequalities.submatrix(1,0,r,c);
124 gfan::ZCone eta = gfan::ZCone(newInequalities,newEquations);
126 gfan::ZVector
v = eta.getRelativeInteriorPoint();
129 if (
bound.containsRelatively(
v))
133 for (
int i=1;
i<r-1;
i++)
139 eta = gfan::ZCone(newInequalities,newEquations);
141 v = eta.getRelativeInteriorPoint();
143 if (
bound.containsRelatively(
v))
151 eta = gfan::ZCone(newInequalities,newEquations);
154 v = eta.getRelativeInteriorPoint();
156 if (
bound.containsRelatively(
v))
◆ intToAface()
intvec* intToAface |
( |
unsigned int |
v0, |
|
|
int |
n, |
|
|
int |
k |
|
) |
| |
◆ listOfAfacesToCheck()
Definition at line 285 of file gitfan.cc.
298 int n = (int)(
long) u->
Data();
299 int k = (int)(
long)
v->Data();
301 for (
int i=0;
i<
k;
i++)
307 while (!(
v & (1<<n)))
316 v = (t + 1) | (((~t & -~t) - 1) >> (__builtin_ctz(
v) + 1));
319 res->data = (
void*) L;
◆ nextAfaceToCheck()
Definition at line 323 of file gitfan.cc.
323 : unexpected parameter
");
328 BOOLEAN nextAfaceToCheck(leftv res, leftv args)
331 if ((u != NULL) && (u->Typ() == INTVEC_CMD))
334 if ((v != NULL) && (v->Typ() == INT_CMD))
337 if ((w != NULL) && (w->Typ() == INT_CMD))
339 intvec* aface = (intvec*) u->Data();
340 int ambientDimension = (int)(long) v->Data();
341 int dimension = (int)(long) w->Data();
344 for (int i=0; i<aface->length(); i++)
345 af |= 1<<((*aface)[i]-1);
347 unsigned int t = af | (af - 1);
348 af = (t + 1) | (((~t & -~t) - 1) >> (__builtin_ctz(af) + 1));
350 if (af & (1<<ambientDimension))
352 res->rtyp = INTVEC_CMD;
353 res->data = (void*) new intvec(1);
357 res->rtyp = INTVEC_CMD;
358 res->data = (void*) intToAface(af,ambientDimension,dimension);
◆ refineCones()
Definition at line 161 of file gitfan.cc.
173 gfan::ZCone support = gfan::ZCone::givenByRays(*zm, gfan::ZMatrix(0, zm->getWidth()));
184 gfan::ZCone
lambda; gfan::ZVector point;
191 int iterationNumber = 1;
192 std::cout <<
"cones found: " << iterationNumber++ << std::endl;
195 gfan::ZFan* Sigma =
new gfan::ZFan(
lambda.ambientDimension());
201 res->data = (
void*) Sigma;
208 gfan::ZVector interiorPoint;
209 gfan::ZVector facetNormal;
218 interiorPoint =
f.getInteriorPoint();
219 facetNormal =
f.getFacetNormal();
226 point =
mu * interiorPoint - facetNormal;
227 while (!support.containsRelatively(point))
230 point =
mu * interiorPoint - facetNormal;
234 while ((
lambda.dimension() <
lambda.ambientDimension()) && !(
lambda.contains(interiorPoint)))
237 point =
mu * interiorPoint - facetNormal;
240 std::cout <<
"cones found: " << iterationNumber++ << std::endl;
253 res->data = (
void*) Sigma;
◆ subcone()
static gfan::ZCone subcone |
( |
const lists & |
cones, |
|
|
const gfan::ZVector & |
point |
|
) |
| |
|
static |
Definition at line 91 of file gitfan.cc.
93 gfan::ZCone sigma = gfan::ZCone(gfan::ZMatrix(1,point.size()), gfan::ZMatrix(1,point.size()));
95 for (
int i=0;
i<=cones->
nr;
i++)
97 zc = (gfan::ZCone*) cones->
m[
i].
Data();
98 if (zc->contains(point))
99 sigma = gfan::intersection(sigma,*zc);
◆ subset()
void subset |
( |
std::vector< int > & |
arr, |
|
|
int |
size, |
|
|
int |
left, |
|
|
int |
index, |
|
|
std::vector< int > & |
l, |
|
|
std::vector< std::vector< int > > & |
L |
|
) |
| |
Definition at line 544 of file gitfan.cc.
544 : unexpected parameter
");
549 void subset(std::vector<int> &arr, int size, int left, int index, std::vector<int> &l, std::vector<std::vector<int> > &L)
557 for(int i=index; i<size;i++)
◆ subsets()
Definition at line 560 of file gitfan.cc.
573 int n = (int)(
long) u->
Data();
574 int k = (int)(
long)
v->Data();
575 std::vector<int> array(n);
576 for (
int i=0;
i<n;
i++)
578 std::vector<int> ltemp;
579 std::vector<std::vector<int> > lt;
584 for (
int i=0;
i<lt.size();
i++)
586 std::vector<int> lti = lt[
i];
589 for(
int j=0;
j<lti.size();
j++)
592 Lti->
m[
j].
data = (
void*)(
long)lti[
j];
595 Lt->
m[
i].
data = (
void*) Lti;
599 res->data = (
void*) Lt;
BOOLEAN checkSigns(leftv res, leftv args)
BOOLEAN listOfAfacesToCheck(leftv res, leftv args)
void mergeFacets(facets &F, const facets &newFacets)
static gitfan::facets interiorFacets(const gfan::ZCone &zc, const gfan::ZCone &bound)
intvec * intToAface(unsigned int v0, int n, int k)
static int binomial(int n, int k)
BOOLEAN binaryToBigint(leftv res, leftv args)
Class used for (list of) interpreter objects.
void mu(int **points, int sizePoints)
gfan::ZVector randomPoint(const gfan::ZCone *zc)
BOOLEAN inequalities(leftv res, leftv args)
std::set< facet, facet_compare > facets
gfan::ZMatrix * bigintmatToZMatrix(const bigintmat &bim)
void lambda(int **points, int sizePoints)
static CanonicalForm bound(const CFMatrix &M)
BOOLEAN nextAfaceToCheck(leftv res, leftv args)
BOOLEAN refineCones(leftv res, leftv args)
BOOLEAN equations(leftv res, leftv args)
const Variable & v
< [in] a sqrfree bivariate poly
INLINE_THIS void Init(int l=0)
int status int void size_t count
void subset(std::vector< int > &arr, int size, int left, int index, std::vector< int > &l, std::vector< std::vector< int > > &L)
static gfan::ZCone subcone(const lists &cones, const gfan::ZVector &point)