Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions experimental/FTheoryTools/docs/src/literature.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ weighted_resolution_zero_sections(m::AbstractFTheoryModel)
zero_section(m::AbstractFTheoryModel)
zero_section_class(m::AbstractFTheoryModel)
zero_section_index(m::AbstractFTheoryModel)
exceptional_classes(m::AbstractFTheoryModel)
exceptional_divisor_indices(m::AbstractFTheoryModel)
torsion_sections(m::AbstractFTheoryModel)
```

Expand Down
66 changes: 66 additions & 0 deletions experimental/FTheoryTools/src/AbstractFTheoryModels/attributes.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1096,6 +1096,72 @@ function zero_section_index(m::AbstractFTheoryModel)
end


@doc raw"""
exceptional_classes(m::AbstractFTheoryModel)

Return the cohomology classes of the exceptional toric divisors of a model as a vector of cohomology classes in the toric ambient space.
This information is only supported for models over a concrete base that is a normal toric variety, but is always available in this case.
After a toric blow up this information is updated.

```jldoctest
julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> Kbar = anticanonical_divisor_class(B3)
Divisor class on a normal toric variety

julia> foah11_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.142", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar))
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

Hypersurface model over a concrete base

julia> exceptional_classes(foah11_B3)
4-element Vector{CohomologyClass}:
Cohomology class on a normal toric variety given by e1
Cohomology class on a normal toric variety given by e2
Cohomology class on a normal toric variety given by e3
Cohomology class on a normal toric variety given by e4
```
"""
function exceptional_classes(m::AbstractFTheoryModel)
@req base_space(m) isa NormalToricVariety "Exceptional divisor classes are only supported for models over a concrete base"
return get_attribute(m, :exceptional_classes, Vector{CohomologyClass}())
end


@doc raw"""
exceptional_divisor_indices(m::AbstractFTheoryModel)

Return the indices of the generators of the Cox ring of the ambient space which correspond to exceptional divisors.
This information is only supported for models over a concrete base that is a normal toric variety, but is always available in this case.
After a toric blow up this information is updated.

```jldoctest
julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> Kbar = anticanonical_divisor_class(B3)
Divisor class on a normal toric variety

julia> foah11_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.142", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar))
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

Hypersurface model over a concrete base

julia> exceptional_divisor_indices(foah11_B3)
4-element Vector{Int64}:
8
9
10
11
```
"""
@attr Vector{Int} function exceptional_divisor_indices(m::AbstractFTheoryModel)
@req base_space(m) isa NormalToricVariety "Exceptional divisor indices are only supported for models over a concrete base"
return get_attribute(m, :exceptional_divisor_indices, Vector{Int}())
end


@doc raw"""
torsion_sections(m::AbstractFTheoryModel)

Expand Down
63 changes: 51 additions & 12 deletions experimental/FTheoryTools/src/AbstractFTheoryModels/methods.jl
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ julia> blow_up(w, ["x", "y", "x1"]; coordinate_name = "e1")
Partially resolved Weierstrass model over a concrete base -- U(1) Weierstrass model based on arXiv paper 1208.2695 Eq. (B.19)
```
"""
function blow_up(m::AbstractFTheoryModel, ideal_gens::Vector{String}; coordinate_name::String = "e")
function blow_up(m::AbstractFTheoryModel, ideal_gens::Vector{String}; coordinate_name::String = "e", nr_of_current_blow_up::Int = 1, nr_blowups_in_sequence::Int = 1)
R = cox_ring(ambient_space(m))
I = ideal([eval_poly(k, R) for k in ideal_gens])
return blow_up(m, I; coordinate_name = coordinate_name)
return blow_up(m, I; coordinate_name = coordinate_name, nr_of_current_blow_up = nr_of_current_blow_up, nr_blowups_in_sequence = nr_blowups_in_sequence)
end


Expand Down Expand Up @@ -82,8 +82,8 @@ julia> blow_up(t, ideal([x, y, x1]); coordinate_name = "e1")
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
```
"""
function blow_up(m::AbstractFTheoryModel, I::MPolyIdeal; coordinate_name::String = "e")
return blow_up(m, ideal_sheaf(ambient_space(m), I); coordinate_name = coordinate_name)
function blow_up(m::AbstractFTheoryModel, I::MPolyIdeal; coordinate_name::String = "e", nr_of_current_blow_up::Int = 1, nr_blowups_in_sequence::Int = 1)
return blow_up(m, ideal_sheaf(ambient_space(m), I); coordinate_name = coordinate_name, nr_of_current_blow_up = nr_of_current_blow_up, nr_blowups_in_sequence = nr_blowups_in_sequence)
end

