#13688: FiniteEnumeratedSets cardinality override
--------------------------------------------------------------+-------------
       Reporter:  tscrim                                      |         Owner:  
sage-combinat  
           Type:  defect                                      |        Status:  
positive_review
       Priority:  major                                       |     Milestone:  
sage-5.8       
      Component:  categories                                  |    Resolution:  
               
       Keywords:  finite sets, category, cardinality, days45  |   Work issues:  
               
Report Upstream:  N/A                                         |     Reviewers:  
Andrew Mathas  
        Authors:  Travis Scrimshaw                            |     Merged in:  
               
   Dependencies:                                              |      Stopgaps:  
               
--------------------------------------------------------------+-------------
Changes (by tscrim):

  * status:  needs_review => positive_review


Old description:

> Right now the category `FiniteEnumeratedSets` overrides a parent class's
> `cardinality()` when creating a list. Below is a minimal example of this
> behavior:
> {{{#!python
> from sage.structure.parent import Parent
> from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
>
> class TestParent(Parent):
>     def __init__(self):
>         Parent.__init__(self, category=FiniteEnumeratedSets())
>
>     def __iter__(self):
>         yield 1
>         return
>
>     def cardinality(self, bad_arg):
>         """
>         EXAMPLES::
>
>             sage: P = sage.combinat.category_doctest_fail.TestParent()
>             sage: P.cardinality(-1)
>             1
>             sage: v = P.list(); v
>             [1]
>             sage: len(v)
>             1
>             sage: P.cardinality()
>             1
>             sage: P.cardinality(-1) # This test breaks
>             1
>         """
>         return 1 # we don't want to change the semantics of cardinality()
> }}}
>
> This seems to be caused by not checking if the parent class has a
> `cardinality()` function implemented, and just overriding it with
> `_cardinality_from_list()` (which takes no [optional] parameters).
>
> NOTE: The failure will '''only''' show up while running doctests using
> `sage -t`, not while running sage.

New description:

 Right now the category `FiniteEnumeratedSets` overrides a parent class's
 `cardinality()` when creating a list. Below is a minimal example of this
 behavior:
 {{{#!python
 from sage.structure.parent import Parent
 from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets

 class TestParent(Parent):
     def __init__(self):
         Parent.__init__(self, category=FiniteEnumeratedSets())

     def __iter__(self):
         yield 1
         return

     def cardinality(self, bad_arg):
         """
         EXAMPLES::

             sage: P = sage.combinat.category_doctest_fail.TestParent()
             sage: P.cardinality(-1)
             1
             sage: v = P.list(); v
             [1]
             sage: len(v)
             1
             sage: P.cardinality()
             1
             sage: P.cardinality(-1) # This test breaks
             1
         """
         return 1 # we don't want to change the semantics of cardinality()
 }}}

 This seems to be caused by not checking if the parent class has a
 `cardinality()` function implemented, and just overriding it with
 `_cardinality_from_list()` (which takes no [optional/keyword] parameters).

--

Comment:

 Replying to [comment:4 andrew.mathas]:
 > Can you add a doctest for testing for this?

 Done. I expanded on the example I gave in the description.

 > Presumably it showed up in a real class.

 In `partition.py` after #13605 is applied (of course without this patch).

 > Happy for you to set this to a positive review once that's done.

 Also done. Thank you for reviewing this.

 Best,[[BR]]
 Travis

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/13688#comment:5>
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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to