passagemath-polyhedra 10.6.37__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.
Files changed (209) hide show
  1. passagemath_polyhedra/__init__.py +3 -0
  2. passagemath_polyhedra-10.6.37.dist-info/METADATA +367 -0
  3. passagemath_polyhedra-10.6.37.dist-info/METADATA.bak +369 -0
  4. passagemath_polyhedra-10.6.37.dist-info/RECORD +209 -0
  5. passagemath_polyhedra-10.6.37.dist-info/WHEEL +5 -0
  6. passagemath_polyhedra-10.6.37.dist-info/top_level.txt +3 -0
  7. passagemath_polyhedra.libs/libgcc_s-0cd532bd.so.1 +0 -0
  8. passagemath_polyhedra.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  9. passagemath_polyhedra.libs/libgomp-8949ffbe.so.1.0.0 +0 -0
  10. passagemath_polyhedra.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
  11. sage/all__sagemath_polyhedra.py +50 -0
  12. sage/game_theory/all.py +8 -0
  13. sage/game_theory/catalog.py +6 -0
  14. sage/game_theory/catalog_normal_form_games.py +923 -0
  15. sage/game_theory/cooperative_game.py +844 -0
  16. sage/game_theory/matching_game.py +1181 -0
  17. sage/game_theory/normal_form_game.py +2697 -0
  18. sage/game_theory/parser.py +275 -0
  19. sage/geometry/all__sagemath_polyhedra.py +22 -0
  20. sage/geometry/cone.py +6940 -0
  21. sage/geometry/cone_catalog.py +847 -0
  22. sage/geometry/cone_critical_angles.py +1027 -0
  23. sage/geometry/convex_set.py +1119 -0
  24. sage/geometry/fan.py +3743 -0
  25. sage/geometry/fan_isomorphism.py +389 -0
  26. sage/geometry/fan_morphism.py +1884 -0
  27. sage/geometry/hasse_diagram.py +202 -0
  28. sage/geometry/hyperplane_arrangement/affine_subspace.py +390 -0
  29. sage/geometry/hyperplane_arrangement/all.py +1 -0
  30. sage/geometry/hyperplane_arrangement/arrangement.py +3905 -0
  31. sage/geometry/hyperplane_arrangement/check_freeness.py +145 -0
  32. sage/geometry/hyperplane_arrangement/hyperplane.py +773 -0
  33. sage/geometry/hyperplane_arrangement/library.py +825 -0
  34. sage/geometry/hyperplane_arrangement/ordered_arrangement.py +642 -0
  35. sage/geometry/hyperplane_arrangement/plot.py +520 -0
  36. sage/geometry/integral_points.py +35 -0
  37. sage/geometry/integral_points_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  38. sage/geometry/integral_points_generic_dense.pyx +7 -0
  39. sage/geometry/lattice_polytope.py +5894 -0
  40. sage/geometry/linear_expression.py +773 -0
  41. sage/geometry/newton_polygon.py +767 -0
  42. sage/geometry/point_collection.cpython-314-x86_64-linux-musl.so +0 -0
  43. sage/geometry/point_collection.pyx +1008 -0
  44. sage/geometry/polyhedral_complex.py +2616 -0
  45. sage/geometry/polyhedron/all.py +8 -0
  46. sage/geometry/polyhedron/backend_cdd.py +460 -0
  47. sage/geometry/polyhedron/backend_cdd_rdf.py +231 -0
  48. sage/geometry/polyhedron/backend_field.py +347 -0
  49. sage/geometry/polyhedron/backend_normaliz.py +2503 -0
  50. sage/geometry/polyhedron/backend_number_field.py +168 -0
  51. sage/geometry/polyhedron/backend_polymake.py +765 -0
  52. sage/geometry/polyhedron/backend_ppl.py +582 -0
  53. sage/geometry/polyhedron/base.py +1206 -0
  54. sage/geometry/polyhedron/base0.py +1444 -0
  55. sage/geometry/polyhedron/base1.py +886 -0
  56. sage/geometry/polyhedron/base2.py +812 -0
  57. sage/geometry/polyhedron/base3.py +1845 -0
  58. sage/geometry/polyhedron/base4.py +1262 -0
  59. sage/geometry/polyhedron/base5.py +2700 -0
  60. sage/geometry/polyhedron/base6.py +1741 -0
  61. sage/geometry/polyhedron/base7.py +997 -0
  62. sage/geometry/polyhedron/base_QQ.py +1258 -0
  63. sage/geometry/polyhedron/base_RDF.py +98 -0
  64. sage/geometry/polyhedron/base_ZZ.py +934 -0
  65. sage/geometry/polyhedron/base_mutable.py +215 -0
  66. sage/geometry/polyhedron/base_number_field.py +122 -0
  67. sage/geometry/polyhedron/cdd_file_format.py +155 -0
  68. sage/geometry/polyhedron/combinatorial_polyhedron/all.py +1 -0
  69. sage/geometry/polyhedron/combinatorial_polyhedron/base.cpython-314-x86_64-linux-musl.so +0 -0
  70. sage/geometry/polyhedron/combinatorial_polyhedron/base.pxd +76 -0
  71. sage/geometry/polyhedron/combinatorial_polyhedron/base.pyx +3859 -0
  72. sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.cpython-314-x86_64-linux-musl.so +0 -0
  73. sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pxd +39 -0
  74. sage/geometry/polyhedron/combinatorial_polyhedron/combinatorial_face.pyx +1038 -0
  75. sage/geometry/polyhedron/combinatorial_polyhedron/conversions.cpython-314-x86_64-linux-musl.so +0 -0
  76. sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pxd +9 -0
  77. sage/geometry/polyhedron/combinatorial_polyhedron/conversions.pyx +501 -0
  78. sage/geometry/polyhedron/combinatorial_polyhedron/face_data_structure.pxd +207 -0
  79. sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pxd +102 -0
  81. sage/geometry/polyhedron/combinatorial_polyhedron/face_iterator.pyx +2274 -0
  82. sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.cpython-314-x86_64-linux-musl.so +0 -0
  83. sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pxd +370 -0
  84. sage/geometry/polyhedron/combinatorial_polyhedron/face_list_data_structure.pyx +84 -0
  85. sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.cpython-314-x86_64-linux-musl.so +0 -0
  86. sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pxd +31 -0
  87. sage/geometry/polyhedron/combinatorial_polyhedron/list_of_faces.pyx +587 -0
  88. sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.cpython-314-x86_64-linux-musl.so +0 -0
  89. sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pxd +52 -0
  90. sage/geometry/polyhedron/combinatorial_polyhedron/polyhedron_face_lattice.pyx +560 -0
  91. sage/geometry/polyhedron/constructor.py +773 -0
  92. sage/geometry/polyhedron/double_description.py +753 -0
  93. sage/geometry/polyhedron/double_description_inhomogeneous.py +564 -0
  94. sage/geometry/polyhedron/face.py +1060 -0
  95. sage/geometry/polyhedron/generating_function.py +1810 -0
  96. sage/geometry/polyhedron/lattice_euclidean_group_element.py +178 -0
  97. sage/geometry/polyhedron/library.py +3502 -0
  98. sage/geometry/polyhedron/misc.py +121 -0
  99. sage/geometry/polyhedron/modules/all.py +1 -0
  100. sage/geometry/polyhedron/modules/formal_polyhedra_module.py +155 -0
  101. sage/geometry/polyhedron/palp_database.py +447 -0
  102. sage/geometry/polyhedron/parent.py +1279 -0
  103. sage/geometry/polyhedron/plot.py +1986 -0
  104. sage/geometry/polyhedron/ppl_lattice_polygon.py +556 -0
  105. sage/geometry/polyhedron/ppl_lattice_polytope.py +1257 -0
  106. sage/geometry/polyhedron/representation.py +1723 -0
  107. sage/geometry/pseudolines.py +515 -0
  108. sage/geometry/relative_interior.py +445 -0
  109. sage/geometry/toric_plotter.py +1103 -0
  110. sage/geometry/triangulation/all.py +2 -0
  111. sage/geometry/triangulation/base.cpython-314-x86_64-linux-musl.so +0 -0
  112. sage/geometry/triangulation/base.pyx +963 -0
  113. sage/geometry/triangulation/data.h +147 -0
  114. sage/geometry/triangulation/data.pxd +4 -0
  115. sage/geometry/triangulation/element.py +914 -0
  116. sage/geometry/triangulation/functions.h +10 -0
  117. sage/geometry/triangulation/functions.pxd +4 -0
  118. sage/geometry/triangulation/point_configuration.py +2256 -0
  119. sage/geometry/triangulation/triangulations.h +49 -0
  120. sage/geometry/triangulation/triangulations.pxd +7 -0
  121. sage/geometry/voronoi_diagram.py +319 -0
  122. sage/interfaces/all__sagemath_polyhedra.py +1 -0
  123. sage/interfaces/polymake.py +2028 -0
  124. sage/numerical/all.py +13 -0
  125. sage/numerical/all__sagemath_polyhedra.py +11 -0
  126. sage/numerical/backends/all.py +1 -0
  127. sage/numerical/backends/all__sagemath_polyhedra.py +1 -0
  128. sage/numerical/backends/cvxopt_backend.cpython-314-x86_64-linux-musl.so +0 -0
  129. sage/numerical/backends/cvxopt_backend.pyx +1006 -0
  130. sage/numerical/backends/cvxopt_backend_test.py +19 -0
  131. sage/numerical/backends/cvxopt_sdp_backend.cpython-314-x86_64-linux-musl.so +0 -0
  132. sage/numerical/backends/cvxopt_sdp_backend.pyx +382 -0
  133. sage/numerical/backends/cvxpy_backend.cpython-314-x86_64-linux-musl.so +0 -0
  134. sage/numerical/backends/cvxpy_backend.pxd +41 -0
  135. sage/numerical/backends/cvxpy_backend.pyx +934 -0
  136. sage/numerical/backends/cvxpy_backend_test.py +13 -0
  137. sage/numerical/backends/generic_backend_test.py +24 -0
  138. sage/numerical/backends/interactivelp_backend.cpython-314-x86_64-linux-musl.so +0 -0
  139. sage/numerical/backends/interactivelp_backend.pxd +36 -0
  140. sage/numerical/backends/interactivelp_backend.pyx +1231 -0
  141. sage/numerical/backends/interactivelp_backend_test.py +12 -0
  142. sage/numerical/backends/logging_backend.py +391 -0
  143. sage/numerical/backends/matrix_sdp_backend.cpython-314-x86_64-linux-musl.so +0 -0
  144. sage/numerical/backends/matrix_sdp_backend.pxd +15 -0
  145. sage/numerical/backends/matrix_sdp_backend.pyx +478 -0
  146. sage/numerical/backends/ppl_backend.cpython-314-x86_64-linux-musl.so +0 -0
  147. sage/numerical/backends/ppl_backend.pyx +1126 -0
  148. sage/numerical/backends/ppl_backend_test.py +13 -0
  149. sage/numerical/backends/scip_backend.cpython-314-x86_64-linux-musl.so +0 -0
  150. sage/numerical/backends/scip_backend.pxd +22 -0
  151. sage/numerical/backends/scip_backend.pyx +1289 -0
  152. sage/numerical/backends/scip_backend_test.py +13 -0
  153. sage/numerical/interactive_simplex_method.py +5338 -0
  154. sage/numerical/knapsack.py +665 -0
  155. sage/numerical/linear_functions.cpython-314-x86_64-linux-musl.so +0 -0
  156. sage/numerical/linear_functions.pxd +31 -0
  157. sage/numerical/linear_functions.pyx +1648 -0
  158. sage/numerical/linear_tensor.py +470 -0
  159. sage/numerical/linear_tensor_constraints.py +448 -0
  160. sage/numerical/linear_tensor_element.cpython-314-x86_64-linux-musl.so +0 -0
  161. sage/numerical/linear_tensor_element.pxd +6 -0
  162. sage/numerical/linear_tensor_element.pyx +459 -0
  163. sage/numerical/mip.cpython-314-x86_64-linux-musl.so +0 -0
  164. sage/numerical/mip.pxd +40 -0
  165. sage/numerical/mip.pyx +3667 -0
  166. sage/numerical/sdp.cpython-314-x86_64-linux-musl.so +0 -0
  167. sage/numerical/sdp.pxd +39 -0
  168. sage/numerical/sdp.pyx +1433 -0
  169. sage/rings/all__sagemath_polyhedra.py +3 -0
  170. sage/rings/polynomial/all__sagemath_polyhedra.py +10 -0
  171. sage/rings/polynomial/omega.py +982 -0
  172. sage/schemes/all__sagemath_polyhedra.py +2 -0
  173. sage/schemes/toric/all.py +10 -0
  174. sage/schemes/toric/chow_group.py +1248 -0
  175. sage/schemes/toric/divisor.py +2082 -0
  176. sage/schemes/toric/divisor_class.cpython-314-x86_64-linux-musl.so +0 -0
  177. sage/schemes/toric/divisor_class.pyx +322 -0
  178. sage/schemes/toric/fano_variety.py +1606 -0
  179. sage/schemes/toric/homset.py +650 -0
  180. sage/schemes/toric/ideal.py +451 -0
  181. sage/schemes/toric/library.py +1322 -0
  182. sage/schemes/toric/morphism.py +1958 -0
  183. sage/schemes/toric/points.py +1032 -0
  184. sage/schemes/toric/sheaf/all.py +1 -0
  185. sage/schemes/toric/sheaf/constructor.py +302 -0
  186. sage/schemes/toric/sheaf/klyachko.py +921 -0
  187. sage/schemes/toric/toric_subscheme.py +905 -0
  188. sage/schemes/toric/variety.py +3460 -0
  189. sage/schemes/toric/weierstrass.py +1078 -0
  190. sage/schemes/toric/weierstrass_covering.py +457 -0
  191. sage/schemes/toric/weierstrass_higher.py +288 -0
  192. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.info +10 -0
  193. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v03 +0 -0
  194. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v04 +0 -0
  195. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v05 +1 -0
  196. sage_wheels/share/reflexive_polytopes/Full2d/zzdb.v06 +1 -0
  197. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.info +22 -0
  198. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v04 +0 -0
  199. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v05 +0 -0
  200. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v06 +0 -0
  201. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v07 +0 -0
  202. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v08 +0 -0
  203. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v09 +0 -0
  204. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v10 +0 -0
  205. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v11 +1 -0
  206. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v12 +1 -0
  207. sage_wheels/share/reflexive_polytopes/Full3d/zzdb.v13 +1 -0
  208. sage_wheels/share/reflexive_polytopes/reflexive_polytopes_2d +80 -0
  209. sage_wheels/share/reflexive_polytopes/reflexive_polytopes_3d +37977 -0
