Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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