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)