def add_row(self, nflabel): nf = WebNumberField(nflabel) #nflink = (nflabel, url_for('number_fields.by_label',label=nflabel)) nflink = (nflabel, url_for('characters.render_Heckewebpage', number_field=nflabel)) F = WebHeckeFamily(number_field=nflabel) self._contents.append((nflink, nf.signature(), nf.web_poly()))
def vflabel(self): order2 = self.order if self.order % 4 != 2 else self.order / 2 if order2 == 1: return '1.1.1.1' elif order2 == 4: return '2.0.4.1' valuewnf = WebNumberField.from_cyclo(order2) if not valuewnf.is_null(): return valuewnf.label else: return ''
def label(self): if "label" in self._data.keys(): return self._data["label"] else: # from number_fields.number_field import poly_to_field_label # pol = PolynomialRing(QQ, 'x')(map(str,self.polynomial())) # label = poly_to_field_label(pol) label = WebNumberField.from_coeffs(self._data["Polynomial"]).get_label() if label: self._data["label"] = label return label
def vflabel(self): _ = self.valuefield # make sure valuefield was computed order2 = self._order2 if order2 == 1: return '1.1.1.1' elif order2 == 4: return '2.0.4.1' valuewnf = WebNumberField.from_cyclo(order2) if not valuewnf.is_null(): return valuewnf.label else: return ''
def label(self): if "label" in self._data.keys(): return self._data["label"] else: #from number_fields.number_field import poly_to_field_label #pol = PolynomialRing(QQ, 'x')(map(str,self.polynomial())) #label = poly_to_field_label(pol) label = WebNumberField.from_coeffs( self._data["Polynomial"]).get_label() if label: self._data["label"] = label return label
def G_name(self): """ More-or-less standardized name of the abstract group """ from WebNumberField import WebNumberField import re wnf = WebNumberField.from_polredabs(self.polredabs()) if not wnf.is_null(): mygalstring = wnf.galois_string() if re.search('Trivial', mygalstring) is not None: return '$C_1$' # Have to remove dollar signs return mygalstring if self.polredabs().degree() < 12: # Let pari compute it for us now from sage.all import pari galt = int(list(pari('polgalois(' + str(self.polredabs()) + ')'))[2]) from transitive_group import WebGaloisGroup tg = WebGaloisGroup.from_nt(self.polredabs().degree(), galt) return tg.display_short() return self._data["G-Name"]
def add_row(self, nflabel): nf = WebNumberField(nflabel) #nflink = (nflabel, url_for('number_fields.by_label',label=nflabel)) nflink = (nflabel, url_for('characters.render_Heckewebpage',number_field=nflabel)) #F = WebHeckeFamily(number_field=nflabel) self._contents.append( (nflink, nf.signature(), nf.web_poly() ) )
def dirichletcharacter(self): ####################################################################################### ## Conrey's naming convention for Dirichlet Characters ####################################################################################### G = DirichletGroup_conrey(self.modulus) G_sage = G.standard_dirichlet_group() self.level = self.modulus if self.modulus == 1 or self.number % self.modulus != 0: chi = G[self.number] chi_sage = chi.sage_character() self.chi_sage = chi_sage self.zetaorder = G_sage.zeta_order() # if len(chi_sage.values_on_gens()) == 1: ### self.genvaluestex = latex(chi_sage.values_on_gens()[0]) # else: ### self.genvaluestex = latex(chi_sage.values_on_gens()) # chizero = G_sage[0] self.char = str(chi) if chi.is_primitive(): self.primitive = "True" else: self.primitive = "False" self.conductor = chi.conductor() self.order = chi.multiplicative_order() self.vals = chi.values() self.logvals = log_value(self.modulus, self.number) # self.logvals = map(chi.logvalue, range(1,self.modulus+1)) # self.logvals = [latex_char_logvalue(k,True) for k in self.logvals] Gunits = G_sage.unit_gens() if self.modulus == 2: Gunits = [1] self.unitgens = latex_tuple(map(str, Gunits)) self.genvalues = chi_sage.values_on_gens() # what is the use ? self.genlogvalues = [chi.logvalue(k) for k in Gunits] self.genvaluestex = latex_tuple(map(latex_char_logvalue, self.genlogvalues)) self.bound = 5 * 1024 if chi.is_even(): self.parity = 'Even' else: self.parity = 'Odd' if self.primitive == "False": self.inducedchar = chi.primitive_character() self.inducedchar_isprim = self.inducedchar.is_primitive() self.inducedchar_modulus = self.inducedchar.modulus() self.inducedchar_conductor = self.inducedchar.conductor() F = DirichletGroup_conrey(self.inducedchar_modulus) if self.number == 1: self.inducedchar_number = 1 else: for chi in F: j = chi.number() if chi == self.inducedchar: self.inducedchar_number = j break self.inducedchar_tex = r"\(\chi_{%s}(%s,\cdot)\)" % ( self.inducedchar_modulus, self.inducedchar_number) # if self.primitive == 'True': # self.primtf = True # else: # self.primtf = False # Set data for related number fields order2 = int(self.order) if order2 % 4 == 2: order2 = order2 / 2 self.valuefield = r'\(\mathbb{Q}(\zeta_{%d})\)' % order2 if order2 == 1: self.valuefield = r'\(\mathbb{Q}\)' if order2 == 4: self.valuefield = r'\(\mathbb{Q}(i)\)' valuewnf = WebNumberField.from_cyclo(order2) if not valuewnf.is_null(): self.valuefield_label = valuewnf.label else: self.valuefield_label = '' self.texname = r'\chi_{%d}(%d, \cdot)' % (self.modulus, self.number) self.kername = r'\(\mathbb{Q}(\zeta_{%d})^{\ker %s}\)' % (self.modulus, self.texname) if self.order < 16: pol = str(gp.galoissubcyclo(self.modulus, self.chi_sage.kernel())) sagepol = PolynomialRing(QQ, 'x')(pol) R = sagepol.parent() nf_pol = R(pari(sagepol).polredabs()) self.nf_pol = "\( %s \)" % latex(nf_pol) wnf = WebNumberField.from_coeffs([int(c) for c in nf_pol.coeffs()]) if wnf.is_null(): self.nf_friend = '' else: self.nf_friend = '/NumberField/' + str(wnf.label) self.nf_label = wnf.label else: self.nf_pol = '' self.nf_friend = '' if self.order == 2: if self.conductor % 2 == 1: self.kronsymbol = r"\begin{equation} \chi_{%s}(a) = " % (self.number) self.kronsymbol += r"\left(\frac{a}{%s}\right)" % (self.conductor) self.kronsymbol += r"\end{equation}" else: if chi.is_even(): self.kronsymbol = r"\begin{equation} \chi_{%s}(a) = " % (self.number) self.kronsymbol += r"\left(\frac{a}{%s}\right)" % (self.conductor) self.kronsymbol += r"\end{equation}" else: self.kronsymbol = r"\begin{equation} \chi_{%s}(a) = " % (self.number) self.kronsymbol += r"\left(\frac{a}{%s}\right)" % (self.conductor) self.kronsymbol += r"\end{equation}" self.credit = "Sage" self.title = r"Dirichlet Character: \(\chi_{%s}(%s,\cdot)\)" % (self.modulus, self.number) return chi
def label2nf(label): return WebNumberField(label).K()
def dirichletcharacter(self): ####################################################################################### ## Conrey's naming convention for Dirichlet Characters ####################################################################################### G = DirichletGroup_conrey(self.modulus) G_sage = G.standard_dirichlet_group() self.level = self.modulus if self.modulus == 1 or self.number % self.modulus != 0: chi = G[self.number] chi_sage = chi.sage_character() self.chi_sage = chi_sage self.zetaorder = G_sage.zeta_order() # if len(chi_sage.values_on_gens()) == 1: ### self.genvaluestex = latex(chi_sage.values_on_gens()[0]) # else: ### self.genvaluestex = latex(chi_sage.values_on_gens()) # chizero = G_sage[0] self.char = str(chi) if chi.is_primitive(): self.primitive = "True" else: self.primitive = "False" self.conductor = chi.conductor() self.order = chi.multiplicative_order() self.galoisorbit = [ power_mod(self.number, k, self.modulus) for k in xrange(1, self.order) if gcd(k, self.order) == 1 ] self.vals = chi.values() self.logvals = log_value(self.modulus, self.number) # self.logvals = map(chi.logvalue, range(1,self.modulus+1)) # self.logvals = [latex_char_logvalue(k,True) for k in self.logvals] Gunits = G_sage.unit_gens() if self.modulus == 2: Gunits = [1] self.unitgens = latex_tuple(map(str, Gunits)) self.genvalues = chi_sage.values_on_gens() # what is the use ? self.genlogvalues = [chi.logvalue(k) for k in Gunits] self.genvaluestex = latex_tuple( map(latex_char_logvalue, self.genlogvalues)) self.bound = 5 * 1024 if chi.is_even(): self.parity = 'Even' else: self.parity = 'Odd' if self.primitive == "False": self.inducedchar = chi.primitive_character() self.inducedchar_isprim = self.inducedchar.is_primitive() self.inducedchar_modulus = self.inducedchar.modulus() self.inducedchar_conductor = self.inducedchar.conductor() F = DirichletGroup_conrey(self.inducedchar_modulus) if self.number == 1: self.inducedchar_number = 1 else: for chi in F: j = chi.number() if chi == self.inducedchar: self.inducedchar_number = j break self.inducedchar_tex = r"\(\chi_{%s}(%s,\cdot)\)" % ( self.inducedchar_modulus, self.inducedchar_number) # if self.primitive == 'True': # self.primtf = True # else: # self.primtf = False # Set data for related number fields order2 = int(self.order) if order2 % 4 == 2: order2 = order2 / 2 self.valuefield = r'\(\mathbb{Q}(\zeta_{%d})\)' % order2 if order2 == 1: self.valuefield = r'\(\mathbb{Q}\)' if order2 == 4: self.valuefield = r'\(\mathbb{Q}(i)\)' valuewnf = WebNumberField.from_cyclo(order2) if not valuewnf.is_null(): self.valuefield_label = valuewnf.label else: self.valuefield_label = '' self.texname = r'\chi_{%d}(%d, \cdot)' % (self.modulus, self.number) self.kername = r'\(\mathbb{Q}(\zeta_{%d})^{\ker %s}\)' % ( self.modulus, self.texname) if self.order < 16: pol = str( gp.galoissubcyclo(self.modulus, self.chi_sage.kernel())) sagepol = PolynomialRing(QQ, 'x')(pol) R = sagepol.parent() nf_pol = R(pari(sagepol).polredabs()) self.nf_pol = "\( %s \)" % latex(nf_pol) wnf = WebNumberField.from_coeffs( [int(c) for c in nf_pol.coeffs()]) if wnf.is_null(): self.nf_friend = '' else: self.nf_friend = '/NumberField/' + str(wnf.label) self.nf_label = wnf.label else: self.nf_pol = '' self.nf_friend = '' if self.order == 2: if self.conductor % 2 == 1: self.kronsymbol = r"\begin{equation} \chi_{%s}(a) = " % ( self.number) self.kronsymbol += r"\left(\frac{a}{%s}\right)" % ( self.conductor) self.kronsymbol += r"\end{equation}" else: if chi.is_even(): self.kronsymbol = r"\begin{equation} \chi_{%s}(a) = " % ( self.number) self.kronsymbol += r"\left(\frac{a}{%s}\right)" % ( self.conductor) self.kronsymbol += r"\end{equation}" else: self.kronsymbol = r"\begin{equation} \chi_{%s}(a) = " % ( self.number) self.kronsymbol += r"\left(\frac{a}{%s}\right)" % ( self.conductor) self.kronsymbol += r"\end{equation}" self.credit = "Sage" self.title = r"Dirichlet Character: \(\chi_{%s}(%s,\cdot)\)" % ( self.modulus, self.number) return chi