Changeset 7322:cd92f8140d6b
- Timestamp:
- 11/06/07 15:18:41 (6 years ago)
- Branch:
- default
- Tags:
- 2.8.12.rc0
- File:
-
- 1 edited
-
sage/combinat/integer_vector.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
sage/combinat/integer_vector.py
r7316 r7322 162 162 """ 163 163 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)) 166 166 True 167 167 … … 174 174 self.k = k 175 175 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): 177 203 """ 178 204 EXAMPLE: 179 205 sage: IV = IntegerVectors(2,3, min_part=0) 180 sage: IV.list() # indirect doctest181 [[ 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]] 182 208 sage: IntegerVectors(3, 0, min_part=0).list() 183 209 [] … … 189 215 [[0, 0]] 190 216 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: 198 256 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 214 266 215 267 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 """ 216 274 return "Integer vectors of length %s that sum to %s with min_part == 0"%(self.k, self.n) 217 275 218 276 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 """ 219 293 if x not in IntegerVectors(): 220 294 return False
Note: See TracChangeset
for help on using the changeset viewer.
