diff --git a/src/sage/geometry/polyhedron/base_QQ.py b/src/sage/geometry/polyhedron/base_QQ.py index e17f043adb5..e54c1237cf1 100644 --- a/src/sage/geometry/polyhedron/base_QQ.py +++ b/src/sage/geometry/polyhedron/base_QQ.py @@ -213,10 +213,12 @@ def integral_points_count(self, verbose=False, use_Hrepresentation=False, @cached_method(do_pickle=True) def ehrhart_polynomial(self, engine=None, variable='t', verbose=False, - dual=None, irrational_primal=None, irrational_all_primal=None, - maxdet=None, no_decomposition=None, compute_vertex_cones=None, - smith_form=None, dualization=None, triangulation=None, - triangulation_max_height=None, **kwds): + dual=None, irrational_primal=None, + irrational_all_primal=None, maxdet=None, + no_decomposition=None, compute_vertex_cones=None, + smith_form=None, dualization=None, + triangulation=None, + triangulation_max_height=None, **kwds): r""" Return the Ehrhart polynomial of this polyhedron. @@ -348,12 +350,17 @@ def ehrhart_polynomial(self, engine=None, variable='t', verbose=False, sage: Q = loads(dumps(P)) sage: Q.ehrhart_polynomial.is_in_cache() True + + sage: L = Polyhedron(vertices=[[QQ(0)]]) + sage: L.ehrhart_polynomial() + 1 """ + from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing + from sage.rings.rational_field import QQ + R = PolynomialRing(QQ, variable) + # check if ``self`` is compact and has vertices in ZZ if self.is_empty(): - from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing - from sage.rings.rational_field import QQ - R = PolynomialRing(QQ, variable) return R.zero() if not self.is_compact(): @@ -361,10 +368,15 @@ def ehrhart_polynomial(self, engine=None, variable='t', verbose=False, if any(not v.is_integral() for v in self.vertex_generator()): raise TypeError("the polytope has nonintegral vertices, use ehrhart_quasipolynomial with backend 'normaliz'") + + if self.dimension() == 0: + return R.one() + # Passes to specific latte or normaliz subfunction depending on engine if engine is None: # set default engine to latte engine = 'latte' + if engine == 'latte': poly = self._ehrhart_polynomial_latte(verbose, dual, irrational_primal, irrational_all_primal, maxdet, diff --git a/src/sage/geometry/polyhedron/base_ZZ.py b/src/sage/geometry/polyhedron/base_ZZ.py index d17b40a1b3d..130b04e8ba2 100644 --- a/src/sage/geometry/polyhedron/base_ZZ.py +++ b/src/sage/geometry/polyhedron/base_ZZ.py @@ -295,11 +295,13 @@ def _ehrhart_polynomial_normaliz(self, variable='t'): raise TypeError("The polyhedron's backend should be 'normaliz'") @cached_method(do_pickle=True) - def ehrhart_polynomial(self, engine=None, variable='t', verbose=False, dual=None, - irrational_primal=None, irrational_all_primal=None, maxdet=None, - no_decomposition=None, compute_vertex_cones=None, smith_form=None, - dualization=None, triangulation=None, triangulation_max_height=None, - **kwds): + def ehrhart_polynomial(self, engine=None, variable='t', verbose=False, + dual=None, irrational_primal=None, + irrational_all_primal=None, maxdet=None, + no_decomposition=None, compute_vertex_cones=None, + smith_form=None, dualization=None, + triangulation=None, triangulation_max_height=None, + **kwds): r""" Return the Ehrhart polynomial of this polyhedron. @@ -458,12 +460,16 @@ def ehrhart_polynomial(self, engine=None, variable='t', verbose=False, dual=None sage: Q.ehrhart_polynomial.is_in_cache() # optional - latte_int True """ + from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing + from sage.rings.rational_field import QQ + R = PolynomialRing(QQ, variable) + if self.is_empty(): - from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing - from sage.rings.rational_field import QQ - R = PolynomialRing(QQ, variable) return R.zero() + if self.dimension() == 0: + return R.one() + if not self.is_compact(): raise ValueError("Ehrhart polynomial only defined for compact polyhedra")