Module admcycles

admcycles.admcycles.Astructures(Gamma, A, identGamma=None, identA=None)[source]
admcycles.admcycles.Biell(g, n=0, m=0)[source]

Returns the cycle class of the bielliptic locus of genus g curves with n marked fixed points and m pairs of conjugate points in bar M_{g,n+2m}.

TESTS:

sage: B=Biell(2) # long time
sage: B.toTautbasis() # long time
(15/2, -9/4)
admcycles.admcycles.DR_cycle(g, dvector, r=None, k=0)[source]
admcycles.admcycles.DR_red(g, r, n, dvector, k, basis=False)[source]
admcycles.admcycles.DRpoly(g, r, n, dplus=0, tautout=True, basis=False, ring=None, gens=None)[source]
admcycles.admcycles.FZ_conjecture_holds(g, n, d)[source]
admcycles.admcycles.FZreconstruct(g, n, r)[source]
admcycles.admcycles.GraphIsom(G, H, check=False)[source]
admcycles.admcycles.Graphtodecstratum(G)[source]
class admcycles.admcycles.Gstgraph(G, gamma, vertact, legact, character, hdata=None)[source]
degenerations(v)[source]
delta_degree(v)[source]
dim(v=None)[source]
equivariant_glue_vertex(i, Gr, divGr={}, divs={}, dil={})[source]
extract_vertex(i)[source]
hurwitz_data()[source]
lstabilizer(j)[source]
quotient_graph(dicv={}, dicvinv={}, dicl={})[source]
rename_legs(di)[source]
to_decHstratum()[source]
to_prodHclass()[source]
vertact_reconstruct()[source]
vstabilizer(i)[source]
admcycles.admcycles.Hain_divisor(g, A)[source]

Returns a divisor class D extending the pullback of the theta-divisor under the Abel-Jacobi map (on compact type) given by partition A of zero. Note: D^g/g! agrees with the Double-Ramification cycle in compact type.

EXAMPLES:

sage: from admcycles import *

sage: R=PolynomialRing(QQ,'z',3)
sage: z0,z1,z2=R.gens()
sage: u=Hain_divisor(2,(z0,z1,z2))
sage: g=DRpoly(2,1,3) #u,g should agree inside compact type # long time
sage: (u.toTautvect()-g.toTautvect()).subs({z0:-z1-z2}) # long time
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1/24)
admcycles.admcycles.Hbdrystructures(g, H, bdry)[source]
admcycles.admcycles.Hdb_lookup(g, dat, markings)[source]
class admcycles.admcycles.Hdecstratum(Gr, kappa=None, psi=None, poly=None)[source]
consolidate()[source]
quotient_pushforward()[source]
to_decHstratum()[source]
admcycles.admcycles.Hidentify(g, dat, method='pull', vecout=False, redundancy=False, markings=None)[source]
admcycles.admcycles.Hintnumbers(g, dat, indices=None, redundancy=False)[source]
admcycles.admcycles.Hpullpush(g, dat, alpha)[source]

Pulls the class alpha to the space bar H_{g,dat} via map i forgetting the action, then pushes forward under delta.

class admcycles.admcycles.Htautclass(terms)[source]
consolidate()[source]
quotient_pullback(other)[source]
quotient_pushforward()[source]
to_prodHclass()[source]
admcycles.admcycles.HurData(G, l)[source]
class admcycles.admcycles.HurwitzData(G, l)[source]
nummarks()[source]
admcycles.admcycles.Hyperell(g, n=0, m=0)[source]

Returns the cycle class of the hyperelliptic locus of genus g curves with n marked fixed points and m pairs of conjugate points in barM_{g,n+2m}.

TESTS::
sage: H=Hyperell(3) # long time sage: H.toTautbasis() # long time (3/4, -9/4, -1/8)
admcycles.admcycles.Pixtongraph(G, kappa, psi)[source]
admcycles.admcycles.Tautv_to_tautclass(v, g, n, r)[source]
admcycles.admcycles.Tautvb_to_tautclass(v, g, n, r)[source]
admcycles.admcycles.Tautvecttobasis(v, g, n, r)[source]
admcycles.admcycles.barH(g, dat, markings=None)[source]

Returns bar H on genus g with Hurwitz datum dat as a prodHclass on the trivial graph, remembering only the marked points given in markings

