From 91df146a40693106752809d411bcea5d9373b915 Mon Sep 17 00:00:00 2001 From: jgarnek Date: Mon, 10 Oct 2022 16:38:16 +0000 Subject: [PATCH] po powrocie obliczania bazy do srodka klasy --- superelliptic.ipynb | 204 +++++++++++++++++++------------------------- 1 file changed, 89 insertions(+), 115 deletions(-) diff --git a/superelliptic.ipynb b/superelliptic.ipynb index 5aff74c..620e462 100644 --- a/superelliptic.ipynb +++ b/superelliptic.ipynb @@ -2,81 +2,13 @@ "cells": [ { "cell_type": "code", - "execution_count": 8, + "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ - "def basis_holomorphic_differentials_degree(f, m, p):\n", - " r = f.degree()\n", - " delta = GCD(r, m)\n", - " Rx. = PolynomialRing(GF(p))\n", - " Rxy. = PolynomialRing(GF(p), 2)\n", - " Fxy = FractionField(Rxy)\n", - " #########basis of holomorphic differentials and de Rham\n", - " \n", - " basis_holo = []\n", - " degrees0 = {}\n", - " k = 0\n", - " \n", - " for j in range(1, m):\n", - " for i in range(1, r):\n", - " if (r*j - m*i >= delta):\n", - " basis_holo += [Fxy(x^(i-1)/y^j)]\n", - " degrees0[k] = (i-1, j)\n", - " k = k+1\n", - " \n", - " return(basis_holo, degrees0)\n", - "\n", - "def holomorphic_differentials_basis(f, m, p):\n", - " basis_holo, degrees0 = basis_holomorphic_differentials_degree(f, m, p)\n", - " return basis_holo\n", - " \n", - "def degrees_holomorphic_differentials(f, m, p):\n", - " basis_holo, degrees0 = basis_holomorphic_differentials_degree(f, m, p)\n", - " return degrees0\n", - " \n", - "def basis_de_rham_degrees(f, m, p):\n", - " r = f.degree()\n", - " delta = GCD(r, m)\n", - " Rx. = PolynomialRing(GF(p))\n", - " Rxy. = PolynomialRing(GF(p), 2)\n", - " Fxy = FractionField(Rxy)\n", - " basis_holo = holomorphic_differentials_basis(f, m, p)\n", - " basis = []\n", - " for k in range(0, len(basis_holo)):\n", - " basis += [(basis_holo[k], Rx(0))]\n", - "\n", - " ## non-holomorphic elts of H^1_dR\n", - " t = len(basis)\n", - " degrees0 = {}\n", - " degrees1 = {}\n", - " for j in range(1, m):\n", - " for i in range(1, r):\n", - " if (r*(m-j) - m*i >= delta): \n", - " s = Rx(m-j)*Rx(x)*Rx(f.derivative()) - Rx(m)*Rx(i)*f\n", - " psi = Rx(cut(s, i))\n", - " basis += [(Fxy(psi/y^j), Fxy(m*y^(m-j)/x^i))]\n", - " degrees0[t] = (psi.degree(), j)\n", - " degrees1[t] = (-i, m-j)\n", - " t += 1\n", - " return basis, degrees0, degrees1\n", - "\n", - "def de_rham_basis(f, m, p):\n", - " basis, degrees0, degrees1 = basis_de_rham_degrees(f, m, p)\n", - " return basis\n", - "\n", - "def degrees_de_rham0(f, m, p):\n", - " basis, degrees0, degrees1 = basis_de_rham_degrees(f, m, p)\n", - " return degrees0\n", - "\n", - "def degrees_de_rham1(f, m, p):\n", - " basis, degrees0, degrees1 = basis_de_rham_degrees(f, m, p)\n", - " return degrees1 \n", - "\n", - "\n", "class superelliptic:\n", " \n", " def __init__(self, f, m, p):\n", @@ -89,30 +21,84 @@ " \n", " r = Rx(f).degree()\n", " delta = GCD(r, m)\n", - " self.degree_holo = degrees_holomorphic_differentials(f, m, p)\n", - " self.degree_de_rham0 = degrees_de_rham0(f, m, p)\n", - " self.degree_de_rham1 = degrees_de_rham1(f, m, p)\n", - " \n", - " holo_basis = holomorphic_differentials_basis(f, m, p)\n", - " holo_basis_converted = []\n", - " for a in holo_basis:\n", - " holo_basis_converted += [superelliptic_form(self, a)]\n", - " \n", - " self.basis_holomorphic_differentials = holo_basis_converted\n", - " \n", - "\n", - " dr_basis = de_rham_basis(f, m, p)\n", - " dr_basis_converted = []\n", - " for (a, b) in dr_basis:\n", - " dr_basis_converted += [superelliptic_cech(self, superelliptic_form(self, a), superelliptic_function(self, b))]\n", - " \n", - " self.basis_de_rham = dr_basis_converted\n", " \n", " def __repr__(self):\n", " f = self.polynomial\n", " m = self.exponent\n", " p = self.characteristic\n", " return 'Superelliptic curve with the equation y^' + str(m) + ' = ' + str(f)+' over finite field with ' + str(p) + ' elements.'\n", + "\n", + " \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. = PolynomialRing(GF(p))\n", + " Rxy. = PolynomialRing(GF(p), 2)\n", + " Fxy = FractionField(Rxy)\n", + " #########basis of holomorphic differentials and de Rham\n", + "\n", + " basis_holo = []\n", + " degrees0 = {}\n", + " k = 0\n", + "\n", + " for j in range(1, m):\n", + " for i in range(1, r):\n", + " if (r*j - m*i >= delta):\n", + " basis_holo += [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. = PolynomialRing(GF(p))\n", + " Rxy. = 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", " \n", " def is_smooth(self):\n", " f = self.polynomial\n", @@ -127,7 +113,7 @@ " return 1/2*((r-1)*(m-1) - delta + 1)\n", " \n", " def verschiebung_matrix(self):\n", - " basis = self.basis_de_rham\n", + " basis = self.de_rham_basis()\n", " g = self.genus()\n", " p = self.characteristic\n", " M = matrix(GF(p), 2*g, 2*g)\n", @@ -138,7 +124,7 @@ " return M\n", " \n", " def frobenius_matrix(self):\n", - " basis = self.basis_de_rham\n", + " basis = self.de_rham_basis()\n", " g = self.genus()\n", " p = self.characteristic\n", " M = matrix(GF(p), 2*g, 2*g)\n", @@ -150,7 +136,7 @@ " return M\n", "\n", " def cartier_matrix(self):\n", - " basis = self.basis_holomorphic_differentials\n", + " basis = self.basis_holomorphic_differentials()\n", " g = self.genus()\n", " p = self.characteristic\n", " M = matrix(GF(p), g, g)\n", @@ -159,7 +145,7 @@ " v = w.cartier().coordinates()\n", " M[i, :] = v\n", " return M \n", - " \n", + "\n", "# def p_rank(self):\n", "# return self.cartier_matrix().rank()\n", " \n", @@ -352,9 +338,9 @@ " Fx = FractionField(Rx)\n", " FxRy. = PolynomialRing(Fx)\n", " g = C.genus()\n", - " degrees_holo = C.degree_holo\n", + " degrees_holo = C.degrees_holomorphic_differentials()\n", " degrees_holo_inv = {b:a for a, b in degrees_holo.items()}\n", - " basis = C.basis_holomorphic_differentials\n", + " basis = C.basis_holomorphic_differentials()\n", " \n", " for j in range(1, m):\n", " omega_j = Fx(self.jth_component(j))\n", @@ -458,13 +444,13 @@ " Fx = FractionField(Rx)\n", " FxRy. = PolynomialRing(Fx)\n", " g = C.genus()\n", - " degrees_holo = C.degree_holo\n", + " degrees_holo = C.degrees_holomorphic_differentials()\n", " degrees_holo_inv = {b:a for a, b in degrees_holo.items()}\n", - " degrees0 = C.degree_de_rham0\n", + " degrees0 = C.degrees_de_rham0()\n", " degrees0_inv = {b:a for a, b in degrees0.items()}\n", - " degrees1 = C.degree_de_rham1\n", + " degrees1 = C.degrees_de_rham1()\n", " degrees1_inv = {b:a for a, b in degrees1.items()}\n", - " basis = C.basis_de_rham\n", + " basis = C.de_rham_basis()\n", " \n", " omega = self.omega0\n", " fct = self.f\n", @@ -567,7 +553,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 45, "metadata": { "collapsed": false }, @@ -659,19 +645,7 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - ], - "source": [ - "from datetime import datetime" - ] - }, - { - "cell_type": "code", - "execution_count": 3, + "execution_count": 46, "metadata": { "collapsed": false }, @@ -687,7 +661,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 47, "metadata": { "collapsed": false }, @@ -695,17 +669,17 @@ { "data": { "text/plain": [ - "1/y" + "[1]" ] }, - "execution_count": 7, + "execution_count": 47, "metadata": { }, "output_type": "execute_result" } ], "source": [ - "C.basis_holomorphic_differentials[0].form" + "C.final_type()" ] }, {