diff --git a/superelliptic.ipynb b/superelliptic.ipynb index 22d0da3..0d1accf 100644 --- a/superelliptic.ipynb +++ b/superelliptic.ipynb @@ -2,9 +2,22 @@ "cells": [ { "cell_type": "code", - "execution_count": 219, + "execution_count": 87, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'holo' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mclass\u001b[0m \u001b[0msuperelliptic\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 2\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\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[0mm\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[1;32m 3\u001b[0m \u001b[0mR\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[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)\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[0;34m)\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mR\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_first_ngens\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[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpolynomial\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mR\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexponent\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mm\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36msuperelliptic\u001b[0;34m()\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\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;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mm\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 54\u001b[0m \u001b[0mholo\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbaza_holo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mj\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---> 55\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mk\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[0mholo\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 56\u001b[0m \u001b[0mbaza\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mholo\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'holo' is not defined" + ] + } + ], "source": [ "class superelliptic:\n", " def __init__(self, f, m, p):\n", @@ -13,7 +26,6 @@ " self.exponent = m\n", " self.characteristic = p\n", " \n", - " \n", " def __repr__(self):\n", " f = self.polynomial\n", " m = self.exponent\n", @@ -36,8 +48,8 @@ " basis = {}\n", " if j == 'all':\n", " k = 0\n", - " for i in range(1, r):\n", - " for j in range(1, m):\n", + " for j in range(1, m):\n", + " for i in range(1, r):\n", " if (r*j - m*i >= delta):\n", " basis[k] = superelliptic_form(C, x^(i-1)/y^j)\n", " k = k+1\n", @@ -49,7 +61,21 @@ " basis[k] = superelliptic_form(C, x^(i-1)/y^j)\n", " k = k+1\n", " return basis\n", - " \n", + " \n", + " def basis_de_rham(self, j = 'all'):\n", + " f = self.polynomial\n", + " m = self.exponent\n", + " p = self.characteristic\n", + " r = f.degree()\n", + " delta = GCD(r, m)\n", + " #?????\n", + " basis = {}\n", + " if j == 'all':\n", + " for j in range(1, m):\n", + " holo = baza_holo(m, f, j, p)\n", + " for k in range(0, len(holo)):\n", + " baza[k] = holo[k]\n", + " \n", "def reduction(C, g):\n", " p = C.characteristic\n", " R. = PolynomialRing(GF(p), 2)\n", @@ -69,7 +95,7 @@ " \n", " while(g.degree(R(y)) >= m):\n", " d = g.degree(R(y))\n", - " G = g.coefficient(R(y^d))\n", + " G = coff(g, d)\n", " i = floor(d/m)\n", " g = g - G*y^d + f^i * y^(d%m) *G\n", " \n", @@ -91,9 +117,12 @@ " \n", " g = R3(g)\n", " for j in range(0, m):\n", - " G = g.coefficients(sparse = false)[j]\n", - " g1 += RR(y^(j-m)*f*G)\n", - " \n", + " if j==0:\n", + " G = coff(g, 0)\n", + " g1 += G\n", + " else:\n", + " G = coff(g, j)\n", + " g1 += RR(y^(j-m)*f*G)\n", " return(g1)\n", " \n", "class superelliptic_function:\n", @@ -184,55 +213,128 @@ " \n", " def jth_component(self, j):\n", " g = self.form\n", - " R. = PolynomialRing(GF(p), 2)\n", - " g = R(g)\n", - " return g.coefficient(y^j)" + " R1. = PolynomialRing(GF(p))\n", + " R2 = FractionField(R1)\n", + " R3. = PolynomialRing(R2)\n", + " R4 = FractionField(R3)\n", + " R5. = PolynomialRing(R2)\n", + " g = R4(g)\n", + " g = g(y = 1/y_inv)\n", + " g = R5(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", + " R. = PolynomialRing(GF(p))\n", + " for j in range(1, m):\n", + " if self.jth_component(j) not in R:\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)\n", + " if(-d*M + j*R -(M+1)<0):\n", + " return 0\n", + " return 1\n", + " \n", + "class superelliptic_cech:\n", + " def __init__(self, omega, fct):\n", + " self.omega0 = omega\n", + " self.omega8 = omega - diffn(fct)\n", + " self.f = fct\n", + " \n", + "def degree_of_rational_fctn(f):\n", + " R. = PolynomialRing(GF(p))\n", + " RR = FractionField(R)\n", + " f = RR(f)\n", + " f1 = f.numerator()\n", + " f2 = f.denominator()\n", + " d1 = f1.degree()\n", + " d2 = f2.degree()\n", + " return(d1 - d2)\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", + " coeff = f.coefficients(sparse = false)\n", + " return sum(x^(j-i-1) * coeff[j] for j in range(i+1, f.degree() + 1))" ] }, { "cell_type": "code", - "execution_count": 220, + "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{0: (1/y) dx}" + "((-2*x^3*y + x^2 + x)/y) dx" ] }, - "execution_count": 220, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C = superelliptic(x^3 + x + 2, 2, 5)\n", - "C.basis_holomorphic_differentials()" + "omega = superelliptic_form(C, (x^2+x)/y + 3*x^3)\n", + "omega" ] }, { "cell_type": "code", - "execution_count": 179, + "execution_count": 81, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 179, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "(1/y) dx\n", + "1 1\n", + "{0: (1/y) dx}\n" + ] } ], "source": [ - "A.degree(y)" + "licz = 0\n", + "m = 2\n", + "p = 5\n", + "R1. = PolynomialRing(GF(p))\n", + "f = R1(x^3 + x + 4)\n", + "r = f.degree()\n", + "C = superelliptic(f, m, p)\n", + "for i in range(0, r):\n", + " for j in range(1, m):\n", + " omega = superelliptic_form(C, x^i/y^j)\n", + " if (omega.is_regular_on_U0() and omega.is_regular_on_Uinfty()):\n", + " print(omega)\n", + " licz += 1\n", + "print(licz, C.genus())\n", + "print(C.basis_holomorphic_differentials())" ] }, { "cell_type": "code", - "execution_count": 180, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ @@ -243,7 +345,7 @@ }, { "cell_type": "code", - "execution_count": 181, + "execution_count": 83, "metadata": {}, "outputs": [], "source": [ @@ -252,16 +354,16 @@ }, { "cell_type": "code", - "execution_count": 183, + "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "-2*x^2 + 1" + "3*x^2 + 1" ] }, - "execution_count": 183, + "execution_count": 84, "metadata": {}, "output_type": "execute_result" } @@ -272,7 +374,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 85, "metadata": {}, "outputs": [ { @@ -281,7 +383,7 @@ "y" ] }, - "execution_count": 33, + "execution_count": 85, "metadata": {}, "output_type": "execute_result" } @@ -299,7 +401,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 86, "metadata": {}, "outputs": [], "source": [ @@ -357,34 +459,81 @@ }, { "cell_type": "code", - "execution_count": 213, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ + "p = 5\n", "R1. = PolynomialRing(GF(p))\n", "R2 = FractionField(R1)\n", "R3. = PolynomialRing(R2)\n", - "g = y^2/x + y/(x+1) " + "g = y^2/x + y/(x+1) \n", + "g = 1/y+x/y^2" ] }, { "cell_type": "code", - "execution_count": 218, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[0, 1/(x + 1), 1/x]" + "x*z^2 + z" ] }, - "execution_count": 218, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "g.coefficients(sparse = false)" + "R3. = PolynomialRing(R2)\n", + "g(y = 1/z)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "x^3 + x + 4" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'sage.rings.polynomial.polynomial_zmod_flint.Polynomial_zmod_flint' object has no attribute 'coefficient'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoefficient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/structure/element.pyx\u001b[0m in \u001b[0;36msage.structure.element.Element.__getattr__ (build/cythonized/sage/structure/element.c:4614)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 485\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'LeftZeroSemigroup_with_category.element_class'\u001b[0m \u001b[0mobject\u001b[0m \u001b[0mhas\u001b[0m \u001b[0mno\u001b[0m \u001b[0mattribute\u001b[0m \u001b[0;34m'blah_blah'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 486\u001b[0m \"\"\"\n\u001b[0;32m--> 487\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetattr_from_category\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 488\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 489\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mgetattr_from_category\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/structure/element.pyx\u001b[0m in \u001b[0;36msage.structure.element.Element.getattr_from_category (build/cythonized/sage/structure/element.c:4723)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 498\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 499\u001b[0m \u001b[0mcls\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mP\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_abstract_element_class\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 500\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgetattr_from_other_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 501\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 502\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__dir__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/cpython/getattr.pyx\u001b[0m in \u001b[0;36msage.cpython.getattr.getattr_from_other_class (build/cythonized/sage/cpython/getattr.c:2614)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 392\u001b[0m \u001b[0mdummy_error_message\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcls\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 393\u001b[0m \u001b[0mdummy_error_message\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 394\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdummy_error_message\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 395\u001b[0m \u001b[0mattribute\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m<\u001b[0m\u001b[0mobject\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0mattr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 396\u001b[0m \u001b[0;31m# Check for a descriptor (__get__ in Python)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'sage.rings.polynomial.polynomial_zmod_flint.Polynomial_zmod_flint' object has no attribute 'coefficient'" + ] + } + ], + "source": [ + "f.coefficient()" ] }, {