def rank(self, sub): """ Returns the rank of sub as a subset of s of size k. EXAMPLES:: sage: Subsets(3,2).rank([1,2]) 0 sage: Subsets([2,3,4],2).rank([3,4]) 2 sage: Subsets([2,3,4],2).rank([2]) sage: Subsets([2,3,4],4).rank([2,3,4,5]) """ subset = Set(sub) lset = __builtin__.list(self.s) lsubset = __builtin__.list(subset) try: index_list = sorted(map(lambda x: lset.index(x), lsubset)) except ValueError: return None n = len(self.s) r = 0 if self.k not in range(len(self.s) + 1): return None elif self.k != len(subset): return None else: return choose_nk.rank(index_list, n)
def rank(self, sub): """ Returns the rank of sub as a subset of s. EXAMPLES:: sage: Subsets(3).rank([]) 0 sage: Subsets(3).rank([1,2]) 4 sage: Subsets(3).rank([1,2,3]) 7 sage: Subsets(3).rank([2,3,4]) is None True """ subset = Set(sub) lset = __builtin__.list(self.s) lsubset = __builtin__.list(subset) try: index_list = sorted(map(lambda x: lset.index(x), lsubset)) except ValueError: return None n = len(self.s) r = 0 for i in range(len(index_list)): r += binomial(n, i) return r + choose_nk.rank(index_list, n)
def rank(self, sub): """ Returns the rank of sub as a subset of s of size k. EXAMPLES:: sage: Subsets(3,2).rank([1,2]) 0 sage: Subsets([2,3,4],2).rank([3,4]) 2 sage: Subsets([2,3,4],2).rank([2]) sage: Subsets([2,3,4],4).rank([2,3,4,5]) """ subset = Set(sub) lset = __builtin__.list(self.s) lsubset = __builtin__.list(subset) try: index_list = sorted(map(lambda x: lset.index(x), lsubset)) except ValueError: return None n = len(self.s) r = 0 if self.k not in range(len(self.s)+1): return None elif self.k != len(subset): return None else: return choose_nk.rank(index_list,n)
def rank(self, sub): """ Returns the rank of sub as a subset of s. EXAMPLES:: sage: Subsets(3).rank([]) 0 sage: Subsets(3).rank([1,2]) 4 sage: Subsets(3).rank([1,2,3]) 7 sage: Subsets(3).rank([2,3,4]) == None True """ subset = Set(sub) lset = __builtin__.list(self.s) lsubset = __builtin__.list(subset) try: index_list = sorted(map(lambda x: lset.index(x), lsubset)) except ValueError: return None n = len(self.s) r = 0 for i in range(len(index_list)): r += binomial(n,i) return r + choose_nk.rank(index_list,n)
def __init__(self, R, elements): """ Initialize ``self``. EXAMPLES:: sage: R.<x,y,z> = QQ[] sage: K = KoszulComplex(R, [x,y]) sage: TestSuite(K).run() """ # Generate the differentials self._elements = elements n = len(elements) I = range(n) diff = {} zero = R.zero() for i in I: M = matrix(R, binomial(n,i), binomial(n,i+1), zero) j = 0 for comb in itertools.combinations(I, i+1): for k,val in enumerate(comb): r = rank(comb[:k] + comb[k+1:], n, False) M[r,j] = (-1)**k * elements[val] j += 1 M.set_immutable() diff[i+1] = M diff[0] = matrix(R, 0, 1, zero) diff[0].set_immutable() diff[n+1] = matrix(R, 1, 0, zero) diff[n+1].set_immutable() ChainComplex_class.__init__(self, ZZ, ZZ(-1), R, diff)
def __init__(self, R, elements): """ Initialize ``self``. EXAMPLES:: sage: R.<x,y,z> = QQ[] sage: K = KoszulComplex(R, [x,y]) sage: TestSuite(K).run() """ # Generate the differentials self._elements = elements n = len(elements) I = range(n) diff = {} zero = R.zero() for i in I: M = matrix(R, binomial(n, i), binomial(n, i + 1), zero) j = 0 for comb in itertools.combinations(I, i + 1): for k, val in enumerate(comb): r = rank(comb[:k] + comb[k + 1:], n, False) M[r, j] = (-1)**k * elements[val] j += 1 M.set_immutable() diff[i + 1] = M diff[0] = matrix(R, 0, 1, zero) diff[0].set_immutable() diff[n + 1] = matrix(R, 1, 0, zero) diff[n + 1].set_immutable() ChainComplex_class.__init__(self, ZZ, ZZ(-1), R, diff)