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.
