Dear categories and multiple inheritance fans,

Let me advertise here #13589 which contains a proposal for solving
once for all the recurrent Method Resolution Order issues with large
hierarchies of classes, in particular those derived from
categories. In the short run what I would need is feedback on whether
this proposal sounds reasonable, before I proceed with it.

Executive summary:

Python handles multiple inheritance by computing, for each class, a
linear extension of all its super classes (the Method Resolution
Order, MRO). The MRO is calculated recursively from local information
(the *ordered* list of the direct super classes), with the so-called
C3 algorithm. This algorithm can fail if the local information is not
consistent; worst, there exist hiearchies of classes with provably no
consistent local information.

For large hierarchy of classes, like those derived from categories in
Sage and especially with the upcoming category patches (#10963),
maintaining consistent local information by hand does not scale and
leads to unpredictable C3 failures (the dreaded "could not find a
consistent method resolution order"); a maintenance nightmare.

#13589 is a proposal for solving this problem once for all. Namely, it
allows for building automatically the local information from the bare
class hierarchy in such a way that guarantees that the C3 algorithm
will never fail.

Err, but you said that this was provably impossible? Well, not if one
relaxes a bit the hypotheses, but that's not something one would want
to do by hand :-)

Details:

Please see the extensive documentation at the top of the file
sage/misc/c3_controlled.py on the patch attached to the ticket.

Status:

The patch is functional, but still breaks a couple things here and
there. In particular, some doctests need to be updated w.r.t. some
changes in MRO and super_categories output. I will fix this as soon as
the principle will be accepted.

The patch is also available on the Sage-Combinat queue (guarded out by
default by +functorial_construction).

Credits:

This patch is a followup to a study of the C3 algorithm together with
Florent Hivert, and to discussions with Simon King and his
implementation of C3.

Cheers,
                                Nicolas
--
Nicolas M. ThiƩry "Isil" <nthi...@users.sf.net>
http://Nicolas.Thiery.name/

-- 
You received this message because you are subscribed to the Google Groups 
"sage-combinat-devel" group.
To post to this group, send email to sage-combinat-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-combinat-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sage-combinat-devel?hl=en.

Reply via email to