Ejemplo n.º 1
0
def statement_simple(desc, g, str_field='K'):
    _index_dict_ = index_dictionary()
    factors_QQ = desc[_index_dict_['factors_QQ']]
    if len(factors_QQ) == 1:
        factor_QQ = factors_QQ[0]
        m = factor_QQ[_index_dict_['m']]
        disc = factor_QQ[_index_dict_['disc']]
        if m == 1 or disc != 1:
            return "simple"
    return "not simple"
Ejemplo n.º 2
0
def statement_gl2(desc, g, str_field='K'):
    _index_dict_ = index_dictionary()
    factors_QQ = desc[_index_dict_['factors_QQ']]
    dimsum = 0
    for factor_QQ in factors_QQ:
        dim_base = len(factor_QQ[_index_dict_['center']]) - 1
        dim_sqrt = factor_QQ[_index_dict_['d']] * factor_QQ[_index_dict_['m']]
        dimsum += dim_base * dim_sqrt
    if dimsum == g:
        return "of GL_2-type"
    return "not of GL_2-type"
Ejemplo n.º 3
0
def statement_factors_ZZ_index(factors_QQ, desc_ZZ, str_field='K'):
    _index_dict_ = index_dictionary()
    # TODO: Assumes g <= 3
    index = desc_ZZ[_index_dict_['index']]
    if len(factors_QQ) == 1:
        factor_QQ = factors_QQ[0]
        albert_type = factor_QQ[_index_dict_['albert_type']]
        m = factor_QQ[_index_dict_['m']]
        if albert_type == 'I' and m == 1:
            desc_field = factor_QQ[_index_dict_['center']]
            return pretty_print_ring(desc_field, index)
    return "Sub (End (J_%s) ox QQ, %s)" % (str_field, index)
Ejemplo n.º 4
0
def statement_eichler(desc, g, str_field='K'):
    _index_dict_ = index_dictionary()
    factors_QQ = desc[_index_dict_['factors_QQ']]
    desc_ZZ = desc[_index_dict_['desc_ZZ']]
    if len(factors_QQ) == 1:
        factor_QQ = factors_QQ[0]
        albert_type = factor_QQ[_index_dict_['albert_type']]
        is_eichler = desc_ZZ[_index_dict_['is_eichler']]
        if is_eichler == 1:
            return "(Eichler)"
        elif is_eichler == 0:
            return "(non-Eichler)"
    return ""
