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