def make_galmap_object(self, galmap): from lmfdb.belyi.main import url_for_belyi_passport_label # all information about the map goes in the data dictionary # most of the data from the database gets polished/formatted before we put it in the data dictionary data = self.data = {} # the stuff that does not need to be polished for elt in ('label', 'plabel', 'triples_cyc', 'orbit_size', 'g', 'abc', 'deg'): data[elt] = galmap[elt] nt = galmap['group'].split('T') data['group'] = group_display_knowl(int(nt[0]), int(nt[1]), getDBConnection()) data['geomtype'] = geomtypelet_to_geomtypename_dict[galmap['geomtype']] data['lambdas'] = [str(c)[1:-1] for c in galmap['lambdas']] data['isQQ'] = False data['in_LMFDB'] = False F = belyi_base_field(galmap) if F._data == None: fld_coeffs = galmap['base_field'] pol = PolynomialRing(QQ, 'x')(fld_coeffs) data['base_field'] = latex(pol) else: data['in_LMFDB'] = True if F.poly().degree() == 1: data['isQQ'] = True F.latex_poly = web_latex(F.poly()) data['base_field'] = F crv_str = galmap['curve'] if crv_str == 'PP1': data['curve'] = '\mathbb{P}^1' else: data['curve'] = make_curve_latex(crv_str) # change pairs of floats to complex numbers embeds = galmap['embeddings'] embed_strs = [] for el in embeds: if el[1] < 0: el_str = str(el[0]) + str(el[1]) + "\sqrt{-1}" else: el_str = str(el[0]) + "+" + str(el[1]) + "\sqrt{-1}" embed_strs.append(el_str) data['map'] = make_map_latex(galmap['map']) data['embeddings_and_triples'] = [] if data['isQQ']: for i in range(0, len(data['triples_cyc'])): triple_cyc = data['triples_cyc'][i] data['embeddings_and_triples'].append([ "\\text{not applicable (over $\mathbb{Q}$)}", triple_cyc[0], triple_cyc[1], triple_cyc[2] ]) else: for i in range(0, len(data['triples_cyc'])): triple_cyc = data['triples_cyc'][i] data['embeddings_and_triples'].append([ embed_strs[i], triple_cyc[0], triple_cyc[1], triple_cyc[2] ]) data['lambdas'] = [str(c)[1:-1] for c in galmap['lambdas']] # Properties properties = [ ('Label', galmap['label']), ('Group', str(galmap['group'])), ('Orders', str(galmap['abc'])), ('Genus', str(galmap['g'])), ('Size', str(galmap['orbit_size'])), ] self.properties = properties # Friends self.friends = [('Passport', url_for_belyi_passport_label(galmap['plabel']))] # Breadcrumbs groupstr, abcstr, sigma0, sigma1, sigmaoo, gstr, letnum = data[ 'label'].split("-") lambdasstr = '%s-%s-%s' % (sigma0, sigma1, sigmaoo) lambdasgstr = lambdasstr + "-" + gstr self.bread = [ ('Belyi Maps', url_for(".index")), (groupstr, url_for(".by_url_belyi_search_group", group=groupstr)), (abcstr, url_for(".by_url_belyi_search_group_triple", group=groupstr, abc=abcstr)), (lambdasgstr, url_for(".by_url_belyi_passport_label", group=groupstr, abc=abcstr, sigma0=sigma0, sigma1=sigma1, sigmaoo=sigmaoo, g=gstr)), (letnum, url_for(".by_url_belyi_galmap_label", group=groupstr, abc=abcstr, sigma0=sigma0, sigma1=sigma1, sigmaoo=sigmaoo, g=gstr, letnum=letnum)), ] # Title self.title = "Belyi map " + data['label'] # Code snippets (only for curves) self.code = {} return
def make_galmap_object(self, galmap): from lmfdb.belyi.main import url_for_belyi_passport_label # all information about the map goes in the data dictionary # most of the data from the database gets polished/formatted before we put it in the data dictionary data = self.data = {} # the stuff that does not need to be polished for elt in ("label", "plabel", "triples_cyc", "orbit_size", "g", "abc", "deg"): data[elt] = galmap[elt] nt = galmap["group"].split("T") data["group"] = group_display_knowl(int(nt[0]), int(nt[1])) data["geomtype"] = geomtypelet_to_geomtypename_dict[galmap["geomtype"]] data["lambdas"] = [str(c)[1:-1] for c in galmap["lambdas"]] data["isQQ"] = False data["in_LMFDB"] = False F = belyi_base_field(galmap) if F._data is None: fld_coeffs = galmap["base_field"] pol = PolynomialRing(QQ, "x")(fld_coeffs) data["base_field"] = latex(pol) else: data["in_LMFDB"] = True if F.poly().degree() == 1: data["isQQ"] = True F.latex_poly = web_latex(F.poly()) data["base_field"] = F crv_str = galmap["curve"] if crv_str == "PP1": data["curve"] = r"\mathbb{P}^1" else: data["curve"] = make_curve_latex(crv_str) # change pairs of floats to complex numbers embeds = galmap["embeddings"] embed_strs = [] for el in embeds: if el[1] < 0: el_str = str(el[0]) + str(el[1]) + r"\sqrt{-1}" else: el_str = str(el[0]) + "+" + str(el[1]) + r"\sqrt{-1}" embed_strs.append(el_str) data["map"] = make_map_latex(galmap["map"]) data["embeddings_and_triples"] = [] if data["isQQ"]: for i in range(0, len(data["triples_cyc"])): triple_cyc = data["triples_cyc"][i] data["embeddings_and_triples"].append([ r"\text{not applicable (over $\mathbb{Q}$)}", triple_cyc[0], triple_cyc[1], triple_cyc[2], ]) else: for i in range(0, len(data["triples_cyc"])): triple_cyc = data["triples_cyc"][i] data["embeddings_and_triples"].append([ embed_strs[i], triple_cyc[0], triple_cyc[1], triple_cyc[2] ]) data["lambdas"] = [str(c)[1:-1] for c in galmap["lambdas"]] # Properties properties = [ ("Label", galmap["label"]), ("Group", str(galmap["group"])), ("Orders", str(galmap["abc"])), ("Genus", str(galmap["g"])), ("Size", str(galmap["orbit_size"])), ] self.properties = properties # Friends self.friends = [("Passport", url_for_belyi_passport_label(galmap["plabel"]))] # Downloads if galmap["g"] <= 2: self.downloads = [ ( "Code to Magma", url_for(".belyi_galmap_magma_download", label=data["label"]), ), ( "Code to SageMath", url_for(".belyi_galmap_sage_download", label=data["label"]), ), ( "All data to text", url_for(".belyi_galmap_text_download", label=data["label"]), ), ] else: self.downloads = [] # Breadcrumbs groupstr, abcstr, sigma0, sigma1, sigmaoo, gstr, letnum = data[ "label"].split("-") lambdasstr = "%s-%s-%s" % (sigma0, sigma1, sigmaoo) lambdasgstr = lambdasstr + "-" + gstr self.bread = [ ("Belyi Maps", url_for(".index")), (groupstr, url_for(".by_url_belyi_search_group", group=groupstr)), ( abcstr, url_for(".by_url_belyi_search_group_triple", group=groupstr, abc=abcstr), ), ( lambdasgstr, url_for( ".by_url_belyi_passport_label", group=groupstr, abc=abcstr, sigma0=sigma0, sigma1=sigma1, sigmaoo=sigmaoo, g=gstr, ), ), ( letnum, url_for( ".by_url_belyi_galmap_label", group=groupstr, abc=abcstr, sigma0=sigma0, sigma1=sigma1, sigmaoo=sigmaoo, g=gstr, letnum=letnum, ), ), ] # Title self.title = "Belyi map " + data["label"] # Code snippets (only for curves) self.code = {} return
def make_passport_object(self, passport): from lmfdb.belyi.main import url_for_belyi_galmap_label, url_for_belyi_passport_label # all information about the map goes in the data dictionary # most of the data from the database gets polished/formatted before we put it in the data dictionary data = self.data = {} for elt in ("plabel", "abc", "num_orbits", "g", "abc", "deg", "maxdegbf", "is_primitive", "primitivization"): data[elt] = passport[elt] data["group"] = transitive_group_display_knowl(passport["group"]) data["geomtype"] = geomtypelet_to_geomtypename_dict[ passport["geomtype"]] data["lambdas"] = [str(c)[1:-1] for c in passport["lambdas"]] data["pass_size"] = passport["pass_size"] data["primitivization_url"] = url_for_belyi_passport_label( data['primitivization']) # Permutation triples galmaps_for_plabel = db.belyi_galmaps_fixed.search( {"plabel": passport["plabel"]}) # , sort = ['label_index']) galmapdata = [] for galmap in galmaps_for_plabel: # wrap number field nonsense F = belyi_base_field(galmap) # inLMFDB = False field = {} if F._data is None: field["in_LMFDB"] = False fld_coeffs = galmap["base_field"] pol = PolynomialRing(QQ, "x")(fld_coeffs) field["base_field"] = latex(pol) field["isQQ"] = False else: field["in_LMFDB"] = True if F.poly().degree() == 1: field["isQQ"] = True F.latex_poly = web_latex(F.poly(var="t")) field["base_field"] = F galmapdatum = [ galmap["label"].split("-")[-1], url_for_belyi_galmap_label(galmap["label"]), galmap["orbit_size"], field, galmap["triples_cyc"][0][0], galmap["triples_cyc"][0][1], galmap["triples_cyc"][0][2], ] galmapdata.append(galmapdatum) data["galmapdata"] = galmapdata # Properties properties = [ ("Label", passport["plabel"]), ("Group", str(passport["group"])), ("Orders", str(passport["abc"])), ("Genus", str(passport["g"])), ("Size", str(passport["pass_size"])), ("Galois orbits", str(passport["num_orbits"])), ] self.properties = properties # Friends self.friends = [] # Breadcrumbs label_spl = data["plabel"].split("-") groupstr = label_spl[0] gstr = str(data['g']) sigmas = label_spl[1] sigma0, sigma1, sigmaoo = sigmas.split("_") abcstr = str(data['abc']).replace(' ', '') # does lambdasstr need to be updated? lambdasstr = "%s-%s-%s" % (sigma0, sigma1, sigmaoo) lambdasgstr = lambdasstr + "-" + gstr self.bread = [ ("Belyi Maps", url_for(".index")), (groupstr, url_for(".by_url_belyi_search_group", group=groupstr)), ( abcstr, url_for(".by_url_belyi_search_group_triple", group=groupstr, abc=abcstr), ), ( lambdasgstr, url_for( ".by_url_belyi_passport_label", group=groupstr, abc=abcstr, sigma0=sigma0, sigma1=sigma1, sigmaoo=sigmaoo, g=gstr, ), ), ] # Title self.title = "Passport " + data["plabel"] # Code snippets (only for curves) self.code = {} self.__dict__.update(data) return
def make_galmap_object(self, galmap): from lmfdb.belyi.main import url_for_belyi_passport_label # all information about the map goes in the data dictionary # most of the data from the database gets polished/formatted before we put it in the data dictionary data = self.data = {} # the stuff that does not need to be polished for elt in ('label', 'plabel', 'triples_cyc', 'orbit_size', 'g', 'abc', 'deg'): data[elt] = galmap[elt] nt = galmap['group'].split('T') data['group'] = group_display_knowl(int(nt[0]),int(nt[1])) data['geomtype'] = geomtypelet_to_geomtypename_dict[galmap['geomtype']] data['lambdas'] = [str(c)[1:-1] for c in galmap['lambdas']] data['isQQ'] = False data['in_LMFDB'] = False F = belyi_base_field(galmap) if F._data == None: fld_coeffs = galmap['base_field'] pol = PolynomialRing(QQ, 'x')(fld_coeffs) data['base_field'] = latex(pol) else: data['in_LMFDB'] = True if F.poly().degree()==1: data['isQQ'] = True F.latex_poly = web_latex(F.poly()) data['base_field'] = F crv_str = galmap['curve'] if crv_str=='PP1': data['curve'] = '\mathbb{P}^1' else: data['curve'] = make_curve_latex(crv_str) # change pairs of floats to complex numbers embeds = galmap['embeddings'] embed_strs = [] for el in embeds: if el[1] < 0: el_str = str(el[0]) + str(el[1]) + "\sqrt{-1}" else: el_str = str(el[0]) + "+" + str(el[1]) + "\sqrt{-1}" embed_strs.append(el_str) data['map'] = make_map_latex(galmap['map']) data['embeddings_and_triples'] = [] if data['isQQ']: for i in range(0,len(data['triples_cyc'])): triple_cyc = data['triples_cyc'][i] data['embeddings_and_triples'].append(["\\text{not applicable (over $\mathbb{Q}$)}", triple_cyc[0], triple_cyc[1], triple_cyc[2]]) else: for i in range(0,len(data['triples_cyc'])): triple_cyc = data['triples_cyc'][i] data['embeddings_and_triples'].append([embed_strs[i], triple_cyc[0], triple_cyc[1], triple_cyc[2]]) data['lambdas'] = [str(c)[1:-1] for c in galmap['lambdas']] # Properties properties = [('Label', galmap['label']), ('Group', str(galmap['group'])), ('Orders', str(galmap['abc'])), ('Genus', str(galmap['g'])), ('Size', str(galmap['orbit_size'])), ] self.properties = properties # Friends self.friends = [('Passport', url_for_belyi_passport_label(galmap['plabel']))] # Breadcrumbs groupstr, abcstr, sigma0, sigma1, sigmaoo, gstr, letnum = data['label'].split("-"); lambdasstr = '%s-%s-%s' % (sigma0, sigma1, sigmaoo); lambdasgstr = lambdasstr + "-" + gstr; self.bread = [ ('Belyi Maps', url_for(".index")), (groupstr, url_for(".by_url_belyi_search_group", group=groupstr ) ), (abcstr, url_for(".by_url_belyi_search_group_triple", group=groupstr, abc=abcstr ) ), (lambdasgstr, url_for(".by_url_belyi_passport_label", group=groupstr, abc=abcstr, sigma0=sigma0, sigma1=sigma1, sigmaoo=sigmaoo, g = gstr ) ), (letnum, url_for(".by_url_belyi_galmap_label", group=groupstr, abc=abcstr, sigma0=sigma0, sigma1=sigma1, sigmaoo=sigmaoo, g = gstr, letnum = letnum) ), ]; # Title self.title = "Belyi map " + data['label'] # Code snippets (only for curves) self.code = {} return
def __init__(self, galmap, triple=None): from lmfdb.belyi.main import url_for_belyi_passport_label, url_for_belyi_galmap_label # all information about the map goes in the data dictionary # most of the data from the database gets polished/formatted before we put it in the data dictionary data = self.data = {} # the stuff that does not need to be polished for elt in ("label", "plabel", "triples_cyc", "orbit_size", "g", "abc", "deg", "primitivization", "is_primitive"): data[elt] = galmap[elt] if triple: data["label"] += '-' + (triple).replace(' ', '') data["triple"] = triple data["group"] = transitive_group_display_knowl(galmap["group"]) data["geomtype"] = geomtypelet_to_geomtypename_dict[galmap["geomtype"]] data["lambdas"] = [str(c)[1:-1] for c in galmap["lambdas"]] data["primitivization_url"] = url_for_belyi_galmap_label( data['primitivization']) data["isQQ"] = False data["in_LMFDB"] = False F = belyi_base_field(galmap) if F._data is None: fld_coeffs = galmap["base_field"] pol = PolynomialRing(QQ, "t")(fld_coeffs) data["base_field"] = latex(pol) else: data["in_LMFDB"] = True if F.poly().degree() == 1: data["isQQ"] = True F.latex_poly = web_latex(F.poly(var="t")) data["base_field"] = F data['embeddings'] = galmap['embeddings'] # change pairs of floats to complex numbers embed_strs = [] for el in galmap["embeddings"]: if el[1] < 0: el_str = str(el[0]) + str(el[1]) + r"\sqrt{-1}" else: el_str = str(el[0]) + "+" + str(el[1]) + r"\sqrt{-1}" embed_strs.append(el_str) data["embeddings_and_triples"] = [] self.triple = None self.embedding = None for i in range(0, len(data["triples_cyc"])): my_dict = {} triple_str = ', '.join(data['triples_cyc'][i]) triple_link = triple_str.replace(' ', '') if triple_link == triple: self.triple = data['triples_cyc'][i] self.embedding = CC(data['embeddings'][i]) my_dict['triple'] = triple_str my_dict['triple_link'] = triple_link if data["isQQ"]: my_dict[ 'embedding'] = r"\text{not applicable (over $\mathbb{Q}$)}" else: my_dict['embedding'] = embed_strs[i] data['embeddings_and_triples'].append(my_dict) crv_str = galmap["curve"] if crv_str == "PP1": data["curve"] = r"\mathbb{P}^1" else: data["curve"] = make_curve_latex(crv_str, nu=self.embedding) data["map"] = make_map_latex(galmap["map"], nu=self.embedding) data["lambdas"] = [str(c)[1:-1] for c in galmap["lambdas"]] # Properties self.plot = db.belyi_galmap_portraits.lucky({"label": galmap['label']}, projection="portrait") plot_link = '<a href="{0}"><img src="{0}" width="200" height="200" style="background-color: white;"/></a>'.format( self.plot) properties = [("Label", galmap["label"])] if triple: properties += [("Triple", "$%s$" % triple)] if self.plot: properties += [(None, plot_link)] properties += [ ("Group", str(galmap["group"])), ("Orders", "$%s$" % (data["abc"])), ("Genus", prop_int_pretty(data["g"])), ("Size", prop_int_pretty(data["orbit_size"])), ] self.properties = properties # Friends self.friends = [("Passport", url_for_belyi_passport_label(galmap["plabel"]))] if galmap['label'] != galmap['primitivization']: self.friends.append( ("Primitivization", url_for_belyi_galmap_label(galmap["primitivization"]))) self.friends.extend(names_and_urls(galmap['friends'])) #add curve link, if in LMFDB if 'curve_label' in galmap.keys(): data['curve_label'] = galmap['curve_label'] for name, url in self.friends: if "curve" in name.lower() and data['curve_label'] in name: data["curve_url"] = url # Downloads if galmap["g"] <= 2: data_label = data["label"] if triple: spl = data_label.split("-") data_label = "-".join(spl[0:-1]) self.downloads = [ ( "Code to Magma", url_for(".belyi_galmap_magma_download", label=data_label), ), ( "Code to SageMath", url_for(".belyi_galmap_sage_download", label=data_label), ), ( "All data to text", url_for(".belyi_galmap_text_download", label=data_label), ), ] else: self.downloads = [] # Breadcrumbs label_spl = data["label"].split("-") groupstr = label_spl[0] letnum = label_spl[2] gstr = str(data['g']) sigmas = label_spl[1] sigma0, sigma1, sigmaoo = sigmas.split("_") abcstr = str(data['abc']).replace(' ', '') # does lambdasstr need to be updated? lambdasstr = "%s-%s-%s" % (sigma0, sigma1, sigmaoo) lambdasgstr = lambdasstr + "-" + gstr self.bread = [ ("Belyi Maps", url_for(".index")), (groupstr, url_for(".by_url_belyi_search_group", group=groupstr)), ( abcstr, url_for(".by_url_belyi_search_group_triple", group=groupstr, abc=abcstr), ), ( lambdasgstr, url_for( ".by_url_belyi_passport_label", group=groupstr, abc=abcstr, sigma0=sigma0, sigma1=sigma1, sigmaoo=sigmaoo, g=gstr, ), ), ( letnum, url_for( ".by_url_belyi_galmap_label", group=groupstr, abc=abcstr, sigma0=sigma0, sigma1=sigma1, sigmaoo=sigmaoo, g=gstr, letnum=letnum, ), ), ] # Title if self.triple: self.title = "Embedded Belyi map " + data["label"] else: self.title = "Belyi map orbit " + data["label"] # Code snippets (only for curves) self.code = {} self.__dict__.update(data) return