示例#1
0
	def index2perm(self, P):
		if P not in self.schubert_list:
			raise ValueError('input not an index set in this Grassmannian!')
		T = list(P)
		plength = self.m+self.k
		if self.type == 'A':
			perm_begin = sorted(set(range(1,plength+1)) - set(T))
			perm = perm_begin + T
			if self.involve:
				perm = pf.involution(self.type,self.m,self.n,perm)
			return perm
		if self.type == 'B':
			for i in range(self.m):
				if T[i] > self.n:
					T[i] -= 1
		perm = range(plength)
		pvals = range(-plength,0) + range(1, plength+1)
		perm_end = [pvals[i-1] for i in T]
		perm_begin = sorted(set(range(1,plength+1)) - set(map(abs,perm_end)))
		if self.type == 'D':
			negs = len([x for x in perm_end if x < 0])
			if negs%2 == 1:
				perm_begin[0] *= -1
		perm = perm_begin + perm_end
		if self.involve:
			perm = pf.involution(self.type,self.m,self.n,perm)
		return perm
示例#2
0
	def changzheng2index(self, perm):
		if self.involve:
			perm = pf.involution(self.type,self.m,self.n,perm)
		plength = self.m+self.k
		if self.type == 'A':
			return [perm[i] for i in range(self.k,plength)]
		pvals = range(-plength,0) + range(1, plength+1)
		perm_end = [perm[i] for i in range(plength-self.m,plength)]
		P = [pvals.index(i)+1 for i in perm_end]
		if self.type == 'B':
			for i in range(self.m):
				if P[i] > self.n:
					P[i] += 1
		return P			
示例#3
0
	def index_involution(self,P):
		return self.perm2index(pf.involution(self.type,self.m,self.n,self.index2perm(P)))