def get_satake_parameters(k, N=1, chi=0, fi=0, prec=10, bits=53, angles=False): r""" Compute the Satake parameters and return an html-table. INPUT: - ''k'' -- positive integer : the weight - ''N'' -- positive integer (default 1) : level - ''chi'' -- non-neg. integer (default 0) use character nr. chi - ''fi'' -- non-neg. integer (default 0) We want to use the element nr. fi f=Newforms(N,k)[fi] -''prec'' -- compute parameters for p <=prec -''bits'' -- do real embedings intoi field of bits precision -''angles''-- return the angles t_p instead of the alpha_p here alpha_p=p^((k-1)/2)exp(i*t_p) """ (t, f) = _get_newform(k, N, chi, fi) if(not t): return f K = f.base_ring() RF = RealField(bits) CF = ComplexField(bits) if(K != QQ): M = len(K.complex_embeddings()) ems = dict() for j in range(M): ems[j] = list() ps = prime_range(prec) alphas = list() for p in ps: ap = f.coefficients(ZZ(prec))[p] if(K == QQ): f1 = QQ(4 * p ** (k - 1) - ap ** 2) alpha_p = (QQ(ap) + I * f1.sqrt()) / QQ(2) # beta_p=(QQ(ap)-I*f1.sqrt())/QQ(2) # satake[p]=(alpha_p,beta_p) ab = RF(p ** ((k - 1) / 2)) norm_alpha = alpha_p / ab t_p = CF(norm_alpha).argument() if(angles): alphas.append(t_p) else: alphas.append(alpha_p) else: for j in range(M): app = ap.complex_embeddings(bits)[j] f1 = (4 * p ** (k - 1) - app ** 2) alpha_p = (app + I * f1.sqrt()) / RealField(bits)(2) ab = RF(p ** ((k - 1) / 2)) norm_alpha = alpha_p / ab t_p = CF(norm_alpha).argument() if(angles): ems[j].append(t_p) else: ems[j].append(alpha_p) tbl = dict() tbl['headersh'] = ps if(K == QQ): tbl['headersv'] = [""] tbl['data'] = [alphas] tbl['corner_label'] = "$p$" else: tbl['data'] = list() tbl['headersv'] = list() tbl['corner_label'] = "Embedding \ $p$" for j in ems.keys(): tbl['headersv'].append(j) tbl['data'].append(ems[j]) # logger.debug(tbl) s = html_table(tbl) return s
def get_satake_parameters(k, N=1, chi=0, fi=0, prec=10, bits=53, angles=False): r""" Compute the Satake parameters and return an html-table. INPUT: - ''k'' -- positive integer : the weight - ''N'' -- positive integer (default 1) : level - ''chi'' -- non-neg. integer (default 0) use character nr. chi - ''fi'' -- non-neg. integer (default 0) We want to use the element nr. fi f=Newforms(N,k)[fi] -''prec'' -- compute parameters for p <=prec -''bits'' -- do real embedings intoi field of bits precision -''angles''-- return the angles t_p instead of the alpha_p here alpha_p=p^((k-1)/2)exp(i*t_p) """ (t, f) = _get_newform(k, N, chi, fi) if (not t): return f K = f.base_ring() RF = RealField(bits) CF = ComplexField(bits) if (K != QQ): M = len(K.complex_embeddings()) ems = dict() for j in range(M): ems[j] = list() ps = prime_range(prec) alphas = list() for p in ps: ap = f.coefficients(ZZ(prec))[p] if (K == QQ): f1 = QQ(4 * p**(k - 1) - ap**2) alpha_p = (QQ(ap) + I * f1.sqrt()) / QQ(2) # beta_p=(QQ(ap)-I*f1.sqrt())/QQ(2) # satake[p]=(alpha_p,beta_p) ab = RF(p**((k - 1) / 2)) norm_alpha = alpha_p / ab t_p = CF(norm_alpha).argument() if (angles): alphas.append(t_p) else: alphas.append(alpha_p) else: for j in range(M): app = ap.complex_embeddings(bits)[j] f1 = (4 * p**(k - 1) - app**2) alpha_p = (app + I * f1.sqrt()) / RealField(bits)(2) ab = RF(p**((k - 1) / 2)) norm_alpha = alpha_p / ab t_p = CF(norm_alpha).argument() if (angles): ems[j].append(t_p) else: ems[j].append(alpha_p) tbl = dict() tbl['headersh'] = ps if (K == QQ): tbl['headersv'] = [""] tbl['data'] = [alphas] tbl['corner_label'] = "$p$" else: tbl['data'] = list() tbl['headersv'] = list() tbl['corner_label'] = "Embedding \ $p$" for j in ems.keys(): tbl['headersv'].append(j) tbl['data'].append(ems[j]) # logger.debug(tbl) s = html_table(tbl) return s
def compute_satake_parameters_numeric(self, prec=10, bits=53,insert_in_db=True): r""" Compute the Satake parameters and return an html-table. We only do satake parameters for primes p primitive to the level. By defintion the S. parameters are given as the roots of X^2 - c(p)X + chi(p)*p^(k-1) if (p,N)=1 INPUT: -''prec'' -- compute parameters for p <=prec -''bits'' -- do real embedings intoi field of bits precision """ if self.character().order()>2: ## We only implement this for trival or quadratic characters. ## Otherwise there is difficulty to figure out what the embeddings mean... return K = self.coefficient_field() degree = self.degree() RF = RealField(bits) CF = ComplexField(bits) ps = prime_range(prec) self._satake['ps'] = [] alphas = dict() thetas = dict() aps = list() tps = list() k = self.weight() for j in range(degree): alphas[j] = dict() thetas[j] = dict() for j in xrange(len(ps)): p = ps[j] try: ap = self.coefficient(p) except IndexError: break # Remove bad primes if p.divides(self.level()): continue self._satake['ps'].append(p) chip = self.character().value(p) wmf_logger.debug("p={0}".format(p)) wmf_logger.debug("chip={0} of type={1}".format(chip,type(chip))) if hasattr(chip,'complex_embeddings'): wmf_logger.debug("embeddings(chip)={0}".format(chip.complex_embeddings())) wmf_logger.debug("ap={0}".format(ap)) wmf_logger.debug("K={0}".format(K)) # ap=self._f.coefficients(ZZ(prec))[p] if K.absolute_degree()==1: f1 = QQ(4 * chip * p ** (k - 1) - ap ** 2) alpha_p = (QQ(ap) + I * f1.sqrt()) / QQ(2) ab = RF(p ** ((k - 1) / 2)) norm_alpha = alpha_p / ab t_p = CF(norm_alpha).argument() thetas[0][p] = t_p alphas[0][p] = (alpha_p / ab).n(bits) else: for jj in range(degree): app = ap.complex_embeddings(bits)[jj] wmf_logger.debug("chip={0}".format(chip)) wmf_logger.debug("app={0}".format(app)) wmf_logger.debug("jj={0}".format(jj)) if not hasattr(chip,'complex_embeddings'): f1 = (4 * CF(chip) * p ** (k - 1) - app ** 2) else: f1 = (4 * chip.complex_embeddings(bits)[jj] * p ** (k - 1) - app ** 2) alpha_p = (app + I * abs(f1).sqrt()) # ab=RF(/RF(2))) # alpha_p=alpha_p/RealField(bits)(2) wmf_logger.debug("f1={0}".format(f1)) alpha_p = alpha_p / RF(2) wmf_logger.debug("alpha_p={0}".format(alpha_p)) t_p = CF(alpha_p).argument() # tps.append(t_p) # aps.append(alpha_p) alphas[jj][p] = alpha_p thetas[jj][p] = t_p self._satake['alphas'] = alphas self._satake['thetas'] = thetas self._satake['alphas_latex'] = dict() self._satake['thetas_latex'] = dict() for j in self._satake['alphas'].keys(): self._satake['alphas_latex'][j] = dict() for p in self._satake['alphas'][j].keys(): s = latex(self._satake['alphas'][j][p]) self._satake['alphas_latex'][j][p] = s for j in self._satake['thetas'].keys(): self._satake['thetas_latex'][j] = dict() for p in self._satake['thetas'][j].keys(): s = latex(self._satake['thetas'][j][p]) self._satake['thetas_latex'][j][p] = s wmf_logger.debug("satake=".format(self._satake)) return self._satake