def check_prime(K,P): r""" Function to check that `P` determines a prime of `K`, and return that ideal. INPUT: - ``K`` -- a number field (including `\QQ`). - ``P`` -- an element of ``K`` or a (fractional) ideal of ``K``. OUTPUT: - If ``K`` is `\QQ`: the prime integer equal to or which generates `P`. - If ``K`` is not `\QQ`: the prime ideal equal to or generated by `P`. .. note:: If `P` is not a prime and does not generate a prime, a TypeError is raised. EXAMPLES:: sage: from sage.schemes.elliptic_curves.ell_local_data import check_prime sage: check_prime(QQ,3) 3 sage: check_prime(QQ,ZZ.ideal(31)) 31 sage: K.<a>=NumberField(x^2-5) sage: check_prime(K,a) Fractional ideal (a) sage: check_prime(K,a+1) Fractional ideal (a + 1) sage: [check_prime(K,P) for P in K.primes_above(31)] [Fractional ideal (5/2*a + 1/2), Fractional ideal (5/2*a - 1/2)] """ if K is QQ: if isinstance(P, (int,long,Integer)): P = Integer(P) if P.is_prime(): return P else: raise TypeError("%s is not prime"%P) else: if is_Ideal(P) and P.base_ring() is ZZ and P.is_prime(): return P.gen() raise TypeError("%s is not a prime ideal of %s"%(P,ZZ)) if not is_NumberField(K): raise TypeError("%s is not a number field"%K) if is_NumberFieldFractionalIdeal(P): if P.is_prime(): return P else: raise TypeError("%s is not a prime ideal of %s"%(P,K)) if is_NumberFieldElement(P): if P in K: P = K.ideal(P) else: raise TypeError("%s is not an element of %s"%(P,K)) if P.is_prime(): return P else: raise TypeError("%s is not a prime ideal of %s"%(P,K)) raise TypeError("%s is not a valid prime of %s"%(P,K))
def check_prime(K,P): r""" Function to check that `P` determines a prime of `K`, and return that ideal. INPUT: - ``K`` -- a number field (including `\QQ`). - ``P`` -- an element of ``K`` or a (fractional) ideal of ``K``. OUTPUT: - If ``K`` is `\QQ`: the prime integer equal to or which generates `P`. - If ``K`` is not `\QQ`: the prime ideal equal to or generated by `P`. .. note:: If `P` is not a prime and does not generate a prime, a TypeError is raised. EXAMPLES:: sage: from sage.schemes.elliptic_curves.ell_local_data import check_prime sage: check_prime(QQ,3) 3 sage: check_prime(QQ,ZZ.ideal(31)) 31 sage: K.<a>=NumberField(x^2-5) sage: check_prime(K,a) Fractional ideal (a) sage: check_prime(K,a+1) Fractional ideal (a + 1) sage: [check_prime(K,P) for P in K.primes_above(31)] [Fractional ideal (5/2*a + 1/2), Fractional ideal (5/2*a - 1/2)] """ if K is QQ: if isinstance(P, integer_types + (Integer,)): P = Integer(P) if P.is_prime(): return P else: raise TypeError("%s is not prime"%P) else: if is_Ideal(P) and P.base_ring() is ZZ and P.is_prime(): return P.gen() raise TypeError("%s is not a prime ideal of %s"%(P,ZZ)) if not is_NumberField(K): raise TypeError("%s is not a number field"%K) if is_NumberFieldFractionalIdeal(P): if P.is_prime(): return P else: raise TypeError("%s is not a prime ideal of %s"%(P,K)) if is_NumberFieldElement(P): if P in K: P = K.ideal(P) else: raise TypeError("%s is not an element of %s"%(P,K)) if P.is_prime(): return P else: raise TypeError("%s is not a prime ideal of %s"%(P,K)) raise TypeError("%s is not a valid prime of %s"%(P,K))
def check_prime(K, P): r""" Function to check that `P` determines a prime of `K`, and return that ideal. INPUT: - ``K`` -- a number field (including `\QQ`). - ``P`` -- an element of ``K`` or a (fractional) ideal of ``K``. OUTPUT: - If ``K`` is `\QQ`: the prime integer equal to or which generates `P`. - If ``K`` is not `\QQ`: the prime ideal equal to or generated by `P`. .. NOTE:: If `P` is not a prime and does not generate a prime, a ``TypeError`` is raised. EXAMPLES:: sage: from sage.schemes.elliptic_curves.ell_local_data import check_prime sage: check_prime(QQ,3) 3 sage: check_prime(QQ,QQ(3)) 3 sage: check_prime(QQ,ZZ.ideal(31)) 31 sage: K.<a> = NumberField(x^2-5) sage: check_prime(K,a) Fractional ideal (a) sage: check_prime(K,a+1) Fractional ideal (a + 1) sage: [check_prime(K,P) for P in K.primes_above(31)] [Fractional ideal (5/2*a + 1/2), Fractional ideal (5/2*a - 1/2)] sage: L.<b> = NumberField(x^2+3) sage: check_prime(K, L.ideal(5)) Traceback (most recent call last): ... TypeError: The ideal Fractional ideal (5) is not a prime ideal of Number Field in a with defining polynomial x^2 - 5 sage: check_prime(K, L.ideal(b)) Traceback (most recent call last): ... TypeError: No compatible natural embeddings found for Number Field in a with defining polynomial x^2 - 5 and Number Field in b with defining polynomial x^2 + 3 """ if K is QQ: if P in ZZ or isinstance(P, integer_types + (Integer,)): P = Integer(P) if P.is_prime(): return P else: raise TypeError("The element %s is not prime" % (P,)) elif P in QQ: raise TypeError("The element %s is not prime" % (P,)) elif is_Ideal(P) and P.base_ring() is ZZ: if P.is_prime(): return P.gen() else: raise TypeError("The ideal %s is not a prime ideal of %s" % (P, ZZ)) else: raise TypeError("%s is neither an element of QQ or an ideal of %s" % (P, ZZ)) if not is_NumberField(K): raise TypeError("%s is not a number field" % (K,)) if is_NumberFieldFractionalIdeal(P) or P in K: # if P is an ideal, making sure it is an fractional ideal of K P = K.fractional_ideal(P) if P.is_prime(): return P else: raise TypeError("The ideal %s is not a prime ideal of %s" % (P, K)) raise TypeError("%s is not a valid prime of %s" % (P, K))
def check_prime(K,P): r""" Function to check that `P` determines a prime of `K`, and return that ideal. INPUT: - ``K`` -- a number field (including `\QQ`). - ``P`` -- an element of ``K`` or a (fractional) ideal of ``K``. OUTPUT: - If ``K`` is `\QQ`: the prime integer equal to or which generates `P`. - If ``K`` is not `\QQ`: the prime ideal equal to or generated by `P`. .. note:: If `P` is not a prime and does not generate a prime, a TypeError is raised. EXAMPLES:: sage: from sage.schemes.elliptic_curves.ell_local_data import check_prime sage: check_prime(QQ,3) 3 sage: check_prime(QQ,QQ(3)) 3 sage: check_prime(QQ,ZZ.ideal(31)) 31 sage: K.<a>=NumberField(x^2-5) sage: check_prime(K,a) Fractional ideal (a) sage: check_prime(K,a+1) Fractional ideal (a + 1) sage: [check_prime(K,P) for P in K.primes_above(31)] [Fractional ideal (5/2*a + 1/2), Fractional ideal (5/2*a - 1/2)] sage: L.<b> = NumberField(x^2+3) sage: check_prime(K, L.ideal(5)) Traceback (most recent call last): .. TypeError: The ideal Fractional ideal (5) is not a prime ideal of Number Field in a with defining polynomial x^2 - 5 sage: check_prime(K, L.ideal(b)) Traceback (most recent call last): TypeError: No compatible natural embeddings found for Number Field in a with defining polynomial x^2 - 5 and Number Field in b with defining polynomial x^2 + 3 """ if K is QQ: if P in ZZ or isinstance(P, integer_types + (Integer,)): P = Integer(P) if P.is_prime(): return P else: raise TypeError("The element %s is not prime" % (P,) ) elif P in QQ: raise TypeError("The element %s is not prime" % (P,) ) elif is_Ideal(P) and P.base_ring() is ZZ: if P.is_prime(): return P.gen() else: raise TypeError("The ideal %s is not a prime ideal of %s" % (P, ZZ)) else: raise TypeError("%s is neither an element of QQ or an ideal of %s" % (P, ZZ)) if not is_NumberField(K): raise TypeError("%s is not a number field" % (K,) ) if is_NumberFieldFractionalIdeal(P) or P in K: # if P is an ideal, making sure it is an fractional ideal of K P = K.fractional_ideal(P) if P.is_prime(): return P else: raise TypeError("The ideal %s is not a prime ideal of %s" % (P, K)) raise TypeError("%s is not a valid prime of %s" % (P, K))