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