27 #define MAX_MAP_DEG 128 36 for (i=
IDELEMS(theMap)-1; i>=0; i--)
37 m->m[i] =
p_Copy(theMap->m[i],r);
38 m->preimage=
omStrDup(theMap->preimage);
92 for(i=1;i<=preimage_r->N; i++)
97 if (theMap->m[i-1]!=
NULL)
99 poly p1=theMap->m[i-1];
110 int modulComp =
p_GetComp( p,preimage_r);
136 monoms = (poly*)
omAlloc(l*
sizeof(poly));
140 monoms[
i]=
maEvalMonom(theMap,p,preimage_r,s, nMap, dst_r);
144 result=
maEvalMonom(theMap,p,preimage_r,s, nMap, dst_r);
147 for(i = l-1; i>=0; i--)
149 result=
p_Add_q(result, monoms[i], dst_r);
163 void maFindPerm(
char const *
const *
const preim_names,
int preim_n,
char const *
const *
const preim_par,
int preim_p,
164 char const *
const *
const names,
int n,
char const *
const *
const par,
int nop,
169 for (i=0; i<preim_n; i++)
173 if (strcmp(preim_names[i],names[j])==0)
176 Print(
"// var %s: nr %d -> nr %d\n",preim_names[i],i+1,j+1);
182 if ((perm[i+1]==0)&&(par!=
NULL)
188 if (strcmp(preim_names[i],par[j])==0)
191 Print(
"// var %s: nr %d -> par %d\n",preim_names[i],i+1,j+1);
200 for (i=0; i<preim_p; i++)
204 if (strcmp(preim_par[i],names[j])==0)
207 Print(
"// par %s: par %d -> nr %d\n",preim_par[i],i+1,j+1);
213 if ((par!=
NULL) && (par_perm[
i]==0))
217 if (strcmp(preim_par[i],par[j])==0)
220 Print(
"// par %s: nr %d -> par %d\n",preim_par[i],i+1,j+1);
231 void maFindPermLP(
char const *
const *
const preim_names,
int preim_n,
char const *
const *
const preim_par,
int preim_p,
232 char const *
const *
const names,
int n,
char const *
const *
const par,
int nop,
237 for (b=0;b<preim_n/lV;b++)
239 for (i=b*lV; i<(b+1)*lV; i++)
244 if (strcmp(preim_names[i],names[j])==0)
249 Print(
"// var %s: nr %d -> nr %d\n",preim_names[i],i+1,j+1);
257 if ((perm[i+1]==0)&&(par!=
NULL)
263 if (strcmp(preim_names[i],par[j])==0)
266 Print(
"// var %s: nr %d -> par %d\n",preim_names[i],i+1,j+1);
276 for (i=0; i<preim_p; i++)
280 if (strcmp(preim_par[i],names[j])==0)
283 Print(
"// par %s: par %d -> nr %d\n",preim_par[i],i+1,j+1);
289 if ((par!=
NULL) && (par_perm[
i]==0))
293 if (strcmp(preim_par[i],par[j])==0)
296 Print(
"// par %s: nr %d -> par %d\n",preim_par[i],i+1,j+1);
313 if(r==dst_r)
return p_Copy(p,dst_r);
315 int *perm=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
319 perm,
NULL, dst_r->cf->type);
332 int N = preimage_r->N;
348 goto max_deg_fertig_id;
370 int N = preimage_r->N;
382 goto max_deg_fertig_p;
402 number one =
n_Init(1, C);
CanonicalForm map(const CanonicalForm &primElem, const Variable &alpha, const CanonicalForm &F, const Variable &beta)
map from to such that is mapped onto
const CanonicalForm int s
poly maEvalVariable(poly p, int v, int pExp, ideal s, const ring dst_r)
static int rPar(const ring r)
(r->cf->P)
poly p_NSet(number n, const ring r)
returns the poly representing the number n, destroys n
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
#define omFreeSize(addr, size)
static short rVar(const ring r)
#define rVar(r) (r->N)
void maFindPermLP(char const *const *const preim_names, int preim_n, char const *const *const preim_par, int preim_p, char const *const *const names, int n, char const *const *const par, int nop, int *perm, int *par_perm, n_coeffType ch, int lV)
int maMaxDeg_Ma(ideal a, ring preimage_r)
static char const ** rParameter(const ring r)
(r->cf->parameter)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
static number p_SetCoeff(poly p, number n, ring r)
static poly p_Copy(poly p, const ring r)
returns a copy of p
static FORCE_INLINE number n_Mult(number a, number b, const coeffs r)
return the product of 'a' and 'b', i.e., a*b
poly p_PermPoly(poly p, const int *perm, const ring oldRing, const ring dst, nMapFunc nMap, const int *par_perm, int OldPar, BOOLEAN use_mult)
Coefficient rings, fields and other domains suitable for Singular polynomials.
static FORCE_INLINE BOOLEAN nCoeff_is_algExt(const coeffs r)
TRUE iff r represents an algebraic extension field.
static void p_SetCompP(poly p, int i, ring r)
const CanonicalForm CFMap CFMap & N
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
The main handler for Singular numbers which are suitable for Singular polynomials.
static poly pp_Mult_qq(poly p, poly q, const ring r)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
poly maIMap(ring r, poly p, const ring dst_r)
static int si_max(const int a, const int b)
static unsigned pLength(poly a)
static FORCE_INLINE BOOLEAN n_IsZero(number n, const coeffs r)
TRUE iff 'n' represents the zero element.
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
void p_Normalize(poly p, const ring r)
static void p_Delete(poly *p, const ring r)
ideal idInit(int idsize, int rank)
initialise an ideal / module
const Variable & v
< [in] a sqrfree bivariate poly
poly p_MinPolyNormalize(poly p, const ring r)
void maFindPerm(char const *const *const preim_names, int preim_n, char const *const *const preim_par, int preim_p, char const *const *const names, int n, char const *const *const par, int nop, int *perm, int *par_perm, n_coeffType ch)
int maMaxDeg_P(poly p, ring preimage_r)
map maCopy(map theMap, const ring r)
static void p_LmDelete(poly p, const ring r)
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
static poly p_Add_q(poly p, poly q, const ring r)
static poly p_Mult_q(poly p, poly q, const ring r)
poly p_Power(poly p, int i, const ring r)
static poly maEvalMonom(map theMap, poly p, ring preimage_r, ideal s, nMapFunc nMap, const ring dst_r)
poly maEval(map theMap, poly p, ring preimage_r, nMapFunc nMap, ideal s, const ring dst_r)
#define MATELEM(mat, i, j)
1-based access to matrix