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,520 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-polyhedra
|
|
2
|
+
# sage.doctest: needs sage.plot sage.symbolic
|
|
3
|
+
"""
|
|
4
|
+
Plotting of Hyperplane Arrangements
|
|
5
|
+
|
|
6
|
+
PLOT OPTIONS:
|
|
7
|
+
|
|
8
|
+
Beside the usual plot options (enter ``plot?``), the plot command for
|
|
9
|
+
hyperplane arrangements includes the following:
|
|
10
|
+
|
|
11
|
+
- ``hyperplane_colors`` -- color or list of colors, one for each
|
|
12
|
+
hyperplane (default: equally spread range of hues)
|
|
13
|
+
|
|
14
|
+
- ``hyperplane_labels`` -- boolean, ``'short'``, ``'long'`` (default:
|
|
15
|
+
``False``). If ``False``, no labels are shown; if 'short' or 'long',
|
|
16
|
+
the hyperplanes are given short or long labels, respectively. If
|
|
17
|
+
``True``, the hyperplanes are given long labels.
|
|
18
|
+
|
|
19
|
+
- ``label_colors`` -- color or list of colors, one for each hyperplane
|
|
20
|
+
(default: black)
|
|
21
|
+
|
|
22
|
+
- ``label_fontsize`` -- size for hyperplane_label font (default:
|
|
23
|
+
``14``); this does not work for 3d plots
|
|
24
|
+
|
|
25
|
+
- ``label_offsets`` -- amount be which labels are offset from
|
|
26
|
+
h.point() for each hyperplane h. The format is different for each
|
|
27
|
+
dimension: if the hyperplanes have dimension 0, the offset can be a
|
|
28
|
+
single number or a list of numbers, one for each hyperplane; if the
|
|
29
|
+
hyperplanes have dimension 1, the offset can be a single 2-tuple, or
|
|
30
|
+
a list of 2-tuples, one for each hyperplane; if the hyperplanes have
|
|
31
|
+
dimension 2, the offset can be a single 3-tuple or a list of
|
|
32
|
+
3-tuples, one for each hyperplane. (Defaults: 0-dim: ``0.1``,
|
|
33
|
+
1-dim: ``(0,1)``, 2-dim: ``(0,0,0.2)``).
|
|
34
|
+
|
|
35
|
+
- ``hyperplane_legend`` -- boolean, ``'short'``, ``'long'`` (default:
|
|
36
|
+
``'long'``; in 3-d: ``False``). If ``False``, no legend is shown;
|
|
37
|
+
if ``True``, ``'short'``, or ``'long'``, the legend is shown with
|
|
38
|
+
the default, long, or short labeling, respectively. (For
|
|
39
|
+
arrangements of lines or planes, only.)
|
|
40
|
+
|
|
41
|
+
- ``hyperplane_opacities`` -- a number or list of numbers, one for each
|
|
42
|
+
hyperplane, between 0 and 1; only applies to 3d plots
|
|
43
|
+
|
|
44
|
+
- ``point_sizes`` -- number or list of numbers, one for each hyperplane
|
|
45
|
+
giving the sizes of points in a zero-dimensional arrangement
|
|
46
|
+
(default: ``50``)
|
|
47
|
+
|
|
48
|
+
- ``ranges`` -- range for the parameters or a list of ranges of
|
|
49
|
+
parameters, one for each hyperplane, for the parametric plots of the
|
|
50
|
+
hyperplanes. If a single positive number `r` is given for
|
|
51
|
+
``ranges``, then all parameters run from -r to r. Otherwise, for a
|
|
52
|
+
line in the plane, the range has the form ``[a,b]`` (default:
|
|
53
|
+
``[-3,3]``), and for a plane in 3-space, the range has the form
|
|
54
|
+
``[[a,b],[c,d]]`` (default: ``[[-3,3],[-3,3]]``). The ranges are
|
|
55
|
+
centered around ``hyperplane_arrangement.point()``.
|
|
56
|
+
|
|
57
|
+
EXAMPLES::
|
|
58
|
+
|
|
59
|
+
sage: H3.<x,y,z> = HyperplaneArrangements(QQ)
|
|
60
|
+
sage: A = H3([(1,0,0), 0], [(0,0,1), 5])
|
|
61
|
+
sage: A.plot(hyperplane_opacities=0.5, hyperplane_labels=True,
|
|
62
|
+
....: hyperplane_legend=False)
|
|
63
|
+
Graphics3d Object
|
|
64
|
+
|
|
65
|
+
sage: c = H3([(1,0,0),0], [(0,0,1),5])
|
|
66
|
+
sage: c.plot(ranges=10)
|
|
67
|
+
Graphics3d Object
|
|
68
|
+
sage: c.plot(ranges=[[9.5,10], [-3,3]])
|
|
69
|
+
Graphics3d Object
|
|
70
|
+
sage: c.plot(ranges=[[[9.5,10], [-3,3]], [[-6,6], [-5,5]]])
|
|
71
|
+
Graphics3d Object
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
sage: H2.<s,t> = HyperplaneArrangements(QQ)
|
|
75
|
+
sage: h = H2([(1,1),0], [(1,-1),0], [(0,1),2])
|
|
76
|
+
sage: h.plot(ranges=20)
|
|
77
|
+
Graphics object consisting of 3 graphics primitives
|
|
78
|
+
sage: h.plot(ranges=[-1, 10])
|
|
79
|
+
Graphics object consisting of 3 graphics primitives
|
|
80
|
+
sage: h.plot(ranges=[[-1, 1], [-5, 5], [-1, 10]])
|
|
81
|
+
Graphics object consisting of 3 graphics primitives
|
|
82
|
+
|
|
83
|
+
sage: a = hyperplane_arrangements.coordinate(3)
|
|
84
|
+
sage: opts = {'hyperplane_colors':['yellow', 'green', 'blue']}
|
|
85
|
+
sage: opts['hyperplane_labels'] = True
|
|
86
|
+
sage: opts['label_offsets'] = [(0,2,2), (2,0,2), (2,2,0)]
|
|
87
|
+
sage: opts['hyperplane_legend'] = False
|
|
88
|
+
sage: opts['hyperplane_opacities'] = 0.7
|
|
89
|
+
sage: a.plot(**opts)
|
|
90
|
+
Graphics3d Object
|
|
91
|
+
sage: opts['hyperplane_labels'] = 'short'
|
|
92
|
+
sage: a.plot(**opts)
|
|
93
|
+
Graphics3d Object
|
|
94
|
+
|
|
95
|
+
sage: H.<u> = HyperplaneArrangements(QQ)
|
|
96
|
+
sage: pts = H(3*u+4, 2*u+5, 7*u+1)
|
|
97
|
+
sage: pts.plot(hyperplane_colors=['yellow','black','blue'])
|
|
98
|
+
Graphics object consisting of 3 graphics primitives
|
|
99
|
+
sage: pts.plot(point_sizes=[50,100,200], hyperplane_colors='blue')
|
|
100
|
+
Graphics object consisting of 3 graphics primitives
|
|
101
|
+
|
|
102
|
+
sage: H.<x,y,z> = HyperplaneArrangements(QQ)
|
|
103
|
+
sage: a = H(x, y+1, y+2)
|
|
104
|
+
sage: a.plot(hyperplane_labels=True, label_colors='blue', label_fontsize=18)
|
|
105
|
+
Graphics3d Object
|
|
106
|
+
sage: a.plot(hyperplane_labels=True, label_colors=['red','green','black'])
|
|
107
|
+
Graphics3d Object
|
|
108
|
+
"""
|
|
109
|
+
from copy import copy
|
|
110
|
+
from colorsys import hsv_to_rgb
|
|
111
|
+
|
|
112
|
+
from sage.misc.lazy_import import lazy_import
|
|
113
|
+
lazy_import("sage.plot.plot3d.parametric_plot3d", "parametric_plot3d")
|
|
114
|
+
lazy_import("sage.plot.plot3d.shapes2", "text3d")
|
|
115
|
+
lazy_import("sage.plot.graphics", "Graphics")
|
|
116
|
+
lazy_import("sage.plot.line", "line")
|
|
117
|
+
lazy_import("sage.plot.text", "text")
|
|
118
|
+
lazy_import("sage.plot.point", "point")
|
|
119
|
+
lazy_import("sage.plot.plot", "parametric_plot")
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def plot(hyperplane_arrangement, **kwds):
|
|
123
|
+
r"""
|
|
124
|
+
Return a plot of the hyperplane arrangement.
|
|
125
|
+
|
|
126
|
+
If the arrangement is in 4 dimensions but inessential, a plot of
|
|
127
|
+
the essentialization is returned.
|
|
128
|
+
|
|
129
|
+
.. NOTE::
|
|
130
|
+
|
|
131
|
+
This function is available as the
|
|
132
|
+
:meth:`~sage.geometry.hyperplane_arrangement.arrangement.HyperplaneArrangementElement.plot`
|
|
133
|
+
method of hyperplane arrangements. You should not call this
|
|
134
|
+
function directly, only through the method.
|
|
135
|
+
|
|
136
|
+
INPUT:
|
|
137
|
+
|
|
138
|
+
- ``hyperplane_arrangement`` -- the hyperplane arrangement to plot
|
|
139
|
+
|
|
140
|
+
- ``**kwds`` -- plot options: see
|
|
141
|
+
:mod:`sage.geometry.hyperplane_arrangement.plot`
|
|
142
|
+
|
|
143
|
+
OUTPUT: a graphics object of the plot
|
|
144
|
+
|
|
145
|
+
EXAMPLES::
|
|
146
|
+
|
|
147
|
+
sage: B = hyperplane_arrangements.semiorder(4)
|
|
148
|
+
sage: B.plot() # needs sage.combinat
|
|
149
|
+
Displaying the essentialization.
|
|
150
|
+
Graphics3d Object
|
|
151
|
+
"""
|
|
152
|
+
N = len(hyperplane_arrangement)
|
|
153
|
+
dim = hyperplane_arrangement.dimension()
|
|
154
|
+
if hyperplane_arrangement.base_ring().characteristic() != 0:
|
|
155
|
+
raise NotImplementedError('must be a field of characteristic 0')
|
|
156
|
+
elif dim == 4:
|
|
157
|
+
if not hyperplane_arrangement.is_essential():
|
|
158
|
+
print('Displaying the essentialization.')
|
|
159
|
+
hyperplane_arrangement = hyperplane_arrangement.essentialization()
|
|
160
|
+
elif dim not in [1,2,3]: # revise to handle 4d
|
|
161
|
+
return # silently
|
|
162
|
+
# handle extra keywords
|
|
163
|
+
if 'hyperplane_colors' in kwds:
|
|
164
|
+
hyp_colors = kwds.pop('hyperplane_colors')
|
|
165
|
+
if not isinstance(hyp_colors, list): # we assume its a single color then
|
|
166
|
+
hyp_colors = [hyp_colors] * N
|
|
167
|
+
else:
|
|
168
|
+
HSV_tuples = [(i*1.0/N, 0.8, 0.9) for i in range(N)]
|
|
169
|
+
hyp_colors = [hsv_to_rgb(*x) for x in HSV_tuples]
|
|
170
|
+
if 'hyperplane_labels' in kwds:
|
|
171
|
+
hyp_labels = kwds.pop('hyperplane_labels')
|
|
172
|
+
has_hyp_label = True
|
|
173
|
+
if not isinstance(hyp_labels, list): # we assume its a boolean then
|
|
174
|
+
hyp_labels = [hyp_labels] * N
|
|
175
|
+
relabeled = []
|
|
176
|
+
for i in range(N):
|
|
177
|
+
if hyp_labels[i] in [True,'long']:
|
|
178
|
+
relabeled.append(True)
|
|
179
|
+
else:
|
|
180
|
+
relabeled.append(str(i))
|
|
181
|
+
hyp_labels = relabeled
|
|
182
|
+
else:
|
|
183
|
+
has_hyp_label = False
|
|
184
|
+
if 'label_colors' in kwds:
|
|
185
|
+
label_colors = kwds.pop('label_colors')
|
|
186
|
+
has_label_color = True
|
|
187
|
+
if not isinstance(label_colors, list): # we assume its a single color then
|
|
188
|
+
label_colors = [label_colors] * N
|
|
189
|
+
else:
|
|
190
|
+
has_label_color = False
|
|
191
|
+
if 'label_fontsize' in kwds:
|
|
192
|
+
label_fontsize = kwds.pop('label_fontsize')
|
|
193
|
+
has_label_fontsize = True
|
|
194
|
+
if not isinstance(label_fontsize, list): # we assume its a single size then
|
|
195
|
+
label_fontsize = [label_fontsize] * N
|
|
196
|
+
else:
|
|
197
|
+
has_label_fontsize = False
|
|
198
|
+
if 'label_offsets' in kwds:
|
|
199
|
+
has_offsets = True
|
|
200
|
+
offsets = kwds.pop('label_offsets')
|
|
201
|
+
else:
|
|
202
|
+
has_offsets = False # give default values below
|
|
203
|
+
hyperplane_legend = kwds.pop('hyperplane_legend', 'long' if dim < 3 else False)
|
|
204
|
+
if 'hyperplane_opacities' in kwds:
|
|
205
|
+
hyperplane_opacities = kwds.pop('hyperplane_opacities')
|
|
206
|
+
has_opacity = True
|
|
207
|
+
if not isinstance(hyperplane_opacities, list): # we assume a single number then
|
|
208
|
+
hyperplane_opacities = [hyperplane_opacities] * N
|
|
209
|
+
else:
|
|
210
|
+
has_opacity = False
|
|
211
|
+
point_sizes = kwds.pop('point_sizes', 50)
|
|
212
|
+
if not isinstance(point_sizes, list):
|
|
213
|
+
point_sizes = [point_sizes] * N
|
|
214
|
+
if 'ranges' in kwds:
|
|
215
|
+
ranges_set = True
|
|
216
|
+
ranges = kwds.pop('ranges')
|
|
217
|
+
if type(ranges) not in [list,tuple]: # ranges is a single number
|
|
218
|
+
ranges = [ranges] * N
|
|
219
|
+
# So ranges is some type of list.
|
|
220
|
+
elif dim == 2: # arrangement of lines in the plane
|
|
221
|
+
if type(ranges[0]) not in [list,tuple]: # a single interval
|
|
222
|
+
ranges = [ranges] * N
|
|
223
|
+
elif dim == 3: # arrangement of planes in 3-space
|
|
224
|
+
if type(ranges[0][0]) not in [list,tuple]:
|
|
225
|
+
ranges = [ranges] * N
|
|
226
|
+
elif dim not in [2,3]: # ranges is not an option unless dim is 2 or 3
|
|
227
|
+
ranges_set = False
|
|
228
|
+
else: # a list of intervals, one for each hyperplane is given
|
|
229
|
+
pass # ranges does not need to be modified
|
|
230
|
+
else:
|
|
231
|
+
ranges_set = False # give default values below
|
|
232
|
+
# the extra keywords have now been handled
|
|
233
|
+
# now handle the legend
|
|
234
|
+
if dim in [1,2]: # points on a line or lines in the plane
|
|
235
|
+
if hyperplane_legend in [True,'long']:
|
|
236
|
+
hyps = hyperplane_arrangement.hyperplanes()
|
|
237
|
+
legend_labels = [hyps[i]._latex_() for i in range(N)]
|
|
238
|
+
elif hyperplane_legend == 'short' :
|
|
239
|
+
legend_labels = [str(i) for i in range(N)]
|
|
240
|
+
else: # dim==3, arrangement of planes in 3-space
|
|
241
|
+
if hyperplane_legend in [True, 'long']:
|
|
242
|
+
legend3d = legend_3d(hyperplane_arrangement, hyp_colors, 'long')
|
|
243
|
+
elif hyperplane_legend == 'short':
|
|
244
|
+
legend3d = legend_3d(hyperplane_arrangement, hyp_colors, 'short')
|
|
245
|
+
## done handling the legend
|
|
246
|
+
## now create the plot
|
|
247
|
+
p = Graphics()
|
|
248
|
+
for i in range(N):
|
|
249
|
+
newk = copy(kwds)
|
|
250
|
+
if has_hyp_label:
|
|
251
|
+
newk['hyperplane_label'] = hyp_labels[i]
|
|
252
|
+
if has_offsets:
|
|
253
|
+
if not isinstance(offsets, list):
|
|
254
|
+
newk['label_offset'] = offsets
|
|
255
|
+
else:
|
|
256
|
+
newk['label_offset'] = offsets[i]
|
|
257
|
+
else:
|
|
258
|
+
newk['hyperplane_label'] = False
|
|
259
|
+
if has_label_color:
|
|
260
|
+
newk['label_color'] = label_colors[i]
|
|
261
|
+
if has_label_fontsize:
|
|
262
|
+
newk['label_fontsize'] = label_fontsize[i]
|
|
263
|
+
if has_opacity:
|
|
264
|
+
newk['opacity'] = hyperplane_opacities[i]
|
|
265
|
+
if dim == 1:
|
|
266
|
+
newk['point_size'] = point_sizes[i]
|
|
267
|
+
if dim in [1,2] and hyperplane_legend: # more options than T/F
|
|
268
|
+
newk['legend_label'] = legend_labels[i]
|
|
269
|
+
if ranges_set:
|
|
270
|
+
newk['ranges'] = ranges[i]
|
|
271
|
+
p += plot_hyperplane(hyperplane_arrangement[i], rgbcolor=hyp_colors[i], **newk)
|
|
272
|
+
if dim == 1:
|
|
273
|
+
if hyperplane_legend: # there are more options than T/F
|
|
274
|
+
p.legend(True)
|
|
275
|
+
return p
|
|
276
|
+
elif dim == 2:
|
|
277
|
+
if hyperplane_legend: # there are more options than T/F
|
|
278
|
+
p.legend(True)
|
|
279
|
+
return p
|
|
280
|
+
else: # dim==3
|
|
281
|
+
if hyperplane_legend: # there are more options than T/F
|
|
282
|
+
return p, legend3d
|
|
283
|
+
else:
|
|
284
|
+
return p
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def plot_hyperplane(hyperplane, **kwds):
|
|
288
|
+
r"""
|
|
289
|
+
Return the plot of a single hyperplane.
|
|
290
|
+
|
|
291
|
+
INPUT:
|
|
292
|
+
|
|
293
|
+
- ``**kwds`` -- plot options: see below
|
|
294
|
+
|
|
295
|
+
OUTPUT: a graphics object of the plot
|
|
296
|
+
|
|
297
|
+
.. RUBRIC:: Plot Options
|
|
298
|
+
|
|
299
|
+
Beside the usual plot options (enter ``plot?``), the plot command for
|
|
300
|
+
hyperplanes includes the following:
|
|
301
|
+
|
|
302
|
+
- ``hyperplane_label`` -- boolean value or string (default: ``True``);
|
|
303
|
+
if ``True``, the hyperplane is labeled with its equation, if a
|
|
304
|
+
string, it is labeled by that string, otherwise it is not
|
|
305
|
+
labeled
|
|
306
|
+
|
|
307
|
+
- ``label_color`` -- (default: ``'black'``) color for hyperplane_label
|
|
308
|
+
|
|
309
|
+
- ``label_fontsize`` -- size for ``hyperplane_label`` font (default: 14)
|
|
310
|
+
(does not work in 3d, yet)
|
|
311
|
+
|
|
312
|
+
- ``label_offset`` -- (default: 0-dim: 0.1, 1-dim: (0,1),
|
|
313
|
+
2-dim: (0,0,0.2)); amount by which label is offset from
|
|
314
|
+
``hyperplane.point()``
|
|
315
|
+
|
|
316
|
+
- ``point_size`` -- (default: 50) size of points in a zero-dimensional
|
|
317
|
+
arrangement or of an arrangement over a finite field
|
|
318
|
+
|
|
319
|
+
- ``ranges`` -- range for the parameters for the parametric plot of the
|
|
320
|
+
hyperplane. If a single positive number ``r`` is given for the
|
|
321
|
+
value of ``ranges``, then the ranges for all parameters are set to
|
|
322
|
+
`[-r, r]`. Otherwise, for a line in the plane, ``ranges`` has the
|
|
323
|
+
form ``[a, b]`` (default: [-3,3]), and for a plane in 3-space, the
|
|
324
|
+
``ranges`` has the form ``[[a, b], [c, d]]`` (default: [[-3,3],[-3,3]]).
|
|
325
|
+
(The ranges are centered around ``hyperplane.point()``.)
|
|
326
|
+
|
|
327
|
+
EXAMPLES::
|
|
328
|
+
|
|
329
|
+
sage: H1.<x> = HyperplaneArrangements(QQ)
|
|
330
|
+
sage: a = 3*x + 4
|
|
331
|
+
sage: a.plot() # indirect doctest
|
|
332
|
+
Graphics object consisting of 3 graphics primitives
|
|
333
|
+
sage: a.plot(point_size=100, hyperplane_label='hello')
|
|
334
|
+
Graphics object consisting of 3 graphics primitives
|
|
335
|
+
|
|
336
|
+
sage: H2.<x,y> = HyperplaneArrangements(QQ)
|
|
337
|
+
sage: b = 3*x + 4*y + 5
|
|
338
|
+
sage: b.plot()
|
|
339
|
+
Graphics object consisting of 2 graphics primitives
|
|
340
|
+
sage: b.plot(ranges=(1,5), label_offset=(2,-1))
|
|
341
|
+
Graphics object consisting of 2 graphics primitives
|
|
342
|
+
sage: opts = {'hyperplane_label': True, 'label_color': 'green',
|
|
343
|
+
....: 'label_fontsize': 24, 'label_offset': (0,1.5)}
|
|
344
|
+
sage: b.plot(**opts)
|
|
345
|
+
Graphics object consisting of 2 graphics primitives
|
|
346
|
+
|
|
347
|
+
sage: H3.<x,y,z> = HyperplaneArrangements(QQ)
|
|
348
|
+
sage: c = 2*x + 3*y + 4*z + 5
|
|
349
|
+
sage: c.plot()
|
|
350
|
+
Graphics3d Object
|
|
351
|
+
sage: c.plot(label_offset=(1,0,1), color='green', label_color='red',
|
|
352
|
+
....: frame=False)
|
|
353
|
+
Graphics3d Object
|
|
354
|
+
sage: d = -3*x + 2*y + 2*z + 3
|
|
355
|
+
sage: d.plot(opacity=0.8)
|
|
356
|
+
Graphics3d Object
|
|
357
|
+
sage: e = 4*x + 2*z + 3
|
|
358
|
+
sage: e.plot(ranges=[[-1,1],[0,8]], label_offset=(2,2,1), aspect_ratio=1)
|
|
359
|
+
Graphics3d Object
|
|
360
|
+
"""
|
|
361
|
+
if hyperplane.base_ring().characteristic():
|
|
362
|
+
raise NotImplementedError('base field must have characteristic zero')
|
|
363
|
+
elif hyperplane.dimension() not in [0, 1, 2]: # dimension of hyperplane, not ambient space
|
|
364
|
+
raise ValueError('can only plot hyperplanes in dimensions 1, 2, 3')
|
|
365
|
+
# handle extra keywords
|
|
366
|
+
if 'hyperplane_label' in kwds:
|
|
367
|
+
hyp_label = kwds.pop('hyperplane_label')
|
|
368
|
+
if not hyp_label:
|
|
369
|
+
has_hyp_label = False
|
|
370
|
+
else:
|
|
371
|
+
has_hyp_label = True
|
|
372
|
+
else: # default
|
|
373
|
+
hyp_label = True
|
|
374
|
+
has_hyp_label = True
|
|
375
|
+
if has_hyp_label:
|
|
376
|
+
if hyp_label: # then label hyperplane with its equation
|
|
377
|
+
if hyperplane.dimension() == 2: # jmol does not like latex
|
|
378
|
+
label = hyperplane._repr_linear(include_zero=False)
|
|
379
|
+
else:
|
|
380
|
+
label = hyperplane._latex_()
|
|
381
|
+
else:
|
|
382
|
+
label = hyp_label # a string
|
|
383
|
+
if 'label_color' in kwds:
|
|
384
|
+
label_color = kwds.pop('label_color')
|
|
385
|
+
else:
|
|
386
|
+
label_color = 'black'
|
|
387
|
+
if 'label_fontsize' in kwds:
|
|
388
|
+
label_fontsize = kwds.pop('label_fontsize')
|
|
389
|
+
else:
|
|
390
|
+
label_fontsize = 14
|
|
391
|
+
if 'label_offset' in kwds:
|
|
392
|
+
has_offset = True
|
|
393
|
+
label_offset = kwds.pop('label_offset')
|
|
394
|
+
else:
|
|
395
|
+
has_offset = False # give default values below
|
|
396
|
+
if 'point_size' in kwds:
|
|
397
|
+
pt_size = kwds.pop('point_size')
|
|
398
|
+
else:
|
|
399
|
+
pt_size = 50
|
|
400
|
+
if 'ranges' in kwds:
|
|
401
|
+
ranges_set = True
|
|
402
|
+
ranges = kwds.pop('ranges')
|
|
403
|
+
else:
|
|
404
|
+
ranges_set = False # give default values below
|
|
405
|
+
# the extra keywords have now been handled
|
|
406
|
+
# now create the plot
|
|
407
|
+
if hyperplane.dimension() == 0: # a point on a line
|
|
408
|
+
x, = hyperplane.A()
|
|
409
|
+
d = hyperplane.b()
|
|
410
|
+
p = point((d/x,0), size=pt_size, **kwds)
|
|
411
|
+
if has_hyp_label:
|
|
412
|
+
if not has_offset:
|
|
413
|
+
label_offset = 0.1
|
|
414
|
+
p += text(label, (d/x,label_offset),
|
|
415
|
+
color=label_color,fontsize=label_fontsize)
|
|
416
|
+
p += text('',(d/x,label_offset+0.4)) # add space at top
|
|
417
|
+
if 'ymax' not in kwds:
|
|
418
|
+
kwds['ymax'] = 0.5
|
|
419
|
+
elif hyperplane.dimension() == 1: # a line in the plane
|
|
420
|
+
pnt = hyperplane.point()
|
|
421
|
+
w = hyperplane.linear_part().matrix()
|
|
422
|
+
from sage.symbolic.ring import SR
|
|
423
|
+
t = SR.var('t')
|
|
424
|
+
if ranges_set:
|
|
425
|
+
if isinstance(ranges, (list, tuple)):
|
|
426
|
+
t0, t1 = ranges
|
|
427
|
+
else: # ranges should be a single positive number
|
|
428
|
+
t0, t1 = -ranges, ranges
|
|
429
|
+
else: # default
|
|
430
|
+
t0, t1 = -3, 3
|
|
431
|
+
p = parametric_plot(pnt + t * w[0], (t, t0, t1), **kwds)
|
|
432
|
+
if has_hyp_label:
|
|
433
|
+
if has_offset:
|
|
434
|
+
b0, b1 = label_offset
|
|
435
|
+
else:
|
|
436
|
+
b0, b1 = 0, 0.2
|
|
437
|
+
label = text(label,(pnt[0] + b0, pnt[1] + b1),
|
|
438
|
+
color=label_color,fontsize=label_fontsize)
|
|
439
|
+
p += label
|
|
440
|
+
elif hyperplane.dimension() == 2: # a plane in 3-space
|
|
441
|
+
pnt = hyperplane.point()
|
|
442
|
+
w = hyperplane.linear_part().matrix()
|
|
443
|
+
from sage.symbolic.ring import SR
|
|
444
|
+
s, t = SR.var('s t')
|
|
445
|
+
if ranges_set:
|
|
446
|
+
if isinstance(ranges, (list, tuple)):
|
|
447
|
+
s0, s1 = ranges[0]
|
|
448
|
+
t0, t1 = ranges[1]
|
|
449
|
+
else: # ranges should be a single positive integers
|
|
450
|
+
s0, s1 = -ranges, ranges
|
|
451
|
+
t0, t1 = -ranges, ranges
|
|
452
|
+
else: # default
|
|
453
|
+
s0, s1 = -3, 3
|
|
454
|
+
t0, t1 = -3, 3
|
|
455
|
+
p = parametric_plot3d(pnt+s*w[0]+t*w[1], (s,s0,s1), (t,t0,t1), **kwds)
|
|
456
|
+
if has_hyp_label:
|
|
457
|
+
if has_offset:
|
|
458
|
+
b0, b1, b2 = label_offset
|
|
459
|
+
else:
|
|
460
|
+
b0, b1, b2 = 0, 0, 0
|
|
461
|
+
label = text3d(label,(pnt[0]+b0, pnt[1]+b1, pnt[2]+b2),
|
|
462
|
+
color=label_color, fontsize=label_fontsize)
|
|
463
|
+
p += label
|
|
464
|
+
return p
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
def legend_3d(hyperplane_arrangement, hyperplane_colors, length):
|
|
468
|
+
r"""
|
|
469
|
+
Create plot of a 3d legend for an arrangement of planes in 3-space.
|
|
470
|
+
|
|
471
|
+
The ``length`` parameter determines whether short or long labels
|
|
472
|
+
are used in the legend.
|
|
473
|
+
|
|
474
|
+
INPUT:
|
|
475
|
+
|
|
476
|
+
- ``hyperplane_arrangement`` -- a hyperplane arrangement
|
|
477
|
+
|
|
478
|
+
- ``hyperplane_colors`` -- list of colors
|
|
479
|
+
|
|
480
|
+
- ``length`` -- either ``'short'`` or ``'long'``
|
|
481
|
+
|
|
482
|
+
OUTPUT: a graphics object
|
|
483
|
+
|
|
484
|
+
EXAMPLES::
|
|
485
|
+
|
|
486
|
+
sage: a = hyperplane_arrangements.semiorder(3)
|
|
487
|
+
sage: from sage.geometry.hyperplane_arrangement.plot import legend_3d
|
|
488
|
+
sage: legend_3d(a, list(colors.values())[:6], length='long') # needs sage.combinat
|
|
489
|
+
Graphics object consisting of 6 graphics primitives
|
|
490
|
+
|
|
491
|
+
sage: b = hyperplane_arrangements.semiorder(4)
|
|
492
|
+
sage: c = b.essentialization()
|
|
493
|
+
sage: legend_3d(c, list(colors.values())[:12], length='long') # needs sage.combinat
|
|
494
|
+
Graphics object consisting of 12 graphics primitives
|
|
495
|
+
|
|
496
|
+
sage: legend_3d(c, list(colors.values())[:12], length='short') # needs sage.combinat
|
|
497
|
+
Graphics object consisting of 12 graphics primitives
|
|
498
|
+
|
|
499
|
+
sage: p = legend_3d(c, list(colors.values())[:12], length='short') # needs sage.combinat
|
|
500
|
+
sage: p.set_legend_options(ncol=4) # needs sage.combinat
|
|
501
|
+
sage: type(p) # needs sage.combinat
|
|
502
|
+
<class 'sage.plot.graphics.Graphics'>
|
|
503
|
+
"""
|
|
504
|
+
if hyperplane_arrangement.dimension() != 3:
|
|
505
|
+
raise ValueError('arrangements must be in 3-space')
|
|
506
|
+
hyps = hyperplane_arrangement.hyperplanes()
|
|
507
|
+
N = len(hyperplane_arrangement)
|
|
508
|
+
if length == 'short':
|
|
509
|
+
labels = [' ' + str(i) for i in range(N)]
|
|
510
|
+
else:
|
|
511
|
+
labels = [' ' + hyps[i]._repr_linear(include_zero=False) for i in
|
|
512
|
+
range(N)]
|
|
513
|
+
p = Graphics()
|
|
514
|
+
for i in range(N):
|
|
515
|
+
p += line([(0,0),(0,0)], color=hyperplane_colors[i], thickness=8,
|
|
516
|
+
legend_label=labels[i], axes=False)
|
|
517
|
+
p.set_legend_options(title='Hyperplanes', loc='center', labelspacing=0.4,
|
|
518
|
+
fancybox=True, font_size='x-large', ncol=2)
|
|
519
|
+
p.legend(True)
|
|
520
|
+
return p
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-polyhedra
|
|
2
|
+
r"""
|
|
3
|
+
Cython helper methods to compute integral points in polyhedra
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
try:
|
|
7
|
+
from .integral_points_integer_dense import (
|
|
8
|
+
parallelotope_points,
|
|
9
|
+
ray_matrix_normal_form,
|
|
10
|
+
loop_over_parallelotope_points,
|
|
11
|
+
simplex_points,
|
|
12
|
+
rectangular_box_points,
|
|
13
|
+
print_cache,
|
|
14
|
+
Inequality_generic,
|
|
15
|
+
Inequality_int,
|
|
16
|
+
InequalityCollection,
|
|
17
|
+
)
|
|
18
|
+
except ImportError:
|
|
19
|
+
from .integral_points_generic_dense import (
|
|
20
|
+
parallelotope_points,
|
|
21
|
+
ray_matrix_normal_form,
|
|
22
|
+
loop_over_parallelotope_points,
|
|
23
|
+
simplex_points,
|
|
24
|
+
rectangular_box_points,
|
|
25
|
+
print_cache,
|
|
26
|
+
Inequality_generic,
|
|
27
|
+
Inequality_int,
|
|
28
|
+
InequalityCollection,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# __all__ is needed to generate Sphinx documentation
|
|
33
|
+
__all__ = ['InequalityCollection', 'Inequality_generic', 'Inequality_int',
|
|
34
|
+
'loop_over_parallelotope_points', 'parallelotope_points', 'print_cache',
|
|
35
|
+
'ray_matrix_normal_form', 'rectangular_box_points', 'simplex_points']
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-polyhedra
|
|
2
|
+
# cython: wraparound=False, boundscheck=False
|
|
3
|
+
|
|
4
|
+
from sage.modules.vector_integer_dense cimport Vector_integer_dense as VectorClass
|
|
5
|
+
from sage.matrix.matrix_dense cimport Matrix_dense as MatrixClass
|
|
6
|
+
|
|
7
|
+
include "integral_points.pxi"
|