@@ -1352,7 +1352,7 @@ def _canonical_min_exp(self, min_exp, order_1):
13521352
13531353 return (min_exp , order_1 )
13541354
1355- def quasi_part_gens (self , r = None , min_exp = 0 , max_exp = infinity , order_1 = ZZ .zero ()):
1355+ def quasi_part_gens (self , r = None , min_exp = 0 , max_exp = infinity , order_1 = ZZ .zero ()) -> tuple :
13561356 r"""
13571357 Return a basis in ``self`` of the subspace of (quasi) weakly
13581358 holomorphic forms which satisfy the specified properties on
@@ -1391,35 +1391,38 @@ def quasi_part_gens(self, r=None, min_exp=0, max_exp=infinity, order_1=ZZ.zero()
13911391 sage: QF = QuasiWeakModularForms(n=8, k=10/3, ep=-1)
13921392 sage: QF.default_prec(1)
13931393 sage: QF.quasi_part_gens(min_exp=-1)
1394- [q^-1 + O(q), 1 + O(q), q^-1 - 9/(128*d) + O(q), 1 + O(q), q^-1 - 19/(64*d) + O(q), q^-1 + 1/(64*d) + O(q)]
1394+ (q^-1 + O(q), 1 + O(q), q^-1 - 9/(128*d) + O(q),
1395+ 1 + O(q), q^-1 - 19/(64*d) + O(q), q^-1 + 1/(64*d) + O(q))
13951396
13961397 sage: QF.quasi_part_gens(min_exp=-1, max_exp=-1)
1397- [q^-1 + O(q), q^-1 - 9/(128*d) + O(q), q^-1 - 19/(64*d) + O(q), q^-1 + 1/(64*d) + O(q)]
1398+ (q^-1 + O(q), q^-1 - 9/(128*d) + O(q),
1399+ q^-1 - 19/(64*d) + O(q), q^-1 + 1/(64*d) + O(q))
13981400 sage: QF.quasi_part_gens(min_exp=-2, r=1)
1399- [q^-2 - 9/(128*d)*q^-1 - 261/(131072*d^2) + O(q), q^-1 - 9/(128*d) + O(q), 1 + O(q)]
1401+ (q^-2 - 9/(128*d)*q^-1 - 261/(131072*d^2) + O(q),
1402+ q^-1 - 9/(128*d) + O(q), 1 + O(q))
14001403
14011404 sage: from sage.modular.modform_hecketriangle.space import ModularForms
14021405 sage: MF = ModularForms(k=36)
14031406 sage: MF.quasi_part_gens(min_exp=2)
1404- [ q^2 + 194184*q^4 + O(q^5), q^3 - 72*q^4 + O(q^5)]
1407+ ( q^2 + 194184*q^4 + O(q^5), q^3 - 72*q^4 + O(q^5))
14051408
14061409 sage: from sage.modular.modform_hecketriangle.space import QuasiModularForms
14071410 sage: MF = QuasiModularForms(n=5, k=6, ep=-1)
14081411 sage: MF.default_prec(2)
14091412 sage: MF.dimension()
14101413 3
14111414 sage: MF.quasi_part_gens(r=0)
1412- [ 1 - 37/(200*d)*q + O(q^2)]
1415+ ( 1 - 37/(200*d)*q + O(q^2),)
14131416 sage: MF.quasi_part_gens(r=0)[0] == MF.E6()
14141417 True
14151418 sage: MF.quasi_part_gens(r=1)
1416- [ 1 + 33/(200*d)*q + O(q^2)]
1419+ ( 1 + 33/(200*d)*q + O(q^2),)
14171420 sage: MF.quasi_part_gens(r=1)[0] == MF.E2()*MF.E4()
14181421 True
14191422 sage: MF.quasi_part_gens(r=2)
1420- []
1423+ ()
14211424 sage: MF.quasi_part_gens(r=3)
1422- [ 1 - 27/(200*d)*q + O(q^2)]
1425+ ( 1 - 27/(200*d)*q + O(q^2),)
14231426 sage: MF.quasi_part_gens(r=3)[0] == MF.E2()^3
14241427 True
14251428
@@ -1429,18 +1432,18 @@ def quasi_part_gens(self, r=None, min_exp=0, max_exp=infinity, order_1=ZZ.zero()
14291432 sage: MF.dimension()
14301433 8
14311434 sage: MF.quasi_part_gens(r=0)
1432- [ q - 34743/(640000*d^2)*q^3 + O(q^4), q^2 - 69/(200*d)*q^3 + O(q^4)]
1435+ ( q - 34743/(640000*d^2)*q^3 + O(q^4), q^2 - 69/(200*d)*q^3 + O(q^4))
14331436 sage: MF.quasi_part_gens(r=1)
1434- [ q - 9/(200*d)*q^2 + 37633/(640000*d^2)*q^3 + O(q^4),
1435- q^2 + 1/(200*d)*q^3 + O(q^4)]
1437+ ( q - 9/(200*d)*q^2 + 37633/(640000*d^2)*q^3 + O(q^4),
1438+ q^2 + 1/(200*d)*q^3 + O(q^4))
14361439 sage: MF.quasi_part_gens(r=2)
1437- [ q - 1/(4*d)*q^2 - 24903/(640000*d^2)*q^3 + O(q^4)]
1440+ ( q - 1/(4*d)*q^2 - 24903/(640000*d^2)*q^3 + O(q^4),)
14381441 sage: MF.quasi_part_gens(r=3)
1439- [ q + 1/(10*d)*q^2 - 7263/(640000*d^2)*q^3 + O(q^4)]
1442+ ( q + 1/(10*d)*q^2 - 7263/(640000*d^2)*q^3 + O(q^4),)
14401443 sage: MF.quasi_part_gens(r=4)
1441- [ q - 11/(20*d)*q^2 + 53577/(640000*d^2)*q^3 + O(q^4)]
1444+ ( q - 11/(20*d)*q^2 + 53577/(640000*d^2)*q^3 + O(q^4),)
14421445 sage: MF.quasi_part_gens(r=5)
1443- [ q - 1/(5*d)*q^2 + 4017/(640000*d^2)*q^3 + O(q^4)]
1446+ ( q - 1/(5*d)*q^2 + 4017/(640000*d^2)*q^3 + O(q^4),)
14441447
14451448 sage: MF.quasi_part_gens(r=1)[0] == MF.E2() * CuspForms(n=5, k=16, ep=1).gen(0)
14461449 True
@@ -1453,64 +1456,61 @@ def quasi_part_gens(self, r=None, min_exp=0, max_exp=infinity, order_1=ZZ.zero()
14531456 sage: MF.quasi_part_gens(r=1, min_exp=-2) == MF.quasi_part_gens(r=1, min_exp=1)
14541457 True
14551458 sage: MF.quasi_part_gens(r=1)
1456- [ q - 8*q^2 - 8*q^3 + 5952*q^4 + O(q^5),
1459+ ( q - 8*q^2 - 8*q^3 + 5952*q^4 + O(q^5),
14571460 q^2 - 8*q^3 + 208*q^4 + O(q^5),
1458- q^3 - 16*q^4 + O(q^5)]
1461+ q^3 - 16*q^4 + O(q^5))
14591462
14601463 sage: MF = QuasiWeakModularForms(n=infinity, k=4, ep=1)
14611464 sage: MF.quasi_part_gens(r=2, min_exp=2, order_1=-2)[0] == MF.E2()^2 * MF.E4()^(-2) * MF.f_inf()^2
14621465 True
14631466 sage: [v.order_at(-1) for v in MF.quasi_part_gens(r=0, min_exp=2, order_1=-2)]
14641467 [-2, -2]
14651468 """
1466-
1467- if (not self .is_weakly_holomorphic ()):
1469+ if not self .is_weakly_holomorphic ():
14681470 from warnings import warn
14691471 warn ("This function only determines generators of (quasi) weakly modular forms!" )
14701472
1471- ( min_exp , order_1 ) = self ._canonical_min_exp (min_exp , order_1 )
1473+ min_exp , order_1 = self ._canonical_min_exp (min_exp , order_1 )
14721474
14731475 # For modular forms spaces the quasi parts are all zero except for r=0
1474- if ( self .is_modular () ):
1476+ if self .is_modular ():
14751477 r = ZZ (r )
1476- if ( r != 0 ) :
1477- return []
1478+ if r :
1479+ return ()
14781480
14791481 # The lower bounds on the powers of f_inf and E4 determine
14801482 # how large powers of E2 we can fit in...
14811483 n = self .hecke_n ()
1482- if ( n == infinity ) :
1484+ if n == infinity :
14831485 max_numerator_weight = self ._weight - 4 * min_exp - 4 * order_1 + 4
14841486 else :
14851487 max_numerator_weight = self ._weight - 4 * n / (n - 2 )* min_exp + 4
14861488
14871489 # If r is not specified we gather all generators for all possible r's
14881490 if r is None :
14891491 gens = []
1490- for rnew in range (QQ (max_numerator_weight / ZZ (2 )).floor () + 1 ):
1491- gens += self .quasi_part_gens (r = rnew , min_exp = min_exp , max_exp = max_exp , order_1 = order_1 )
1492- return gens
1492+ for rnew in range (QQ (max_numerator_weight / ZZ (2 )).floor () + 1 ):
1493+ gens . extend ( self .quasi_part_gens (r = rnew , min_exp = min_exp , max_exp = max_exp , order_1 = order_1 ) )
1494+ return tuple ( gens )
14931495
14941496 r = ZZ (r )
14951497 if r < 0 or 2 * r > max_numerator_weight :
1496- return []
1498+ return ()
14971499
14981500 E2 = self .E2 ()
1499- ambient_weak_space = self .graded_ring ().reduce_type ("weak" , degree = (self ._weight - QQ (2 * r ), self ._ep * (- 1 )** r ))
1501+ ambient_weak_space = self .graded_ring ().reduce_type ("weak" ,
1502+ degree = (self ._weight - QQ (2 * r ), self ._ep * (- 1 )** r ))
15001503 order_inf = ambient_weak_space ._l1 - order_1
15011504
1502- if ( max_exp == infinity ) :
1505+ if max_exp == infinity :
15031506 max_exp = order_inf
1504- elif ( max_exp < min_exp ) :
1505- return []
1507+ elif max_exp < min_exp :
1508+ return ()
15061509 else :
15071510 max_exp = min (ZZ (max_exp ), order_inf )
15081511
1509- gens = []
1510- for m in range (min_exp , max_exp + 1 ):
1511- gens += [ self (ambient_weak_space .F_basis (m , order_1 = order_1 )* E2 ** r ) ]
1512-
1513- return gens
1512+ return tuple (self (ambient_weak_space .F_basis (m , order_1 = order_1 ) * E2 ** r )
1513+ for m in range (min_exp , max_exp + 1 ))
15141514
15151515 def quasi_part_dimension (self , r = None , min_exp = 0 , max_exp = infinity , order_1 = ZZ .zero ()):
15161516 r"""
@@ -2096,7 +2096,7 @@ def q_basis(self, m=None, min_exp=0, order_1=ZZ.zero()):
20962096 q^-1 + O(q^5)
20972097
20982098 sage: MF = ModularForms(k=36)
2099- sage: MF.q_basis() == MF.gens()
2099+ sage: MF.q_basis() == list( MF.gens() )
21002100 True
21012101
21022102 sage: QF = QuasiModularForms(k=6)
@@ -2490,11 +2490,11 @@ def ambient_coordinate_vector(self, v):
24902490
24912491 return self .module ()(self .ambient_space ().coordinate_vector (v ))
24922492
2493- def gens (self ):
2493+ def gens (self ) -> tuple :
24942494 r"""
24952495 This method should be overloaded by subclasses.
24962496
2497- Return a basis of ``self``.
2497+ Return a basis of ``self`` as a tuple .
24982498
24992499 Note that the coordinate vector of elements of ``self``
25002500 are with respect to this basis.
@@ -2503,11 +2503,10 @@ def gens(self):
25032503
25042504 sage: from sage.modular.modform_hecketriangle.space import ModularForms
25052505 sage: ModularForms(k=12).gens() # defined in space.py
2506- [ 1 + 196560*q^2 + 16773120*q^3 + 398034000*q^4 + O(q^5),
2507- q - 24*q^2 + 252*q^3 - 1472*q^4 + O(q^5)]
2506+ ( 1 + 196560*q^2 + 16773120*q^3 + 398034000*q^4 + O(q^5),
2507+ q - 24*q^2 + 252*q^3 - 1472*q^4 + O(q^5))
25082508 """
2509-
2510- raise NotImplementedError ("No generators are implemented yet for {}!" .format (self ))
2509+ raise NotImplementedError (f"No generators are implemented yet for { self } !" )
25112510
25122511 def gen (self , k = 0 ):
25132512 r"""
0 commit comments