https://github.com/uberparagon/mgn
Tip revision: 87eacb93177c9d41edb525bb71ae03ae45f18d14 authored by Drew Johnson on 20 March 2020, 16:48:33 UTC
added a ps and ps_ member to strataalgebra
added a ps and ps_ member to strataalgebra
Tip revision: 87eacb9
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>topintersections: Computing top intersections on Mbar_g,n — topintersections documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>
<body role="document">
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="nav-item nav-item-0"><a href="#">topintersections documentation</a> »</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="topintersections-computing-top-intersections-on-mbar-g-n">
<h1>topintersections: Computing top intersections on Mbar_g,n<a class="headerlink" href="#topintersections-computing-top-intersections-on-mbar-g-n" title="Permalink to this headline">¶</a></h1>
<p>This page demonstrates how to compute top intersections on Deligne-Mumford compactification of the moduli space of curves using Sage code written by Drew Johnson. A pdf description of the algorithms can be found <a class="reference external" href="https://github.com/uberparagon/mgn/blob/master/topintersections/tex/Mgn.pdf">here</a>. If you have any questions or problems, or if you find the code useful, please contact the author by email: <code class="docutils literal"><span class="pre">werd2.718@gmail.com</span></code>.</p>
<div class="toctree-wrapper compound">
</div>
</div>
<div class="section" id="acknowledgments">
<h1>Acknowledgments<a class="headerlink" href="#acknowledgments" title="Permalink to this headline">¶</a></h1>
<p>I worked on this project as a graduate student at Brigham Young University while being funded by the NSA grant of my adviser, Tyler Jarvis. Dr. Jarvis also answered many questions and pointed me to helpful resources during this project. The mathematical basis of the algorithms implemented here come from the <a class="reference external" href="http://arxiv.org/abs/alg-geom/9706006">paper</a> accompanying Carel Faber’s Maple code, and also from Stephanie Yang’s <a class="reference external" href="http://j-sag.org/Volume2/jsag-1-2010.pdf">write up</a> about her Macaulay 2 code. The code computes the Witten tau function using the recursion of <a class="reference external" href="http://arxiv.org/abs/0710.5322">Liu and Xu</a>.</p>
</div>
<div class="section" id="installing-and-starting">
<h1>Installing and starting<a class="headerlink" href="#installing-and-starting" title="Permalink to this headline">¶</a></h1>
<p><code class="docutils literal"><span class="pre">topintersections</span></code> is now distributed as part of the <code class="docutils literal"><span class="pre">mgn</span></code> package on PyPI. <a class="reference external" href="https://pypi.python.org/pypi/mgn/">Click here</a> for installation instructions.</p>
</div>
<div class="section" id="basic-operation">
<h1>Basic operation<a class="headerlink" href="#basic-operation" title="Permalink to this headline">¶</a></h1>
<p>Start a sage session and import the module:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="kn">from</span> <span class="nn">topintersections</span> <span class="kn">import</span> <span class="o">*</span>
</pre></div>
</div>
<p>You can use the space command to set the space you are working in. The first argument is the genus, and the last is the number of marked points. The space command does three things:</p>
<blockquote>
<div><ol class="arabic simple">
<li>It prints a list of classes and indexes for easy reference.</li>
<li>It sets the defaut space. This will be the space that the code will work in if you don’t specify one in the function calls.</li>
<li>It injects the variables names into your namespace so you can use them to make polynomials.</li>
</ol>
</div></blockquote>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">space</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="go">[1] psi1</span>
<span class="go">[2] ka1</span>
<span class="go">[3] ka2</span>
<span class="go">[4] ka3</span>
<span class="go">[5] ka4</span>
<span class="go">[6] ch1</span>
<span class="go">[7] ch3</span>
<span class="go">[8] irr</span>
<span class="go">[9] Dg1m1</span>
<span class="go">[10] la1</span>
<span class="go">[11] la2</span>
<span class="go">Mbar_2_1</span>
</pre></div>
</div>
<p>The class Dg1m1 is the class corresponding to the reducible boundary divisor where one component has genus 1 and the marked point 1. The class irr corresponds to the class of the irreducible boundary divisor. The classes psi, ka, ch, and la represent psi, kappa, chern character, and lambda classes respectively.</p>
<p>Now we are ready to compute some things. You can type in a polynomial in the classes given by the space command:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="n">irr</span><span class="o">^</span><span class="mi">3</span><span class="o">*</span><span class="n">psi1</span><span class="p">)</span>
<span class="go">Computing the intersection of irr^3*psi1 over Mbar_2_1...</span>
<span class="go">-11/6</span>
<span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="n">ka2</span><span class="o">^</span><span class="mi">2</span><span class="p">)</span>
<span class="go">Computing the intersection of ka2^2 over Mbar_2_1...</span>
<span class="go">53/5760</span>
<span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="mi">3</span><span class="o">*</span><span class="n">irr</span><span class="o">^</span><span class="mi">3</span><span class="o">*</span><span class="n">psi1</span> <span class="o">+</span> <span class="mi">6</span><span class="o">*</span><span class="n">ka2</span><span class="o">^</span><span class="mi">2</span><span class="p">)</span>
<span class="go">Computing the intersection of 3*irr^3*psi1 + 6*ka2^2 over Mbar_2_1...</span>
<span class="go">-5227/960</span>
</pre></div>
</div>
<p>If you are just computing a monomial with no coefficient, you can pass in the indexes as a list. Thus, the following command computes the same number as the first example above.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">intnum</span><span class="p">([</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span>
<span class="go">Computing the intersection of irr^3*psi1 over Mbar_2_1...</span>
<span class="go">-11/6</span>
</pre></div>
</div>
<p>You can also specify the space you wish to work over in the function call. Any classes that are in the namespace will be interpreted as being in the space you specified. For example:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span> <span class="n">psi1</span><span class="o">^</span><span class="mi">5</span><span class="p">)</span>
<span class="go">Computing the intersection of psi1^5 over Mbar_2_2...</span>
<span class="go">1/1152</span>
</pre></div>
</div>
<p>The following syntax should be very similar to Carel Faber’s MgnLb.txt Maple program:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,[</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span>
<span class="go">Computing the intersection of psi1^5 over Mbar_2_2...</span>
<span class="go">1/1152</span>
</pre></div>
</div>
<p>However, in order to type in a polynomial in classes, the names must have been created by a previous space command. Thus, if you have not called space with marked points at least 2 in this session, the following will give an error:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span> <span class="n">psi1</span><span class="o">*</span><span class="n">psi2</span><span class="o">^</span><span class="mi">4</span><span class="p">)</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="gr">NameError</span>: <span class="n">name 'psi2' is not defined</span>
</pre></div>
</div>
<p>Instead, do something like:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">space</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
<span class="go">[1] psi1</span>
<span class="go">[2] psi2</span>
<span class="go">[3] ka1</span>
<span class="go">[4] ka2</span>
<span class="go">[5] ka3</span>
<span class="go">[6] ka4</span>
<span class="go">[7] ka5</span>
<span class="go">[8] ch1</span>
<span class="go">[9] ch3</span>
<span class="go">[10] irr</span>
<span class="go">[11] Dg0m1_2</span>
<span class="go">[12] Dg1m1</span>
<span class="go">[13] Dg1m1_2</span>
<span class="go">[14] la1</span>
<span class="go">[15] la2</span>
<span class="go">Mbar_2_2</span>
<span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="n">psi1</span><span class="o">*</span><span class="n">psi2</span><span class="o">^</span><span class="mi">4</span><span class="p">)</span>
<span class="go">Computing the intersection of psi1*psi2^4 over Mbar_2_2...</span>
<span class="go">1/384</span>
</pre></div>
</div>
<p>If the degree is not correct, you will know. (The code only computes top intersections.)</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span> <span class="n">psi1</span><span class="o">^</span><span class="mi">2</span><span class="p">)</span>
<span class="go">Computing the intersection of psi1^2 over Mbar_2_2...</span>
<span class="go">The monomial psi1^2 has degree 2, while the space Mbar_2_2 has dimension 5.</span>
</pre></div>
</div>
</div>
<div class="section" id="some-more-examples">
<h1>Some more examples<a class="headerlink" href="#some-more-examples" title="Permalink to this headline">¶</a></h1>
<p>Here are some of the intersection numbers from Faber’s paper:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span> <span class="n">irr</span><span class="o">^</span><span class="mi">9</span><span class="p">)</span>
<span class="go">Computing the intersection of irr^9 over Mbar_4_0...</span>
<span class="go">-251987683/4320</span>
<span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span> <span class="n">la1</span><span class="o">^</span><span class="mi">9</span><span class="p">)</span>
<span class="go">Computing the intersection of la1^9 over Mbar_4_0...</span>
<span class="go">1/113400</span>
</pre></div>
</div>
</div>
<div class="section" id="options">
<h1>Options<a class="headerlink" href="#options" title="Permalink to this headline">¶</a></h1>
<p>You can suppress the helpful message that tells you what you are computing using the <code class="docutils literal"><span class="pre">confirm</span></code> keyword argument.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="n">psi1</span><span class="o">^</span><span class="mi">5</span><span class="p">,</span> <span class="n">confirm</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
<span class="go">1/1152</span>
</pre></div>
</div>
<p>You can have the program return zero if the degree is wrong instead of raising an exception by using the <code class="docutils literal"><span class="pre">check_degree</span></code> keyword argument.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">intnum</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span> <span class="n">psi1</span><span class="o">^</span><span class="mi">2</span><span class="p">,</span> <span class="n">check_degree</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
<span class="go">Computing the intersection of psi1^2 over Mbar_2_2...</span>
</pre></div>
</div>
</div>
<div class="section" id="saving-and-loading">
<h1>Saving and loading<a class="headerlink" href="#saving-and-loading" title="Permalink to this headline">¶</a></h1>
<p>So far we have computed numbers from scratch. The program automatically saves any answers that it has computed in this session, including numbers computed in recursion steps. For example, if you computed the example <code class="docutils literal"><span class="pre">la1^9</span></code> above, you probably noticed that it took a few seconds. If we compute it again, it will be really fast because the program just looks it up in a dictionary.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">timeit</span><span class="p">(</span><span class="s2">"intnum(4,0, la1^9)"</span><span class="p">,</span> <span class="n">number</span> <span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">repeat</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span> <span class="c1">#random</span>
<span class="go">1 loops, best of 1: 7.06 ms per loop</span>
</pre></div>
</div>
<p>We can save this data to a file to avoid computing it over again in our next session.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">save_data</span><span class="p">(</span><span class="s2">"testsave.dat"</span><span class="p">,</span> <span class="n">prompt</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
<span class="go">Save suceeded.</span>
</pre></div>
</div>
<p>If you don’t specify a file name, the data is saved to the file <code class="docutils literal"><span class="pre">mgn_top_intersect.dat</span></code>.</p>
<p>To load a previously saved data file, use the following command:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">sage: </span><span class="n">load_data</span><span class="p">(</span><span class="s2">"testsave.dat"</span><span class="p">)</span>
<span class="go">Data loaded.</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="#">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">topintersections: Computing top intersections on Mbar_g,n</a></li>
<li><a class="reference internal" href="#acknowledgments">Acknowledgments</a></li>
<li><a class="reference internal" href="#installing-and-starting">Installing and starting</a></li>
<li><a class="reference internal" href="#basic-operation">Basic operation</a></li>
<li><a class="reference internal" href="#some-more-examples">Some more examples</a></li>
<li><a class="reference internal" href="#options">Options</a></li>
<li><a class="reference internal" href="#saving-and-loading">Saving and loading</a></li>
</ul>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/index.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="nav-item nav-item-0"><a href="#">topintersections documentation</a> »</li>
</ul>
</div>
<div class="footer" role="contentinfo">
© Copyright 2017, Drew Johnson.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.3.
</div>
</body>
</html>