On Tue, Aug 18, 2009 at 9:13 AM, Ondrej Certik<ond...@certik.cz> wrote:
> On Mon, Aug 17, 2009 at 9:41 PM, Ondrej Certik<ond...@certik.cz> wrote:
>> On Mon, Aug 17, 2009 at 5:31 AM, William Stein<wst...@gmail.com> wrote:
>>>
>>> On Mon, Aug 17, 2009 at 3:20 AM, Ondrej Certik<ond...@certik.cz> wrote:
>>>>
>>>> On Mon, Aug 17, 2009 at 4:09 AM, Ondrej Certik<ond...@certik.cz> wrote:
>>>>> On Mon, Aug 17, 2009 at 3:51 AM, William Stein<wst...@gmail.com> wrote:
>>>>>>
>>>>>> On Mon, Aug 17, 2009 at 2:40 AM, Ondrej Certik<ond...@certik.cz> wrote:
>>>>>>>
>>>>>>> On Mon, Aug 17, 2009 at 2:26 AM, William Stein<wst...@gmail.com> wrote:
>>>>>>>>
>>>>>>>> On Mon, Aug 17, 2009 at 1:14 AM, Ondrej Certik<ond...@certik.cz> wrote:
>>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> at the scipy 09 conference I am going to compare Sage and sympy
>>>>>>>>> approaches to factoring (and timings) and longer term approaches, so I
>>>>>>>>> have a few questions about it, so that I understand things correctly.
>>>>>>>>> If I do:
>>>>>>>>>
>>>>>>>>> sage: var("x y z")
>>>>>>>>> (x, y, z)
>>>>>>>>> sage: a = (x+y+z)**20
>>>>>>>>> sage: b = a.expand()
>>>>>>>>> sage: %time c = factor(b)
>>>>>>>>> CPU times: user 0.14 s, sys: 0.00 s, total: 0.15 s
>>>>>>>>> Wall time: 0.15 s
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 1) it uses pari, right?
>>>>>>>>
>>>>>>>> NO.  Pari has no functionality at all for doing anything nontrivial
>>>>>>>> with multivariate polynomials.    Do b.factor?? to see the source.
>>>>>>>> Sage tries to convert b to a poly over QQ, this works, then it calls
>>>>>>>> SINGULAR to factor that.  If conversion doesn't work, it falls back to
>>>>>>>> Maxima right now.
>>>>>>>
>>>>>>> Thanks for all the clarifications, this answers all my questions. I
>>>>>>> was looking into the function couple days ago and I don't know how I
>>>>>>> got the impression that it uses pari -- when I looked now, it indeed
>>>>>>> uses singular and spends most of the time in the conversion.
>>>>>>>
>>>>>>> We are now roughly on the level of maxima with our new not yet
>>>>>>> reviewed poly patches to sympy:
>>>>>>>
>>>>>>> http://code.google.com/p/sympy/issues/detail?id=1598
>>>>>>>
>>>>>>> and with gmpy (but otherwise still pure python) it's only about 4x
>>>>>>> slower than sage + singular, but that's because Sage also is pure
>>>>>>> python here, so after cythonizing the conversion in Sage it will
>>>>>>> probably be 100x faster (as you suggested) --- so I am curious how
>>>>>>> fast sympy's factor will be after cythonizing it a bit too.
>>>>>>> Essentially to make fair comparisons in the long term, I'll keep in
>>>>>>> mind that singular is the potential top speed here (assuming you can
>>>>>>> optimize the conversion back and forth). You also mentioned that
>>>>>>> singular itself can be sped up, but I have no idea how much, as I am
>>>>>>> not an expert in this multivariate factoring business at all (Mateusz
>>>>>>> Paprocki, who wrote the sympy patches, is).
>>>>>>
>>>>>> I think that if you want to get a good sense of how fast multivariate
>>>>>> factorization *should* be, it is valuable to benchmark Magma, Maple,
>>>>>> and Mathematica.
>>>>>>
>>>>>> If you want some specific benchmarks for Magma, let me know and I can
>>>>>> compute them (if you don't have access).  Maple and Mathematica are
>>>>>> both on sage.math, so you have access.
>>>>>
>>>>> Yes, I tried Mathematica couple days ago on the above examples and
>>>>> it's pretty fast. But singular seems to be faster on sage.math:
>>>>>
>>>>> In[9]:= Timing[Factor[b]]
>>>>>
>>>>>                          50
>>>>> Out[9]= {0.07, (x + y + z)  }
>>>>>
>>>>> sage: a = (x+y+z)**50
>>>>> sage: time factor(a)
>>>>> CPU times: user 0.04 s, sys: 0.00 s, total: 0.04 s
>>>>> Wall time: 0.04 s
>>>>> (x + y + z)^50
>>>>>
>>>>> but one has to be fair, that mathematica converts back and forth
>>>>> between the symbolic expression,
>>>
>>> Does it?  Who knows what Mathematica does?
>>
>> That's right -- what I meant is that mathematica kind of hides it,
>> e.g. it behaves just like an expression, if you know what I mean. I
>> have no idea what it does below the hood.
>>
>> Many thanks for the bechmarks and the long email. I'll use it in the
>> presentation. So sympy can't yet expand and factor things like:
>>
>> (x+y)^2+1
>>
>> so for your example it only factors it to a a mul of two expressions,
>> but that's now enough. We still need to improve it.
>
> Ok, I was wrong, neither of those systems is doing it. So I tried the example:
>
>  ((x+y+z)^20+1)*((x+y+z)^20+2)
>
> in sympy and it takes about 5 minutes in sympy (I didn't try the one with 
> ^30).

I just try to use gmpy and now it's "only" 1m15s with sympy for the
case with ^20:

In [11]: %time c = factor(b, expand=False)
CPU times: user 75.00 s, sys: 0.08 s, total: 75.08 s
Wall time: 75.60 s

sage:

sage: %time c = factor(b)
CPU times: user 1.76 s, sys: 0.00 s, total: 1.76 s
Wall time: 1.79 s

pure singular:

sage: %time b = factor(a)
CPU times: user 1.08 s, sys: 0.00 s, total: 1.08 s
Wall time: 1.08 s

So sympy is 75x slower for this example, but given it's pure python
(+gmpy for integers), I think it's not that bad for the beginning,
we'll see what cython does with it.

Ondrej

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to