145{
147 {
148 int v = first_var + i.var();
150 return R->from_long(0);
151 }
152
153
154
155
156 ring_elem
result = sourceK->eval(
this, a, first_var + nvars_in_source);
158
161 ring_elem result_coeff =
K->from_long(1);
162
164 {
165 result_monom =
M->make_one();
166 temp_monom =
M->make_one();
167 }
168
169 if (!
R->is_commutative_ring() ||
R->cast_to_SchurRing())
170 {
171
173 {
174 int v = first_var + i.var();
175 int e = i.exponent();
176 ring_elem g;
177 if (e >= 0)
178 g =
_elem[v].bigelem;
179 else
180 g =
R->invert(
_elem[v].bigelem);
181 for (int j = 0; j < e; j++)
182 {
184 ring_elem tmp =
R->mult(g,
result);
187 }
188 }
189 }
190 else
191 {
193 {
194 int v = first_var + i.var();
195 int e = i.exponent();
197 if (
_elem[v].bigelem_is_one && e > 0)
198 {
199 if (!
_elem[v].coeff_is_one)
200 {
201 ring_elem tmp =
K->power(
_elem[v].coeff, e);
202 K->mult_to(result_coeff, tmp);
204 }
205 if (!
_elem[v].monom_is_one)
206 {
207 M->power(
_elem[v].monom, e, temp_monom);
208 M->mult(result_monom, temp_monom, result_monom);
209 }
210 }
211 else
212 {
213 ring_elem thispart =
R->power(
_elem[v].bigelem, e);
217 }
218 }
220 {
221 ring_elem temp =
P->make_flat_term(result_coeff, result_monom);
222 K->remove(result_coeff);
223 M->remove(result_monom);
224 M->remove(temp_monom);
227 }
228 else
229 {
230
231
233 }
234 }
236}
ExponentListIterator< int, true > index_varpower
VALGRIND_MAKE_MEM_DEFINED & result(result)