コード例 #1
0
def get_pgl2q_cuspidal_characters(q):
    field = FieldFromInteger.from_q(q)
    square_field = SquareExtensionField.from_base_field(field)
    n2 = q + 1
    square_field_characters = [FieldCharacter(square_field, i, n2) for i in range(1, n2 // 2)]
    cuspidal_characters = [PGL2CuspidalCharacter(q, field_character) for field_character in square_field_characters]
    return cuspidal_characters
コード例 #2
0
def get_psl2q_characters(q) -> List[Character]:
    field = FieldFromInteger.from_q(q)
    standard_character = PSL2StandardCharacter(q)

    characters = list()
    characters.append(TrivialCharacter())
    characters.append(standard_character)

    n = q-1
    field_characters = [FieldCharacter(field, i, n) for i in range(2, n//2, 2)]
    normal_diagonalizable_characters = [PSL2DiagonalizableCharacter(q, field_character)
                                        for field_character in field_characters]
    characters.extend(normal_diagonalizable_characters)

    square_field = SquareExtensionField.from_base_field(field)
    n2 = q+1
    square_field_characters = [FieldCharacter(square_field, i, n2) for i in range(1, (n2//2+1)//2)]
    cuspidal_characters = [PSL2CuspidalCharacter(q, field_character)
                                        for field_character in square_field_characters]
    characters.extend(cuspidal_characters)

    if q % 4 == 1:
        oscillator_class = PSL2EvenOscillatorCharacter
    else:
        oscillator_class = PSL2OddOscillatorCharacter

    characters.append(oscillator_class(q, 1))
    characters.append(oscillator_class(q, -1))

    return characters
コード例 #3
0
def get_pgl2q_characters(q) -> List[Character]:
    field = FieldFromInteger.from_q(q)
    sign_character = PGL2SignCharacter()
    standard_character = PGL2StandardCharacter(q)
    characters = []
    characters.extend([
        TrivialCharacter(),
        sign_character,
        standard_character,
        ProductCharacter(standard_character, sign_character),
    ])

    n = q-1
    field_characters = [FieldCharacter(field, i, n) for i in range(1, n//2)]
    normal_diagonalizable_characters = [PGL2DiagonalizableCharacter(q, field_character)
                                        for field_character in field_characters]
    characters.extend(normal_diagonalizable_characters)

    cuspidal_characters = get_pgl2q_cuspidal_characters(q)
    characters.extend(cuspidal_characters)

    return characters
コード例 #4
0
def pxl2_lubotzky_prime_based_subset(q, p):
    assert (q % 4 == 1)
    assert (p % 4 == 1)
    assert (p != q)
    field = FieldFromInteger.from_q(q)
    pgl2 = PGL2(q)
    max_p_sqrt = int(p**0.5) + 1
    a_s = [(a, b, c, d) for a, (b, c, d) in product(
        range(1, max_p_sqrt, 2), product(range(0, max_p_sqrt, 2), repeat=3))
           if a * a + b * b + c * c + d * d == p]
    a_s += [(a, -b, c, d) for a, b, c, d in a_s]
    a_s += [(a, b, -c, d) for a, b, c, d in a_s]
    a_s += [(a, b, c, -d) for a, b, c, d in a_s]
    a_s = set(a_s)
    a_s = [(field.create_element(a), field.create_element(b),
            field.create_element(c), field.create_element(d))
           for a, b, c, d in a_s]
    i = (-field.one()).sqrt()
    matrices = [
        pgl2.create([[a + i * b, c + i * d], [-c + i * d, a - i * b]])
        for a, b, c, d in a_s
    ]
    return matrices
コード例 #5
0
 def __init__(self, q):
     self._base_field = FieldFromInteger.from_q(q)
     self._q = q
     self._square_extension = SquareExtensionField.from_base_field(
         self._base_field)
コード例 #6
0
 def __init__(self, n, q):
     self._field = FieldFromInteger.from_q(q)
     self.n = n