Changeset 7316:b549ac617002
- Timestamp:
- 11/03/07 11:29:10 (6 years ago)
- Branch:
- default
- File:
-
- 1 edited
-
sage/combinat/integer_vector.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
sage/combinat/integer_vector.py
r6594 r7316 124 124 return IntegerVectors_nnondescents(n,k) 125 125 else: 126 return IntegerVectors_nkconstraints(n,k,kwargs) 126 if len(kwargs) == 1 and 'min_part' in kwargs and kwargs['min_part'] == 0: 127 return IntegerVectors_nk0(n,k) 128 else: 129 return IntegerVectors_nkconstraints(n,k,kwargs) 127 130 128 131 … … 156 159 return infinity 157 160 161 class IntegerVectors_nk0(CombinatorialClass): 162 """ 163 TESTS: 164 sage: iv = IntegerVectors(3,2, min_part=0) 165 sage: iv == loads(dumps(iv)) 166 True 167 168 AUTHORS: 169 --Martin Albrecht 170 --Mike Hansen 171 """ 172 def __init__(self, n, k): 173 self.n = n 174 self.k = k 175 176 def iterator(self): 177 """ 178 EXAMPLE: 179 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]] 182 sage: IntegerVectors(3, 0, min_part=0).list() 183 [] 184 sage: IntegerVectors(3, 1, min_part=0).list() 185 [[3]] 186 sage: IntegerVectors(0, 1, min_part=0).list() 187 [[0]] 188 sage: IntegerVectors(0, 2, min_part=0).list() 189 [[0, 0]] 190 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: 198 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 214 215 def __repr__(self): 216 return "Integer vectors of length %s that sum to %s with min_part == 0"%(self.k, self.n) 217 218 def __contains__(self, x): 219 if x not in IntegerVectors(): 220 return False 221 222 if sum(x) != self.n: 223 return False 224 225 if len(x) != self.k: 226 return False 227 228 if min(x) < 0: 229 return False 230 231 return True 232 158 233 class IntegerVectors_nkconstraints(CombinatorialClass): 159 234 def __init__(self, n, k, constraints): … … 194 269 else: 195 270 return "Integer vectors of length %s that sum to %s"%(self.k, self.n) 196 271 197 272 def __contains__(self, x): 198 273 """
Note: See TracChangeset
for help on using the changeset viewer.
