diff --git a/tests/playground_models.sage b/tests/playground_models.sage new file mode 100644 index 0000000..d4c624b --- /dev/null +++ b/tests/playground_models.sage @@ -0,0 +1,104 @@ +# Entries are (id, factory, expected_cy_dimension, expected_no_divs, expected_disc, +# expected_intersection_numbers_CY), where expected_disc is a list of +# (str(discriminant_factor), codimension) pairs as returned by ToricPolytope.disc(). + +PLAYGROUND_MODEL_FACTORIES = [ + ( + "K3_two_parameter_family", + lambda: ToricPolytopeProjectiveSpace([1, 1, 2, 4], model_name="K3_two_parameter_family"), + 2, # cy_dimension + 2, # no_divs + [("z2 - 1/4", 2), ("4096*z1^2*(4*z2 - 1) + 128*z1 - 1", 0)], + {(0, 0): 4, (0, 1): 2, (1, 1): 0}, + ), + ( + "CY3_two_parameter_family", + lambda: ToricPolytopeProjectiveSpace([1, 1, 2, 2, 2], model_name="CY3_two_parameter_family"), + 3, + 2, + [("z2 - 1/4", 3), ("65536*z1^2*(4*z2 - 1) + 512*z1 - 1", 0)], + {(0, 0, 0): 8, (0, 0, 1): 4, (0, 1, 1): 0, (1, 1, 1): 0}, + ), + ( + "CY4_two_parameter_family", + lambda: ToricPolytopeProjectiveSpace([1, 1, 1, 1, 8, 12], model_name="CY4_two_parameter_family"), + 4, + 2, + [ + ("z2 - 1/256", 2), + ("34828517376*z1^4*(256*z2 - 1) + 322486272*z1^3 - 1119744*z1^2 + 1728*z1 - 1", 0), + ], + {(0, 0, 0, 0): 64, (0, 0, 0, 1): 16, (0, 0, 1, 1): 4, (0, 1, 1, 1): 1, (1, 1, 1, 1): 0}, + ), + ( + "CICY3_one_parameter", + lambda: ToricPolytopeCICY([[3, 3]], model_name="CICY3_one_parameter"), + 3, + 1, + [("z1 - 1/46656", 0)], + {(0, 0, 0): 9}, + ), + ( + "CICY3_two_parameter", + lambda: ToricPolytopeCICY([[3], [3]], model_name="CICY3_two_parameter"), + 3, + 2, + [ + ( + "-19683*z1^3 - 2187*(27*z1 + 1)*z2^2 - 19683*z2^3 - 2187*z1^2 " + "- 81*(729*z1^2 - 189*z1 + 1)*z2 - 81*z1 - 1", + 0, + ) + ], + {(0, 0, 0): 0, (0, 0, 1): 3, (0, 1, 1): 3, (1, 1, 1): 0}, + ), + ( + "CICY5_two_parameter", + lambda: ToricPolytopeCICY([[6, 1], [0, 2]], model_name="CICY5_two_parameter"), + 5, + 2, + [ + ( + "16384*z2^7 - 28672*z2^6 + 21504*z2^5 - 448*(1647086*z1 - 5)*z2^3 - 8960*z2^4 " + "- 112*(8235430*z1 + 3)*z2^2 - 678223072849*z1^2 - 28*(4941258*z1 - 1)*z2 - 1647086*z1 - 1", + 0, + ) + ], + { + (0, 0, 0, 0, 0): 6, + (0, 0, 0, 0, 1): 12, + (0, 0, 0, 1, 1): 0, + (0, 0, 1, 1, 1): 0, + (0, 1, 1, 1, 1): 0, + (1, 1, 1, 1, 1): 0, + }, + ), + ( + "CICY3_two_parameter_manual", + lambda: ToricPolytope( + [ + [1, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0], + [0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 1], + [-1, -1, 0, 0, 0, 0], + [0, 0, -1, -1, -1, -1], + ], + nef_partition=[[0, 1, 2, 3], [4, 5, 6, 7]], + model_name="CICY3_two_parameter_manual", + ), + 4, + 2, + [ + ( + "-14348907*z1^5 - 2657205*z1^4 - 196830*z1^3 - 29296875*(270*z1 + 1)*z2^2 " + "- 30517578125*z2^3 - 7290*z1^2 + 9375*(98415*z1^3 - 32805*z1^2 + 810*z1 - 1)*z2 " + "- 135*z1 - 1", + 0, + ) + ], + {(0, 0, 0, 0): 0, (0, 0, 0, 1): 0, (0, 0, 1, 1): 6, (0, 1, 1, 1): 8, (1, 1, 1, 1): 2}, + ), +] diff --git a/tests/test_smoke.py b/tests/test_smoke.py deleted file mode 100644 index 72d7923..0000000 --- a/tests/test_smoke.py +++ /dev/null @@ -1,32 +0,0 @@ -import os - -import pytest -from sage.all import * # noqa: F401,F403 - -load(os.path.join(os.path.dirname(__file__), "..", "sage", "toric_topdata.sage")) - - -def test_polytope_rejects_too_few_points(): - with pytest.raises(ValueError): - Polytope([[0, 0], [1, 0]]) # 2 points in dimension 2: not enough - - -def test_mirror_quintic_topdata(): - # Vertices e_1, ..., e_4, -e_1-...-e_4 -- the worked example from - # ToricPolytope's own docstring. - points = [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1], - [-1, -1, -1, -1], - ] - - polytope = ToricPolytope(points, model_name="ci_smoke_test_quintic") - assert polytope.dimension == 4 - assert len(polytope.triangulations) >= 1 - - polytope.topdata() - assert polytope.cy_dimension == 3 - assert polytope.no_divs == 1 # P^4 has Picard rank 1 - assert polytope.intersection_numbers_CY == {(0, 0, 0): 5} # classical quintic self-intersection diff --git a/tests/topdata_tests.py b/tests/topdata_tests.py new file mode 100644 index 0000000..94e950f --- /dev/null +++ b/tests/topdata_tests.py @@ -0,0 +1,34 @@ +import os + +import pytest +from sage.all import * # noqa: F401,F403 +from sage.geometry.lattice_polytope import set_palp_dimension + +load(os.path.join(os.path.dirname(__file__), "..", "sage", "toric_topdata.sage")) +load(os.path.join(os.path.dirname(__file__), "playground_models.sage")) + +set_palp_dimension(11) + +PLAYGROUND_MODELS = [pytest.param(*row[1:], id=row[0]) for row in PLAYGROUND_MODEL_FACTORIES] # noqa: F821 + + +@pytest.mark.parametrize( + "make_model, expected_cy_dimension, expected_no_divs, expected_disc, expected_intersection_numbers_CY", + PLAYGROUND_MODELS, +) +def test_playground_models_disc_and_topdata( + make_model, + expected_cy_dimension, + expected_no_divs, + expected_disc, + expected_intersection_numbers_CY, +): + polytope = make_model() + + discriminants = polytope.disc() + assert [(str(factor), codim) for factor, codim in discriminants] == expected_disc + + polytope.topdata() + assert polytope.cy_dimension == expected_cy_dimension + assert polytope.no_divs == expected_no_divs + assert polytope.intersection_numbers_CY == expected_intersection_numbers_CY