From eac837ddeeb2495bc2e04a46e18043fff542d3e8 Mon Sep 17 00:00:00 2001 From: Luke Naylor <l.naylor@sms.ed.ac.uk> Date: Wed, 26 Jul 2023 16:47:53 +0100 Subject: [PATCH] Copy recurring examples to separate notebook and integrate into build --- .gitignore | 2 + Makefile | 9 +- examples.ipynb | 324 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 334 insertions(+), 1 deletion(-) create mode 100644 examples.ipynb diff --git a/.gitignore b/.gitignore index 3cecb67..57a75c6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ main.* !main.tex plots_and_expressions.* !plots_and_expressions.ipynb +examples.* +!examples.ipynb filtered_sage.txt _minted-main/* sage-plots-for-main.tex diff --git a/Makefile b/Makefile index 928e47c..164ab58 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ SAGETEXSCRIPT = main.sagetex.sage main.pdf: ${TEXFILES} main.sagetex.sout.tmp latexmk -main.sagetex.sout.tmp: ${SAGETEXSCRIPT} plots_and_expressions.py +main.sagetex.sout.tmp: ${SAGETEXSCRIPT} plots_and_expressions.py examples.py PYTHONPATH=./sagetexscripts/ sage ${SAGETEXSCRIPT} ${SAGETEXSCRIPT}: ${TEXFILES} @@ -21,6 +21,13 @@ plots_and_expressions.py: plots_and_expressions.ipynb sage --preparse plots_and_expressions.sage mv plots_and_expressions.sage.py plots_and_expressions.py +examples.py: plots_and_expressions.py examples.ipynb + jupyter nbconvert --to script examples.ipynb + mv examples.py examples.sage + sed -e "/get_ipython/d" -i examples.sage + sage --preparse examples.sage + mv examples.sage.py examples.py + .PHONY: clean nosage noappendix clean: rm -rf **/__pycache__ diff --git a/examples.ipynb b/examples.ipynb new file mode 100644 index 0000000..affe546 --- /dev/null +++ b/examples.ipynb @@ -0,0 +1,324 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "abe149f0", + "metadata": {}, + "outputs": [], + "source": [ + "# Requires extra package:\n", + "#! sage -pip install \"pseudowalls==0.0.3\" --extra-index-url https://gitlab.com/api/v4/projects/43962374/packages/pypi/simple\n", + "%display latex\n", + "\n", + "from pseudowalls import *\n", + "\n", + "Δ = lambda v: v.Q_tilt()\n", + "mu = stability.Mumford().slope\n", + "ts = stability.Tilt\n", + "\n", + "var(\"beta\", domain=\"real\")\n", + "\n", + "def beta_minus(v):\n", + " beta = stability.Tilt().beta\n", + " solutions = solve(\n", + " stability.Tilt(alpha=0).degree(v)==0,\n", + " beta)\n", + " return min(map(lambda s: s.rhs(), solutions))\n", + "\n", + "class Object(object):\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "77fff07c", + "metadata": {}, + "outputs": [], + "source": [ + "var(\"m\") # Initialize symbol for variety parameter\n", + "recurring = Object()\n", + "recurring.chern = Chern_Char(3, 2, -2)\n", + "recurring.b = beta_minus(recurring.chern)\n", + "recurring.twisted = recurring.chern.twist(recurring.b)\n", + "# RENDERED TO LATEX: recurring.b\n", + "# RENDERED TO LATEX: recurring.b.denominator()\n", + "# RENDERED TO LATEX: recurring.twisted.ch[1]\n", + "n = recurring.b.denominator()\n", + "m = 2\n", + "recurring.loose_bound = (\n", + " m*n^2*recurring.twisted.ch[1]^2\n", + ") / gcd(m, 2*n^2)\n", + "# RENDERED TO LATEX: loose_bound\n", + "extravagant = Object()\n", + "extravagant.chern = Chern_Char(29, 13, -3/2)\n", + "extravagant.b = beta_minus(extravagant.chern)\n", + "extravagant.twisted = extravagant.chern.twist(extravagant.b)\n", + "extravagant.actual_rmax = 49313\n", + "# RENDERED TO LATEX: extravagant.b\n", + "# RENDERED TO LATEX: extravagant.b.denominator()\n", + "# RENDERED TO LATEX: extravagant.twisted.ch[1]\n", + "n = extravagant.b.denominator()\n", + "m = 2\n", + "extravagant.loose_bound = (\n", + " m*n^2*extravagant.twisted.ch[1]^2\n", + ") / gcd(m, 2*n^2)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9edbb954", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<html>\\(\\displaystyle 144\\)</html>" + ], + "text/latex": [ + "$\\displaystyle 144$" + ], + "text/plain": [ + "144" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "recurring.loose_bound" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "21b52c4d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<html>\\(\\displaystyle 215296\\)</html>" + ], + "text/latex": [ + "$\\displaystyle 215296$" + ], + "text/plain": [ + "215296" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "extravagant.loose_bound" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "712b7324", + "metadata": {}, + "outputs": [], + "source": [ + "from plots_and_expressions import r_upper_bound_all_q, Delta, nu, n, R" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ab9a828f", + "metadata": {}, + "outputs": [], + "source": [ + "recurring.n = recurring.b.denominator()\n", + "recurring.bgmlv = recurring.chern.Q_tilt()\n", + "recurring.corrolary_bound = (\n", + " r_upper_bound_all_q.expand()\n", + " .subs(Delta==recurring.bgmlv)\n", + " .subs(nu==1) ## \\ell^2=1 on P^2\n", + " .subs(R==recurring.chern.ch[0])\n", + " .subs(n==recurring.n)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "2965357d", + "metadata": {}, + "outputs": [], + "source": [ + "extravagant.n = extravagant.b.denominator()\n", + "extravagant.bgmlv = extravagant.chern.Q_tilt()\n", + "extravagant.corrolary_bound = (\n", + " r_upper_bound_all_q.expand()\n", + " .subs(Delta==extravagant.bgmlv)\n", + " .subs(nu==1) ## \\ell^2=1 on P^2\n", + " .subs(R==extravagant.chern.ch[0])\n", + " .subs(n==extravagant.n)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5baed51c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<html>\\(\\displaystyle 53838.5009765625\\)</html>" + ], + "text/latex": [ + "$\\displaystyle 53838.5009765625$" + ], + "text/plain": [ + "53838.5009765625" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(extravagant.corrolary_bound)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "fcc15f60", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<html>\\(\\displaystyle 37.515625\\)</html>" + ], + "text/latex": [ + "$\\displaystyle 37.515625$" + ], + "text/plain": [ + "37.515625" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "float(recurring.corrolary_bound)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ef8f09ff", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "def bound_comparisons(example):\n", + " n = example.b.denominator()\n", + " a_v = example.b.numerator()\n", + "\n", + " def theorem_bound(v_twisted, q_val, k):\n", + " return int(min(\n", + " n^2*q_val^2/k\n", + " ,\n", + " v_twisted.ch[0]\n", + " + n^2*(v_twisted.ch[1] - q_val)^2/k\n", + " ))\n", + "\n", + " def k(n, a_v, b_q):\n", + " n = int(n)\n", + " a_v = int(a_v)\n", + " b_q = int(b_q)\n", + " k = -a_v*b_q % n\n", + " return k if k > 0 else k + n\n", + "\n", + " b_qs = list(range(example.twisted.ch[1]*n+1))\n", + " qs = list(map(lambda x: x/n,b_qs))\n", + " ks = list(map(lambda b_q: k(n, a_v, b_q), b_qs))\n", + " theorem2_bounds = [\n", + " theorem_bound(example.twisted, q_val, 1)\n", + " for q_val in qs\n", + " ]\n", + " theorem3_bounds = [\n", + " theorem_bound(example.twisted, q_val, k)\n", + " for q_val, k in zip(qs,ks)\n", + " ]\n", + " return qs, theorem2_bounds, theorem3_bounds" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "9cd102ac", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<html>\\(\\displaystyle \\begin{array}{l}\n", + "\\verb|[[0|\\verb| |\\verb|1/3|\\verb| |\\verb|2/3|\\verb| |\\verb|1|\\verb| |\\verb|4/3|\\verb| |\\verb|5/3|\\verb| |\\verb|2|\\verb| |\\verb|7/3|\\verb| |\\verb|8/3|\\verb| |\\verb|3|\\verb| |\\verb|10/3|\\verb| |\\verb|11/3|\\verb| |\\verb|4]|\\\\\n", + "\\verb| |\\verb|[0|\\verb| |\\verb|1|\\verb| |\\verb|4|\\verb| |\\verb|9|\\verb| |\\verb|16|\\verb| |\\verb|25|\\verb| |\\verb|36|\\verb| |\\verb|28|\\verb| |\\verb|19|\\verb| |\\verb|12|\\verb| |\\verb|7|\\verb| |\\verb|4|\\verb| |\\verb|3]|\\\\\n", + "\\verb| |\\verb|[0|\\verb| |\\verb|0|\\verb| |\\verb|4|\\verb| |\\verb|3|\\verb| |\\verb|8|\\verb| |\\verb|25|\\verb| |\\verb|12|\\verb| |\\verb|15|\\verb| |\\verb|19|\\verb| |\\verb|6|\\verb| |\\verb|5|\\verb| |\\verb|4|\\verb| |\\verb|3]]|\n", + "\\end{array}\\)</html>" + ], + "text/latex": [ + "$\\displaystyle \\begin{array}{l}\n", + "\\verb|[[0|\\verb| |\\verb|1/3|\\verb| |\\verb|2/3|\\verb| |\\verb|1|\\verb| |\\verb|4/3|\\verb| |\\verb|5/3|\\verb| |\\verb|2|\\verb| |\\verb|7/3|\\verb| |\\verb|8/3|\\verb| |\\verb|3|\\verb| |\\verb|10/3|\\verb| |\\verb|11/3|\\verb| |\\verb|4]|\\\\\n", + "\\verb| |\\verb|[0|\\verb| |\\verb|1|\\verb| |\\verb|4|\\verb| |\\verb|9|\\verb| |\\verb|16|\\verb| |\\verb|25|\\verb| |\\verb|36|\\verb| |\\verb|28|\\verb| |\\verb|19|\\verb| |\\verb|12|\\verb| |\\verb|7|\\verb| |\\verb|4|\\verb| |\\verb|3]|\\\\\n", + "\\verb| |\\verb|[0|\\verb| |\\verb|0|\\verb| |\\verb|4|\\verb| |\\verb|3|\\verb| |\\verb|8|\\verb| |\\verb|25|\\verb| |\\verb|12|\\verb| |\\verb|15|\\verb| |\\verb|19|\\verb| |\\verb|6|\\verb| |\\verb|5|\\verb| |\\verb|4|\\verb| |\\verb|3]]|\n", + "\\end{array}$" + ], + "text/plain": [ + "array([[0, 1/3, 2/3, 1, 4/3, 5/3, 2, 7/3, 8/3, 3, 10/3, 11/3, 4],\n", + " [0, 1, 4, 9, 16, 25, 36, 28, 19, 12, 7, 4, 3],\n", + " [0, 0, 4, 3, 8, 25, 12, 15, 19, 6, 5, 4, 3]], dtype=object)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.array(bound_comparisons(recurring))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "SageMath 9.7", + "language": "sage", + "name": "sagemath" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab