Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

monomial

jmalena13MIT0.2.0TypeScript support: included

Fast monomial implementation with constraint support

degree, enumeration, grlex, lex, math, mod, modulo, modular, monomial, ordering, polynomial, rank, unrank

readme

monomial

Package providing functionality for working with monomials, including operations under various constraints.

Install

$ npm install --save monomial

What is monomial?

A monomial is a mathematical expression of form $c x_1^{a_1} x_2^{a_2} \dots x_k^{a_k}$, where:

  • $c$ is a constant coefficient (when $c = 1$, the monomial is called primitive).
  • $x_i$ are variables.
  • $a_i$ are exponents.

You can view monomial as a polynomial with just one term.

Monomial degree

Degree of monomial $deg(u) = a_1 + a_2 + \dots + a_k$ is sum of monomial exponents.

Examples:

  • $-2x^4$ ($k=1$ and degree of 1)
  • $3xy^2$ ($k=2$ and degree of 3)
  • $x^2y^3z^4$ ($k=3$ and degre of 9; this monomial is also primitive)

How is monomial represented?

Monomial of k variables is represented as k-tuple, where elements are exponents. In our JS/TS world, k-tuple is array of length $k$. Therefore monomial $u = xz^2 = x^1y^0z^2$ is represented as:

const u: number[] = [1, 0, 2];

Monomial orderings

Following monomial orderings are currently available:

  • Lexicographic Order (lex)
  • Graded Lexicographic Order (grlex)

and more of them will be supported in the future. Within this orderings, you can use performant rank and unrank operations, supporting various constraints.

Constrained monomials

You can also apply following constraints on monomials:

Modulo constraint

Restrict your scope to monomials $u$ having exponent smaller than $m$. In this case grlex enumeration of first few monomials with parameters $k = 3$ and $m = 2$ looks as follows:

[0, 0, 0] // Rank 1
[0, 0, 1] // Rank 2
[0, 1, 0] // Rank 3
[1, 0, 0] // Rank 4
[0, 1, 1] // Rank 5
[1, 0, 1] // Rank 6

Degree constraint

This will be added soon.

Current limitations

Only primitive monomials and monomials with non-negative exponents are supported.