1 #include "def.h"
2 #include "macro.h"
3 
t_ELMSYM_SCHUR_pre041201(a,b)4 INT t_ELMSYM_SCHUR_pre041201(a,b) OP a,b;
5 /* AK 121001 */
6 /* conjugate to t_HOMSYM_SCHUR */
7 {
8     INT erg = OK;
9     OP c;
10     CTTO(PARTITION,ELMSYM,"t_ELMSYM_SCHUR_pre041201",a);
11     if (S_O_K(a) == PARTITION)
12         {
13         c = callocobject();
14         erg += t_HOMSYM_SCHUR(a,c);
15         erg += freeself(b);
16         erg += conjugate_schur(c,b);
17         erg += freeall(c);
18         }
19     else {
20         OP z;
21         z=a;
22         while (z != NULL)
23             {    C_O_K(z,HOMSYM); z = S_L_N(z); }
24         c = callocobject();
25         erg += t_HOMSYM_SCHUR(a,c);
26         erg += freeself(b);
27         erg += conjugate_schur(c,b);
28         erg += freeall(c);
29         z=a;
30         while (z != NULL)
31             {    C_O_K(z,ELMSYM); z = S_L_N(z); }
32         }
33     ENDR("t_ELMSYM_SCHUR_pre041201");
34 }
35 
36 INT tes_integer__faktor();
37 
38 INT mes_partition__();
tes_partition__faktor(a,b,f)39 INT tes_partition__faktor(a,b,f) OP a,b,f;
40 {
41     INT erg = OK;
42     CTO(PARTITION,"tes_partition__faktor(1)",a);
43     CTTO(HASHTABLE,SCHUR,"tes_partition__faktor(2)",b);
44     if (S_PA_LI(a) == 0) {
45         erg += tes_integer__faktor(cons_null,b,f);
46         }
47     else if (S_PA_LI(a) == 1) {
48         erg += tes_integer__faktor(S_PA_I(a,0),b,f);
49         }
50     else {
51         OP c;
52         c = CALLOCOBJECT();
53         first_partition(cons_null,c);
54         mes_partition__(a,c,b,f);
55         FREEALL(c);
56         }
57     ENDR("tpe_partition__faktor");
58 }
59 
60 
tes_elmsym__faktor(a,b,f)61 INT tes_elmsym__faktor(a,b,f) OP a,b,f;
62 {
63     INT erg = OK;
64     CTTO(HASHTABLE,ELMSYM,"tes_elmsym__faktor(1)",a);
65     CTTO(HASHTABLE,SCHUR,"tes_elmsym__faktor(2)",b);
66 
67     T_FORALL_MONOMIALS_IN_A(a,b,f,tes_partition__faktor);
68 
69     ENDR("tes_elmsym__faktor");
70 }
71 
72 
tes_hashtable__faktor(a,b,f)73 INT tes_hashtable__faktor(a,b,f) OP a,b,f;
74 {
75     INT erg = OK;
76     CTO(HASHTABLE,"tes_hashtable__faktor(1)",a);
77     CTTO(HASHTABLE,SCHUR,"tes_hashtable__faktor(2)",b);
78 
79     T_FORALL_MONOMIALS_IN_A(a,b,f,tes_partition__faktor);
80     ENDR("tes_hashtable__faktor");
81 }
82 
83 
tes___faktor(a,b,f)84 INT tes___faktor(a,b,f) OP a,b,f;
85 {
86     INT erg = OK;
87     CTTTTO(INTEGER,HASHTABLE,PARTITION,ELMSYM,"tes___faktor(1)",a);
88     CTTO(HASHTABLE,SCHUR,"tes___faktor(2)",b);
89 
90     if (S_O_K(a) == INTEGER)
91         {
92         tes_integer__faktor(a,b,f);
93         goto ende;
94         }
95     else if (S_O_K(a) == PARTITION)
96         {
97         tes_partition__faktor(a,b,f);
98         goto ende;
99         }
100     else if (S_O_K(a) == HASHTABLE)
101         {
102         tes_hashtable__faktor(a,b,f);
103         goto ende;
104         }
105     else if (S_O_K(a) == ELMSYM)
106         {
107         tes_elmsym__faktor(a,b,f);
108         goto ende;
109         }
110 ende:
111     ENDR("tes___faktor");
112 }
113 
tes_integer__faktor(a,b,f)114 INT tes_integer__faktor(a,b,f) OP a,b,f;
115 {
116     INT erg = OK;
117     OP m;
118     CTO(INTEGER,"tes_integer__faktor(1)",a);
119     CTTO(HASHTABLE,SCHUR,"tes_integer__faktor(2)",b);
120     SYMCHECK((S_I_I(a) < 0), "tes_integer__faktor:parameter < 0");
121 
122     m = CALLOCOBJECT();
123     b_sk_mo(CALLOCOBJECT(),CALLOCOBJECT(),m);
124     COPY(f,S_MO_K(m));
125     erg += last_partition(a,S_MO_S(m));
126     if (S_O_K(b) == SCHUR)
127         INSERT_LIST(m,b,add_koeff,comp_monomschur);
128     else
129         insert_scalar_hashtable(m,b,add_koeff,eq_monomsymfunc,hash_monompartition);
130     ENDR("tes_integer__faktor");
131 }
132 
t_ELMSYM_SCHUR(a,b)133 INT t_ELMSYM_SCHUR(a,b) OP a,b;
134 /* AK 190901 */
135 {
136     INT erg = OK;
137     INT t=0;
138     CTTTTO(INTEGER,HASHTABLE,PARTITION,ELMSYM,"t_ELMSYM_SCHUR(1)",a);
139     TCE2(a,b,t_ELMSYM_SCHUR,SCHUR);
140 
141     if (S_O_K(b) == EMPTY) {
142         init_hashtable(b); t=1;
143         }
144     tes___faktor(a,b,cons_eins);
145     if (t==1) t_HASHTABLE_SCHUR(b,b);
146     ENDR("t_ELMSYM_SCHUR");
147 }
148