{ "cells": [ { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "def basis_holomorphic_differentials_degree(f, m, p):\n", " r = f.degree()\n", " delta = GCD(r, m)\n", " Rx. = PolynomialRing(GF(p))\n", " Rxy. = PolynomialRing(GF(p), 2)\n", " Fxy = FractionField(Rxy)\n", " #########basis of holomorphic differentials and de Rham\n", " \n", " basis_holo = []\n", " degrees0 = {}\n", " k = 0\n", " \n", " for j in range(1, m):\n", " for i in range(1, r):\n", " if (r*j - m*i >= delta):\n", " basis_holo += [Fxy(x^(i-1)/y^j)]\n", " degrees0[k] = (i-1, j)\n", " k = k+1\n", " \n", " return(basis_holo, degrees0)\n", "\n", "def holomorphic_differentials_basis(f, m, p):\n", " basis_holo, degrees0 = basis_holomorphic_differentials_degree(f, m, p)\n", " return basis_holo\n", " \n", "def degrees_holomorphic_differentials(f, m, p):\n", " basis_holo, degrees0 = basis_holomorphic_differentials_degree(f, m, p)\n", " return degrees0\n", " \n", "def basis_de_rham_degrees(f, m, p):\n", " r = f.degree()\n", " delta = GCD(r, m)\n", " Rx. = PolynomialRing(GF(p))\n", " Rxy. = PolynomialRing(GF(p), 2)\n", " Fxy = FractionField(Rxy)\n", " basis_holo = holomorphic_differentials_basis(f, m, p)\n", " basis = []\n", " for k in range(0, len(basis_holo)):\n", " basis += [(basis_holo[k], Rx(0))]\n", "\n", " ## non-holomorphic elts of H^1_dR\n", " t = len(basis)\n", " degrees0 = {}\n", " degrees1 = {}\n", " for j in range(1, m):\n", " for i in range(1, r):\n", " if (r*(m-j) - m*i >= delta): ####tu jest blad\n", " s = Rx(m-j)*Rx(x)*Rx(f.derivative()) - Rx(m)*Rx(i)*f\n", " psi = Rx(cut(s, i))\n", " basis += [(Fxy(psi/y^j), Fxy(m*y^(m-j)/x^i))]\n", " degrees0[t] = (psi.degree(), j)\n", " degrees1[t] = (-i, m-j)\n", " t += 1\n", " return basis, degrees0, degrees1\n", "\n", "def de_rham_basis(f, m, p):\n", " basis, degrees0, degrees1 = basis_de_rham_degrees(f, m, p)\n", " return basis\n", "\n", "def degrees_de_rham0(f, m, p):\n", " basis, degrees0, degrees1 = basis_de_rham_degrees(f, m, p)\n", " return degrees0\n", "\n", "def degrees_de_rham1(f, m, p):\n", " basis, degrees0, degrees1 = basis_de_rham_degrees(f, m, p)\n", " return degrees1 \n", "\n", "\n", "class superelliptic:\n", " \n", " def __init__(self, f, m, p):\n", " Rx. = PolynomialRing(GF(p))\n", " Rxy. = PolynomialRing(GF(p), 2)\n", " Fxy = FractionField(Rxy)\n", " self.polynomial = Rx(f)\n", " self.exponent = m\n", " self.characteristic = p\n", " \n", " r = Rx(f).degree()\n", " delta = GCD(r, m)\n", " self.degree_holo = degrees_holomorphic_differentials(f, m, p)\n", " self.degree_de_rham0 = degrees_de_rham0(f, m, p)\n", " self.degree_de_rham1 = degrees_de_rham1(f, m, p)\n", " \n", " holo_basis = holomorphic_differentials_basis(f, m, p)\n", " holo_basis_converted = []\n", " for a in holo_basis:\n", " holo_basis_converted += [superelliptic_form(self, a)]\n", " \n", " self.basis_holomorphic_differentials = holo_basis_converted\n", " \n", "\n", " dr_basis = de_rham_basis(f, m, p)\n", " dr_basis_converted = []\n", " for (a, b) in dr_basis:\n", " dr_basis_converted += [superelliptic_cech(self, superelliptic_form(self, a), superelliptic_function(self, b))]\n", " \n", " self.basis_de_rham = dr_basis_converted\n", " \n", " def __repr__(self):\n", " f = self.polynomial\n", " m = self.exponent\n", " p = self.characteristic\n", " return 'Superelliptic curve with the equation y^' + str(m) + ' = ' + str(f)+' over finite field with ' + str(p) + ' elements.'\n", " \n", " def is_smooth(self):\n", " f = self.polynomial\n", " if f.discriminant() == 0:\n", " return 0\n", " return 1\n", " \n", " def genus(self):\n", " r = self.polynomial.degree()\n", " m = self.exponent\n", " delta = GCD(r, m)\n", " return 1/2*((r-1)*(m-1) - delta + 1)\n", " \n", " def verschiebung_matrix(self):\n", " basis = self.basis_de_rham\n", " g = self.genus()\n", " p = self.characteristic\n", " M = matrix(GF(p), 2*g, 2*g)\n", " for i in range(0, len(basis)):\n", " w = basis[i]\n", " v = w.verschiebung().coordinates()\n", " M[i, :] = v\n", " return M\n", " \n", " def frobenius_matrix(self):\n", " basis = self.basis_de_rham\n", " g = self.genus()\n", " p = self.characteristic\n", " M = matrix(GF(p), 2*g, 2*g)\n", " \n", " for i in range(0, len(basis)):\n", " w = basis[i]\n", " v = w.frobenius().coordinates()\n", " M[i, :] = v\n", " return M\n", " \n", "def reduction(C, g):\n", " p = C.characteristic\n", " Rxy. = PolynomialRing(GF(p), 2)\n", " Fxy = FractionField(Rxy)\n", " f = C.polynomial\n", " r = f.degree()\n", " m = C.exponent\n", " g = Fxy(g)\n", " g1 = g.numerator()\n", " g2 = g.denominator()\n", " \n", " Rx. = PolynomialRing(GF(p))\n", " Fx = FractionField(Rx)\n", " FxRy. = PolynomialRing(Fx) \n", " (A, B, C) = xgcd(FxRy(g2), FxRy(y^m - f))\n", " g = FxRy(g1*B/A)\n", " \n", " while(g.degree(Rxy(y)) >= m):\n", " d = g.degree(Rxy(y))\n", " G = coff(g, d)\n", " i = floor(d/m)\n", " g = g - G*y^d + f^i * y^(d%m) *G\n", " \n", " return(FxRy(g))\n", "\n", "def reduction_form(C, g):\n", " p = C.characteristic\n", " Rxy. = PolynomialRing(GF(p), 2)\n", " Fxy = FractionField(Rxy)\n", " f = C.polynomial\n", " r = f.degree()\n", " m = C.exponent\n", " g = reduction(C, g)\n", "\n", " g1 = Rxy(0)\n", " Rx. = PolynomialRing(GF(p))\n", " Fx = FractionField(Rx)\n", " FxRy. = PolynomialRing(Fx)\n", " \n", " g = FxRy(g)\n", " for j in range(0, m):\n", " if j==0:\n", " G = coff(g, 0)\n", " g1 += FxRy(G)\n", " else:\n", " G = coff(g, j)\n", " g1 += Fxy(y^(j-m)*f*G)\n", " return(g1)\n", " \n", "class superelliptic_function:\n", " def __init__(self, C, g):\n", " p = C.characteristic\n", " Rxy. = PolynomialRing(GF(p), 2)\n", " Fxy = FractionField(Rxy)\n", " f = C.polynomial\n", " r = f.degree()\n", " m = C.exponent\n", " \n", " self.curve = C\n", " g = reduction(C, g)\n", " self.function = g\n", " \n", " def __repr__(self):\n", " return str(self.function)\n", " \n", " def jth_component(self, j):\n", " g = self.function\n", " C = self.curve\n", " p = C.characteristic\n", " Rx. = PolynomialRing(GF(p))\n", " Fx. = FractionField(Rx)\n", " FxRy. = PolynomialRing(Fx)\n", " g = FxRy(g)\n", " return coff(g, j)\n", " \n", " def __add__(self, other):\n", " C = self.curve\n", " g1 = self.function\n", " g2 = other.function\n", " g = reduction(C, g1 + g2)\n", " return superelliptic_function(C, g)\n", " \n", " def __sub__(self, other):\n", " C = self.curve\n", " g1 = self.function\n", " g2 = other.function\n", " g = reduction(C, g1 - g2)\n", " return superelliptic_function(C, g)\n", " \n", " def __mul__(self, other):\n", " C = self.curve\n", " g1 = self.function\n", " g2 = other.function\n", " g = reduction(C, g1 * g2)\n", " return superelliptic_function(C, g)\n", " \n", " def __truediv__(self, other):\n", " C = self.curve\n", " g1 = self.function\n", " g2 = other.function\n", " g = reduction(C, g1 / g2)\n", " return superelliptic_function(C, g)\n", " \n", "def diffn(self):\n", " C = self.curve\n", " f = C.polynomial\n", " m = C.exponent\n", " p = C.characteristic\n", " g = self.function\n", " Rxy. = PolynomialRing(GF(p), 2)\n", " Fxy = FractionField(Rxy)\n", " g = Fxy(g)\n", " A = g.derivative(x)\n", " B = g.derivative(y)*f.derivative(x)/(m*y^(m-1))\n", " return superelliptic_form(C, A+B)\n", " \n", "class superelliptic_form:\n", " def __init__(self, C, g):\n", " p = C.characteristic\n", " Rxy. = PolynomialRing(GF(p), 2)\n", " Fxy = FractionField(Rxy)\n", " g = Fxy(reduction_form(C, g))\n", " self.form = g\n", " self.curve = C \n", " \n", " def __add__(self, other):\n", " C = self.curve\n", " g1 = self.form\n", " g2 = other.form\n", " g = reduction(C, g1 + g2)\n", " return superelliptic_form(C, g)\n", " \n", " def __sub__(self, other):\n", " C = self.curve\n", " g1 = self.form\n", " g2 = other.form\n", " g = reduction(C, g1 - g2)\n", " return superelliptic_form(C, g)\n", " \n", " def __repr__(self):\n", " g = self.form\n", " if len(str(g)) == 1:\n", " return str(g) + ' dx'\n", " return '('+str(g) + ') dx'\n", " \n", " def cartier(self):\n", " C = self.curve\n", " m = C.exponent\n", " p = C.characteristic\n", " f = C.polynomial\n", " Rx. = PolynomialRing(GF(p))\n", " Fx = FractionField(Rx)\n", " FxRy. = PolynomialRing(Fx)\n", " Fxy = FractionField(FxRy)\n", " result = superelliptic_form(C, FxRy(0))\n", " mult_order = Integers(m)(p).multiplicative_order()\n", " M = Integer((p^(mult_order)-1)/m)\n", " \n", " for j in range(1, m):\n", " fct_j = self.jth_component(j)\n", " h = Rx(fct_j*f^(M*j))\n", " j1 = (p^(mult_order-1)*j)%m\n", " B = floor(p^(mult_order-1)*j/m)\n", " result += superelliptic_form(C, polynomial_part(p, h)/(f^B*y^(j1)))\n", " return result\n", " \n", " def jth_component(self, j):\n", " g = self.form\n", " C = self.curve\n", " p = C.characteristic\n", " Rx. = PolynomialRing(GF(p))\n", " Fx = FractionField(Rx)\n", " FxRy. = PolynomialRing(Fx)\n", " Fxy = FractionField(FxRy)\n", " Ryinv. = PolynomialRing(Fx)\n", " g = Fxy(g)\n", " g = g(y = 1/y_inv)\n", " g = Ryinv(g)\n", " return coff(g, j)\n", " \n", " def is_regular_on_U0(self):\n", " C = self.curve\n", " p = C.characteristic\n", " m = C.exponent\n", " Rx. = PolynomialRing(GF(p))\n", " for j in range(1, m):\n", " if self.jth_component(j) not in Rx:\n", " return 0\n", " return 1\n", " \n", " def is_regular_on_Uinfty(self):\n", " C = self.curve\n", " p = C.characteristic\n", " m = C.exponent\n", " f = C.polynomial\n", " r = f.degree()\n", " delta = GCD(m, r)\n", " M = m/delta\n", " R = r/delta\n", " \n", " for j in range(1, m):\n", " A = self.jth_component(j)\n", " d = degree_of_rational_fctn(A, p)\n", " if(-d*M + j*R -(M+1)<0):\n", " return 0\n", " return 1\n", " \n", " \n", "class superelliptic_cech:\n", " def __init__(self, C, omega, fct):\n", " self.omega0 = omega\n", " self.omega8 = omega - diffn(fct)\n", " self.f = fct\n", " self.curve = C\n", " \n", " def __add__(self, other):\n", " C = self.curve\n", " return superelliptic_cech(C, self.omega0 + other.omega0, self.f + other.f)\n", " \n", " def __sub__(self, other):\n", " C = self.curve\n", " return superelliptic_cech(C, self.omega0 - other.omega0, self.f - other.f)\n", " \n", " def mult(self, constant):\n", " C = self.curve\n", " w1 = self.omega0.form\n", " f1 = self.f.function\n", " w2 = superelliptic_form(C, constant*w1)\n", " f2 = superelliptic_function(C, constant*f1)\n", " return superelliptic_cech(C, w2, f2)\n", " \n", " def __repr__(self):\n", " return \"(\" + str(self.omega0) + \", \" + str(self.f) + \", \" + str(self.omega8) + \")\" \n", " \n", " def verschiebung(self):\n", " C = self.curve\n", " omega = self.omega0\n", " p = C.characteristic\n", " Rx. = PolynomialRing(GF(p))\n", " return superelliptic_cech(C, omega.cartier(), superelliptic_function(C, Rx(0)))\n", " \n", " def frobenius(self):\n", " C = self.curve\n", " fct = self.f.function\n", " p = C.characteristic\n", " Rx. = PolynomialRing(GF(p))\n", " return superelliptic_cech(C, superelliptic_form(C, Rx(0)), superelliptic_function(C, fct^p))\n", "\n", " def coordinates(self):\n", " C = self.curve\n", " p = C.characteristic\n", " m = C.exponent\n", " Rx. = PolynomialRing(GF(p))\n", " Fx = FractionField(Rx)\n", " FxRy. = PolynomialRing(Fx)\n", " g = C.genus()\n", " degrees_holo = C.degree_holo\n", " degrees_holo_inv = {b:a for a, b in degrees_holo.items()}\n", " degrees0 = C.degree_de_rham0\n", " degrees0_inv = {b:a for a, b in degrees0.items()}\n", " degrees1 = C.degree_de_rham1\n", " degrees1_inv = {b:a for a, b in degrees1.items()}\n", " basis = C.basis_de_rham\n", " \n", " omega = self.omega0\n", " fct = self.f\n", " \n", " if fct.function == Rx(0) and omega.form != Rx(0):\n", " for j in range(1, m):\n", " omega_j = Fx(omega.jth_component(j))\n", " if omega_j != Fx(0):\n", " d = degree_of_rational_fctn(omega_j, p)\n", " index = degrees_holo_inv[(d, j)]\n", " a = coeff_of_rational_fctn(omega_j, p)\n", " a1 = coeff_of_rational_fctn(basis[index].omega0.jth_component(j), p)\n", " elt = self - basis[index].mult(a/a1)\n", " return elt.coordinates() + a/a1*vector([GF(p)(i == index) for i in range(0, 2*g)])\n", " \n", " for j in range(1, m):\n", " fct_j = Fx(fct.jth_component(j))\n", " if (fct_j != Rx(0)):\n", " d = degree_of_rational_fctn(fct_j, p)\n", " \n", " if (d, j) in degrees1.values():\n", " index = degrees1_inv[(d, j)]\n", " a = coeff_of_rational_fctn(fct_j, p)\n", " elt = self - basis[index].mult(a/m)\n", " return elt.coordinates() + a/m*vector([GF(p)(i == index) for i in range(0, 2*g)])\n", " \n", " if d<0:\n", " a = coeff_of_rational_fctn(fct_j, p)\n", " h = superelliptic_function(C, FxRy(a*y^j*x^d))\n", " elt = superelliptic_cech(C, self.omega0, self.f - h)\n", " return elt.coordinates()\n", " \n", " if (fct_j != Rx(0)):\n", " G = superelliptic_function(C, y^j*x^d)\n", " a = coeff_of_rational_fctn(fct_j, p)\n", " elt =self - superelliptic_cech(C, diffn(G), G).mult(a)\n", " return elt.coordinates()\n", "\n", " return vector(2*g*[0])\n", " \n", " def is_cocycle(self):\n", " w0 = self.omega0\n", " w8 = self.omega8\n", " fct = self.f\n", " if not w0.is_regular_on_U0() and not w8.is_regular_on_Uinfty():\n", " return('w0 & w8')\n", " if not w0.is_regular_on_U0():\n", " return('w0')\n", " if not w8.is_regular_on_Uinfty():\n", " return('w8')\n", " if w0.is_regular_on_U0() and w8.is_regular_on_Uinfty():\n", " return 1\n", " return 0\n", " \n", "def degree_of_rational_fctn(f, p):\n", " Rx. = PolynomialRing(GF(p))\n", " Fx = FractionField(Rx)\n", " f = Fx(f)\n", " f1 = f.numerator()\n", " f2 = f.denominator()\n", " d1 = f1.degree()\n", " d2 = f2.degree()\n", " return(d1 - d2)\n", "\n", "def coeff_of_rational_fctn(f, p):\n", " Rx. = PolynomialRing(GF(p))\n", " Fx = FractionField(Rx)\n", " f = Fx(f)\n", " if f == Rx(0):\n", " return 0\n", " f1 = f.numerator()\n", " f2 = f.denominator()\n", " d1 = f1.degree()\n", " d2 = f2.degree()\n", " a1 = f1.coefficients(sparse = false)[d1]\n", " a2 = f2.coefficients(sparse = false)[d2]\n", " return(a1/a2)\n", "\n", "def coff(f, d):\n", " lista = f.coefficients(sparse = false)\n", " if len(lista) <= d:\n", " return 0\n", " return lista[d]\n", "\n", "def cut(f, i):\n", " R = f.parent()\n", " coeff = f.coefficients(sparse = false)\n", " return sum(R(x^(j-i-1)) * coeff[j] for j in range(i+1, f.degree() + 1))\n", "\n", "def polynomial_part(p, h):\n", " Rx. = PolynomialRing(GF(p))\n", " h = Rx(h)\n", " result = Rx(0)\n", " for i in range(0, h.degree()+1):\n", " if (i%p) == p-1:\n", " power = Integer((i-(p-1))/p)\n", " result += Integer(h[i]) * x^(power) \n", " return result" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "def preimage(U, V, M): #preimage of subspace U under M\n", " basis_preimage = M.right_kernel().basis()\n", " imageU = U.intersection(M.transpose().image())\n", " basis = imageU.basis()\n", " for v in basis:\n", " w = M.solve_right(v)\n", " basis_preimage = basis_preimage + [w]\n", " return V.subspace(basis_preimage)\n", "\n", "def image(U, V, M):\n", " basis = U.basis()\n", " basis_image = []\n", " for v in basis:\n", " basis_image += [M*v]\n", " return V.subspace(basis_image)\n", "\n", "def flag(F, V, p):\n", " dim = F.dimensions()[0]\n", " space = VectorSpace(GF(p), dim)\n", " flag_subspaces = (dim+1)*[0]\n", " flag_used = (dim+1)*[0]\n", " final_type = (dim+1)*[-1]\n", " \n", " flag_subspaces[dim] = space\n", " flag_used[dim] = 1\n", " \n", " \n", " while 1 in flag_used:\n", " index = flag_used.index(1)\n", " flag_used[index] = 0\n", " U = flag_subspaces[index]\n", " U_im = image(U, space, V)\n", " d_im = U_im.dimension()\n", " final_type[index] = d_im\n", " U_pre = preimage(U, space, F)\n", " d_pre = U_pre.dimension()\n", " \n", " if flag_subspaces[d_im] == 0:\n", " flag_subspaces[d_im] = U_im\n", " flag_used[d_im] = 1\n", " \n", " if flag_subspaces[d_pre] == 0:\n", " flag_subspaces[d_pre] = U_pre\n", " flag_used[d_pre] = 1\n", " \n", " for i in range(0, dim+1):\n", " if final_type[i] == -1 and final_type[dim - i] != -1:\n", " i1 = dim - i\n", " final_type[i] = final_type[i1] - i1 + dim/2\n", " print('test', final_type)\n", " \n", " final_type[0] = 0\n", " for i in range(1, dim+1):\n", " if final_type[i] == -1:\n", " final_type[i] = final_type[i-1] + 1\n", " \n", " if is_final(final_type, dim/2):\n", " return final_type[1:dim/2 + 1]\n", " return 'error'\n", " \n", "def is_final(final_type, dim):\n", " n = len(final_type)\n", " if final_type[0] != 0:\n", " return 0\n", " \n", " if final_type[n-1] != dim:\n", " return 0\n", " \n", " for i in range(1, n):\n", " if final_type[i] != final_type[i - 1] or final_type[i] != final_type[i - 1] + 1:\n", " return 0\n", " return 1" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 3\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "0 3 4 error\n", "0 4\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "0 4 4 error\n", "1 1\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "1 1 4 error\n", "1 2\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "1 2 4 error\n", "1 3\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "1 3 4 error\n", "2 0\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "2 0 4 error\n", "2 2\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "2 2 4 error\n", "2 3\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "2 3 4 error\n", "3 0\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "3 0 4 error\n", "3 1\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "3 1 4 error\n", "3 2\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "3 2 4 error\n", "3 4\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "3 4 4 error\n", "4 1\n", "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n", "4 1 4 error\n", "4 3\n", "test [0, 1, 1, 2, 3, 3, 3, 4, 4]\n", "4 3 4 error\n", "4 4\n", "test [0, -1, -1, 3, 3, 4, -1, -1, 4]\n", "4 4 4 error\n" ] } ], "source": [ "p = 5\n", "for a in range(0, p):\n", " for b in range(0, p):\n", " Rx. = PolynomialRing(GF(p))\n", " C = superelliptic(x^9+a*x^8+b*x^3+x^2+x+1, 2, p)\n", " if C.is_smooth():\n", " print(a, b)\n", " V = C.verschiebung_matrix()\n", " F = C.frobenius_matrix()\n", " print(a, b, V.rank(), flag(F, V, p))" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0: 1/y, 1: x/y, 2: x^2/y, 3: x^3/y}" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "holomorphic_differentials_basis(x^9+3*x^3+x^2+x+1, 2, 5)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0]\n" ] } ], "source": [ "Rx. = PolynomialRing(GF(5))\n", "C = superelliptic(x^9+3*x^3+x^2+x+1, 2, 5)\n", "F = C.frobenius_matrix()\n", "V = C.verschiebung_matrix()\n", "print(V*F)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n" ] }, { "data": { "text/plain": [ "'error'" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = 5\n", "flag(F, V, p)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C.genus()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4*x^9 + 4*x^3 + 2*x^2 + x\n", "4*x^9 + 2*x^3 + 4*x^2 + 4*x + 4\n" ] } ], "source": [ "f = x^9+3*x^3+x^2+x+1\n", "r = f.degree()\n", "i = 2\n", "j = 1\n", "m = 2\n", "print(Rx(m-j)*Rx(x)*Rx(f.derivative()))\n", "print(Rx(m)*Rx(i)*f)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9\n", "4\n", "4*x^8 + 4*x^2 + 2*x + 1\n" ] } ], "source": [ "print(r*(m-j))\n", "print(m*i)\n", "print(f.derivative())" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2*x^3 + 3*x^2 + 2*x + 1" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x*f.derivative() - 2*2*f" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Vector space of degree 2 and dimension 1 over Rational Field\n", "Basis matrix:\n", "[1 3]" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = matrix(QQ, [[1,2], [3,6]])\n", "U = M.kernel()\n", "V = VectorSpace(QQ,2)\n", "M.transpose().image()" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "l = U.basis()\n", "l = l +[(1, 1/3)]" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "###fragment kodu do obliczania residuuow w niesk - zaniechany\n", "#def more_v(f, prec):\n", "# C = f.curve\n", "# f = f.vw\n", "# g = C.polynomial8\n", "# p = C.characteristic\n", "# m = C.exponent\n", "# r = C.polynomial.degree()\n", "# delta, a, b = xgcd(m, r)\n", "# a = -a\n", "# M = m/delta\n", "# R = r/delta\n", "# \n", "# Fpbar = GF(p).algebraic_closure()\n", "# Ruv. = PolynomialRing(Fpbar, 2)\n", "# if prec == 0:\n", "# return 0\n", "# zeta = Fpbar.zeta(m)\n", "# a = f(v = zeta, w = 0)\n", "# f1 = f - a\n", "# if w.divides(f1):\n", "# return more_v(f1/w, prec-1)\n", " " ] }, { "cell_type": "code", "execution_count": 211, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "2\n" ] } ], "source": [ "p = 7\n", "Rx. = PolynomialRing(GF(p))\n", "C = superelliptic(x^3 + x + 3, 5, p)\n", "baza = C.basis_de_rham\n", "print(C.genus())\n", "#E = EllipticCurve(GF(p), [1, 2])\n", "print(E.trace_of_frobenius())\n", "#C.basis_holomorphic_differentials( )" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 212, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0: (0, 2),\n", " 1: (0, 3),\n", " 2: (0, 4),\n", " 3: (1, 4),\n", " 4: (-1, 1),\n", " 5: (0, 1),\n", " 6: (1, 2),\n", " 7: (1, 3)}" ] }, "execution_count": 212, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C.degree_de_rham0" ] }, { "cell_type": "code", "execution_count": 213, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "{0: ((1/y^2) dx, 0, (1/y^2) dx),\n", " 1: ((1/y^3) dx, 0, (1/y^3) dx),\n", " 2: ((1/y^4) dx, 0, (1/y^4) dx),\n", " 3: ((x/y^4) dx, 0, (x/y^4) dx),\n", " 4: (0 dx, 5/x*y^4, ((x + 1)/(x^2*y)) dx),\n", " 5: ((2/y) dx, 5/x^2*y^4, ((-x + 2)/(x^3*y)) dx),\n", " 6: (((-3*x)/y^2) dx, 5/x*y^3, ((2*x + 1)/(x^2*y^2)) dx),\n", " 7: ((x/y^3) dx, 5/x*y^2, ((3*x + 1)/(x^2*y^3)) dx)}" ] }, "execution_count": 213, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C.basis_de_rham" ] }, { "cell_type": "code", "execution_count": 214, "metadata": {}, "outputs": [], "source": [ "A = C.frobenius_matrix()\n", "B = C.verschiebung_matrix()" ] }, { "cell_type": "code", "execution_count": 227, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 0, 0, 4, 3, 0, 2, 0)" ] }, "execution_count": 227, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.solve_right((0, 0, 0, 0, 4, 2, 5, 3))" ] }, { "cell_type": "code", "execution_count": 228, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0, 0, 0, 0, 4, 2, 5, 3)" ] }, "execution_count": 228, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A*vector((1, 0, 0, 4, 3, 0, 2, 0))" ] }, { "cell_type": "code", "execution_count": 225, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 0, 0, 4, 3, -6, -5, -5)" ] }, "execution_count": 225, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vector((1, 0, 0, 4, 5, 0, 0, 0)) - vector((0, 0, 0, 0, 2, 6, 5, 5))" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "omega = diffn(superelliptic_function(C, y^2))" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3*x^2 + 1" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "omega.jth_component(0)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "y" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R. = PolynomialRing(GF(p), 2)\n", "g1 = x^3*y^7 + x^2*y^9\n", "g2 = x^2*y + y^6\n", "R1. = PolynomialRing(GF(p))\n", "R2 = FractionField(R1)\n", "R3. = PolynomialRing(R2)\n", "\n", "xgcd(R3(g1), R3(g2))[1]*R3(g1) + xgcd(R3(g1), R3(g2))[2]*R3(g2)" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [], "source": [ "H = HyperellipticCurve(x^5 - x + 1)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Hyperelliptic Curve over Finite Field of size 5 defined by y^2 = x^5 + 4*x + 1" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "H" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [], "source": [ "f = x^3 + x + 2" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-2*x^2 + 1" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f.derivative(x)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "p = 5\n", "R1. = PolynomialRing(GF(p))\n", "R2 = FractionField(R1)\n", "R3. = PolynomialRing(R2)\n", "g = y^2/x + y/(x+1) \n", "g = 1/y+x/y^2" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "x*z^2 + z" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R3. = PolynomialRing(R2)\n", "g(y = 1/z)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "x^3 + x + 4" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "'sage.rings.polynomial.polynomial_zmod_flint.Polynomial_zmod_flint' object has no attribute 'coefficient'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoefficient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/structure/element.pyx\u001b[0m in \u001b[0;36msage.structure.element.Element.__getattr__ (build/cythonized/sage/structure/element.c:4614)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 485\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'LeftZeroSemigroup_with_category.element_class'\u001b[0m \u001b[0mobject\u001b[0m \u001b[0mhas\u001b[0m \u001b[0mno\u001b[0m \u001b[0mattribute\u001b[0m \u001b[0;34m'blah_blah'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 486\u001b[0m \"\"\"\n\u001b[0;32m--> 487\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetattr_from_category\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 488\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 489\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mgetattr_from_category\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/structure/element.pyx\u001b[0m in \u001b[0;36msage.structure.element.Element.getattr_from_category (build/cythonized/sage/structure/element.c:4723)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 498\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 499\u001b[0m \u001b[0mcls\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mP\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_abstract_element_class\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 500\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgetattr_from_other_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 501\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 502\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__dir__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/cpython/getattr.pyx\u001b[0m in \u001b[0;36msage.cpython.getattr.getattr_from_other_class (build/cythonized/sage/cpython/getattr.c:2614)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 392\u001b[0m \u001b[0mdummy_error_message\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcls\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 393\u001b[0m \u001b[0mdummy_error_message\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 394\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdummy_error_message\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 395\u001b[0m \u001b[0mattribute\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m<\u001b[0m\u001b[0mobject\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0mattr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 396\u001b[0m \u001b[0;31m# Check for a descriptor (__get__ in Python)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mAttributeError\u001b[0m: 'sage.rings.polynomial.polynomial_zmod_flint.Polynomial_zmod_flint' object has no attribute 'coefficient'" ] } ], "source": [ "f.coefficient()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "x^3 + x + 1" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x^3+x+1" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Symbolic Ring" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parent(x)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "R. = PolynomialRing(GF(5))" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "R = (x^3+x).parent()" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "R. = PolynomialRing(GF(5))\n", "RR = FractionField(R)\n", "A = RR(1/(x*y))" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-1)/(x^2*y)" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.derivative(x)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "dict1 = {}\n", "dict1[3] = 5\n", "dict1[6] = 121" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "degrees1_inv = {b:a for a, b in dict1.items()}" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{5: 3, 121: 6}" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "degrees1_inv" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Superelliptic curve with the equation y^7 = x^3 + x + 2 over finite field with 5 elements." ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "basis = C.basis_de_rham()" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_items([(0, ((x/y) dx, 2/x*y, ((x^3*y^5 - x^3 + x - 1)/(x^2*y^6)) dx)), (1, (((-1)/y) dx, 2/x^2*y, ((-x^3*y^5 + x^3 - 2*x - 2)/(x^3*y^6)) dx)), (2, (((-2*x)/y^2) dx, 2/x*y^2, ((-2*x^3*y^3 + x^3 - 1)/(x^2*y^5)) dx)), (3, ((1/y^2) dx, 2/x^2*y^2, ((x^3*y^3 - 2*x^3 + 2*x - 2)/(x^3*y^5)) dx)), (4, ((1/y^3) dx, 0, (1/y^3) dx)), (5, (0 dx, 2/x*y^3, ((-2*x^3 - x - 1)/(x^2*y^4)) dx)), (6, ((1/y^4) dx, 0, (1/y^4) dx)), (7, ((2*x/y^4) dx, 2/x*y^4, ((2*x^3 - 2*x*y - y)/(x^2*y^4)) dx)), (8, ((1/y^5) dx, 0, (1/y^5) dx)), (9, ((x/y^5) dx, 0, (x/y^5) dx)), (10, ((1/y^6) dx, 0, (1/y^6) dx)), (11, ((x/y^6) dx, 0, (x/y^6) dx))])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "basis.items()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3, 1, -1)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = 9\n", "r = 6\n", "delta, a, b = xgcd(m, r)\n", "a = -a\n", "xgcd(9, 6)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3, 3)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b*r -a*m, delta" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "Fpbar = GF(5).algebraic_closure()\n", "z = Fpbar.zeta(7)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "unable to coerce ", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mGF\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mz\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/structure/parent.pyx\u001b[0m in \u001b[0;36msage.structure.parent.Parent.__call__ (build/cythonized/sage/structure/parent.c:9218)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 898\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmor\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 899\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mno_extra_args\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 900\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 901\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 902\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_with_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/structure/coerce_maps.pyx\u001b[0m in \u001b[0;36msage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4556)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 160\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 161\u001b[0;31m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 162\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 163\u001b[0m \u001b[0mcpdef\u001b[0m \u001b[0mElement\u001b[0m \u001b[0m_call_with_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/structure/coerce_maps.pyx\u001b[0m in \u001b[0;36msage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4448)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 154\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mParent\u001b[0m \u001b[0mC\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_codomain\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 155\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 156\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 157\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mprint_warnings\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/rings/finite_rings/finite_field_givaro.py\u001b[0m in \u001b[0;36m_element_constructor_\u001b[0;34m(self, e)\u001b[0m\n\u001b[1;32m 368\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0ma4\u001b[0m\u001b[0;34m^\u001b[0m\u001b[0;36m3\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0ma4\u001b[0m\u001b[0;34m^\u001b[0m\u001b[0;36m2\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 369\u001b[0m \"\"\"\n\u001b[0;32m--> 370\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_cache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0melement_from_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 371\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 372\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/rings/finite_rings/element_givaro.pyx\u001b[0m in \u001b[0;36msage.rings.finite_rings.element_givaro.Cache_givaro.element_from_data (build/cythonized/sage/rings/finite_rings/element_givaro.cpp:7458)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmake_FiniteField_givaroElement\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mres\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 313\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 314\u001b[0;31m \u001b[0mcpdef\u001b[0m \u001b[0mFiniteField_givaroElement\u001b[0m \u001b[0melement_from_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 315\u001b[0m \"\"\"\n\u001b[1;32m 316\u001b[0m \u001b[0mCoerces\u001b[0m \u001b[0mseveral\u001b[0m \u001b[0mdata\u001b[0m \u001b[0mtypes\u001b[0m \u001b[0mto\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mself\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/rings/finite_rings/element_givaro.pyx\u001b[0m in \u001b[0;36msage.rings.finite_rings.element_givaro.Cache_givaro.element_from_data (build/cythonized/sage/rings/finite_rings/element_givaro.cpp:7080)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 451\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 452\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 453\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"unable to coerce %r\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 454\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 455\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mGEN\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: unable to coerce " ] } ], "source": [ "GF(5^6)(z)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Integers(7)(5).multiplicative_order()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "Rx. = PolynomialRing(QQ)\n", "f = sum((i+1)*x^i for i in range(0, 10))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10*x^3 + 9*x^2 + 8*x + 7" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cut(f, 5)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10*x^9 + 9*x^8 + 8*x^7 + 7*x^6 + 6*x^5 + 5*x^4 + 4*x^3 + 3*x^2 + 2*x + 1" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Elliptic Curve defined by y^2 + y = x^3 + 1 over Finite Field of size 2\n", "x^2 + 2\n" ] } ], "source": [ "E = EllipticCurve(GF(2), [0,0,1,0,1])\n", "print(E)\n", "print(E.frobenius_polynomial())" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Elliptic Curve defined by y^2 + y = x^3 + x over Finite Field of size 2" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "x^2 + 2*x + 2" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.1", "language": "sage", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }