#5891: Categories for the working mathematics programmer
-------------------------+--------------------------------------------------
 Reporter:  nthiery      |       Owner:  nthiery           
     Type:  enhancement  |      Status:  new               
 Priority:  major        |   Milestone:  sage-combinat     
Component:  misc         |    Keywords:  categories parents
-------------------------+--------------------------------------------------
Description changed by nthiery:

Old description:

> This (series of) patch(es) extends the Sage category framework as a
> design pattern for organizing generic code.
>
> (with special thanks to Robert Bradshaw, Mike Hansen, Florent Hivert,
> William Stein, ... for design discussions).
>
> Under development on combinat.sagemath.org/patches:
>
> - #5891: categories-nt.patch:
>   the category framework itself
>   + updates to the sage library (import fixes, ... see below)
>   + updates to combinatorial free modules (will be split before
> submission)
>
> Related patches (will need to be applied after to recover 100% doctest
> pass):
> - categories-combinat-nt.patch
> - categories-numberfield_homset-nt.patch
> - family_enumset-fh.patch
> - enumset_unions-fh.patch
> - categories-sf-nt.patch        Symmetric functions
> - categories-symmetric_group_algebra-nt.patch
> - ncsf-nt.patch         Non commutative Symmetric Functions
> - #4326: root_systems-4326-nt.patch
>
> Small technical patches the category patch depends on:
> - #5449: cached_in_parent_method-5449-submitted.patch
> - #5783: lazy_attributes-fixes-5783-final.patch
> - #5120: unique_representation-5120-submitted.patch
> - #5967: element_wrapper-5967-submitted.patch
> - #5979: parent-element_constructor-fix-5979-submitted.patch
> - #5985: cPickle-5985-import-submitted.patch, cPickle-5985
> -copy_reg_classes-submitted.patch
> - #5986: cPickle-5986-nested-classes-submitted.patch
> - #5991: dynamic_class-5991-submitted.patch
> - #5598: 5598-coerce-declare.patch
> - #5483: explain-pickle-v1.patch                        # probably can
> get rid of this dependency
> - #6000: transitive_ideal-6000-submitted.patch
>
> Current status:
>
> - All test pass except for:
>   - sage -t  "devel/sage/sage/geometry/lattice_polytope.py" (apparently
> caused by categories, though I don't see how)
>   - sage -t  "devel/sage/sage/structure/sage_object.pyx"    (unpickling
> of old stuff)
>
> - Documentation:
>   - sage.categories?         Category quickref card
>   - sage.categories.primer?  Element/Parent/Category primer (in writing)
>   - Category?                Technical background on categories
>   - Semigroups().example()?? A template of semigroup
>   - See also the discussion on sage-devel in November 2009:
>   - http://groups.google.com/group/sage-devel/msg/d4065154e2e8cbd9
>
> - Real life applications:
>   see related patches, automatic monoids, ...
>
> - Categories:
>   - All the mathematical categories of Axiom and MuPAD (Courtesy of
> Teresa Gomez Diaz)
>   - (Infinite/Finite)EnumeratedSets (with example) (Courtesy of Florent
> Hivert)
>   - Semigroups                      (with example, basic methods,
> subquotients)
>   - FiniteSemigroups                (with example, cayley graphs, basic
> representation theory, ...)
>   - ModulesWithBasis                (with example, morphisms)
>   - HopfAlgebras & friends          (with example)
>   - Cleanup:
>     - Have unique representation by default (no need to inherit from
> Category_uniq)
>     - Have construction / reduce by default
>
> - Functorial constructions:
>   - direct sum
>   - tensor product
>   - cartesian product (todo)
>   - dual (in progress)
>   - subquotient, subset, quotient (in progress)
>   - isomorphism type (todo)
>
> - Homomorphisms
>   - Integrates with current sage morphisms
>   - Adds morphisms for some categories
>   - Some general infrastructure
>   - Hom:
>     - Simplification of the logic. Hopefuly completely compatible.
>     - X._Hom_(Y, category) may now return NotImplemented
>     - failed attempt at using cached_function (to be pursued)
>   - Systematic use of category = ... instead of cat =
>     This may be backward incompatible.
>
> - Generic test framework
>   - Functional, final design clear, needs cleanup (2/3 hours)
>
> - Reorganization of the Sage library to start using the category
> framework:
>   * Combinatorial free modules
>     * Have unique representation, use coercion, are more robust
>     * Improved _repr_
>     * Handle combinatorial classes that can't be sorted as indices
>   * Groups:
>     * AbelianGroup_class.__init__ was missing a call to Groups.__init__
>     * NAME CONFLICT: AbelianGroups are *not* in AbelianGroups()
>       With the current conventions:
>        - AbelianGroups is about additive abelian groups
>        - AbelianGroup  is about multiplicative abelian group
>     * Support for Group.__init__(category = ...)
>   * Fixed some import loops
>   * Added temporary list() methods to:
>     - FreeModule_generic
>     - MatrixSpace_generic
>     - Set_object_enumerated
>     - ParentWithAdditiveAbelianGens
>     - ParentWithMultiplicativeAbelianGens
>     They should eventually be inherited from the EnumeratedSets()
> category
>   * Added sage.sets.finite_enumerated_set
>
> - Todo:
>   * Naming cleanup:
>     * Parent -> ParentMethods (or _ParentMethods? or ?)
>     * Element -> ElementMethods + move them as a nested class of
> ParentMethods
>     * super_categories should be a method
>     * zero, one should be methods
>     * standardize the names: mult / product / multiplication / multiply?
>     * check -> test
>     * self.tester(**keywords)
>     * intrusive cat.tensor_category / ...
>     * cat.example() -> /an_example/an_object/... ?
>     * class.an_instance() ?
>     * all_weakly_super_categories -> ?
>     * move all examples in examples/
>     * AbelianGroups() versus CommutativeGroups()
>
>   * Category graph picture
>
>   * Fixes:
>     * Pickling: essentially works; polish the remaining
>     * Integration in the Sage library: some tests are broken. Help
> welcome!
>     * Pickling from old sage: technically feasible. Need help!
>     * Inheritance from category for Cython classes: technically feasible.
> Need help!
>
>   * Hom is *not* a functorial construction, the design and user
>     interface needs to be discussed
>
>   * Support for multivariate morphims, i.e. morphisms A x B -> C where
>     the specializations A x b -> C are morphisms for a given category
>     and a x B -> C are morphisms for a possibly different category
>
> - Discussion:
>   * Defining new inline operators, at least within the sage interpreter

New description:

 This (series of) patch(es) extends the Sage category framework as a
 design pattern for organizing generic code.

 (with special thanks to Robert Bradshaw, Mike Hansen, Florent Hivert,
 William Stein, ... for design discussions).

 Under development on combinat.sagemath.org/patches:

 - #5891: categories-nt.patch:
   the category framework itself
   + updates to the sage library (import fixes, ... see below)
   + updates to combinatorial free modules (will be split before
 submission)

 Related patches (will need to be applied after to recover 100% doctest
 pass):
 - categories-combinat-nt.patch
 - categories-numberfield_homset-nt.patch
 - family_enumset-fh.patch
 - enumset_unions-fh.patch
 - categories-sf-nt.patch        Symmetric functions
 - categories-symmetric_group_algebra-nt.patch
 - ncsf-nt.patch         Non commutative Symmetric Functions
 - #4326: root_systems-4326-nt.patch

 Small technical patches the category patch depends on:

 - #5449: cached_in_parent_method-5449-submitted.patch

 - #5783: lazy_attributes-fixes-5783-final.patch
 - #5120: unique_representation-5120-submitted.patch
 - #5967: element_wrapper-5967-submitted.patch
 - #5979: parent-element_constructor-fix-5979-submitted.patch
 - #5985: cPickle-5985-import-submitted.patch, cPickle-5985
 -copy_reg_classes-submitted.patch
 - #5986: cPickle-5986-nested-classes-submitted.patch
 - #5991: dynamic_class-5991-submitted.patch
 - #5598: 5598-coerce-declare.patch
 - #5483: explain-pickle-v1.patch                        # probably can get
 rid of this dependency
 - #6000: transitive_ideal-6000-submitted.patch

 Current status:

 - All test pass except for:
   - sage -t  "devel/sage/sage/geometry/lattice_polytope.py" (apparently
 caused by categories, though I don't see how)
   - sage -t  "devel/sage/sage/structure/sage_object.pyx"    (unpickling of
 old stuff)

 - Documentation:
   - sage.categories?         Category quickref card
   - sage.categories.primer?  Element/Parent/Category primer (in writing)
   - Category?                Technical background on categories
   - Semigroups().example()?? A template of semigroup
   - See also the discussion on sage-devel in November 2009:
   - http://groups.google.com/group/sage-devel/msg/d4065154e2e8cbd9

 - Real life applications:
   see related patches, automatic monoids, ...

 - Categories:
   - All the mathematical categories of Axiom and MuPAD (Courtesy of Teresa
 Gomez Diaz)
   - (Infinite/Finite)EnumeratedSets (with example) (Courtesy of Florent
 Hivert)
   - Semigroups                      (with example, basic methods,
 subquotients)
   - FiniteSemigroups                (with example, cayley graphs, basic
 representation theory, ...)
   - ModulesWithBasis                (with example, morphisms)
   - HopfAlgebras & friends          (with example)
   - Cleanup:
     - Have unique representation by default (no need to inherit from
 Category_uniq)
     - Have construction / reduce by default

 - Functorial constructions:
   - direct sum
   - tensor product
   - cartesian product (todo)
   - dual (in progress)
   - subquotient, subset, quotient (in progress)
   - isomorphism type (todo)

 - Homomorphisms
   - Integrates with current sage morphisms
   - Adds morphisms for some categories
   - Some general infrastructure
   - Hom:
     - Simplification of the logic. Hopefuly completely compatible.
     - X._Hom_(Y, category) may now return NotImplemented
     - failed attempt at using cached_function (to be pursued)
   - Systematic use of category = ... instead of cat =
     This may be backward incompatible.

 - Generic test framework
   - Functional, final design clear, needs cleanup (2/3 hours)

 - Reorganization of the Sage library to start using the category
 framework:
   * Combinatorial free modules
     * Have unique representation, use coercion, are more robust
     * Improved _repr_
     * Handle combinatorial classes that can't be sorted as indices
   * Groups:
     * AbelianGroup_class.__init__ was missing a call to Groups.__init__
     * NAME CONFLICT: AbelianGroups are *not* in AbelianGroups()
       With the current conventions:
        - AbelianGroups is about additive abelian groups
        - AbelianGroup  is about multiplicative abelian group
     * Support for Group.__init__(category = ...)
   * Fixed some import loops
   * Added temporary list() methods to:
     - FreeModule_generic
     - MatrixSpace_generic
     - Set_object_enumerated
     - ParentWithAdditiveAbelianGens
     - ParentWithMultiplicativeAbelianGens
     They should eventually be inherited from the EnumeratedSets() category
   * Added sage.sets.finite_enumerated_set

 - Todo:
   * Naming cleanup:
     * Parent -> ParentMethods (or _ParentMethods? or ?)
     * Element -> ElementMethods + move them as a nested class of
 ParentMethods
     * super_categories should be a method
     * zero, one should be methods
     * standardize the names: mult / product / multiplication / multiply?
     * check -> test
     * self.tester(**keywords)
     * intrusive cat.tensor_category / ...
     * cat.example() -> /an_example/an_object/... ?
     * class.an_instance() ?
     * all_weakly_super_categories -> ?
     * move all examples in examples/
     * AbelianGroups() versus CommutativeGroups()

   * Category graph picture

   * Fixes:
     * Pickling: essentially works; polish the remaining
     * Integration in the Sage library: some tests are broken. Help
 welcome!
     * Pickling from old sage: technically feasible. Need help!
     * Inheritance from category for Cython classes: technically feasible.
 Need help!

   * Hom is *not* a functorial construction, the design and user
     interface needs to be discussed

   * Support for multivariate morphims, i.e. morphisms A x B -> C where
     the specializations A x b -> C are morphisms for a given category
     and a x B -> C are morphisms for a possibly different category

 - Discussion:
   * Defining new inline operators, at least within the sage interpreter

--

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/5891#comment:9>
Sage <http://sagemath.org/>
Sage - Open Source Mathematical Software: Building the Car Instead of 
Reinventing the Wheel

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
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-trac?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to