本文整理汇总了Python中sage.libs.ppl.C_Polyhedron类的典型用法代码示例。如果您正苦于以下问题:Python C_Polyhedron类的具体用法?Python C_Polyhedron怎么用?Python C_Polyhedron使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了C_Polyhedron类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: has_IP_property
def has_IP_property(self):
"""
Whether the lattice polytope has the IP property.
That is, the polytope is full-dimensional and the origin is a
interior point not on the boundary.
OUTPUT:
Boolean.
EXAMPLES::
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL
sage: LatticePolytope_PPL((-1,-1),(0,1),(1,0)).has_IP_property()
True
sage: LatticePolytope_PPL((-1,-1),(1,1)).has_IP_property()
False
"""
origin = C_Polyhedron(point(0*Variable(self.space_dimension())))
is_included = Poly_Con_Relation.is_included()
saturates = Poly_Con_Relation.saturates()
for c in self.constraints():
rel = origin.relation_with(c)
if (not rel.implies(is_included)) or rel.implies(saturates):
return False
return True
示例2: vertices_saturating
def vertices_saturating(self, constraint):
"""
Return the vertices saturating the constraint
INPUT:
- ``constraint`` -- a constraint (inequality or equation) of
the polytope.
OUTPUT:
The tuple of vertices saturating the constraint. The vertices
are returned as `\ZZ`-vectors, as in :meth:`vertices`.
EXAMPLES::
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL
sage: p = LatticePolytope_PPL((0,0),(0,1),(1,0))
sage: ieq = next(iter(p.constraints())); ieq
x0>=0
sage: p.vertices_saturating(ieq)
((0, 0), (0, 1))
"""
from sage.libs.ppl import C_Polyhedron, Poly_Con_Relation
result = []
for i,v in enumerate(self.minimized_generators()):
v = C_Polyhedron(v)
if v.relation_with(constraint).implies(Poly_Con_Relation.saturates()):
result.append(self.vertices()[i])
return tuple(result)
示例3: contains
def contains(self, point_coordinates):
r"""
Test whether point is contained in the polytope.
INPUT:
- ``point_coordinates`` -- a list/tuple/iterable of rational
numbers. The coordinates of the point.
OUTPUT:
Boolean.
EXAMPLES::
sage: from sage.geometry.polyhedron.ppl_lattice_polytope import LatticePolytope_PPL
sage: line = LatticePolytope_PPL((1,2,3), (-1,-2,-3))
sage: line.contains([0,0,0])
True
sage: line.contains([1,0,0])
False
"""
p = C_Polyhedron(point(Linear_Expression(list(point_coordinates), 1)))
is_included = Poly_Con_Relation.is_included()
for c in self.constraints():
if not p.relation_with(c).implies(is_included):
return False
return True
示例4: _init_from_Vrepresentation
def _init_from_Vrepresentation(self, vertices, rays, lines, minimize=True, verbose=False):
"""
Construct polyhedron from V-representation data.
INPUT:
- ``vertices`` -- list of point. Each point can be specified
as any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``rays`` -- list of rays. Each ray can be specified as any
iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``lines`` -- list of lines. Each line can be specified as
any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``verbose`` -- boolean (default: ``False``). Whether to print
verbose output for debugging purposes.
EXAMPLES::
sage: p = Polyhedron(backend='ppl')
sage: from sage.geometry.polyhedron.backend_ppl import Polyhedron_ppl
sage: Polyhedron_ppl._init_from_Vrepresentation(p, [], [], [])
"""
gs = Generator_System()
if vertices is None: vertices = []
for v in vertices:
d = LCM_list([denominator(v_i) for v_i in v])
if d.is_one():
gs.insert(point(Linear_Expression(v, 0)))
else:
dv = [ d*v_i for v_i in v ]
gs.insert(point(Linear_Expression(dv, 0), d))
if rays is None: rays = []
for r in rays:
d = LCM_list([denominator(r_i) for r_i in r])
if d.is_one():
gs.insert(ray(Linear_Expression(r, 0)))
else:
dr = [ d*r_i for r_i in r ]
gs.insert(ray(Linear_Expression(dr, 0)))
if lines is None: lines = []
for l in lines:
d = LCM_list([denominator(l_i) for l_i in l])
if d.is_one():
gs.insert(line(Linear_Expression(l, 0)))
else:
dl = [ d*l_i for l_i in l ]
gs.insert(line(Linear_Expression(dl, 0)))
if gs.empty():
self._ppl_polyhedron = C_Polyhedron(self.ambient_dim(), 'empty')
else:
self._ppl_polyhedron = C_Polyhedron(gs)
self._init_Vrepresentation_from_ppl(minimize)
self._init_Hrepresentation_from_ppl(minimize)
示例5: _init_from_Hrepresentation
def _init_from_Hrepresentation(self, ieqs, eqns, minimize=True, verbose=False):
"""
Construct polyhedron from H-representation data.
INPUT:
- ``ieqs`` -- list of inequalities. Each line can be specified
as any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``eqns`` -- list of equalities. Each line can be specified
as any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``verbose`` -- boolean (default: ``False``). Whether to print
verbose output for debugging purposes.
EXAMPLES::
sage: p = Polyhedron(backend='ppl')
sage: from sage.geometry.polyhedron.backend_ppl import Polyhedron_ppl
sage: Polyhedron_ppl._init_from_Hrepresentation(p, [], [])
"""
cs = Constraint_System()
if ieqs is None: ieqs = []
for ieq in ieqs:
d = LCM_list([denominator(ieq_i) for ieq_i in ieq])
dieq = [ ZZ(d*ieq_i) for ieq_i in ieq ]
b = dieq[0]
A = dieq[1:]
cs.insert(Linear_Expression(A, b) >= 0)
if eqns is None: eqns = []
for eqn in eqns:
d = LCM_list([denominator(eqn_i) for eqn_i in eqn])
deqn = [ ZZ(d*eqn_i) for eqn_i in eqn ]
b = deqn[0]
A = deqn[1:]
cs.insert(Linear_Expression(A, b) == 0)
if cs.empty():
self._ppl_polyhedron = C_Polyhedron(self.ambient_dim(), 'universe')
else:
self._ppl_polyhedron = C_Polyhedron(cs)
self._init_Vrepresentation_from_ppl(minimize)
self._init_Hrepresentation_from_ppl(minimize)
示例6: _init_from_Vrepresentation
def _init_from_Vrepresentation(self, ambient_dim, vertices, rays, lines, minimize=True):
"""
Construct polyhedron from V-representation data.
INPUT:
- ``ambient_dim`` -- integer. The dimension of the ambient space.
- ``vertices`` -- list of point. Each point can be specified
as any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``rays`` -- list of rays. Each ray can be specified as any
iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``lines`` -- list of lines. Each line can be specified as
any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
EXAMPLES::
sage: p = Polyhedron(backend='ppl')
sage: from sage.geometry.polyhedron.backend_ppl import Polyhedron_QQ_ppl
sage: Polyhedron_QQ_ppl._init_from_Vrepresentation(p, 2, [], [], [])
"""
gs = Generator_System()
if vertices is None: vertices = []
for v in vertices:
d = lcm([denominator(v_i) for v_i in v])
dv = [ ZZ(d*v_i) for v_i in v ]
gs.insert(point(Linear_Expression(dv, 0), d))
if rays is None: rays = []
for r in rays:
d = lcm([denominator(r_i) for r_i in r])
dr = [ ZZ(d*r_i) for r_i in r ]
gs.insert(ray(Linear_Expression(dr, 0)))
if lines is None: lines = []
for l in lines:
d = lcm([denominator(l_i) for l_i in l])
dl = [ ZZ(d*l_i) for l_i in l ]
gs.insert(line(Linear_Expression(dl, 0)))
self._ppl_polyhedron = C_Polyhedron(gs)
self._init_Vrepresentation_from_ppl(minimize)
self._init_Hrepresentation_from_ppl(minimize)
示例7: _init_empty_polyhedron
def _init_empty_polyhedron(self):
"""
Initializes an empty polyhedron.
TESTS::
sage: empty = Polyhedron(backend='ppl'); empty
The empty polyhedron in ZZ^0
sage: empty.Vrepresentation()
()
sage: empty.Hrepresentation()
(An equation -1 == 0,)
sage: Polyhedron(vertices = [], backend='ppl')
The empty polyhedron in ZZ^0
sage: Polyhedron(backend='ppl')._init_empty_polyhedron()
"""
super(Polyhedron_ppl, self)._init_empty_polyhedron()
self._ppl_polyhedron = C_Polyhedron(self.ambient_dim(), 'empty')
示例8: _init_from_Hrepresentation
def _init_from_Hrepresentation(self, ambient_dim, ieqs, eqns, minimize=True):
"""
Construct polyhedron from H-representation data.
INPUT:
- ``ambient_dim`` -- integer. The dimension of the ambient space.
- ``ieqs`` -- list of inequalities. Each line can be specified
as any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``eqns`` -- list of equalities. Each line can be specified
as any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
EXAMPLES::
sage: p = Polyhedron(backend='ppl')
sage: from sage.geometry.polyhedron.backend_ppl import Polyhedron_QQ_ppl
sage: Polyhedron_QQ_ppl._init_from_Hrepresentation(p, 2, [], [])
"""
cs = Constraint_System()
if ieqs is None: ieqs = []
for ieq in ieqs:
d = lcm([denominator(ieq_i) for ieq_i in ieq])
dieq = [ ZZ(d*ieq_i) for ieq_i in ieq ]
b = dieq[0]
A = dieq[1:]
cs.insert(Linear_Expression(A, b) >= 0)
if eqns is None: eqns = []
for eqn in eqns:
d = lcm([denominator(eqn_i) for eqn_i in eqn])
deqn = [ ZZ(d*eqn_i) for eqn_i in eqn ]
b = deqn[0]
A = deqn[1:]
cs.insert(Linear_Expression(A, b) == 0)
self._ppl_polyhedron = C_Polyhedron(cs)
self._init_Vrepresentation_from_ppl(minimize)
self._init_Hrepresentation_from_ppl(minimize)
示例9: _init_empty_polyhedron
def _init_empty_polyhedron(self, ambient_dim):
"""
Initializes an empty polyhedron.
INPUT:
- ``ambient_dim`` -- integer. The dimension of the ambient space.
TESTS::
sage: empty = Polyhedron(backend='ppl'); empty
The empty polyhedron in QQ^0
sage: empty.Vrepresentation()
()
sage: empty.Hrepresentation()
(An equation -1 == 0,)
sage: Polyhedron(vertices = [], backend='ppl')
The empty polyhedron in QQ^0
sage: Polyhedron(backend='ppl')._init_empty_polyhedron(0)
"""
super(Polyhedron_QQ_ppl, self)._init_empty_polyhedron(ambient_dim)
self._ppl_polyhedron = C_Polyhedron(ambient_dim, 'empty')
示例10: fibration_generator
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])
示例11: Polyhedron_QQ_ppl
class Polyhedron_QQ_ppl(Polyhedron_QQ):
"""
Polyhedra over `\QQ` with ppl
INPUT:
- ``ambient_dim`` -- integer. The dimension of the ambient space.
- ``Vrep`` -- a list ``[vertices, rays, lines]``.
- ``Hrep`` -- a list ``[ieqs, eqns]``.
EXAMPLES::
sage: p = Polyhedron(vertices=[(0,0),(1,0),(0,1)], rays=[(1,1)], lines=[], backend='ppl')
sage: TestSuite(p).run()
"""
def _init_from_Vrepresentation(self, ambient_dim, vertices, rays, lines, minimize=True):
"""
Construct polyhedron from V-representation data.
INPUT:
- ``ambient_dim`` -- integer. The dimension of the ambient space.
- ``vertices`` -- list of point. Each point can be specified
as any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``rays`` -- list of rays. Each ray can be specified as any
iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``lines`` -- list of lines. Each line can be specified as
any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
EXAMPLES::
sage: p = Polyhedron(backend='ppl')
sage: from sage.geometry.polyhedron.backend_ppl import Polyhedron_QQ_ppl
sage: Polyhedron_QQ_ppl._init_from_Vrepresentation(p, 2, [], [], [])
"""
gs = Generator_System()
if vertices is None: vertices = []
for v in vertices:
d = lcm([denominator(v_i) for v_i in v])
dv = [ ZZ(d*v_i) for v_i in v ]
gs.insert(point(Linear_Expression(dv, 0), d))
if rays is None: rays = []
for r in rays:
d = lcm([denominator(r_i) for r_i in r])
dr = [ ZZ(d*r_i) for r_i in r ]
gs.insert(ray(Linear_Expression(dr, 0)))
if lines is None: lines = []
for l in lines:
d = lcm([denominator(l_i) for l_i in l])
dl = [ ZZ(d*l_i) for l_i in l ]
gs.insert(line(Linear_Expression(dl, 0)))
self._ppl_polyhedron = C_Polyhedron(gs)
self._init_Vrepresentation_from_ppl(minimize)
self._init_Hrepresentation_from_ppl(minimize)
def _init_from_Hrepresentation(self, ambient_dim, ieqs, eqns, minimize=True):
"""
Construct polyhedron from H-representation data.
INPUT:
- ``ambient_dim`` -- integer. The dimension of the ambient space.
- ``ieqs`` -- list of inequalities. Each line can be specified
as any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
- ``eqns`` -- list of equalities. Each line can be specified
as any iterable container of
:meth:`~sage.geometry.polyhedron.base.base_ring` elements.
EXAMPLES::
sage: p = Polyhedron(backend='ppl')
sage: from sage.geometry.polyhedron.backend_ppl import Polyhedron_QQ_ppl
sage: Polyhedron_QQ_ppl._init_from_Hrepresentation(p, 2, [], [])
"""
cs = Constraint_System()
if ieqs is None: ieqs = []
for ieq in ieqs:
d = lcm([denominator(ieq_i) for ieq_i in ieq])
dieq = [ ZZ(d*ieq_i) for ieq_i in ieq ]
b = dieq[0]
A = dieq[1:]
cs.insert(Linear_Expression(A, b) >= 0)
if eqns is None: eqns = []
for eqn in eqns:
d = lcm([denominator(eqn_i) for eqn_i in eqn])
deqn = [ ZZ(d*eqn_i) for eqn_i in eqn ]
b = deqn[0]
#.........这里部分代码省略.........
示例12: find_isomorphism
def find_isomorphism(self, polytope):
"""
Return a lattice isomorphism with ``polytope``.
INPUT:
- ``polytope`` -- a polytope, potentially higher-dimensional.
OUTPUT:
A
:class:`~sage.geometry.polyhedron.lattice_euclidean_group_element.LatticeEuclideanGroupElement`. It
is not necessarily invertible if the affine dimension of
``self`` or ``polytope`` is not two. A
:class:`~sage.geometry.polyhedron.lattice_euclidean_group_element.LatticePolytopesNotIsomorphicError`
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
"""
from sage.geometry.polyhedron.lattice_euclidean_group_element import \
LatticePolytopesNotIsomorphicError
if polytope.affine_dimension() != self.affine_dimension():
raise LatticePolytopesNotIsomorphicError('different dimension')
polytope_vertices = polytope.vertices()
if len(polytope_vertices) != self.n_vertices():
raise LatticePolytopesNotIsomorphicError('different number of vertices')
self_vertices = self.ordered_vertices()
if len(polytope.integral_points()) != len(self.integral_points()):
raise LatticePolytopesNotIsomorphicError('different number of integral points')
if len(self_vertices) < 3:
return self._find_isomorphism_degenerate(polytope)
polytope_origin = polytope_vertices[0]
origin_P = C_Polyhedron(next(Generator_System_iterator(
polytope.minimized_generators())))
neighbors = []
for c in polytope.minimized_constraints():
if not c.is_inequality():
continue
if origin_P.relation_with(c).implies(Poly_Con_Relation.saturates()):
for i, g in enumerate(polytope.minimized_generators()):
if i == 0:
continue
g = C_Polyhedron(g)
if g.relation_with(c).implies(Poly_Con_Relation.saturates()):
neighbors.append(polytope_vertices[i])
break
p_ray_left = neighbors[0] - polytope_origin
p_ray_right = neighbors[1] - polytope_origin
try:
return self._find_cyclic_isomorphism_matching_edge(polytope, polytope_origin,
p_ray_left, p_ray_right)
except LatticePolytopesNotIsomorphicError:
pass
try:
return self._find_cyclic_isomorphism_matching_edge(polytope, polytope_origin,
p_ray_right, p_ray_left)
except LatticePolytopesNotIsomorphicError:
pass
raise LatticePolytopesNotIsomorphicError('different polygons')