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
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
def index_involution(self,P): return self.perm2index(pf.involution(self.type,self.m,self.n,self.index2perm(P)))