예제 #1
0
 def create_key(self, k, p=None, prec_cap=None, base=None, \
                  character=None, adjuster=None, act_on_left=False, \
                  dettwist=None):
     k = ZZ(k)
     if base is None:
         if p is None:
             raise ValueError("Must specify a prime or a base ring.")
         if prec_cap is None:
             base = ZpCA(p)
         else:
             base = ZpCA(p, prec_cap)
     if prec_cap is None:
         prec_cap = base.precision_cap()
     elif prec_cap > base.precision_cap():
         raise ValueError("Insufficient precision in base ring (%s < %s)."%(base.precision_cap(), prec_cap))
     if p is None:
         p = base.prime()
     elif p != base.prime():
         raise ValueError("Prime p(=%s) must equal the prime of the base ring(=%s)"%(p, base.prime()))
     if adjuster is None:
         adjuster = _default_adjuster()
     if dettwist is not None:
         dettwist = ZZ(dettwist)
         if dettwist == 0: 
             dettwist = None
     return (k, p, prec_cap, base, character, adjuster, act_on_left, dettwist)
예제 #2
0
 def create_key(self, k, p=None, prec_cap=None, base=None, \
                  character=None, adjuster=None, act_on_left=False, \
                  dettwist=None):
     k = ZZ(k)
     if base is None:
         if p is None:
             raise ValueError("Must specify a prime or a base ring.")
         if prec_cap is None:
             base = ZpCA(p)
         else:
             base = ZpCA(p, prec_cap)
     if prec_cap is None:
         prec_cap = base.precision_cap()
     elif prec_cap > base.precision_cap():
         raise ValueError("Insufficient precision in base ring (%s < %s)." %
                          (base.precision_cap(), prec_cap))
     if p is None:
         p = base.prime()
     elif p != base.prime():
         raise ValueError(
             "Prime p(=%s) must equal the prime of the base ring(=%s)" %
             (p, base.prime()))
     if adjuster is None:
         adjuster = _default_adjuster()
     if dettwist is not None:
         dettwist = ZZ(dettwist)
         if dettwist == 0:
             dettwist = None
     return (k, p, prec_cap, base, character, adjuster, act_on_left,
             dettwist)
예제 #3
0
 def __init__(self, k, p=None, prec_cap=20, base=None, character=None, tuplegen=None, act_on_left=False):
     """
     - ``character`` --
       - None (default)
       - (chi, None)
       - (None, n) (n integral)
       - (chi, n)
       - lambda (for n half-integral use this form)
     """
     if p is not None:
         p = ZZ(p)
     if base is None:
         if p is None: raise ValueError("specify p or a base")
         base = ZpCA(p,prec_cap)
     elif isinstance(base, pAdicGeneric):
         if base.prime() != p: raise ValueError("p must be the same as the prime of base")
         if base.precision_cap() != prec_cap: raise ValueError("prec_cap must match the precision cap of base")
     elif prec_cap > k+1: # non-classical
         if p is None or not p.is_prime(): raise ValueError("p must be prime for non-classical weight")
     from sage.rings.padics.pow_computer import PowComputer_long
     # should eventually be the PowComputer on ZpCA once that uses longs.
     Dist, WeightKAction = get_dist_classes(p, prec_cap, base)
     self.Element = Dist
     if Dist is Dist_long:
         self.prime_pow = PowComputer_long(p, prec_cap, prec_cap, prec_cap, 0)
     Parent.__init__(self, base)
     self._k = k
     self._p = p
     self._prec_cap = prec_cap
     act = WeightKAction(self, character, tuplegen, act_on_left)
     self._act = act
     self._populate_coercion_lists_(action_list=[act])
예제 #4
0
    def __init__(self, k, p, prec_cap, base=None, character=None):
        if base is None:
            base = ZpCA(p,prec_cap)
        else:
            assert (isinstance(base, pAdicGeneric) and base.prime() == p) or (p.is_prime() and (base is ZZ or base is QQ))
        from dist import Dist_vector, WeightKAction_vector, Dist_long, WeightKAction_long
        from sage.rings.padics.pow_computer import PowComputer_long
        # should eventually be the PowComputer on ZpCA once that uses longs.
        p = ZZ(p)
#        if 7*p**
        self._element_constructor_ = Dist_vector
        Parent.__init__(self, base)
        self._k = k
        self._p = ZZ(p)
        self._prec_cap = prec_cap
        self._approx_modules = {} # indexed by precision
        act = WeightKAction_vector(self, character)
        self._act = act
        self._populate_coercion_lists_(action_list=[act])