DeRhamComputation/superelliptic.ipynb

2673 lines
115 KiB
Plaintext
Raw Normal View History

2021-08-19 22:35:11 +02:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 44,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-19 22:35:11 +02:00
"source": [
"class superelliptic:\n",
" \n",
2021-08-19 22:35:11 +02:00
" def __init__(self, f, m, p):\n",
2021-08-21 20:50:10 +02:00
" Rx.<x> = PolynomialRing(GF(p))\n",
2021-08-23 16:46:01 +02:00
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
" Fxy = FractionField(Rxy)\n",
2021-08-21 20:50:10 +02:00
" self.polynomial = Rx(f)\n",
2021-08-19 22:35:11 +02:00
" self.exponent = m\n",
" self.characteristic = p\n",
" \n",
2021-08-23 16:46:01 +02:00
" r = Rx(f).degree()\n",
" delta = GCD(r, m)\n",
" \n",
2021-08-19 22:35:11 +02:00
" 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",
" \n",
" def basis_holomorphic_differentials_degree(self):\n",
" f = self.polynomial\n",
" m = self.exponent\n",
" r = f.degree()\n",
" delta = GCD(r, m)\n",
" Rx.<x> = PolynomialRing(GF(p))\n",
" Rxy.<x, y> = 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 += [superelliptic_form(self, 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(self):\n",
" basis_holo, degrees0 = self.basis_holomorphic_differentials_degree()\n",
" return basis_holo\n",
" \n",
" def degrees_holomorphic_differentials(self):\n",
" basis_holo, degrees0 = self.basis_holomorphic_differentials_degree()\n",
" return degrees0\n",
"\n",
" def basis_de_rham_degrees(self):\n",
" f = self.polynomial\n",
" m = self.exponent\n",
" r = f.degree()\n",
" delta = GCD(r, m)\n",
" Rx.<x> = PolynomialRing(GF(p))\n",
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
" Fxy = FractionField(Rxy)\n",
" basis_holo = self.holomorphic_differentials_basis()\n",
" basis = []\n",
" for k in range(0, len(basis_holo)):\n",
" basis += [superelliptic_cech(self, basis_holo[k], superelliptic_function(self, 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): \n",
" s = Rx(m-j)*Rx(x)*Rx(f.derivative()) - Rx(m)*Rx(i)*f\n",
" psi = Rx(cut(s, i))\n",
" basis += [superelliptic_cech(self, superelliptic_form(self, Fxy(psi/y^j)), superelliptic_function(self, 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(self):\n",
" basis, degrees0, degrees1 = self.basis_de_rham_degrees()\n",
" return basis\n",
"\n",
" def degrees_de_rham0(self):\n",
" basis, degrees0, degrees1 = self.basis_de_rham_degrees()\n",
" return degrees0\n",
"\n",
" def degrees_de_rham1(self):\n",
" basis, degrees0, degrees1 = self.basis_de_rham_degrees()\n",
" return degrees1 \n",
2021-08-19 22:35:11 +02:00
" \n",
" def is_smooth(self):\n",
" f = self.polynomial\n",
" if f.discriminant() == 0:\n",
" return 0\n",
" return 1\n",
" \n",
2021-08-19 22:35:11 +02:00
" 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.de_rham_basis()\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.de_rham_basis()\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",
2021-09-11 16:02:09 +02:00
"\n",
" def cartier_matrix(self):\n",
" basis = self.basis_holomorphic_differentials()\n",
2021-09-11 16:02:09 +02:00
" g = self.genus()\n",
" p = self.characteristic\n",
" M = matrix(GF(p), g, g)\n",
" for i in range(0, len(basis)):\n",
" w = basis[i]\n",
" v = w.cartier().coordinates()\n",
" M[i, :] = v\n",
" return M \n",
"\n",
"# def p_rank(self):\n",
"# return self.cartier_matrix().rank()\n",
" \n",
" def a_number(self):\n",
" g = C.genus()\n",
" return g - self.cartier_matrix().rank()\n",
2021-09-13 12:11:08 +02:00
" \n",
2021-10-08 18:47:24 +02:00
" def final_type(self, test = 0):\n",
2021-09-13 12:11:08 +02:00
" F = self.frobenius_matrix()\n",
" V = self.verschiebung_matrix()\n",
" p = self.characteristic\n",
2021-10-08 18:47:24 +02:00
" return flag(F, V, p, test)\n",
2021-09-13 12:11:08 +02:00
" \n",
2021-08-19 22:35:11 +02:00
"def reduction(C, g):\n",
" p = C.characteristic\n",
2021-08-21 20:50:10 +02:00
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
" Fxy = FractionField(Rxy)\n",
2021-08-19 22:35:11 +02:00
" f = C.polynomial\n",
" r = f.degree()\n",
" m = C.exponent\n",
2021-08-21 20:50:10 +02:00
" g = Fxy(g)\n",
2021-08-19 22:35:11 +02:00
" g1 = g.numerator()\n",
" g2 = g.denominator()\n",
" \n",
2021-08-21 20:50:10 +02:00
" Rx.<x> = PolynomialRing(GF(p))\n",
" Fx = FractionField(Rx)\n",
" FxRy.<y> = PolynomialRing(Fx) \n",
" (A, B, C) = xgcd(FxRy(g2), FxRy(y^m - f))\n",
" g = FxRy(g1*B/A)\n",
2021-08-19 22:35:11 +02:00
" \n",
2021-08-21 20:50:10 +02:00
" while(g.degree(Rxy(y)) >= m):\n",
" d = g.degree(Rxy(y))\n",
" G = coff(g, d)\n",
2021-08-19 22:35:11 +02:00
" i = floor(d/m)\n",
" g = g - G*y^d + f^i * y^(d%m) *G\n",
" \n",
2021-08-21 20:50:10 +02:00
" return(FxRy(g))\n",
2021-08-19 22:35:11 +02:00
"\n",
"def reduction_form(C, g):\n",
" p = C.characteristic\n",
2021-08-21 20:50:10 +02:00
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
" Fxy = FractionField(Rxy)\n",
2021-08-19 22:35:11 +02:00
" f = C.polynomial\n",
" r = f.degree()\n",
" m = C.exponent\n",
" g = reduction(C, g)\n",
"\n",
2021-08-22 21:48:21 +02:00
" g1 = Rxy(0)\n",
2021-08-21 20:50:10 +02:00
" Rx.<x> = PolynomialRing(GF(p))\n",
" Fx = FractionField(Rx)\n",
" FxRy.<y> = PolynomialRing(Fx)\n",
2021-08-19 22:35:11 +02:00
" \n",
2021-08-21 20:50:10 +02:00
" g = FxRy(g)\n",
2021-08-19 22:35:11 +02:00
" for j in range(0, m):\n",
" if j==0:\n",
" G = coff(g, 0)\n",
2021-08-22 21:48:21 +02:00
" g1 += FxRy(G)\n",
" else:\n",
" G = coff(g, j)\n",
2021-08-21 20:50:10 +02:00
" g1 += Fxy(y^(j-m)*f*G)\n",
2021-08-19 22:35:11 +02:00
" return(g1)\n",
" \n",
"class superelliptic_function:\n",
" def __init__(self, C, g):\n",
2021-08-21 18:40:44 +02:00
" p = C.characteristic\n",
2021-08-21 20:50:10 +02:00
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
" Fxy = FractionField(Rxy)\n",
2021-08-19 22:35:11 +02:00
" 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",
2021-08-22 21:48:21 +02:00
" C = self.curve\n",
" p = C.characteristic\n",
" Rx.<x> = PolynomialRing(GF(p))\n",
" Fx.<x> = FractionField(Rx)\n",
" FxRy.<y> = PolynomialRing(Fx)\n",
" g = FxRy(g)\n",
" return coff(g, j)\n",
2021-08-19 22:35:11 +02:00
" \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",
2021-08-21 18:40:44 +02:00
" p = C.characteristic\n",
2021-08-19 22:35:11 +02:00
" g = self.function\n",
2021-08-21 20:50:10 +02:00
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
" Fxy = FractionField(Rxy)\n",
" g = Fxy(g)\n",
2021-08-19 22:35:11 +02:00
" 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",
2021-08-21 18:40:44 +02:00
" p = C.characteristic\n",
2021-08-21 20:50:10 +02:00
" Rxy.<x, y> = PolynomialRing(GF(p), 2)\n",
" Fxy = FractionField(Rxy)\n",
" g = Fxy(reduction_form(C, g))\n",
2021-08-19 22:35:11 +02:00
" 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",
2021-09-11 16:02:09 +02:00
"\n",
2021-09-11 16:09:51 +02:00
" def __rmul__(self, constant):\n",
" C = self.curve\n",
" omega = self.form\n",
2021-09-13 12:11:08 +02:00
" return superelliptic_form(C, constant*omega) \n",
2021-08-19 22:35:11 +02:00
" \n",
" def cartier(self):\n",
" C = self.curve\n",
" m = C.exponent\n",
" p = C.characteristic\n",
" f = C.polynomial\n",
" Rx.<x> = PolynomialRing(GF(p))\n",
" Fx = FractionField(Rx)\n",
" FxRy.<y> = 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",
2021-09-11 16:02:09 +02:00
" return result \n",
" \n",
" def coordinates(self):\n",
" C = self.curve\n",
" p = C.characteristic\n",
" m = C.exponent\n",
" Rx.<x> = PolynomialRing(GF(p))\n",
" Fx = FractionField(Rx)\n",
" FxRy.<y> = PolynomialRing(Fx)\n",
" g = C.genus()\n",
" degrees_holo = C.degrees_holomorphic_differentials()\n",
2021-09-11 16:02:09 +02:00
" degrees_holo_inv = {b:a for a, b in degrees_holo.items()}\n",
" basis = C.basis_holomorphic_differentials()\n",
2021-09-11 16:02:09 +02:00
" \n",
" for j in range(1, m):\n",
" omega_j = Fx(self.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].jth_component(j), p)\n",
2021-09-13 12:11:08 +02:00
" elt = self - (a/a1)*basis[index]\n",
2021-09-11 16:02:09 +02:00
" return elt.coordinates() + a/a1*vector([GF(p)(i == index) for i in range(0, g)])\n",
" \n",
" return vector(g*[0])\n",
" \n",
2021-08-19 22:35:11 +02:00
" def jth_component(self, j):\n",
" g = self.form\n",
2021-08-22 21:48:21 +02:00
" C = self.curve\n",
" p = C.characteristic\n",
2021-08-21 20:50:10 +02:00
" Rx.<x> = PolynomialRing(GF(p))\n",
" Fx = FractionField(Rx)\n",
" FxRy.<y> = PolynomialRing(Fx)\n",
" Fxy = FractionField(FxRy)\n",
2021-08-22 21:48:21 +02:00
" Ryinv.<y_inv> = PolynomialRing(Fx)\n",
2021-08-21 20:50:10 +02:00
" g = Fxy(g)\n",
" g = g(y = 1/y_inv)\n",
2021-08-21 20:50:10 +02:00
" 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",
2021-08-21 20:50:10 +02:00
" Rx.<x> = PolynomialRing(GF(p))\n",
" for j in range(1, m):\n",
2021-08-21 20:50:10 +02:00
" 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",
2021-08-21 19:52:03 +02:00
" \n",
"class superelliptic_cech:\n",
2021-08-21 18:40:44 +02:00
" def __init__(self, C, omega, fct):\n",
" self.omega0 = omega\n",
" self.omega8 = omega - diffn(fct)\n",
" self.f = fct\n",
2021-08-21 18:40:44 +02:00
" self.curve = C\n",
" \n",
2021-08-21 19:52:03 +02:00
" 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",
2021-09-13 12:11:08 +02:00
"\n",
" def __rmul__(self, constant):\n",
2021-08-22 21:48:21 +02:00
" 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",
2021-09-13 12:11:08 +02:00
" return superelliptic_cech(C, w2, f2) \n",
2021-08-22 21:48:21 +02:00
" \n",
2021-08-21 19:52:03 +02:00
" def __repr__(self):\n",
" return \"(\" + str(self.omega0) + \", \" + str(self.f) + \", \" + str(self.omega8) + \")\" \n",
2021-08-22 21:48:21 +02:00
" \n",
" def verschiebung(self):\n",
2021-08-22 21:48:21 +02:00
" C = self.curve\n",
" omega = self.omega0\n",
" p = C.characteristic\n",
" Rx.<x> = 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.<x> = PolynomialRing(GF(p))\n",
" return superelliptic_cech(C, superelliptic_form(C, Rx(0)), superelliptic_function(C, fct^p))\n",
2021-08-22 21:48:21 +02:00
"\n",
" def coordinates(self):\n",
" C = self.curve\n",
" p = C.characteristic\n",
" m = C.exponent\n",
" Rx.<x> = PolynomialRing(GF(p))\n",
" Fx = FractionField(Rx)\n",
" FxRy.<y> = PolynomialRing(Fx)\n",
" g = C.genus()\n",
" degrees_holo = C.degrees_holomorphic_differentials()\n",
" degrees_holo_inv = {b:a for a, b in degrees_holo.items()}\n",
" degrees0 = C.degrees_de_rham0()\n",
" degrees0_inv = {b:a for a, b in degrees0.items()}\n",
" degrees1 = C.degrees_de_rham1()\n",
2021-08-22 21:48:21 +02:00
" degrees1_inv = {b:a for a, b in degrees1.items()}\n",
" basis = C.de_rham_basis()\n",
2021-08-22 21:48:21 +02:00
" \n",
" omega = self.omega0\n",
" fct = self.f\n",
" \n",
" if fct.function == Rx(0) and omega.form != Rx(0):\n",
2021-08-22 21:48:21 +02:00
" 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",
2021-09-13 12:11:08 +02:00
" elt = self - (a/a1)*basis[index]\n",
2021-08-22 21:48:21 +02:00
" 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",
2021-08-22 21:48:21 +02:00
" \n",
" if (d, j) in degrees1.values():\n",
" index = degrees1_inv[(d, j)]\n",
" a = coeff_of_rational_fctn(fct_j, p)\n",
2021-09-13 12:11:08 +02:00
" elt = self - (a/m)*basis[index]\n",
2021-08-23 15:14:55 +02:00
" return elt.coordinates() + a/m*vector([GF(p)(i == index) for i in range(0, 2*g)])\n",
2021-08-22 21:48:21 +02:00
" \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",
2021-08-22 21:48:21 +02:00
" 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",
2021-09-13 12:11:08 +02:00
" elt =self - a*superelliptic_cech(C, diffn(G), G)\n",
2021-08-22 21:48:21 +02:00
" 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",
2021-08-21 19:52:03 +02:00
" \n",
"def degree_of_rational_fctn(f, p):\n",
2021-08-21 20:50:10 +02:00
" Rx.<x> = 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",
2021-08-22 21:48:21 +02:00
" Rx.<x> = PolynomialRing(GF(p))\n",
" Fx = FractionField(Rx)\n",
" f = Fx(f)\n",
" if f == Rx(0):\n",
" return 0\n",
2021-08-22 21:48:21 +02:00
" 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",
2021-08-21 18:40:44 +02:00
" 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.<x> = 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"
2021-08-19 22:35:11 +02:00
]
},
{
"cell_type": "code",
"execution_count": 45,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"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",
2021-10-08 18:47:24 +02:00
"def flag(F, V, p, test = 0):\n",
" dim = F.dimensions()[0]\n",
" space = VectorSpace(GF(p), dim)\n",
" flag_subspaces = (dim+1)*[0]\n",
" flag_used = (dim+1)*[0]\n",
2021-10-08 18:47:24 +02:00
" final_type = (dim+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",
2021-10-08 18:47:24 +02:00
" if test == 1:\n",
" print('(', final_type, ')')\n",
" \n",
" for i in range(0, dim+1):\n",
2021-10-08 18:47:24 +02:00
" if final_type[i] == '?' and final_type[dim - i] != '?':\n",
" i1 = dim - i\n",
" final_type[i] = final_type[i1] - i1 + dim/2\n",
" \n",
" final_type[0] = 0\n",
2021-10-08 18:47:24 +02:00
" \n",
" for i in range(1, dim+1):\n",
" if final_type[i] == '?':\n",
" prev = final_type[i-1]\n",
" if prev != '?' and prev in final_type[i+1:]:\n",
" final_type[i] = prev\n",
" \n",
" for i in range(1, dim+1):\n",
2021-10-08 18:47:24 +02:00
" if final_type[i] == '?':\n",
2021-09-11 16:02:09 +02:00
" final_type[i] = min(final_type[i-1] + 1, dim/2)\n",
" \n",
" if is_final(final_type, dim/2):\n",
" return final_type[1:dim/2 + 1]\n",
2021-10-08 18:47:24 +02:00
" print('error:', final_type[1:dim/2 + 1])\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",
2021-09-11 16:02:09 +02:00
" if final_type[i] != final_type[i - 1] and final_type[i] != final_type[i - 1] + 1:\n",
" return 0\n",
" return 1"
]
},
{
"cell_type": "code",
"execution_count": 46,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"p = 5\n",
"R.<x> = PolynomialRing(GF(p))\n",
"f = x^3 + x + 1\n",
"m = 2\n",
"C = superelliptic(f, m, p)"
]
},
2022-05-05 10:48:52 +02:00
{
"cell_type": "code",
"execution_count": 47,
2022-05-05 10:48:52 +02:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1]"
2022-05-05 10:48:52 +02:00
]
},
"execution_count": 47,
2022-05-05 10:48:52 +02:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"C.final_type()"
2022-05-05 10:48:52 +02:00
]
},
2021-10-08 18:47:24 +02:00
{
"cell_type": "code",
"execution_count": 13,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2021-10-08 18:47:24 +02:00
"Current Time = 18:11:00\n",
"[1, 2, 3, 4, 5, 6]\n",
"Current Time = 18:11:21\n"
]
}
],
"source": [
"now = datetime.now()\n",
"\n",
"current_time = now.strftime(\"%H:%M:%S\")\n",
"print(\"Current Time =\", current_time)\n",
"\n",
"p = 17\n",
"Rx.<x> = PolynomialRing(GF(p))\n",
"C = superelliptic(x^13+x^8+x, 2, p)\n",
"print(C.final_type())\n",
"\n",
"now = datetime.now()\n",
"\n",
"current_time = now.strftime(\"%H:%M:%S\")\n",
"print(\"Current Time =\", current_time)"
]
},
{
"cell_type": "code",
"execution_count": 15,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-10-08 18:47:24 +02:00
"source": [
"def p_cov(C):\n",
" m = C.exponent\n",
" p = C.characteristic\n",
" f = C.polynomial\n",
" return superelliptic(f(x^p - x), m, p)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
2022-03-07 13:48:30 +01:00
"collapsed": false
2021-10-08 18:47:24 +02:00
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 1, 2, 3] [1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11]\n"
]
}
],
"source": [
"p = 3\n",
"Rx.<x> = PolynomialRing(GF(p))\n",
"C = superelliptic(2*x^9+x^8+x, 2, p)\n",
"C1 = p_cov(C)\n",
"print(C.final_type(), C1.final_type())"
]
},
{
"cell_type": "code",
"execution_count": 29,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-10-08 18:47:24 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"( ['?', 1, 1, 2, 3, 3, 3, 4, 4] )\n",
"( ['?', '?', '?', '?', '?', 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, '?', 18, 19, 19, '?', 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, '?', '?', '?', '?', 22] )\n",
"[1, 1, 2, 3] [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 19]\n"
]
}
],
"source": [
"p = 5\n",
"Rx.<x> = PolynomialRing(GF(p))\n",
"C = superelliptic(x^9+x^8+x, 2, p)\n",
"C1 = p_cov(C)\n",
"print(C.final_type(1), C1.final_type(1))"
]
},
{
"cell_type": "code",
"execution_count": 24,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-10-08 18:47:24 +02:00
"outputs": [
{
"data": {
"text/plain": [
"22"
]
},
"execution_count": 24,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-10-08 18:47:24 +02:00
"output_type": "execute_result"
}
],
"source": [
"C1.genus()"
]
},
{
"cell_type": "code",
"execution_count": 10,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-10-08 18:47:24 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x^9 + x^8 + x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 2*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 3*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 4*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 5*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 6*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 7*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 8*x 3 0 0\n",
"(( [0, 0, 1, 2, 3, 3, 3, 3, 4] ))\n",
2021-09-13 12:11:08 +02:00
"[0, 1, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 9*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 2*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 3*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 4*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 5*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 6*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 7*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 8*x 3 0 0\n",
"(( [0, 0, 1, 2, 3, 3, 3, 3, 4] ))\n",
2021-09-13 12:11:08 +02:00
"[0, 1, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 9*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 2*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 3*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 4*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 5*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 6*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 7*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 8*x 3 0 0\n",
"(( [0, 0, 1, 2, 3, 3, 3, 3, 4] ))\n",
2021-09-13 12:11:08 +02:00
"[0, 1, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 9*x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + x 3 2 0\n",
"(( ['?', '?', 2, 2, 3, 3, 4, '?', 4] ))\n",
2021-09-13 12:11:08 +02:00
"[1, 2, 2, 3]\n",
2021-10-08 18:47:24 +02:00
"x^9 + x^8 + 2*x 3 2 0\n"
2021-09-11 16:02:09 +02:00
]
},
{
2021-10-08 18:47:24 +02:00
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-10-442b4b636bbb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpolynomial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mp_rank\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mM\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrank\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mM\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0midentity_matrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrank\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[1;32m 10\u001b[0m \u001b[0mV\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mverschiebung_matrix\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---> 11\u001b[0;31m \u001b[0mF\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrobenius_matrix\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 12\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mflag\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mF\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mV\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\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<ipython-input-1-eeab6fc29dc6>\u001b[0m in \u001b[0;36mfrobenius_matrix\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 135\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbasis\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[1;32m 136\u001b[0m \u001b[0mw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbasis\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 137\u001b[0;31m \u001b[0mv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mw\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrobenius\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoordinates\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 138\u001b[0m \u001b[0mM\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mM\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-1-eeab6fc29dc6>\u001b[0m in \u001b[0;36mcoordinates\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 487\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcoeff_of_rational_fctn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfct_j\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 488\u001b[0m \u001b[0melt\u001b[0m \u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0msuperelliptic_cech\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdiffn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mG\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mG\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 489\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0melt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoordinates\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 490\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 491\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvector\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mInteger\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[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-1-eeab6fc29dc6>\u001b[0m in \u001b[0;36mcoordinates\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 487\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcoeff_of_rational_fctn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfct_j\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 488\u001b[0m \u001b[0melt\u001b[0m \u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0msuperelliptic_cech\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdiffn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mG\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mG\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 489\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0melt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoordinates\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 490\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 491\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mvector\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mInteger\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[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-1-eeab6fc29dc6>\u001b[0m in \u001b[0;36mcoordinates\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 475\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcoeff_of_rational_fctn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfct_j\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 476\u001b[0m \u001b[0melt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mbasis\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 477\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0melt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoordinates\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mvector\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mGF\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mg\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[0m\u001b[1;32m 478\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 479\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0mInteger\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<ipython-input-1-eeab6fc29dc6>\u001b[0m in \u001b[0;36mcoordinates\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 475\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcoeff_of_rational_fctn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfct_j\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 476\u001b[0m \u001b[0melt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mbasis\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 477\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0melt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoordinates\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mvector\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mGF\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mg\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[0m\u001b[1;32m 478\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 479\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0mInteger\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<ipython-input-1-eeab6fc29dc6>\u001b[0m in \u001b[0;36mcoordinates\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 474\u001b[0m \u001b[0mindex\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdegrees1_inv\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mj\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[1;32m 475\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcoeff_of_rational_fctn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfct_j\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 476\u001b[0;31m \u001b[0melt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mbasis\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mindex\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 477\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0melt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoordinates\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mvector\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mGF\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mg\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[1;32m 478\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.__mul__ (build/cythonized/sage/structure/element.c:12169)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1527\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1528\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0mElement\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0mright\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_mul_long\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1529\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mcoercion_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbin_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmul\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 1530\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1531\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mNotImplemented\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.pyx\u001b[0m in \u001b[0;36msage.structure.coerce.CoercionModel.bin_op (build/cythonized/sage/structure/coerce.c:11104)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1247\u001b[0m \u001b[0mmul_method\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'__r%s__'\u001b[0m\u001b[0;34m%\u001b[0m\u001b[0mop_name\u001b[0m\u001b[0;34m,\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 1248\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmul_method\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[0;32m-> 1249\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmul_method\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 1250\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mNotImplemented\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1251\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-1-eeab6fc29dc6>\u001b[0m in \u001b[0;36m__rmul__\u001b[0;34m(self, constant)\u001b[0m\n\u001b[1;32m 415\u001b[0m \u001b[0mw1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0momega0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mform\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[0mf1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunction\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 417\u001b[0;31m \u001b[0mw2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msuperelliptic_form\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstant\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mw1\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 418\u001b[0m \u001b[0mf2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msuperelliptic_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstant\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mf1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 419\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0msuperelliptic_cech\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mw2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-1-eeab6fc29dc6>\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, C, g)\u001b[0m\n\u001b[1;32m 280\u001b[0m \u001b[0mRxy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mPolynomialRing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mGF\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnames\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'x'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'y'\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[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mRxy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_first_ngens\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 281\u001b[0m \u001b[0mFxy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFractionField\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mRxy\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 282\u001b[0;31m \u001b[0mg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFxy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreduction_form\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mg\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 283\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mform\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 284\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcurve\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-1-eeab6fc29dc6>\u001b[0m in \u001b[0;36mreduction_form\u001b[0;34m(C, g)\u001b[0m\n\u001b[1;32m 205\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 206\u001b[0m \u001b[0mG\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcoff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 207\u001b[0;31m \u001b[0mg1\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mFxy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mG\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 208\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mg1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 209\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.__add__ (build/cythonized/sage/structure/element.c:10839)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1232\u001b[0m \u001b[0;31m# Left and right are Sage elements => use coercion model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1233\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mBOTH_ARE_ELEMENT\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcl\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-> 1234\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mcoercion_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbin_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madd\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 1235\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1236\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mlong\u001b[0m \u001b[0mvalue\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.pyx\u001b[0m in \u001b[0;36msage.structure.coerce.CoercionModel.bin_op (build/cythonized/sage/structure/coerce.c:10120)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1205\u001b[0m \u001b[0;31m# Now coerce to a common parent and do the operation there\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1206\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-> 1207\u001b[0;31m \u001b[0mxy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcanonical_coercion\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\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 1208\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1209\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_record_exception\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.pyx\u001b[0m in \u001b[0;36msage.structure.coerce.CoercionModel.canonical_coercion (build/cythonized/sage/structure/coerce.c:11635)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1320\u001b[0m \u001b[0mx_elt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1321\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0my_map\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[0;32m-> 1322\u001b[0;31m \u001b[0my_elt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0mMap\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0my_map\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\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 1323\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 1324\u001b[0m \u001b[0my_elt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\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.CallableConvertMap._call_ (build/cythonized/sage/structure/coerce_maps.c:7389)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 430\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\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[1;32m 431\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--> 432\u001b[0;31m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_func\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 433\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 434\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/fraction_field.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 316\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mwrapper\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[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 318\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_class\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[0mnumerator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdenominator\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[0m\u001b[1;32m 319\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 320\u001b[0m \u001b[0;31m# The case ``S`` being `\\QQ` requires special handling since `\\QQ` is\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/fraction_field_element.pyx\u001b[0m in \u001b[0;36msage.rings.fraction_field_element.FractionFieldElement_1poly_field.__init__ (build/cythonized/sage/rings/fraction_field_element.c:11744)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1115\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1116\u001b[0m \"\"\"\n\u001b[0;32m-> 1117\u001b[0;31m FractionFieldElement.__init__(self, parent, numerator, denominator,\n\u001b[0m\u001b[1;32m 1118\u001b[0m coerce, reduce)\n\u001b[1;32m 1119\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mreduce\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/fraction_field_element.pyx\u001b[0m in \u001b[0;36msage.rings.fraction_field_element.FractionFieldElement.__init__ (build/cythonized/sage/rings/fraction_field_element.c:2966)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcoerce\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__numerator\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnumerator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 115\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__denominator\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdenominator\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 116\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 117\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__numerator\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnumerator\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/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.NamedConvertMap._call_ (build/cythonized/sage/structure/coerce_maps.c:5949)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 285\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Cannot coerce {} to {}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\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[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 286\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mMap\u001b[0m \u001b[0mm\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 287\u001b[0;31m \u001b[0mcdef\u001b[0m \u001b[0mElement\u001b[0m \u001b[0me\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmethod\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[0m\u001b[1;32m 288\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0me\u001b[0m \u001b[0;32mis\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 289\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mRuntimeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"BUG in coercion model: {} method of {} returned None\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmethod_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\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[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/polynomial/multi_polynomial.pyx\u001b[0m in \u001b[0;36msage.rings.polynomial.multi_polynomial.MPolynomial._polynomial_ (build/cythonized/sage/rings/polynomial/multi_polynomial.c:6311)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mR\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvariable_name\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[1;32m 206\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvariable_names\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--> 207\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mR\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpolynomial\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\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[0m\u001b[1;32m 208\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 209\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mR\u001b[0m\u001b[0;34m(\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/rings/polynomial/multi_polynomial.pyx\u001b[0m in \u001b[0;36msage.rings.polynomial.multi_polynomial.MPolynomial.polynomial (build/cythonized/sage/rings/polynomial/multi_polynomial.c:8657)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 485\u001b[0m w = {remove_from_tuple(e, ind): val\n\u001b[1;32m 486\u001b[0m for e, val in self.dict().iteritems() if not e[ind]}\n\u001b[0;32m--> 487\u001b[0;31m \u001b[0mv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mB\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m# coefficients that don't involve var\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 488\u001b[0m \u001b[0mz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvar\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 489\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\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/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: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/polynomial/polynomial_ring.py\u001b[0m in \u001b[0;36m_element_constructor_\u001b[0;34m(self, x, check, is_gen, construct, **kwds)\u001b[0m\n\u001b[1;32m 466\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrings\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpower_series_ring_element\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mPowerSeries\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[1;32m 467\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtruncate\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--> 468\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mC\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[0mcheck\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_gen\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstruct\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mconstruct\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[0m\n\u001b[0m\u001b[1;32m 469\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 470\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mclassmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32msrc/cysignals/signals.pyx\u001b[0m in \u001b[0;36mcysignals.signals.python_check_interrupt\u001b[0;34m()\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
2021-09-13 12:11:08 +02:00
"p = 11\n",
"for a in range(0, p):\n",
" for b in range(0, p):\n",
2021-09-13 12:11:08 +02:00
" for c in range(0, p):\n",
" Rx.<x> = PolynomialRing(GF(p))\n",
" C = superelliptic(x^9+a*x^8+c*x, 2, p)\n",
" if C.is_smooth() and C.p_rank() == 3:\n",
2021-10-08 18:47:24 +02:00
" M = C.cartier_matrix()\n",
" print(C.polynomial, C.p_rank(), (M^4).rank(), 4 - (M-identity_matrix(4)).rank())\n",
2021-09-13 12:11:08 +02:00
" V = C.verschiebung_matrix()\n",
" F = C.frobenius_matrix()\n",
" print(flag(F, V, p))"
]
},
{
"cell_type": "code",
"execution_count": 7,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
2021-10-08 18:47:24 +02:00
"name": "stdout",
"output_type": "stream",
"text": [
"[((1/y) dx, 0, (1/y) dx), ((x/y) dx, 2/x*y, (1/(x*y)) dx)]\n"
2021-10-08 18:47:24 +02:00
]
}
],
"source": [
"R.<x> = PolynomialRing(GF(13))\n",
"C = superelliptic(x^3+x, 2, 13)\n",
"print(C.basis_de_rham)"
]
},
{
"cell_type": "code",
2021-09-13 12:11:08 +02:00
"execution_count": 81,
"metadata": {
2022-03-07 13:48:30 +01:00
"collapsed": false,
"scrolled": true
},
2021-09-13 12:11:08 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n",
"[1]\n"
]
}
],
"source": [
2021-09-13 12:11:08 +02:00
"p = 5\n",
"Rx.<x> = PolynomialRing(GF(p))\n",
"C = superelliptic(x^3 - x, 2, p)\n",
"if (C.is_smooth()):\n",
" print(C.p_rank())\n",
" print(C.final_type())"
]
},
{
"cell_type": "code",
2021-09-13 12:11:08 +02:00
"execution_count": 58,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-09-13 12:11:08 +02:00
"outputs": [
{
"data": {
"text/plain": [
"[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 4 2 3 3 2]\n",
"[4 0 4 4 2 0 0 4]\n",
"[0 0 4 3 0 0 1 2]\n",
"[3 0 0 0 0 1 0 0]"
]
},
"execution_count": 58,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-09-13 12:11:08 +02:00
"output_type": "execute_result"
}
],
2021-09-11 16:09:51 +02:00
"source": [
2021-09-13 12:11:08 +02:00
"C.frobenius_matrix()"
2021-09-11 16:09:51 +02:00
]
},
{
"cell_type": "code",
2021-09-13 12:11:08 +02:00
"execution_count": 62,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
2021-09-13 12:11:08 +02:00
"name": "stdout",
"output_type": "stream",
"text": [
"test [0, -1, -1, -1, 4, -1, -1, -1, 4]\n",
"poprawiony ft [0, 1, 2, 3, 4, 4, 4, 4, 4]\n"
]
2021-09-13 12:11:08 +02:00
},
{
"data": {
"text/plain": [
"[1, 2, 3, 4]"
]
},
"execution_count": 62,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-09-13 12:11:08 +02:00
"output_type": "execute_result"
}
],
"source": [
2021-09-13 12:11:08 +02:00
"flag(F, V, p)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
2022-03-07 13:48:30 +01:00
"collapsed": false,
"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,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"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,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2*x^3 + 3*x^2 + 2*x + 1"
]
},
"execution_count": 31,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"x*f.derivative() - 2*2*f"
]
},
{
"cell_type": "code",
"execution_count": 73,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Vector space of degree 2 and dimension 1 over Rational Field\n",
"Basis matrix:\n",
"[1 3]"
]
},
"execution_count": 73,
2022-03-07 13:48:30 +01:00
"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,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"l = U.basis()\n",
"l = l +[(1, 1/3)]"
]
},
{
"cell_type": "code",
"execution_count": 24,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"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.<u, v> = 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,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2021-08-23 16:46:01 +02:00
"4\n",
"2\n"
]
}
],
"source": [
2021-08-23 16:46:01 +02:00
"p = 7\n",
"Rx.<x> = PolynomialRing(GF(p))\n",
"C = superelliptic(x^3 + x + 3, 5, p)\n",
"baza = C.basis_de_rham\n",
"print(C.genus())\n",
2021-08-23 16:46:01 +02:00
"#E = EllipticCurve(GF(p), [1, 2])\n",
"print(E.trace_of_frobenius())\n",
"#C.basis_holomorphic_differentials( )"
]
},
{
"cell_type": "code",
2022-03-07 13:48:30 +01:00
"execution_count": 0,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
]
},
{
"cell_type": "code",
"execution_count": 212,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-23 16:46:01 +02:00
"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)}"
2021-08-23 16:46:01 +02:00
]
},
"execution_count": 212,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-23 16:46:01 +02:00
"output_type": "execute_result"
}
],
"source": [
2021-08-23 16:46:01 +02:00
"C.degree_de_rham0"
]
},
{
"cell_type": "code",
"execution_count": 213,
2021-08-23 16:46:01 +02:00
"metadata": {
2022-03-07 13:48:30 +01:00
"collapsed": false
2021-08-23 16:46:01 +02:00
},
"outputs": [
2021-08-23 15:14:55 +02:00
{
"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)}"
2021-08-23 15:14:55 +02:00
]
},
"execution_count": 213,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-23 15:14:55 +02:00
"output_type": "execute_result"
}
],
2021-08-22 21:48:21 +02:00
"source": [
2021-08-23 16:46:01 +02:00
"C.basis_de_rham"
2021-08-22 21:48:21 +02:00
]
},
{
"cell_type": "code",
"execution_count": 214,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-23 16:46:01 +02:00
"source": [
"A = C.frobenius_matrix()\n",
"B = C.verschiebung_matrix()"
2021-08-23 16:46:01 +02:00
]
},
{
"cell_type": "code",
"execution_count": 227,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-22 21:48:21 +02:00
"outputs": [
{
2021-08-22 23:42:55 +02:00
"data": {
"text/plain": [
"(1, 0, 0, 4, 3, 0, 2, 0)"
2021-08-22 23:42:55 +02:00
]
},
"execution_count": 227,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-22 23:42:55 +02:00
"output_type": "execute_result"
2021-08-19 22:35:11 +02:00
}
],
"source": [
"A.solve_right((0, 0, 0, 0, 4, 2, 5, 3))"
2021-08-22 21:48:21 +02:00
]
},
{
"cell_type": "code",
"execution_count": 228,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(0, 0, 0, 0, 4, 2, 5, 3)"
]
},
"execution_count": 228,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"A*vector((1, 0, 0, 4, 3, 0, 2, 0))"
]
2021-08-19 22:35:11 +02:00
},
{
"cell_type": "code",
"execution_count": 225,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-23 16:46:01 +02:00
"outputs": [
{
"data": {
"text/plain": [
"(1, 0, 0, 4, 3, -6, -5, -5)"
2021-08-23 16:46:01 +02:00
]
},
"execution_count": 225,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-23 16:46:01 +02:00
"output_type": "execute_result"
}
],
"source": [
"vector((1, 0, 0, 4, 5, 0, 0, 0)) - vector((0, 0, 0, 0, 2, 6, 5, 5))"
]
2021-08-19 22:35:11 +02:00
},
{
"cell_type": "code",
"execution_count": 83,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-19 22:35:11 +02:00
"source": [
"omega = diffn(superelliptic_function(C, y^2))"
]
},
{
"cell_type": "code",
"execution_count": 84,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-19 22:35:11 +02:00
"outputs": [
{
"data": {
"text/plain": [
"3*x^2 + 1"
2021-08-19 22:35:11 +02:00
]
},
"execution_count": 84,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-19 22:35:11 +02:00
"output_type": "execute_result"
}
],
"source": [
"omega.jth_component(0)"
]
},
{
"cell_type": "code",
"execution_count": 85,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-19 22:35:11 +02:00
"outputs": [
{
"data": {
"text/plain": [
"y"
]
},
"execution_count": 85,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-19 22:35:11 +02:00
"output_type": "execute_result"
}
],
"source": [
"R.<x, y> = PolynomialRing(GF(p), 2)\n",
"g1 = x^3*y^7 + x^2*y^9\n",
"g2 = x^2*y + y^6\n",
"R1.<x> = PolynomialRing(GF(p))\n",
"R2 = FractionField(R1)\n",
"R3.<y> = 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,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-19 22:35:11 +02:00
"source": [
"H = HyperellipticCurve(x^5 - x + 1)"
]
},
{
"cell_type": "code",
"execution_count": 40,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-19 22:35:11 +02:00
"outputs": [
{
"data": {
"text/plain": [
"Hyperelliptic Curve over Finite Field of size 5 defined by y^2 = x^5 + 4*x + 1"
]
},
"execution_count": 40,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-19 22:35:11 +02:00
"output_type": "execute_result"
}
],
"source": [
"H"
]
},
{
"cell_type": "code",
"execution_count": 84,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-19 22:35:11 +02:00
"source": [
"f = x^3 + x + 2"
]
},
{
"cell_type": "code",
"execution_count": 86,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-19 22:35:11 +02:00
"outputs": [
{
"data": {
"text/plain": [
"-2*x^2 + 1"
]
},
"execution_count": 86,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-19 22:35:11 +02:00
"output_type": "execute_result"
}
],
"source": [
"f.derivative(x)"
]
},
{
"cell_type": "code",
"execution_count": 3,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-19 22:35:11 +02:00
"source": [
"p = 5\n",
2021-08-19 22:35:11 +02:00
"R1.<x> = PolynomialRing(GF(p))\n",
"R2 = FractionField(R1)\n",
"R3.<y> = PolynomialRing(R2)\n",
"g = y^2/x + y/(x+1) \n",
"g = 1/y+x/y^2"
]
},
{
"cell_type": "code",
"execution_count": 4,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"x*z^2 + z"
]
},
"execution_count": 4,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"R3.<z> = PolynomialRing(R2)\n",
"g(y = 1/z)"
2021-08-19 22:35:11 +02:00
]
},
{
"cell_type": "code",
"execution_count": 57,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-19 22:35:11 +02:00
"outputs": [
{
"data": {
"text/plain": [
"x^3 + x + 4"
2021-08-19 22:35:11 +02:00
]
},
"execution_count": 57,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-19 22:35:11 +02:00
"output_type": "execute_result"
}
],
"source": [
"f"
]
},
{
"cell_type": "code",
"execution_count": 62,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"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<ipython-input-62-e054c182ec1a>\u001b[0m in \u001b[0;36m<module>\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()"
2021-08-19 22:35:11 +02:00
]
},
2021-08-21 18:40:44 +02:00
{
"cell_type": "code",
"execution_count": 35,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-21 18:40:44 +02:00
"outputs": [
{
"data": {
"text/plain": [
"x^3 + x + 1"
]
},
"execution_count": 35,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-21 18:40:44 +02:00
"output_type": "execute_result"
}
],
"source": [
"x^3+x+1"
]
},
{
"cell_type": "code",
"execution_count": 36,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-21 18:40:44 +02:00
"outputs": [
{
"data": {
"text/plain": [
"Symbolic Ring"
]
},
"execution_count": 36,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-21 18:40:44 +02:00
"output_type": "execute_result"
}
],
"source": [
"parent(x)"
]
},
{
"cell_type": "code",
"execution_count": 37,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-21 18:40:44 +02:00
"source": [
"R.<x> = PolynomialRing(GF(5))"
]
},
{
"cell_type": "code",
"execution_count": 39,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-21 18:40:44 +02:00
"source": [
"R = (x^3+x).parent()"
]
},
{
"cell_type": "code",
"execution_count": 44,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-21 18:40:44 +02:00
"source": [
"R.<x, y> = PolynomialRing(GF(5))\n",
"RR = FractionField(R)\n",
"A = RR(1/(x*y))"
]
},
{
"cell_type": "code",
"execution_count": 45,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-21 18:40:44 +02:00
"outputs": [
{
"data": {
"text/plain": [
"(-1)/(x^2*y)"
]
},
"execution_count": 45,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-21 18:40:44 +02:00
"output_type": "execute_result"
}
],
"source": [
"A.derivative(x)"
]
},
2021-08-22 21:48:21 +02:00
{
"cell_type": "code",
"execution_count": 42,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-22 21:48:21 +02:00
"source": [
"dict1 = {}\n",
"dict1[3] = 5\n",
"dict1[6] = 121"
]
},
{
"cell_type": "code",
"execution_count": 46,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
2021-08-22 21:48:21 +02:00
"source": [
"degrees1_inv = {b:a for a, b in dict1.items()}"
]
},
{
"cell_type": "code",
"execution_count": 47,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
2021-08-22 21:48:21 +02:00
"outputs": [
{
"data": {
"text/plain": [
"{5: 3, 121: 6}"
]
},
"execution_count": 47,
2022-03-07 13:48:30 +01:00
"metadata": {
},
2021-08-22 21:48:21 +02:00
"output_type": "execute_result"
}
],
"source": [
"degrees1_inv"
]
},
{
"cell_type": "code",
"execution_count": 28,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Superelliptic curve with the equation y^7 = x^3 + x + 2 over finite field with 5 elements."
]
},
"execution_count": 28,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"C"
]
},
{
"cell_type": "code",
"execution_count": 29,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"basis = C.basis_de_rham()"
]
},
{
"cell_type": "code",
"execution_count": 32,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"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,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"basis.items()"
]
},
{
"cell_type": "code",
"execution_count": 9,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3, 1, -1)"
]
},
"execution_count": 9,
2022-03-07 13:48:30 +01:00
"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,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3, 3)"
]
},
"execution_count": 10,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"b*r -a*m, delta"
]
},
{
"cell_type": "code",
"execution_count": 11,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"Fpbar = GF(5).algebraic_closure()\n",
"z = Fpbar.zeta(7)"
]
},
{
"cell_type": "code",
"execution_count": 23,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "unable to coerce <class 'sage.rings.algebraic_closure_finite_field.AlgebraicClosureFiniteField_pseudo_conway_with_category.element_class'>",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-23-42625790d9c3>\u001b[0m in \u001b[0;36m<module>\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 <class 'sage.rings.algebraic_closure_finite_field.AlgebraicClosureFiniteField_pseudo_conway_with_category.element_class'>"
]
}
],
"source": [
"GF(5^6)(z)"
]
},
{
"cell_type": "code",
"execution_count": 21,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"6"
]
},
"execution_count": 21,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"Integers(7)(5).multiplicative_order()"
]
},
{
"cell_type": "code",
"execution_count": 7,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"Rx.<x> = PolynomialRing(QQ)\n",
"f = sum((i+1)*x^i for i in range(0, 10))"
]
},
{
"cell_type": "code",
"execution_count": 8,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"10*x^3 + 9*x^2 + 8*x + 7"
]
},
"execution_count": 8,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"cut(f, 5)"
]
},
{
"cell_type": "code",
"execution_count": 9,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"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,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"f"
]
},
{
"cell_type": "code",
"execution_count": 45,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"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,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Elliptic Curve defined by y^2 + y = x^3 + x over Finite Field of size 2"
]
},
"execution_count": 41,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"E"
]
},
{
"cell_type": "code",
"execution_count": 42,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"x^2 + 2*x + 2"
]
},
"execution_count": 42,
2022-03-07 13:48:30 +01:00
"metadata": {
},
"output_type": "execute_result"
}
],
2022-03-07 13:48:30 +01:00
"source": [
]
},
{
"cell_type": "code",
"execution_count": 30,
2022-03-07 13:48:30 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Current Time = 18:56:38\n",
"[1, 2, 3, 4, 5, 6, 7, 8, 9]\n",
"Current Time = 18:57:11\n"
]
}
],
"source": [
"now = datetime.now()\n",
"\n",
"current_time = now.strftime(\"%H:%M:%S\")\n",
"print(\"Current Time =\", current_time)\n",
"\n",
"p = 17\n",
"Rx.<x> = PolynomialRing(GF(p))\n",
"C = superelliptic(x^19+x^8+x, 2, p)\n",
"print(C.final_type())\n",
"\n",
"now = datetime.now()\n",
"\n",
"current_time = now.strftime(\"%H:%M:%S\")\n",
"print(\"Current Time =\", current_time)"
]
},
2022-05-05 10:48:52 +02:00
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"p = 7\n",
"R.<x> = PolynomialRing(GF(p))\n",
"f = x^3 + x + 1\n",
"m = 2\n",
"C = superelliptic(f, m, p)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[((1/y) dx, 0, (1/y) dx), ((x/y) dx, 2/x*y, ((x + 2)/(x^2*y)) dx)]"
]
},
"execution_count": 13,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"C.basis_de_rham"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"w = C.basis_de_rham[1]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"w0 = w.f"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 9,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"w0.is_regular_on_U0()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"((x^3 - x - 2)/(x^2*y)) dx"
]
},
"execution_count": 11,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"diffn(w0)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"p = 7\n",
"R.<x> = PolynomialRing(GF(p))\n",
"d = 9\n",
"f = sum(x^i * (d+1-i) for i in range(0, d+1))\n",
"m = 2\n",
"C = superelliptic(f, m, p)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[((1/y) dx, 0, (1/y) dx),\n",
" ((x/y) dx, 0, (x/y) dx),\n",
" ((x^2/y) dx, 0, (x^2/y) dx),\n",
" ((x^3/y) dx, 0, (x^3/y) dx),\n",
" (((-2*x^6 + x^5 + 2*x^4 + x^3 - 2*x^2)/y) dx, 2/x*y, ((2*x - 1)/(x^2*y)) dx),\n",
" (((-2*x^6 + x^5 + 2*x^4 + x^3 - 2*x^2)/y) dx, 2/x^2*y, ((2*x^2 - x - 2)/(x^3*y)) dx),\n",
" (((3*x^5 - 3*x^4 + 3*x^3 + 2*x + 2)/y) dx, 2/x^3*y, ((-3*x^2 + 3*x - 3)/(x^4*y)) dx),\n",
" (((x^4 - 3*x^2 - x - 1)/y) dx, 2/x^4*y, ((3*x^4 - x^2 + 3)/(x^5*y)) dx)]"
]
},
"execution_count": 10,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"C.basis_de_rham"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[((1/y) dx, 0, (1/y) dx), ((x/y) dx, 2/x*y, (1/(x*y)) dx)]"
]
},
"execution_count": 17,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"p = 13\n",
"R.<x> = PolynomialRing(GF(p))\n",
"f = x^3 + x\n",
"m = 2\n",
"C = superelliptic(f, m, p)\n",
"C.basis_de_rham"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 10,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"R(f*f(1/x)*x^3).discriminant()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[((1/y) dx, 0, (1/y) dx), ((x/y) dx, 2/x*y, ((x + 2)/(x^2*y)) dx)]"
]
},
"execution_count": 11,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"p = 19\n",
"R.<x> = PolynomialRing(GF(p))\n",
"f = x^3 + x + 1\n",
"m = 2\n",
"C = superelliptic(f, m, p)\n",
"C.basis_de_rham"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[((1/y) dx, 0, (1/y) dx), ((x/y) dx, 2/x*y, ((-1)/(x*y)) dx)]"
]
},
"execution_count": 4,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"p = 3\n",
"R.<x> = PolynomialRing(GF(p))\n",
"f = x^3 -x\n",
"m = 2\n",
"C = superelliptic(f, m, p)\n",
"C.basis_de_rham"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"R.<x, y> = PolynomialRing(GF(p), 2)\n",
"s = superelliptic_function(C, 2*y/(x*(x+1)))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"((-x^2 - x + 1)/(x^2*y + x*y)) dx"
]
},
"execution_count": 9,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"diffn(s)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"o1 = superelliptic_cech(C, superelliptic_form(C, (x+1)/y), superelliptic_function(C, 2*y/(x+1)))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"o2 = superelliptic_cech(C, superelliptic_form(C, x/y), superelliptic_function(C, 2*y/x))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"o3 = superelliptic_cech(C, superelliptic_form(C, 1/y), superelliptic_function(C, 0))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"o4 = o1 - o2 - o3"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(0 dx, (1/(x^2 + x))*y, ((-x^2 - x + 1)/(x^2*y + x*y)) dx)"
]
},
"execution_count": 14,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"o4"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"m = 2\n",
"p = 3\n",
"R.<x> = PolynomialRing(GF(p))\n",
"f = x^3 - x\n",
"C = superelliptic(f, m, p)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"g = f(x^3 - x)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"x^9 + x^3 + x"
]
},
"execution_count": 7,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"g"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"C1 = superelliptic(g, m, p)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Superelliptic curve with the equation y^2 = x^9 + x^3 + x over finite field with 3 elements."
]
},
"execution_count": 9,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"C1"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[((1/y) dx, 0, (1/y) dx),\n",
" ((x/y) dx, 0, (x/y) dx),\n",
" ((x^2/y) dx, 0, (x^2/y) dx),\n",
" ((x^3/y) dx, 0, (x^3/y) dx),\n",
" (((x^7 + x)/y) dx, 2/x*y, (1/(x*y)) dx),\n",
" (((-x^6 - 1)/y) dx, 2/x^2*y, 0 dx),\n",
" (0 dx, 2/x^3*y, ((-1)/(x^3*y)) dx),\n",
" ((x^4/y) dx, 2/x^4*y, ((-x^2 + 1)/(x^4*y)) dx)]"
]
},
"execution_count": 10,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"C1.basis_de_rham"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"p = 5\n",
"R.<x> = PolynomialRing(GF(p))\n",
"m = 3\n",
"f = x^4 + x + 1\n",
"C = superelliptic(f, m, p)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 10,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"C.a_number()"
]
},
2021-08-19 22:35:11 +02:00
{
"cell_type": "code",
2022-03-07 13:48:30 +01:00
"execution_count": 0,
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
]
2021-08-19 22:35:11 +02:00
}
],
"metadata": {
"kernelspec": {
2022-03-07 13:48:30 +01:00
"display_name": "SageMath 9.5",
"language": "sagemath",
"metadata": {
"cocalc": {
"description": "Open-source mathematical software system",
"priority": 1,
2022-03-07 13:48:30 +01:00
"url": "https://www.sagemath.org/"
}
},
"name": "sage-9.5",
"resource_dir": "/ext/jupyter/kernels/sage-9.5"
2021-08-19 22:35:11 +02:00
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
2022-03-07 13:48:30 +01:00
"version": "3.9.9"
2021-08-19 22:35:11 +02:00
}
},
"nbformat": 4,
2022-03-07 13:48:30 +01:00
"nbformat_minor": 4
}