OPAEQ.cc
Go to the documentation of this file.
1 /****************************************
2 * Computer Algebra System SINGULAR *
3 ****************************************/
4 /*
5 *Dense Integer Polynomials
6 */
7 //Schauen was hier überhaupt sinn macht
8 
9 #include <misc/auxiliary.h>
10 
11 #ifdef SINGULAR_4_1
12 
13 #include <omalloc/omalloc.h>
14 #include <factory/factory.h>
15 #include <misc/mylimits.h>
16 #include <reporter/reporter.h>
17 
18 #include "coeffs.h"
19 #include "numbers.h"
20 #include "mpr_complex.h"
21 #include "AEQ.h"
22 #include "modulop.h"
23 
24 #include <string.h>
25 
26 BOOLEAN nAEQCoeffIsEqual (number a, number b, const coeffs r);
27 number nAEQMult (number a, number b, const coeffs r);
28 number nAEQSub (number a, number b, const coeffs r);
29 number nAEQAdd (number a, number b, const coeffs r);
30 number nAEQDiv (number a, number b, const coeffs r);
31 number nAEQIntMod (number a, number b, const coeffs r);// Hir wollte wir was gucken
32 number nAEQExactDiv (number a, number b, const coeffs r);
33 number nAEQInit (long i, const coeffs r);
34 number nAEQInitMPZ (mpz_t m, const coeffs r); //nachgucken/fragen
35 int nAEQSize (number a, const coeffs r);///
36 long nAEQInt (number &a, const coeffs r);
37 number nAEQMPZ (number a, const coeffs r); //nachgucken/fragen
38 number nAEQNeg (number c, const coeffs r);
39 number nAEQCopy (number a, number b, const coeffs r); // nachgicken
40 number nAEQRePart (number a, number b, const coeffs r); // nachgicken
41 number nAEQImPart (number a, number b, const coeffs r); // nachgicken
42 
43 void nAEQWriteLong (number a, const coeffs r);//
44 void nAEQWriteShort (number a, const coeffs r);//
45 
46 
47 const char * nAEQRead (const char *s, number *a, const coeffs r);
48 number nAEQNormalize (number a, number b, const coeffs r);//
49 BOOLEAN nAEQGreater (number a, number b, const coeffs r);//
50 BOOLEAN nAEQEqual (number a, number b, const coeffs r);
51 BOOLEAN nAEQIsZero (number a, const coeffs r);
52 BOOLEAN nAEQIsOne (number a, const coeffs r);
53 BOOLEAN nAEQIsMOne (number a, const coeffs r);
54 BOOLEAN nAEQGreaterZero (number a, number b, const coeffs r);
55 void nAEQPower (number a, int i, number * result, const coeffs r);
56 number nAEQGetDenom (number &a, const coeffs r);//
57 number nAEQGetNumerator (number &a, const coeffs r);//
58 number nAEQGcd (number a, number b, const coeffs r);
59 number nAEQLcm (number a, number b, const coeffs r);
60 
61 void nAEQDelete (number *a, const coeffs r);//
62 number nAEQSetMap (number a, const coeffs r);//
63 void nAEQInpMult (number &a ,number b, const coeffs r);//
64 void nAEQCoeffWrite (const coeffs r, BOOLEAN details);//
65 
66 BOOLEAN nAEQClearContent (number a, const coeffs r);//
67 BOOLEAN nAEQClearDenominators (number a, const coeffs r);//
68 
69 
70 
71 
72 // DEFINITION DER FUNKTIONEN
73 
74 number nAEQAdd(number a, number b, const coeffs)
75 {
76  Q_poly* f=reinterpret_cast<Q_poly*> (a);
77  Q_poly* g=reinterpret_cast<Q_poly*> (b);
78  Q_poly *res=new Q_poly;
79  res->Q_poly_set(*f);
80  res->Q_poly_add_to(*g);
81  return (number) res;
82 }
83 
84 number nAEQMult(number a, number b, const coeffs)
85 {
86  Q_poly* f=reinterpret_cast<Q_poly*> (a);
87  Q_poly* g=reinterpret_cast<Q_poly*> (b);
88  Q_poly *res=new Q_poly;
89  res->Q_poly_set(*f);
90  res->Q_poly_mult_n_to(*g);
91  return (number) res;
92 }
93 
94 number nAEQSub(number a, number b, const coeffs)
95 {
96  Q_poly* f=reinterpret_cast<Q_poly*> (a);
97  Q_poly* g=reinterpret_cast<Q_poly*> (b);
98  Q_poly *res=new Q_poly;
99  res->Q_poly_set(*f);
100  res->Q_poly_sub_to(*g);
101  return (number) res;
102 }
103 
104 
105 number nAEQDiv(number a, number b, const coeffs)
106 {
107  Q_poly* f=reinterpret_cast<Q_poly*> (a);
108  Q_poly* g=reinterpret_cast<Q_poly*> (b);
109  Q_poly *res=new Q_poly;
110  Q_poly *s=new Q_poly;
111  res->Q_poly_set(*f);
112  res->Q_poly_div_to(*res,*s,*g);
113  return (number) res;
114 }
115 
116 
117 number nAEQIntMod(number a, number, const coeffs)
118 {
119  return a;
120 }
121 
122 number nAEQExactDiv(number a, number b, const coeffs)
123 {
124  Q_poly* f=reinterpret_cast<Q_poly*> (a);
125  Q_poly* g=reinterpret_cast<Q_poly*> (b);
126  Q_poly *res=new Q_poly;
127  Q_poly *s=new Q_poly;
128  res->Q_poly_set(*f);
129  res->Q_poly_div_to(*res,*s,*g);
130  return (number) res;
131 }
132 
133 
134 
135 number nAEQInit(long i, const coeffs)
136 {
137  number res = (number) i;
138  return res;
139 }
140 
141 number nAEQInitMPZ(mpz_t m, const coeffs)
142 {
143  number res= (number) m;
144  return res;
145 }
146 
147 int nAEQSize (number a, const coeffs)
148 {
149  Q_poly* f=reinterpret_cast<Q_poly*> (a);
150  return f->deg;
151 }
152 
153 long nAEQInt(number &, const coeffs)
154 {
155  return 1;
156 }
157 
158 
159 number nAEQMPZ(number a, const coeffs)
160 {
161  return a;
162 }
163 
164 
165 number nAEQNeg(number c, const coeffs)
166 {
167  Q_poly* f=reinterpret_cast<Q_poly*> (c);
168  Q_poly *res=new Q_poly;
169  res->Q_poly_set(*f);
170  res->Q_poly_neg();
171  return (number) res;
172 }
173 
174 number nAEQCopy(number c, const coeffs)
175 {
176  return (number) c;
177 }
178 
179 number nAEQRePart(number c, const coeffs)
180 {
181  return (number) c;
182 }
183 
184 number nAEQImPart(number c, const coeffs)
185 {
186  return (number) c;
187 }
188 
189 void nAEQWriteLong (number , const coeffs)
190 {
191  return;
192 }
193 
194 void nAEQWriteShort (number , const coeffs)
195 {
196  return ;
197 }
198 
199 
200 const char * nAEQRead (const char *, number *, const coeffs)
201 {
202  return "";
203 }
204 
205 number nAEQNormalize (number a, number , const coeffs) // ?
206 {
207  return a;
208 }
209 
210 BOOLEAN nAEQGreater (number a, number b, const coeffs)
211 {
212  Q_poly* f=reinterpret_cast<Q_poly*> (a);
213  Q_poly* g=reinterpret_cast<Q_poly*> (b);
214  if (f->deg > g->deg) {return FALSE;}
215  else {return TRUE;}
216 }
217 
218 BOOLEAN nAEQEqual (number a, number b, const coeffs)
219 {
220  Q_poly* f=reinterpret_cast<Q_poly*> (a);
221  Q_poly* g=reinterpret_cast<Q_poly*> (b);
222  if (f->is_equal(*g) == 1) {return FALSE;}
223  else {return TRUE;}
224 }
225 
226 BOOLEAN nAEQIsZero (number a, const coeffs)
227 {
228  Q_poly* f=reinterpret_cast<Q_poly*> (a);
229  if (f->is_zero() == 1) {return FALSE;}
230  else {return TRUE;}
231 }
232 
233 BOOLEAN nAEQIsOne (number a, const coeffs)
234 {
235  Q_poly* f=reinterpret_cast<Q_poly*> (a);
236  if (f->is_one() == 1) {return FALSE;}
237  else {return TRUE;}
238 }
239 
240 BOOLEAN nAEQIsMOne (number a, const coeffs)
241 {
242  Q_poly* f=reinterpret_cast<Q_poly*> (a);
243  if (f->is_one() == 1) {return FALSE;}
244  else {return TRUE;}
245 }
246 
248 {
249  if (nAEQIsZero(a, r) == FALSE) { return TRUE; }
250  else { return FALSE; }
251 }
252 
253 void nAEQPower (number, int, number *, const coeffs)
254 {
255  return;
256 }
257 
258 number nAEQGetDenom (number &, const coeffs)
259 {
260  return (number) 1;
261 }
262 
263 number nAEQGetNumerator (number &a, const coeffs)
264 {
265  return a;
266 }
267 
268 number nAEQGcd (number a, number b, const coeffs)
269 {
270  Q_poly* f=reinterpret_cast<Q_poly*> (a);
271  Q_poly* g=reinterpret_cast<Q_poly*> (b);
272  Q_poly *res=new Q_poly;
273  res->Q_poly_gcd(*f,*g);
274  return (number) res;
275 }
276 
277 number nAEQLcm (number a, number b, const coeffs)
278 {
279  Q_poly* f=reinterpret_cast<Q_poly*> (a);
280  Q_poly* g=reinterpret_cast<Q_poly*> (b);
281  Q_poly *gcd=new Q_poly;
282  Q_poly *res=new Q_poly;
283  Q_poly *s=new Q_poly;
284  gcd->Q_poly_gcd(*f,*g);
285  res->Q_poly_mult_n(*f,*g);
286  res->Q_poly_div_to(*res,*s,*gcd);
287  return (number) res;
288 }
289 
290 void nAEQDelete (number *, const coeffs)
291 {
292  return;
293 }
294 
295 /*
296 number nAEQSetMap (number a, const coeffs)
297 {
298  return a;
299 }
300 */
301 
302 void nAEQInpMult (number &, number, const coeffs)
303 {
304  return ;
305 }
306 
308 {
309  return;
310 }
311 
313 {
314  return FALSE;
315 }
316 
318 {
319  return FALSE;
320 }
321 
322 static char * n_QAECoeffName(const coeffs r)
323 {
324  return (char *)"QAE";
325 }
326 
327 
328 //INITIALISIERUNG FÜR SINGULAR
329 
330 
332 {
333  // r->is_field,is_domain?
334  r->ch=0;
335  //r->cfKillChar=ndKillChar;
336  //r->nCoeffIsEqual=ndCoeffIsEqual;
337  r->cfMult = nAEQMult;
338  r->cfSub = nAEQSub;
339  r->cfAdd = nAEQAdd;
340  r->cfDiv = nAEQDiv;
341  r->cfIntMod= nAEQIntMod;
342  r->cfExactDiv= nAEQExactDiv;
343  r->cfInit = nAEQInit;
344  r->cfSize = nAEQSize;
345  r->cfInt = nAEQInt;
346  r->cfCoeffName = n_QAECoeffName;
347 #ifdef HAVE_RINGS
348  //r->cfDivComp = NULL; // only for ring stuff
349  //r->cfIsUnit = NULL; // only for ring stuff
350  //r->cfGetUnit = NULL; // only for ring stuff
351  //r->cfExtGcd = NULL; // only for ring stuff
352  // r->cfDivBy = NULL; // only for ring stuff
353 #endif
354  r->cfInpNeg = nAEQNeg;
355  r->cfInvers= NULL;
356  //r->cfCopy = ndCopy;
357  //r->cfRePart = ndCopy;
358  //r->cfImPart = ndReturn0;
359  r->cfWriteLong = nAEQWriteLong;
360  r->cfRead = nAEQRead;
361  //r->cfNormalize=ndNormalize;
362  r->cfGreater = nAEQGreater;
363  r->cfEqual = nAEQEqual;
364  r->cfIsZero = nAEQIsZero;
365  r->cfIsOne = nAEQIsOne;
366  r->cfIsMOne = nAEQIsOne;
367  r->cfGreaterZero = nAEQGreaterZero;
368  r->cfPower = nAEQPower; // ZU BEARBEITEN
369  r->cfGetDenom = nAEQGetDenom;
370  r->cfGetNumerator = nAEQGetNumerator;
371  r->cfGcd = nAEQGcd;
372  r->cfLcm = nAEQLcm; // ZU BEARBEITEN
373  r->cfDelete= nAEQDelete;
374 
375  r->cfSetMap = npSetMap; // extern nMapFunc npSetMap(const coeffs src, const coeffs dst); // FIXME: WHY??? // TODO: this seems to be a bug!
376 
377  r->cfInpMult=nAEQInpMult; //????
378  r->cfCoeffWrite=nAEQCoeffWrite; //????
379 
380 
381  // the variables:
382  r->nNULL = (number) 0;
383  //r->type = n_AE;
384  r->has_simple_Alloc=TRUE;
385  r->has_simple_Inverse=TRUE;
386  return FALSE;
387 }
388 #endif
BOOLEAN nAEQCoeffIsEqual(number a, number b, const coeffs r)
const CanonicalForm int s
Definition: facAbsFact.cc:55
BOOLEAN nAEQGreaterZero(number a, number b, const coeffs r)
number nAEQGetDenom(number &a, const coeffs r)
Definition: OPAEQ.cc:258
void nAEQWriteShort(number a, const coeffs r)
Definition: OPAEQ.cc:194
void nAEQInpMult(number &a, number b, const coeffs r)
Definition: OPAEQ.cc:302
number nAEQSetMap(number a, const coeffs r)
const poly a
Definition: syzextra.cc:212
number nAEQAdd(number a, number b, const coeffs r)
Definition: OPAEQ.cc:74
return
Definition: syzextra.cc:280
int is_zero() const
Definition: AEQ.cc:747
BOOLEAN nAEQClearContent(number a, const coeffs r)
Definition: OPAEQ.cc:312
#define FALSE
Definition: auxiliary.h:140
void nAEQDelete(number *a, const coeffs r)
Definition: OPAEQ.cc:290
void nAEQPower(number a, int i, number *result, const coeffs r)
Definition: OPAEQ.cc:253
BOOLEAN nAEQIsMOne(number a, const coeffs r)
Definition: OPAEQ.cc:240
BOOLEAN n_QAEInitChar(coeffs r, void *)
Definition: OPAEQ.cc:331
void Q_poly_mult_n(Q_poly, Q_poly)
Definition: AEQ.cc:342
number nAEQGetNumerator(number &a, const coeffs r)
Definition: OPAEQ.cc:263
void Q_poly_gcd(Q_poly, Q_poly)
Definition: AEQ.cc:778
void nAEQWriteLong(number a, const coeffs r)
Definition: OPAEQ.cc:189
#define TRUE
Definition: auxiliary.h:144
void Q_poly_mult_n_to(const Q_poly)
Definition: AEQ.cc:384
number nAEQNeg(number c, const coeffs r)
Definition: OPAEQ.cc:165
void Q_poly_neg()
Definition: AEQ.cc:336
g
Definition: cfModGcd.cc:4031
void Q_poly_add_to(const Q_poly)
Definition: AEQ.cc:133
int is_one() const
Definition: AEQ.cc:758
number nAEQMPZ(number a, const coeffs r)
Definition: OPAEQ.cc:159
BOOLEAN nAEQIsOne(number a, const coeffs r)
Definition: OPAEQ.cc:233
number nAEQNormalize(number a, number b, const coeffs r)
Definition: OPAEQ.cc:205
poly res
Definition: myNF.cc:322
void Q_poly_div_to(Q_poly &, Q_poly &, const Q_poly)
Definition: AEQ.cc:617
number nAEQLcm(number a, number b, const coeffs r)
Definition: OPAEQ.cc:277
int deg
Definition: AEQ.h:15
const ring r
Definition: syzextra.cc:208
Definition: AEQ.h:9
Coefficient rings, fields and other domains suitable for Singular polynomials.
BOOLEAN nAEQEqual(number a, number b, const coeffs r)
Definition: OPAEQ.cc:218
int nAEQSize(number a, const coeffs r)
Definition: OPAEQ.cc:147
The main handler for Singular numbers which are suitable for Singular polynomials.
number nAEQIntMod(number a, number b, const coeffs r)
Definition: OPAEQ.cc:117
All the auxiliary stuff.
int m
Definition: cfEzgcd.cc:119
number nAEQImPart(number a, number b, const coeffs r)
number nAEQSub(number a, number b, const coeffs r)
Definition: OPAEQ.cc:94
FILE * f
Definition: checklibs.c:7
int i
Definition: cfEzgcd.cc:123
nMapFunc npSetMap(const coeffs src, const coeffs dst)
Definition: modulop.cc:771
number nAEQMult(number a, number b, const coeffs r)
Definition: OPAEQ.cc:84
number nAEQDiv(number a, number b, const coeffs r)
Definition: OPAEQ.cc:105
number nAEQExactDiv(number a, number b, const coeffs r)
Definition: OPAEQ.cc:122
number nAEQGcd(number a, number b, const coeffs r)
Definition: OPAEQ.cc:268
#define NULL
Definition: omList.c:10
const char * nAEQRead(const char *s, number *a, const coeffs r)
Definition: OPAEQ.cc:200
int gcd(int a, int b)
Definition: walkSupport.cc:839
number nAEQRePart(number a, number b, const coeffs r)
void Q_poly_set(const Q_poly)
Definition: AEQ.cc:689
int is_equal(Q_poly &)
Definition: AEQ.cc:727
BOOLEAN nAEQIsZero(number a, const coeffs r)
Definition: OPAEQ.cc:226
number nAEQCopy(number a, number b, const coeffs r)
BOOLEAN nAEQClearDenominators(number a, const coeffs r)
Definition: OPAEQ.cc:317
static char * n_QAECoeffName(const coeffs r)
Definition: OPAEQ.cc:322
void nAEQCoeffWrite(const coeffs r, BOOLEAN details)
Definition: OPAEQ.cc:307
number nAEQInitMPZ(mpz_t m, const coeffs r)
Definition: OPAEQ.cc:141
int BOOLEAN
Definition: auxiliary.h:131
number nAEQInit(long i, const coeffs r)
Definition: OPAEQ.cc:135
const poly b
Definition: syzextra.cc:213
BOOLEAN nAEQGreater(number a, number b, const coeffs r)
Definition: OPAEQ.cc:210
long nAEQInt(number &a, const coeffs r)
Definition: OPAEQ.cc:153
void Q_poly_sub_to(const Q_poly)
Definition: AEQ.cc:223
return result
Definition: facAbsBiFact.cc:76