v0.3.0¶
Released December 9, 2022
Breaking changes¶
Increased minimum NumPy version to 1.21.0. (#441)
Increased minimum Numba version to 0.55.0 (#441)
Modified
galois.GF()
andgalois.Field()
so that keyword argumentsirreducible_poly
,primitive_element
,verify
,compile
, andrepr
may no longer be passed as positional arguments. (#442)
Changes¶
Added a
galois.GF(p, m)
call signature in addition togalois.GF(p**m)
. This also applies togalois.Field()
. Separately specifying \(p\) and \(m\) eliminates the need to factor the order \(p^m\) in very large finite fields. (#442)>>> import galois # This is faster than galois.GF(2**409) >>> GF = galois.GF(2, 409) >>> print(GF.properties) Galois Field: name: GF(2^409) characteristic: 2 degree: 409 order: 1322111937580497197903830616065542079656809365928562438569297590548811582472622691650378420879430569695182424050046716608512 irreducible_poly: x^409 + x^7 + x^5 + x^3 + 1 is_primitive_poly: True primitive_element: x
Optimized matrix multiplication by parallelizing across multiple cores. (#440)
In [1]: import galois In [2]: GF = galois.GF(3**5) In [3]: A = GF.Random((300, 400), seed=1) In [4]: B = GF.Random((400, 500), seed=2) # v0.2.0 In [5]: %timeit A @ B 664 ms ± 3.31 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) # v0.3.0 In [5]: %timeit A @ B 79.1 ms ± 7.32 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Optimized polynomial evaluation by parallelizing across multiple cores. (#440)
In [1]: import galois In [2]: GF = galois.GF(3**5) In [3]: f = galois.Poly.Random(100, seed=1, field=GF) In [4]: x = GF.Random(100_000, seed=1) # v0.2.0 In [5]: %timeit f(x) 776 ms ± 2.12 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) # v0.3.0 In [5]: %timeit f(x) 13.9 ms ± 2.51 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Fixed an occasional arithmetic type error in binary extension fields \(\mathrm{GF}(2^m)\) when using the built-in
np.bitwise_xor()
. (#441)
Contributors¶
Matt Hostetter (@mhostetter)