admcycles.admcycles.capply(f, *args)[source]
admcycles.admcycles.checkintnum(g, n, r)[source]
admcycles.admcycles.chern_char_to_poly(chclass, dmax, g, n)[source]
admcycles.admcycles.cohom_is_taut(g, n, r)[source]
admcycles.admcycles.common_degenerations(G1, G2, modiso=False, rename=False)[source]
admcycles.admcycles.converttoTautvect(D, g=None, n=None, r=None)[source]
admcycles.admcycles.cyclicGstgraph(Gr, n, perm, cha, sigma=None)[source]
class admcycles.admcycles.decHstratum(gamma, spaces, vertdata, dicv0=None, dicl0=None, poly=None)[source]
evaluate()[source]
prodforgetpullback(spacelist)[source]
replace_space_by_Gstgraph(a, Gr, specialv=None, speciale=None)[source]
class admcycles.admcycles.decstratum(gamma, kappa=None, psi=None, poly=None)[source]
consolidate()[source]
convert_to_prodtautclass()[source]
degree_cap(dmax)[source]
degree_part(d)[source]
dimension_filter()[source]
evaluate()[source]
forgetful_pullback(newmark, rename=True)[source]
forgetful_pushforward(markings, dicv=False)[source]
gnr_list()[source]
rename_legs(dic, rename=False)[source]
split()[source]
toTautbasis(g=None, n=None, r=None)[source]
toTautvect(g=None, n=None, r=None)[source]
admcycles.admcycles.degeneration_graph(g, n, rmax=None)[source]
admcycles.admcycles.deggrfind(Gr, markdic=None)[source]
admcycles.admcycles.degree_filter(polyvec, d)[source]
admcycles.admcycles.deltapullpush(g, H, r)[source]
admcycles.admcycles.dicunion(*dicts)[source]
admcycles.admcycles.dicv_reconstruct(Gamma, A, dicl)[source]
admcycles.admcycles.equiGraphIsom(Gr1, Gr2)[source]
admcycles.admcycles.forgetful_diagonal(g, n, leglists, legdics, T=None)[source]
admcycles.admcycles.generating_indices(g, n, r, FZ=False)[source]
admcycles.admcycles.genstobasis(g, n, r)[source]
admcycles.admcycles.hodge_chern_char(g, n, d)[source]
admcycles.admcycles.insertvec(w, length, positions)[source]
admcycles.admcycles.inverseintmat(g, n, gi1, gi2, deg)[source]
admcycles.admcycles.inverseintmat2(g, n, gi1, gi2, deg)[source]
admcycles.admcycles.irrbdiv(g=None, n=None)[source]

Returns the pushforward of the fundamental class under the irreducible boundary gluing map bar M_{g-1,n+2} -> bar M_{g,n}.

INPUT:

g : integer
The total genus g of the graph.
n : integer
The total number of markings n of the graph.

EXAMPLES:

sage: from admcycles import *

sage: irrbdiv(2,5)
Graph :      [1] [[1, 2, 3, 4, 5, 6, 7]] [(6, 7)]
Polynomial : 1*

When working with fixed g and n for the moduli space bar M_{g,n} it is possible specify the desired value of the global variables g and n to avoid giving them as an argument each time:

sage: g=3; n=0; irrbdiv() 
Graph :      [2] [[1, 2]] [(1, 2)]
Polynomial : 1*
admcycles.admcycles.kappaadd(a, b)[source]
admcycles.admcycles.kappacl(vertex, index, numvert, g=None, n=None)[source]
admcycles.admcycles.kappaclass(a, g=None, n=None)[source]

Returns the (Arbarello-Cornalba) kappa-class kappa_a on bar M_{g,n} defined by

kappa_a= pi_*(psi_{n+1}^{a+1})

where pi is the morphism bar M_{g,n+1} –> bar M_{g,n}.

INPUT:

a : integer
The degree a of the kappa class.
g : integer
Genus g of curves in bar M_{g,n}.
n : integer
Number of markings n of curves in bar M_{g,n}.

EXAMPLES:

sage: from admcycles import *

sage: kappaclass(2,3,1)
Graph :      [3] [[1]] []
Polynomial : 1*(kappa_2^1 )_0 

When working with fixed g and n for the moduli space bar M_{g,n} it is possible specify the desired value of the global variables g and n to avoid giving them as an argument each time:

