#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.