本文整理汇总了Python中sage.libs.ppl.C_Polyhedron.affine_dimension方法的典型用法代码示例。如果您正苦于以下问题:Python C_Polyhedron.affine_dimension方法的具体用法?Python C_Polyhedron.affine_dimension怎么用?Python C_Polyhedron.affine_dimension使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.libs.ppl.C_Polyhedron
的用法示例。
在下文中一共展示了C_Polyhedron.affine_dimension方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: fibration_generator
# 需要导入模块: from sage.libs.ppl import C_Polyhedron [as 别名]
# 或者: from sage.libs.ppl.C_Polyhedron import affine_dimension [as 别名]
def fibration_generator(self, dim):
"""
Generate the lattice polytope fibrations.
For the purposes of this function, a lattice polytope fiber is
a sub-lattice polytope. Projecting the plane spanned by the
subpolytope to a point yields another lattice polytope, the
base of the fibration.
INPUT:
- ``dim`` -- integer. The dimension of the lattice polytope
fiber.
OUTPUT:
A generator yielding the distinct lattice polytope fibers of
given dimension.
EXAMPLES::
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL
sage: p = LatticePolytope_PPL((-9,-6,-1,-1),(0,0,0,1),(0,0,1,0),(0,1,0,0),(1,0,0,0))
sage: list( p.fibration_generator(2) )
[A 2-dimensional lattice polytope in ZZ^4 with 3 vertices]
"""
assert self.is_full_dimensional()
codim = self.space_dimension() - dim
# "points" are the potential vertices of the fiber. They are
# in the $codim$-skeleton of the polytope, which is contained
# in the points that saturate at least $dim$ equations.
points = [ p for p in self._integral_points_saturating() if len(p[1])>=dim ]
points = sorted(points, key=lambda x:len(x[1]))
# iterate over point combinations subject to all points being on one facet.
def point_combinations_iterator(n, i0=0, saturated=None):
for i in range(i0, len(points)):
p, ieqs = points[i]
if saturated is None:
saturated_ieqs = ieqs
else:
saturated_ieqs = saturated.intersection(ieqs)
if len(saturated_ieqs)==0:
continue
if n == 1:
yield [i]
else:
for c in point_combinations_iterator(n-1, i+1, saturated_ieqs):
yield [i] + c
point_lines = [ line(Linear_Expression(p[0].list(),0)) for p in points ]
origin = point()
fibers = set()
gs = Generator_System()
for indices in point_combinations_iterator(dim):
gs.clear()
gs.insert(origin)
for i in indices:
gs.insert(point_lines[i])
plane = C_Polyhedron(gs)
if plane.affine_dimension() != dim:
continue
plane.intersection_assign(self)
if (not self.is_full_dimensional()) and (plane.affine_dimension() != dim):
continue
try:
fiber = LatticePolytope_PPL(plane)
except TypeError: # not a lattice polytope
continue
fiber_vertices = tuple(sorted(fiber.vertices()))
if fiber_vertices not in fibers:
yield fiber
fibers.update([fiber_vertices])