#13926: Undo #13014
----------------------------------+-----------------------------------------
       Reporter:  jdemeyer        |         Owner:  burcin      
           Type:  enhancement     |        Status:  needs_review
       Priority:  blocker         |     Milestone:  sage-5.6    
      Component:  symbolics       |    Resolution:              
       Keywords:                  |   Work issues:              
Report Upstream:  N/A             |     Reviewers:              
        Authors:  Jeroen Demeyer  |     Merged in:              
   Dependencies:                  |      Stopgaps:              
----------------------------------+-----------------------------------------

Comment (by burcin):

 Replying to [comment:2 ppurka]:
 > Do you have any idea why gcd is even called in this case? There is no
 instance of this function in the plot commands

 The expression is instantiated for each value of t, thanks to the lambda
 function. For each of these instantiations, Pynac tries to normalize the
 expression, in the process calculating many gcd's and lcm's of
 coefficients. Adding a print statement in `py_{gcd,lcm}()` in
 `sage/symbolic/pynac.pyx`, I get

 {{{
 sage: var('t')
 t
 sage: ex = (100/(100+(t-pi/2)^8))*(2-sin(7*t)-cos(30*t)/2)
 in py_gcd, n: -1, k: 0
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_lcm, n: 2, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_gcd, n: 1, k: 1
 type(n): <type 'int'>, type(k): <type 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 2
 type(n): <type 'int'>, type(k): <type 'sage.rings.integer.Integer'>
 in py_gcd, n: 0, k: 1
 type(n): <type 'int'>, type(k): <type 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 2
 type(n): <type 'int'>, type(k): <type 'sage.rings.integer.Integer'>
 in py_gcd, n: 1, k: 0
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_gcd, n: -2, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_gcd, n: 0, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_gcd, n: 1, k: 0
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_gcd, n: -2, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_gcd, n: 0, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_gcd, n: 1, k: 0
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_lcm, n: 256, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_gcd, n: 100, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 256
 type(n): <type 'int'>, type(k): <type 'sage.rings.integer.Integer'>
 in py_gcd, n: 1, k: 0
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_gcd, n: 25600, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_gcd, n: -1, k: 0
 type(n): <type 'int'>, type(k): <type 'int'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'int'>, type(k): <type 'int'>
 in py_gcd, n: -1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 2, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_gcd, n: 2, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 2
 type(n): <type 'int'>, type(k): <type 'sage.rings.integer.Integer'>
 in py_gcd, n: 2, k: 0
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type 'int'>
 in py_gcd, n: 1, k: 2
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_gcd, n: -4, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 in py_lcm, n: 1, k: 1
 type(n): <type 'sage.rings.integer.Integer'>, type(k): <type
 'sage.rings.integer.Integer'>
 }}}

 Not all of these are passed on to `sage.rings.arith.{gcd,lcm}`, `py_gcd()`
 contains a couple of special cases before calling those. This function is
 very speed critical indeed.

 I am tempted to switch to a positive review especially since no doctests
 need to be changed. Any objections?

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/13926#comment:3>
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