def __init__(self, prepoly, poly, prec, halt, print_mode, shift_seed, names): """ A capped relative representation of an eisenstein extension of Qp. INPUTS:: - prepoly -- The original polynomial defining the extension. This could be a polynomial with integer coefficients, for example, while poly has coefficients in Qp. - poly -- The polynomial with coefficients in self.base_ring() defining this extension. - prec -- The precision cap of this ring. - halt -- unused - print_mode -- A dictionary of print options. - shift_seed -- unused - names -- a 4-tuple, (variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name) EXAMPLES:: sage: R = Qp(3, 10000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3 sage: W.<w> = R.ext(f); W #indirect doctest Eisenstein Extension of 3-adic Field with capped relative precision 10000 in w defined by (1 + O(3^10000))*x^3 + (O(3^10001))*x^2 + (3^2 + O(3^10001))*x + (-3 + O(3^10001)) sage: W.precision_cap() 30000 sage: R.<p> = Qp(next_prime(10^30), 3, print_pos=False); S.<x> = ZZ[]; f = x^3 + p^2*x - p sage: W.<w> = R.ext(f); W.prime() 1000000000000000000000000000057 sage: W.precision_cap() 9 """ # Currently doesn't support polynomials with non-integral coefficients unram_prec = (prec + poly.degree() - 1) // poly.degree() ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**unram_prec) shift_poly = ntl_ZZ_pX([a.lift() for a in shift_seed.list()], shift_seed.base_ring().prime()**unram_prec) if unram_prec <= 30: self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), unram_prec, unram_prec, prec, True, ntl_poly, "small", "e", shift_poly) else: self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), 30, unram_prec, prec, True, ntl_poly, "big", "e", shift_poly) self._shift_seed = shift_seed self._pre_poly = prepoly EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, pAdicZZpXCRElement)
def __init__(self, prepoly, poly, prec, halt, print_mode, shift_seed, names): """ A fixed modulus representation of an eisenstein extension of Zp. INPUTS:: - prepoly -- The original polynomial defining the extension. This could be a polynomial with integer coefficients, for example, while poly has coefficients in Zp. - poly -- The polynomial with coefficients in self.base_ring() defining this extension. - prec -- The precision cap of this ring. - halt -- unused - print_mode -- A dictionary of print options. - shift_seed -- unused - names -- a 4-tuple, (variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name) EXAMPLES:: sage: R = ZpFM(3, 10000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3 sage: W.<w> = R.ext(f); W #indirect doctest Eisenstein Extension of 3-adic Ring of fixed modulus 3^10000 in w defined by (1 + O(3^10000))*x^3 + (3^2 + O(3^10000))*x + (-3 + 3^10000 + O(3^10000)) sage: W.precision_cap() 30000 sage: R.<p> = ZpFM(next_prime(10^30), 3, print_pos=False); S.<x> = ZZ[]; f = x^3 + p^2*x - p sage: W.<w> = R.ext(f); W.prime() 1000000000000000000000000000057 sage: W.precision_cap() 9 """ unram_prec = (prec + poly.degree() - 1) // poly.degree() ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**unram_prec) shift_poly = ntl_ZZ_pX([a.lift() for a in shift_seed.list()], shift_seed.base_ring().prime()**unram_prec) #print poly.base_ring().prime(), prec, poly.degree(), ntl_poly # deal with prec not a multiple of e better. self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), max(min(unram_prec - 1, 30), 1), unram_prec, prec, False, ntl_poly, "FM", "e", shift_poly) self._shift_seed = shift_seed self._pre_poly = prepoly EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, pAdicZZpXFMElement)
def __init__(self, prepoly, poly, prec, halt, print_mode, shift_seed, names, implementation='NTL'): """ A capped relative representation of an eisenstein extension of Qp. INPUT: - prepoly -- The original polynomial defining the extension. This could be a polynomial with integer coefficients, for example, while poly has coefficients in Qp. - poly -- The polynomial with coefficients in self.base_ring() defining this extension. - prec -- The precision cap of this ring. - halt -- unused - print_mode -- A dictionary of print options. - shift_seed -- unused - names -- a 4-tuple, (variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name) EXAMPLES:: sage: R = Qp(3, 10000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3 sage: W.<w> = R.ext(f); W #indirect doctest Eisenstein Extension of 3-adic Field with capped relative precision 10000 in w defined by (1 + O(3^10000))*x^3 + (O(3^10001))*x^2 + (3^2 + O(3^10001))*x + (-3 + O(3^10001)) sage: W.precision_cap() 30000 sage: R.<p> = Qp(next_prime(10^30), 3, print_pos=False); S.<x> = ZZ[]; f = x^3 + p^2*x - p sage: W.<w> = R.ext(f); W.prime() 1000000000000000000000000000057 sage: W.precision_cap() 9 """ # Currently doesn't support polynomials with non-integral coefficients unram_prec = (prec + poly.degree() - 1) // poly.degree() ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**unram_prec) shift_poly = ntl_ZZ_pX([a.lift() for a in shift_seed.list()], shift_seed.base_ring().prime()**unram_prec) if unram_prec <= 30: self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), unram_prec, unram_prec, prec, True, ntl_poly, "small", "e", shift_poly) else: self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), 30, unram_prec, prec, True, ntl_poly, "big", "e", shift_poly) self._shift_seed = shift_seed self._pre_poly = prepoly self._implementation = implementation EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, pAdicZZpXCRElement)
def __init__(self, prepoly, poly, prec, halt, print_mode, shift_seed, names, implementation='NTL'): """ A fixed modulus representation of an eisenstein extension of Zp. INPUT: - prepoly -- The original polynomial defining the extension. This could be a polynomial with integer coefficients, for example, while poly has coefficients in Zp. - poly -- The polynomial with coefficients in self.base_ring() defining this extension. - prec -- The precision cap of this ring. - halt -- unused - print_mode -- A dictionary of print options. - shift_seed -- unused - names -- a 4-tuple, (variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name) EXAMPLES:: sage: R = ZpFM(3, 10000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3 sage: W.<w> = R.ext(f); W #indirect doctest Eisenstein Extension of 3-adic Ring of fixed modulus 3^10000 in w defined by (1 + O(3^10000))*x^3 + (O(3^10000))*x^2 + (3^2 + O(3^10000))*x + (-3 + 3^10000 + O(3^10000)) sage: W.precision_cap() 30000 sage: R.<p> = ZpFM(next_prime(10^30), 3, print_pos=False); S.<x> = ZZ[]; f = x^3 + p^2*x - p sage: W.<w> = R.ext(f); W.prime() 1000000000000000000000000000057 sage: W.precision_cap() 9 """ unram_prec = (prec + poly.degree() - 1) // poly.degree() ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**unram_prec) shift_poly = ntl_ZZ_pX([a.lift() for a in shift_seed.list()], shift_seed.base_ring().prime()**unram_prec) #print poly.base_ring().prime(), prec, poly.degree(), ntl_poly # deal with prec not a multiple of e better. self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), max(min(unram_prec - 1, 30), 1), unram_prec, prec, False, ntl_poly, "FM", "e", shift_poly) self._shift_seed = shift_seed self._pre_poly = prepoly self._implementation = implementation EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, pAdicZZpXFMElement)