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