@@ -781,6 +781,23 @@ def __contains__(self, x):
781
781
return True
782
782
783
783
def _unrank_helper (self , x , rtn ):
784
+ """
785
+ return an element at rank ``x``.
786
+
787
+ EXAMPLES::
788
+
789
+ sage: i=IntegerVectors(k=5)
790
+ sage: i._unrank_helper(10, [2,0,0,0,0])
791
+ [1, 0, 0, 0, 1]
792
+
793
+ sage: i=IntegerVectors(n=7)
794
+ sage: i._unrank_helper(100, [7,0,0,0])
795
+ [2, 0, 0, 5]
796
+
797
+ sage: i=IntegerVectors(n=12, k=7)
798
+ sage: i._unrank_helper(1000, [12,0,0,0,0,0,0])
799
+ [5, 3, 1, 1, 1, 1, 0]
800
+ """
784
801
ptr = 0
785
802
while True :
786
803
current_rank = self .rank (rtn )
@@ -1097,14 +1114,17 @@ def unrank(self, x):
1097
1114
[1, 0, 0, 0, 1]
1098
1115
sage: IntegerVectors(k=5).unrank(15)
1099
1116
[0, 0, 2, 0, 0]
1117
+ sage: IntegerVectors(k=0).unrank(0)
1118
+ []
1100
1119
"""
1101
1120
if self .k == 0 and x != 0 :
1102
1121
raise IndexError (f"Index { x } is out of range for the IntegerVector." )
1103
- n = 0
1104
1122
rtn = [0 ]* self .k
1123
+ if self .k == 0 and x == 0 :
1124
+ return rtn
1125
+
1105
1126
while self .rank (rtn ) <= x :
1106
- n += 1
1107
- rtn [0 ] = n
1127
+ rtn [0 ] += 1
1108
1128
rtn [0 ] -= 1
1109
1129
1110
1130
return IntegerVectors ._unrank_helper (self , x , rtn )
0 commit comments