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.
