Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
r""" Guruswami-Sudan utility methods
AUTHORS:
- Johan S. R. Nielsen, original implementation (see [Nie]_ for details) - David Lucas, ported the original implementation in Sage """
#***************************************************************************** # Copyright (C) 2015 David Lucas <david.lucas@inria.fr> # 2015 Johan S. R. Nielsen <jsrn@jsrn.dk> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # http://www.gnu.org/licenses/ #*****************************************************************************
r""" Returns ``p`` as a list of its coefficients of length ``len``.
INPUT:
- ``p`` -- a polynomial
- ``len`` -- an integer. If ``len`` is smaller than the degree of ``p``, the returned list will be of size degree of ``p``, else it will be of size ``len``.
EXAMPLES::
sage: from sage.coding.guruswami_sudan.utils import polynomial_to_list sage: F.<x> = GF(41)[] sage: p = 9*x^2 + 8*x + 37 sage: polynomial_to_list(p, 4) [37, 8, 9, 0] """
r""" Returns the Johnson-radius for the code length `n` and the minimum distance `d`.
The Johnson radius is defined as `n - \sqrt(n(n-d))`.
INPUT:
- ``n`` -- an integer, the length of the code - ``d`` -- an integer, the minimum distance of the code
EXAMPLES::
sage: sage.coding.guruswami_sudan.utils.johnson_radius(250, 181) -5*sqrt(690) + 250 """
r""" Returns the least integer greater than ``x``.
EXAMPLES::
sage: from sage.coding.guruswami_sudan.utils import ligt sage: ligt(41) 42
It works with any type of numbers (not only integers)::
sage: ligt(41.041) 42 """
r""" Returns the greatest integer smaller than ``x``.
EXAMPLES::
sage: from sage.coding.guruswami_sudan.utils import gilt sage: gilt(43) 42
It works with any type of numbers (not only integers)::
sage: gilt(43.041) 43 """ else:
r""" Returns the greatest integer range `[i_1, i_2]` such that `i_1 > x_1` and `i_2 < x_2` where `x_1, x_2` are the two zeroes of the equation in `x`: `ax^2+bx+c=0`.
If there is no real solution to the equation, it returns an empty range with negative coefficients.
INPUT:
- ``a``, ``b`` and ``c`` -- coefficients of a second degree equation, ``a`` being the coefficient of the higher degree term.
EXAMPLES::
sage: from sage.coding.guruswami_sudan.utils import solve_degree2_to_integer_range sage: solve_degree2_to_integer_range(1, -5, 1) (1, 4)
If there is no real solution::
sage: solve_degree2_to_integer_range(50, 5, 42) (-2, -1) """ else:
r""" Returns the greatest degree among the entries of the polynomial vector `v`.
INPUT:
- ``v`` -- a vector of polynomials.
- ``shifts`` -- (default: ``None``) a list of integer shifts to consider ``v`` under, i.e. compute `\max(\deg v_i + s_i)`, where `s_1,\ldots, s_n` is the list of shifts.
If ``None``, all shifts are considered as ``0``.
EXAMPLES::
sage: from sage.coding.guruswami_sudan.utils import _degree_of_vector sage: F.<x> = GF(7)[] sage: v = vector(F, [0, 1, x, x^2]) sage: _degree_of_vector(v) 2 sage: _degree_of_vector(v, shifts=[10, 1, 0, -3]) 1 """ else: -1 |