def nu2(self): r""" Return the number of orbits of elliptic points of order 2 for this arithmetic subgroup. EXAMPLES:: sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup().nu2() Traceback (most recent call last): ... NotImplementedError sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup.nu2(Gamma0(1105)) == 8 True """ # Subgroups not containing -1 have no elliptic points of order 2. if not self.is_even(): return 0 # Cheap trick: if self is a subgroup of something with no elliptic points, # then self has no elliptic points either. from all import Gamma0, is_CongruenceSubgroup if is_CongruenceSubgroup(self): if self.is_subgroup(Gamma0(self.level())) and Gamma0( self.level()).nu2() == 0: return 0 # Otherwise, the number of elliptic points is the number of g in self \ # SL2Z such that the stabiliser of g * i in self is not trivial. (Note # that the points g*i for g in the coset reps are not distinct, but it # still works, since the failure of these points to be distinct happens # precisely when the preimages are not elliptic.) from all import SL2Z count = 0 for g in self.coset_reps(): if g * SL2Z([0, 1, -1, 0]) * (~g) in self: count += 1 return count
def nu2(self): r""" Return the number of orbits of elliptic points of order 2 for this arithmetic subgroup. EXAMPLES:: sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup().nu2() Traceback (most recent call last): ... NotImplementedError sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup.nu2(Gamma0(1105)) == 8 True """ # Subgroups not containing -1 have no elliptic points of order 2. if not self.is_even(): return 0 # Cheap trick: if self is a subgroup of something with no elliptic points, # then self has no elliptic points either. from all import Gamma0, is_CongruenceSubgroup if is_CongruenceSubgroup(self): if self.is_subgroup(Gamma0(self.level())) and Gamma0(self.level()).nu2() == 0: return 0 # Otherwise, the number of elliptic points is the number of g in self \ # SL2Z such that the stabiliser of g * i in self is not trivial. (Note # that the points g*i for g in the coset reps are not distinct, but it # still works, since the failure of these points to be distinct happens # precisely when the preimages are not elliptic.) from all import SL2Z count = 0 for g in self.coset_reps(): if g * SL2Z([0,1,-1,0]) * (~g) in self: count += 1 return count
def nu3(self): r""" Return the number of orbits of elliptic points of order 3 for this arithmetic subgroup. EXAMPLES:: sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup().nu3() Traceback (most recent call last): ... NotImplementedError sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup.nu3(Gamma0(1729)) == 8 True We test that a bug in handling of subgroups not containing -1 is fixed: :: sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup.nu3(GammaH(7, [2])) 2 """ # Cheap trick: if self is a subgroup of something with no elliptic points, # then self has no elliptic points either. from all import Gamma0, is_CongruenceSubgroup if is_CongruenceSubgroup(self): if self.is_subgroup(Gamma0(self.level())) and Gamma0( self.level()).nu3() == 0: return 0 from all import SL2Z count = 0 for g in self.coset_reps(): if g * SL2Z([0, 1, -1, -1]) * (~g) in self: count += 1 if self.is_even(): return count else: return count / 2
def nu3(self): r""" Return the number of orbits of elliptic points of order 3 for this arithmetic subgroup. EXAMPLES:: sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup().nu3() Traceback (most recent call last): ... NotImplementedError sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup.nu3(Gamma0(1729)) == 8 True We test that a bug in handling of subgroups not containing -1 is fixed: :: sage: sage.modular.arithgroup.arithgroup_generic.ArithmeticSubgroup.nu3(GammaH(7, [2])) 2 """ # Cheap trick: if self is a subgroup of something with no elliptic points, # then self has no elliptic points either. from all import Gamma0, is_CongruenceSubgroup if is_CongruenceSubgroup(self): if self.is_subgroup(Gamma0(self.level())) and Gamma0(self.level()).nu3() == 0: return 0 from all import SL2Z count = 0 for g in self.coset_reps(): if g * SL2Z([0,1,-1,-1]) * (~g) in self: count += 1 if self.is_even(): return count else: return count/2