Skip to content

FiniteEnumeratedSets cardinality override #13688

@tscrim

Description

@tscrim

Right now the category FiniteEnumeratedSets overrides a parent class's cardinality() when creating a list. Below is a minimal example of this behavior:

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

CC: @nthiery @AndrewAtLarge @sagetrac-sage-combinat

Component: categories

Keywords: finite sets, cardinality, days45

Author: Travis Scrimshaw

Reviewer: Andrew Mathas

Merged: sage-5.8.beta1

Issue created by migration from https://trac.sagemath.org/ticket/13688

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions