1
2 #include "def.h"
3 #include "macro.h"
4
5 #ifdef UNDEF
6 INT psh_partition__();
psh_ende()7 INT psh_ende()
8 {
9 return OK;
10 }
11
12
psh_null__(b,c,f)13 INT psh_null__(b,c,f) OP b,c,f;
14 {
15 return mxx_null__(b,c,f);
16 }
17
psh_integer_homsym_(a,b,c,f)18 INT psh_integer_homsym_(a,b,c,f) OP a,b,c,f;
19 {
20 INT erg = OK;
21 INT mhh_hashtable_hashtable_();
22 CTO(INTEGER,"psh_integer_homsym_(1)",a);
23 CTO(HOMSYM,"psh_integer_homsym_(2)",b);
24 CTTO(HASHTABLE,HOMSYM,"psh_integer_homsym_(3)",c);
25 SYMCHECK((S_I_I(a) < 0) , "psh_integer_homsym_:integer < 0");
26
27 if (S_I_I(a) == 0) {
28 erg += psh_null__(b,c,f);
29 goto ende;
30 }
31 else if (S_S_N(b) == NULL) {
32 erg += psh_integer_partition_(a,S_S_S(b),c,f);
33 goto ende;
34 }
35 else {
36 erg += p_schursum(a,b,c,f,NULL,psh_integer_homsym_,
37 mhh_hashtable_hashtable_);
38 goto ende;
39 }
40 ende:
41 ENDR("psh_integer_homsym_");
42 }
43
44
psh_integer__(a,b,c,f)45 INT psh_integer__(a,b,c,f) OP a,b,c; OP f;
46 /* AK 051201 */
47 {
48 INT erg = OK;
49 OP ff;
50
51 CTO(INTEGER,"psh_integer__(1)",a);
52 CTTTO(HASHTABLE,PARTITION,HOMSYM,"psh_integer__(2)",b);
53 CTTO(HASHTABLE,HOMSYM,"psh_integer__(3)",c);
54 SYMCHECK((S_I_I(a) < 0) , "psh_integer__:integer < 0");
55
56 if (S_I_I(a) == 0)
57 erg += psh_null__(b,c,f);
58 else if (S_O_K(b) == PARTITION)
59 erg += psh_integer_partition_(a,b,c,f);
60 else if (S_O_K(b) == HOMSYM)
61 erg += psh_integer_homsym_(a,b,c,f);
62 else
63 NYI("psh_integer__");
64
65 ENDR("psh_integer__");
66 }
67
68
69
psh_schur__(a,b,c,f)70 INT psh_schur__(a,b,c,f) OP a,b,c,f;
71 /* AK 051201 */
72 /* c += p_a [p_b] \times f */
73 {
74 INT erg = OK;
75 CTO(SCHUR,"psh_schur__(1)",a);
76 CTTTO(HASHTABLE,PARTITION,HOMSYM,"psh_schur__(2)",b);
77 CTTO(HASHTABLE,HOMSYM,"psh_schur__(3)",c);
78 M_FORALL_MONOMIALS_IN_A(a,b,c,f,psh_partition__);
79 ENDR("psh_schur__");
80 }
81
psh_hashtable__(a,b,c,f)82 INT psh_hashtable__(a,b,c,f) OP a,b,c,f;
83 /* AK 051201 */
84 /* c += p_a [p_b] \times f */
85 {
86 INT erg = OK;
87 CTO(HASHTABLE,"psh_hashtable__(1)",a);
88 CTTTO(HASHTABLE,PARTITION,HOMSYM,"psh_hashtable__(2)",b);
89 CTTO(HASHTABLE,HOMSYM,"psh_hashtable__(3)",c);
90 M_FORALL_MONOMIALS_IN_A(a,b,c,f,psh_partition__);
91 ENDR("psh_hashtable__");
92 }
93
psh_partition_partition_(a,b,c,f)94 INT psh_partition_partition_(a,b,c,f) OP a,b,c,f;
95 {
96 INT erg = OK;
97 INT i,w;
98 CTO(PARTITION,"psh_partition_partition_(1)",a);
99 CTO(PARTITION,"psh_partition_partition_(2)",b);
100 CTO(HASHTABLE,"psh_partition_partition_(3)",c);
101
102 if (S_PA_LI(a) == 0) {
103 erg += psh_null__(b,c,f);
104 goto ende;
105 }
106 /* theorem of conjugates */
107 for (i=0,w=0;i<S_PA_LI(b);i++) w += S_PA_II(b,i);
108 if (w % 2 == 0)
109 {
110 erg += pse_partition_partition_(a,b,c,f);
111 }
112 else
113 {
114 OP p = CALLOCOBJECT();
115 conjugate_partition(a,p);
116 erg += pse_partition_partition_(p,b,c,f);
117 FREEALL(p);
118 }
119 ende:
120 ENDR("psh_partition_partition_");
121 }
122
123
psh_partition_homsym_(a,b,c,f)124 INT psh_partition_homsym_(a,b,c,f) OP a,b,c,f;
125 {
126 INT erg = OK;
127 CTO(PARTITION,"psh_partition_homsym_(1)",a);
128 CTO(HOMSYM,"psh_partition_homsym_(2)",b);
129 CTTO(HASHTABLE,HOMSYM,"psh_partition_homsym_(3)",c);
130
131 if (S_PA_LI(a) == 0) {
132 erg += psh_null__(b,c,f);
133 }
134 else if (S_PA_LI(a) == 1) {
135 erg += psh_integer__(S_PA_I(a,0),b,c,f);
136 }
137 else if (S_S_N(b) == NULL) {
138 erg += psh_partition_partition_(a,S_S_S(b),c,f);
139 goto ende;
140 }
141 else {
142 INT mhh_hashtable_hashtable_();
143 /* loop over all partitions smaller then a */
144 /* S_a[b1+b2] = \sum_d<a S_a/d [b1] * S_d[b2] */
145 erg += p_schursum(a,b,c,f,psh_schur__,
146 psh_partition_homsym_,
147 mhh_hashtable_hashtable_);
148 goto ende;
149 }
150
151 ende:
152 ENDR("psh_partition_homsym_");
153 }
154
psh_partition__(a,b,c,f)155 INT psh_partition__(a,b,c,f) OP a,b,c; OP f;
156 {
157 INT erg = OK;
158 CTO(PARTITION,"psh_partition__(1)",a);
159 CTTTO(HASHTABLE,HOMSYM,PARTITION,"psh_partition__(2)",b);
160 CTTO(HASHTABLE,HOMSYM,"psh_partition__(3)",c);
161
162 if (S_PA_LI(a) == 0) {
163 erg += psh_null__(b,c,f);
164 }
165 else if (S_PA_LI(a) == 1) {
166 erg += psh_integer__(S_PA_I(a,0),b,c,f);
167 }
168 else if (S_O_K(b) == PARTITION)
169 {
170 erg += psh_partition_partition_(a,b,c,f);
171 }
172 else if (S_O_K(b) == HOMSYM)
173 {
174 erg += psh_partition_homsym_(a,b,c,f);
175 }
176 else /* HASHTABLE */
177 {
178 erg += psh_partition_hashtable_(a,b,c,f);
179 }
180
181 ENDR("psh_partition__");
182 }
183
psh___(a,b,c,f)184 INT psh___(a,b,c,f) OP a,b,c,f;
185 {
186 INT erg = OK;
187 CTTTTO(HASHTABLE,INTEGER,PARTITION,SCHUR,"psh___(1)",a);
188 CTTTO(HASHTABLE,PARTITION,HOMSYM,"psh___(2)",b);
189 CTTO(HOMSYM,HASHTABLE,"psh___(3)",c);
190 if (S_O_K(a) == INTEGER)
191 {
192 erg += psh_integer__(a,b,c,f);
193 }
194 else if (S_O_K(a) == PARTITION)
195 {
196 erg += psh_partition__(a,b,c,f);
197 }
198 else if (S_O_K(a) == SCHUR)
199 {
200 erg += psh_schur__(a,b,c,f);
201 }
202 else /* if (S_O_K(a) == HASHTABLE) */
203 {
204 erg += psh_hashtable__(a,b,c,f);
205 }
206
207 CTTO(HOMSYM,HASHTABLE,"psh___(3-ende)",c);
208 ENDR("psh___");
209 }
210 #endif
211
212
213 INT tsp___faktor();
214 INT pph___();
215
plet_schur_homsym(a,b,c)216 INT plet_schur_homsym(a,b,c) OP a,b,c;
217 /* AK 061201
218 */
219 {
220 INT t=0,erg = OK;
221 CTTTTO(HASHTABLE,INTEGER,PARTITION,SCHUR,"plet_schur_homsym(1)",a);
222 CTTTTO(INTEGER,HASHTABLE,PARTITION,HOMSYM,"plet_schur_homsym(2)",b);
223 CTTTO(EMPTY,HASHTABLE,HOMSYM,"plet_schur_homsym(3)",c);
224
225 if (S_O_K(c) == EMPTY)
226 { t=1; init_hashtable(c); }
227 else if (S_O_K(c) == HOMSYM)
228 { t=1; t_HOMSYM_HASHTABLE(c); }
229 /*
230 psh___(a,b,c,cons_eins);
231 */
232 {
233 /* via pph with change of basis */
234 OP f = CALLOCOBJECT();
235 erg += init_hashtable(f);
236 erg += tsp___faktor(a,f,cons_eins);
237 erg += pph___(f,b,c,cons_eins);
238 FREEALL(f);
239 }
240
241 if (t==1) t_HASHTABLE_HOMSYM(c,c);
242 ENDR("plet_schur_homsym");
243 }
244
245
246