passagemath-polyhedra 10.6.31rc3__cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_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.

Files changed (206) hide show
  1. passagemath_polyhedra-10.6.31rc3.dist-info/METADATA +367 -0
  2. passagemath_polyhedra-10.6.31rc3.dist-info/METADATA.bak +369 -0
  3. passagemath_polyhedra-10.6.31rc3.dist-info/RECORD +206 -0
  4. passagemath_polyhedra-10.6.31rc3.dist-info/WHEEL +6 -0
  5. passagemath_polyhedra-10.6.31rc3.dist-info/top_level.txt +2 -0
  6. passagemath_polyhedra.libs/libgmp-6e109695.so.10.5.0 +0 -0
  7. passagemath_polyhedra.libs/libgomp-e985bcbb.so.1.0.0 +0 -0
  8. sage/all__sagemath_polyhedra.py +50 -0
  9. sage/game_theory/all.py +8 -0
  10. sage/game_theory/catalog.py +6 -0
  11. sage/game_theory/catalog_normal_form_games.py +923 -0
  12. sage/game_theory/cooperative_game.py +844 -0
  13. sage/game_theory/matching_game.py +1181 -0
  14. sage/game_theory/normal_form_game.py +2697 -0
  15. sage/game_theory/parser.py +275 -0
  16. sage/geometry/all__sagemath_polyhedra.py +22 -0
  17. sage/geometry/cone.py +6940 -0
  18. sage/geometry/cone_catalog.py +847 -0
  19. sage/geometry/cone_critical_angles.py +1027 -0
  20. sage/geometry/convex_set.py +1119 -0
  21. sage/geometry/fan.py +3743 -0
  22. sage/geometry/fan_isomorphism.py +389 -0
  23. sage/geometry/fan_morphism.py +1884 -0
  24. sage/geometry/hasse_diagram.py +202 -0
  25. sage/geometry/hyperplane_arrangement/affine_subspace.py +390 -0
  26. sage/geometry/hyperplane_arrangement/all.py +1 -0
  27. sage/geometry/hyperplane_arrangement/arrangement.py +3895 -0
  28. sage/geometry/hyperplane_arrangement/check_freeness.py +145 -0
  29. sage/geometry/hyperplane_arrangement/hyperplane.py +773 -0
  30. sage/geometry/hyperplane_arrangement/library.py +825 -0
  31. sage/geometry/hyperplane_arrangement/ordered_arrangement.py +642 -0
  32. sage/geometry/hyperplane_arrangement/plot.py +520 -0
  33. sage/geometry/integral_points.py +35 -0
  34. sage/geometry/integral_points_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  35. sage/geometry/integral_points_generic_dense.pyx +7 -0
  36. sage/geometry/lattice_polytope.py +5894 -0
  37. sage/geometry/linear_expression.py +773 -0
  38. sage/geometry/newton_polygon.py +767 -0
  39. sage/geometry/point_collection.cpython-314-x86_64-linux-gnu.so +0 -0
  40. sage/geometry/point_collection.pyx +1008 -0
  41. sage/geometry/polyhedral_complex.py +2616 -0
  42. sage/geometry/polyhedron/all.py +8 -0
  43. sage/geometry/polyhedron/backend_cdd.py +460 -0
  44. sage/geometry/polyhedron/backend_cdd_rdf.py +231 -0
  45. sage/geometry/polyhedron/backend_field.py +347 -0
  46. sage/geometry/polyhedron/backend_normaliz.py +2503 -0
  47. sage/geometry/polyhedron/backend_number_field.py +168 -0
  48. sage/geometry/polyhedron/backend_polymake.py +765 -0
  49. sage/geometry/polyhedron/backend_ppl.py +582 -0
  50. sage/geometry/polyhedron/base.py +1206 -0
  51. sage/geometry/polyhedron/base0.py +1444 -0
  52. sage/geometry/polyhedron/base1.py +886 -0
  53. sage/geometry/polyhedron/base2.py +812 -0
  54. sage/geometry/polyhedron/base3.py +1845 -0
  55. sage/geometry/polyhedron/base4.py +1262 -0
  56. sage/geometry/polyhedron/base5.py +2700 -0
  57. sage/geometry/polyhedron/base6.py +1741 -0
  58. sage/geometry/polyhedron/base7.py +997 -0
  59. sage/geometry/polyhedron/base_QQ.py +1258 -0
  60. sage/geometry/polyhedron/base_RDF.py +98 -0
  61. sage/geometry/polyhedron/base_ZZ.py +934 -0
  62. sage/geometry/polyhedron/base_mutable.py +215 -0
  63. sage/geometry/polyhedron/base_number_field.py +122 -0
  64. sage/geometry/polyhedron/cdd_file_format.py +155 -0
  65. sage/geometry/polyhedron/combinatorial_polyhedron/all.py +1 -0
  66. sage/geometry/polyhedron/combinatorial_polyhedron/base.cpython-314-x86_64-linux-gnu.so +0 -0
  67. sage/geometry/polyhedron/combinatorial_polyhedron/base.pxd +76 -0
  68. sage/geometry/polyhedron/combinatorial_polyhedron/base.pyx +3859 -0
  69. sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.cpython-314-x86_64-linux-gnu.so +0 -0
  70. sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pxd +39 -0
  71. sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pyx +1038 -0
  72. sage/geometry/polyhedron/combinatorial_polyhedron/conversions.cpython-314-x86_64-linux-gnu.so +0 -0
  73. sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pxd +9 -0
  74. sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pyx +501 -0
  75. sage/geometry/polyhedron/combinatorial_polyhedron/face_data_structure.pxd +207 -0
  76. sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.cpython-314-x86_64-linux-gnu.so +0 -0
  77. sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pxd +102 -0
  78. sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pyx +2274 -0
  79. sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.cpython-314-x86_64-linux-gnu.so +0 -0
  80. sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pxd +370 -0
  81. sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pyx +84 -0
  82. sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.cpython-314-x86_64-linux-gnu.so +0 -0
  83. sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pxd +31 -0
  84. sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pyx +587 -0
  85. sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.cpython-314-x86_64-linux-gnu.so +0 -0
  86. sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pxd +52 -0
  87. sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pyx +560 -0
  88. sage/geometry/polyhedron/constructor.py +773 -0
  89. sage/geometry/polyhedron/double_description.py +753 -0
  90. sage/geometry/polyhedron/double_description_inhomogeneous.py +564 -0
  91. sage/geometry/polyhedron/face.py +1060 -0
  92. sage/geometry/polyhedron/generating_function.py +1810 -0
  93. sage/geometry/polyhedron/lattice_euclidean_group_element.py +178 -0
  94. sage/geometry/polyhedron/library.py +3502 -0
  95. sage/geometry/polyhedron/misc.py +121 -0
  96. sage/geometry/polyhedron/modules/all.py +1 -0
  97. sage/geometry/polyhedron/modules/formal_polyhedra_module.py +155 -0
  98. sage/geometry/polyhedron/palp_database.py +447 -0
  99. sage/geometry/polyhedron/parent.py +1279 -0
  100. sage/geometry/polyhedron/plot.py +1986 -0
  101. sage/geometry/polyhedron/ppl_lattice_polygon.py +556 -0
  102. sage/geometry/polyhedron/ppl_lattice_polytope.py +1257 -0
  103. sage/geometry/polyhedron/representation.py +1723 -0
  104. sage/geometry/pseudolines.py +515 -0
  105. sage/geometry/relative_interior.py +445 -0
  106. sage/geometry/toric_plotter.py +1103 -0
  107. sage/geometry/triangulation/all.py +2 -0
  108. sage/geometry/triangulation/base.cpython-314-x86_64-linux-gnu.so +0 -0
  109. sage/geometry/triangulation/base.pyx +963 -0
  110. sage/geometry/triangulation/data.h +147 -0
  111. sage/geometry/triangulation/data.pxd +4 -0
  112. sage/geometry/triangulation/element.py +914 -0
  113. sage/geometry/triangulation/functions.h +10 -0
  114. sage/geometry/triangulation/functions.pxd +4 -0
  115. sage/geometry/triangulation/point_configuration.py +2256 -0
  116. sage/geometry/triangulation/triangulations.h +49 -0
  117. sage/geometry/triangulation/triangulations.pxd +7 -0
  118. sage/geometry/voronoi_diagram.py +319 -0
  119. sage/interfaces/all__sagemath_polyhedra.py +1 -0
  120. sage/interfaces/polymake.py +2028 -0
  121. sage/numerical/all.py +13 -0
  122. sage/numerical/all__sagemath_polyhedra.py +11 -0
  123. sage/numerical/backends/all.py +1 -0
  124. sage/numerical/backends/all__sagemath_polyhedra.py +1 -0
  125. sage/numerical/backends/cvxopt_backend.cpython-314-x86_64-linux-gnu.so +0 -0
  126. sage/numerical/backends/cvxopt_backend.pyx +1006 -0
  127. sage/numerical/backends/cvxopt_backend_test.py +19 -0
  128. sage/numerical/backends/cvxopt_sdp_backend.cpython-314-x86_64-linux-gnu.so +0 -0
  129. sage/numerical/backends/cvxopt_sdp_backend.pyx +382 -0
  130. sage/numerical/backends/cvxpy_backend.cpython-314-x86_64-linux-gnu.so +0 -0
  131. sage/numerical/backends/cvxpy_backend.pxd +41 -0
  132. sage/numerical/backends/cvxpy_backend.pyx +934 -0
  133. sage/numerical/backends/cvxpy_backend_test.py +13 -0
  134. sage/numerical/backends/generic_backend_test.py +24 -0
  135. sage/numerical/backends/interactivelp_backend.cpython-314-x86_64-linux-gnu.so +0 -0
  136. sage/numerical/backends/interactivelp_backend.pxd +36 -0
  137. sage/numerical/backends/interactivelp_backend.pyx +1231 -0
  138. sage/numerical/backends/interactivelp_backend_test.py +12 -0
  139. sage/numerical/backends/logging_backend.py +391 -0
  140. sage/numerical/backends/matrix_sdp_backend.cpython-314-x86_64-linux-gnu.so +0 -0
  141. sage/numerical/backends/matrix_sdp_backend.pxd +15 -0
  142. sage/numerical/backends/matrix_sdp_backend.pyx +478 -0
  143. sage/numerical/backends/ppl_backend.cpython-314-x86_64-linux-gnu.so +0 -0
  144. sage/numerical/backends/ppl_backend.pyx +1126 -0
  145. sage/numerical/backends/ppl_backend_test.py +13 -0
  146. sage/numerical/backends/scip_backend.cpython-314-x86_64-linux-gnu.so +0 -0
  147. sage/numerical/backends/scip_backend.pxd +22 -0
  148. sage/numerical/backends/scip_backend.pyx +1289 -0
  149. sage/numerical/backends/scip_backend_test.py +13 -0
  150. sage/numerical/interactive_simplex_method.py +5338 -0
  151. sage/numerical/knapsack.py +665 -0
  152. sage/numerical/linear_functions.cpython-314-x86_64-linux-gnu.so +0 -0
  153. sage/numerical/linear_functions.pxd +31 -0
  154. sage/numerical/linear_functions.pyx +1648 -0
  155. sage/numerical/linear_tensor.py +470 -0
  156. sage/numerical/linear_tensor_constraints.py +448 -0
  157. sage/numerical/linear_tensor_element.cpython-314-x86_64-linux-gnu.so +0 -0
  158. sage/numerical/linear_tensor_element.pxd +6 -0
  159. sage/numerical/linear_tensor_element.pyx +459 -0
  160. sage/numerical/mip.cpython-314-x86_64-linux-gnu.so +0 -0
  161. sage/numerical/mip.pxd +40 -0
  162. sage/numerical/mip.pyx +3667 -0
  163. sage/numerical/sdp.cpython-314-x86_64-linux-gnu.so +0 -0
  164. sage/numerical/sdp.pxd +39 -0
  165. sage/numerical/sdp.pyx +1433 -0
  166. sage/rings/all__sagemath_polyhedra.py +3 -0
  167. sage/rings/polynomial/all__sagemath_polyhedra.py +10 -0
  168. sage/rings/polynomial/omega.py +982 -0
  169. sage/schemes/all__sagemath_polyhedra.py +2 -0
  170. sage/schemes/toric/all.py +10 -0
  171. sage/schemes/toric/chow_group.py +1248 -0
  172. sage/schemes/toric/divisor.py +2082 -0
  173. sage/schemes/toric/divisor_class.cpython-314-x86_64-linux-gnu.so +0 -0
  174. sage/schemes/toric/divisor_class.pyx +322 -0
  175. sage/schemes/toric/fano_variety.py +1606 -0
  176. sage/schemes/toric/homset.py +650 -0
  177. sage/schemes/toric/ideal.py +451 -0
  178. sage/schemes/toric/library.py +1322 -0
  179. sage/schemes/toric/morphism.py +1958 -0
  180. sage/schemes/toric/points.py +1032 -0
  181. sage/schemes/toric/sheaf/all.py +1 -0
  182. sage/schemes/toric/sheaf/constructor.py +302 -0
  183. sage/schemes/toric/sheaf/klyachko.py +921 -0
  184. sage/schemes/toric/toric_subscheme.py +905 -0
  185. sage/schemes/toric/variety.py +3460 -0
  186. sage/schemes/toric/weierstrass.py +1078 -0
  187. sage/schemes/toric/weierstrass_covering.py +457 -0
  188. sage/schemes/toric/weierstrass_higher.py +288 -0
  189. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.info +10 -0
  190. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v03 +0 -0
  191. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v04 +0 -0
  192. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v05 +1 -0
  193. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v06 +1 -0
  194. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.info +22 -0
  195. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v04 +0 -0
  196. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v05 +0 -0
  197. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v06 +0 -0
  198. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v07 +0 -0
  199. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v08 +0 -0
  200. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v09 +0 -0
  201. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v10 +0 -0
  202. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v11 +1 -0
  203. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v12 +1 -0
  204. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v13 +1 -0
  205. sage_wheels/share/reflexive_polytopes/reflexive_polytopes_2d +80 -0
  206. 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()