示例#1
0
 def create_key(self, k, p=None, prec_cap=None, base=None, base_coeffs=None, \
                  character=None, adjuster=None, act_on_left=False, \
                  dettwist=None, variable_name = 'w'):
     if base is None:
         if base_coeffs is None:
             if p is None:
                 raise ValueError("Must specify a prime, a base ring, or coefficients.")
             if prec_cap is None:
                 raise ValueError("Must specify a precision cap or a base ring.")
             prec_cap = _prec_cap_parser(prec_cap)
             base_coeffs = Zp(p, prec = prec_cap[0])
         elif not isinstance(base_coeffs, ring.Ring):
             raise TypeError("base_coeffs must be a ring if base is None")
         elif prec_cap is None:
             raise ValueError("Must specify a precision cap or a base ring.")
         else:
             prec_cap = _prec_cap_parser(prec_cap)
             if base_coeffs.precision_cap() < prec_cap[0]:
                 raise ValueError("Precision cap on coefficients of base ring must be at least the p-adic precision cap of this space.")
         base = PowerSeriesRing(base_coeffs, name=variable_name, default_prec=prec_cap[1])
     elif prec_cap is None:
         prec_cap = [ZZ(base.base_ring().precision_cap()), ZZ(base.default_prec())]
     else:
         if base.base_ring().precision_cap() < prec_cap[0]:
             raise ValueError("Precision cap on coefficients of base ring must be at least the p-adic precision cap of this space.")
         if base.default_prec() < prec_cap[1]:
             raise ValueError("Default precision on the variable of base ring must be at least the w-adic precision cap of this space.")
     base_coeffs = None
     p = base.base_ring().prime()
     k_shift = 0
     #if character is not None:
     #    #Should we ensure character is primitive?
     #    cond_val = character.conductor().valuation(p)
     #    if cond_val > 1:
     #        raise ValueError("Level must not be divisible by p^2.")
     #    elif cond_val == 1:
     #        pass
     #    else:
     #        pass
     k = ZZ((k + k_shift) % (p-1))
     #if prec_cap is None:
     #    prec_cap = [base.base_ring().precision_cap, base.default_prec()]
     #else:
     #    prec_cap = list(prec_cap)
     #prec_cap = [base.base_ring().precision_cap(), base.default_prec()]
     if adjuster is None:
         adjuster = _default_adjuster()
     if dettwist is not None:
         dettwist = ZZ(dettwist)
         if dettwist == 0: 
             dettwist = None
     return (k, p, tuple(prec_cap), base, character, adjuster, act_on_left, dettwist)