Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
181 views
unlisted
ubuntu2004
a

��c�'�@s�dZddlmZddlmZddlmZddlmZm	Z	ddl
mZmZm
Z
mZmZddlmZdd	lmZd
efdd�Zefd
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zedd��Zdd�Zedd��ZdS) zM
Evaluation of integrals of cohomology classes against the fundamental class
�)�cached_function)�ZZ)�Subsets)�	bernoulli�multinomial�)�	MODULI_ST�	MODULI_CT�	MODULI_RT�	MODULI_SM�dim_form)�setparts_with_auts)�single_stratum�cCsFd}t||t|t|�|�||�}td|j���D�]}|j|dfd}g}td|j���D]`}	|j||	fddkr\|�|j||	fd�|j||	fddkr\|�|j||	fd�q\t|�}
t||
|�}g}td|d�D]*}	t|j|df|	�D]}
|�|	�q�q�t|�t|�|k�r.t	d��|t
||||�9}q0|S)aP
    EXAMPLES::

        sage: from admcycles.DR.graph import num_strata
        sage: from admcycles.DR.moduli import MODULI_ST
        sage: from admcycles.DR.evaluation import socle_evaluation
        sage: g = 2
        sage: markings = (1,)
        sage: for i in range(num_strata(g, 3*g-3+len(markings), (1,))):
        ....:     print(i, socle_evaluation(i, g, markings, MODULI_ST))
        0 1/1152
        1 13/1920
        2 53/5760
        3 259/5760
        4 29/128
        5 1/384
        6 101/5760
        7 169/1920
        8 29/5760
        9 139/5760
        10 29/5760
        11 1/1152
        12 1/576
        ...
        76 2
        77 2
        78 1
        79 1
        80 1
        81 1
        82 1
        83 1
        84 1
        85 1
        86 1
        87 1
        88 1
        89 1
        90 1
        91 1
    rr�zwrong dimension)rr�len�range�M�nrows�ncols�append�sum�
ValueError�
socle_formula)�num�g�markings�moduli_type�answer�G�i�g0�psilist�j�n0Zdim0�	kappalist�krr�;/home/user/Introduction lectures/admcycles/DR/evaluation.py�socle_evaluations0*
��r(cCst|�t|�}t|�}|tkrF||d|dk|dkkr�td��nt|tkrp||d||dkkr�td��nJ|tkr�|d|d|kr�td��n$|tkr�|d|d|kr�td��|tks�|dkr�t|�t||�S|tks�|tk�rt	|�t
|||�S|tk�rt||�SdS)aT
    Return the integral of a product of kappa and psi classes.

    EXAMPLES::

        sage: from admcycles.DR.evaluation import socle_formula
        sage: from admcycles.DR.moduli import MODULI_SM, MODULI_RT, MODULI_CT, MODULI_ST

        sage: socle_formula(4, [], [2], MODULI_SM)
        1/3225600
        sage: socle_formula(4, [], [1, 1], MODULI_SM)
        1/302400
        sage: socle_formula(3, [0], [2], MODULI_SM)
        1/120960
        sage: socle_formula(3, [0], [1, 1], MODULI_SM)
        1/13440
        sage: socle_formula(3, [1], [1], MODULI_SM)
        1/24192
        sage: socle_formula(3, [2], [], MODULI_SM)
        1/120960

        sage: socle_formula(3, [0], [2], MODULI_RT)
        1/120960
        sage: socle_formula(3, [0], [1, 1], MODULI_RT)
        1/13440
        sage: socle_formula(3, [1], [1], MODULI_RT)
        1/24192
        sage: socle_formula(3, [2], [], MODULI_RT)
        1/120960

        sage: socle_formula(4, [], [5], MODULI_CT)
        127/154828800
        sage: socle_formula(4, [], [1, 4], MODULI_CT)
        127/7741440
        sage: socle_formula(4, [], [2, 3], MODULI_CT)
        2159/77414400
        sage: socle_formula(4, [], [1, 1, 1, 1, 1], MODULI_CT)
        3171571/77414400

        sage: socle_formula(3, [], [6], MODULI_ST)
        1/82944
        sage: socle_formula(3, [], [1, 5], MODULI_ST)
        1/5760
        sage: socle_formula(3, [], [2, 4], MODULI_ST)
        971/2903040
        sage: socle_formula(3, [], [1, 1, 4], MODULI_ST)
        2173/967680
        sage: socle_formula(3, [], [1, 1, 1, 1, 1, 1], MODULI_ST)
        176557/107520
    rrzinvalid degreer�N)rrrrr
r	r�CTconst�CTsum�RTconst�RTsum�STsum)rr"r%r�degree�nrrr'rQs(3



rcCs�|��|ddkrlt��}tt|�d�D]:}|dd�}||dkr,||d8<|t||�7}q,|Std|dt|����}|td|d��d�9}|td|d���}|D]}|td|d��d�}q�|S)z�
    EXAMPLES::

        sage: from admcycles.DR.evaluation import multi2
        sage: multi2(3, [3, 0])
        1
        sage: multi2(3, [2])
        1
        sage: multi2(3, [2, 2, 0])
        10
    rrNrr))�sortr�zerorr�multi2�	factorial�multifactorial)r�sigma�totalr Z	sigmacopy�termrrr'r3�sr3cCsX|��d}t|�D]2\}}|dt|�|tdd�|D�|�7}q|dt|�S)Nr�����cSsg|]}dt|��qS�r�r��.0r#rrr'�
<listcomp>��zSTsum.<locals>.<listcomp>)r1r
r�STrecur�r"r%r7�i0�i1rrr'r.�s�r.cCs^|��t��}t|�D]4\}}|dt|�|t|dd�|D�|�7}q|dt|�S)Nr9cSsg|]}dt|��qSr:r;r<rrr'r>�r?zRTsum.<locals>.<listcomp>)r1rr2r
rr3)rr"r%r7rBrCrrr'r-�s�r-cCs\|��t��}t|�D]2\}}|dt|�|tdd�|D�|�7}q|dt|�S)Nr9cSsg|]}dt|��qSr:r;r<rrr'r>�r?zCTsum.<locals>.<listcomp>)r1rr2r
rrrArrr'r+�s�r+cCs@dt|�}td�|d}|dt|���|t|���S)aY
    Sequence of rational numbers related to Bernoulli numbers.

    INPUT: an integer g

    OUTPUT: a rational

    EXAMPLES::

        sage: from admcycles.DR.evaluation import CTconst
        sage: [CTconst(g) for g in range(12)]
        [1,
         1/24,
         7/5760,
         31/967680,
         127/154828800,
         73/3503554560,
         1414477/2678117105664000,
         8191/612141052723200,
         16931177/49950709902213120000,
         5749691557/669659197233029971968000,
         91546277357/420928638260761696665600000,
         3324754717/603513268363481705349120000]
    rr)rr�absr4)r�gg�powerrrr'r*�sr*cCsR|dkrtd�Stdt|����dd|dtd|d��d�d|S)a�
    Universal constant computing the intersection number

    \int_{Mbar_{g,n}} \psi_1^{g-1} \lambda_g \lambda_{g-1}.

    EXAMPLES::

        sage: from admcycles.DR.evaluation import RTconst
        sage: [RTconst(g) for g in range(12)]
        [1,
         1/24,
         1/2880,
         1/120960,
         1/3225600,
         1/63866880,
         691/697426329600,
         1/13284311040,
         3617/541999890432000,
         43867/64877386884710400,
         174611/2265559542005760000,
         77683/7958292791191142400]

    TESTS::

        sage: from admcycles import TautologicalRing
        sage: R = TautologicalRing(1,1)
        sage: (R.psi(1)^0*R.lambdaclass(1)*R.lambdaclass(0)).evaluate()
        1/24
        sage: R = TautologicalRing(2,1)
        sage: (R.psi(1)^1*R.lambdaclass(2)*R.lambdaclass(1)).evaluate()
        1/2880
        sage: R = TautologicalRing(3,1)
        sage: (R.psi(1)^2*R.lambdaclass(3)*R.lambdaclass(2)).evaluate()
        1/120960
    rrr)rrrDr5)rrrr'r,�s%r,cCsttt|���S)a�
    Integral of psi classes.

    INPUT: a sorted tuple of nonegative integers

    OUTPUT: a rational

    EXAMPLES::

        sage: from admcycles.DR.evaluation import STrecur
        sage: STrecur((0, 0, 0))
        1
        sage: STrecur((1,))
        1/24
        sage: STrecur((4,))
        1/1152
        sage: STrecur((7,))
        1/82944
        sage: STrecur((2,) * 3)
        7/240
        sage: STrecur((2,) * 6)
        1225/144
        sage: STrecur((1,) * 3)
        1/12
    )�STrecur_calc�tuple�sorted��psirrr'r@sr@cs��st��St��}t��}||dr0t��S�ddkr�|dkrT|dkrTt��St��}t�dd��}t|d�D]4}t|�}||dkrx||d8<|t|�7}qx|St||�dd}t�d�}t��}gd�t��}|dd7<|d|ddt|�7}gd�t��}|d||dd	t|�8}ttt|d���D�]�t��d}	t�fd
d��D��}
|
|	ddk�r��qZ|
|	dd}d|d|	dk�rqZddg�fdd
��D�}t|�}
|
�s�t	�ddg��fdd
�t|d�D�|dg}t|dd��}||d<|d|dt|�d||dt|�|
7}�qZ|d||dd||d}|S)Nr)rrr9)rrrrr�)rrr�c3s|]}�|VqdS)Nr�r=r rJrr'�	<genexpr>Zr?zSTrecur_calc.<locals>.<genexpr>csg|]}�|�qSrrrNrJrr'r>`r?z STrecur_calc.<locals>.<listcomp>csg|]}|�vr�|�qSrrrN��IrKrr'r>dr?)
r�onerrr2�listrr@rr)rK�sr0r7Zpsi_endr Zpsicopyr�dZnIZdegIZgIZpsi3�x�psi1�psi2rrPr'rG8s^ .��
$rGN)�__doc__�sage.misc.cachefuncr�sage.rings.integer_ringr�sage.combinat.subsetr�sage.arith.miscrr�modulirr	r
rr�utilsr
�graphrr(rr3r.r-r+r*r,r@rGrrrr'�<module>s&AJ			
)