function _ideal_sheaf_to_minimal_supercone_coordinates(X::AbsCoveredScheme, I::AbsIdealSheaf; coordinate_name::String = "e")
Expand Down Expand Up @@ -156,7 +156,7 @@ julia> blow_up(t, blowup_center; coordinate_name = "e1")
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
```
"""
function blow_up(m::AbstractFTheoryModel, I::AbsIdealSheaf; coordinate_name::String = "e")
function blow_up(m::AbstractFTheoryModel, I::AbsIdealSheaf; coordinate_name::String = "e", nr_of_current_blow_up::Int = 1, nr_blowups_in_sequence::Int = 1)

# Cannot (yet) blowup if this is not a Tate or Weierstrass model
entry_test = (m isa GlobalTateModel) || (m isa WeierstrassModel)
Expand Down Expand Up @@ -216,9 +216,34 @@ function blow_up(m::AbstractFTheoryModel, I::AbsIdealSheaf; coordinate_name::Str
for (key, value) in model_attributes
set_attribute!(model, key, value)
end

set_attribute!(model, :partially_resolved, true)
set_attribute!(model, :blow_down_morphism, bd)

if ambient_space(model) isa NormalToricVariety
index = index_of_exceptional_ray(bd)
@req index == ngens(cox_ring(ambient_space(model))) "Inconsistency encountered. Contact the authors"
indices = exceptional_divisor_indices(model)
push!(indices, index)
set_attribute!(model, :exceptional_divisor_indices, indices)

#Update slow attributes only at the end of a blow up sequence, if possible
if nr_of_current_blow_up == nr_blowups_in_sequence
# Update exceptional classes and their indices
divs = torusinvariant_prime_divisors(ambient_space(model))

indets = [lift(g) for g in gens(cohomology_ring(ambient_space(model), check = false))]
coeff_ring = coefficient_ring(ambient_space(model))
new_e_classes = Vector{CohomologyClass}()
for i in indices
poly = sum(coeff_ring(coefficients(divs[i])[k]) * indets[k] for k in 1:length(indets))
push!(new_e_classes, CohomologyClass(ambient_space(model), cohomology_ring(ambient_space(model), check = false)(poly)))
end

set_attribute!(model, :exceptional_classes, new_e_classes)
end
end

# Return the model
return model
end
Expand Down Expand Up @@ -677,15 +702,30 @@ function set_zero_section(m::AbstractFTheoryModel, desired_value::Vector{String}
end

function set_zero_section_class(m::AbstractFTheoryModel, desired_value::String)
desired_value = Symbol(desired_value)
divs = torusinvariant_prime_divisors(ambient_space(m))
cohomology_ring(ambient_space(m); check=false)
cox_gens = string.(gens(cox_ring(ambient_space(m))))
cox_gens = symbols(cox_ring(ambient_space(m)))
@req desired_value in cox_gens "Specified zero section is invalid"
index = findfirst(==(desired_value), cox_gens)
set_attribute!(m, :zero_section_index => index::Int)
set_attribute!(m, :zero_section_class => cohomology_class(divs[index]))
end

function set_exceptional_classes(m::AbstractFTheoryModel, desired_value::Vector{String})
divs = torusinvariant_prime_divisors(ambient_space(m))
cohomology_ring(ambient_space(m); check=false)
cox_gens = symbols(cox_ring(ambient_space(m)))
@req issubset(Symbol.(desired_value), cox_gens) "Specified exceptional classes are invalid"
exceptional_divisor_indices = Vector{Int}()
for class in desired_value
index = findfirst(==(Symbol(class)), cox_gens)
push!(exceptional_divisor_indices, index)
end
set_attribute!(m, :exceptional_divisor_indices => exceptional_divisor_indices::Vector{Int})
set_attribute!(m, :exceptional_classes => [cohomology_class(divs[index]) for index in exceptional_divisor_indices])
end

function set_gauge_algebra(m::AbstractFTheoryModel, algebras::Vector{String})
C = algebraic_closure(QQ)
function _construct(g::String)
Expand Down Expand Up @@ -849,7 +889,7 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
# Gather information for resolution
centers, exceptionals = resolutions(m)[resolution_index]
nr_blowups = length(centers)

# Resolve the model
resolved_model = m
blow_up_chain = []
Expand All @@ -868,9 +908,8 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
# Conduct the blowup
if ambient_space(resolved_model) isa NormalToricVariety
# Toric case is easy...
resolved_model = blow_up(resolved_model, blow_up_center; coordinate_name = exceptionals[k])
resolved_model = blow_up(resolved_model, blow_up_center; coordinate_name = exceptionals[k], nr_of_current_blow_up = k, nr_blowups_in_sequence = nr_blowups)
else

# Compute proper transform of center generated by anything but exceptional divisors
filtered_center = [c for c in blow_up_center if !(c in exceptionals)]
initial_ambient_space = ambient_space(m)
Expand Down Expand Up @@ -929,7 +968,7 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
# z^2 -> z^2 * m1
# y * z -> y * z * m1
as = ambient_space(resolved_model);
bl = domain(blow_up(as, [0,0,0,1,0], coordinate_name = "m1"));
bl = domain(blow_up(as, [0,0,0,1,0], coordinate_name = "m1", 1, 3));
f = hypersurface_equation(resolved_model);
my_mons = collect(monomials(f));
pos_1 = findfirst(k -> k == "y", [string(a) for a in gens(cox_ring(as))])
Expand Down Expand Up @@ -959,7 +998,7 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
# x^3 -> x^3 * m2^2
# z^3 -> z^3 * m2
as = ambient_space(model_bl);
bl = domain(blow_up(as, [0,0,0,-2,1], coordinate_name = "m2"));
bl = domain(blow_up(as, [0,0,0,-2,1], coordinate_name = "m2", 2, 3));
f = hypersurface_equation(model_bl);
my_mons = collect(monomials(f));
pos_1 = findfirst(k -> k == "x", [string(a) for a in gens(cox_ring(as))])
Expand Down Expand Up @@ -990,7 +1029,7 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
# m2^2 -> m2^2 * m3
# z^2 -> z^2 * m3
as = ambient_space(model_bl2);
bl = domain(blow_up(as, [0,0,0,-1,1], coordinate_name = "m3"));
bl = domain(blow_up(as, [0,0,0,-1,1], coordinate_name = "m3", 3, 3));
f = hypersurface_equation(model_bl2);
my_mons = collect(monomials(f));
pos_1 = findfirst(k -> k == "m2", [string(a) for a in gens(cox_ring(as))])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ function special_flux_family_with_default_algorithm(m::AbstractFTheoryModel; not
ambient_space_flux_candidates_basis_indices = basis_of_h22_hypersurface_indices(m, check = check)
list_of_divisor_pairs_to_be_considered = Oscar._ambient_space_divisor_pairs_to_be_considered(m)
S = cox_ring(ambient_space(m))
exceptional_divisor_positions = findall(x -> occursin(r"^e\d+(_\d+)?$", x), string.(symbols(S))) # TODO: This line is a bit fragile. Fix it!
exceptional_divisor_positions = exceptional_divisor_indices(m)
tds = torusinvariant_prime_divisors(ambient_space(m))
cds = [cohomology_class(td) for td in tds]
pt_class = cohomology_class(anticanonical_divisor_class(ambient_space(m)))
Expand Down Expand Up @@ -355,7 +355,7 @@ function special_flux_family_with_special_algorithm(m::AbstractFTheoryModel; not
ambient_space_flux_candidates_basis_indices = basis_of_h22_hypersurface_indices(m, check = check)
list_of_divisor_pairs_to_be_considered = Oscar._ambient_space_divisor_pairs_to_be_considered(m)
# TODO: This line is a bit fragile. Fix it!
exceptional_divisor_positions = findall(x -> occursin(r"^e\d+(_\d+)?$", x), string.(symbols(S)))
exceptional_divisor_positions = exceptional_divisor_indices(m)


# (5) Work out the relevant intersection numbers to tell if a flux passes the transversality constraints & (if desired) if the flux is not breaking the gauge group.
Expand Down
2 changes: 1 addition & 1 deletion experimental/FTheoryTools/src/G4Fluxes/properties.jl
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ G4-flux candidate

# Identify the cohomology classes of all exceptional divisors
gS = gens(cox_ring(ambient_space(m)))
exceptional_divisor_positions = findall(x -> occursin(r"^e\d+$", x), string.(symbols(cox_ring(ambient_space(m)))))
exceptional_divisor_positions = exceptional_divisor_indices(m)
exceptional_divisors = torusinvariant_prime_divisors(ambient_space(m))[exceptional_divisor_positions]
c_ei = [polynomial(cohomology_class(d)) for d in exceptional_divisors]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
],
"hypersurface_equation": "s1*e1^2*e2^4*e3^6*u^3 + s2*e1^2*e2^3*e3^4*u^2*v + s3*e1^2*e2^2*e3^2*u*v^2 + s4*e1^2*e2*v^3 + s5*e1*e2^2*e3^3*u^2*w + s6*e1*e2*e3*u*v*w + s8*u*w^2",
"zero_section_class": "e3",
"exceptional_classes": ["e1", "e2", "e3"],
"zero_section": ["s4", "1", "1", "1", "-s8", "0"]
},
"associated_models": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
],
"hypersurface_equation": "s1*e1^2*e2^2*e3*e4^4*u^3 + s2*e1*e2^2*e3^2*e4^2*u^2*v + s3*e2^2*e3^3*u*v^2 + s5*e1^2*e2*e4^3*u^2*w + s6*e1*e2*e3*e4*u*v*w + s9*e1*v*w^2",
"zero_section_class": "v",
"exceptional_classes": ["e1", "e2", "e3", "e4"],
"zero_section": ["1", "0", "s1", "1", "1", "-s5", "1"],
"generating_sections": [
["s9", "1", "1", "-s3", "1", "1", "0"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
],
"hypersurface_equation": "s1*e1^2*e2^2*e3*e4*u^3 + s2*e1*e2^2*e3^2*u^2*v + s5*e1^2*e2*e4^2*u^2*w + s6*e1*e2*e3*e4*u*v*w + s7*e2*e3^2*v^2*w + s9*e1*e4^2*v*w^2",
"zero_section_class": "u",
"exceptional_classes": ["e1", "e2", "e3", "e4"],
"zero_section": ["0", "1", "1", "s7", "-s9", "1", "1"],
"generating_sections": [
["1", "s5", "1", "1", "-s9", "0", "1"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
],
"hypersurface_equation": "s1*e1^2*e2^2*e3*e5^4*u^3 + s2*e1*e2^2*e3^2*e4^2*e5^2*u^2*v + s3*e2^2*e3^3*e4^4*u*v^2 + s6*e1*e2*e3*e4*e5*u*v*w + s9*e1*v*w^2",
"zero_section_class": "e4",
"exceptional_classes": ["e1", "e2", "e3", "e4", "e5"],
"zero_section": ["1", "s1", "1", "1", "1", "-s9", "0", "1"],
"torsion_sections": [
["s9", "1", "1", "-s3", "1", "1", "1", "0"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
],
"hypersurface_equation": "s1*e1^2*e2^2*e3*e4*u^3 + s5*e1^2*e2*e4^2*e5^2*u^2*w + s6*e1*e2*e3*e4*e5*u*v*w + s7*e2*e3^2*v^2*w + s9*e1*e4^2*e5^3*v*w^2",
"zero_section_class": "u",
"exceptional_classes": ["e1", "e2", "e3", "e4", "e5"],
"zero_section": ["0", "1", "1", "s7", "-s9", "1", "1", "1"],
"generating_sections": [
["1", "1", "s1", "1", "1", "1", "-s7", "0"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
],
"hypersurface_equation": "s2*e1*e2^2*e3^2*u^2*v + s5*e1^2*e2*e4^2*u^2*w + s6*e1*e2*e3*e4*e5*u*v*w + s7*e2*e3^2*e5^2*v^2*w + s9*e1*e4^2*e5^2*v*w^2",
"zero_section_class": "u",
"exceptional_classes": ["e1", "e2", "e3", "e4", "e5"],
"zero_section": ["0", "1", "1", "s7", "-s9", "1", "1", "1"],
"generating_sections": [
["1", "1", "s2", "-s7", "1", "1", "0", "1"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
],
"hypersurface_equation": "s1*e1^2*e2^2*e3*e4*u^3 + s6*e1*e2*e3*e4*e5*e6*u*v*w + s7*e2*e3^2*e6^3*v^2*w + s9*e1*e4^2*e5^3*v*w^2",
"zero_section_class": "u",
"exceptional_classes": ["e1", "e2", "e3", "e4", "e5", "e6"],
"zero_section": ["0", "1", "1", "s7", "-s9", "1", "1", "1", "1"],
"torsion_sections": [
["1", "1", "s1", "1", "1", "1", "-s7", "0", "1"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
],
"hypersurface_equation": "s1*u^3*e1^2 + s2*u^2*v*e1^2 + s3*u*v^2*e1^2 + s4*v^3*e1^2 + s5*u^2*w*e1 + s6*u*v*w*e1 + s7*v^2*w*e1 + s8*u*w^2 + s9*v*w^2",
"zero_section_class": "e1",
"exceptional_classes": ["e1"],
"zero_section": ["s9", "-s8", "1", "0"],
"generating_sections": [
["-s9", "s8", "s1 * s9^3 - s4 * s8^3 + s3 * s9 * s8^2 - s2 * s9^2 * s8", "s7 * s8^2 - s6 * s9 * s8 + s5 * s9^2"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
"fiber_ambient_space_rays": [[-1, 1], [1, 0], [-1, -1], [-1, 0]],
"fiber_ambient_space_max_cones": [[1, 2], [2, 3], [3, 4], [1, 4]],
"fiber_ambient_space_coordinates": ["X", "Z", "Y", "e1"],
"exceptional_classes": ["e1"],
"fiber_ambient_space_name": "P^{F_4}",
"fiber_twist_matrix": [
[-1, 0, -1, 0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
],
"hypersurface_equation": "s1*e2^2*e1^2*u^3 + s2*e2^2*e1*u^2*v + s3*e2^2*u*v^2 + s5*e2*e1^2*u^2*w + s6*e2*e1*u*v*w + s7*e2*v^2*w + s8*e1^2*u*w^2 + s9*e1*v*w^2",
"zero_section_class": "e2",
"exceptional_classes": ["e1", "e2"],
"zero_section": ["s9", "-s8", "1", "1", "0"],
"generating_sections": [
["s7", "1", "-s3", "0", "1"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
],
"hypersurface_equation": "s1*e1^2*e2^4*u^3 + s2*e1^2*e2^3*u^2*v + s3*e1^2*e2^2*u*v^2 + s4*e1^2*e2*v^3 + s5*e1*e2^2*u^2*w + s6*e1*e2*u*v*w + s7*e1*v^2*w + s8*u*w^2",
"zero_section_class": "e2",
"exceptional_classes": ["e1", "e2"],
"zero_section": ["-s7", "1", "s8", "1", "0"],
"generating_sections": [
["0", "1", "s4", "1", "-s7"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
],
"hypersurface_equation": "s2*e1*e3^2*u^2*v + s3*e2*e3^2*u*v^2 + s5*e1^2*e3*u^2*w + s6*e1*e2*e3*u*v*w + s7*e2^2*e3*v^2*w + s8*e1^2*e2*u*w^2 + s9*e1*e2^2*w^2*v",
"zero_section_class": "u",
"exceptional_classes": ["e1", "e2", "e3"],
"zero_section": ["0", "1", "1", "s7", "1", "-s9"],
"generating_sections": [
["s7", "1", "-s3", "0", "1", "1"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
],
"hypersurface_equation": "s1*e1^2*e2^4*e3^2*u^3 + s2*e1^2*e2^3*e3*u^2*v + s3*e1^2*e2^2*u*v^2 + s5*e1*e2^2*e3^2*u^2*w + s6*e1*e2*e3*u*v*w + s7*e1*v^2*w + s8*e3^2*u*w^2",
"zero_section_class": "e2",
"exceptional_classes": ["e1", "e2", "e3"],
"zero_section": ["s7", "1", "1", "-s8", "0", "1"],
"generating_sections": [
["s7", "1", "-s3", "1", "1", "0"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
],
"hypersurface_equation": "s1*e1^2*e2^2*e3*u^3 + s2*e1*e2^2*e3^2*u^2*v + s3*e2^2*e3^3*u*v^2 + s5*e1^2*e2*u^2*w + s6*e1*e2*e3*u*v*w + s7*e2*e3^2*v^2*w + s9*e1*v*w^2",
"zero_section_class": "u",
"exceptional_classes": ["e1", "e2", "e3"],
"zero_section": ["0", "1", "1", "s7", "-s9", "1"],
"generating_sections": [
["1", "s5", "1", "1", "-s9", "0"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"D1": [0, 0],
"D2": [0, 0],
"hypersurface_equation": "s1*e1^2*e2^2*e3*e4^4*u^3+s2*e1*e2^2*e3^2*e4^2*u^2*v+s3*e2^2*e3^3*u*v^2+s5*e1^2*e2*e4^3*u^2*w+s6*e1*e2*e3*e4*u*v*w+s9*e1*v*w^2",
"zero_section_class": "v"
"zero_section_class": "v",
"exceptional_classes": ["e1", "e2", "e3", "e4"]
}
}
Loading
Loading