def unrank(self, r): """ Return the subset of ``s`` that has rank ``k``. EXAMPLES:: sage: Subsets(3).unrank(0) {} sage: Subsets([2,4,5]).unrank(1) {2} sage: Subsets([1,2,3]).unrank(257) Traceback (most recent call last): ... IndexError: index out of range """ r = Integer(r) if r >= self.cardinality() or r < 0: raise IndexError("index out of range") else: k = ZZ_0 n = self._s.cardinality() bin = Integer(1) while r >= bin: r -= bin k += 1 bin = binomial(n, k) return self.element_class( [self._s.unrank(i) for i in combination.from_rank(r, n, k)])
def unrank(self, r): """ Return the subset of ``s`` that has rank ``k``. EXAMPLES:: sage: Subsets(3).unrank(0) {} sage: Subsets([2,4,5]).unrank(1) {2} sage: Subsets([1,2,3]).unrank(257) Traceback (most recent call last): ... IndexError: index out of range """ r = Integer(r) if r >= self.cardinality() or r < 0: raise IndexError("index out of range") else: k = ZZ_0 n = self._s.cardinality() bin = Integer(1) while r >= bin: r -= bin k += 1 bin = binomial(n,k) return self.element_class([self._s.unrank(i) for i in combination.from_rank(r, n, k)])
def unrank(self, r): """ Return the subset of ``s`` of size ``k`` that has rank ``r``. EXAMPLES:: sage: Subsets(3,2).unrank(0) {1, 2} sage: Subsets([2,4,5],2).unrank(0) {2, 4} sage: Subsets([1,2,8],3).unrank(42) Traceback (most recent call last): ... IndexError: index out of range """ lset = self._ls n = len(lset) if self._k > n or r >= self.cardinality() or r < 0: raise IndexError("index out of range") else: return self.element_class([lset[i] for i in combination.from_rank(r, n, self._k)])
def unrank(self, r): """ Return the subset of ``s`` of size ``k`` that has rank ``r``. EXAMPLES:: sage: Subsets(3,2).unrank(0) {1, 2} sage: Subsets([2,4,5],2).unrank(0) {2, 4} sage: Subsets([1,2,8],3).unrank(42) Traceback (most recent call last): ... IndexError: index out of range """ lset = self._ls n = len(lset) if self._k > n or r >= self.cardinality() or r < 0: raise IndexError("index out of range") else: return self.element_class( [lset[i] for i in combination.from_rank(r, n, self._k)])
def unrank(self, r): """ Return the subset which has rank ``r``. EXAMPLES:: sage: from sage.combinat.subset import SubsetsSorted sage: S = SubsetsSorted(range(3)) sage: S.unrank(4) (0, 1) """ r = Integer(r) if r >= self.cardinality() or r < 0: raise IndexError("index out of range") k = ZZ_0 n = self._s.cardinality() binom = ZZ.one() while r >= binom: r -= binom k += 1 binom = binomial(n, k) C = combination.from_rank(r, n, k) return self.element_class(sorted([self._s.unrank(i) for i in C]))
def unrank(self, r): """ Return the subset which has rank ``r``. EXAMPLES:: sage: from sage.combinat.subset import SubsetsSorted sage: S = SubsetsSorted(range(3)) sage: S.unrank(4) (0, 1) """ r = Integer(r) if r >= self.cardinality() or r < 0: raise IndexError("index out of range") k = ZZ_0 n = self._s.cardinality() binom = ZZ.one() while r >= binom: r -= binom k += 1 binom = binomial(n,k) C = combination.from_rank(r, n, k) return self.element_class(sorted([self._s.unrank(i) for i in C]))