@@ -0,0 +1,121 @@
1
+ # sage_setup: distribution = sagemath-polyhedra
2
+ r"""
3
+ Miscellaneous helper functions
4
+ """
5
+ # **********************************************************************
6
+ # Copyright (C) 2008 Marshall Hampton <hamptonio@gmail.com>
7
+ # Copyright (C) 2011 Volker Braun <vbraun.name@gmail.com>
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ #
11
+ # https://www.gnu.org/licenses/
12
+ # **********************************************************************
13
+
14
+
15
+ def _to_space_separated_string(l, base_ring=None):
16
+ """
17
+ Convert a container to a space-separated string.
18
+
19
+ INPUT:
20
+
21
+ - ``l`` -- anything iterable
22
+
23
+ - ``base_ring`` -- ring (default: ``None``); convert this ring, if given
24
+
25
+ OUTPUT: string
26
+
27
+ EXAMPLES::
28
+
29
+ sage: import sage.geometry.polyhedron.misc as P
30
+ sage: P._to_space_separated_string([2,3])
31
+ '2 3'
32
+ sage: P._to_space_separated_string([2, 1/5], RDF) # needs sage.rings.real_double
33
+ '2.0 0.2'
34
+ """
35
+ if base_ring:
36
+ return ' '.join(repr(base_ring(x)) for x in l)
37
+ return ' '.join(repr(x) for x in l)
38
+
39
+
40
+ def _set_to_None_if_empty(x):
41
+ """
42
+ Helper function to clean up arguments.
43
+
44
+ This returns None if x is None or x is an empty container.
45
+
46
+ EXAMPLES::
47
+
48
+ sage: import sage.geometry.polyhedron.misc as P
49
+ sage: None == P._set_to_None_if_empty([])
50
+ True
51
+ sage: P._set_to_None_if_empty([1])
52
+ [1]
53
+ """
54
+ if x is None:
55
+ return x
56
+ x = list(x)
57
+ if not x:
58
+ return None
59
+ return x
60
+
61
+
62
+ def _make_listlist(x):
63
+ """
64
+ Helper function to clean up arguments.
65
+
66
+ INPUT:
67
+
68
+ - ``x`` -- ``None`` or an iterable of iterables
69
+
70
+ OUTPUT: list of lists
71
+
72
+ EXAMPLES::
73
+
74
+ sage: import sage.geometry.polyhedron.misc as P
75
+ sage: [] == P._make_listlist(tuple())
76
+ True
77
+ sage: [] == P._make_listlist(None)
78
+ True
79
+ sage: P._make_listlist([(1,2),[3,4]])
80
+ [[1, 2], [3, 4]]
81
+ """
82
+ if x is None:
83
+ return []
84
+ return [list(y) for y in x]
85
+
86
+
87
+ def _common_length_of(l1, l2=None, l3=None):
88
+ """
89
+ The arguments are containers or ``None``. The function applies
90
+ ``len()`` to each element, and returns the common length. If the
91
+ length differs, :exc:`ValueError` is raised. Used to check arguments.
92
+
93
+ OUTPUT:
94
+
95
+ A tuple (number of entries, common length of the entries)
96
+
97
+ EXAMPLES::
98
+
99
+ sage: import sage.geometry.polyhedron.misc as P
100
+ sage: P._common_length_of([[1,2,3],[1,3,34]])
101
+ (2, 3)
102
+ """
103
+ args = []
104
+ if l1 is not None:
105
+ args.append(l1)
106
+ if l2 is not None:
107
+ args.append(l2)
108
+ if l3 is not None:
109
+ args.append(l3)
110
+
111
+ length = None
112
+ num = 0
113
+ for l in args:
114
+ for i in l:
115
+ num += 1
116
+ length_i = len(i)
117
+ if length is not None and length_i != length:
118
+ raise ValueError("Argument lengths differ!")
119
+ length = length_i
120
+
121
+ return num, length
@@ -0,0 +1 @@
1
+ # sage_setup: distribution = sagemath-polyhedra
@@ -0,0 +1,155 @@
1
+ # sage_setup: distribution = sagemath-polyhedra
2
+ r"""
3
+ Formal modules generated by polyhedra
4
+ """
5
+ from sage.combinat.free_module import CombinatorialFreeModule
6
+ from sage.categories.graded_modules_with_basis import GradedModulesWithBasis
7
+
8
+
9
+ class FormalPolyhedraModule(CombinatorialFreeModule):
10
+ r"""
11
+ Class for formal modules generated by polyhedra.
12
+
13
+ It is formal because it is free -- it does not know
14
+ about linear relations of polyhedra.
15
+
16
+ A formal polyhedral module is graded by dimension.
17
+
18
+ INPUT:
19
+
20
+ - ``base_ring`` -- base ring of the module; unrelated to the
21
+ base ring of the polyhedra
22
+
23
+ - ``dimension`` -- the ambient dimension of the polyhedra
24
+
25
+ - ``basis`` -- the basis
26
+
27
+ EXAMPLES::
28
+
29
+ sage: from sage.geometry.polyhedron.modules.formal_polyhedra_module import FormalPolyhedraModule
30
+ sage: def closed_interval(a, b): return Polyhedron(vertices=[[a], [b]])
31
+
32
+ A three-dimensional vector space of polyhedra::
33
+
34
+ sage: I01 = closed_interval(0, 1); I01.rename('conv([0], [1])')
35
+ sage: I11 = closed_interval(1, 1); I11.rename('{[1]}')
36
+ sage: I12 = closed_interval(1, 2); I12.rename('conv([1], [2])')
37
+ sage: basis = [I01, I11, I12]
38
+ sage: M = FormalPolyhedraModule(QQ, 1, basis=basis); M
39
+ Free module generated by {conv([0], [1]), {[1]}, conv([1], [2])} over Rational Field
40
+ sage: M.get_order()
41
+ [conv([0], [1]), {[1]}, conv([1], [2])]
42
+
43
+ A one-dimensional subspace; bases of subspaces just use the indexing
44
+ set `0, \dots, d-1`, where `d` is the dimension::
45
+
46
+ sage: M_lower = M.submodule([M(I11)]); M_lower
47
+ Free module generated by {0} over Rational Field
48
+ sage: M_lower.print_options(prefix='S')
49
+ sage: M_lower.is_submodule(M)
50
+ True
51
+ sage: x = M(I01) - 2*M(I11) + M(I12)
52
+ sage: M_lower.reduce(x)
53
+ [conv([0], [1])] + [conv([1], [2])]
54
+ sage: M_lower.retract.domain() is M
55
+ True
56
+ sage: y = M_lower.retract(M(I11)); y
57
+ S[0]
58
+ sage: M_lower.lift(y)
59
+ [{[1]}]
60
+
61
+ Quotient space; bases of quotient space are families indexed by
62
+ elements of the ambient space::
63
+
64
+ sage: M_mod_lower = M.quotient_module(M_lower); M_mod_lower
65
+ Free module generated by {conv([0], [1]), conv([1], [2])} over Rational Field
66
+ sage: M_mod_lower.print_options(prefix='Q')
67
+ sage: M_mod_lower.retract(x)
68
+ Q[conv([0], [1])] + Q[conv([1], [2])]
69
+ sage: M_mod_lower.retract(M(I01) - 2*M(I11) + M(I12)) == M_mod_lower.retract(M(I01) + M(I12))
70
+ True
71
+ """
72
+
73
+ @staticmethod
74
+ def __classcall__(cls, base_ring, dimension, basis, category=None):
75
+ r"""
76
+ Normalize the arguments for caching.
77
+
78
+ TESTS::
79
+
80
+ sage: from sage.geometry.polyhedron.modules.formal_polyhedra_module import FormalPolyhedraModule
81
+ sage: FormalPolyhedraModule(QQ, 1, ()) is FormalPolyhedraModule(QQ, 1, [])
82
+ True
83
+ """
84
+ if isinstance(basis, list):
85
+ basis = tuple(basis)
86
+ if isinstance(basis, tuple): # To make sure it only checks for finite input
87
+ from sage.geometry.polyhedron.base import Polyhedron_base
88
+ for P in basis:
89
+ if not isinstance(P, Polyhedron_base):
90
+ raise TypeError(f"{P} is not a polyhedron")
91
+ if P.ambient_space().dimension() != dimension:
92
+ raise TypeError(f"{P} does not belong to the ambient space")
93
+ if category is None:
94
+ category = GradedModulesWithBasis(base_ring)
95
+ return super().__classcall__(cls,
96
+ base_ring=base_ring,
97
+ dimension=dimension,
98
+ basis=basis,
99
+ category=category)
100
+
101
+ def __init__(self, base_ring, dimension, basis, category):
102
+ """
103
+ Construct a free module generated by the polyhedra in ``basis``.
104
+
105
+ TESTS::
106
+
107
+ sage: from sage.geometry.polyhedron.modules.formal_polyhedra_module import FormalPolyhedraModule
108
+ sage: def closed_interval(a, b): return Polyhedron(vertices=[[a], [b]])
109
+ sage: I01 = closed_interval(0, 1); I01.rename('conv([0], [1])')
110
+ sage: I11 = closed_interval(1, 1); I11.rename('{[1]}')
111
+ sage: I12 = closed_interval(1, 2); I12.rename('conv([1], [2])')
112
+ sage: I02 = closed_interval(0, 2); I02.rename('conv([0], [2])')
113
+ sage: M = FormalPolyhedraModule(QQ, 1, basis=[I01, I11, I12, I02])
114
+ sage: TestSuite(M).run()
115
+ """
116
+ super().__init__(base_ring, basis, prefix='', category=category)
117
+
118
+ def degree_on_basis(self, m):
119
+ r"""
120
+ The degree of an element of the basis is defined as the dimension of the polyhedron.
121
+
122
+ INPUT:
123
+
124
+ - ``m`` -- an element of the basis (a polyhedron)
125
+
126
+ EXAMPLES::
127
+
128
+ sage: from sage.geometry.polyhedron.modules.formal_polyhedra_module import FormalPolyhedraModule
129
+ sage: def closed_interval(a, b): return Polyhedron(vertices=[[a], [b]])
130
+ sage: I01 = closed_interval(0, 1); I01.rename('conv([0], [1])')
131
+ sage: I11 = closed_interval(1, 1); I11.rename('{[1]}')
132
+ sage: I12 = closed_interval(1, 2); I12.rename('conv([1], [2])')
133
+ sage: I02 = closed_interval(0, 2); I02.rename('conv([0], [2])')
134
+ sage: M = FormalPolyhedraModule(QQ, 1, basis=[I01, I11, I12, I02])
135
+
136
+ We can extract homogeneous components::
137
+
138
+ sage: O = M(I01) + M(I11) + M(I12)
139
+ sage: O.homogeneous_component(0)
140
+ [{[1]}]
141
+ sage: O.homogeneous_component(1)
142
+ [conv([0], [1])] + [conv([1], [2])]
143
+
144
+ We note that modulo the linear relations of polyhedra, this would only be a filtration,
145
+ not a grading, as the following example shows::
146
+
147
+ sage: X = M(I01) + M(I12) - M(I02)
148
+ sage: X.degree()
149
+ 1
150
+
151
+ sage: Y = M(I11)
152
+ sage: Y.degree()
153
+ 0
154
+ """
155
+ return m.dimension()