#9935: Make a symbolic mod function
-------------------------+--------------------------------------------------
   Reporter:  jason      |       Owner:  burcin  
       Type:  defect     |      Status:  new     
   Priority:  major      |   Milestone:  sage-4.6
  Component:  symbolics  |    Keywords:          
     Author:             |    Upstream:  N/A     
   Reviewer:             |      Merged:          
Work_issues:             |  
-------------------------+--------------------------------------------------
 A participant in the PREP program noticed that mod is not a symbolic
 function:

 {{{
 sage: mod(x,4)
 ERROR: An unexpected error occurred while tokenizing input
 The following traceback may be corrupted or invalid
 The error message is: ('EOF in multi-line statement', (4562, 0))

 ERROR: An unexpected error occurred while tokenizing input
 The following traceback may be corrupted or invalid
 The error message is: ('EOF in multi-line statement', (4530, 0))

 ERROR: An unexpected error occurred while tokenizing input
 The following traceback may be corrupted or invalid
 The error message is: ('EOF in multi-line statement', (842, 0))

 ---------------------------------------------------------------------------
 TypeError                                 Traceback (most recent call
 last)

 /home/grout/sage-4.5.2/devel/sage-main/sage/functions/<ipython console> in
 <module>()

 /home/grout/sage/local/lib/python2.6/site-
 packages/sage/rings/finite_rings/integer_mod.so in
 sage.rings.finite_rings.integer_mod.Mod
 (sage/rings/finite_rings/integer_mod.c:2633)()

 /home/grout/sage/local/lib/python2.6/site-
 packages/sage/rings/finite_rings/integer_mod.so in
 sage.rings.finite_rings.integer_mod.IntegerMod
 (sage/rings/finite_rings/integer_mod.c:2952)()

 /home/grout/sage/local/lib/python2.6/site-
 packages/sage/rings/finite_rings/integer_mod.so in
 sage.rings.finite_rings.integer_mod.IntegerMod_int.__init__
 (sage/rings/finite_rings/integer_mod.c:14249)()

 /home/grout/sage/local/lib/python2.6/site-
 packages/sage/structure/parent.so in sage.structure.parent.Parent.__call__
 (sage/structure/parent.c:6407)()

 /home/grout/sage/local/lib/python2.6/site-
 packages/sage/structure/coerce_maps.so in
 sage.structure.coerce_maps.NamedConvertMap._call_
 (sage/structure/coerce_maps.c:4053)()

 /home/grout/sage/local/lib/python2.6/site-
 packages/sage/symbolic/expression.so in
 sage.symbolic.expression.Expression._integer_
 (sage/symbolic/expression.cpp:4026)()

 TypeError: unable to convert x (=x) to an integer
 }}}

 Hopefully it should be easy to wrap mod in a symbolic function, something
 like:

 {{{
 sage: def eval_mod(self, x):
 ....:     if isinstance(x, (int, Integer)):
 ....:         return mod(x,5)
 ....:     return None
 ....:
 sage: f=function('f', eval_func=eval_mod)
 sage: f(x)
 f(x)
 sage: f(13)
 3
 sage: f(x^2+x+1)
 f(x^2 + x + 1)
 sage: f(x^2+x+1).subs(x=2)
 2
 sage: f(x^2+x+1).subs(x=3)
 3
 sage: f(x^2+x^3).subs(x=1)
 2
 sage: f(x^2+x^3).subs(x=2)
 2
 sage: f(x^2+x^3).subs(x=3)
 1
 }}}

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/9935>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to