def pyobject(self, ex, obj): from mathics.core import expression from mathics.core.expression import Number if obj is None: return expression.Symbol('Null') elif isinstance(obj, (list, tuple)) or is_Vector(obj): return expression.Expression('List', *(from_sage(item, self.subs) for item in obj)) elif isinstance(obj, Constant): return expression.Symbol(obj._conversions.get('mathematica', obj._name)) elif is_Integer(obj): return expression.Integer(str(obj)) elif isinstance(obj, sage.Rational): rational = expression.Rational(str(obj)) if rational.value.denom() == 1: return expression.Integer(rational.value.numer()) else: return rational elif isinstance(obj, sage.RealDoubleElement) or is_RealNumber(obj): return expression.Real(str(obj)) elif is_ComplexNumber(obj): real = Number.from_string(str(obj.real())).value imag = Number.from_string(str(obj.imag())).value return expression.Complex(real, imag) elif isinstance(obj, NumberFieldElement_quadratic): # TODO: this need not be a complex number, but we assume so! real = Number.from_string(str(obj.real())).value imag = Number.from_string(str(obj.imag())).value return expression.Complex(real, imag) else: return expression.from_python(obj)
def composition(self, ex, operator): from mathics.core import expression from mathics.builtin import sage_to_mathics func_name = repr(operator) builtin = sage_to_mathics.get(func_name) leaves = map(self, ex.operands()) if builtin is not None: head = expression.Symbol(builtin.get_name()) leaves = builtin.from_sage(leaves) else: head = self.create_symbol(func_name) result = expression.Expression(head, *leaves) if self.subs is not None and result.has_form(ConvertSubstitutions.head_name, 1, None): index = result.leaves[0] return self.subs.subs[index.value] else: return result
def _make_Lookup(self, s): value = self.definitions.lookup_name(s) return ma.Symbol(value)
def _make_Symbol(self, s): return ma.Symbol(s)
def create_symbol(self, name): from mathics.core import expression if name.startswith(sage_symbol_prefix): name = name[len(sage_symbol_prefix):] return expression.Symbol(name)
def convert_Symbol(self, node): if node.context is not None: return ma.Symbol(node.context + '`' + node.value) value = self.definitions.lookup_name(node.value) return ma.Symbol(value)
def create_symbol(self, name): from mathics.core import expression return expression.Symbol(name)