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
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
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
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
def __init__(self, q): self._base_field = FieldFromInteger.from_q(q) self._q = q self._square_extension = SquareExtensionField.from_base_field( self._base_field)
def __init__(self, n, q): self._field = FieldFromInteger.from_q(q) self.n = n