1 /*
2    symmetric source code
3    for the computation of the plethysm
4    h_I[S_J]
5 */
6 
7 #include "def.h"
8 #include "macro.h"
9 
plet_homsym_schur(a,b,c)10 INT plet_homsym_schur(a,b,c) OP a,b,c;
11 /* AK 051201 */
12 /* AK 210704 V3.0 */
13 {
14     INT erg = OK;
15     CTTTTO(HASHTABLE,INTEGER,PARTITION,HOMSYM,"plet_homsym_schur(1)",a);
16     CTTTO(HASHTABLE,PARTITION,SCHUR,"plet_homsym_schur(2)",b);
17     CTTTO(EMPTY,HASHTABLE,SCHUR,"plet_homsym_schur(3)",c);
18 #ifdef PLETTRUE
19     {
20     INT t=0; /* is 1 if transfer HASHTABLE->SCHUR necessary */
21 
22     if (S_O_K(c) == EMPTY)
23         { t=1; init_hashtable(c); }
24 
25     phs___(a,b,c,cons_eins);
26     if (t==1) t_HASHTABLE_SCHUR(c,c);
27     }
28 #endif
29     ENDR("plet_homsym_schur");
30 }
phs_ende()31 INT phs_ende()
32 {
33     INT erg = OK;
34     return erg;
35 }
36 
37 #ifdef PLETTRUE
38 INT phs_integer_partition_();
39 INT phs_integer_hashtable_();
40 INT phs___();
41 
phs_null__(b,c,f)42 INT phs_null__(b,c,f) OP b,c,f;
43 {
44     INT mxx_null__();
45     return mxx_null__(b,c,f);
46 }
47 
phs_integer_hashtable_(a,b,c,f)48 INT phs_integer_hashtable_(a,b,c,f) OP a,b,c,f;
49 /* AK 061101 */
50 {
51     INT erg = OK;
52 
53     CTO(INTEGER,"phs_integer_hashtable_(1)",a);
54     CTTO(HASHTABLE,SCHUR,"phs_integer_hashtable_(2)",b);
55     CTTO(SCHUR,HASHTABLE,"integer_hashtable_(3)",c);
56     NYI("phs_integer_hashtable_");
57 
58     ENDR("phs_integer_hashtable_");
59 }
60 
phs_integer__(a,b,c,f)61 INT phs_integer__(a,b,c,f) OP a,b,c; OP f;
62 /* AK 051201 */
63 {
64     INT erg = OK;
65 
66     CTO(INTEGER,"phs_integer__(1)",a);
67     CTTTO(HASHTABLE,PARTITION,SCHUR,"phs_integer__(2)",b);
68     CTTO(HASHTABLE,SCHUR,"phs_integer__(3)",c);
69 
70     SYMCHECK((S_I_I(a) < 0) , "phs_integer__:integer<0");
71 
72     if (S_I_I(a) == 0) {
73         erg += phs_null__(b,c,f);
74         }
75 
76     else if (S_O_K(b) == PARTITION)
77         erg += phs_integer_partition_(a,b,c,f);
78     else if (S_O_K(b) == SCHUR)
79         {
80         INT mss_hashtable_hashtable_();
81         INT p_schursum();
82         if (S_S_N(b) == NULL)
83             erg += phs_integer_partition_(a,S_S_S(b),c,f);
84         else
85             erg += p_schursum(a,b,c,f,NULL,phs_integer__,mss_hashtable_hashtable_);
86         }
87     else
88         {
89         erg += phs_integer_hashtable_(a,b,c,f);
90         }
91 
92 
93     ENDR("phs_integer__");
94 }
95 
phs_partition__(a,b,c,f)96 INT phs_partition__(a,b,c,f) OP a,b,c; OP f;
97 {
98     INT erg = OK;
99     CTO(PARTITION,"phs_partition__(1)",a);
100     CTTTO(HASHTABLE,SCHUR,PARTITION,"phs_partition__(2)",b);
101     CTTO(HASHTABLE,SCHUR,"phs_partition__(3)",c);
102 
103     if (S_PA_LI(a) == 0) {
104         erg += phs_null__(b,c,f);
105         goto ende;
106         }
107     else if (S_PA_LI(a) == 1) {
108         erg += phs_integer__(S_PA_I(a,0),b,c,f);
109         goto ende;
110         }
111     else{
112         INT p_splitpart();
113         INT mss_hashtable_hashtable_();
114         erg += p_splitpart(a,b,c,f,phs_partition__,
115                                    mss_hashtable_hashtable_);
116         goto ende;
117         }
118 
119 ende:
120     CTTO(HASHTABLE,SCHUR,"phs_partition__(3)",c);
121     ENDR("phs_partition__");
122 }
123 
124 
125 
phs_homsym__(a,b,c,f)126 INT phs_homsym__(a,b,c,f) OP a,b,c,f;
127 /* AK 051201 */
128 /* c += p_a [p_b]  \times f */
129 {
130     INT erg = OK;
131     CTO(HOMSYM,"phs_homsym__(1)",a);
132     CTTTO(HASHTABLE,PARTITION,SCHUR,"phs_homsym__(2)",b);
133     CTTO(HASHTABLE,SCHUR,"phs_homsym__(3)",c);
134 
135     M_FORALL_MONOMIALS_IN_A(a,b,c,f,phs_partition__);
136 
137     ENDR("phs_homsym__");
138 }
139 
phs_hashtable__(a,b,c,f)140 INT phs_hashtable__(a,b,c,f) OP a,b,c,f;
141 /* AK 051201 */
142 /* c += p_a [p_b]  \times f */
143 {
144     INT erg = OK;
145     CTO(HASHTABLE,"phs_hashtable__(1)",a);
146     CTTTO(HASHTABLE,PARTITION,SCHUR,"phs_hashtable__(2)",b);
147     CTTO(HASHTABLE,SCHUR,"phs_hashtable__(3)",c);
148     M_FORALL_MONOMIALS_IN_A(a,b,c,f,phs_partition__);
149 
150     CTTO(HASHTABLE,SCHUR,"phs_hashtable__(3-end)",c);
151     ENDR("phs_hashtable__");
152 }
153 
phs_null_partition_(b,c,f)154 INT phs_null_partition_(b,c,f) OP b,c,f;
155 /* AK 061201 */
156 {
157     INT erg = OK;
158     CTO(PARTITION,"phs_null_partition(1)",b);
159     CTTO(SCHUR,HASHTABLE,"phs_null_partition(2)",c);
160     _NULL_PARTITION_(b,c,f);
161     ENDR("phs_null_partition");
162 }
163 
phs_integer_partition_(a,b,c,f)164 INT phs_integer_partition_(a,b,c,f) OP a,b,c,f;
165 /* AK 051201 */
166 {
167     INT erg = OK;
168     INT cc_plet_phs_integer_partition();
169 
170     CTO(INTEGER,"phs_integer_partition_(1)",a);
171     CTO(PARTITION,"phs_integer_partition_(2)",b);
172     CTTO(SCHUR,HASHTABLE,"phs_integer_partition_(3)",c);
173     SYMCHECK ((S_I_I(a) < 0),"phs_integer_partition_:integer<0");
174 
175     if (S_I_I(a) == 0) {
176         erg += phs_null_partition_(b,c,f);
177         goto ende;
178         }
179 
180     erg += cc_plet_phs_integer_partition(a,b,c,f);
181 
182 ende:
183     ENDR("phs_integer_partition_");
184 }
185 
186 
187 
phs___(a,b,c,f)188 INT phs___(a,b,c,f) OP a,b,c,f;
189 {
190     INT erg = OK;
191     CTTTTO(HASHTABLE,INTEGER,PARTITION,HOMSYM,"phs___(1)",a);
192     CTTTO(HASHTABLE,PARTITION,SCHUR,"phs___(2)",b);
193     CTTO(HASHTABLE,SCHUR,"phs___(3)",c);
194     if (S_O_K(a) == INTEGER)
195         {
196         erg += phs_integer__(a,b,c,f);
197         goto ende;
198         }
199     else if (S_O_K(a) == PARTITION)
200         {
201         erg += phs_partition__(a,b,c,f);
202         goto ende;
203         }
204     else if (S_O_K(a) == HOMSYM)
205         {
206         erg += phs_homsym__(a,b,c,f);
207         goto ende;
208         }
209     else /* if (S_O_K(a) == HASHTABLE) */
210         {
211         erg += phs_hashtable__(a,b,c,f);
212         goto ende;
213         }
214 ende:
215     CTTO(HASHTABLE,SCHUR,"phs___(3-end)",c);
216 
217     ENDR("phs___");
218 }
219 
220 
221 #endif /* PLETTRUE */
222