{{{id=1| time M = ModularSymbols(Gamma1(29)) /// Time: CPU 0.10 s, Wall: 0.24 s }}} {{{id=2| M /// Modular Symbols space of dimension 71 for Gamma_1(29) of weight 2 with sign 0 and over Rational Field }}} {{{id=3| time S = M.cuspidal_submodule() /// Time: CPU 0.29 s, Wall: 0.34 s }}} {{{id=4| S /// Modular Symbols subspace of dimension 44 of Modular Symbols space of dimension 71 for Gamma_1(29) of weight 2 with sign 0 and over Rational Field }}} {{{id=5| time I = M.integral_structure() /// Time: CPU 0.05 s, Wall: 0.06 s }}} {{{id=138| # verify default structure happens to already be integral (by accident), which simplifies things. I.basis_matrix() == 1 /// True }}} {{{id=8| time db3 = S.diamond_bracket_operator(3).matrix() /// Time: CPU 0.09 s, Wall: 0.12 s }}} {{{id=9| db3.fcp() /// (x - 1)^4 * (x + 1)^4 * (x^6 + x^5 + x^4 + x^3 + x^2 + x + 1)^2 * (x^6 - x^5 + x^4 - x^3 + x^2 - x + 1)^4 }}} {{{id=12| def eta(ell): T = S.hecke_matrix(ell) dbd = S.diamond_bracket_operator(ell).matrix() return T - (1 + dbd * ell) /// }}} {{{id=14| eta(3).det().factor() /// 2^30 * 3^4 * 7^2 * 43^2 * 17837^2 }}} {{{id=15| eta(5).det().factor() /// 2^24 * 3^8 * 7^6 * 13^4 * 43^2 * 17837^2 }}} {{{id=19| time phi = S.integral_period_mapping() /// Time: CPU 1.44 s, Wall: 1.45 s }}} {{{id=20| phi(M.0).denominator().factor() /// 2^2 * 3 * 7^2 * 43 * 17837 }}} {{{id=23| E = End(ZZ^44) /// }}} {{{id=28| psi = E(eta(3)) /// }}} {{{id=29| Q0 = psi.codomain() / psi.image() /// }}} {{{id=30| Q0.cardinality().factor() /// 2^30 * 3^4 * 7^2 * 43^2 * 17837^2 }}} {{{id=32| Q0 /// Finitely generated module V/W over Integer Ring with invariants (4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 386563464, 386563464) }}}

Next chop $\ker(\eta_3)$ down using $\eta_5$.

{{{id=33| E0 = End(Q0); E0 /// Set of Morphisms from Finitely generated module V/W over Integer Ring with invariants (4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 386563464, 386563464) to Finitely generated module V/W over Integer Ring with invariants (4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 386563464, 386563464) in Category of modules over Integer Ring }}} {{{id=37| psi = E(eta(5)) /// }}} {{{id=39| im_gens = [Q0(psi(x.lift())) for x in Q0.gens()]; im_gens /// [(0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 193281732), (0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 193281732, 193281732), (0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 193281732, 0), (0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 193281732, 0), (0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 193281732, 0), (0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 193281732, 0), (0, 0, 0, 0, 2, 0, 4, 2, 0, 0, 193281732, 0), (0, 0, 0, 0, 0, 2, 6, 4, 0, 0, 289922598, 0), (2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 289922598, 193281732), (0, 0, 0, 0, 2, 2, 2, 4, 4, 2, 96640866, 96640866), (0, 0, 2, 0, 2, 2, 0, 2, 0, 0, 96640866, 0), (2, 0, 2, 2, 0, 2, 2, 4, 6, 0, 193281732, 0)] }}} {{{id=36| psi5 = Q0.hom(im_gens) /// }}} {{{id=35| E5 = psi5.kernel(); E5 /// Finitely generated module V/W over Integer Ring with invariants (2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 193281732, 193281732) }}} {{{id=41| psi = E(eta(7)) im_gens = [Q0(psi(x.lift())) for x in E5.gens()] psi_mod = E5.hom(im_gens) E7 = psi_mod.kernel() /// }}} {{{id=42| E7 /// Finitely generated module V/W over Integer Ring with invariants (2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 64427244, 64427244) }}} {{{id=43| E7.cardinality().factor() /// 2^18 * 3^2 * 7^2 * 43^2 * 17837^2 }}} {{{id=44| %time psi = E(eta(11)) im_gens = [Q0(psi(x.lift())) for x in E7.gens()] psi_mod = E7.hom(im_gens) E11 = psi_mod.kernel() /// CPU time: 1.62 s, Wall time: 1.64 s }}} {{{id=45| E11.cardinality().factor() /// 2^18 * 3^2 * 7^2 * 43^2 * 17837^2 }}} {{{id=46| eta(11).det().factor() /// 2^24 * 3^2 * 5^2 * 7^8 * 17^2 * 43^2 * 1933^2 * 17837^2 * 28547^2 }}} {{{id=50| /// }}} {{{id=49| M = ModularSymbols(Gamma1(29), sign=1) S = M.cuspidal_subspace() /// }}} {{{id=57| dbd = lambda d: S.diamond_bracket_operator(d).matrix() /// }}} {{{id=48| eta = lambda ell: (S.hecke_matrix(ell) - (1 + dbd(ell)*ell)) /// }}} {{{id=71| for ell in primes(3,24): print ell, eta(ell).det().factor() /// 3 2^15 * 3^2 * 7 * 43 * 17837 5 2^12 * 3^4 * 7^3 * 13^2 * 43 * 17837 7 2^17 * 3^2 * 7 * 43^2 * 113 * 463 * 17837 11 2^12 * 3 * 5 * 7^4 * 17 * 43 * 1933 * 17837 * 28547 13 2^12 * 3^2 * 5^2 * 7 * 31 * 43 * 2521 * 17837 * 7334699 17 2^17 * 3 * 7^2 * 13^2 * 23 * 43^2 * 71 * 83^2 * 659 * 17837 19 2^19 * 3^4 * 7^3 * 29 * 43 * 281 * 17837 * 100095451 23 2^22 * 3^4 * 7 * 23 * 43 * 9157 * 17837 * 2651342387 }}} {{{id=47| factor(gcd([ZZ(eta(ell).det()) for ell in [3,5,7,11]])) /// 2^12 * 3 * 7 * 43 * 17837 }}} {{{id=55| factor(gcd([ZZ(eta(ell).det()) for ell in [3,5,7,11,13,17,19,23]])) /// 2^12 * 3 * 7 * 43 * 17837 }}} {{{id=144| /// }}} {{{id=143| /// }}} {{{id=142| /// }}} {{{id=65| M = ModularSymbols(Gamma1(29)) S = M.cuspidal_subspace() SZ = S.integral_structure() assert S.free_module().basis_matrix() == SZ.basis_matrix() /// }}} {{{id=59| dbd = lambda d: S.diamond_bracket_operator(d).matrix() eta0 = lambda ell: (S.hecke_matrix(ell) - (1 + dbd(ell)*ell)) eta = lambda ell: eta0(ell).change_ring(ZZ) /// }}} {{{id=68| E = End(ZZ^S.dimension()) phi = E(eta(3)) Q3 = phi.codomain() / phi.image() Q3.invariants(), Q3.cardinality().factor() /// ((4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 386563464, 386563464), 2^30 * 3^4 * 7^2 * 43^2 * 17837^2) }}} {{{id=67| phi5 = E(eta(5)) psi5 = Q3.hom([Q3(phi5(x.lift())) for x in Q3.gens()]) Q5 = psi5.kernel() Q5.invariants(), Q5.cardinality().factor() /// ((2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 193281732, 193281732), 2^18 * 3^4 * 7^2 * 43^2 * 17837^2) }}} {{{id=66| phi7 = E(eta(7)) psi7 = Q5.hom([Q5(phi7(x.lift())) for x in Q5.gens()]) Q7 = psi7.kernel() Q7.invariants(), Q7.cardinality().factor() /// ((2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 64427244, 64427244), 2^18 * 3^2 * 7^2 * 43^2 * 17837^2) }}} {{{id=82| t = E(S.star_involution().matrix() - 1) T = Q7.hom([Q7(t(x.lift())) for x in Q7.gens()]) Q7plus = T.kernel() Q7plus.invariants(), Q7plus.cardinality().factor() /// ((2, 2, 2, 4, 4, 64427244), 2^9 * 3 * 7 * 43 * 17837) }}}

Is Q7 cuspidal???   To decide, we explicitly find the module in rational homodule the defines Q7.    Modular symbols allow us to compute the modular symbol module in a similar way.  We then just test for inclusion.

{{{id=96| A = eta(3)^(-1) /// }}} {{{id=92| W3 = A.row_module(ZZ) W3 /// Free module of degree 44 and rank 44 over Integer Ring Echelon basis matrix: 44 x 44 dense matrix over Rational Field }}} {{{id=91| factor((ZZ^44).index_in(W3)) /// 2^30 * 3^4 * 7^2 * 43^2 * 17837^2 }}} {{{id=100| Ws = [(eta(ell)^(-1)).row_module(ZZ) for ell in [3,5,7]] W = Ws[0].intersection(Ws[1]).intersection(Ws[2]) /// }}} {{{id=127| Q = W/ZZ^44 s_mat = S.star_involution().matrix() - 1 im_gens = [Q(x.lift()*s_mat) for x in Q.gens()] /// }}} {{{id=126| Q.hom(im_gens).kernel().cardinality().factor() /// 2^9 * 3 * 7 * 43 * 17837 }}} {{{id=147| Q.hom(im_gens).kernel() /// Finitely generated module V/W over Integer Ring with invariants (2, 2, 2, 4, 4, 64427244) }}} {{{id=146| Q /// Finitely generated module V/W over Integer Ring with invariants (2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 64427244, 64427244) }}} {{{id=128| Q.cardinality().factor() /// 2^18 * 3^2 * 7^2 * 43^2 * 17837^2 }}} {{{id=125| /// }}}

A double check (which works):

{{{id=98| factor((ZZ^44).index_in(W)) /// 2^18 * 3^2 * 7^2 * 43^2 * 17837^2 }}}

Now find the modular symbols module.

{{{id=106| pi = S.projection() /// Traceback (most recent call last): File "", line 1, in File "_sage_input_346.py", line 10, in exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("cGkgPSBTLnByb2plY3Rpb24oKQ=="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))' + '\n', '', 'single') File "", line 1, in File "/private/var/folders/7y/7y-O1iZOGTmMUMnLq7otq++++TI/-Tmp-/tmpJFJBF_/___code___.py", line 2, in exec compile(u'pi = S.projection()' + '\n', '', 'single') File "", line 1, in File "/Users/wstein/sage/install/current/local/lib/python2.6/site-packages/sage/modular/hecke/module.py", line 1512, in projection "for decomposition factors." NotImplementedError: Computation of projection only implemented for decomposition factors. }}}

So we have to code projection by hand.  We just concate our choice of basis for the cuspidal subspace with any basis for eisenstein subspace.  Projection is "write in terms of this basis, then forget eisenstein part".

{{{id=103| V = M.free_module() V0 = V.span_of_basis(S.free_module().basis() + M.eisenstein_submodule().free_module().basis()) pi = lambda x: V0.coordinates(x.element())[:44] /// }}} {{{id=102| pi(M.0) /// [9/2107, 1192179/37582559, 10963823/225495354, 906229/112747677, 1407997/75165118, -468991/112747677, -12608/112747677, -2206123/112747677, 115/17837, 323957/75165118, 12929755/225495354, 7162025/450990708, 8615135/450990708, 1945957/225495354, -4681396/112747677, 4366816/112747677, 9126149/225495354, -1020854/37582559, -433298/37582559, 8257933/112747677, 468991/112747677, 130839/75165118, -40903/112747677, 3247555/150330236, -3438478/112747677, 128705/2300973, -136077/5368937, 3438478/112747677, -29764403/450990708, 4362985/225495354, 11884751/225495354, 4077139/112747677, 9/2107, -4681396/112747677, -1195906/112747677, 12060235/112747677, 8829451/450990708, -9975409/450990708, 2536271/150330236, -1990741/150330236, -411/17837, -2510163/75165118, -11639435/225495354, -205533/10737874] }}} {{{id=109| C = (QQ^44).span([pi(x) for x in M.gens()], ZZ) /// }}}

The order of the cuspidal subgroup...

{{{id=108| factor((ZZ^44).index_in(C)) /// 2^12 * 3^2 * 7^2 * 43^2 * 17837^2 }}} {{{id=111| W.index_in(C) /// 1/64 }}} {{{id=145| C.is_submodule(W) /// False }}}

Ouch; so it turns out W is not cuspidal.  Annoying, but not surprising (?). But maybe we can also use * involution to cut down to the real part?

{{{id=101| factor(C.intersection(W).index_in(W)) /// 2^9 * 3 * 7 * 43 * 17837 }}} {{{id=117| factor(W.intersection(C).index_in(C)) /// 2^3 * 3 * 7 * 43 * 17837 }}} {{{id=148| W.is_submodule(C) /// False }}} {{{id=119| plus = (S.star_involution().matrix().change_ring(QQ) - 1).kernel(); plus /// Vector space of degree 44 and dimension 22 over Rational Field Basis matrix: 22 x 44 dense matrix over Rational Field }}} {{{id=115| Wplus = W.intersection(plus) + ZZ^44; Wplus /// Free module of degree 44 and rank 44 over Integer Ring Echelon basis matrix: 44 x 44 dense matrix over Rational Field }}} {{{id=149| Wplus.is_submodule(C) /// True }}}

FUCK YEAH!

{{{id=123| factor(Wplus.index_in(C)) /// 2^3 * 3 * 7 * 43 * 17837 }}} {{{id=122| factor((ZZ^44).index_in(Wplus)) /// 2^9 * 3 * 7 * 43 * 17837 }}}

Conclusion:  The above means that $T \subset J(\RR)[\eta_3, \eta_5, \eta_7] \subset C$.  This implies that $T=C(\QQ)$, as claimed.

{{{id=152| /// }}} {{{id=151| /// }}} {{{id=150| /// }}}

Issues...

{{{id=131| s = S.star_involution().matrix().change_ring(ZZ) /// }}} {{{id=134| A = (s-1).kernel(); B = (s+1).kernel() /// }}} {{{id=137| (A+B).index_in(ZZ^44) /// 4194304 }}} {{{id=130| f = End(ZZ^44)(s-1); f /// Free module morphism defined by the matrix (not printing 44 x 44 matrix) Domain: Ambient free module of rank 44 over the principal ideal domain ... Codomain: Ambient free module of rank 44 over the principal ideal domain ... }}} {{{id=129| f.codomain()/f.image() /// Finitely generated module V/W over Integer Ring with invariants (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) }}} {{{id=133| (s-1).change_ring(GF(2)).rank() /// 22 }}} {{{id=121| /// }}} {{{id=90| /// }}} {{{id=64| phi11 = E(eta(11)) psi11 = Q7.hom([Q7(phi11(x.lift())) for x in Q7.gens()]) Q11 = psi11.kernel() Q11.invariants(), Q11.cardinality().factor() /// ((2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 64427244, 64427244), 2^18 * 3^2 * 7^2 * 43^2 * 17837^2) }}} {{{id=70| phi13 = E(eta(13)) psi13 = Q11.hom([Q11(phi13(x.lift())) for x in Q11.gens()]) Q13 = psi13.kernel() Q13.invariants(), Q13.cardinality().factor() /// ((2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 64427244, 64427244), 2^18 * 3^2 * 7^2 * 43^2 * 17837^2) }}} {{{id=72| phi17 = E(eta(17)) psi17 = Q13.hom([Q13(phi17(x.lift())) for x in Q13.gens()]) Q17 = psi17.kernel() Q17.invariants(), Q17.cardinality().factor() /// ((2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 64427244, 64427244), 2^18 * 3^2 * 7^2 * 43^2 * 17837^2) }}} {{{id=75| t = E(S.star_involution().matrix() - 1) T = Q17.hom([Q17(t(x.lift())) for x in Q17.gens()]) Q17plus = T.kernel() Q17plus.invariants(), Q17plus.cardinality().factor() /// ((2, 2, 2, 4, 4, 64427244), 2^9 * 3 * 7 * 43 * 17837) }}} {{{id=76| factor(64427244) /// 2^2 * 3 * 7 * 43 * 17837 }}} {{{id=79| phi2 = E(eta(2)) psi2 = Q17plus.hom([Q17plus(phi2(x.lift())) for x in Q17plus.gens()]) Q02 = psi2.kernel() /// }}} {{{id=81| Q17plus.V().1 /// (0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 3, 23, 0, 1, 1, 0, 1, 0, 0, 0, 100655855) }}} {{{id=80| psi2 /// Traceback (most recent call last): File "", line 1, in File "_sage_input_283.py", line 10, in exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("cHNpMg=="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))' + '\n', '', 'single') File "", line 1, in File "/private/var/folders/7y/7y-O1iZOGTmMUMnLq7otq++++TI/-Tmp-/tmpiT4Tga/___code___.py", line 2, in exec compile(u'psi2' + '\n', '', 'single') File "", line 1, in NameError: name 'psi2' is not defined }}} {{{id=77| Q02.invariants(), Q02.cardinality().factor() /// ^C/site-packages/sage/modules/fg_pid/fgp_module.py", line 1423, in _hom_from_smith M, _ = self.optimized() __SAGE__ }}} {{{id=154| /// }}} {{{id=157| /// }}}

Just try to do above as directly as we can.

{{{id=156| M = ModularSymbols(Gamma1(29)) S = M.cuspidal_subspace() SZ = S.integral_structure() assert S.free_module().basis_matrix() == SZ.basis_matrix() dbd = lambda d: S.diamond_bracket_operator(d).matrix() eta0 = lambda ell: (S.hecke_matrix(ell) - (1 + dbd(ell)*ell)) eta = lambda ell: eta0(ell).change_ring(ZZ) /// }}} {{{id=162| def cuspidal_subgroup(): n = S.dimension() V = M.free_module() V0 = V.span_of_basis(S.free_module().basis() + M.eisenstein_submodule().free_module().basis()) pi = lambda x: V0.coordinates(x.element())[:n] C = (QQ^n).span([pi(x) for x in M.gens()], ZZ) return C /// }}} {{{id=159| def computeW(primes): W = None for ell in primes: V = (eta(ell)^(-1)).row_module(ZZ) if W is None: W = V else: W = W.intersection(V) return W /// }}} {{{id=155| W = computeW([3]) /// }}} {{{id=160| def plus_part(X): P = (S.star_involution().matrix().change_ring(QQ) - 1).kernel() return X.intersection(P) + ZZ^S.dimension() /// }}} {{{id=78| Wplus = plus_part(W) /// }}} {{{id=163| C = cuspidal_subgroup() /// }}} {{{id=161| Wplus.is_submodule(C) /// False }}} {{{id=164| plus_part(computeW([3,5])).is_submodule(C) /// False }}} {{{id=165| plus_part(computeW([3,5,7])).is_submodule(C) /// True }}} {{{id=167| plus_part(computeW([5,7])).is_submodule(C) /// True }}} {{{id=172| /// }}}

Write code that works for any $p$?

{{{id=171| class TorGroup: def __init__(self, p, assume_integral=False): self.p = p t = cputime(); self.M = ModularSymbols(Gamma1(p)); print "got M", cputime(t) t = cputime(); self.S = self.M.cuspidal_subspace(); print "got S", cputime(t) if assume_integral: self.is_integral = True else: t = cputime(); self.SZ = self.S.integral_structure(); print "got S_Z", cputime(t) self.is_integral = (self.S.free_module().basis_matrix() == self.SZ.basis_matrix()) def change_basis(self, A): if self.is_integral: return A else: return A.restrict(self.SZ) def dbd(self, d): return self.change_basis(self.S.diamond_bracket_operator(d).matrix()) def eta(self, ell): z = (self.change_basis(self.S.hecke_matrix(ell)) - (1 + self.dbd(ell)*ell)) return z.change_ring(ZZ) def C_lattice(self): n = self.S.dimension() V = self.M.free_module() m = V.dimension() - n V0 = V.span_of_basis(self.S.free_module().basis() + self.M.eisenstein_submodule().free_module().basis()) if self.is_integral: pi = lambda x: V0.coordinates(x.element())[:n] else: pi = lambda x: self.SZ.coordinates(V0.coordinates(x.element())[:n] + [0]*m) C = (QQ^n).span([pi(x) for x in self.M.gens()], ZZ) return C def W_lattice(self, primes): W = None for ell in primes: V = (self.eta(ell)**(-1)).row_module(ZZ) if W is None: W = V else: W = W.intersection(V) return W def Wplus_lattice(self, primes): P = (self.change_basis(self.S.star_involution().matrix()).change_ring(QQ) - 1).kernel() W = self.W_lattice(primes) return W.intersection(P) + ZZ**self.S.dimension() /// }}} {{{id=170| time T = TorGroup(97, assume_integral=True) /// got M 0.0 got S 0.0 Time: CPU 0.00 s, Wall: 0.00 s }}} {{{id=181| T.is_integral /// True }}} {{{id=169| time Wplus = T.Wplus_lattice([3,5]); Wplus /// ^C Traceback (most recent call last): File "", line 1, in File "_sage_input_171.py", line 10, in exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("dGltZSBXcGx1cyA9IFQuV3BsdXNfbGF0dGljZShbMyw1XSk7IFdwbHVz"),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))' + '\n', '', 'single') File "", line 1, in File "/tmp/tmp6CcW_q/___code___.py", line 3, in exec compile(u'__time__=misc.cputime(); __wall__=misc.walltime(); Wplus = T.Wplus_lattice([_sage_const_3 ,_sage_const_5 ]); print "Time: CPU %.2f s, Wall: %.2f s"%(misc.cputime(__time__), misc.walltime(__wall__)); Wplus' + '\n', '', 'single') File "", line 1, in File "/tmp/tmpQMQI3B/___code___.py", line 50, in Wplus_lattice P = (self.change_basis(self.S.star_involution().matrix()).change_ring(QQ) - _sage_const_1 ).kernel() File "/home/wstein/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-packages/sage/modular/modsym/subspace.py", line 476, in star_involution self.__star_involution = S.restrict(self) File "/home/wstein/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-packages/sage/modules/matrix_morphism.py", line 741, in restrict A = self.matrix().restrict(V) File "matrix2.pyx", line 4169, in sage.matrix.matrix2.Matrix.restrict (sage/matrix/matrix2.c:21896) File "/home/wstein/sage/sage-4.7.2.alpha2/local/lib/python2.6/site-packages/sage/modules/free_module.py", line 6261, in coordinate_vector def coordinate_vector(self, v, check=True): KeyboardInterrupt __SAGE__ __SAGE__ KeyboardInterrupt __SAGE__ __SAGE__ KeyboardInterrupt __SAGE__ __SAGE__ KeyboardInterrupt __SAGE__ __SAGE__ KeyboardInterrupt __SAGE__ }}} {{{id=168| C = T.C_lattice() /// }}} {{{id=174| Wplus.is_submodule(C) /// True }}} {{{id=175| C/Wplus /// Finitely generated module V/W over Integer Ring with invariants (2, 2, 32213622) }}} {{{id=176| factor(32213622) /// 2 * 3 * 7 * 43 * 17837 }}} {{{id=177| time T = TorGroup(31) /// Time: CPU 0.29 s, Wall: 0.29 s }}} {{{id=182| T.is_integral /// True }}} {{{id=178| time Wplus = T.Wplus_lattice([3,5]); Wplus /// Time: CPU 2.29 s, Wall: 2.31 s Free module of degree 52 and rank 52 over Integer Ring Echelon basis matrix: 52 x 52 dense matrix over Rational Field }}} {{{id=179| time C = T.C_lattice(); C /// Time: CPU 1.53 s, Wall: 1.55 s Free module of degree 52 and rank 52 over Integer Ring Echelon basis matrix: 52 x 52 dense matrix over Rational Field }}} {{{id=180| Wplus.is_submodule(C) /// True }}} {{{id=183| C/Wplus /// Finitely generated module V/W over Integer Ring with invariants (10, 1772833370) }}} {{{id=184| Wplus/ZZ^(Wplus.degree()) /// Finitely generated module V/W over Integer Ring with invariants (10, 1772833370) }}} {{{id=185| time T = TorGroup(37) /// Time: CPU 1.30 s, Wall: 1.32 s }}} {{{id=186| /// }}}