Documentation | Build Status |
---|---|
The package GromovWitten computes generating series for tropical Hurwitz numbers of elliptic curves via mirror symmetry and Feynman integrals, and thus, by a correspondence theorem, Hurwitz numbers in the sense algebraic geometry. Generalizations of the method also allow for the computation of Gromov-Witten invariants for elliptic curves, and are also implemented in the package. GromovWitten is based on the computeralgebra system OSCAR and is provided as a package for the Julia programming language.
We assume that Julia is installed in a recent enough version to run OSCAR. To install the package, follow these steps:
using Pkg
Pkg.add(url="https://github.com/singular-gpispace/GromovWitten.git")
This command will fetch the package from its GitHub repository and set it up in your Julia environment.
Once the package is installed, you can load it with the following command:
using GromovWitten
julia> G = feynman_graph([(1, 3), (1, 2), (1, 2), (2, 4), (3, 4), (3,4)] )
graph([(1, 3), (1, 2), (1, 2), (2, 4), (3, 4), (3, 4)])
julia> F = feynman_integral(G);
julia> a = [0, 2, 1, 0, 0, 1];
julia> o = [1,3,4,2];
julia> feynman_integral_branch_type_order(F, a, o)
128*q[2]^4*q[3]^2*q[6]^2
julia> feynman_integral_branch_type(F, a)
256*q[2]^4*q[3]^2*q[6]^2
also we can compute Feynman Integral of degree 3
julia> f = feynman_integral_degree(F, 3)
288*q[1]^6 + 32*q[1]^4*q[2]^2 + 32*q[1]^4*q[3]^2 + 32*q[1]^4*q[5]^2 + 32*q[1]^4*q[6]^2 + 8*q[1]^2*q[2]^2*q[5]^2 + 8*q[1]^2*q[2]^2*q[6]^2 + 8*q[1]^2*q[3]^2*q[5]^2 + 8*q[1]^2*q[3]^2*q[6]^2 + 24*q[2]^6 + 152*q[2]^4*q[3]^2 + 8*q[2]^4*q[5]^2 + 8*q[2]^4*q[6]^2 + 152*q[2]^2*q[3]^4 + 32*q[2]^2*q[3]^2*q[5]^2 + 32*q[2]^2*q[3]^2*q[6]^2 + 32*q[2]^2*q[4]^4 + 8*q[2]^2*q[4]^2*q[5]^2 + 8*q[2]^2*q[4]^2*q[6]^2 + 8*q[2]^2*q[5]^4 + 32*q[2]^2*q[5]^2*q[6]^2 + 8*q[2]^2*q[6]^4 + 24*q[3]^6 + 8*q[3]^4*q[5]^2 + 8*q[3]^4*q[6]^2 + 32*q[3]^2*q[4]^4 + 8*q[3]^2*q[4]^2*q[5]^2 + 8*q[3]^2*q[4]^2*q[6]^2 + 8*q[3]^2*q[5]^4 + 32*q[3]^2*q[5]^2*q[6]^2 + 8*q[3]^2*q[6]^4 + 288*q[4]^6 + 32*q[4]^4*q[5]^2 + 32*q[4]^4*q[6]^2 + 24*q[5]^6 + 152*q[5]^4*q[6]^2 + 152*q[5]^2*q[6]^4 + 24*q[6]^6
Finally we substitute all
julia> substitute(feynman_integral_degree_sum(F,8))
10246144*q[1]^16 + 3294720*q[1]^14 + 886656*q[1]^12 + 182272*q[1]^10 + 25344*q[1]^8 + 1792*q[1]^6 + 32*q[1]^4
We can try to cache the previous result in a table.
To do that, we define feynman_integral_branch_type_cache
, feynman_integral_degree_cache
and feynman_integral_degree__sum_cache
. The last one returns the univariable polynomial of Feynman integral sum up to degree
julia> G = feynman_graph([(1, 3), (1, 2), (1, 2), (2, 4), (3, 4), (3,4)] )
graph([(1, 3), (1, 2), (1, 2), (2, 4), (3, 4), (3, 4)])
julia> F = feynman_integral(G);
we cache the Feynman Integral.
julia> feynman_integral_degree_cache(F, 3);
To display the previous caching
julia> F.integral_cache[:degree]
Dict{Vector{Int64}, QQMPolyRingElem} with 4 entries:
[8] => 906376*q[1]^16 + 76832*q[1]^14*q[2]^2 + 76832*q[1]^14*q[3]^2 + 76832*…
[3] => 288*q[1]^6 + 32*q[1]^4*q[2]^2 + 32*q[1]^4*q[3]^2 + 32*q[1]^4*q[5]^2 +…
[5] => 20000*q[1]^10 + 2592*q[1]^8*q[2]^2 + 2592*q[1]^8*q[3]^2 + 2592*q[1]^8…
[10] => 5465008*q[1]^20 + 350352*q[1]^18*q[2]^2 + 350352*q[1]^18*q[3]^2 + 350…
We get the following table of comparison.
Type | degree | first_run | second_run |
---|---|---|---|
degree | [3] => 288*q[1]^6… | 0.044741 s(17.840 MiB) | 0.000021 s ( 1.609 KiB) |
degree | [5] => 20000*q[1]^10… | 0.209154 s( 129.200 MiB) | 0.000021 s ( 1.609 KiB) |
degree | [8] => 906376*q[1]^16 … | 1.768598 s( 1.113 GiB) | 1.000021 s ( 1.609 KiB) |
degree | [10] => 5465008*q[1]^20 +… | 5.453744 s(3.425 GiB) | 0.000033 s ( 1.609 KiB) |
similarly for the case of Feynman graph degree sum, we have:
julia> feynman_integral_degree_sum_cache(F, 3)
1792*q[1]^6 + 32*q[1]^4
To display the previous caching
julia> F.integral_cache[:sum]
Dict{Vector{Int64}, QQMPolyRingElem} with 5 entries:
[8] => 10246144*q[1]^16 + 3294720*q[1]^14 + 886656*q[1]^12 + 182272*q[1]^10 …
[3] => 1792*q[1]^6 + 32*q[1]^4
[5] => 182272*q[1]^10 + 25344*q[1]^8 + 1792*q[1]^6 + 32*q[1]^4
[11] => 145337600*q[1]^22 + 66497472*q[1]^20 + 27353088*q[1]^18 + 10246144*q[…
[10] => 66497472*q[1]^20 + 27353088*q[1]^18 + 10246144*q[1]^16 + 3294720*q[1]…
Type | degree | normal_time | cache_time |
---|---|---|---|
sum | [3] => 1792*q[1]^6… | 0.028567 s ( 23.850 MiB) | 0.029917 s (23.852 MiB)sum |
sum | [10] => 66497472*q[1]^20 +… | 12.292280 s (7.607 GiB | 8.813801 s ( 5.439 GiB) |
sum | [11] => 145337600*q[1]^22+… | 21.427653 s (13.190 ) | 9.026728 s (5.583 GiB) |