Changeset 7322:cd92f8140d6b


Ignore:
Timestamp:
11/06/07 15:18:41 (6 years ago)
Author:
Mike Hansen <mhansen@…>
Branch:
default
Tags:
2.8.12.rc0
Message:

Additions to #1071

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sage/combinat/integer_vector.py

    r7316 r7322  
    162162    """ 
    163163    TESTS: 
    164         sage: iv = IntegerVectors(3,2, min_part=0) 
    165         sage: iv == loads(dumps(iv)) 
     164        sage: IV = IntegerVectors(2,3, min_part=0) 
     165        sage: IV == loads(dumps(IV)) 
    166166        True 
    167167 
     
    174174        self.k = k 
    175175 
    176     def iterator(self): 
     176 
     177    def _list_rec(self, n, k): 
     178        """ 
     179        Return a list of a exponent tuples of length $size$ such that the 
     180        degree of the associated monomial is $D$. 
     181         
     182        INPUT: 
     183            n -- degree (must be > 0) 
     184            k -- length of exponent tuples (must be > 0) 
     185 
     186        EXAMPLES: 
     187            sage: IV = IntegerVectors(2,3, min_part=0) 
     188            sage: IV._list_rec(2,3) 
     189            [(0, 0, 2), (0, 1, 1), (0, 2, 0), (1, 0, 1), (1, 1, 0), (2, 0, 0)] 
     190        """ 
     191        res = [] 
     192 
     193        if k == 1: 
     194            return [ (n, ) ] 
     195 
     196        for nbar in range(n, -1, -1): 
     197            n_diff = n-nbar 
     198            for rest in self._list_rec( nbar , k-1): 
     199                res.append((n_diff,)+rest) 
     200        return res 
     201 
     202    def list(self): 
    177203        """ 
    178204        EXAMPLE: 
    179205            sage: IV = IntegerVectors(2,3, min_part=0) 
    180             sage: IV.list() # indirect doctest 
    181             [[2, 0, 0], [1, 0, 1], [1, 1, 0], [0, 0, 2], [0, 1, 1], [0, 2, 0]] 
     206            sage: IV.list() 
     207            [[0, 0, 2], [0, 1, 1], [0, 2, 0], [1, 0, 1], [1, 1, 0], [2, 0, 0]] 
    182208            sage: IntegerVectors(3, 0, min_part=0).list() 
    183209            [] 
     
    189215            [[0, 0]] 
    190216            sage: IntegerVectors(2, 2, min_part=0).list() 
    191             [[2, 0], [1, 1], [0, 2]] 
    192         """ 
    193  
    194         N = self.n 
    195         k = self.k 
    196         if k == 0: 
    197             if N == 0: 
     217            [[0, 2], [1, 1], [2, 0]] 
     218        """ 
     219        if self.n < 0: 
     220            return [] 
     221 
     222        if self.k == 0: 
     223            if self.n == 0: 
     224                return [[]] 
     225            else: 
     226                return [] 
     227        elif self.k == 1: 
     228            return [[self.n]] 
     229         
     230        res = self._list_rec(self.n, self.k) 
     231        return map(list, res) 
     232     
     233 
     234    def iterator(self): 
     235        """ 
     236        EXAMPLE: 
     237            sage: IV = IntegerVectors(2,3, min_part=0) 
     238            sage: list(IV) 
     239            [[0, 0, 2], [0, 1, 1], [0, 2, 0], [1, 0, 1], [1, 1, 0], [2, 0, 0]] 
     240            sage: list(IntegerVectors(3, 0, min_part=0)) 
     241            [] 
     242            sage: list(IntegerVectors(3, 1, min_part=0)) 
     243            [[3]] 
     244            sage: list(IntegerVectors(0, 1, min_part=0)) 
     245            [[0]] 
     246            sage: list(IntegerVectors(0, 2, min_part=0)) 
     247            [[0, 0]] 
     248            sage: list(IntegerVectors(2, 2, min_part=0)) 
     249            [[0, 2], [1, 1], [2, 0]] 
     250        """ 
     251        if self.n < 0: 
     252            return 
     253         
     254        if self.k == 0: 
     255            if self.n == 0: 
    198256                yield [] 
    199                 raise StopIteration 
    200             else: 
    201                 raise StopIteration 
    202         if N < 0: 
    203             raise StopIteration 
    204         if k == 1: 
    205             yield [N] 
    206             raise StopIteration 
    207          
    208         for nbar in xrange(N+1): 
    209             n = N-nbar 
    210             for rest in IntegerVectors_nk0( nbar , k-1): 
    211                 rest.append(n) 
    212                 rest.reverse() 
    213                 yield rest 
     257            return 
     258        elif self.k == 1: 
     259            yield [self.n] 
     260            return 
     261 
     262        for nbar in range(self.n, -1, -1): 
     263            n = self.n-nbar 
     264            for rest in IntegerVectors_nk0(nbar , self.k-1): 
     265                yield [n]+rest 
    214266 
    215267    def __repr__(self): 
     268        """ 
     269        TESTS: 
     270            sage: IV = IntegerVectors(2,3, min_part=0) 
     271            sage: repr(IV) 
     272            'Integer vectors of length 3 that sum to 2 with min_part == 0' 
     273        """ 
    216274        return "Integer vectors of length %s that sum to %s with min_part == 0"%(self.k, self.n) 
    217275 
    218276    def __contains__(self, x): 
     277        """ 
     278        TESTS: 
     279            sage: IV = IntegerVectors(2,3, min_part=0) 
     280            sage: all([i in IV for i in IV]) 
     281            True 
     282            sage: [0,1,2] in IV 
     283            False 
     284            sage: [2.0, 0, 0] in IV 
     285            False 
     286            sage: [0,1,0,1] in IV 
     287            False 
     288            sage: [0,1,1] in IV 
     289            True 
     290            sage: [-1,2,1] in IV 
     291            False 
     292        """ 
    219293        if x not in IntegerVectors(): 
    220294            return False 
Note: See TracChangeset for help on using the changeset viewer.