Skip to content
This repository was archived by the owner on Feb 1, 2023. It is now read-only.

Commit 28965d2

Browse files
author
Release Manager
committed
Trac #28571: pass 'macaulay2' as argument to '_macaulay2_init_()'
This gives access to the Macaulay2 interpreter in the `_macaulay2_init_()` function, so it can also return `Macaulay2Elements` rather than just strings. The `_macaulay2_init_()` function is used for initializing Macaulay2 elements and is usually called by `_macaulay2_()` which then takes care of caching. The magma interface also does this, but it had not been correctly set up until now. URL: https://trac.sagemath.org/28571 Reported by: gh-mwageringel Ticket author(s): Markus Wageringel Reviewer(s): Franco Saliola
2 parents 36c8eff + 2823dc0 commit 28965d2

File tree

8 files changed

+21
-13
lines changed

8 files changed

+21
-13
lines changed

src/sage/rings/finite_rings/finite_field_base.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ cdef class FiniteField(Field):
243243
s = "ext<%s|%s>"%(B._magma_init_(magma),p._magma_init_(magma))
244244
return magma._with_names(s, self.variable_names())
245245

246-
def _macaulay2_init_(self):
246+
def _macaulay2_init_(self, macaulay2=None):
247247
"""
248248
Returns the string representation of ``self`` that Macaulay2 can
249249
understand.

src/sage/rings/finite_rings/integer_mod_ring.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ def __init__(self, order, cache=None, category=None):
480480
self._zero_element = integer_mod.IntegerMod(self, 0)
481481
self._one_element = integer_mod.IntegerMod(self, 1)
482482

483-
def _macaulay2_init_(self):
483+
def _macaulay2_init_(self, macaulay2=None):
484484
"""
485485
EXAMPLES::
486486

src/sage/rings/integer_ring.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1452,7 +1452,7 @@ cdef class IntegerRing_class(PrincipalIdealDomain):
14521452
"""
14531453
return 'IntegerRing()'
14541454

1455-
def _macaulay2_init_(self):
1455+
def _macaulay2_init_(self, macaulay2=None):
14561456
"""
14571457
Return a macaulay2 representation of ``self``.
14581458

src/sage/rings/polynomial/multi_polynomial_libsingular.pyx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,10 +1189,10 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base):
11891189
R._check_valid()
11901190
return R
11911191
except (AttributeError, ValueError):
1192-
self.__macaulay2 = macaulay2(self._macaulay2_init_())
1192+
self.__macaulay2 = macaulay2(self._macaulay2_init_(macaulay2))
11931193
return self.__macaulay2
11941194

1195-
def _macaulay2_init_(self):
1195+
def _macaulay2_init_(self, macaulay2=None):
11961196
"""
11971197
EXAMPLES::
11981198

src/sage/rings/polynomial/multi_polynomial_ring.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class MPolynomialRing_macaulay2_repr:
8383
"""
8484
A mixin class for polynomial rings that support conversion to Macaulay2.
8585
"""
86-
def _macaulay2_init_(self):
86+
def _macaulay2_init_(self, macaulay2=None):
8787
"""
8888
EXAMPLES::
8989

src/sage/rings/polynomial/polynomial_ring.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -913,7 +913,7 @@ def _sage_input_(self, sib, coerced):
913913
return sib.parent_with_gens(self, sie, self.variable_names(), 'R',
914914
gens_syntax=gens_syntax)
915915

916-
def _macaulay2_init_(self):
916+
def _macaulay2_init_(self, macaulay2=None):
917917
"""
918918
EXAMPLES::
919919

src/sage/rings/rational_field.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1427,7 +1427,7 @@ def _magma_init_(self, magma):
14271427
"""
14281428
return 'RationalField()'
14291429

1430-
def _macaulay2_init_(self):
1430+
def _macaulay2_init_(self, macaulay2=None):
14311431
r"""
14321432
Return the macaulay2 representation of `\QQ`.
14331433

src/sage/structure/sage_object.pyx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ register_unpickle_override('sage.structure.generators', 'make_list_gens',
3030
__all__ = ['SageObject']
3131

3232

33+
# The _interface_init_ for these interfaces takes the interface as argument
34+
_interface_init_with_interface = set(['magma', 'macaulay2'])
35+
36+
3337
cdef class SageObject:
3438
"""
3539
Base class for all (user-visible) objects in Sage
@@ -660,7 +664,10 @@ cdef class SageObject:
660664
nm = I.name()
661665
init_func = getattr(self, '_%s_init_' % nm, None)
662666
if init_func is not None:
663-
s = init_func()
667+
if nm in _interface_init_with_interface:
668+
s = init_func(I)
669+
else:
670+
s = init_func()
664671
else:
665672
try:
666673
s = self._interface_init_(I)
@@ -831,10 +838,11 @@ cdef class SageObject:
831838
G = sage.interfaces.macaulay2.macaulay2
832839
return self._interface_(G)
833840

834-
def _macaulay2_init_(self):
835-
import sage.interfaces.macaulay2
836-
I = sage.interfaces.macaulay2.macaulay2
837-
return self._interface_init_(I)
841+
def _macaulay2_init_(self, macaulay2=None):
842+
if macaulay2 is None:
843+
import sage.interfaces.macaulay2
844+
macaulay2 = sage.interfaces.macaulay2.macaulay2
845+
return self._interface_init_(macaulay2)
838846

839847
def _maple_(self, G=None):
840848
if G is None:

0 commit comments

Comments
 (0)