#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.