sage: g=1;n=2;kappaclass(1) 
Graph :      [1] [[1, 2]] []
Polynomial : 1*(kappa_1^1 )_0 
admcycles.admcycles.kpintersection_matrix(g, n, d)[source]
class admcycles.admcycles.kppoly(monom, coeff)[source]
consolidate()[source]
deg(i=0)[source]
expand_vertices(start, numvert)[source]
graphpullback(dicv, dicl)[source]
rename_legs(dic)[source]
admcycles.admcycles.lambdaclass(d, g=None, n=None)[source]

Returns the tautological class lambda_d on bar M_{g,n} defined as the d-th Chern class

lambda_d = c_d(E)

of the Hodge bundle E. The result is represented as a sum of stable graphs with kappa and psi classes.

INPUT:

d : integer
The degree d.
g : integer
Genus g of curves in bar M_{g,n}.
n : integer
Number of markings n of curves in bar M_{g,n}.

EXAMPLES:

sage: from admcycles import *

sage: lambdaclass(1,2,1)
Graph :      [2] [[1]] []
Polynomial : 1/12*(kappa_1^1 )_0 

Graph :      [2] [[1]] []
Polynomial : (-1/12)*psi_1^1 

Graph :      [1, 1] [[3], [1, 4]] [(3, 4)]
Polynomial : 1/12*

Graph :      [1] [[3, 4, 1]] [(3, 4)]
Polynomial : 1/24*

When working with fixed g and n for the moduli space bar M_{g,n} it is possible specify the desired value of the global variables g and n to avoid giving them as an argument each time:

sage: g=1;n=1;lambdaclass(1) 
Graph :      [1] [[1]] []
Polynomial : 1/12*(kappa_1^1 )_0 

Graph :      [1] [[1]] []
Polynomial : (-1/12)*psi_1^1 

Graph :      [0] [[3, 4, 1]] [(3, 4)]
Polynomial : 1/24*
admcycles.admcycles.lambdaintnumcheck(g)[source]
admcycles.admcycles.lambdaish(d, g, n)[source]
admcycles.admcycles.list_Hstrata(g, H, r)[source]
admcycles.admcycles.list_quotgraphs(g, H, r, localize=True)[source]
admcycles.admcycles.list_strata(g, n, r)[source]
admcycles.admcycles.list_tautgens(g, n, r)[source]

Lists all tautological classes of degree r on bar M_{g,n}.

INPUT:

g : integer
Genus g of curves in bar M_{g,n}.
n : integer
Number of markings n of curves in bar M_{g,n}.
r : integer
The degree r of of the classes.

EXAMPLES:

sage: from admcycles import *

sage: list_tautgens(2,0,2)
[0] : Graph :      [2] [[]] []
Polynomial : 1*(kappa_2^1 )_0 
[1] : Graph :      [2] [[]] []
Polynomial : 1*(kappa_1^2 )_0 
[2] : Graph :      [1, 1] [[2], [3]] [(2, 3)]
Polynomial : 1*(kappa_1^1 )_0 
[3] : Graph :      [1, 1] [[2], [3]] [(2, 3)]
Polynomial : 1*psi_2^1 
[4] : Graph :      [1] [[2, 3]] [(2, 3)]
Polynomial : 1*(kappa_1^1 )_0 
[5] : Graph :      [1] [[2, 3]] [(2, 3)]
Polynomial : 1*psi_2^1 
[6] : Graph :      [0, 1] [[3, 4, 5], [6]] [(3, 4), (5, 6)]
Polynomial : 1*
[7] : Graph :      [0] [[3, 4, 5, 6]] [(3, 4), (5, 6)]
Polynomial : 1*
admcycles.admcycles.load_FZrels()[source]
admcycles.admcycles.multivariate_interpolate(f, d, n, gridwidth=1, R=None, generator=None)[source]
admcycles.admcycles.onekppoly(numvert)[source]
admcycles.admcycles.preHbdrystructures(g, H)[source]
class admcycles.admcycles.prodHclass(gamma0, terms)[source]
consolidate()[source]
evaluate()[source]
gamma0_pullback(gamma1, dicv=None, dicl=None)[source]
toprodtautclass()[source]
class admcycles.admcycles.prodtautclass(gamma, terms=None, protaut=None)[source]
consolidate()[source]
dimension_filter()[source]
factor_pullback(vertices, prodcl)[source]
partial_pushforward(gamma0, dicv, dicl)[source]
pushforward()[source]
toprodHclass()[source]
totensorTautbasis(r, vecout=False)[source]
admcycles.admcycles.psicl(leg, numvert)[source]
admcycles.admcycles.psiclass(i, g=None, n=None)[source]

