def canonical_parameters(group, weight, sign, base_ring): """ Return the canonically normalized parameters associated to a choice of group, weight, sign, and base_ring. That is, normalize each of these to be of the correct type, perform all appropriate type checking, etc. EXAMPLES:: sage: p1 = sage.modular.modsym.modsym.canonical_parameters(5,int(2),1,QQ) ; p1 (Congruence Subgroup Gamma0(5), 2, 1, Rational Field) sage: p2 = sage.modular.modsym.modsym.canonical_parameters(Gamma0(5),2,1,QQ) ; p2 (Congruence Subgroup Gamma0(5), 2, 1, Rational Field) sage: p1 == p2 True sage: type(p1[1]) <type 'sage.rings.integer.Integer'> """ sign = rings.Integer(sign) if not (sign in [-1, 0, 1]): raise ValueError("sign must be -1, 0, or 1") weight = rings.Integer(weight) if weight <= 1: raise ValueError("the weight must be at least 2") if isinstance(group, (int, rings.Integer)): group = arithgroup.Gamma0(group) elif isinstance(group, dirichlet.DirichletCharacter): try: eps = group.minimize_base_ring() except NotImplementedError: # TODO -- implement minimize_base_ring over finite fields eps = group G = eps.parent() if eps.is_trivial(): group = arithgroup.Gamma0(eps.modulus()) else: group = (eps, G) if base_ring is None: base_ring = eps.base_ring() if base_ring is None: base_ring = rational_field.RationalField() if not is_CommutativeRing(base_ring): raise TypeError("base_ring (=%s) must be a commutative ring" % base_ring) if not base_ring.is_field(): raise TypeError("(currently) base_ring (=%s) must be a field" % base_ring) return group, weight, sign, base_ring
# Copyright (C) 2007 William Stein <*****@*****.**> # # Distributed under the terms of the GNU General Public License (GPL) # 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/ #***************************************************************************** from number_field_ideal import NumberFieldFractionalIdeal from sage.structure.factorization import Factorization from sage.structure.proof.proof import get_flag import sage.rings.rational_field as rational_field import sage.rings.integer_ring as integer_ring QQ = rational_field.RationalField() ZZ = integer_ring.IntegerRing() class NumberFieldFractionalIdeal_rel(NumberFieldFractionalIdeal): """ An ideal of a relative number field. EXAMPLES:: sage: K.<a> = NumberField([x^2 + 1, x^2 + 2]); K Number Field in a0 with defining polynomial x^2 + 1 over its base field sage: i = K.ideal(38); i Fractional ideal (38) sage: K.<a0, a1> = NumberField([x^2 + 1, x^2 + 2]); K Number Field in a0 with defining polynomial x^2 + 1 over its base field