Ticket #14065: trac_14065-combinatorial_object_cmp-ts.patch

File trac_14065-combinatorial_object_cmp-ts.patch, 5.9 KB (added by tscrim, 8 years ago)

Expanded doctests

  • sage/categories/crystals.py

    # HG changeset patch
    # User Travis Scrimshaw <tscrim@ucdavis.edu>
    # Date 1360118451 28800
    # Node ID f273fb63227b0618645f3d9d47a6593a5cfee640
    # Parent 856c71bec1ecacdfd1d4f9bcc4575e44a53039f6
    #14065 - Added __cmp__() to CombinatorialObject.
    
    diff --git a/sage/categories/crystals.py b/sage/categories/crystals.py
    a b class Crystals(Category_singleton): 
    519519                sage: t = B.highest_weight_vector()
    520520                sage: b = C(t)
    521521                sage: D = B.demazure_operator(b,[2,1]); D
    522                 B[[[1, 1], [3]]] + B[[[1, 2], [2]]] + B[[[1, 3], [2]]] + B[[[1, 3], [3]]] + B[[[1, 1], [2]]]
     522                B[[[1, 1], [2]]] + B[[[1, 2], [2]]] + B[[[1, 3], [2]]] + B[[[1, 1], [3]]] + B[[[1, 3], [3]]]
    523523                sage: G = B.digraph(subset=D.support())
    524524                sage: G.vertices()
    525525                [[[1, 1], [2]], [[1, 2], [2]], [[1, 3], [2]], [[1, 1], [3]], [[1, 3], [3]]]
    class Crystals(Category_singleton): 
    854854                sage: t = T.highest_weight_vector()
    855855                sage: b = 2*C(t)
    856856                sage: T.demazure_operator(b,[1,2,1])
    857                 2*B[[[1, 2], [3]]] + 2*B[[[2, 2], [3]]] + 2*B[[[1, 3], [3]]] + 2*B[[[2, 3], [3]]]
    858                 + 2*B[[[1, 2], [2]]] + 2*B[[[1, 1], [2]]] + 2*B[[[1, 3], [2]]] + 2*B[[[1, 1], [3]]]
     857                2*B[[[1, 1], [2]]] + 2*B[[[1, 2], [2]]] + 2*B[[[1, 3], [2]]] + 2*B[[[1, 1], [3]]]
     858                + 2*B[[[1, 2], [3]]] + 2*B[[[1, 3], [3]]] + 2*B[[[2, 2], [3]]] + 2*B[[[2, 3], [3]]]
    859859
    860860            The Demazure operator is idempotent::
    861861
    class Crystals(Category_singleton): 
    864864                sage: b = C(T.module_generators[0]); b
    865865                B[[[1, 1, 1, 1]]]
    866866                sage: e = T.demazure_operator(b,[1]); e
    867                 B[[[1, 1, 1, 1]]] + B[[[1, 1, 1, 2]]] + B[[[2, 2, 2, 2]]] + B[[[1, 1, 2, 2]]] + B[[[1, 2, 2, 2]]]
     867                B[[[1, 1, 1, 1]]] + B[[[1, 1, 1, 2]]] + B[[[1, 1, 2, 2]]] + B[[[1, 2, 2, 2]]] + B[[[2, 2, 2, 2]]]
    868868                sage: e == T.demazure_operator(e,[1])
    869869                True
    870870
  • sage/combinat/combinat.py

    diff --git a/sage/combinat/combinat.py b/sage/combinat/combinat.py
    a b class CombinatorialObject(SageObject): 
    707707        """
    708708        return str(self._list)
    709709
     710    def __cmp__(self, other):
     711        """
     712        EXAMPLES::
     713
     714            sage: c = CombinatorialObject([1,2,3])
     715            sage: d = CombinatorialObject([3,2,1])
     716            sage: cmp(c, d)
     717            -1
     718            sage: cmp(d, c)
     719            1
     720            sage: cmp(c, c)
     721            0
     722
     723        Check that :trac:`14065` is fixed::
     724
     725            sage: from sage.structure.element import Element
     726            sage: class Foo(CombinatorialObject, Element): pass
     727            sage: L = [Foo([4-i]) for i in range(4)]; L
     728            [[4], [3], [2], [1]]
     729            sage: sorted(L, cmp)
     730            [[1], [2], [3], [4]]
     731            sage: f = Foo([4])
     732            sage: f == None
     733            False
     734            sage: f != None
     735            True
     736
     737        .. WARNING::
     738
     739            :class:`CombinatorialObject` must come **before** :class:`Element`
     740            for this to work becuase :class:`Element` is ahead of
     741            :class:`CombinatorialObject` in the MRO (method resolution
     742            order)::
     743
     744                sage: from sage.structure.element import Element
     745                sage: class Bar(Element, CombinatorialObject):
     746                ...       def __init__(self, l):
     747                ...           CombinatorialObject.__init__(self, l)
     748                ...
     749                sage: L = [Bar([4-i]) for i in range(4)]
     750                sage: sorted(L, cmp)
     751                Traceback (most recent call last):
     752                ...
     753                NotImplementedError: BUG: sort algorithm for elements of 'None' not implemented
     754        """
     755        if isinstance(other, CombinatorialObject):
     756            if self._list == other._list:
     757                return 0
     758            if self._list < other._list:
     759                return -1
     760            return 1
     761        if self._list == other:
     762            return 0
     763        if self._list < other:
     764            return -1
     765        return 1
     766
    710767    def _repr_(self):
    711768        """
    712769        EXAMPLES::
    class CombinatorialObject(SageObject): 
    857914            self._hash = str(self._list).__hash__()
    858915        return self._hash
    859916
     917    def __nonzero__(self):
     918        """
     919        Return ``True`` if ``self`` is non-zero.
     920
     921        We consider a list to be zero if it has length zero.
     922
     923        TESTS::
     924
     925            sage: c = CombinatorialObject([1,2,3])
     926            sage: not c
     927            False
     928            sage: c = CombinatorialObject([])
     929            sage: not c
     930            True
     931
     932        Check that :trac:`14065` is fixed::
     933
     934            sage: from sage.structure.element import Element
     935            sage: class Foo(CombinatorialObject, Element): pass
     936            ...
     937            sage: f = Foo([4])
     938            sage: not f
     939            False
     940            sage: f = Foo([])
     941            sage: not f
     942            True
     943
     944        .. WARNING::
     945
     946            :class:`CombinatorialObject` must come **before** :class:`Element`
     947            for this to work becuase :class:`Element` is ahead of
     948            :class:`CombinatorialObject` in the MRO (method resolution
     949            order)::
     950
     951                sage: from sage.structure.element import Element
     952                sage: class Bar(Element, CombinatorialObject):
     953                ...       def __init__(self, l):
     954                ...           CombinatorialObject.__init__(self, l)
     955                ...
     956                sage: b = Bar([4])
     957                sage: not b
     958                Traceback (most recent call last):
     959                ...
     960                AttributeError: 'NoneType' object has no attribute 'zero_element'
     961        """
     962        return self._list.__len__() > 0
     963
    860964    def __len__(self):
    861965        """
    862966        EXAMPLES::