I have started #27926. I think I leave the base ring business as it is for now. I belive it is taken care of in many (if not all) places, where the base ring of the vertices might differ.
Am Dienstag, 4. Juni 2019 11:20:07 UTC+2 schrieb jplab: > > Hi Jonathan, > > Le lundi 3 juin 2019 23:31:29 UTC+2, vdelecroix a écrit : >> >> To my mind: >> >> * backend and base ring should be preserved by default. Of course >> it should make sense: a translation by sqrt(2) would break the >> base ring QQ. >> > > +1 > > >> * no need to create one ticket for each method if this is mostly >> the same action to be done for each of them. If some method needs >> special care or give rise to discussions, a specific ticket could >> be open. >> > > +1 > > > Le 03/06/2019 à 23:25, 'Jonathan Kliem' via sage-devel a écrit : >> > At the moment the backend setting is lost, when constructing a pyramid >> of a >> > Polyhedron. >> > >> > Same holds for all other constructions. >> > > If you are ready to go through the construction to make them consistent > with the above convention: great! > > > Any thoughts on this? >> > >> > Also I think the base ring should be respected as well (as is done in >> > Polyhedron.translation). >> > At the moment it can happen, that the base ring shrinks, when >> constructing >> > a pyramid for example >> > (if the user forced base ring QQ, there might have been good reason for >> > doing so, and I would say it is not nice, if one has to change base >> ring >> > again along the way). >> > > It is hard to make sense of "If the user forced base ring QQ" after the > object got created. > How should we know if that keyword was given when looking at the object? > > The reason I ask this question is because I do not believe that the usage > of the keyword > "base_ring" is "to force the base ring used", but rather to help the > constructor to build the > desired object in a specific base ring: the input is converted in that > base ring (if possible) > once things are constructed. Then, as Vincent mentioned, and I agree, the > base ring > should be kept as long as it is possible. > good > On the other hand, a user "forcing QQ" can be thought as a peculiar thing > to do. Every > rational polyhedron has an integer H-representation, so if one looks at > the H-representation, > QQ is not necessary to write the H-representation. The distinction comes > from the > V-representation and has consequences on the related objects (Ehrhart > quasi-polynomial > vs Ehrhart polynomial and any method that makes use of integer > arithmetic...). So, yes > there should be a distinction between the two base rings ZZ and QQ. That > said, I believe that internally, > it should always try to take the "simplest" base ring possible. If the > user then wants a > different ring, then Sage will give the object back in that one, but may > do computations with a > different ring. So now again, does "forcing a base ring" makes sense? > > That said, as explained in the tutorial > > > http://doc.sagemath.org/html/en/thematic_tutorials/geometry/polyhedra_tutorial.html > > A clean way to work with polyhedron is to have the objects already be in a > common base ring already. > If this is not possible and one gives different types in the input, then > it will go on and figure out a > proper base ring. But, since this might take a while, the keyword "base > ring" helps in this regards. > > So, one should be careful in using this keyword... For example, after > #25097 is merged, this will become possible: > > sage: sqrt_2s = sqrt(2) > sage: cbrt_2s = 2^(1/3) > sage: P1 = Polyhedron(vertices = [[sqrt_2s, 0], [0, cbrt_2s]]);P1 > Traceback (most recent call last): > ... > ValueError: no appropriate backend for computations with Symbolic Ring > > sage: P2 = Polyhedron(vertices = [[sqrt_2s, 0], [0, cbrt_2s]],backend= > 'normaliz');P2 > A 1-dimensional polyhedron in (Symbolic Ring)^2 defined as the convex > hull of 2 vertices > > sage: Polyhedron(vertices = [[sqrt_2s, 0], [0, cbrt_2s]],backend='field') > Traceback (most recent call last): > ... > ValueError: the 'field' backend for polyhedron can not be used with non-exact > fields > > The object P2's base ring is the Symbolic Ring, but the computations are > done in the normaliz field accessible with the method `_normaliz_field`. > > J-P > -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at https://groups.google.com/group/sage-devel. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/621e22a5-2ed3-4e40-8b28-4575700b516a%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.