IMHO this is borderline between devel and support - it is about extending Sage interface to Macaulay2 with a new type.
On Monday, July 4, 2016 at 6:08:48 PM UTC+1, vdelecroix wrote: > > Could this kind of discussion can be done on sage-support? As it name > suggests sage-devel is dedicated to development discussions. If we want > to keep developers reading it, it is better to not flood it with users > usage questions. > > On 02/07/16 14:13, saad khalid wrote: > > Hey everyone: > > > > I was hoping some of you could provide some insight where my knowledge > is > > lacking. I'm trying to add to the M2/Sage interface by adding a > conversion > > for the M2 Divide class. Sage can already convert polynomials, so my > hope > > was to just have it treat the Divide class as two polynomials, one in > the > > numerator and the other in the denominator. Here is an example of an > object > > in the divide class: > > macaulay2.eval(""" > > K = toField(QQ[zet]/(zet^8 - zet^7 +zet^5 - zet^4 +zet^3 -zet + 1)) > > A=matrix{{zet^1,0},{0,zet^13}} > > needsPackage "InvariantRing" > > G=generateGroup({A},K) > > P = molienSeries G > > """) > > > > P is a "Divide" object. Here is an example of Sage converting a > polynomial > > from M2 to Sage: > > macaulay2.eval(""" > > needsPackage "Points"; > > M = matrix{{1,2,3},{4,5,6}} > > R = QQ[x,y,MonomialOrder=>Lex]; > > (Q,inG,G) = points(M,R) > > G#0 > > ring G#0 > > """) > > G0 = macaulay2('G#0').to_sage(); G0 > > > > G in M2 is a list of polynomials, and G#0 is the first one. Here's what > it > > looks like: > > > > 3 2 > > y - 15y + 74y - 120 > > > > I convert this to a sage object, G0, and it appears as: > > > > y^3 - 15*y^2 + 74*y - 120 > > > > The part that I really need is where Sage changes M2's two-line display > for exponents on variables to just the standard Sage notation. I'm looking > at the to_sage() > > method in the source code but I can't seem to figure out how it's doing > it. Am I missing something obvious? G#0 is a polynomial ring I believe, and > here > > is the code in the to_sage function for PolynomialRings: > > elif cls_str == "PolynomialRing": > > from sage.rings.all import PolynomialRing > > from sage.rings.polynomial.term_order import > inv_macaulay2_name_mapping > > > > #Get the base ring > > base_ring = self.coefficientRing().to_sage() > > > > #Get a string list of generators > > gens = str(self.gens())[1:-1] > > > > # Check that we are dealing with default degrees, i.e. > 1's. > > if self.degrees().any("x -> x != {1}").to_sage(): > > raise ValueError("cannot convert Macaulay2 > polynomial ring with non-default degrees to Sage") > > #Handle the term order > > external_string = self.external_string() > > order = None > > if "MonomialOrder" not in external_string: > > order = "degrevlex" > > else: > > for order_name in inv_macaulay2_name_mapping: > > if order_name in external_string: > > order = > inv_macaulay2_name_mapping[order_name] > > if len(gens) > 1 and order is None: > > raise ValueError("cannot convert Macaulay2's term > order to a Sage term order") > > > > return PolynomialRing(base_ring, order=order, > names=gens) > > > > > > Where in this code does that conversion happen? It's like parsing ascii > > art... > > > > Thanks! > > > -- 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. For more options, visit https://groups.google.com/d/optout.