@@ -956,15 +956,11 @@ def rank(self, x):
956
956
if sum (x ) != self .n :
957
957
raise ValueError ("argument is not a member of IntegerVectors({},{})" .format (self .n , None ))
958
958
959
- n , k = self .n , len (x )
960
-
961
- r = binomial (k + n - 1 , n + 1 )
962
-
959
+ n , k , s = self .n , len (x ), 0
960
+ r = binomial (k + n - 1 , n + 1 )
963
961
for i in range (k - 1 ):
964
- k -= 1
965
- n -= x [i ]
966
- r += binomial (k + n - 1 , n - 1 )
967
-
962
+ s += x [k - 1 - i ]
963
+ r += binomial (s + i , i + 1 )
968
964
return r
969
965
970
966
def unrank (self , x ):
@@ -1095,15 +1091,11 @@ def rank(self, x):
1095
1091
if len (x ) != self .k :
1096
1092
raise ValueError ("argument is not a member of IntegerVectors({},{})" .format (None , self .k ))
1097
1093
1098
- n , k = sum (x ), self .k
1099
-
1100
- r = binomial (n + k - 1 , k )
1101
-
1094
+ n , k , s = sum (x ), self .k , 0
1095
+ r = binomial (n + k - 1 , k )
1102
1096
for i in range (k - 1 ):
1103
- k -= 1
1104
- n -= x [i ]
1105
- r += binomial (k + n - 1 , n - 1 )
1106
-
1097
+ s += x [k - 1 - i ]
1098
+ r += binomial (s + i , i + 1 )
1107
1099
return r
1108
1100
1109
1101
def unrank (self , x ):
@@ -1335,15 +1327,10 @@ def rank(self, x):
1335
1327
if x not in self :
1336
1328
raise ValueError ("argument is not a member of IntegerVectors({},{})" .format (self .n , self .k ))
1337
1329
1338
- n = self .n
1339
- k = self .k
1340
-
1341
- r = 0
1330
+ k , s , r = self .k , 0 , 0
1342
1331
for i in range (k - 1 ):
1343
- k -= 1
1344
- n -= x [i ]
1345
- r += binomial (k + n - 1 , n - 1 )
1346
-
1332
+ s += x [k - 1 - i ]
1333
+ r += binomial (s + i , i + 1 )
1347
1334
return r
1348
1335
1349
1336
def unrank (self , x ):
0 commit comments