passagemath-polyhedra 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-polyhedra might be problematic. Click here for more details.
- passagemath_polyhedra-10.6.31rc3.dist-info/METADATA +367 -0
- passagemath_polyhedra-10.6.31rc3.dist-info/METADATA.bak +369 -0
- passagemath_polyhedra-10.6.31rc3.dist-info/RECORD +208 -0
- passagemath_polyhedra-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_polyhedra-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_polyhedra.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_polyhedra.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_polyhedra.libs/libgomp-8949ffbe.so.1.0.0 +0 -0
- passagemath_polyhedra.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
- sage/all__sagemath_polyhedra.py +50 -0
- sage/game_theory/all.py +8 -0
- sage/game_theory/catalog.py +6 -0
- sage/game_theory/catalog_normal_form_games.py +923 -0
- sage/game_theory/cooperative_game.py +844 -0
- sage/game_theory/matching_game.py +1181 -0
- sage/game_theory/normal_form_game.py +2697 -0
- sage/game_theory/parser.py +275 -0
- sage/geometry/all__sagemath_polyhedra.py +22 -0
- sage/geometry/cone.py +6940 -0
- sage/geometry/cone_catalog.py +847 -0
- sage/geometry/cone_critical_angles.py +1027 -0
- sage/geometry/convex_set.py +1119 -0
- sage/geometry/fan.py +3743 -0
- sage/geometry/fan_isomorphism.py +389 -0
- sage/geometry/fan_morphism.py +1884 -0
- sage/geometry/hasse_diagram.py +202 -0
- sage/geometry/hyperplane_arrangement/affine_subspace.py +390 -0
- sage/geometry/hyperplane_arrangement/all.py +1 -0
- sage/geometry/hyperplane_arrangement/arrangement.py +3895 -0
- sage/geometry/hyperplane_arrangement/check_freeness.py +145 -0
- sage/geometry/hyperplane_arrangement/hyperplane.py +773 -0
- sage/geometry/hyperplane_arrangement/library.py +825 -0
- sage/geometry/hyperplane_arrangement/ordered_arrangement.py +642 -0
- sage/geometry/hyperplane_arrangement/plot.py +520 -0
- sage/geometry/integral_points.py +35 -0
- sage/geometry/integral_points_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/integral_points_generic_dense.pyx +7 -0
- sage/geometry/lattice_polytope.py +5894 -0
- sage/geometry/linear_expression.py +773 -0
- sage/geometry/newton_polygon.py +767 -0
- sage/geometry/point_collection.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/point_collection.pyx +1008 -0
- sage/geometry/polyhedral_complex.py +2616 -0
- sage/geometry/polyhedron/all.py +8 -0
- sage/geometry/polyhedron/backend_cdd.py +460 -0
- sage/geometry/polyhedron/backend_cdd_rdf.py +231 -0
- sage/geometry/polyhedron/backend_field.py +347 -0
- sage/geometry/polyhedron/backend_normaliz.py +2503 -0
- sage/geometry/polyhedron/backend_number_field.py +168 -0
- sage/geometry/polyhedron/backend_polymake.py +765 -0
- sage/geometry/polyhedron/backend_ppl.py +582 -0
- sage/geometry/polyhedron/base.py +1206 -0
- sage/geometry/polyhedron/base0.py +1444 -0
- sage/geometry/polyhedron/base1.py +886 -0
- sage/geometry/polyhedron/base2.py +812 -0
- sage/geometry/polyhedron/base3.py +1845 -0
- sage/geometry/polyhedron/base4.py +1262 -0
- sage/geometry/polyhedron/base5.py +2700 -0
- sage/geometry/polyhedron/base6.py +1741 -0
- sage/geometry/polyhedron/base7.py +997 -0
- sage/geometry/polyhedron/base_QQ.py +1258 -0
- sage/geometry/polyhedron/base_RDF.py +98 -0
- sage/geometry/polyhedron/base_ZZ.py +934 -0
- sage/geometry/polyhedron/base_mutable.py +215 -0
- sage/geometry/polyhedron/base_number_field.py +122 -0
- sage/geometry/polyhedron/cdd_file_format.py +155 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/all.py +1 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/base.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/base.pxd +76 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/base.pyx +3859 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pxd +39 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pyx +1038 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/conversions.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pxd +9 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pyx +501 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/face_data_structure.pxd +207 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pxd +102 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pyx +2274 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pxd +370 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pyx +84 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pxd +31 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pyx +587 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pxd +52 -0
- sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pyx +560 -0
- sage/geometry/polyhedron/constructor.py +773 -0
- sage/geometry/polyhedron/double_description.py +753 -0
- sage/geometry/polyhedron/double_description_inhomogeneous.py +564 -0
- sage/geometry/polyhedron/face.py +1060 -0
- sage/geometry/polyhedron/generating_function.py +1810 -0
- sage/geometry/polyhedron/lattice_euclidean_group_element.py +178 -0
- sage/geometry/polyhedron/library.py +3502 -0
- sage/geometry/polyhedron/misc.py +121 -0
- sage/geometry/polyhedron/modules/all.py +1 -0
- sage/geometry/polyhedron/modules/formal_polyhedra_module.py +155 -0
- sage/geometry/polyhedron/palp_database.py +447 -0
- sage/geometry/polyhedron/parent.py +1279 -0
- sage/geometry/polyhedron/plot.py +1986 -0
- sage/geometry/polyhedron/ppl_lattice_polygon.py +556 -0
- sage/geometry/polyhedron/ppl_lattice_polytope.py +1257 -0
- sage/geometry/polyhedron/representation.py +1723 -0
- sage/geometry/pseudolines.py +515 -0
- sage/geometry/relative_interior.py +445 -0
- sage/geometry/toric_plotter.py +1103 -0
- sage/geometry/triangulation/all.py +2 -0
- sage/geometry/triangulation/base.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/triangulation/base.pyx +963 -0
- sage/geometry/triangulation/data.h +147 -0
- sage/geometry/triangulation/data.pxd +4 -0
- sage/geometry/triangulation/element.py +914 -0
- sage/geometry/triangulation/functions.h +10 -0
- sage/geometry/triangulation/functions.pxd +4 -0
- sage/geometry/triangulation/point_configuration.py +2256 -0
- sage/geometry/triangulation/triangulations.h +49 -0
- sage/geometry/triangulation/triangulations.pxd +7 -0
- sage/geometry/voronoi_diagram.py +319 -0
- sage/interfaces/all__sagemath_polyhedra.py +1 -0
- sage/interfaces/polymake.py +2028 -0
- sage/numerical/all.py +13 -0
- sage/numerical/all__sagemath_polyhedra.py +11 -0
- sage/numerical/backends/all.py +1 -0
- sage/numerical/backends/all__sagemath_polyhedra.py +1 -0
- sage/numerical/backends/cvxopt_backend.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/backends/cvxopt_backend.pyx +1006 -0
- sage/numerical/backends/cvxopt_backend_test.py +19 -0
- sage/numerical/backends/cvxopt_sdp_backend.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/backends/cvxopt_sdp_backend.pyx +382 -0
- sage/numerical/backends/cvxpy_backend.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/backends/cvxpy_backend.pxd +41 -0
- sage/numerical/backends/cvxpy_backend.pyx +934 -0
- sage/numerical/backends/cvxpy_backend_test.py +13 -0
- sage/numerical/backends/generic_backend_test.py +24 -0
- sage/numerical/backends/interactivelp_backend.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/backends/interactivelp_backend.pxd +36 -0
- sage/numerical/backends/interactivelp_backend.pyx +1231 -0
- sage/numerical/backends/interactivelp_backend_test.py +12 -0
- sage/numerical/backends/logging_backend.py +391 -0
- sage/numerical/backends/matrix_sdp_backend.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/backends/matrix_sdp_backend.pxd +15 -0
- sage/numerical/backends/matrix_sdp_backend.pyx +478 -0
- sage/numerical/backends/ppl_backend.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/backends/ppl_backend.pyx +1126 -0
- sage/numerical/backends/ppl_backend_test.py +13 -0
- sage/numerical/backends/scip_backend.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/backends/scip_backend.pxd +22 -0
- sage/numerical/backends/scip_backend.pyx +1289 -0
- sage/numerical/backends/scip_backend_test.py +13 -0
- sage/numerical/interactive_simplex_method.py +5338 -0
- sage/numerical/knapsack.py +665 -0
- sage/numerical/linear_functions.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/linear_functions.pxd +31 -0
- sage/numerical/linear_functions.pyx +1648 -0
- sage/numerical/linear_tensor.py +470 -0
- sage/numerical/linear_tensor_constraints.py +448 -0
- sage/numerical/linear_tensor_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/linear_tensor_element.pxd +6 -0
- sage/numerical/linear_tensor_element.pyx +459 -0
- sage/numerical/mip.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/mip.pxd +40 -0
- sage/numerical/mip.pyx +3667 -0
- sage/numerical/sdp.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/sdp.pxd +39 -0
- sage/numerical/sdp.pyx +1433 -0
- sage/rings/all__sagemath_polyhedra.py +3 -0
- sage/rings/polynomial/all__sagemath_polyhedra.py +10 -0
- sage/rings/polynomial/omega.py +982 -0
- sage/schemes/all__sagemath_polyhedra.py +2 -0
- sage/schemes/toric/all.py +10 -0
- sage/schemes/toric/chow_group.py +1248 -0
- sage/schemes/toric/divisor.py +2082 -0
- sage/schemes/toric/divisor_class.cpython-314-x86_64-linux-musl.so +0 -0
- sage/schemes/toric/divisor_class.pyx +322 -0
- sage/schemes/toric/fano_variety.py +1606 -0
- sage/schemes/toric/homset.py +650 -0
- sage/schemes/toric/ideal.py +451 -0
- sage/schemes/toric/library.py +1322 -0
- sage/schemes/toric/morphism.py +1958 -0
- sage/schemes/toric/points.py +1032 -0
- sage/schemes/toric/sheaf/all.py +1 -0
- sage/schemes/toric/sheaf/constructor.py +302 -0
- sage/schemes/toric/sheaf/klyachko.py +921 -0
- sage/schemes/toric/toric_subscheme.py +905 -0
- sage/schemes/toric/variety.py +3460 -0
- sage/schemes/toric/weierstrass.py +1078 -0
- sage/schemes/toric/weierstrass_covering.py +457 -0
- sage/schemes/toric/weierstrass_higher.py +288 -0
- sage_wheels/share/reflexive_polytopes/Full2d/zzdb.info +10 -0
- sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v03 +0 -0
- sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v04 +0 -0
- sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v05 +1 -0
- sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v06 +1 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.info +22 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v04 +0 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v05 +0 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v06 +0 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v07 +0 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v08 +0 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v09 +0 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v10 +0 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v11 +1 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v12 +1 -0
- sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v13 +1 -0
- sage_wheels/share/reflexive_polytopes/reflexive_polytopes_2d +80 -0
- sage_wheels/share/reflexive_polytopes/reflexive_polytopes_3d +37977 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-polyhedra
|
|
2
|
+
r"""
|
|
3
|
+
Relative Interiors of Polyhedra and Cones
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2021 Matthias Koeppe
|
|
8
|
+
#
|
|
9
|
+
# This program is free software: you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
12
|
+
# (at your option) any later version.
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
|
|
16
|
+
from sage.geometry.convex_set import ConvexSet_relatively_open
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class RelativeInterior(ConvexSet_relatively_open):
|
|
20
|
+
r"""
|
|
21
|
+
The relative interior of a polyhedron or cone.
|
|
22
|
+
|
|
23
|
+
This class should not be used directly. Use methods
|
|
24
|
+
:meth:`~sage.geometry.polyhedron.Polyhedron_base.relative_interior`,
|
|
25
|
+
:meth:`~sage.geometry.polyhedron.Polyhedron_base.interior`,
|
|
26
|
+
:meth:`~sage.geometry.cone.ConvexRationalPolyhedralCone.relative_interior`,
|
|
27
|
+
:meth:`~sage.geometry.cone.ConvexRationalPolyhedralCone.interior` instead.
|
|
28
|
+
|
|
29
|
+
EXAMPLES::
|
|
30
|
+
|
|
31
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
32
|
+
sage: segment.relative_interior()
|
|
33
|
+
Relative interior of
|
|
34
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
35
|
+
sage: octant = Cone([(1,0,0), (0,1,0), (0,0,1)])
|
|
36
|
+
sage: octant.relative_interior()
|
|
37
|
+
Relative interior of 3-d cone in 3-d lattice N
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(self, polyhedron):
|
|
41
|
+
r"""
|
|
42
|
+
Initialize ``self``.
|
|
43
|
+
|
|
44
|
+
INPUT:
|
|
45
|
+
|
|
46
|
+
- ``polyhedron`` -- an instance of :class:`Polyhedron_base` or
|
|
47
|
+
:class:`ConvexRationalPolyhedralCone`
|
|
48
|
+
|
|
49
|
+
TESTS::
|
|
50
|
+
|
|
51
|
+
sage: P = Polyhedron([[1, 2], [3, 4]])
|
|
52
|
+
sage: from sage.geometry.relative_interior import RelativeInterior
|
|
53
|
+
sage: TestSuite(RelativeInterior(P)).run()
|
|
54
|
+
"""
|
|
55
|
+
self._polyhedron = polyhedron
|
|
56
|
+
if hasattr(polyhedron, "is_mutable") and polyhedron.is_mutable():
|
|
57
|
+
if hasattr(polyhedron, "_add_dependent_object"):
|
|
58
|
+
polyhedron._add_dependent_object(self)
|
|
59
|
+
|
|
60
|
+
def __hash__(self):
|
|
61
|
+
r"""
|
|
62
|
+
TESTS::
|
|
63
|
+
|
|
64
|
+
sage: P = Polyhedron([[1, 2], [3, 4]])
|
|
65
|
+
sage: Q = Polyhedron([[3, 4], [1, 2]])
|
|
66
|
+
sage: hash(P.relative_interior()) == hash(Q.relative_interior())
|
|
67
|
+
True
|
|
68
|
+
"""
|
|
69
|
+
return hash(self._polyhedron) ^ 1789
|
|
70
|
+
|
|
71
|
+
def __contains__(self, point):
|
|
72
|
+
r"""
|
|
73
|
+
Return whether ``self`` contains ``point``.
|
|
74
|
+
|
|
75
|
+
EXAMPLES::
|
|
76
|
+
|
|
77
|
+
sage: octant = Cone([(1,0,0), (0,1,0), (0,0,1)])
|
|
78
|
+
sage: ri_octant = octant.relative_interior(); ri_octant
|
|
79
|
+
Relative interior of 3-d cone in 3-d lattice N
|
|
80
|
+
sage: (1, 1, 1) in ri_octant
|
|
81
|
+
True
|
|
82
|
+
sage: (1, 0, 0) in ri_octant
|
|
83
|
+
False
|
|
84
|
+
"""
|
|
85
|
+
return self._polyhedron.relative_interior_contains(point)
|
|
86
|
+
|
|
87
|
+
def ambient(self):
|
|
88
|
+
r"""
|
|
89
|
+
Return the ambient convex set or space.
|
|
90
|
+
|
|
91
|
+
EXAMPLES::
|
|
92
|
+
|
|
93
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
94
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
95
|
+
Relative interior of
|
|
96
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
97
|
+
sage: ri_segment.ambient()
|
|
98
|
+
Vector space of dimension 2 over Rational Field
|
|
99
|
+
"""
|
|
100
|
+
return self._polyhedron.ambient()
|
|
101
|
+
|
|
102
|
+
def ambient_vector_space(self, base_field=None):
|
|
103
|
+
r"""
|
|
104
|
+
Return the ambient vector space.
|
|
105
|
+
|
|
106
|
+
EXAMPLES::
|
|
107
|
+
|
|
108
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
109
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
110
|
+
Relative interior of
|
|
111
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
112
|
+
sage: ri_segment.ambient_vector_space()
|
|
113
|
+
Vector space of dimension 2 over Rational Field
|
|
114
|
+
"""
|
|
115
|
+
return self._polyhedron.ambient_vector_space(base_field=base_field)
|
|
116
|
+
|
|
117
|
+
def ambient_dim(self):
|
|
118
|
+
r"""
|
|
119
|
+
Return the dimension of the ambient space.
|
|
120
|
+
|
|
121
|
+
EXAMPLES::
|
|
122
|
+
|
|
123
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
124
|
+
sage: segment.ambient_dim()
|
|
125
|
+
2
|
|
126
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
127
|
+
Relative interior of
|
|
128
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
129
|
+
sage: ri_segment.ambient_dim()
|
|
130
|
+
2
|
|
131
|
+
"""
|
|
132
|
+
return self._polyhedron.ambient_dim()
|
|
133
|
+
|
|
134
|
+
def an_affine_basis(self):
|
|
135
|
+
r"""
|
|
136
|
+
Return points that form an affine basis for the affine hull.
|
|
137
|
+
|
|
138
|
+
The points are guaranteed to lie in the topological closure of ``self``.
|
|
139
|
+
|
|
140
|
+
EXAMPLES::
|
|
141
|
+
|
|
142
|
+
sage: segment = Polyhedron([[1, 0], [0, 1]])
|
|
143
|
+
sage: segment.relative_interior().an_affine_basis()
|
|
144
|
+
[A vertex at (1, 0), A vertex at (0, 1)]
|
|
145
|
+
"""
|
|
146
|
+
return self._polyhedron.an_affine_basis()
|
|
147
|
+
|
|
148
|
+
def dim(self):
|
|
149
|
+
r"""
|
|
150
|
+
Return the dimension of ``self``.
|
|
151
|
+
|
|
152
|
+
EXAMPLES::
|
|
153
|
+
|
|
154
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
155
|
+
sage: segment.dim()
|
|
156
|
+
1
|
|
157
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
158
|
+
Relative interior of
|
|
159
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
160
|
+
sage: ri_segment.dim()
|
|
161
|
+
1
|
|
162
|
+
"""
|
|
163
|
+
return self._polyhedron.dim()
|
|
164
|
+
|
|
165
|
+
def interior(self):
|
|
166
|
+
r"""
|
|
167
|
+
Return the interior of ``self``.
|
|
168
|
+
|
|
169
|
+
EXAMPLES::
|
|
170
|
+
|
|
171
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
172
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
173
|
+
Relative interior of
|
|
174
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
175
|
+
sage: ri_segment.interior()
|
|
176
|
+
The empty polyhedron in ZZ^2
|
|
177
|
+
|
|
178
|
+
sage: octant = Cone([(1,0,0), (0,1,0), (0,0,1)])
|
|
179
|
+
sage: ri_octant = octant.relative_interior(); ri_octant
|
|
180
|
+
Relative interior of 3-d cone in 3-d lattice N
|
|
181
|
+
sage: ri_octant.interior() is ri_octant
|
|
182
|
+
True
|
|
183
|
+
"""
|
|
184
|
+
return self._polyhedron.interior()
|
|
185
|
+
|
|
186
|
+
def relative_interior(self):
|
|
187
|
+
r"""
|
|
188
|
+
Return the relative interior of ``self``.
|
|
189
|
+
|
|
190
|
+
As ``self`` is already relatively open, this method just returns ``self``.
|
|
191
|
+
|
|
192
|
+
EXAMPLES::
|
|
193
|
+
|
|
194
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
195
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
196
|
+
Relative interior of
|
|
197
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
198
|
+
sage: ri_segment.relative_interior() is ri_segment
|
|
199
|
+
True
|
|
200
|
+
"""
|
|
201
|
+
return self
|
|
202
|
+
|
|
203
|
+
def closure(self):
|
|
204
|
+
r"""
|
|
205
|
+
Return the topological closure of ``self``.
|
|
206
|
+
|
|
207
|
+
EXAMPLES::
|
|
208
|
+
|
|
209
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
210
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
211
|
+
Relative interior of
|
|
212
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
213
|
+
sage: ri_segment.closure() is segment
|
|
214
|
+
True
|
|
215
|
+
"""
|
|
216
|
+
return self._polyhedron
|
|
217
|
+
|
|
218
|
+
def is_universe(self):
|
|
219
|
+
r"""
|
|
220
|
+
Return whether ``self`` is the whole ambient space.
|
|
221
|
+
|
|
222
|
+
OUTPUT: boolean
|
|
223
|
+
|
|
224
|
+
EXAMPLES::
|
|
225
|
+
|
|
226
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
227
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
228
|
+
Relative interior of
|
|
229
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
230
|
+
sage: ri_segment.is_universe()
|
|
231
|
+
False
|
|
232
|
+
"""
|
|
233
|
+
# Relies on ``self`` not set up for polyhedra that are already
|
|
234
|
+
# relatively open themselves.
|
|
235
|
+
assert not self._polyhedron.is_universe()
|
|
236
|
+
return False
|
|
237
|
+
|
|
238
|
+
def is_closed(self):
|
|
239
|
+
r"""
|
|
240
|
+
Return whether ``self`` is closed.
|
|
241
|
+
|
|
242
|
+
OUTPUT: boolean
|
|
243
|
+
|
|
244
|
+
EXAMPLES::
|
|
245
|
+
|
|
246
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
247
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
248
|
+
Relative interior of a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
249
|
+
sage: ri_segment.is_closed()
|
|
250
|
+
False
|
|
251
|
+
"""
|
|
252
|
+
# Relies on ``self`` not set up for polyhedra that are already
|
|
253
|
+
# relatively open themselves.
|
|
254
|
+
assert not self._polyhedron.is_relatively_open()
|
|
255
|
+
return False
|
|
256
|
+
|
|
257
|
+
def _some_elements_(self):
|
|
258
|
+
r"""
|
|
259
|
+
Generate some points of ``self``.
|
|
260
|
+
|
|
261
|
+
If ``self`` is empty, no points are generated; no exception will be raised.
|
|
262
|
+
|
|
263
|
+
EXAMPLES::
|
|
264
|
+
|
|
265
|
+
sage: P = polytopes.simplex()
|
|
266
|
+
sage: ri_P = P.relative_interior()
|
|
267
|
+
sage: ri_P.an_element() # indirect doctest
|
|
268
|
+
(1/4, 1/4, 1/4, 1/4)
|
|
269
|
+
sage: ri_P.some_elements() # indirect doctest
|
|
270
|
+
[(1/4, 1/4, 1/4, 1/4), (1/2, 1/4, 1/8, 1/8)]
|
|
271
|
+
"""
|
|
272
|
+
for p in self._polyhedron.some_elements():
|
|
273
|
+
if p in self:
|
|
274
|
+
yield p
|
|
275
|
+
|
|
276
|
+
def representative_point(self):
|
|
277
|
+
"""
|
|
278
|
+
Return a "generic" point of ``self``.
|
|
279
|
+
|
|
280
|
+
OUTPUT:
|
|
281
|
+
|
|
282
|
+
A point in ``self`` (thus, in the relative interior of ``self``) as a coordinate vector.
|
|
283
|
+
|
|
284
|
+
EXAMPLES::
|
|
285
|
+
|
|
286
|
+
sage: C = Cone([[1, 2, 0], [2, 1, 0]])
|
|
287
|
+
sage: C.relative_interior().representative_point()
|
|
288
|
+
(1, 1, 0)
|
|
289
|
+
"""
|
|
290
|
+
return self._polyhedron.representative_point()
|
|
291
|
+
|
|
292
|
+
def _repr_(self):
|
|
293
|
+
r"""
|
|
294
|
+
Return a description of ``self``.
|
|
295
|
+
|
|
296
|
+
EXAMPLES::
|
|
297
|
+
|
|
298
|
+
sage: P = Polyhedron(vertices = [[1,2,3,4],[2,1,3,4],[4,3,2,1]])
|
|
299
|
+
sage: P.relative_interior()._repr_()
|
|
300
|
+
'Relative interior of a 2-dimensional polyhedron in ZZ^4 defined as the convex hull of 3 vertices'
|
|
301
|
+
sage: P.rename('A')
|
|
302
|
+
sage: P.relative_interior()._repr_()
|
|
303
|
+
'Relative interior of A'
|
|
304
|
+
"""
|
|
305
|
+
repr_P = repr(self._polyhedron)
|
|
306
|
+
if repr_P.startswith('A '):
|
|
307
|
+
repr_P = 'a ' + repr_P[2:]
|
|
308
|
+
return 'Relative interior of ' + repr_P
|
|
309
|
+
|
|
310
|
+
def __eq__(self, other):
|
|
311
|
+
r"""
|
|
312
|
+
Compare ``self`` and ``other``.
|
|
313
|
+
|
|
314
|
+
INPUT:
|
|
315
|
+
|
|
316
|
+
- ``other`` -- any object
|
|
317
|
+
|
|
318
|
+
EXAMPLES::
|
|
319
|
+
|
|
320
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
321
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
322
|
+
Relative interior of
|
|
323
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
324
|
+
sage: segment2 = Polyhedron([[1, 2], [3, 4]], base_ring=AA) # needs sage.rings.number_field
|
|
325
|
+
sage: ri_segment2 = segment2.relative_interior(); ri_segment2 # needs sage.rings.number_field
|
|
326
|
+
Relative interior of
|
|
327
|
+
a 1-dimensional polyhedron in AA^2 defined as the convex hull of 2 vertices
|
|
328
|
+
sage: ri_segment == ri_segment2 # needs sage.rings.number_field
|
|
329
|
+
True
|
|
330
|
+
|
|
331
|
+
TESTS::
|
|
332
|
+
|
|
333
|
+
sage: empty = Polyhedron(ambient_dim=2)
|
|
334
|
+
sage: ri_segment == empty
|
|
335
|
+
False
|
|
336
|
+
"""
|
|
337
|
+
if type(self) is not type(other):
|
|
338
|
+
return False
|
|
339
|
+
return self._polyhedron == other._polyhedron
|
|
340
|
+
|
|
341
|
+
def __ne__(self, other):
|
|
342
|
+
r"""
|
|
343
|
+
Compare ``self`` and ``other``.
|
|
344
|
+
|
|
345
|
+
INPUT:
|
|
346
|
+
|
|
347
|
+
- ``other`` -- any object
|
|
348
|
+
|
|
349
|
+
TESTS::
|
|
350
|
+
|
|
351
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
352
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
353
|
+
Relative interior of
|
|
354
|
+
a 1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
355
|
+
sage: segment2 = Polyhedron([[1, 2], [3, 4]], base_ring=AA) # needs sage.rings.number_field
|
|
356
|
+
sage: ri_segment2 = segment2.relative_interior(); ri_segment2 # needs sage.rings.number_field
|
|
357
|
+
Relative interior of
|
|
358
|
+
a 1-dimensional polyhedron in AA^2 defined as the convex hull of 2 vertices
|
|
359
|
+
sage: ri_segment != ri_segment2 # needs sage.rings.number_field
|
|
360
|
+
False
|
|
361
|
+
"""
|
|
362
|
+
return not (self == other)
|
|
363
|
+
|
|
364
|
+
def dilation(self, scalar):
|
|
365
|
+
"""
|
|
366
|
+
Return the dilated (uniformly stretched) set.
|
|
367
|
+
|
|
368
|
+
INPUT:
|
|
369
|
+
|
|
370
|
+
- ``scalar`` -- a scalar
|
|
371
|
+
|
|
372
|
+
EXAMPLES::
|
|
373
|
+
|
|
374
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
375
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
376
|
+
Relative interior of a
|
|
377
|
+
1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
378
|
+
sage: A = ri_segment.dilation(2); A
|
|
379
|
+
Relative interior of a
|
|
380
|
+
1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
381
|
+
sage: A.closure().vertices()
|
|
382
|
+
(A vertex at (2, 4), A vertex at (6, 8))
|
|
383
|
+
sage: B = ri_segment.dilation(-1/3); B
|
|
384
|
+
Relative interior of a
|
|
385
|
+
1-dimensional polyhedron in QQ^2 defined as the convex hull of 2 vertices
|
|
386
|
+
sage: B.closure().vertices()
|
|
387
|
+
(A vertex at (-1, -4/3), A vertex at (-1/3, -2/3))
|
|
388
|
+
sage: C = ri_segment.dilation(0); C
|
|
389
|
+
A 0-dimensional polyhedron in ZZ^2 defined as the convex hull of 1 vertex
|
|
390
|
+
sage: C.vertices()
|
|
391
|
+
(A vertex at (0, 0),)
|
|
392
|
+
"""
|
|
393
|
+
return self.closure().dilation(scalar).relative_interior()
|
|
394
|
+
|
|
395
|
+
def linear_transformation(self, linear_transf, **kwds):
|
|
396
|
+
"""
|
|
397
|
+
Return the linear transformation of ``self``.
|
|
398
|
+
|
|
399
|
+
By [Roc1970]_, Theorem 6.6, the linear transformation of a relative interior
|
|
400
|
+
is the relative interior of the linear transformation.
|
|
401
|
+
|
|
402
|
+
INPUT:
|
|
403
|
+
|
|
404
|
+
- ``linear_transf`` -- a matrix
|
|
405
|
+
- ``**kwds`` -- passed to the :meth:`linear_transformation` method of
|
|
406
|
+
the closure of ``self``
|
|
407
|
+
|
|
408
|
+
EXAMPLES::
|
|
409
|
+
|
|
410
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
411
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
412
|
+
Relative interior of a
|
|
413
|
+
1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
414
|
+
sage: T = matrix([[1, 1]])
|
|
415
|
+
sage: A = ri_segment.linear_transformation(T); A
|
|
416
|
+
Relative interior of a
|
|
417
|
+
1-dimensional polyhedron in ZZ^1 defined as the convex hull of 2 vertices
|
|
418
|
+
sage: A.closure().vertices()
|
|
419
|
+
(A vertex at (3), A vertex at (7))
|
|
420
|
+
"""
|
|
421
|
+
return self.closure().linear_transformation(linear_transf, **kwds).relative_interior()
|
|
422
|
+
|
|
423
|
+
def translation(self, displacement):
|
|
424
|
+
"""
|
|
425
|
+
Return the translation of ``self`` by a ``displacement`` vector.
|
|
426
|
+
|
|
427
|
+
INPUT:
|
|
428
|
+
|
|
429
|
+
- ``displacement`` -- a displacement vector or a list/tuple of
|
|
430
|
+
coordinates that determines a displacement vector
|
|
431
|
+
|
|
432
|
+
EXAMPLES::
|
|
433
|
+
|
|
434
|
+
sage: segment = Polyhedron([[1, 2], [3, 4]])
|
|
435
|
+
sage: ri_segment = segment.relative_interior(); ri_segment
|
|
436
|
+
Relative interior of a
|
|
437
|
+
1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
438
|
+
sage: t = vector([100, 100])
|
|
439
|
+
sage: ri_segment.translation(t)
|
|
440
|
+
Relative interior of a
|
|
441
|
+
1-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices
|
|
442
|
+
sage: ri_segment.closure().vertices()
|
|
443
|
+
(A vertex at (1, 2), A vertex at (3, 4))
|
|
444
|
+
"""
|
|
445
|
+
return self.closure().translation(displacement).relative_interior()
|