Skip to content

Commit

Permalink
Clean up polynomial LUTs
Browse files Browse the repository at this point in the history
  • Loading branch information
mhostetter committed Feb 1, 2023
1 parent 4177128 commit b61044a
Show file tree
Hide file tree
Showing 10 changed files with 226 additions and 227 deletions.
68 changes: 68 additions & 0 deletions tests/polys/luts/irreducible_polys.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
"""
A module containing LUTs for irreducible polynomials.
"""

from .irreducible_polys_2 import (
IRREDUCIBLE_POLYS_2_1,
IRREDUCIBLE_POLYS_2_2,
IRREDUCIBLE_POLYS_2_3,
IRREDUCIBLE_POLYS_2_4,
IRREDUCIBLE_POLYS_2_5,
IRREDUCIBLE_POLYS_2_6,
IRREDUCIBLE_POLYS_2_7,
IRREDUCIBLE_POLYS_2_8,
)
from .irreducible_polys_3 import (
IRREDUCIBLE_POLYS_3_1,
IRREDUCIBLE_POLYS_3_2,
IRREDUCIBLE_POLYS_3_3,
IRREDUCIBLE_POLYS_3_4,
IRREDUCIBLE_POLYS_3_5,
IRREDUCIBLE_POLYS_3_6,
)
from .irreducible_polys_4 import (
IRREDUCIBLE_POLYS_4_1,
IRREDUCIBLE_POLYS_4_2,
IRREDUCIBLE_POLYS_4_3,
)
from .irreducible_polys_5 import (
IRREDUCIBLE_POLYS_5_1,
IRREDUCIBLE_POLYS_5_2,
IRREDUCIBLE_POLYS_5_3,
IRREDUCIBLE_POLYS_5_4,
)
from .irreducible_polys_9 import (
IRREDUCIBLE_POLYS_9_1,
IRREDUCIBLE_POLYS_9_2,
IRREDUCIBLE_POLYS_9_3,
)
from .irreducible_polys_25 import IRREDUCIBLE_POLYS_25_1, IRREDUCIBLE_POLYS_25_2

IRREDUCIBLE_POLYS = [
(2, 1, IRREDUCIBLE_POLYS_2_1),
(2, 2, IRREDUCIBLE_POLYS_2_2),
(2, 3, IRREDUCIBLE_POLYS_2_3),
(2, 4, IRREDUCIBLE_POLYS_2_4),
(2, 5, IRREDUCIBLE_POLYS_2_5),
(2, 6, IRREDUCIBLE_POLYS_2_6),
(2, 7, IRREDUCIBLE_POLYS_2_7),
(2, 8, IRREDUCIBLE_POLYS_2_8),
(2**2, 1, IRREDUCIBLE_POLYS_4_1),
(2**2, 2, IRREDUCIBLE_POLYS_4_2),
(2**2, 3, IRREDUCIBLE_POLYS_4_3),
(3, 1, IRREDUCIBLE_POLYS_3_1),
(3, 2, IRREDUCIBLE_POLYS_3_2),
(3, 3, IRREDUCIBLE_POLYS_3_3),
(3, 4, IRREDUCIBLE_POLYS_3_4),
(3, 5, IRREDUCIBLE_POLYS_3_5),
(3, 6, IRREDUCIBLE_POLYS_3_6),
(3**2, 1, IRREDUCIBLE_POLYS_9_1),
(3**2, 2, IRREDUCIBLE_POLYS_9_2),
(3**2, 3, IRREDUCIBLE_POLYS_9_3),
(5, 1, IRREDUCIBLE_POLYS_5_1),
(5, 2, IRREDUCIBLE_POLYS_5_2),
(5, 3, IRREDUCIBLE_POLYS_5_3),
(5, 4, IRREDUCIBLE_POLYS_5_4),
(5**2, 1, IRREDUCIBLE_POLYS_25_1),
(5**2, 2, IRREDUCIBLE_POLYS_25_2),
]
15 changes: 0 additions & 15 deletions tests/polys/luts/irreducible_polys_database.py

