Skip to content

Commit ebc4a02

Browse files
committed
fix bug for zero-dimension Ehrhart polynomial
1 parent 5188024 commit ebc4a02

File tree

2 files changed

+33
-15
lines changed

2 files changed

+33
-15
lines changed

src/sage/geometry/polyhedron/base_QQ.py

+19-7
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,12 @@ def integral_points_count(self, verbose=False, use_Hrepresentation=False,
213213

214214
@cached_method(do_pickle=True)
215215
def ehrhart_polynomial(self, engine=None, variable='t', verbose=False,
216-
dual=None, irrational_primal=None, irrational_all_primal=None,
217-
maxdet=None, no_decomposition=None, compute_vertex_cones=None,
218-
smith_form=None, dualization=None, triangulation=None,
219-
triangulation_max_height=None, **kwds):
216+
dual=None, irrational_primal=None,
217+
irrational_all_primal=None, maxdet=None,
218+
no_decomposition=None, compute_vertex_cones=None,
219+
smith_form=None, dualization=None,
220+
triangulation=None,
221+
triangulation_max_height=None, **kwds):
220222
r"""
221223
Return the Ehrhart polynomial of this polyhedron.
222224
@@ -348,23 +350,33 @@ def ehrhart_polynomial(self, engine=None, variable='t', verbose=False,
348350
sage: Q = loads(dumps(P))
349351
sage: Q.ehrhart_polynomial.is_in_cache()
350352
True
353+
354+
sage: L = Polyhedron(vertices=[[QQ(0)]])
355+
sage: L.ehrhart_polynomial()
356+
1
351357
"""
358+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
359+
from sage.rings.rational_field import QQ
360+
R = PolynomialRing(QQ, variable)
361+
352362
# check if ``self`` is compact and has vertices in ZZ
353363
if self.is_empty():
354-
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
355-
from sage.rings.rational_field import QQ
356-
R = PolynomialRing(QQ, variable)
357364
return R.zero()
358365

359366
if not self.is_compact():
360367
raise ValueError("Ehrhart polynomial only defined for compact polyhedra")
361368

362369
if any(not v.is_integral() for v in self.vertex_generator()):
363370
raise TypeError("the polytope has nonintegral vertices, use ehrhart_quasipolynomial with backend 'normaliz'")
371+
372+
if self.dimension() == 0:
373+
return R.one()
374+
364375
# Passes to specific latte or normaliz subfunction depending on engine
365376
if engine is None:
366377
# set default engine to latte
367378
engine = 'latte'
379+
368380
if engine == 'latte':
369381
poly = self._ehrhart_polynomial_latte(verbose, dual,
370382
irrational_primal, irrational_all_primal, maxdet,

src/sage/geometry/polyhedron/base_ZZ.py

+14-8
Original file line numberDiff line numberDiff line change
@@ -295,11 +295,13 @@ def _ehrhart_polynomial_normaliz(self, variable='t'):
295295
raise TypeError("The polyhedron's backend should be 'normaliz'")
296296

297297
@cached_method(do_pickle=True)
298-
def ehrhart_polynomial(self, engine=None, variable='t', verbose=False, dual=None,
299-
irrational_primal=None, irrational_all_primal=None, maxdet=None,
300-
no_decomposition=None, compute_vertex_cones=None, smith_form=None,
301-
dualization=None, triangulation=None, triangulation_max_height=None,
302-
**kwds):
298+
def ehrhart_polynomial(self, engine=None, variable='t', verbose=False,
299+
dual=None, irrational_primal=None,
300+
irrational_all_primal=None, maxdet=None,
301+
no_decomposition=None, compute_vertex_cones=None,
302+
smith_form=None, dualization=None,
303+
triangulation=None, triangulation_max_height=None,
304+
**kwds):
303305
r"""
304306
Return the Ehrhart polynomial of this polyhedron.
305307
@@ -458,12 +460,16 @@ def ehrhart_polynomial(self, engine=None, variable='t', verbose=False, dual=None
458460
sage: Q.ehrhart_polynomial.is_in_cache() # optional - latte_int
459461
True
460462
"""
463+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
464+
from sage.rings.rational_field import QQ
465+
R = PolynomialRing(QQ, variable)
466+
461467
if self.is_empty():
462-
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
463-
from sage.rings.rational_field import QQ
464-
R = PolynomialRing(QQ, variable)
465468
return R.zero()
466469

470+
if self.dimension() == 0:
471+
return R.one()
472+
467473
if not self.is_compact():
468474
raise ValueError("Ehrhart polynomial only defined for compact polyhedra")
469475

0 commit comments

Comments
 (0)