On Tuesday, April 1, 2014 7:27:26 AM UTC-7, Ben Hutz wrote:
>
> Actually, it seems that _coerce_map_from works just fine allowing you to 
> send an integer into the power series ring. What is broken is recognizing 
> that the powerseries element is an integer even though T(1)==1 returns true.
>
That's true exactly because 1 coerces into T and is equal to 1 there.  We 
also have
  sage: T.<t>=QQ[[]]
  sage: 1+O(t^-1)==1
  True
and I don't think we;d want Integer(1+O(t^-1)) to succeed.
 
I'm afraid that the design of fast_callable, with constant folding by 
equality regardless of type, is just not powerful enough to handle more 
complicated domains than the simple real calculus-type functions it was 
originally designed for. If we're finding an integer exponent somewhere 
which happens to compare equal to some other type already stored, we should 
really NOT be folding that to the more complicated object. That's bound to 
slow down the power, either by having to recognize each time that the 
constant can be viewed as an integer and converting it to one, or by now 
having to evaluate a full (analytic?) exponentiation, rather than the 
repeated squaring and multiply one could do with a guaranteed integer 
exponent.
 
Allowing power series to be converted back into integers is really just 
hiding the real problem: fast_callable should take type/parent into account 
when folding constants. So probably the constant cache should be keyed by 
(parent(constant),constant) tuples. That would at least make 
(Power Series Ring in t over Rational Field,1)
and
(Integer Ring,1)
distinct.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" 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 http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to