1
2
3 #include "def.h"
4 #include "macro.h"
5
pph_ende()6 INT pph_ende()
7 {
8 return OK;
9 }
10
11 INT m_merge_partition_partition();
12 INT pph_integer_partition_();
13 INT pph_integer_hashtable_();
14 INT pph_integer_integer_();
15 INT pph___();
16 INT tsp___faktor();
17 INT ppp___();
18 INT tep___faktor();
19 INT thp___faktor();
20 INT tmp___faktor();
21
pph_null__(b,c,f)22 INT pph_null__(b,c,f) OP b,c,f;
23 {
24 INT mxx_null__();
25 return mxx_null__(b,c,f);
26 }
27
pph_integer__(a,b,c,f)28 INT pph_integer__(a,b,c,f) OP a,b,c; OP f;
29 /* AK 051201 */
30 {
31 INT erg = OK;
32
33 CTO(INTEGER,"pph_integer__(1)",a);
34 CTTTTO(HASHTABLE,PARTITION,HOMSYM,INTEGER,"pph_integer__(2)",b);
35 CTTO(HASHTABLE,HOMSYM,"pph_integer__(3)",c);
36
37 if (S_O_K(b) == PARTITION)
38 erg += pph_integer_partition_(a,b,c,f);
39 else if (S_O_K(b) == INTEGER)
40 erg += pph_integer_integer_(a,b,c,f);
41 else
42 M_FORALL_MONOMIALS_IN_B(a,b,c,f,pph_integer_partition_);
43
44
45 ENDR("pph_integer__");
46 }
47
48 INT mpp_hashtable_hashtable_();
49 INT pph_null_partition_();
pph_partition__(a,b,c,f)50 INT pph_partition__(a,b,c,f) OP a,b,c; OP f;
51 {
52 INT erg = OK;
53 CTO(PARTITION,"pph_partition__(1)",a);
54 CTTTTO(HASHTABLE,HOMSYM,PARTITION,INTEGER,"pph_partition__(2)",b);
55 CTTO(HASHTABLE,HOMSYM,"pph_partition__(3)",c);
56
57 if (S_PA_LI(a) == 0) {
58 erg += pph_null__(b,c,f);
59 }
60 else if (S_PA_LI(a) == 1) {
61 erg += pph_integer__(S_PA_I(a,0),b,c,f);
62 }
63 else{
64 INT mhh_hashtable_hashtable_();
65 INT p_splitpart();
66 erg += p_splitpart(a,b,c,f,pph_partition__,
67 mhh_hashtable_hashtable_);
68 }
69 ENDR("pph_partition__");
70 }
71
72
73
pph_powsym__(a,b,c,f)74 INT pph_powsym__(a,b,c,f) OP a,b,c,f;
75 /* AK 051201 */
76 /* c += p_a [p_b] \times f */
77 {
78 INT erg = OK;
79 CTO(POWSYM,"pph_powsym__(1)",a);
80 CTTTTO(INTEGER,HASHTABLE,PARTITION,HOMSYM,"pph_powsym__(2)",b);
81 CTTO(HASHTABLE,HOMSYM,"pph_powsym__(3)",c);
82
83 M_FORALL_MONOMIALS_IN_A(a,b,c,f,pph_partition__);
84
85 ENDR("pph_powsym__");
86 }
87
pph_hashtable__(a,b,c,f)88 INT pph_hashtable__(a,b,c,f) OP a,b,c,f;
89 /* AK 051201 */
90 /* c += p_a [p_b] \times f */
91 {
92 INT erg = OK;
93 CTO(HASHTABLE,"pph_hashtable__(1)",a);
94 CTTTTO(INTEGER,HASHTABLE,PARTITION,HOMSYM,"pph_hashtable__(2)",b);
95 CTTO(HASHTABLE,HOMSYM,"pph_hashtable__(3)",c);
96 M_FORALL_MONOMIALS_IN_A(a,b,c,f,pph_partition__);
97
98 ENDR("pph_hashtable__");
99 }
100
pph_hashtable_hashtable_(a,b,c,f)101 INT pph_hashtable_hashtable_(a,b,c,f) OP a,b,c,f;
102 /* AK 051201 */
103 /* c += p_a [p_b] \times f */
104 {
105 INT erg = OK;
106 CTO(HASHTABLE,"pph_hashtable_hashtable_(1)",a);
107 CTO(HASHTABLE,"pph_hashtable_hashtable_(2)",b);
108 CTTO(HASHTABLE,HOMSYM,"pph_hashtable_hashtable_(3)",c);
109 M_FORALL_MONOMIALS_IN_AB(a,b,c,f,pph_partition__);
110
111 ENDR("pph_hashtable_hashtable_");
112 }
113
pph_null_partition_(b,c,f)114 INT pph_null_partition_(b,c,f) OP b,c,f;
115 /* AK 061201 */
116 {
117 INT erg = OK;
118 CTO(PARTITION,"pph_null_partition(1)",b);
119 CTTO(HOMSYM,HASHTABLE,"pph_null_partition(2)",c);
120 _NULL_PARTITION_(b,c,f);
121 ENDR("pph_null_partition");
122 }
123
pph_integer_partition_(a,b,c,f)124 INT pph_integer_partition_(a,b,c,f) OP a,b,c,f;
125 /* AK 051201 */
126 {
127 INT erg = OK;
128
129 CTO(INTEGER,"pph_integer_partition_(1)",a);
130 CTO(PARTITION,"pph_integer_partition_(2)",b);
131 CTO(HASHTABLE,"pph_integer_partition_(3)",c);
132 SYMCHECK ((S_I_I(a) < 0),"pph_integer_partition_:integer<0");
133
134 if (S_I_I(a) == 0) {
135 erg += pph_null_partition_(b,c,f);
136 goto ende;
137 }
138 else if (S_PA_LI(b) == 0) {
139 erg += pph_null__(b,c,f);
140 goto ende;
141 }
142 else if (S_PA_LI(b) == 1) {
143 erg += pph_integer_integer_(a,S_PA_I(b,0),c,f);
144 goto ende;
145 }
146 else
147 {
148 INT mhh_hashtable_hashtable_();
149 INT p_splitpart2();
150 erg += p_splitpart2(a,b,c,f,pph_integer_partition_,
151 mhh_hashtable_hashtable_);
152 goto ende;
153 }
154
155 ende:
156 ENDR("pph_integer_partition_");
157 }
158
pph_integer_integer_(a,b,c,f)159 INT pph_integer_integer_(a,b,c,f) OP a,b,c,f;
160 /* AK 051201 */
161 {
162 INT erg = OK;
163 INT ppe_integer_integer_();
164
165 CTO(INTEGER,"pph_integer_integer_(1)",a);
166 CTO(INTEGER,"pph_integer_integer_(2)",b);
167 CTO(HASHTABLE,"pph_integer_integer_(3)",c);
168 SYMCHECK ((S_I_I(a) < 0),"pph_integer_integer_:integer<0");
169
170 if (S_I_I(a) == 0) {
171 erg += pph_null__(b,c,f);
172 goto ende;
173 }
174
175 if (S_I_I(a) % 2 == 1)
176 {
177 erg += ppe_integer_integer_(a,b,c,f);
178 goto ende;
179 }
180 else if (S_I_I(b) % 2 == 0)
181 {
182 erg += ppe_integer_integer_(a,b,c,f);
183 goto ende;
184 }
185 else
186 {
187 OP ff;
188 ff = CALLOCOBJECT();
189 ADDINVERS(f,ff);
190 erg += ppe_integer_integer_(a,b,c,ff);
191 FREEALL(ff);
192 goto ende;
193 }
194 ende:
195 CTO(HASHTABLE,"pph_integer_integer_(3-ende)",c);
196 ENDR("pph_integer_integer_");
197 }
198
199
pph_integer_hashtable_(a,b,c,f)200 INT pph_integer_hashtable_(a,b,c,f) OP a,b,c,f;
201 /* AK 061101 */
202 {
203 INT erg = OK;
204
205 CTO(INTEGER,"pph_integer_hashtable_(1)",a);
206 CTTO(HASHTABLE,HOMSYM,"pph_integer_hashtable_(2)",b);
207 CTTO(POWSYM,HASHTABLE,"integer_hashtable_(3)",c);
208 SYMCHECK ((S_I_I(a) < 0),"pph_integer_hashtable_:integer<0");
209
210 if (S_I_I(a) == 0) {
211 erg += pph_null__(b,c,f);
212 goto ende;
213 }
214
215 M_FORALL_MONOMIALS_IN_B(a,b,c,f,pph_integer_partition_);
216
217 ende:
218 ENDR("pph_integer_hashtable_");
219 }
220
221
222
223
pph___(a,b,c,f)224 INT pph___(a,b,c,f) OP a,b,c,f;
225 {
226 INT erg = OK;
227 CTTTTO(HASHTABLE,INTEGER,PARTITION,POWSYM,"pph___(1)",a);
228 CTTTTO(HASHTABLE,PARTITION,HOMSYM,INTEGER,"pph___(2)",b);
229 CTO(HASHTABLE,"pph___(3)",c);
230 if (S_O_K(a) == INTEGER)
231 {
232 erg += pph_integer__(a,b,c,f);
233 }
234 else if (S_O_K(a) == PARTITION)
235 {
236 erg += pph_partition__(a,b,c,f);
237 }
238 else if (S_O_K(a) == POWSYM)
239 {
240 erg += pph_powsym__(a,b,c,f);
241 }
242 else /* if (S_O_K(a) == HASHTABLE) */
243 {
244 erg += pph_hashtable__(a,b,c,f);
245 }
246
247 ENDR("pph___");
248 }
249
plet_powsym_homsym(a,b,c)250 INT plet_powsym_homsym(a,b,c) OP a,b,c;
251 /* AK 061201
252 */
253 {
254 INT erg = OK;
255 INT t=0;
256 CTTTTO(HASHTABLE,INTEGER,PARTITION,POWSYM,"plet_powsym_homsym(1)",a);
257 CTTTTO(INTEGER,HASHTABLE,PARTITION,HOMSYM,"plet_powsym_homsym(2)",b);
258 CTTTO(EMPTY,HASHTABLE,HOMSYM,"plet_powsym_homsym(3)",c);
259
260
261 if (S_O_K(c) == EMPTY)
262 { t=1; init_hashtable(c); }
263 else if (S_O_K(c) == HOMSYM)
264 { t=1; t_HOMSYM_HASHTABLE(c,c); }
265 pph___(a,b,c,cons_eins);
266 if (t==1) t_HASHTABLE_HOMSYM(c,c);
267 ENDR("plet_powsym_homsym");
268 }
269
270
271
plet_schur_powsym(a,b,c)272 INT plet_schur_powsym(a,b,c) OP a,b,c;
273 /* AK 061201
274 */
275 {
276 INT t=0,erg = OK;
277 CTTTTO(HASHTABLE,INTEGER,PARTITION,SCHUR,"plet_schur_powsym(1)",a);
278 CTTTTO(INTEGER,HASHTABLE,PARTITION,POWSYM,"plet_schur_powsym(2)",b);
279 CTTTO(EMPTY,HASHTABLE,POWSYM,"plet_schur_powsym(3)",c);
280
281
282 if (S_O_K(c) == EMPTY) {
283 t=1; init_hashtable(c); }
284 /*
285 pph___(a,b,c,cons_eins);
286 */
287 {
288 /* via ppp with change of basis */
289 OP f = CALLOCOBJECT();
290 erg += init_hashtable(f);
291 erg += tsp___faktor(a,f,cons_eins);
292 erg += ppp___(f,b,c,cons_eins);
293 FREEALL(f);
294 }
295
296 if (t==1) t_HASHTABLE_POWSYM(c,c);
297
298 ENDR("plet_schur_powsym");
299 }
300
301 /* elmsym plethysm */
302
303
plet_elmsym_powsym(a,b,c)304 INT plet_elmsym_powsym(a,b,c) OP a,b,c;
305 /* AK 061201
306 */
307 {
308 INT t=0,erg = OK;
309 CTTTTO(HASHTABLE,INTEGER,PARTITION,ELMSYM,"plet_elmsym_powsym(1)",a);
310 CTTTTO(INTEGER,HASHTABLE,PARTITION,POWSYM,"plet_elmsym_powsym(2)",b);
311 CTTTO(EMPTY,HASHTABLE,POWSYM,"plet_elmsym_powsym(3)",c);
312
313
314 if (S_O_K(c) == EMPTY) {
315 t=1; init_hashtable(c); }
316 /*
317 pph___(a,b,c,cons_eins);
318 */
319 {
320 /* via ppp with change of basis */
321 OP f = CALLOCOBJECT();
322 erg += init_hashtable(f);
323 erg += tep___faktor(a,f,cons_eins);
324 erg += ppp___(f,b,c,cons_eins);
325 FREEALL(f);
326 }
327
328 if (t==1) t_HASHTABLE_POWSYM(c,c);
329
330 ENDR("plet_elmsym_powsym");
331 }
332
333 /* homsym plethysm */
334
335
336
plet_homsym_powsym(a,b,c)337 INT plet_homsym_powsym(a,b,c) OP a,b,c;
338 /* AK 061201
339 */
340 {
341 INT t=0,erg = OK;
342 CTTTTO(HASHTABLE,INTEGER,PARTITION,HOMSYM,"plet_homsym_powsym(1)",a);
343 CTTTTO(INTEGER,HASHTABLE,PARTITION,POWSYM,"plet_homsym_powsym(2)",b);
344 CTTTO(EMPTY,HASHTABLE,POWSYM,"plet_homsym_powsym(3)",c);
345
346
347 if (S_O_K(c) == EMPTY) {
348 t=1; init_hashtable(c); }
349 /*
350 pph___(a,b,c,cons_eins);
351 */
352 {
353 /* via ppp with change of basis */
354 OP f = CALLOCOBJECT();
355 erg += init_hashtable(f);
356 erg += thp___faktor(a,f,cons_eins);
357 erg += ppp___(f,b,c,cons_eins);
358 FREEALL(f);
359 }
360
361 if (t==1) t_HASHTABLE_POWSYM(c,c);
362
363 ENDR("plet_homsym_powsym");
364 }
365
366 /* monomial plethysm */
plet_monomial_schur(a,b,c)367 INT plet_monomial_schur(a,b,c) OP a,b,c;
368 /* AK 061201
369 */
370 {
371 INT erg = OK;
372 CTTTTO(HASHTABLE,INTEGER,PARTITION,MONOMIAL,"plet_monomial_schur(1)",a);
373 CTTTTO(INTEGER,HASHTABLE,PARTITION,SCHUR,"plet_monomial_schur(2)",b);
374 CTTTO(EMPTY,HASHTABLE,SCHUR,"plet_monomial_schur(3)",c);
375
376 {
377 /* via ppp with change of basis */
378 OP d,e,f;
379 NEW_HASHTABLE(d);
380 NEW_HASHTABLE(e);
381 NEW_HASHTABLE(f);
382
383 erg += tmp___faktor(a,f,cons_eins);
384 erg += tsp___faktor(b,d,cons_eins);
385 erg += ppp___(f,d,e,cons_eins);
386
387 FREEALL(d);
388 FREEALL(f);
389 erg += t_POWSYM_SCHUR(e,c);
390 CTO(HASHTABLE,"plet_monomial_schur(ie)",e);
391 FREEALL(e);
392 }
393
394 CTTO(HASHTABLE,SCHUR,"plet_monomial_schur(e3)",c);
395 ENDR("plet_monomial_schur");
396 }
397
plet_monomial_monomial(a,b,c)398 INT plet_monomial_monomial(a,b,c) OP a,b,c;
399 /* AK 061201
400 */
401 {
402 INT erg = OK;
403 CTTTTO(HASHTABLE,INTEGER,PARTITION,MONOMIAL,"plet_monomial_monomial(1)",a);
404 CTTTTO(INTEGER,HASHTABLE,PARTITION,MONOMIAL,"plet_monomial_monomial(2)",b);
405 CTTTO(EMPTY,HASHTABLE,MONOMIAL,"plet_monomial_monomial(3)",c);
406
407 /*
408 if (S_O_K(c) == EMPTY)
409 t=1; init_hashtable(c); }
410 pph___(a,b,c,cons_eins);
411 */
412 {
413 /* via ppp with change of basis */
414 OP d = CALLOCOBJECT();
415 OP e = CALLOCOBJECT();
416 OP f = CALLOCOBJECT();
417 erg += init_hashtable(e);
418 erg += init_hashtable(d);
419 erg += init_hashtable(f);
420 erg += tmp___faktor(a,f,cons_eins);
421 erg += tmp___faktor(b,d,cons_eins);
422 erg += ppp___(f,d,e,cons_eins);
423 FREEALL(d);
424 FREEALL(f);
425 erg += t_POWSYM_MONOMIAL(e,c);
426 FREEALL(e);
427 }
428 /*
429 if (t==1) t_HASHTABLE_MONOMIAL(c,c);
430 */
431 ENDR("plet_monomial_monomial");
432 }
433
434
plet_monomial_powsym(a,b,c)435 INT plet_monomial_powsym(a,b,c) OP a,b,c;
436 /* AK 061201
437 */
438 {
439 INT t=0,erg = OK;
440 CTTTTO(HASHTABLE,INTEGER,PARTITION,MONOMIAL,"plet_monomial_powsym(1)",a);
441 CTTTTO(INTEGER,HASHTABLE,PARTITION,POWSYM,"plet_monomial_powsym(2)",b);
442 CTTTO(EMPTY,HASHTABLE,POWSYM,"plet_monomial_powsym(3)",c);
443
444
445 if (S_O_K(c) == EMPTY) {
446 t=1; init_hashtable(c); }
447 /*
448 pph___(a,b,c,cons_eins);
449 */
450 {
451 /* via ppp with change of basis */
452 OP f = CALLOCOBJECT();
453 erg += init_hashtable(f);
454 erg += tmp___faktor(a,f,cons_eins);
455 erg += ppp___(f,b,c,cons_eins);
456 FREEALL(f);
457 }
458
459 if (t==1) t_HASHTABLE_POWSYM(c,c);
460
461 ENDR("plet_monomial_powsym");
462 }
463