Attachment 'jeu_taquin.py'
Download 1 ####################################################################################
2 # #
3 # Takes the poset, a vertex and a dictionary as input and returns a map (in the #
4 # form of a list) for making a new dictionary. #
5 # #
6 ####################################################################################
7
8 def assignment_map(pos,vert,dic,comp):
9 upc=pos.upper_covers(vert)
10 kgo=False
11 next=None
12 value=len(pos.list())+1
13
14 for x in upc:
15 a=x.element
16
17 if dic[a][0]==comp and dic[a][1]<value:
18 next=x
19 value=dic[a][1]
20
21 if next is not None:
22 shift=[[dic[vert],(comp,value)]]
23 kgo=True
24
25 while kgo:
26 upc=pos.upper_covers(next)
27
28 if upc==[]:
29 kgo=False
30 shift.append([dic[next.element],dic[vert]])
31 else:
32 test=None
33 value=len(pos.list())+1
34 for x in upc:
35 a=x.element
36 if dic[a][0]==comp and dic[a][1]<value:
37 test=x
38 value=dic[a][1]
39 if test is not None:
40 shift.append([dic[next.element],dic[test.element]])
41 next=test
42 else:
43 kgo=False
44 shift.append([dic[next.element],dic[vert]])
45
46 if next is not None:
47 return shift
48
49 ########################################################################################
50 # #
51 # Gets a tuple corresponding to next poset #
52 # #
53 ########################################################################################
54
55 def get_vertex(dic,val,tag,istuple=True):
56 V = dic.values()
57 K = dic.keys()
58 D2 = dict((V[i],K[i]) for i in xrange(len(V)))
59 if istuple:
60 return D2.get((tag,val))
61 else:
62 return D2.get(val)
63
64 #######################################################################################
65 # #
66 # Gets amount of elements in the ideal #
67 # #
68 #######################################################################################
69 def amount_ideal(dic,ideal):
70 amount=0
71 for i in xrange(len(dic)):
72 if dic.values()[i][0]==ideal:
73 amount += 1
74
75 return amount
76
77 #######################################################################################
78 # #
79 # Creates a new dictionary with the input map #
80 # #
81 #######################################################################################
82
83 def dic_shift(map,dic):
84 for pos_key in dic.iterkeys():
85 for map_el in map:
86 if dic[pos_key]==map_el[0]:
87 dic[pos_key]=map_el[1]
88 break
89 return dic
90
91 #######################################################################################
92 # #
93 # Jeu de taquin function. Plays out jeu de taquin for poset. #
94 # #
95 # dictionary must be of the form: D1 = {(0,0):('a',1), (0,1):('a',2), (1,0):('a',3), #
96 # (2,0):('a',4), (1,1):('b',1), (2,1):('b',2), (0,2):('b',3), (1,2):('b',4), #
97 # (2,2):('b',5)} #
98 # #
99 #######################################################################################
100
101 def jeu_taquin(pos,dic,ideal='a',comp='b'):
102 newdic = dic
103 length = amount_ideal(dic,ideal)
104
105 for i in xrange(length,0,-1):
106 ver=get_vertex(newdic,i,ideal) # gets a tuple representing a vertex in the ideal
107 map=assignment_map(pos,ver,newdic,comp) # creates a map for modifying the dict.
108 newdic=dic_shift(map,newdic) # creates a new dictionary with the map
109
110 return newdic
111
112 ########################################################################################
113 # #
114 # Promoter function. Given a numbered poset, plays out one promotion. #
115 # #
116 # dictionary must be of the form:
117 #
118 #
119 ########################################################################################
120
121
122 def promoter(pos,dic):
123 dic[get_vertex(dic,1,None,istuple=False)]=('a',1)
124
125 for i in range(2,len(pos.list())+1):
126 dic[get_vertex(dic,i,None,istuple=False)]=('b',i-1)
127
128 dic=jeu_taquin(pos,dic)
129
130 dic[get_vertex(dic,1,'a')]=len(pos.list())
131
132 for i in range(1,len(pos.list())):
133 dic[get_vertex(dic,i,'b')]=i
134
135 #########################################################################################
136 # #
137 # Executes n promotions on the input poset #
138 # #
139 #########################################################################################
140
141 def promotion_loop(pos,dic,n):
142 set=pos
143 for i in range(n):
144 set=promoter(set,dic)
145
146 return set
147
Attached Files
To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.You are not allowed to attach a file to this page.