On Sun, Jul 24, 2011 at 6:24 PM, Mateusz Paprocki <[email protected]> wrote:
> Hi,
>
> On 24 July 2011 05:32, Aaron Meurer <[email protected]> wrote:
>>
>> Also, what should the coefficient be when include=False?
>
> Pull request is here: https://github.com/sympy/sympy/pull/510
> As to include=False case, I'm not sure whether to return always 1 as the
> coefficient or the true result from dmp_cancel(), so for now I made it work
> the later way (no special cases):
> In [4]: Poly(0, x).cancel(Poly(x/2, x))
> Out[4]: (2, Poly(0, x, domain='QQ'), Poly(1, x, domain='QQ'))

Fine with me, as I never use include=False, though I suspect that if I
did I would prefer either coeff == 1 or coeff == 0.  Aside from
clearing out useless information from the memory, this is useful to me
because I have tests with things like

assert somevalue == (Poly(0, t), Poly(1, t)) and if you let the
denominator be just whatever, then a small change in the
implementation will make the test fail, even though it's still
correct.  So the same would probably apply about the coefficient, and
if I used include=False I would probably argue to canonicalize it.

But since I don't, I don't really care. So this fix is fine with me. :)

Aaron Meurer

>
>>
>> Aaron Meurer
>>
>> On Sat, Jul 23, 2011 at 9:31 PM, Aaron Meurer <[email protected]> wrote:
>> > So what do you think these should return?  I'm assuming you think that
>> > at least 0/q should return 0/1 regardless of what include is set to.
>> > What about p/0?  Should p.cancel(Poly(0, t)) work or raise some kind
>> > of exception?
>> >
>> > Aaron Meurer
>> >
>> > On Tue, Jul 19, 2011 at 10:33 PM, Aaron Meurer <[email protected]>
>> > wrote:
>> >> If you look at the code in dmp_cancel(), it is special-cased for f ==
>> >> 0 or g == 0, in which case it just returns f, g for include=True or
>> >> K.one, K.one, f, g for include=False.  So there is no bug, per se,
>> >> just a design flaw.
>> >>
>> >> I think you wrote this code.  Is there a reason you special-cased
>> >> this?  Perhaps for speed?  Or maybe some stuff fails when g == 0 (I
>> >> didn't try it)?
>> >>
>> >> Aaron Meurer
>> >>
>> >> On Tue, Jul 19, 2011 at 9:10 PM, Mateusz Paprocki <[email protected]>
>> >> wrote:
>> >>> Hi,
>> >>>
>> >>> On 20 July 2011 05:02, Aaron Meurer <[email protected]> wrote:
>> >>>>
>> >>>> Hi.
>> >>>>
>> >>>> This question is mainly for Mateusz, but I encourage others to chime
>> >>>> in too if they have an opinion.
>> >>>>
>> >>>> I need the following behavior in the polys:
>> >>>>
>> >>>> >>> Poly(0, t).cancel(Poly(t, t), include=True)
>> >>>> (Poly(0, t), Poly(1, t))
>> >>>>
>> >>>> Whereas it currently does the following:
>> >>>>
>> >>>> >>> Poly(0, t).cancel(Poly(t, t), include=True)
>> >>>> (Poly(0, t), Poly(t, t))
>> >>>>
>> >>>> (notice that the denominator is reduced to 1 in the first case and
>> >>>> left alone in the second).  I need the former to make it easier to
>> >>>> deal with zero rational functions in my Risch code.
>> >>>>
>> >>>> Now, this is one of four possibilities in cancel.  They are:
>> >>>>
>> >>>> 1. Poly(0, t).cancel(Poly(t, t), include=True) # 0/q include=True;
>> >>>> this is the one I use
>> >>>> 2. Poly(0, t).cancel(Poly(t, t), include=False) # 0/q include=False
>> >>>> 3. Poly(t, t).cancel(Poly(0, t), include=True) # p/0 include=True
>> >>>> 4. Poly(t, t).cancel(Poly(0, t), include=False) # p/0 include=False
>> >>>>
>> >>>> I did not change 2-4 in my branch yet because I only ever use the
>> >>>> first idiom in my code, but I think we should try to make it
>> >>>> consistant.  So my questions are:
>> >>>>
>> >>>> - Should 2 return a one denominator too?  I don't actually care if it
>> >>>> does, but it seems like it should to be consistant with 1.
>> >>>> - What should the returned coefficient from 2 be?  I never actually
>> >>>> use include=False, so I don't really have a feel for this.
>> >>>> - Should 3 and 4 even work?  To me they should raise an exception,
>> >>>> but
>> >>>> maybe it isn't necessary to think of f.cancel(g) as f/g (though that
>> >>>> is what the docstring says).
>> >>>
>> >>> I didn't yet analyze all the cases pointed out above, but it seems
>> >>> there is
>> >>> a bug in cancel():
>> >>> In [1]: gcd(0, t)
>> >>> Out[1]: t
>> >>> In [2]: Poly(0, t).cancel(Poly(t, t))
>> >>> Out[2]: (1, Poly(0, t, domain='ZZ'), Poly(t, t, domain='ZZ'))
>> >>> gcd(0, something) always returns something, thus no matter what
>> >>> `include` is
>> >>> set to, cancel() whould give Poly(1, t) as the denominator. Note that
>> >>> cofactors() works correctly:
>> >>> In [3]: Poly(0, t).cofactors(Poly(t, t))
>> >>> Out[3]: (Poly(t, t, domain='ZZ'), Poly(0, t, domain='ZZ'), Poly(1, t,
>> >>> domain='ZZ'))
>> >>> (it gives GCD, cofactor(lhs), cofactor(rhs)).
>> >>>
>> >>>>
>> >>>> Aaron Meurer
>> >>>>
>> >>>> --
>> >>>> You received this message because you are subscribed to the Google
>> >>>> Groups
>> >>>> "sympy" 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/sympy?hl=en.
>> >>>>
>> >>>
>> >>> Mateusz
>> >>>
>> >>> --
>> >>> You received this message because you are subscribed to the Google
>> >>> Groups
>> >>> "sympy" 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/sympy?hl=en.
>> >>>
>> >>
>> >
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "sympy" 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/sympy?hl=en.
>>
>
> Mateusz
>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" 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/sympy?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" 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/sympy?hl=en.

Reply via email to