Macaulay2 Engine
Loading...
Searching...
No Matches

◆ rawNonTermOrderVariables()

M2_arrayint rawNonTermOrderVariables ( const MonomialOrdering * mo)

Definition at line 466 of file monomial-ordering.cpp.

469{
470 int i, j, sum, nextvar;
471 int nvars = rawNumberOfVariables(mo);
472 int *gt = getmematomicvectortype(int, nvars);
473 for (i = 0; i < nvars; i++)
474 gt[i] =
475 0; // 0 means undecided, -1 means non term order, 1 means term order
476 // Now we loop through the parts of the monomial order
477 nextvar = 0;
478 for (i = 0; i < mo->len; i++)
479 {
480 mon_part p = mo->array[i];
481 switch (p->type)
482 {
483 case MO_LEX:
484 case MO_LEX2:
485 case MO_LEX4:
486 case MO_GREVLEX:
487 case MO_GREVLEX2:
488 case MO_GREVLEX4:
489 case MO_GREVLEX_WTS:
490 case MO_GREVLEX2_WTS:
491 case MO_GREVLEX4_WTS:
492 case MO_LAURENT:
493 case MO_NC_LEX:
494 for (j = 0; j < p->nvars; j++, nextvar++)
495 if (gt[nextvar] == 0) gt[nextvar] = 1;
496 break;
498 case MO_REVLEX:
499 for (j = 0; j < p->nvars; j++, nextvar++)
500 if (gt[nextvar] == 0) gt[nextvar] = -1;
501 break;
502 case MO_WEIGHTS:
503 for (j = nextvar; j < p->nvars; j++)
504 if (gt[j] == 0)
505 {
506 if (p->wts[j] > 0)
507 gt[j] = 1;
508 else if (p->wts[j] < 0)
509 gt[j] = -1;
510 }
511 break;
512 case MO_POSITION_UP:
513 case MO_POSITION_DOWN:
514 break;
515 }
516 }
517 // At this point every variables' gt should be 1 or -1.
518 sum = 0;
519 for (i = 0; i < nvars; i++)
520 {
521 if (gt[i] == 0) INTERNAL_ERROR("gt[i] should not be 0");
522 if (gt[i] < 0) sum++;
523 }
524
525 // Make an array of this length.
527 nextvar = 0;
528 for (i = 0; i < nvars; i++)
529 if (gt[i] < 0) result->array[nextvar++] = i;
530 return result;
531}
void INTERNAL_ERROR(const char *s,...)
Definition error.c:36
int p
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define getmematomicvectortype(S, len)
Definition m2-mem.h:147
M2_arrayint M2_makearrayint(int n)
Definition m2-types.cpp:6
int rawNumberOfVariables(const MonomialOrdering *mo)
@ MO_GREVLEX4_WTS
@ MO_LAURENT_REVLEX
@ MO_NC_LEX
@ MO_LEX4
@ MO_REVLEX
@ MO_POSITION_UP
@ MO_LEX
@ MO_GREVLEX
@ MO_LEX2
@ MO_GREVLEX4
@ MO_LAURENT
@ MO_GREVLEX2_WTS
@ MO_WEIGHTS
@ MO_POSITION_DOWN
@ MO_GREVLEX2
@ MO_GREVLEX_WTS
const mpreal sum(const mpreal tab[], const unsigned long int n, int &status, mp_rnd_t mode=mpreal::get_default_rnd())
Definition mpreal.h:2600

References MonomialOrdering::array, getmematomicvectortype, INTERNAL_ERROR(), MonomialOrdering::len, M2_makearrayint(), MO_GREVLEX, MO_GREVLEX2, MO_GREVLEX2_WTS, MO_GREVLEX4, MO_GREVLEX4_WTS, MO_GREVLEX_WTS, MO_LAURENT, MO_LAURENT_REVLEX, MO_LEX, MO_LEX2, MO_LEX4, MO_NC_LEX, MO_POSITION_DOWN, MO_POSITION_UP, MO_REVLEX, MO_WEIGHTS, mon_part::nvars, p, rawNumberOfVariables(), and result().