On Jul 17, 11:23 pm, Robert Bradshaw <[EMAIL PROTECTED]>
wrote:
> On Jul 17, 2008, at 10:31 PM, William Stein wrote:
>
>
>
> > On Fri, Jul 18, 2008 at 2:11 AM, John H Palmieri  
> > <[EMAIL PROTECTED]> wrote:
>
> >> On Jul 17, 4:51 pm, Carl Witty <[EMAIL PROTECTED]> wrote:
> >>> On Jul 17, 3:30 pm, John H Palmieri <[EMAIL PROTECTED]> wrote:
>
> >>>> I have several different vector space bases for an algebra A, and I
> >>>> have implemented this by having a class MyAlgebra, instances of  
> >>>> which
> >>>> have an attribute _basis_name which is a string naming the  
> >>>> basis.  I
> >>>> have __cmp__ defined so that the basis is ignored: any two  
> >>>> instances
> >>>> are canonically isomorphic, and there is good coercion between  
> >>>> them.
>
> >>>> Now, the attribute _basis_name just affects the _repr_ and _latex_
> >>>> methods for elements of the algebra; it has no other effect.  My
> >>>> question is this: when I multiply elements from algebras with two
> >>>> different bases, I can't figure out how the parent of the result is
> >>>> determined.  Some documentation suggests that the parent should be
> >>>> determined by the left factor, but that is not consistently what's
> >>>> happening.
>
> >>>> I think I would like to force the result to have the same parent as
> >>>> the left-hand factor, but by the time elements get to the _mul_
> >>>> method, their parents have been changed (via coercion), so I can't
> >>>> find out what that parent is.  (Perhaps something is getting  
> >>>> cached in
> >>>> the coercion process, so things are getting coerced to the cached
> >>>> algebra, not the left-hand parent?) What should I do?  Does it  
> >>>> sound
> >>>> like I'm doing something wrong, and if so, what should I  
> >>>> investigate?
>
> >>> Currently it's built-in to coercion that if two parents are equal,
> >>> then it doesn't matter which parent it picks.  (And the decision is
> >>> baked into various caches, etc., so the decision can depend on the
> >>> previous history of commands in this session.)
>
> >>> I've raised this issue as a problem a few weeks ago (seehttp://
> >>> groups.google.com/group/sage-devel/browse_thread/thread/4520ed...),
> >>> but nothing came of it yet.
>
> >>> Even if this gets fixed, I don't think you can fix it so that  
> >>> coercion
> >>> uses the parent of the left-hand value by changing your code; this
> >>> would require changes inside the base coercion code.
>
> >> Okay, thanks.  Here's something from Section 2.8 of the Sage
> >> Programming Guide:
>
> >> ARITHMETIC __add__, __mul__, ...:: When doing a binary operation, if
> >> the parents are not identical (in the sense of is ), determine if
> >> precisely one _coerce_ map is defined; if so, apply it and do the
> >> arithmetic operation. If both are defined, the parents are  
> >> canonically
> >> isomorphic, so use the left one. If neither are defined, raise a
> >> TypeError. (Whether or not there is a coerce map between objects
> >> should be cached for efficiency.)
>
> >> I guess you're saying that this is wrong (the part that says "so use
> >> the left one").
>
> > Argh.  It was right when I wrote that documentation and implemented
> > the second version of the coercion model.  :-)   Whoever implemented
> > the third/fourth version(s) of the coercion model will I hope also
> > update the programming guide with correct statements (hint, hint
> > Robertwb).
>
> Yep, sorry. Do we want this behavior? (This could be done without too  
> much trouble.)

Given my lack of understanding of the coercion model, I'm probably not
the right person to have an opinion, but here I go anyway.  The
absolute most important thing is that it be correctly documented.
After that, I would like the behavior to be predictable -- maybe I'm
imagining it, but it seems that the current behavior might depend on
the order in which various parents get cached.  Finally, I think that
having the parent default to be the parent of the left factor (in the
situation discussed in the documentation) seems pretty innocuous and
is reasonable behavior.

  John


> - Robert
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
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://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to