Returns the class psi_i on bar M_{g,n}.

INPUT:

i : integer
The leg i associated to the psi class.
g : integer
Genus g of curves in bar M_{g,n}.
n : integer
Number of markings n of curves in bar M_{g,n}.

EXAMPLES:

sage: from admcycles import *

sage: psiclass(2,2,3)
Graph :      [2] [[1, 2, 3]] []
Polynomial : 1*psi_2^1

When working with fixed g and n for the moduli space bar M_{g,n} it is possible specify the desired value of the global variables g and n to avoid giving them as an argument each time:

sage: g=3;n=2;psiclass(1) 
Graph :      [3] [[1, 2]] []
Polynomial : 1*psi_1^1
admcycles.admcycles.pullandidentify(g, n, r)[source]
admcycles.admcycles.pullback_matrix(g, n, d, bdry=None, irrbdry=True)[source]
admcycles.admcycles.pullpushtest(g, dat, r)[source]

Test if for Hurwitz space specified by (g,dat), pulling back codimension r relations under the source map and pushing forward under the target map gives relations.

admcycles.admcycles.pushpullcompat(g, n1, n2, r1)[source]
admcycles.admcycles.remove_trailing_zeroes(l)[source]
admcycles.admcycles.reset_g_n(gloc, nloc)[source]
admcycles.admcycles.rightcosetaction(G, H)[source]
admcycles.admcycles.save_FZrels()[source]
admcycles.admcycles.sepbdiv(g1, A, g=None, n=None)[source]

Returns the pushforward of the fundamental class under the boundary gluing map bar M_{g1,A} X bar M_{g-g1,{1,…,n} A} –> bar M_{g,n}.

INPUT:

g1 : integer
The genus g1 of the first vertex.
A: list
The list A of markings on the first vertex.
g : integer
The total genus g of the graph.
n : integer
The total number of markings n of the graph.

EXAMPLES:

sage: from admcycles import *

sage: sepbdiv(1,(1,3,4),2,5)
Graph :      [1, 1] [[1, 3, 4, 6], [2, 5, 7]] [(6, 7)]
Polynomial : 1*

When working with fixed g and n for the moduli space bar M_{g,n} it is possible specify the desired value of the global variables g and n to avoid giving them as an argument each time:

sage: g=3;n=3;sepbdiv(1,(2,)) 
Graph :      [1, 2] [[2, 4], [1, 3, 5]] [(4, 5)]
Polynomial : 1*
class admcycles.admcycles.stgraph(genera, legs, edges)[source]

Create a stable graph.

Represents a stable graph by a list of genera of its vertices, a list of legs at each vertex and a list of pairs of legs forming edges.

INPUT:

genera : list
List of genera of the vertices of length m.
legs : list
List of length m, where ith entry is list of legs attached to vertex i. By convention, legs are unique positive integers.
edges : list
List of edges of the graph. Each edge is a 2-tuple of legs.

EXAMPLES:

Creating a stable graph with two vertices of genera 3,5 joined by an edge with a self-loop at the genus 3 vertex:

sage: from admcycles import *
sage: stgraph([3,5],[[1,3,5],[2]],[(1,2),(3,5)])
[3, 5] [[1, 3, 5], [2]] [(1, 2), (3, 5)]

It is also possible to create graphs which are not neccesarily stable:

sage: stgraph([1,0],[[1],[2,3]],[(1,2)])
[1, 0] [[1], [2, 3]] [(1, 2)]
sage: stgraph([0],[[1]],[])
[0] [[1]] []
boundary_pullback(other)[source]
contract_edge(e, adddata=False)[source]
degenerate_nonsep(v)[source]
degenerate_sep(v, g1, M)[source]
degenerations(v=None)[source]
dim(v=None)[source]

Return dimension of moduli space at vertex v. If v=None, return dimension of entire stratum parametrized by graph.

edges_between(i, j)[source]
extract_subgraph(vertices, outgoing_legs=None, rename=True)[source]
forget_markings(markings)[source]
g()[source]

Returns the genus of the stable graph.

