diff --git a/tests/polys/luts/irreducible_polys.py b/tests/polys/luts/irreducible_polys.py new file mode 100644 index 000000000..71f1ae35c --- /dev/null +++ b/tests/polys/luts/irreducible_polys.py @@ -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), +] diff --git a/tests/polys/luts/irreducible_polys_database.py b/tests/polys/luts/irreducible_polys_database.py deleted file mode 100644 index 282d5e38f..000000000 --- a/tests/polys/luts/irreducible_polys_database.py +++ /dev/null @@ -1,15 +0,0 @@ -""" -A module containing LUTs for irreducible polynomials with min terms from irreducible_polys.db -""" - -# LUT items are poly nonzero degrees and coefficients in degree-descending order - -# Gadiel Seroussi's table (1998) -# LUT items obtained by randomly picking degrees and checking the PDF -# sorted(numpy.random.default_rng(1337).integers(size=5, low=500, high=10_000, endpoint=True)) - -IRREDUCIBLE_POLY_MIN_TERMS_2_2262 = [[2262, 57, 0], [1, 1, 1]] -IRREDUCIBLE_POLY_MIN_TERMS_2_5632 = [[5632, 17, 15, 5, 0], [1, 1, 1, 1, 1]] -IRREDUCIBLE_POLY_MIN_TERMS_2_5690 = [[5690, 1623, 0], [1, 1, 1]] -IRREDUCIBLE_POLY_MIN_TERMS_2_7407 = [[7407, 27, 21, 17, 0], [1, 1, 1, 1, 1]] -IRREDUCIBLE_POLY_MIN_TERMS_2_8842 = [[8842, 4143, 0], [1, 1, 1]] diff --git a/tests/polys/luts/irreducible_polys_min.py b/tests/polys/luts/irreducible_polys_min.py new file mode 100644 index 000000000..454d9de59 --- /dev/null +++ b/tests/polys/luts/irreducible_polys_min.py @@ -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]]), +] diff --git a/tests/polys/luts/poly_factors.py b/tests/polys/luts/poly_factors.py index 31159c148..7003eaaa9 100644 --- a/tests/polys/luts/poly_factors.py +++ b/tests/polys/luts/poly_factors.py @@ -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), +] diff --git a/tests/polys/luts/primitive_elements.py b/tests/polys/luts/primitive_elements.py new file mode 100644 index 000000000..dc405b0e1 --- /dev/null +++ b/tests/polys/luts/primitive_elements.py @@ -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), +] diff --git a/tests/polys/luts/primitive_polys.py b/tests/polys/luts/primitive_polys.py new file mode 100644 index 000000000..407b71667 --- /dev/null +++ b/tests/polys/luts/primitive_polys.py @@ -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), +] diff --git a/tests/polys/test_factors.py b/tests/polys/test_factors.py index 7bf3ccc1c..2acdb5488 100644 --- a/tests/polys/test_factors.py +++ b/tests/polys/test_factors.py @@ -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(): @@ -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) diff --git a/tests/polys/test_irreducible_polys.py b/tests/polys/test_irreducible_polys.py index 9a7a4f8b2..314db62b3 100644 --- a/tests/polys/test_irreducible_polys.py +++ b/tests/polys/test_irreducible_polys.py @@ -2,91 +2,14 @@ A pytest module to test generating irreducible polynomials over finite fields. """ import time + import numpy as np import pytest import galois -from .luts.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 .luts.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 .luts.irreducible_polys_4 import ( - IRREDUCIBLE_POLYS_4_1, - IRREDUCIBLE_POLYS_4_2, - IRREDUCIBLE_POLYS_4_3, -) -from .luts.irreducible_polys_5 import ( - IRREDUCIBLE_POLYS_5_1, - IRREDUCIBLE_POLYS_5_2, - IRREDUCIBLE_POLYS_5_3, - IRREDUCIBLE_POLYS_5_4, -) -from .luts.irreducible_polys_9 import ( - IRREDUCIBLE_POLYS_9_1, - IRREDUCIBLE_POLYS_9_2, - IRREDUCIBLE_POLYS_9_3, -) -from .luts.irreducible_polys_25 import IRREDUCIBLE_POLYS_25_1, IRREDUCIBLE_POLYS_25_2 - -from .luts.irreducible_polys_database import ( - IRREDUCIBLE_POLY_MIN_TERMS_2_2262, - IRREDUCIBLE_POLY_MIN_TERMS_2_5632, - IRREDUCIBLE_POLY_MIN_TERMS_2_5690, - IRREDUCIBLE_POLY_MIN_TERMS_2_7407, - IRREDUCIBLE_POLY_MIN_TERMS_2_8842, -) - -PARAMS = [ - (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), -] - -PARAMS_DB = [ - (2, 2262, IRREDUCIBLE_POLY_MIN_TERMS_2_2262), - (2, 5632, IRREDUCIBLE_POLY_MIN_TERMS_2_5632), - (2, 5690, IRREDUCIBLE_POLY_MIN_TERMS_2_5690), - (2, 7407, IRREDUCIBLE_POLY_MIN_TERMS_2_7407), - (2, 8842, IRREDUCIBLE_POLY_MIN_TERMS_2_8842), -] +from .luts.irreducible_polys import IRREDUCIBLE_POLYS +from .luts.irreducible_polys_min import IRREDUCIBLE_POLYS_MIN def test_irreducible_poly_exceptions(): @@ -109,17 +32,17 @@ def test_irreducible_poly_exceptions(): galois.irreducible_poly(2, 3, method="invalid-argument") -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", IRREDUCIBLE_POLYS) def test_irreducible_poly_min(order, degree, polys): assert galois.irreducible_poly(order, degree).coeffs.tolist() == polys[0] -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", IRREDUCIBLE_POLYS) def test_irreducible_poly_max(order, degree, polys): assert galois.irreducible_poly(order, degree, method="max").coeffs.tolist() == polys[-1] -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", IRREDUCIBLE_POLYS) def test_irreducible_poly_random(order, degree, polys): assert galois.irreducible_poly(order, degree, method="random").coeffs.tolist() in polys @@ -144,12 +67,12 @@ def test_irreducible_polys_exceptions(): next(galois.irreducible_polys(2, 3, terms="invalid-argument")) -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", IRREDUCIBLE_POLYS) def test_irreducible_polys(order, degree, polys): assert [f.coeffs.tolist() for f in galois.irreducible_polys(order, degree)] == polys -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", IRREDUCIBLE_POLYS) def test_specific_terms(order, degree, polys): all_polys = [] for terms in range(1, degree + 2): @@ -167,7 +90,7 @@ def test_specific_terms_none_found(): assert not list(galois.irreducible_polys(2, 3, terms=2)) -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", IRREDUCIBLE_POLYS) def test_minimum_terms(order, degree, polys): min_terms = min(np.count_nonzero(f) for f in polys) min_term_polys = [f for f in polys if np.count_nonzero(f) == min_terms] @@ -177,7 +100,7 @@ def test_minimum_terms(order, degree, polys): assert f.coeffs.tolist() in min_term_polys -@pytest.mark.parametrize("order,degree,polys", PARAMS_DB) +@pytest.mark.parametrize("order,degree,polys", IRREDUCIBLE_POLYS_MIN) def test_minimum_terms_from_database(order, degree, polys): tick = time.time() p = galois.irreducible_poly(order, degree, terms="min") diff --git a/tests/polys/test_primitive_elements.py b/tests/polys/test_primitive_elements.py index ce1a2708b..9eb7c490e 100644 --- a/tests/polys/test_primitive_elements.py +++ b/tests/polys/test_primitive_elements.py @@ -7,37 +7,7 @@ import galois -from .luts.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 .luts.primitive_elements_3 import ( - PRIMITIVE_ELEMENTS_3_2, - PRIMITIVE_ELEMENTS_3_3, - PRIMITIVE_ELEMENTS_3_4, -) -from .luts.primitive_elements_5 import ( - PRIMITIVE_ELEMENTS_5_2, - PRIMITIVE_ELEMENTS_5_3, - PRIMITIVE_ELEMENTS_5_4, -) - -PARAMS = [ - (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), -] +from .luts.primitive_elements import PRIMITIVE_ELEMENTS def test_primitive_element_exceptions(): @@ -55,19 +25,19 @@ def test_primitive_element_exceptions(): galois.primitive_element(galois.Poly.Str("x^4")) -@pytest.mark.parametrize("characteristic,degree,elements", PARAMS) +@pytest.mark.parametrize("characteristic,degree,elements", PRIMITIVE_ELEMENTS) def test_primitive_element_min(characteristic, degree, elements): p = galois.GF(characteristic**degree).irreducible_poly assert galois.primitive_element(p) == elements[0] -@pytest.mark.parametrize("characteristic,degree,elements", PARAMS) +@pytest.mark.parametrize("characteristic,degree,elements", PRIMITIVE_ELEMENTS) def test_primitive_element_max(characteristic, degree, elements): p = galois.GF(characteristic**degree).irreducible_poly assert galois.primitive_element(p, method="max") == elements[-1] -@pytest.mark.parametrize("characteristic,degree,elements", PARAMS) +@pytest.mark.parametrize("characteristic,degree,elements", PRIMITIVE_ELEMENTS) def test_primitive_element_random(characteristic, degree, elements): p = galois.GF(characteristic**degree).irreducible_poly assert galois.primitive_element(p, method="max") in elements @@ -84,7 +54,7 @@ def test_primitive_elements_exceptions(): galois.primitive_elements(galois.Poly.Random(2) * galois.Poly.Random(2)) -@pytest.mark.parametrize("characteristic,degree,elements", PARAMS) +@pytest.mark.parametrize("characteristic,degree,elements", PRIMITIVE_ELEMENTS) def test_primitive_elements(characteristic, degree, elements): p = galois.GF(characteristic**degree).irreducible_poly assert galois.primitive_elements(p) == elements @@ -106,13 +76,13 @@ def test_is_primitive_element_exceptions(): galois.is_primitive_element(galois.Poly([1, 0, 0, 0, 1, 1, 1, 0, 1]), galois.Poly([1, 0, 0, 0, 1, 1, 1, 0, 1])) -@pytest.mark.parametrize("characteristic,degree,elements", PARAMS) +@pytest.mark.parametrize("characteristic,degree,elements", PRIMITIVE_ELEMENTS) def test_is_primitive_element(characteristic, degree, elements): p = galois.GF(characteristic**degree).irreducible_poly assert all(galois.is_primitive_element(e, p) for e in elements) -@pytest.mark.parametrize("characteristic,degree,elements", PARAMS) +@pytest.mark.parametrize("characteristic,degree,elements", PRIMITIVE_ELEMENTS) def test_is_not_primitive_element(characteristic, degree, elements): p = galois.GF(characteristic**degree).irreducible_poly while True: diff --git a/tests/polys/test_primitive_polys.py b/tests/polys/test_primitive_polys.py index 3870e65f0..3216fffa2 100644 --- a/tests/polys/test_primitive_polys.py +++ b/tests/polys/test_primitive_polys.py @@ -10,70 +10,7 @@ import galois -from .luts.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 .luts.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 .luts.primitive_polys_4 import ( - PRIMITIVE_POLYS_4_1, - PRIMITIVE_POLYS_4_2, - PRIMITIVE_POLYS_4_3, -) -from .luts.primitive_polys_5 import ( - PRIMITIVE_POLYS_5_1, - PRIMITIVE_POLYS_5_2, - PRIMITIVE_POLYS_5_3, - PRIMITIVE_POLYS_5_4, -) -from .luts.primitive_polys_9 import ( - PRIMITIVE_POLYS_9_1, - PRIMITIVE_POLYS_9_2, - PRIMITIVE_POLYS_9_3, -) -from .luts.primitive_polys_25 import PRIMITIVE_POLYS_25_1, PRIMITIVE_POLYS_25_2 - -PARAMS = [ - (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), -] +from .luts.primitive_polys import PRIMITIVE_POLYS def test_primitive_poly_exceptions(): @@ -96,17 +33,17 @@ def test_primitive_poly_exceptions(): galois.primitive_poly(2, 3, method="invalid-argument") -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", PRIMITIVE_POLYS) def test_primitive_poly_min(order, degree, polys): assert galois.primitive_poly(order, degree).coeffs.tolist() == polys[0] -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", PRIMITIVE_POLYS) def test_primitive_poly_max(order, degree, polys): assert galois.primitive_poly(order, degree, method="max").coeffs.tolist() == polys[-1] -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", PRIMITIVE_POLYS) def test_primitive_poly_random(order, degree, polys): assert galois.primitive_poly(order, degree, method="random").coeffs.tolist() in polys @@ -131,12 +68,12 @@ def test_primitive_polys_exceptions(): next(galois.primitive_polys(2, 3, terms="invalid-argument")) -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", PRIMITIVE_POLYS) def test_primitive_polys(order, degree, polys): assert [f.coeffs.tolist() for f in galois.primitive_polys(order, degree)] == polys -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", PRIMITIVE_POLYS) def test_specific_terms(order, degree, polys): all_polys = [] for terms in range(1, degree + 2): @@ -154,7 +91,7 @@ def test_specific_terms_none_found(): assert not list(galois.primitive_polys(2, 3, terms=2)) -@pytest.mark.parametrize("order,degree,polys", PARAMS) +@pytest.mark.parametrize("order,degree,polys", PRIMITIVE_POLYS) def test_minimum_terms(order, degree, polys): min_terms = min(np.count_nonzero(f) for f in polys) min_term_polys = [f for f in polys if np.count_nonzero(f) == min_terms]