unlisted
ubuntu2004o
��c4k � @ sH d Z ddlZddlmZmZmZmZmZmZm Z ddlm
Z
mZmZ ddl
mZmZ ddlmZ ddlmZ dd lmZ dd
lmZmZmZ ddlmZmZ dd
� Zdd� Zdd� Zd2dd�Z d3dd�Z!d3dd�Z"dd� Z#dd� Z$d3dd�Z%dd� Z&d d!� Z'd"d#� Z(d$d%� Z)d3d&d'�Z*d3d(d)�Z+d*d+� Z,d,d-� Z-d3d.d/�Z.d3d0d1�Z/dS )4a�
Chern character of the derived pushforward of a line bundle `\O(D)` on
the universal curve C_{g,n} over the space Mbar_{g,n} of stable curves via
the Grothendieck-Riemann-Roch (GRR) formula.
The algorithm implemented is the formula of Theorem 1 from the paper [PRvZ20]_ of
Pagani, Ricolfi and van Zelm. The formula itself is in the function
``generalized_hodge_chern(l,d,a,dmax,g,n)`` where using the notation from [PRvZ20]_:
- ``l`` is the integer l from equation (0.1)
- ``d`` is a list [d_1,...,d_n]
- ``a`` is a list of triples [h,S,a_{h,S}], where h is an integer and S a list
so that [h,S] indicates the graph with two vertices and one edge with genus h
on the left and markings S on the left. The integer a_{h,S} is the
corresponding value to this graph from equation (0.1). Only the graphs with
nonzero a_{h,S} need to be entered.
- ``dmax`` is the maximal codim to which we want to compute the formula of Theorem 1.
- ``g`` and ``n`` are respectively the genus and the number of marked points
As described in the paper [PRvZ20]_ this can be used to compute the DR cycle in
certain cases (namely when (d=[0,...,\pm 1,...,\mp 1,...,0]). The DR cycle can
be computed directly in this case by
DR_phi(g,d)
The DR cycle can also be computed using [JPPZ17]_. This method has already been
implemented in admcycles.sage as DR_cycle(g,d). To verify that the methods give
the same result modulo Pixton relations one can type:
(DR_phi(g,d) - DR_cycle(g,d)).is_zero()
We verified that these classes are the same for d=[1,-1] and g=1,2,3,4. For
higher values of g the computation takes too long. Note that in the case of
g=4 these are codimension 4 classes. The ring R^4(M_4,2) is generated by 3990
distinct decorated stratum classes, so this is a serious check on the
correctness of these formula's. Note also that the two methods do not give the
same result if we do not mod out by Pixton relations. i.e.
(DR_phi(g,d) - DR_cycle(g,d)).simplify()
is not zero.
� N� )� tautclass�
decstratum�stgraph�psicl�kappacl�psiclass�
kappaclass)�chern_char_to_poly�chern_char_to_class� fundclass)�ZZ�QQ)�matrix)�powerset)�prod)� bernoulli�binomial�multinomial)�bernoulli_polynomial�IntegerVectorsc C s t | �t| ��� S )z�
Return Bernoulli number of index ``n`` divided by ``n!``.
EXAMPLES::
sage: from admcycles import *
sage: from admcycles.GRRcomp import *
sage: divided_bernoulli(12)
-691/1307674368000
)r r
� factorial��n� r �5/home/user/Introduction lectures/admcycles/GRRcomp.py�divided_bernoulli: s r c C s t | |�t|��� S )a7
Return Bernoulli polynomial of index ``n`` at ``l``, divided by ``n!``.
EXAMPLES::
sage: from admcycles import *
sage: from admcycles.GRRcomp import *
sage: x = polygen(QQ,'x')
sage: divided_bernoulli_polynomial(x,4)
1/24*x^4 - 1/12*x^3 + 1/24*x^2 - 1/720
)r r
r )�lr r r r �divided_bernoulli_polynomialH s r c C s0 | du r
ddl m} |du rddl m} | |fS )a
Helper function that fetches the global ``g`` and ``n`` parameters.
See also :func:`admcycles.reset_g_n`.
The global ``g`` and ``n`` should rather be replaced by the creation
of an object ``MMbar(g, n)`` with attributes ``g`` and ``n``.
Nr )�gr )� admcyclesr r �r r r r r �
handle_g_nW s
r"