diff --git a/helper_scripts/bash_sage_init.sh b/helper_scripts/bash_sage_init.sh index 3cd13be..4793537 100755 --- a/helper_scripts/bash_sage_init.sh +++ b/helper_scripts/bash_sage_init.sh @@ -7,5 +7,8 @@ if [ ! -f ${SAGE_BIN_DIR}/sage-env-config ]; then SAGE_BIN_DIR=$(sage -sh -c 'echo $SAGE_VENV')/bin fi source ${SAGE_BIN_DIR}/sage-env-config +if [ ! -f ${SAGE_BIN_DIR}/sage-env ]; then + SAGE_BIN_DIR=$(sage -sh -c 'echo $SAGE_VENV')/bin +fi source ${SAGE_BIN_DIR}/sage-env export PATH=$(dirname -- ${HELPER_DIR})/venv/bin:$SAGE_BIN_DIR:${PATH} diff --git a/isogeny_primes.py b/isogeny_primes.py index 2d00580..c92652a 100644 --- a/isogeny_primes.py +++ b/isogeny_primes.py @@ -61,7 +61,7 @@ def DLMV(K): delta_K = log(2) / (r_K + 1) C_1_K = r_K ** (r_K + 1) * delta_K ** (-(r_K - 1)) / 2 C_2_K = exp(24 * C_1_K * R_K) - CHEB_DEN_BOUND = (4 * log(Delta_K ** h_K) + 5 * h_K + 5) ** 2 + CHEB_DEN_BOUND = (4 * log(Delta_K**h_K) + 5 * h_K + 5) ** 2 C_0 = ((CHEB_DEN_BOUND ** (12 * h_K)) * C_2_K + CHEB_DEN_BOUND ** (6 * h_K)) ** 4 # Now the Type 1 and 2 bounds diff --git a/latex_helper.py b/latex_helper.py index ac1353e..f7450f2 100644 --- a/latex_helper.py +++ b/latex_helper.py @@ -176,7 +176,7 @@ def type_2_bounds(self): log_type_2_bound = type_2_bound.log10() exp_at_10 = int(log_type_2_bound) rem = log_type_2_bound - exp_at_10 - rem = 10 ** rem + rem = 10**rem rem = rem.numerical_approx(digits=3) lmfdb_link = LMFDB_NF_URL_TRUNK.format(label) lmfdb_link_latex = r"\href{{{the_link}}}{{{my_text}}}".format( diff --git a/requirements-dev.txt b/requirements-dev.txt index afe1b6a..b34c811 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with python 3.9 +# This file is autogenerated by pip-compile with python 3.10 # To update, run: # # pip-compile requirements-dev.in @@ -73,7 +73,7 @@ pyflakes==2.5.0 # flake8 pylint==2.15.5 # via -r requirements-dev.in -pyparsing==3.0.6 +pyparsing==3.0.9 # via # -c requirements.txt # packaging @@ -100,16 +100,13 @@ tomli==2.0.1 # pytest tomlkit==0.11.6 # via pylint -typing-extensions==4.0.1 +typing-extensions==4.4.0 # via # -c requirements.txt - # astroid - # black # mypy - # pylint vulture==2.6 # via -r requirements-dev.in -wrapt==1.13.3 +wrapt==1.14.1 # via # -c requirements.txt # astroid diff --git a/requirements.txt b/requirements.txt index 85227ed..18c54f5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with python 3.9 +# This file is autogenerated by pip-compile with python 3.10 # To update, run: # # pip-compile requirements.in diff --git a/sage_code/character_enumeration.py b/sage_code/character_enumeration.py index 3518c1c..8f771ad 100644 --- a/sage_code/character_enumeration.py +++ b/sage_code/character_enumeration.py @@ -45,15 +45,15 @@ def filter_possible_values(possible_values_list, q, residue_class_degree, prime_field): output = [] - fq = q ** residue_class_degree + fq = q**residue_class_degree for c in possible_values_list: - if c ** 2 == prime_field(1): + if c**2 == prime_field(1): output.append(c) - elif c ** 2 == prime_field(fq ** 2): + elif c**2 == prime_field(fq**2): output.append(c) else: possible_mid_coeffs = lifts_in_hasse_range(fq, c + prime_field(fq) / c) - possible_weil_polys = [x ** 2 + a * x + fq for a in possible_mid_coeffs] + possible_weil_polys = [x**2 + a * x + fq for a in possible_mid_coeffs] elliptic_weil_polys = [ f @@ -87,13 +87,13 @@ def get_possible_vals_at_gens(gens_info, eps, embeddings, residue_field, prime_f q = class_gp_gen.smallest_integer() e = class_gp_gen.residue_class_degree() filtered_values = filter_possible_values(possible_values, q, e, prime_field) - output[class_gp_gen] = list({x ** 12 for x in filtered_values}) + output[class_gp_gen] = list({x**12 for x in filtered_values}) return output def tuple_exp(tup, exp_tup): - return tuple((t ** e for t, e in zip(tup, exp_tup))) + return tuple((t**e for t, e in zip(tup, exp_tup))) def lifts_in_hasse_range(fq, res_class): @@ -114,13 +114,13 @@ def lifts_in_hasse_range(fq, res_class): low_run = centered_lift - while low_run ** 2 <= fq4: + while low_run**2 <= fq4: output.append(low_run) low_run = low_run - p high_run = centered_lift + p - while high_run ** 2 <= fq4: + while high_run**2 <= fq4: output.append(high_run) high_run = high_run + p @@ -224,7 +224,7 @@ def final_filter( # Check that these exponents correspond to the ideals in # my_gens_ideals in the correct order sanity_check = prod( - [Q ** a for Q, a in zip(my_gens_ideals, exponents_in_class_group)] + [Q**a for Q, a in zip(my_gens_ideals, exponents_in_class_group)] ) assert C_K(sanity_check) == C_K(q) @@ -285,7 +285,7 @@ def character_enumeration_filter( gens_info = {} for q in my_gens_ideals: q_order = C_K(q).multiplicative_order() - alphas = (q ** q_order).gens_reduced() + alphas = (q**q_order).gens_reduced() assert len(alphas) == 1 alpha = alphas[0] gens_info[q] = (q_order, alpha) @@ -314,7 +314,7 @@ def character_enumeration_filter( # stop condition: # 4sqrt(Nm(q)) > 2p # Nm(q) > (p/2)**2 - stop = (p ** 2 // 4) + 1 + stop = (p**2 // 4) + 1 if enumeration_bound: stop = min(stop, enumeration_bound) aux_primes = primes_iter(K, stop) diff --git a/sage_code/common_utils.py b/sage_code/common_utils.py index 0738bb1..822e8c6 100644 --- a/sage_code/common_utils.py +++ b/sage_code/common_utils.py @@ -76,12 +76,12 @@ def get_weil_polys(F): """ q = F.characteristic() a = F.degree() - weil_polys = R.weil_polynomials(2, q ** a) + weil_polys = R.weil_polynomials(2, q**a) return [f for f in weil_polys if weil_polynomial_is_elliptic(f, q, a)] def get_ordinary_weil_polys_from_values(q, a): - weil_polys = R.weil_polynomials(2, q ** a) + weil_polys = R.weil_polynomials(2, q**a) return [f for f in weil_polys if f[1] % q != 0] @@ -129,7 +129,7 @@ def to_A(g): def from_A(a): assert a in A - return C_K.prod(gi ** ei for gi, ei in zip(C_K.gens(), a)) + return C_K.prod(gi**ei for gi, ei in zip(C_K.gens(), a)) return A, to_A, from_A diff --git a/sage_code/frobenius_polynomials.py b/sage_code/frobenius_polynomials.py index 939efcc..96aede2 100644 --- a/sage_code/frobenius_polynomials.py +++ b/sage_code/frobenius_polynomials.py @@ -114,7 +114,7 @@ def semi_stable_frobenius_polynomial( x = polygen(K) u = uniformizer(q) e = semistable_ramification(local_data) - L = K.extension(x ** e - t * u, "a") + L = K.extension(x**e - t * u, "a") EL = E.change_ring(L) qL = L.primes_above(q)[0] Ebar = reduction(EL, qL) @@ -146,4 +146,4 @@ def isogeny_character_values_12( E: EllipticCurve_number_field, p: Integer, q: NumberFieldFractionalIdeal ): values = isogeny_character_values(E, p, q) - return [a ** 12 for a in values] + return [a**12 for a in values] diff --git a/sage_code/generic.py b/sage_code/generic.py index 53aa07a..30ac2fd 100644 --- a/sage_code/generic.py +++ b/sage_code/generic.py @@ -210,7 +210,7 @@ def get_aux_primes(K, norm_bound, C_K, h_K, contains_imaginary_quadratic): def alpha_eps_beta_bound(alpha_eps, beta, nm_q_pow_12hq): - C_mat = alpha_eps ** 2 - alpha_eps * beta.trace() + nm_q_pow_12hq + C_mat = alpha_eps**2 - alpha_eps * beta.trace() + nm_q_pow_12hq N = ZZ(C_mat.det()) return N @@ -248,7 +248,7 @@ def ABC_integers( multiplicative_bounds = {} nm_q = ZZ(frak_q.absolute_norm()) - alphas = (frak_q ** q_class_group_order).gens_reduced() + alphas = (frak_q**q_class_group_order).gens_reduced() assert len(alphas) == 1, "q^q_class_group_order not principal, which is very bad" alpha = alphas[0] output_dict = {} diff --git a/sage_code/type_one_primes.py b/sage_code/type_one_primes.py index b9ba910..13cf325 100644 --- a/sage_code/type_one_primes.py +++ b/sage_code/type_one_primes.py @@ -287,7 +287,7 @@ def apply_formal_immersion_at_2( def get_N(frob_poly, nm_q, exponent): """Helper method for computing Type 1 primes""" beta = Matrix.companion(frob_poly) ** exponent - N = ZZ(1 - beta.trace() + nm_q ** exponent) + N = ZZ(1 - beta.trace() + nm_q**exponent) return N diff --git a/sage_code/type_two_primes.py b/sage_code/type_two_primes.py index 83d00c0..83d3bf5 100644 --- a/sage_code/type_two_primes.py +++ b/sage_code/type_two_primes.py @@ -50,7 +50,7 @@ logger = logging.getLogger(__name__) -GENERIC_UPPER_BOUND = 10 ** 30 +GENERIC_UPPER_BOUND = 10**30 def LLS(p): @@ -68,7 +68,7 @@ def get_type_2_uniform_bound(ecdb_type): else: raise ValueError("argument must be LSS or BS") - f = BOUND_TERM ** 6 + BOUND_TERM ** 3 + 1 - x + f = BOUND_TERM**6 + BOUND_TERM**3 + 1 - x try: bound = find_root(f, 1000, GENERIC_UPPER_BOUND) @@ -123,8 +123,8 @@ def satisfies_condition_CC(K, p): for q in prime_range(p / 4): for frak_q in K.primes_above(q): f = frak_q.residue_class_degree() - if f % 2 == 1 and q ** f < p / 4: - if (q ** (2 * f) + q ** f + 1) % p != 0: + if f % 2 == 1 and q**f < p / 4: + if (q ** (2 * f) + q**f + 1) % p != 0: if legendre_symbol(q, p) == 1: # i.e. not inert return False return True @@ -141,7 +141,7 @@ def satisfies_condition_CC_uniform(possible_odd_f, p): return False for q in prime_range((p / 4) ^ (1 / max(possible_odd_f)) + 1): if legendre_symbol(q, p) == 1: - if all((q ** (2 * f) + q ** f + 1) % p != 0 for f in possible_odd_f): + if all((q ** (2 * f) + q**f + 1) % p != 0 for f in possible_odd_f): return False return True diff --git a/sage_code/weeding.py b/sage_code/weeding.py index 74b05e2..05fbb95 100644 --- a/sage_code/weeding.py +++ b/sage_code/weeding.py @@ -39,6 +39,7 @@ QuadraticField, companion_matrix, gcd, + legendre_symbol, oo, parent, prime_range, @@ -59,16 +60,21 @@ def oezman_sieve(p, N): """If p is unramified in Q(sqrt(-N)) this always returns True. - Otherwise returns True iff p is in S_N or . Only makes sense if p ramifies in K""" + Otherwise returns True iff p is in S_N. Only makes sense if p ramifies in K. + Also assumes that N is prime (for the time being). + """ + assert N.is_prime() and N > 2 M = QuadraticField(-N) if p.divides(M.discriminant()): return True pp = (M * p).factor()[0][0] - C_M = M.class_group() - if C_M(pp).order() == 1: - return True + if pp.is_principal(): + if N % 4 == 3: + return True + if legendre_symbol(p, N) == 1: + return True return False @@ -77,10 +83,8 @@ def najman_trbovic_filter(unram_primes, ramified_primes): """Return True if a possible isogeny prime can be removed via Theorem 2.13 of the paper of Najman-Trbovic""" - absurd_intersection = set(unram_primes).intersection( - set(ramified_primes) - ) - return (len(absurd_intersection) > 0) + absurd_intersection = set(unram_primes).intersection(set(ramified_primes)) + return len(absurd_intersection) > 0 def get_dirichlet_character(K): @@ -119,7 +123,7 @@ def is_torsion_same(p, K, chi, B=30, uniform=False): for q, i in frob_poly_data: frob_pol_q = J0_min.frobenius_polynomial(q) frob_mat = companion_matrix(frob_pol_q) - point_counts.append((frob_mat ** i).charpoly()(1)) + point_counts.append((frob_mat**i).charpoly()(1)) # Recall that the rational torsion on J0(p) is entirely contained in # the minus part (theorem of Mazur), so checking no-growth of torsion diff --git a/tests/fast_tests/test_character_enumeration.py b/tests/fast_tests/test_character_enumeration.py index 887fe0f..465f80a 100644 --- a/tests/fast_tests/test_character_enumeration.py +++ b/tests/fast_tests/test_character_enumeration.py @@ -62,10 +62,10 @@ def test_filter_possible_values(possible_values_list, q, e, prime, result): [ (11, GF(3)(0), [0, -3, -6, 3, 6]), # make sure we include +/-2sqrt(fq) but not +/-(2sqrt(fq)+1), - (145757 ** 2, GF(357686312646216567629137)(2 * 145757), [2 * 145757]), - (145757 ** 2, GF(357686312646216567629137)(-2 * 145757), [-2 * 145757]), - (145757 ** 2, GF(357686312646216567629137)(2 * 145757 + 1), []), - (145757 ** 2, GF(357686312646216567629137)(-2 * 145757 - 1), []), + (145757**2, GF(357686312646216567629137)(2 * 145757), [2 * 145757]), + (145757**2, GF(357686312646216567629137)(-2 * 145757), [-2 * 145757]), + (145757**2, GF(357686312646216567629137)(2 * 145757 + 1), []), + (145757**2, GF(357686312646216567629137)(-2 * 145757 - 1), []), ], ) def test_lifts_in_hasse_range(fq, res_class, expected_range): @@ -79,12 +79,12 @@ def test_lifts_in_hasse_range(fq, res_class, expected_range): @pytest.mark.parametrize( "f, q", [ - (x ** 2 - x + 1007, 13), - (x ** 2 - x + 1007, 17), - (x ** 2 - x + 1007, 19), - (x ** 2 - 11 * 17 * 9011 * 23629, 17), - (x ** 2 - 11 * 17 * 9011 * 23629, 47), - (x ** 2 - 11 * 17 * 9011 * 23629, 89), + (x**2 - x + 1007, 13), + (x**2 - x + 1007, 17), + (x**2 - x + 1007, 19), + (x**2 - 11 * 17 * 9011 * 23629, 17), + (x**2 - 11 * 17 * 9011 * 23629, 47), + (x**2 - 11 * 17 * 9011 * 23629, 89), ], ) @pytest.mark.skip(reason="Only for profiling putative faster solution") @@ -105,9 +105,9 @@ def test_ideal_log_relation_prime_gens(f, q): exponents = C_K(qq).exponents() t = qq.ideal_log_relation() - alpha_new = t * prod([(relation ** e) for relation, e in zip(relations, exponents)]) + alpha_new = t * prod([(relation**e) for relation, e in zip(relations, exponents)]) - sanity_check = prod([Q ** a for Q, a in zip(prime_gens, exponents)]) + sanity_check = prod([Q**a for Q, a in zip(prime_gens, exponents)]) assert C_K(sanity_check) == C_K(qq) the_principal_ideal = qq * prod([Q ** (-a) for Q, a in zip(prime_gens, exponents)]) diff --git a/tests/fast_tests/test_common_utils.py b/tests/fast_tests/test_common_utils.py index f985287..cb89114 100644 --- a/tests/fast_tests/test_common_utils.py +++ b/tests/fast_tests/test_common_utils.py @@ -36,8 +36,8 @@ x = polygen(QQ) test_cases = [ - (x ** 5 - x ** 4 + 2 * x ** 3 - 4 * x ** 2 + x - 1, 20), - (x ** 6 - 2 * x ** 5 + 6 * x ** 4 + 22 * x ** 3 + 41 * x ** 2 + 48 * x + 36, 6), + (x**5 - x**4 + 2 * x**3 - 4 * x**2 + x - 1, 20), + (x**6 - 2 * x**5 + 6 * x**4 + 22 * x**3 + 41 * x**2 + 48 * x + 36, 6), ] diff --git a/tests/fast_tests/test_frobenius_polynomials.py b/tests/fast_tests/test_frobenius_polynomials.py index 7264b56..f2a7cbd 100644 --- a/tests/fast_tests/test_frobenius_polynomials.py +++ b/tests/fast_tests/test_frobenius_polynomials.py @@ -39,7 +39,7 @@ K = QuadraticField(-127, "D") D = K.gen(0) -j = 20 * (3 * (-26670989 - 15471309 * D) / 2 ** 26) ** 3 +j = 20 * (3 * (-26670989 - 15471309 * D) / 2**26) ** 3 # this is one of the curves from the Gonzaléz, Lario, and Quer article E = EllipticCurve_from_j(j) @@ -59,8 +59,8 @@ def test_semi_stable_frobenius_polynomial_t(): x = polygen(QQ) K = QQ.extension(x - 1, "one") E = EllipticCurve(K, [49, 343]) - assert E.discriminant() == -(2 ** 4) * 31 * 7 ** 6 - assert E.j_invariant() == K(2 ** 8 * 3 ** 3) / 31 + assert E.discriminant() == -(2**4) * 31 * 7**6 + assert E.j_invariant() == K(2**8 * 3**3) / 31 f1 = semi_stable_frobenius_polynomial(E, K * 7, 1) f2 = semi_stable_frobenius_polynomial(E, K * 7, -1)(x=-x) assert f1 == f2 @@ -72,7 +72,7 @@ def test_semi_stable_frobenius_polynomial_t(): (2, {1, 8}), (3, {1}), (7, {72}), - (11, {13 ** 12 % 73, 57 ** 12 % 73}), + (11, {13**12 % 73, 57**12 % 73}), ], ) def test_isogeny_character_values_12(p, values): diff --git a/tests/fast_tests/test_type_three_not_momose.py b/tests/fast_tests/test_type_three_not_momose.py index a2d2b5b..24740eb 100644 --- a/tests/fast_tests/test_type_three_not_momose.py +++ b/tests/fast_tests/test_type_three_not_momose.py @@ -41,10 +41,10 @@ x = polygen(QQ) test_cases = [ - (x ** 2 + 1, 1, 1), - (x ** 3 + 3 * x ** 2 + 1, 1, 0), - (x ** 4 - 9 * x ** 2 - 10 * x + 50, 5, 1), - (x ** 4 - x ** 3 - x ** 2 - 2 * x + 4, 1, 2), + (x**2 + 1, 1, 1), + (x**3 + 3 * x**2 + 1, 1, 0), + (x**4 - 9 * x**2 - 10 * x + 50, 5, 1), + (x**4 - x**3 - x**2 - 2 * x + 4, 1, 2), ] diff --git a/tests/fast_tests/test_type_two_primes.py b/tests/fast_tests/test_type_two_primes.py index 8f8ee71..62235b9 100644 --- a/tests/fast_tests/test_type_two_primes.py +++ b/tests/fast_tests/test_type_two_primes.py @@ -40,9 +40,9 @@ x = polygen(QQ) test_cases = [ - (x ** 2 + 1, 1), - (x ** 3 + 3 * x ** 2 + 1, 1), - (x ** 4 - 9 * x ** 2 - 10 * x + 50, 5), + (x**2 + 1, 1), + (x**3 + 3 * x**2 + 1, 1), + (x**4 - 9 * x**2 - 10 * x + 50, 5), ] diff --git a/tests/performance_tests/test_is_coprime.py b/tests/performance_tests/test_is_coprime.py index 1c3cf18..31da585 100644 --- a/tests/performance_tests/test_is_coprime.py +++ b/tests/performance_tests/test_is_coprime.py @@ -34,7 +34,7 @@ from sage.rings.polynomial.polynomial_ring import polygen x = polygen(QQ) -K = NumberField(x ** 2 - 11 * 17 * 9011 * 23629, "b") +K = NumberField(x**2 - 11 * 17 * 9011 * 23629, "b") test_cases_true = [(K, int(q), q, False) for q in prime_range(1000)] test_cases_false = [(K, int(q), next_prime(q), True) for q in prime_range(1000)] diff --git a/tests/slow_tests/test_cubic_isogeny_primes.py b/tests/slow_tests/test_cubic_isogeny_primes.py index c24e2f9..046dfb7 100644 --- a/tests/slow_tests/test_cubic_isogeny_primes.py +++ b/tests/slow_tests/test_cubic_isogeny_primes.py @@ -61,22 +61,22 @@ x = polygen(QQ) test_cases = [ - (x ** 3 - x ** 2 + 1, {23}, set()), - (x ** 3 + x - 1, {31}, set()), - (x ** 3 + 2 * x - 1, {59}, set()), - (x ** 3 - x ** 2 + x - 2, {83}, set()), - (x ** 3 - x ** 2 + 3 * x - 2, {107}, set()), - (x ** 3 - x ** 2 + x + 2, {139}, set()), - (x ** 3 - 2 * x - 3, {211}, set()), - (x ** 3 + 4 * x - 1, {283}, set()), - (x ** 3 - x ** 2 + 3 * x + 2, {307}, set()), - (x ** 3 - x ** 2 + 3 * x - 4, {331}, set()), - (x ** 3 - x ** 2 + x - 4, {379}, set()), - (x ** 3 + 4 * x - 3, {499}, set()), - (x ** 3 - x ** 2 - 3 * x - 4, {547}, set()), - (x ** 3 - 2 * x - 5, {643}, set()), - (x ** 3 - x ** 2 + 2 * x - 12, {883}, set()), - (x ** 3 - x ** 2 - 7 * x + 12, {907}, set()), + (x**3 - x**2 + 1, {23}, set()), + (x**3 + x - 1, {31}, set()), + (x**3 + 2 * x - 1, {59}, set()), + (x**3 - x**2 + x - 2, {83}, set()), + (x**3 - x**2 + 3 * x - 2, {107}, set()), + (x**3 - x**2 + x + 2, {139}, set()), + (x**3 - 2 * x - 3, {211}, set()), + (x**3 + 4 * x - 1, {283}, set()), + (x**3 - x**2 + 3 * x + 2, {307}, set()), + (x**3 - x**2 + 3 * x - 4, {331}, set()), + (x**3 - x**2 + x - 4, {379}, set()), + (x**3 + 4 * x - 3, {499}, set()), + (x**3 - x**2 - 3 * x - 4, {547}, set()), + (x**3 - 2 * x - 5, {643}, set()), + (x**3 - x**2 + 2 * x - 12, {883}, set()), + (x**3 - x**2 - 7 * x + 12, {907}, set()), ] bad_cubic_formal_immersion_primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 43, 73} diff --git a/tests/slow_tests/test_galois_isogeny_primes.py b/tests/slow_tests/test_galois_isogeny_primes.py index 5205bae..cc163b3 100644 --- a/tests/slow_tests/test_galois_isogeny_primes.py +++ b/tests/slow_tests/test_galois_isogeny_primes.py @@ -54,17 +54,17 @@ x = polygen(QQ) test_cases = [ ( - x ** 4 - x ** 3 + x ** 2 - x + 1, + x**4 - x**3 + x**2 - x + 1, set(), {23, 29, 31, 41, 47, 53, 61, 73, 97, 103}, ), ( - x ** 5 - x ** 4 - 4 * x ** 3 + 3 * x ** 2 + 3 * x - 1, + x**5 - x**4 - 4 * x**3 + 3 * x**2 + 3 * x - 1, set(), {23, 29, 31, 41, 47, 53, 59, 61, 71, 73, 89, 97, 109, 131}, ), ( - x ** 6 + 13 * x ** 4 + 26 * x ** 2 + 13, + x**6 + 13 * x**4 + 26 * x**2 + 13, set(), set( [23, 29, 31, 41, 47, 53, 59, 61, 73, 79, 83, 97, 103, 109, 113, 131] @@ -72,7 +72,7 @@ ), ), ( - x ** 6 - 2 * x ** 5 + 6 * x ** 4 + 22 * x ** 3 + 41 * x ** 2 + 48 * x + 36, + x**6 - 2 * x**5 + 6 * x**4 + 22 * x**3 + 41 * x**2 + 48 * x + 36, set(), set( [23, 29, 31, 41, 47, 53, 59, 61, 71, 73, 79, 83, 97, 103, 109, 113] @@ -80,7 +80,7 @@ ), ), ( - x ** 6 - 3 * x ** 5 - 2 * x ** 4 + 9 * x ** 3 - 5 * x + 1, + x**6 - 3 * x**5 - 2 * x**4 + 9 * x**3 - 5 * x + 1, set(), set( [23, 29, 31, 41, 47, 53, 59, 61, 71, 73, 79, 83, 97, 103, 107, 109, 113] @@ -88,8 +88,8 @@ ), ), ( - (x ** 7 - x ** 6 - 12 * x ** 5 + 7 * x ** 4) - + (28 * x ** 3 - 14 * x ** 2 - 9 * x - 1), + (x**7 - x**6 - 12 * x**5 + 7 * x**4) + + (28 * x**3 - 14 * x**2 - 9 * x - 1), set(), set( [23, 29, 31, 41, 47, 53, 59, 61, 71, 73, 79, 83, 89, 97, 101, 103, 107]