Ejemplo n.º 5
0
def statement_cm(desc, g, str_field='K'):
    _index_dict_ = index_dictionary()
    factors_QQ = desc[_index_dict_['factors_QQ']]
    dimsum = 0
    for factor_QQ in factors_QQ:
        albert_type = factor_QQ[_index_dict_['albert_type']]
        dim_base = len(factor_QQ[_index_dict_['center']]) - 1
        m = factor_QQ[_index_dict_['m']]
        if albert_type == 'IV':
            dimsum += dim_base * m
    if (dimsum // 2) == g:
        return "(CM)"
    return ""
Ejemplo n.º 6
0
def pretty_print_lattice_description(lat, g):
    _index_dict_ = index_dictionary()
    statements = []
    base = lat[_index_dict_['base'] - 1]
    entries = lat[_index_dict_['entries'] - 1]
    for entry in entries:
        statement = ''
        field = entry[_index_dict_['field'] - 1]
        statement += "Over subfield %s:\n" % pretty_print_field(field, base)
        structure = entry[_index_dict_['structure'] - 1]
        statement += statements_all(structure, g)
        statements.append(statement)
    return '\n\n'.join(statements)
Ejemplo n.º 7
0
def statement_endomorphisms_ZZ(desc, g, str_field='K'):
    _index_dict_ = index_dictionary()
    factors_QQ = desc[_index_dict_['factors_QQ']]
    desc_ZZ = desc[_index_dict_['desc_ZZ']]
    if desc_ZZ[_index_dict_['index']] == 1:
        statements = [
            statement_factor_ZZ_maximal(factor_QQ, desc_ZZ)
            for factor_QQ in factors_QQ
        ]
        statement = ' x '.join(statements)
    else:
        statement = statement_factors_ZZ_index(factors_QQ, desc_ZZ)
    return "End (J_%s):       " % str_field + statement
Ejemplo n.º 8
0
def statement_factor_ZZ_maximal(factor_QQ, desc_ZZ, str_field='K'):
    _index_dict_ = index_dictionary()
    # TODO: Assumes g <= 3
    albert_type = factor_QQ[_index_dict_['albert_type']]
    field_pretty = pretty_print_field(factor_QQ[_index_dict_['center']],
                                      [-1, 1])
    ring_pretty = pretty_print_ring(factor_QQ[_index_dict_['center']], 1)
    disc = factor_QQ[_index_dict_['disc']]
    m = factor_QQ[_index_dict_['m']]
    if albert_type == 'I' or albert_type == 'IV':
        if m == 1:
            return ring_pretty
        # TODO: Next line can be done in greater generality over PIDs, but to
        # found out whether we are in such a situation costs time, so omitted
        # for now.
        elif (disc == 1) and field_pretty == 'QQ':
            return 'M_%s (%s)' % (m, ring_pretty)
    return 'Max (%s)' % statement_factor_QQ(factor_QQ)
Ejemplo n.º 9
0
def statement_factor_QQ(factor_QQ):
    _index_dict_ = index_dictionary()
    # TODO: Assumes g <= 3, in general we need powers
    albert_type = factor_QQ[_index_dict_['albert_type']]
    d = factor_QQ[_index_dict_['d']]
    disc = factor_QQ[_index_dict_['disc']]
    m = factor_QQ[_index_dict_['m']]

    str_center = pretty_print_field(factor_QQ[_index_dict_['center']], [-1, 1])
    str_d = str(d)
    str_disc = str(disc)
    str_m = str(m)

    if albert_type == 'I':
        if m == 1:
            statement = str_center
        else:
            statement = "M_%s (%s)" % (str_m, str_center)

    elif albert_type == 'II':
        if d == 2:
            statement = "IndefQuat (%s, %s)" % (str_center, str_disc)
        else:
            statement = "IndefAlg_%s (%s, %s)" % (str_d, str_center, str_disc)

    elif albert_type == 'III':
        if d == 2:
            statement = "DefQuat (%s, %s)" % (str_center, str_disc)
        else:
            statement = "DefAlg_%s (%s, %s)" % (str_d, str_center, str_disc)

    elif albert_type == 'IV':
        if m == 1:
            statement = str_center
        elif d == 1 and m == 2:
            statement = "M_%s (%s)" % (str_m, str_center)
        elif m == 1 and d == 2:
            statement = "Quat (%s, %s)" % (str_center, str_disc)
        else:
            statement = "Alg_%s (%s, %s)" % (str_d, str_center, str_disc)

    return statement
Ejemplo n.º 10
0
def statement_factor_QQ(factor_QQ):
    _index_dict_ = index_dictionary()
    # TODO: Assumes g <= 3
    dim_sqrt = factor_QQ[_index_dict_['dim_sqrt']]
    disc = factor_QQ[_index_dict_['disc']]
    albert_type = factor_QQ[_index_dict_['albert_type']]
    str_center = pretty_print_field(factor_QQ[_index_dict_['center']], [-1, 1])
    str_dim_sqrt = str(dim_sqrt)
    str_disc = str(disc)

    if albert_type == 'I':
        if dim_sqrt == 1:
            statement = str_center
        else:
            statement = "M_%s (%s)" % (str_dim_sqrt, str_center)

    elif albert_type == 'II':
        if dim_sqrt == 2:
            statement = "IndefQuat (%s, %s)" % (str_center, str_disc)
        else:
            statement = "IndefAlg_%s (%s, %s)" % (str_dim_sqrt, str_center,
                                                  str_disc)

    elif albert_type == 'III':
        if dim_sqrt == 2:
            statement = "DefQuat (%s, %s)" % (str_center, str_disc)
        else:
            statement = "DefAlg_%s (%s, %s)" % (str_dim_sqrt, str_center,
                                                str_disc)

    elif albert_type == 'IV':
        if dim_sqrt == 1:
            statement = str_center
        elif disc == 1:
            statement = "M_%s (%s)" % (str_dim_sqrt, str_center)
        elif dim_sqrt == 2:
            statement = "Quat (%s, %s)" % (str_center, str_disc)
        else:
            statement = "Alg_%s (%s, %s)" % (str_dim_sqrt, str_center,
                                             str_disc)

    return statement
Ejemplo n.º 11
0
def statement_endomorphisms_QQ(desc, g, str_field='K'):
    _index_dict_ = index_dictionary()
    factors_QQ = desc[_index_dict_['factors_QQ']]
    statements = [statement_factor_QQ(factor_QQ) for factor_QQ in factors_QQ]
    statement = ' x '.join(statements)
    return "End (J_%s) ox QQ: " % str_field + statement
Ejemplo n.º 12
0
def statement_sato_tate_group(desc, g, str_field='K'):
    _index_dict_ = index_dictionary()
    sato_tate = desc[_index_dict_['sato_tate']]
    if sato_tate == "" or sato_tate == "undef":
        sato_tate = "not classified yet"
    return "Sato-Tate group: %s" % sato_tate
Ejemplo n.º 13
0
def statement_endomorphisms_RR(desc, g, str_field='K'):
    _index_dict_ = index_dictionary()
    return "End (J_%s) ox RR: %s" % (str_field, ' x '.join(
        desc[_index_dict_['desc_RR']]))