def degeneracy_matrix(self, p=None): """ Map from self to QuaterniocModule of level self/p. EXAMPLES:: sage: from sage.modular.hilbert.sqrt5_hmf import F, QuaternionicModule sage: H = QuaternionicModule(2*F.prime_above(31)); H Quaternionic module of dimension 4, level 10*a-4 (of norm 124=2^2*31) over QQ(sqrt(5)) sage: H.degeneracy_matrix(2) [1 0] [0 1] [0 1] [0 1] sage: H.degeneracy_matrix(F.prime_above(31)) [1] [1] [1] [1] sage: H.degeneracy_matrix() [1 0 1] [0 1 1] [0 1 1] [0 1 1] sage: H.degeneracy_matrix() is H.degeneracy_matrix() False sage: H.degeneracy_matrix(2) is H.degeneracy_matrix(2) True """ if self.level().is_prime(): return matrix(QQ, self.dimension(), 0, sparse=True) if self._degeneracy_matrices.has_key(p): return self._degeneracy_matrices[p] if p is None: A = None for p in prime_divisors(self._level): A = self.degeneracy_matrix(p) if A is None else A.augment(self.degeneracy_matrix(p)) A.set_immutable() self._degeneracy_matrices[None] = A return A p = sqrt5_ideal(p) if self._degeneracy_matrices.has_key(p): return self._degeneracy_matrices[p] d = self._icosians_mod_p1.degeneracy_matrix(p) d.set_immutable() self._degeneracy_matrices[p] = d return d
def degeneracy_matrix(self, p=None): if self.level().is_prime(): return matrix(QQ, self.dimension(), 0, sparse=True) if p is None: A = None for p in prime_divisors(self._level): if A is None: A = self.degeneracy_matrix(p) else: A = A.augment(self.degeneracy_matrix(p)) return A p = ideal(p) if self._degeneracy_matrices.has_key(p): return self._degeneracy_matrices[p] d = self._icosians_mod_p1.degeneracy_matrix(p) d.set_immutable() self._degeneracy_matrices[p] = d return d