This file was deleted.

19 changes: 19 additions & 0 deletions tests/polys/luts/irreducible_polys_min.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
"""
A module containing LUTs for lexicographically-first irreducible polynomials with minimal terms.
LUT items obtained by randomly picking degrees and checking the PDF,
References:
- Gadiel Seroussi's table (1998). https://www.hpl.hp.com/techreports/98/HPL-98-135.pdf.
"""

# LUT items are (order, degree, nonzero_degrees, nonzero_coeffs) in degree-descending order.
# sorted(numpy.random.default_rng(1337).integers(size=5, low=500, high=10_000, endpoint=True))

IRREDUCIBLE_POLYS_MIN = [
(2, 2262, [[2262, 57, 0], [1, 1, 1]]),
(2, 5632, [[5632, 17, 15, 5, 0], [1, 1, 1, 1, 1]]),
(2, 5690, [[5690, 1623, 0], [1, 1, 1]]),
(2, 7407, [[7407, 27, 21, 17, 0], [1, 1, 1, 1, 1]]),
(2, 8842, [[8842, 4143, 0], [1, 1, 1]]),
]
10 changes: 10 additions & 0 deletions tests/polys/luts/poly_factors.py
Original file line number Diff line number Diff line change
Expand Up @@ -640,3 +640,13 @@
[1, 1, 1, 1],
),
]


