#20086: ZZ[X], QQ[X]: allow arbitrary powers of constant polynomials
-------------------------------------+-------------------------------------
       Reporter:  cheuberg           |        Owner:
           Type:  defect             |       Status:  needs_review
       Priority:  major              |    Milestone:  sage-7.1
      Component:  basic arithmetic   |   Resolution:
       Keywords:                     |    Merged in:
        Authors:  Clemens Heuberger  |    Reviewers:  Benjamin Hackl
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  u/cheuberg/polynomials/power       |  892109ac4f48a4a32d35671365ecceb0d1c9e0bf
   Dependencies:                     |     Stopgaps:
-------------------------------------+-------------------------------------

Comment (by cheuberg):

 Replying to [comment:18 vdelecroix]:
 > Let me be more precise then
 > {{{
 > def __pow__(self, exp):
 >     cdef long n
 >     try:
 >         n = exp
 >         # old code for integer exponent
 >     except TypeError:
 >         n = QQ.coerce(exp)
 >         # new code for rational exponent
 > }}}

 ok, if you prefer it like that, we can probably do that.

 > > I need a quick fix for `R(1)^(1/2)`. If somebody has time to implement
 `((x+1)^2)^(1/2)` very soon, I'd be happy. I do not have time soon.
 However, I want to have the code associated with a recently submitted
 paper in 7.1.
 >
 > Are you sure there was a bug?

 Do you think that disallowing `R(1)^(1/2)` is the desired behaviour?

 > In Sage the integer 1 is *not* the 1 from ZZ[x] (though they are equal
 through coercion). Some softwares behave differently to that respect (e.g.
 GAP) where there is only one 1 which is an integer and not anything else.
 In Sage (but not in GAP) it is already the case that operations change
 with respect to the parents even if the objects are equal
 > {{{
 > sage: Zmod(10)(3) == 3
 > sage: Zmod(10)(5) == 5
 > sage: log(Zmod(10)(3))
 > 3
 > sage: log(Zmod(10)(5))
 > Traceback (most recent call last):
 > ...
 > ZeroDivisionError: Inverse does not exist.
 > }}}

 I have no idea how this is related to this problem, sorry.

 >
 > > Basically, this fix here simply branches to existing code.
 > > Computing `((x+1)^2)^(1/2)` needs new mathematical code (involving
 square free decomposition).
 >
 > Indeed. Your modifications obfuscate the code for only a very trivial
 case and a discutable behavior of powering with polynomials.

 It might seem trivial to you, but it did cost me an hour while writing a
 paper because basically, asymptotic rings using polynomial rings as
 coefficient rings could not compute square roots, and, sorry, I need that.

 >
 > > Therefore, I propose to include this now on the basis that while this
 is not a perfect and definitive solution, it is better than the previous
 behaviour.
 >
 > Not sure it is better. Sage used to consider operations based on
 parents. Powers are of course a special type of operation and with some
 respect might be treated appart. But "(polynomial)^(polynomial)" is not
 well defined. And "(polynomial)^(rational)" is well defined in some
 situations (and to that respect, your code improves the current situation
 a little).

 There was a discussion on sage-devel a few weeks ago. Every parent seems
 to have its own home-made logic about how to do coercion. Please do not
 try to fix that in this ticket.

--
Ticket URL: <http://trac.sagemath.org/ticket/20086#comment:24>
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 unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to