def rotation_list(tilt, turn): from sage.functions.all import sin, cos return [ sin(tilt * pi / 180.0), sin(turn * pi / 180.0), cos(tilt * pi / 180.0), cos(turn * pi / 180.0) ]
def lam_minpoly(self): r""" Return the minimal polynomial of the corresponding lambda parameter of ``self``. EXAMPLES:: sage: from sage.modular.modform_hecketriangle.hecke_triangle_groups import HeckeTriangleGroup sage: HeckeTriangleGroup(10).lam_minpoly() x^4 - 5*x^2 + 5 sage: HeckeTriangleGroup(17).lam_minpoly() x^8 - x^7 - 7*x^6 + 6*x^5 + 15*x^4 - 10*x^3 - 10*x^2 + 4*x + 1 sage: HeckeTriangleGroup(infinity).lam_minpoly() x - 2 """ # TODO: Write an explicit (faster) implementation lam_symbolic = 2 * cos(pi / self._n) return coerce_AA(lam_symbolic).minpoly()
def lam_minpoly(self): r""" Return the minimal polynomial of the corresponding lambda parameter of ``self``. EXAMPLES:: sage: from sage.modular.modform_hecketriangle.hecke_triangle_groups import HeckeTriangleGroup sage: HeckeTriangleGroup(10).lam_minpoly() x^4 - 5*x^2 + 5 sage: HeckeTriangleGroup(17).lam_minpoly() x^8 - x^7 - 7*x^6 + 6*x^5 + 15*x^4 - 10*x^3 - 10*x^2 + 4*x + 1 sage: HeckeTriangleGroup(infinity).lam_minpoly() x - 2 """ # TODO: Write an explicit (faster) implementation lam_symbolic = 2*cos(pi/self._n) return coerce_AA(lam_symbolic).minpoly()
def __init__(self, n): r""" Hecke triangle group (2, n, infinity). Namely the von Dyck group corresponding to the triangle group with angles (pi/2, pi/n, 0). INPUT: - ``n`` - ``infinity`` or an integer greater or equal to ``3``. OUTPUT: The Hecke triangle group for the given parameter ``n``. EXAMPLES:: sage: from sage.modular.modform_hecketriangle.hecke_triangle_groups import HeckeTriangleGroup sage: G = HeckeTriangleGroup(12) sage: G Hecke triangle group for n = 12 sage: G.category() Category of groups """ self._n = n self.element_repr_method("default") if n in [3, infinity]: self._base_ring = ZZ self._lam = ZZ(1) if n == 3 else ZZ(2) else: lam_symbolic = 2 * cos(pi / n) K = NumberField(self.lam_minpoly(), 'lam', embedding=coerce_AA(lam_symbolic)) #self._base_ring = K.order(K.gens()) self._base_ring = K.maximal_order() self._lam = self._base_ring.gen(1) T = matrix(self._base_ring, [[1, self._lam], [0, 1]]) S = matrix(self._base_ring, [[0, -1], [1, 0]]) FinitelyGeneratedMatrixGroup_generic.__init__(self, ZZ(2), self._base_ring, [S, T])
def lam(self): r""" Return the parameter ``lambda`` of ``self``, where ``lambda`` is twice the real part of ``rho``, lying between ``1`` (when ``n=3``) and ``2`` (when ``n=infinity``). EXAMPLES:: sage: HeckeTriangleGroup(3).lam() 1 sage: HeckeTriangleGroup(4).lam()^2 2.000000000000000? sage: HeckeTriangleGroup(6).lam()^2 3.000000000000000? sage: HeckeTriangleGroup(10).lam() 1.902113032590308? """ return AA(2 * cos(pi/self._n))
def __init__(self, n): r""" Hecke triangle group (2, n, infinity). Namely the von Dyck group corresponding to the triangle group with angles (pi/2, pi/n, 0). INPUT: - ``n`` - ``infinity`` or an integer greater or equal to ``3``. OUTPUT: The Hecke triangle group for the given parameter ``n``. EXAMPLES:: sage: from sage.modular.modform_hecketriangle.hecke_triangle_groups import HeckeTriangleGroup sage: G = HeckeTriangleGroup(12) sage: G Hecke triangle group for n = 12 sage: G.category() Category of groups """ self._n = n self.element_repr_method("default") if n in [3, infinity]: self._base_ring = ZZ self._lam = ZZ(1) if n==3 else ZZ(2) else: lam_symbolic = 2*cos(pi/n) K = NumberField(self.lam_minpoly(), 'lam', embedding = coerce_AA(lam_symbolic)) #self._base_ring = K.order(K.gens()) self._base_ring = K.maximal_order() self._lam = self._base_ring.gen(1) T = matrix(self._base_ring, [[1,self._lam],[0,1]]) S = matrix(self._base_ring, [[0,-1],[1,0]]) FinitelyGeneratedMatrixGroup_generic.__init__(self, ZZ(2), self._base_ring, [S, T])
def dct(self): """ A discrete Cosine transform. EXAMPLES:: sage: J = list(range(5)) sage: A = [exp(-2*pi*i*I/5) for i in J] sage: s = IndexedSequence(A,J) sage: s.dct() Indexed sequence: [1/16*(sqrt(5) + I*sqrt(-2*sqrt(5) + 10) + ... indexed by [0, 1, 2, 3, 4] """ from sage.symbolic.constants import pi F = self.base_ring() ## elements must be coercible into RR J = self.index_object() ## must be = range(N) N = len(J) S = self.list() PI = F(pi) FT = [sum([S[i]*cos(2*PI*i/N) for i in J]) for j in J] return IndexedSequence(FT,J)
def dct(self): """ Implements a discrete Cosine transform EXAMPLES: sage: J = range(5) sage: A = [exp(-2*pi*i*I/5) for i in J] sage: s = IndexedSequence(A,J) sage: s.dct() <BLANKLINE> Indexed sequence: [1/4*(sqrt(5) - 1)*e^(-8/5*I*pi) + 1/4*(sqrt(5) - 1)*e^(-2/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-6/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-4/5*I*pi) + 1, 1/4*(sqrt(5) - 1)*e^(-8/5*I*pi) + 1/4*(sqrt(5) - 1)*e^(-2/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-6/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-4/5*I*pi) + 1, 1/4*(sqrt(5) - 1)*e^(-8/5*I*pi) + 1/4*(sqrt(5) - 1)*e^(-2/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-6/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-4/5*I*pi) + 1, 1/4*(sqrt(5) - 1)*e^(-8/5*I*pi) + 1/4*(sqrt(5) - 1)*e^(-2/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-6/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-4/5*I*pi) + 1, 1/4*(sqrt(5) - 1)*e^(-8/5*I*pi) + 1/4*(sqrt(5) - 1)*e^(-2/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-6/5*I*pi) - 1/4*(sqrt(5) + 1)*e^(-4/5*I*pi) + 1] indexed by [0, 1, 2, 3, 4] """ from sage.symbolic.constants import pi F = self.base_ring() ## elements must be coercible into RR J = self.index_object() ## must be = range(N) N = len(J) S = self.list() PI = F(pi) FT = [sum([S[i]*cos(2*PI*i/N) for i in J]) for j in J] return IndexedSequence(FT,J)
def rotation_list(tilt,turn): from sage.functions.all import sin, cos return [ sin(tilt*pi/180.0), sin(turn*pi/180.0), cos(tilt*pi/180.0), cos(turn*pi/180.0) ]