def init(message, num_bits, generator=None, dest_message=None): x = symbols('x') origin_message = np.array(list(message), dtype=int) if dest_message is not None: dest_message = np.array(list(dest_message), dtype=int) if generator is not None: generator = np.array(list(generator), dtype=int) gen_dest_message = generate_error(origin_message, num_bits) if generator is None: origin_poly = Poly.from_list(origin_message, x) dest_poly = Poly.from_list(gen_dest_message, x) error_poly = Poly.sub(origin_poly, dest_poly) factorized_error = Poly.factor(error_poly) generator_poly = get_generator(factorized_error) generator = np.array(generator_poly.all_coeffs()) return origin_message, dest_message, generator
def construct_matrice(polynomial, p): q = [] n = len(polynomial) - 1 for deg in range(0, n): x = Symbol('x') r = rem(x**(p * deg), Poly.from_list(polynomial, gens=x)) r_rev = get_coeffs(r, p, n) r_rev.reverse() r_rev[deg] -= 1 r_rev = field(r_rev, p) q.append(r_rev) return q
def coeffs2poly(coeffs): """ Given a list of coefficients (mod 2), most significant coefficient first, return a sympy polynomial. Example: >>> coeffs2poly([1, 0, 1]) Poly(x**2 + 1, x, modulus=2) >>> coeffs2poly([1, 0]) Poly(x, x, modulus=2) >>> coeffs2poly([0, 1]) Poly(1, x, modulus=2) """ return Poly.from_list(coeffs, gens=x, domain='GF(2)')
def poly( rep, *gens, **args ): return Poly.from_list( rep, *gens, **args )