1
2 #include "def.h"
3 #include "macro.h"
4
ppp_ende()5 INT ppp_ende()
6 {
7 return OK;
8 }
9
10 INT m_merge_partition_partition();
11 INT ppp_integer_partition_();
12 INT ppp_integer_hashtable_();
13 INT ppp___();
14 INT mpp_hashtable_hashtable_();
15 INT ppp_null_partition_();
16 INT p_splitpart();
17 INT mxx_null__();
18
ppp_null__(b,c,f)19 INT ppp_null__(b,c,f) OP b,c,f;
20 {
21 return mxx_null__(b,c,f);
22 }
23
ppp_integer__(a,b,c,f)24 INT ppp_integer__(a,b,c,f) OP a,b,c; OP f;
25 /* AK 051201 */
26 {
27 INT erg = OK;
28
29 CTO(INTEGER,"ppp_integer__(1)",a);
30 CTTTO(HASHTABLE,PARTITION,POWSYM,"ppp_integer__(2)",b);
31 CTTO(HASHTABLE,POWSYM,"ppp_integer__(3)",c);
32 SYMCHECK((S_I_I(a) < 0),"ppp_integer__:integer < 0");
33 if (S_I_I(a) == 0)
34 erg += ppp_null__(b,c,f);
35
36
37 if (S_O_K(b) == PARTITION)
38 erg += ppp_integer_partition_(a,b,c,f);
39 else
40 M_FORALL_MONOMIALS_IN_B(a,b,c,f,ppp_integer_partition_);
41
42
43 ENDR("ppp_integer__");
44 }
45
46
ppp_partition__(a,b,c,f)47 INT ppp_partition__(a,b,c,f) OP a,b,c; OP f;
48 {
49 INT erg = OK;
50 CTO(PARTITION,"ppp_partition__(1)",a);
51 CTTTO(HASHTABLE,POWSYM,PARTITION,"ppp_partition__(2)",b);
52 CTTO(HASHTABLE,POWSYM,"ppp_partition__(3)",c);
53
54 if (S_PA_LI(a) == 0) {
55 erg += ppp_null__(b,c,f);
56 }
57 else if (S_PA_LI(a) == 1) {
58 erg += ppp_integer__(S_PA_I(a,0),b,c,f);
59 }
60 else{
61 erg += p_splitpart(a,b,c,f,ppp_partition__,
62 mpp_hashtable_hashtable_);
63 }
64
65 ENDR("ppp_partition__");
66 }
67
68
69
ppp_powsym__(a,b,c,f)70 INT ppp_powsym__(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(POWSYM,"ppp_powsym__(1)",a);
76 CTTTO(HASHTABLE,PARTITION,POWSYM,"ppp_powsym__(2)",b);
77 CTTO(HASHTABLE,POWSYM,"ppp_powsym__(3)",c);
78 M_FORALL_MONOMIALS_IN_A(a,b,c,f,ppp_partition__);
79 ENDR("ppp_powsym__");
80 }
81
ppp_hashtable__(a,b,c,f)82 INT ppp_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,"ppp_hashtable__(1)",a);
88 CTTTO(HASHTABLE,PARTITION,POWSYM,"ppp_hashtable__(2)",b);
89 CTTO(HASHTABLE,POWSYM,"ppp_hashtable__(3)",c);
90 M_FORALL_MONOMIALS_IN_A(a,b,c,f,ppp_partition__);
91 ENDR("ppp_hashtable__");
92 }
93
ppp_hashtable_hashtable_(a,b,c,f)94 INT ppp_hashtable_hashtable_(a,b,c,f) OP a,b,c,f;
95 /* AK 051201 */
96 /* c += p_a [p_b] \times f */
97 {
98 INT erg = OK;
99 CTO(HASHTABLE,"ppp_hashtable_hashtable_(1)",a);
100 CTO(HASHTABLE,"ppp_hashtable_hashtable_(2)",b);
101 CTTO(HASHTABLE,POWSYM,"ppp_hashtable_hashtable_(3)",c);
102 NYI("ppp_hashtable_hashtable_");
103 ENDR("ppp_hashtable_hashtable_");
104 }
105
ppp_null_partition_(b,c,f)106 INT ppp_null_partition_(b,c,f) OP b,c,f;
107 /* AK 061201 */
108 {
109 INT erg = OK;
110 CTO(PARTITION,"ppp_null_partition(1)",b);
111 CTTO(POWSYM,HASHTABLE,"ppp_null_partition(2)",c);
112 _NULL_PARTITION_(b,c,f);
113 ENDR("ppp_null_partition");
114 }
115
ppp_integer_partition_(a,b,c,f)116 INT ppp_integer_partition_(a,b,c,f) OP a,b,c,f;
117 /* AK 051201 */
118 {
119 INT erg = OK;
120 OP m;
121 INT i;
122
123 CTO(INTEGER,"ppp_integer_partition_(1)",a);
124 CTO(PARTITION,"ppp_integer_partition_(2)",b);
125 CTTO(POWSYM,HASHTABLE,"ppp_integer_partition_(3)",c);
126 SYMCHECK ((S_I_I(a) < 0),"ppp_integer_partition_:integer<0");
127
128 if (S_I_I(a) == 0) {
129 erg += ppp_null__(b,c,f);
130 goto ende;
131 }
132
133
134 m = CALLOCOBJECT();
135 erg += b_sk_mo(CALLOCOBJECT(),CALLOCOBJECT(),m);
136 erg += b_ks_pa(VECTOR,CALLOCOBJECT(),S_MO_S(m));
137 erg += m_il_v(S_PA_LI(b),S_PA_S(S_MO_S(m)));
138 C_O_K(S_PA_S(S_MO_S(m)),INTEGERVECTOR);
139 COPY(f, S_MO_K(m));
140 for (i=0;i<S_PA_LI(b);i++)
141 M_I_I(S_I_I(a)*S_PA_II(b,i),S_PA_I(S_MO_S(m),i));
142
143 if (S_O_K(c) == POWSYM)
144 INSERT_LIST(m,c,add_koeff,comp_monompowsym);
145 else
146 insert_scalar_hashtable(m,c,add_koeff,eq_monomsymfunc,hash_monompartition);
147
148 ende:
149 ENDR("ppp_integer_partition_");
150 }
151
ppp_integer_hashtable_(a,b,c,f)152 INT ppp_integer_hashtable_(a,b,c,f) OP a,b,c,f;
153 /* AK 061101 */
154 {
155 INT erg = OK;
156 CTO(INTEGER,"ppp_integer_hashtable_(1)",a);
157 CTTO(HASHTABLE,POWSYM,"ppp_integer_hashtable_(2)",b);
158 CTTO(POWSYM,HASHTABLE,"integer_hashtable_(3)",c);
159
160 NYI("ppp_integer_hashtable_");
161
162 ENDR("ppp_integer_hashtable_");
163 }
164
165
166
plet_powsym_powsym(a,b,c)167 INT plet_powsym_powsym(a,b,c) OP a,b,c;
168 /* AK 051201
169 */
170 {
171 INT erg = OK;
172 INT t=0; /* is 1 if transfer HASHTABLE->POWSYM necessary */
173 CTTTTO(HASHTABLE,INTEGER,PARTITION,POWSYM,"plet_powsym_powsym(1)",a);
174 CTTTO(HASHTABLE,PARTITION,POWSYM,"plet_powsym_powsym(2)",b);
175 CTTTO(EMPTY,HASHTABLE,POWSYM,"plet_powsym_powsym(3)",c);
176
177 if (S_O_K(c) == EMPTY)
178 if (S_O_K(a) == INTEGER) init_powsym(c);
179 else { t=1; init_hashtable(c); }
180
181 ppp___(a,b,c,cons_eins);
182 if (t==1) t_HASHTABLE_POWSYM(c,c);
183 ENDR("plet_powsym_powsym");
184 }
185
ppp___(a,b,c,f)186 INT ppp___(a,b,c,f) OP a,b,c,f;
187 {
188 INT erg = OK;
189 CTTTTO(HASHTABLE,INTEGER,PARTITION,POWSYM,"ppp___(1)",a);
190 CTTTO(HASHTABLE,PARTITION,POWSYM,"ppp___(2)",b);
191 CTTO(HASHTABLE,POWSYM,"ppp___(3)",c);
192 if (S_O_K(a) == INTEGER)
193 {
194 erg += ppp_integer__(a,b,c,f);
195 }
196 else if (S_O_K(a) == PARTITION)
197 {
198 erg += ppp_partition__(a,b,c,f);
199 }
200 else if (S_O_K(a) == POWSYM)
201 {
202 erg += ppp_powsym__(a,b,c,f);
203 }
204 else /* if (S_O_K(a) == HASHTABLE) */
205 {
206 erg += ppp_hashtable__(a,b,c,f);
207 }
208
209 ENDR("ppp___");
210 }
211
212