Macaulay2 Engine
Loading...
Searching...
No Matches
monomial-ordering.h File Reference

Engine-boundary C API for assembling block-level MonomialOrderings from declarative pieces. More...

Go to the source code of this file.

Classes

struct  mon_part
struct  MonomialOrdering
 Front-end-side description of a monomial ordering as a list of mon_part blocks. More...

Enumerations

enum  MonomialOrdering_type {
  MO_LEX = 1 , MO_LEX2 = 2 , MO_LEX4 = 3 , MO_GREVLEX = 4 ,
  MO_GREVLEX2 = 5 , MO_GREVLEX4 = 6 , MO_GREVLEX_WTS = 7 , MO_GREVLEX2_WTS = 8 ,
  MO_GREVLEX4_WTS = 9 , MO_REVLEX = 10 , MO_WEIGHTS = 11 , MO_LAURENT = 12 ,
  MO_LAURENT_REVLEX = 13 , MO_NC_LEX = 14 , MO_POSITION_UP = 15 , MO_POSITION_DOWN = 16
}

Functions

MonomialOrderingrawLexMonomialOrdering (int nvars, int packing)
MonomialOrderingrawGRevLexMonomialOrdering (M2_arrayint degs, int packing)
MonomialOrderingrawRevLexMonomialOrdering (int nvars)
MonomialOrderingrawWeightsMonomialOrdering (M2_arrayint wts)
MonomialOrderingrawGroupLexMonomialOrdering (int nvars)
MonomialOrderingrawGroupRevLexMonomialOrdering (int nvars)
MonomialOrderingrawNClexMonomialOrdering (int nvars)
MonomialOrderingrawPositionMonomialOrdering (M2_bool up_or_down)
MonomialOrderingrawProductMonomialOrdering (engine_RawMonomialOrderingArray mo)
MonomialOrderingrawJoinMonomialOrdering (engine_RawMonomialOrderingArray mo)
int rawNumberOfVariables (const MonomialOrdering *mo)
int rawNumberOfInvertibleVariables (const MonomialOrdering *mo)
M2_arrayint rawNonTermOrderVariables (const MonomialOrdering *mo)
M2_string IM2_MonomialOrdering_to_string (const MonomialOrdering *mo)
unsigned int rawMonomialOrderingHash (const MonomialOrdering *mo)
int moIsGRevLex (const struct MonomialOrdering *mo)
int moIsLex (const struct MonomialOrdering *mo)
M2_arrayint moGetWeightValues (const struct MonomialOrdering *mo)
M2_arrayintOrNull rawMonomialOrderingToMatrix (const struct MonomialOrdering *mo)

Detailed Description

Engine-boundary C API for assembling block-level MonomialOrderings from declarative pieces.

Note
AI-generated documentation. Verify against the source before relying on it.

Declares the MonomialOrdering_type enum — MO_LEX, MO_GREVLEX, packed MO_LEX2 / MO_LEX4 / MO_GREVLEX2 / MO_GREVLEX4, weighted GRevLex variants (MO_GREVLEX_WTS / _GREVLEX2_WTS / _GREVLEX4_WTS), MO_REVLEX, MO_WEIGHTS, the Laurent variants (MO_LAURENT and MO_LAURENT_REVLEX), MO_NC_LEX, and MO_POSITION_UP / _DOWN — together with the per-block mon_part record (carrying type, nvars, and an optional *wts weight array) and the variable-length MonomialOrdering struct that holds the assembled sequence of parts (mon_part array[1] flexible-style) plus a cached _hash. Each raw*MonomialOrdering factory builds one block (lex, GRevLex-with-packing, revlex, weights, group-lex / group-revlex, NC-lex, position-up/down); composition is via rawProductMonomialOrdering (for tensor products) and rawJoinMonomialOrdering (the default block- joining used when making monoids and polynomial rings), both over an engine_RawMonomialOrderingArray. Accessors include rawNumberOfVariables, rawNumberOfInvertibleVariables, rawNonTermOrderVariables (which detect local / tangent-cone orders where GB algorithms must switch behaviour), IM2_MonomialOrdering_to_string, rawMonomialOrderingHash, and the predicate helpers moIsGRevLex / moIsLex / moGetWeightValues.

The output of these constructors flows into rawMonoid(mo, ...), where imonorder.cpp compiles the declarative MonomialOrdering into an executable MonomialOrder layout. The packed MO_*2 / MO_*4 variants squeeze two or four exponents per int for small- exponent rings, halving or quartering monomial-comparison memory footprint — they appear as Lex/LexSmall/LexTiny and GRevLex/GRevLexSmall/GRevLexTiny on the M2 side.

See also
monomial-ordering.cpp
monoid.h
imonorder.hpp
engine-includes.hpp

Definition in file monomial-ordering.h.