bench_galoispolys.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. """Benchmarks for polynomials over Galois fields. """
  2. from sympy.polys.galoistools import gf_from_dict, gf_factor_sqf
  3. from sympy.polys.domains import ZZ
  4. from sympy.core.numbers import pi
  5. from sympy.ntheory.generate import nextprime
  6. def gathen_poly(n, p, K):
  7. return gf_from_dict({n: K.one, 1: K.one, 0: K.one}, p, K)
  8. def shoup_poly(n, p, K):
  9. f = [K.one] * (n + 1)
  10. for i in range(1, n + 1):
  11. f[i] = (f[i - 1]**2 + K.one) % p
  12. return f
  13. def genprime(n, K):
  14. return K(nextprime(int((2**n * pi).evalf())))
  15. p_10 = genprime(10, ZZ)
  16. f_10 = gathen_poly(10, p_10, ZZ)
  17. p_20 = genprime(20, ZZ)
  18. f_20 = gathen_poly(20, p_20, ZZ)
  19. def timeit_gathen_poly_f10_zassenhaus():
  20. gf_factor_sqf(f_10, p_10, ZZ, method='zassenhaus')
  21. def timeit_gathen_poly_f10_shoup():
  22. gf_factor_sqf(f_10, p_10, ZZ, method='shoup')
  23. def timeit_gathen_poly_f20_zassenhaus():
  24. gf_factor_sqf(f_20, p_20, ZZ, method='zassenhaus')
  25. def timeit_gathen_poly_f20_shoup():
  26. gf_factor_sqf(f_20, p_20, ZZ, method='shoup')
  27. P_08 = genprime(8, ZZ)
  28. F_10 = shoup_poly(10, P_08, ZZ)
  29. P_18 = genprime(18, ZZ)
  30. F_20 = shoup_poly(20, P_18, ZZ)
  31. def timeit_shoup_poly_F10_zassenhaus():
  32. gf_factor_sqf(F_10, P_08, ZZ, method='zassenhaus')
  33. def timeit_shoup_poly_F10_shoup():
  34. gf_factor_sqf(F_10, P_08, ZZ, method='shoup')
  35. def timeit_shoup_poly_F20_zassenhaus():
  36. gf_factor_sqf(F_20, P_18, ZZ, method='zassenhaus')
  37. def timeit_shoup_poly_F20_shoup():
  38. gf_factor_sqf(F_20, P_18, ZZ, method='shoup')