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.