Ticket #8734: trac-8734-maxima-vars.patch

File trac-8734-maxima-vars.patch, 4.7 KB (added by jason, 11 years ago)
  • sage/calculus/calculus.py

    # HG changeset patch
    # User Jason Grout <jason-sage@creativetrax.com>
    # Date 1271828791 18000
    # Node ID 4c89b3c3085a84eed61aba850e7043e2c0460b92
    # Parent  ef74a6ed21179df343f658c015d7b068bb28c0f3
    #8734: Make sage variables unique in maxima.
    
    diff -r ef74a6ed2117 -r 4c89b3c3085a sage/calculus/calculus.py
    a b  
    14511451        x#0
    14521452        sage: a.sage()
    14531453        x != 0
     1454
     1455    TESTS:
     1456   
     1457    Make sure that we don't accidentally pick up variables in the maxima namespace (trac #8734)::
     1458
     1459        sage: sage.calculus.calculus.maxima('my_new_var : 2')
     1460        2
     1461        sage: var('my_new_var').full_simplify()
     1462        my_new_var
    14541463    """
    14551464    syms = sage.symbolic.pynac.symbol_table.get('maxima', {}).copy()
    14561465
     
    14621471    #r = maxima._eval_line('listofvars(_tmp_);')[1:-1]
    14631472   
    14641473    s = maxima._eval_line('_tmp_;')
     1474    s = s.replace("_SAGE_VAR_","")
    14651475   
    14661476    formal_functions = maxima_tick.findall(s)
    14671477    if len(formal_functions) > 0:
  • sage/symbolic/assumptions.py

    diff -r ef74a6ed2117 -r 4c89b3c3085a sage/symbolic/assumptions.py
    a b  
    101101            cur = maxima.get("context")
    102102            self._context = maxima.newcontext('context' + maxima._next_var_name())
    103103            try:
    104                 maxima.eval("declare(%s, %s)" % (repr(self._var), self._assumption))
     104                maxima.eval("declare(%s, %s)" % (self._var._maxima_init_(), self._assumption))
    105105            except TypeError, mess:
    106106                if 'inconsistent' in str(mess): # note Maxima doesn't tell you if declarations are redundant
    107107                    raise ValueError, "Assumption is inconsistent"
  • sage/symbolic/expression_conversions.py

    diff -r ef74a6ed2117 -r 4c89b3c3085a sage/symbolic/expression_conversions.py
    a b  
    398398            sage: m(sin(a))
    399399            'sin((%pi)+(2))'
    400400            sage: m(exp(x^2) + pi + 2)
    401             '(%pi)+(exp((x)^(2)))+(2)'
     401            '(%pi)+(exp((_SAGE_VAR_x)^(2)))+(2)'
    402402
    403403        """
    404404        self.name_init = "_%s_init_"%interface.name()
     
    412412            sage: from sage.symbolic.expression_conversions import InterfaceInit
    413413            sage: m = InterfaceInit(maxima)
    414414            sage: m.symbol(x)
    415             'x'
     415            '_SAGE_VAR_x'
    416416            sage: f(x) = x
    417417            sage: m.symbol(f)
     418            '_SAGE_VAR_x'
     419            sage: ii = InterfaceInit(gp)
     420            sage: ii.symbol(x)
    418421            'x'
    419422        """
    420         return repr(SR(ex))
     423        if self.interface.name()=='maxima':
     424            return '_SAGE_VAR_'+repr(SR(ex))
     425        else:
     426            return repr(SR(ex))
    421427
    422428    def pyobject(self, ex, obj):
    423429        """
     
    452458            sage: from sage.symbolic.expression_conversions import InterfaceInit
    453459            sage: m = InterfaceInit(maxima)
    454460            sage: m.relation(x==3, operator.eq)
    455             'x = 3'
     461            '_SAGE_VAR_x = 3'
    456462            sage: m.relation(x==3, operator.lt)
    457             'x < 3'
     463            '_SAGE_VAR_x < 3'
    458464        """
    459465        return "%s %s %s"%(self(ex.lhs()), self.relation_symbols[operator],
    460466                           self(ex.rhs()))
     
    500506            sage: from sage.symbolic.expression_conversions import InterfaceInit
    501507            sage: m = InterfaceInit(maxima)
    502508            sage: m.arithmetic(x+2, operator.add)
    503             '(x)+(2)'
     509            '(_SAGE_VAR_x)+(2)'
    504510        """
    505511        args = ["(%s)"%self(op) for op in ex.operands()]
    506512        return arithmetic_operators[operator].join(args)
     
    512518            sage: from sage.symbolic.expression_conversions import InterfaceInit
    513519            sage: m = InterfaceInit(maxima)
    514520            sage: m.composition(sin(x), sin)
    515             'sin(x)'
     521            'sin(_SAGE_VAR_x)'
    516522            sage: m.composition(ceil(x), ceil)
    517             'ceiling(x)'
     523            'ceiling(_SAGE_VAR_x)'
    518524           
    519525            sage: m = InterfaceInit(mathematica)
    520526            sage: m.composition(sin(x), sin)
  • sage/symbolic/relation.py

    diff -r ef74a6ed2117 -r 4c89b3c3085a sage/symbolic/relation.py
    a b  
    204204    sage: x = var('x')
    205205    sage: eq = (x^(3/5) >= pi^2 + e^i)
    206206    sage: eq._maxima_init_()
    207     '(x)^(3/5) >= ((%pi)^(2))+(exp(0+%i*1))'
     207    '(_SAGE_VAR_x)^(3/5) >= ((%pi)^(2))+(exp(0+%i*1))'
    208208    sage: e1 = x^3 + x == sin(2*x)
    209209    sage: z = e1._maxima_()
    210210    sage: z.parent() is sage.calculus.calculus.maxima