POLY_FACTORS = [
(2, 1, POLY_FACTORS_2_1),
(3, 1, POLY_FACTORS_3_1),
(5, 1, POLY_FACTORS_5_1),
(2, 2, POLY_FACTORS_2_2),
(3, 2, POLY_FACTORS_3_2),
(5, 2, POLY_FACTORS_5_2),
]
35 changes: 35 additions & 0 deletions tests/polys/luts/primitive_elements.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""
A module containing LUTs for primitive elements.
"""

from .primitive_elements_2 import (
PRIMITIVE_ELEMENTS_2_2,
PRIMITIVE_ELEMENTS_2_3,
PRIMITIVE_ELEMENTS_2_4,
PRIMITIVE_ELEMENTS_2_5,
PRIMITIVE_ELEMENTS_2_6,
)
from .primitive_elements_3 import (
PRIMITIVE_ELEMENTS_3_2,
PRIMITIVE_ELEMENTS_3_3,
PRIMITIVE_ELEMENTS_3_4,
)
from .primitive_elements_5 import (
PRIMITIVE_ELEMENTS_5_2,
PRIMITIVE_ELEMENTS_5_3,
PRIMITIVE_ELEMENTS_5_4,
)

PRIMITIVE_ELEMENTS = [
(2, 2, PRIMITIVE_ELEMENTS_2_2),
(2, 3, PRIMITIVE_ELEMENTS_2_3),
(2, 4, PRIMITIVE_ELEMENTS_2_4),
(2, 5, PRIMITIVE_ELEMENTS_2_5),
(2, 6, PRIMITIVE_ELEMENTS_2_6),
(3, 2, PRIMITIVE_ELEMENTS_3_2),
(3, 3, PRIMITIVE_ELEMENTS_3_3),
(3, 4, PRIMITIVE_ELEMENTS_3_4),
(5, 2, PRIMITIVE_ELEMENTS_5_2),
(5, 3, PRIMITIVE_ELEMENTS_5_3),
(5, 4, PRIMITIVE_ELEMENTS_5_4),
]
68 changes: 68 additions & 0 deletions tests/polys/luts/primitive_polys.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
"""
A module containing LUTs for primitive polynomials.
"""

from .primitive_polys_2 import (
PRIMITIVE_POLYS_2_1,
PRIMITIVE_POLYS_2_2,
PRIMITIVE_POLYS_2_3,
PRIMITIVE_POLYS_2_4,
PRIMITIVE_POLYS_2_5,
PRIMITIVE_POLYS_2_6,
PRIMITIVE_POLYS_2_7,
PRIMITIVE_POLYS_2_8,
)
from .primitive_polys_3 import (
PRIMITIVE_POLYS_3_1,
PRIMITIVE_POLYS_3_2,
PRIMITIVE_POLYS_3_3,
PRIMITIVE_POLYS_3_4,
PRIMITIVE_POLYS_3_5,
PRIMITIVE_POLYS_3_6,
)
from .primitive_polys_4 import (
PRIMITIVE_POLYS_4_1,
PRIMITIVE_POLYS_4_2,
PRIMITIVE_POLYS_4_3,
)
from .primitive_polys_5 import (
PRIMITIVE_POLYS_5_1,
PRIMITIVE_POLYS_5_2,
PRIMITIVE_POLYS_5_3,
PRIMITIVE_POLYS_5_4,
)
from .primitive_polys_9 import (
PRIMITIVE_POLYS_9_1,
PRIMITIVE_POLYS_9_2,
PRIMITIVE_POLYS_9_3,
)
from .primitive_polys_25 import PRIMITIVE_POLYS_25_1, PRIMITIVE_POLYS_25_2

PRIMITIVE_POLYS = [
(2, 1, PRIMITIVE_POLYS_2_1),
(2, 2, PRIMITIVE_POLYS_2_2),
(2, 3, PRIMITIVE_POLYS_2_3),
(2, 4, PRIMITIVE_POLYS_2_4),
(2, 5, PRIMITIVE_POLYS_2_5),
(2, 6, PRIMITIVE_POLYS_2_6),
(2, 7, PRIMITIVE_POLYS_2_7),
(2, 8, PRIMITIVE_POLYS_2_8),
(2**2, 1, PRIMITIVE_POLYS_4_1),
(2**2, 2, PRIMITIVE_POLYS_4_2),
(2**2, 3, PRIMITIVE_POLYS_4_3),
(3, 1, PRIMITIVE_POLYS_3_1),
(3, 2, PRIMITIVE_POLYS_3_2),
(3, 3, PRIMITIVE_POLYS_3_3),
(3, 4, PRIMITIVE_POLYS_3_4),
(3, 5, PRIMITIVE_POLYS_3_5),
(3, 6, PRIMITIVE_POLYS_3_6),
(3**2, 1, PRIMITIVE_POLYS_9_1),
(3**2, 2, PRIMITIVE_POLYS_9_2),
(3**2, 3, PRIMITIVE_POLYS_9_3),
(5, 1, PRIMITIVE_POLYS_5_1),
(5, 2, PRIMITIVE_POLYS_5_2),
(5, 3, PRIMITIVE_POLYS_5_3),
(5, 4, PRIMITIVE_POLYS_5_4),
(5**2, 1, PRIMITIVE_POLYS_25_1),
(5**2, 2, PRIMITIVE_POLYS_25_2),
]
20 changes: 2 additions & 18 deletions tests/polys/test_factors.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,7 @@

import galois

from .luts.poly_factors import (
POLY_FACTORS_2_1,
POLY_FACTORS_2_2,
POLY_FACTORS_3_1,
POLY_FACTORS_3_2,
POLY_FACTORS_5_1,
POLY_FACTORS_5_2,
)

PARAMS = [
(2, 1, POLY_FACTORS_2_1),
(3, 1, POLY_FACTORS_3_1),
(5, 1, POLY_FACTORS_5_1),
(2, 2, POLY_FACTORS_2_2),
(3, 2, POLY_FACTORS_3_2),
(5, 2, POLY_FACTORS_5_2),
]
from .luts.poly_factors import POLY_FACTORS


def test_factors_exceptions():
Expand Down Expand Up @@ -71,7 +55,7 @@ def test_factors_random():
assert f == multiply_factors(factors, multiplicities)


@pytest.mark.parametrize("characteristic,degree,lut", PARAMS)
@pytest.mark.parametrize("characteristic,degree,lut", POLY_FACTORS)
def test_factors(characteristic, degree, lut):
GF = galois.GF(characteristic**degree)

Expand Down
Loading

0 comments on commit b61044a

Please sign in to comment.