@@ -65,7 +65,7 @@ def Polyhedra(ambient_space_or_base_ring=None, ambient_dim=None, backend=None, *
65
65
EXAMPLES::
66
66
67
67
sage: from sage.geometry.polyhedron.parent import Polyhedra
68
- sage: Polyhedra(AA, 3)
68
+ sage: Polyhedra(AA, 3) # optional - sage.rings.number_field
69
69
Polyhedra in AA^3
70
70
sage: Polyhedra(ZZ, 3)
71
71
Polyhedra in ZZ^3
@@ -105,11 +105,11 @@ def Polyhedra(ambient_space_or_base_ring=None, ambient_dim=None, backend=None, *
105
105
Traceback (most recent call last):
106
106
...
107
107
ValueError: no default backend for computations with Real Field with 53 bits of precision
108
- sage: Polyhedra(QQ[I], 2)
108
+ sage: Polyhedra(QQ[I], 2) # optional - sage.rings.number_field
109
109
Traceback (most recent call last):
110
110
...
111
111
ValueError: invalid base ring: Number Field in I with defining polynomial x^2 + 1 with I = 1*I cannot be coerced to a real field
112
- sage: Polyhedra(AA, 3, backend='polymake') # optional - jupymake
112
+ sage: Polyhedra(AA, 3, backend='polymake') # optional - jupymake # optional - sage.rings.number_field
113
113
Traceback (most recent call last):
114
114
...
115
115
ValueError: the 'polymake' backend for polyhedron cannot be used with Algebraic Real Field
@@ -174,8 +174,9 @@ def Polyhedra(ambient_space_or_base_ring=None, ambient_dim=None, backend=None, *
174
174
elif backend == 'polymake' :
175
175
base_field = base_ring .fraction_field ()
176
176
try :
177
- from sage .interfaces .polymake import polymake
177
+ from sage .interfaces .polymake import polymake , PolymakeElement
178
178
polymake_base_field = polymake (base_field )
179
+ assert isinstance (polymake_base_field , PolymakeElement ) # to muffle pyflakes
179
180
except TypeError :
180
181
raise ValueError (f"the 'polymake' backend for polyhedron cannot be used with { base_field } " )
181
182
return Polyhedra_polymake (base_field , ambient_dim , backend )
@@ -264,13 +265,13 @@ def list(self):
264
265
sage: P.cardinality()
265
266
+Infinity
266
267
267
- sage: P = Polyhedra(AA, 0)
268
- sage: P.category()
268
+ sage: P = Polyhedra(AA, 0) # optional - sage.rings.number_field
269
+ sage: P.category() # optional - sage.rings.number_field
269
270
Category of finite enumerated polyhedral sets over Algebraic Real Field
270
- sage: P.list()
271
+ sage: P.list() # optional - sage.rings.number_field
271
272
[The empty polyhedron in AA^0,
272
273
A 0-dimensional polyhedron in AA^0 defined as the convex hull of 1 vertex]
273
- sage: P.cardinality()
274
+ sage: P.cardinality() # optional - sage.rings.number_field
274
275
2
275
276
"""
276
277
if self .ambient_dim ():
@@ -495,6 +496,35 @@ def Hrepresentation_space(self):
495
496
from sage .modules .free_module import FreeModule
496
497
return FreeModule (self .base_ring (), self .ambient_dim ()+ 1 )
497
498
499
+ def _repr_base_ring (self ):
500
+ """
501
+ Return an abbreviated string representation of the base ring.
502
+
503
+ EXAMPLES::
504
+
505
+ sage: from sage.geometry.polyhedron.parent import Polyhedra
506
+ sage: Polyhedra(QQ, 3)._repr_base_ring()
507
+ 'QQ'
508
+ sage: K.<sqrt3> = NumberField(x^2 - 3, embedding=AA(3).sqrt()) # optional - sage.rings.number_field
509
+ sage: Polyhedra(K, 4)._repr_base_ring() # optional - sage.rings.number_field
510
+ '(Number Field in sqrt3 with defining polynomial x^2 - 3 with sqrt3 = 1.732050807568878?)'
511
+ """
512
+
513
+ if self .base_ring () is ZZ :
514
+ return 'ZZ'
515
+ if self .base_ring () is QQ :
516
+ return 'QQ'
517
+ if self .base_ring () is RDF :
518
+ return 'RDF'
519
+ try :
520
+ from sage .rings .qqbar import AA
521
+ except ImportError :
522
+ pass
523
+ else :
524
+ if self .base_ring () is AA :
525
+ return 'AA'
526
+ return '({0})' .format (self .base_ring ())
527
+
498
528
def _repr_ambient_module (self ):
499
529
"""
500
530
Return an abbreviated string representation of the ambient
@@ -509,21 +539,11 @@ def _repr_ambient_module(self):
509
539
sage: from sage.geometry.polyhedron.parent import Polyhedra
510
540
sage: Polyhedra(QQ, 3)._repr_ambient_module()
511
541
'QQ^3'
512
- sage: K.<sqrt3> = NumberField(x^2 - 3, embedding=AA(3).sqrt())
513
- sage: Polyhedra(K, 4)._repr_ambient_module()
542
+ sage: K.<sqrt3> = NumberField(x^2 - 3, embedding=AA(3).sqrt()) # optional - sage.rings.number_field
543
+ sage: Polyhedra(K, 4)._repr_ambient_module() # optional - sage.rings.number_field
514
544
'(Number Field in sqrt3 with defining polynomial x^2 - 3 with sqrt3 = 1.732050807568878?)^4'
515
545
"""
516
- from sage .rings .qqbar import AA
517
- if self .base_ring () is ZZ :
518
- s = 'ZZ'
519
- elif self .base_ring () is QQ :
520
- s = 'QQ'
521
- elif self .base_ring () is RDF :
522
- s = 'RDF'
523
- elif self .base_ring () is AA :
524
- s = 'AA'
525
- else :
526
- s = '({0})' .format (self .base_ring ())
546
+ s = self ._repr_base_ring ()
527
547
s += '^' + repr (self .ambient_dim ())
528
548
return s
529
549
@@ -602,11 +622,11 @@ def _element_constructor_(self, *args, **kwds):
602
622
603
623
When the parent of the object is not ``self``, the default is not to copy::
604
624
605
- sage: Q = P.base_extend(AA)
606
- sage: q = Q._element_constructor_(p)
607
- sage: q is p
625
+ sage: Q = P.base_extend(AA) # optional - sage.rings.number_field
626
+ sage: q = Q._element_constructor_(p) # optional - sage.rings.number_field
627
+ sage: q is p # optional - sage.rings.number_field
608
628
False
609
- sage: q = Q._element_constructor_(p, copy=False)
629
+ sage: q = Q._element_constructor_(p, copy=False) # optional - sage.rings.number_field
610
630
Traceback (most recent call last):
611
631
...
612
632
ValueError: you need to make a copy when changing the parent
@@ -693,9 +713,10 @@ def _element_constructor_polyhedron(self, polyhedron, **kwds):
693
713
sage: P(p)
694
714
A 3-dimensional polyhedron in QQ^3 defined as the convex hull of 4 vertices
695
715
696
- sage: P = Polyhedra(AA, 3, backend='field')
697
- sage: p = Polyhedron(vertices=[(0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)])
698
- sage: P(p)
716
+ sage: P = Polyhedra(AA, 3, backend='field') # optional - sage.rings.number_field
717
+ sage: vertices = [(0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)]
718
+ sage: p = Polyhedron(vertices=vertices) # optional - sage.rings.number_field
719
+ sage: P(p) # optional - sage.rings.number_field
699
720
A 3-dimensional polyhedron in AA^3 defined as the convex hull of 4 vertices
700
721
"""
701
722
Vrep = None
@@ -1234,9 +1255,9 @@ def does_backend_handle_base_ring(base_ring, backend):
1234
1255
sage: from sage.geometry.polyhedron.parent import does_backend_handle_base_ring
1235
1256
sage: does_backend_handle_base_ring(QQ, 'ppl')
1236
1257
True
1237
- sage: does_backend_handle_base_ring(QQ[sqrt(5)], 'ppl')
1258
+ sage: does_backend_handle_base_ring(QQ[sqrt(5)], 'ppl') # optional - sage.rings.number_field
1238
1259
False
1239
- sage: does_backend_handle_base_ring(QQ[sqrt(5)], 'field')
1260
+ sage: does_backend_handle_base_ring(QQ[sqrt(5)], 'field') # optional - sage.rings.number_field
1240
1261
True
1241
1262
"""
1242
1263
try :
0 commit comments