Fast Lattice Polygons using PPL¶
See ppl_lattice_polytope
for the implementation of
arbitrary-dimensional lattice polytopes. This module is about the
specialization to 2 dimensions. To be more precise, the
LatticePolygon_PPL_class
is used if the ambient space is of
dimension 2 or less. These all allow you to cyclically order (see
LatticePolygon_PPL_class.ordered_vertices()
) the vertices, which
is in general not possible in higher dimensions.
- class sage.geometry.polyhedron.ppl_lattice_polygon.LatticePolygon_PPL_class¶
Bases:
sage.geometry.polyhedron.ppl_lattice_polytope.LatticePolytope_PPL_class
A lattice polygon
This includes 2-dimensional polytopes as well as degenerate (0 and 1-dimensional) lattice polygons. Any polytope in 2d is a polygon.
- find_isomorphism(polytope)¶
Return a lattice isomorphism with
polytope
.INPUT:
polytope
– a polytope, potentially higher-dimensional.
OUTPUT:
A
LatticeEuclideanGroupElement
. It is not necessarily invertible if the affine dimension ofself
orpolytope
is not two. ALatticePolytopesNotIsomorphicError
is raised if no such isomorphism exists.EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL sage: L1 = LatticePolytope_PPL((1,0),(0,1),(0,0)) sage: L2 = LatticePolytope_PPL((1,0,3),(0,1,0),(0,0,1)) sage: iso = L1.find_isomorphism(L2) sage: iso(L1) == L2 True sage: L1 = LatticePolytope_PPL((0, 1), (3, 0), (0, 3), (1, 0)) sage: L2 = LatticePolytope_PPL((0,0,2,1),(0,1,2,0),(2,0,0,3),(2,3,0,0)) sage: iso = L1.find_isomorphism(L2) sage: iso(L1) == L2 True
The following polygons are isomorphic over \(\QQ\), but not as lattice polytopes:
sage: L1 = LatticePolytope_PPL((1,0),(0,1),(-1,-1)) sage: L2 = LatticePolytope_PPL((0, 0), (0, 1), (1, 0)) sage: L1.find_isomorphism(L2) Traceback (most recent call last): ... LatticePolytopesNotIsomorphicError: different number of integral points sage: L2.find_isomorphism(L1) Traceback (most recent call last): ... LatticePolytopesNotIsomorphicError: different number of integral points
- is_isomorphic(polytope)¶
Test if
self
andpolytope
are isomorphic.INPUT:
polytope
– a lattice polytope.
OUTPUT:
Boolean.
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL sage: L1 = LatticePolytope_PPL((1,0),(0,1),(0,0)) sage: L2 = LatticePolytope_PPL((1,0,3),(0,1,0),(0,0,1)) sage: L1.is_isomorphic(L2) True
- ordered_vertices()¶
Return the vertices of a lattice polygon in cyclic order.
OUTPUT:
A tuple of vertices ordered along the perimeter of the polygon. The first point is arbitrary.
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL sage: square = LatticePolytope_PPL((0,0), (1,1), (0,1), (1,0)) sage: square.vertices() ((0, 0), (0, 1), (1, 0), (1, 1)) sage: square.ordered_vertices() ((0, 0), (1, 0), (1, 1), (0, 1))
- plot()¶
Plot the lattice polygon.
OUTPUT:
A graphics object.
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL sage: P = LatticePolytope_PPL((1,0), (0,1), (0,0), (2,2)) sage: P.plot() Graphics object consisting of 6 graphics primitives sage: LatticePolytope_PPL([0], [1]).plot() Graphics object consisting of 3 graphics primitives sage: LatticePolytope_PPL([0]).plot() Graphics object consisting of 2 graphics primitives
- sub_polytopes()¶
Return a list of all lattice sub-polygons up to isomorphism.
OUTPUT:
All non-empty sub-lattice polytopes up to isomorphism. This includes
self
as improper sub-polytope, but excludes the empty polytope. Isomorphic sub-polytopes that can be embedded in different places are only returned once.EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL sage: P1xP1 = LatticePolytope_PPL((1,0), (0,1), (-1,0), (0,-1)) sage: P1xP1.sub_polytopes() (A 2-dimensional lattice polytope in ZZ^2 with 4 vertices, A 2-dimensional lattice polytope in ZZ^2 with 3 vertices, A 2-dimensional lattice polytope in ZZ^2 with 3 vertices, A 1-dimensional lattice polytope in ZZ^2 with 2 vertices, A 1-dimensional lattice polytope in ZZ^2 with 2 vertices, A 0-dimensional lattice polytope in ZZ^2 with 1 vertex)
- sage.geometry.polyhedron.ppl_lattice_polygon.polar_P1xP1_polytope()¶
The polar of the \(P^1 \times P^1\) polytope
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polygon import polar_P1xP1_polytope sage: polar_P1xP1_polytope() A 2-dimensional lattice polytope in ZZ^2 with 4 vertices sage: _.vertices() ((0, 0), (0, 2), (2, 0), (2, 2))
- sage.geometry.polyhedron.ppl_lattice_polygon.polar_P2_112_polytope()¶
The polar of the \(P^2[1,1,2]\) polytope
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polygon import polar_P2_112_polytope sage: polar_P2_112_polytope() A 2-dimensional lattice polytope in ZZ^2 with 3 vertices sage: _.vertices() ((0, 0), (0, 2), (4, 0))
- sage.geometry.polyhedron.ppl_lattice_polygon.polar_P2_polytope()¶
The polar of the \(P^2\) polytope
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polygon import polar_P2_polytope sage: polar_P2_polytope() A 2-dimensional lattice polytope in ZZ^2 with 3 vertices sage: _.vertices() ((0, 0), (0, 3), (3, 0))
- sage.geometry.polyhedron.ppl_lattice_polygon.sub_reflexive_polygons()¶
Return all lattice sub-polygons of reflexive polygons.
OUTPUT:
A tuple of all lattice sub-polygons. Each sub-polygon is returned as a pair sub-polygon, containing reflexive polygon.
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polygon import sub_reflexive_polygons sage: l = sub_reflexive_polygons(); l[5] (A 2-dimensional lattice polytope in ZZ^2 with 6 vertices, A 2-dimensional lattice polytope in ZZ^2 with 3 vertices) sage: len(l) 33
- sage.geometry.polyhedron.ppl_lattice_polygon.subpolygons_of_polar_P1xP1()¶
The lattice sub-polygons of the polar \(P^1 \times P^1\) polytope
OUTPUT:
A tuple of lattice polytopes.
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polygon import subpolygons_of_polar_P1xP1 sage: len(subpolygons_of_polar_P1xP1()) 20
- sage.geometry.polyhedron.ppl_lattice_polygon.subpolygons_of_polar_P2()¶
The lattice sub-polygons of the polar \(P^2\) polytope
OUTPUT:
A tuple of lattice polytopes.
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polygon import subpolygons_of_polar_P2 sage: len(subpolygons_of_polar_P2()) 27
- sage.geometry.polyhedron.ppl_lattice_polygon.subpolygons_of_polar_P2_112()¶
The lattice sub-polygons of the polar \(P^2[1,1,2]\) polytope
OUTPUT:
A tuple of lattice polytopes.
EXAMPLES:
sage: from sage.geometry.polyhedron.ppl_lattice_polygon import subpolygons_of_polar_P2_112 sage: len(subpolygons_of_polar_P2_112()) 28