def completions(self, p, M): r""" If `K` is the base_ring of self, this function takes all maps `K-->Q_p` and applies them to self return a list of (modular symbol,map: `K-->Q_p`) as map varies over all such maps. .. NOTE:: This only returns all completions when `p` splits completely in `K` INPUT: - ``p`` -- prime - ``M`` -- precision OUTPUT: - A list of tuples (modular symbol,map: `K-->Q_p`) as map varies over all such maps EXAMPLES:: sage: from sage.modular.pollack_stevens.space import ps_modsym_from_simple_modsym_space sage: D = ModularSymbols(67,2,1).cuspidal_submodule().new_subspace().decomposition()[1] sage: f = ps_modsym_from_simple_modsym_space(D) sage: f.completions(41,10) [(Modular symbol with values in Sym^0 Q_41^2, Ring morphism: From: Number Field in alpha with defining polynomial x^2 + 3*x + 1 To: 41-adic Field with capped relative precision 10 Defn: alpha |--> 5 + 22*41 + 19*41^2 + 10*41^3 + 28*41^4 + 22*41^5 + 9*41^6 + 25*41^7 + 40*41^8 + 8*41^9 + O(41^10)), (Modular symbol with values in Sym^0 Q_41^2, Ring morphism: From: Number Field in alpha with defining polynomial x^2 + 3*x + 1 To: 41-adic Field with capped relative precision 10 Defn: alpha |--> 33 + 18*41 + 21*41^2 + 30*41^3 + 12*41^4 + 18*41^5 + 31*41^6 + 15*41^7 + 32*41^9 + O(41^10))] """ K = self.base_ring() f = K.defining_polynomial() R = Qp(p,M+10)['x'] x = R.gen() v = R(f).roots() if len(v) == 0: L = Qp(p,M).extension(f,names='a') a = L.gen() V = self.parent().change_ring(L) Dist = V.coefficient_module() psi = K.hom([K.gen()],L) embedded_sym = self.__class__(self._map.apply(psi,codomain=Dist, to_moments=True),V, construct=True) ans = [embedded_sym,psi] return ans #raise ValueError, "No coercion possible -- no prime over p has degree 1" else: roots = [r[0] for r in v] ans = [] V = self.parent().change_ring(Qp(p, M)) Dist = V.coefficient_module() for r in roots: psi = K.hom([r],Qp(p,M)) embedded_sym = self.__class__(self._map.apply(psi, codomain=Dist, to_moments=True), V, construct=True) ans.append((embedded_sym,psi)) return ans