#18013: Implement abstract tableau refactoring
-------------------------------------+-------------------------------------
       Reporter:  jpswanson          |        Owner:
           Type:  enhancement        |       Status:  needs_work
       Priority:  major              |    Milestone:  sage-6.9
      Component:  combinatorics      |   Resolution:
       Keywords:  days64, sage-      |    Merged in:
  combinat, tableaux, refactoring,   |    Reviewers:  Travis Scrimshaw
  days64.25, days68                  |  Work issues:
        Authors:  Josh Swanson       |       Commit:
Report Upstream:  N/A                |  37ace348fb1afdb930b0657a80e40a58aea14be2
         Branch:  public/18013       |     Stopgaps:
   Dependencies:                     |
-------------------------------------+-------------------------------------
Changes (by tscrim):

 * reviewer:   => Travis Scrimshaw
 * milestone:  sage-6.6 => sage-6.9


Comment:

 The reason it doesn't appear elsewhere is that either it doesn't use
 categories/parent/elements (e.g. graphs) or creation of elements are done
 only through the parent. There are only a few other examples where I know
 of outside of `combinat` that uses parents/elements that uses a function
 as a way of creating elements not through the parent. They are `integer`
 and `rational`, and they are low-level, optimized, and cython (which until
 very recently did not support metaclasses). So it ends up being more of a
 "house style" because of what our users expect, but it is a slight abuse
 IMO (how many papers say, let `X` be the set of all partitions, and let
 `\lambda \in X`?).

 For the normalization, I see many places in the code where you seem to be
 fighting against doing normalization/validation, most notably: it was part
 of your reasoning for the factory functions IIRC, the `check` argument
 checks everywhere, the method which iterates over the `dict` of cells and
 having that be an abstract method. The last one is the reason I suggested
 the refactoring and the ABCs (which can be very complicated, but only
 require one or two methods to be implemented in the concrete class;
 depends on the situation) would be more minimal. I'm starting to read
 deeper into the code and think about the structuring now. (I saw a talk at
 last year's ~PyCon which gave a good argument why we should work harder
 now rather than take the "technical debt" that we'd have to pay later.)

 I'm sorry, I must have misunderstood what you said about the iteration.

 For the `_coerce_map_from_`, if you do not want the child classes to
 inherit it, then they should not be child classes. If `Y` is a subclass of
 `X`, then instances of `Y` should behave like instances of `X` (Nicolas
 has referred to this as the 'is a' test). I'm okay with an ABC and/or mix-
 in class not conforming to this, but not for user accessible concrete
 classes.

 I will take a full detailed look at this next week and do my reviewer pass
 over the code (which might involve the refactoring I mentioned above).
 Thank you again for your work on this.

 (Oh look a short-ish response by me :P)

--
Ticket URL: <http://trac.sagemath.org/ticket/18013#comment:25>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

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

Reply via email to