I found it but it is kind of deeply hidden. It works over the
rationals because polyomials have a _rational_ attribute,
which then passes through the __call__("string") (!) method of
the rational numbers.Something like this should be generic but I do not see how it can be in the current model. William: If I understand the coercion rules correctly then constant polynomial -> element base ring cannot be an automatic coercion because it is only partially defined (i.e. not a morphism). Is this true? Michel On May 22, 6:32 am, Michel <[EMAIL PROTECTED]> wrote: > Sorry I misuded the word automatically. I meant generically. I meant > to say > that coercion of a constant polynomial to its base ring > should be something generic, which should not depend > on the particular base ring involved. > > I looked at the various __call__ methods (which I had of course > already done) but I can't figure it out yet. I probably will. > > Michel > > On May 22, 12:53 am, "William Stein" <[EMAIL PROTECTED]> wrote: > > > On 5/21/07, Michel <[EMAIL PROTECTED]> wrote: > > > > Here is another coercion bug (or at least an inconsistency). Perhaps > > > it is not worth > > > fixing, given that everything is going to change. > > > It is not the case that "everything is going to change". The coercion > > system will iteratively improve with much thought and design, but most > > questions like the one you asking below would be unaffected. There > > is no magic that makes the work of implementing coercions just disappear, > > especially if one wants coercions to be fast (!). > > > > Anyway consider > > > > sage: W=NumberField(z^2+1,'s') > > > sage: WXY.<X,Y>=W[] > > > sage: a=WXY(0) > > > sage: W(a) > > > --------------------------------------------------------------------------- > > > ... > > > <type 'exceptions.TypeError'>: Cannot coerce 0 into Number Field in s > > > with defining polynomial z^2 + 1 > > > I do not think this is a bug. It is something that hasn't been implemented. > > There's never a guarantee that everything you can imagine can > > non-canonically > > be coerced to everything else. In many cases something has been > > implemented, > > but in this case it hasn't. > > > > The same example over the rationals is fine > > > > sage: QUV.<U,V>=QQ[] > > > sage: a=QUV(0) > > > sage: QQ(a) > > > 0 > > > I could probably fix this but it is not so clear to me yet where this > > > automatic coercion happens. > > > It's not automatic. You have to explicitly write W(a) above, which > > just calls the method W.__call__ with input a. That's the code > > you should look at. > > > I strongly encourage you to look at __call__ and maybe improve it > > so W(a) works. > > > Implement it and send me a patch. > > > William --~--~---------~--~----~------------~-------~--~----~ 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/sage-devel URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/ -~----------~----~----~----~------~----~------~--~---