EXAMPLES:

sage: from admcycles import *
sage: G=stgraph([1,2],[[1,2],[3,4]],[(1,3),(2,4)]);G.g()
4
glue_vertex(i, Gr, divGr={}, divs={}, dil={})[source]
halfedges()[source]
invariant()[source]
leginversion(l)[source]
leglist()[source]
list_markings(v=None)[source]

Return the list of markings (non-edge legs) of self at vertex v.

EXAMPLES:

sage: from admcycles import *

sage: gam = stgraph([3,5],[[1,3,7],[2,4]],[(1,2)])
sage: gam.list_markings(0)
(3, 7)
sage: gam.list_markings()
(3, 7, 4)
n()[source]

Return the number of legs of the stable graph.

EXAMPLES:

sage: from admcycles import *
sage: G=stgraph([1,2],[[1,2],[3,4,5,6]],[(1,3),(2,4)]);G.n()
2
newleg()[source]
numvert()[source]
plot()[source]
plot_obj(vord=None, vpos=None, eheight=None)[source]
rename_legs(di, shift=0)[source]
reorder_vertices(vord)[source]
stabilize()[source]
tidy_up()[source]
to_tautclass()[source]
vertex(l)[source]
class admcycles.admcycles.tautclass(terms)[source]
FZsimplify(r=None)[source]

Returns representation of self as a tautclass formed by a linear combination of the preferred tautological basis. If r is given, only take degree r part.

coeff_subs(dic)[source]

If coefficients of self are polynomials, it tries to substitute variable assignments given by dic.

consolidate()[source]
degree_cap(dmax)[source]
degree_part(d)[source]
dimension_filter()[source]
evaluate()[source]
forgetful_pullback(legs, rename=True)[source]

Returns the pullback of a given tautological class under the map pi : bar M_{g,A cup B} –> bar M_{g,A}.

INPUT:

legs : list
List B of legs that are forgotten by the map pi.

EXAMPLES:

sage: from admcycles import *

sage: psiclass(2,1,2).forgetful_pullback([3])
Graph :      [1] [[1, 2, 3]] []
Polynomial : 1*psi_2^1 

Graph :      [1, 0] [[1, 4], [5, 3, 2]] [(4, 5)]
Polynomial : (-1)*
forgetful_pushforward(legs)[source]

Returns the pushforward of a given tautological class under the map pi : bar M_{g,n} –> bar M_{g,{1,…,n} A}.

INPUT:

legs : list
List A of legs that are forgotten by the map pi.

EXAMPLES:

sage: from admcycles import *

sage: s1=psiclass(3,1,3)^2;s1.forgetful_pushforward([2,3])
Graph :      [1] [[1]] []
Polynomial : 1*
sage: t=tautgens(2,2,1)[1]+2*tautgens(2,2,1)[3]
sage: t.forgetful_pushforward([1])
Graph :      [2] [[2]] []
Polynomial : 3*

Graph :      [2] [[2]] []
Polynomial : 2*
gnr_list()[source]
is_zero()[source]
rename_legs(dic, rename=False)[source]
simplify(g=None, n=None, r=None)[source]

Simplifies self by combining terms with same tautological generator, returns self.

toTautbasis(g=None, n=None, r=None)[source]
toTautvect(g=None, n=None, r=None)[source]
toprodtautclass(g, n)[source]
admcycles.admcycles.tautgens(g, n, r, decst=False)[source]

Returns a lists of all tautological classes of degree r on bar M_{g,n}.

INPUT:

g : integer
Genus g of curves in bar M_{g,n}.
n : integer
Number of markings n of curves in bar M_{g,n}.
r : integer
The degree r of of the classes.
decst : boolean
If set to True returns generators as decorated strata, else as tautological classes.

EXAMPLES:

sage: from admcycles import *

sage: tautgens(2,0,2)[1]
Graph :      [2] [[]] []
Polynomial : 1*(kappa_1^2 )_0
sage: L=tautgens(2,0,2);2*L[3]+L[4]
Graph :      [1, 1] [[2], [3]] [(2, 3)]
Polynomial : 2*psi_2^1

Graph :      [1] [[2, 3]] [(2, 3)]
Polynomial : 1*(kappa_1^1 )_0
admcycles.admcycles.trivGgraph(gen, D)[source]
admcycles.admcycles.trivgraph(g, n)[source]