Exemplo n.º 1
0
Arquivo: modsym.py Projeto: Habli/OMS
    def _find_alpha(self, p, k, M=None, ap=None, new_base_ring=None, ordinary=True, check=True, find_extraprec=True):
        """
        Finds `alpha`, a `U_p` eigenvalue, which is found as a root of
        the polynomial `x^2 - ap * x + p^(k+1)`.
        
        INPUT:

        - ``p`` -- prime
        - ``k`` -- Pollack-Stevens weight
        - ``M`` -- precision (default = None) of `Q_p`
        - ``ap`` -- Hecke eigenvalue at p (default = None)
        - ``new_base_ring`` -- field of definition of `alpha` (default = None)
        - ``ordinary`` -- True if the prime is ordinary (default = True)
        - ``check`` -- check to see if the prime is ordinary (default = True)
        - ``find_extraprec`` -- setting this to True finds extra precision (default = True)

        OUTPUT:

        - ``alpha`` --  `U_p` eigenvalue
        - ``new_base_ring`` -- field of definition of `alpha` with precision at least `newM`
        - ``newM`` -- new precision
        - ``eisenloss`` -- loss of precision
        - ``q`` -- a prime not equal to p which was used to find extra precision
        - ``aq`` -- the Hecke eigenvalue `aq` corresponding to `q`

        EXAMPLES::

            sage: from sage.modular.pollack_stevens.space import ps_modsym_from_elliptic_curve
            sage: E = EllipticCurve('11a')
            sage: p = 5
            sage: M = 10
            sage: k = 0
            sage: phi = ps_modsym_from_elliptic_curve(E)
            sage: phi._find_alpha(p,k,M)
            (1 + 4*5 + 3*5^2 + 2*5^3 + 4*5^4 + 4*5^5 + 4*5^6 + 3*5^7 + 2*5^8 + 3*5^9 + 3*5^10 + 3*5^12 + O(5^13), 5-adic Field with capped relative precision 13, 12, 1, None, None)

        """
        if ap is None:
            ap = self.Tq_eigenvalue(p, check=check)
        if check and ap.valuation(p) > 0:
            raise ValueError("p is not ordinary")
        poly = PolynomialRing(ap.parent(), 'x')([p**(k+1), -ap, 1])
        if new_base_ring is None:
            # These should actually be completions of disc.parent()
            if p == 2:
                # is this the right precision adjustment for p=2?
                new_base_ring = Qp(2, M+1)
            else:
                new_base_ring = Qp(p, M)
            set_padicbase = True
        else:
            set_padicbase = False
        try:
            verbose("finding alpha: rooting %s in %s"%(poly, new_base_ring))
            (v0,e0),(v1,e1) = poly.roots(new_base_ring)
        except TypeError, ValueError:
            raise ValueError("new base ring must contain a root of x^2 - ap * x + p^(k+1)")
Exemplo n.º 2
0
 def _find_alpha(self, p, k, M=None, ap=None, new_base_ring=None, ordinary=True, check=True, find_extraprec=True):
     """
     """
     if ap is None:
         ap = self.Tq_eigenvalue(p, check=check)
     if check and ap.valuation(p) > 0:
         raise ValueError("p is not ordinary")
     poly = PolynomialRing(ap.parent(), 'x')([p**(k+1), -ap, 1])
     if new_base_ring is None:
         # These should actually be completions of disc.parent()
         if p == 2:
             # is this the right precision adjustment for p=2?
             new_base_ring = Qp(2, M+1)
         else:
             new_base_ring = Qp(p, M)
         set_padicbase = True
     else:
         set_padicbase = False
     try:
         verbose("finding alpha: rooting %s in %s"%(poly, new_base_ring))
         (v0,e0),(v1,e1) = poly.roots(new_base_ring)
     except TypeError, ValueError:
         raise ValueError("new base ring must contain a root of x^2 - ap * x + p^(k+1)")