My Project
Loading...
Searching...
No Matches
find_perm.cc File Reference

Go to the source code of this file.

Functions

static int * find_perm_for_map (const ring preimage_r, const ring image_r, const ideal image)
 
matrix ma_ApplyPermForMap (const matrix to_map, const ring preimage_r, const ideal image, const ring image_r, const nMapFunc nMap)
 helper function for maMapIdeal mapping ideal/matrix/module for the case of a permutation: maps the ideal/module/matrix to_map via the map from preimage_r with image image and mapping of coefficients via nMap (or return NULL)
 

Function Documentation

◆ find_perm_for_map()

static int * find_perm_for_map ( const ring preimage_r,
const ring image_r,
const ideal image )
static

Definition at line 19 of file find_perm.cc.

20{
21 int i;
22 int *perm=(int *)omAlloc0((preimage_r->N+1)*sizeof(int));
23 for (i=si_min(IDELEMS(image),preimage_r->N)-1; i>=0; i--)
24 {
25 if (image->m[i]!=NULL)
26 {
27 if((pNext(image->m[i])==NULL)
28 && (n_IsOne(pGetCoeff(image->m[i]),image_r->cf)))
29 {
30 int v=p_IsUnivariate(image->m[i],image_r);
31 if (v<=0) /*not univariate */
32 {
33 omFreeSize(perm,(preimage_r->N+1)*sizeof(int));
34 return NULL;
35 }
36 else if (v>0) /* image is univaritate */
37 {
38 if (p_GetExp(image->m[i],v,image_r)==1)
39 {
40 perm[i+1]=v; /* and of exp 1 */
41 }
42 else
43 {
44 omFreeSize(perm,(preimage_r->N+1)*sizeof(int));
45 return NULL;
46 }
47 }
48 }
49 else /* image is not a monomial */
50 {
51 omFreeSize(perm,(preimage_r->N+1)*sizeof(int));
52 return NULL;
53 }
54 }
55 }
56 //Print("elms:%d, N:%d\n",IDELEMS(image),preimage_r->N);
57 //iiWriteMatrix((matrix)image,"_",1,image_r,0);
58 //PrintS("\npreimage:\n");rWrite(preimage_r);
59 //PrintS("image:\n");rWrite(image_r);
60 //PrintS("\nperm:");
61 //for (i=1; i<=preimage_r->N; i++)
62 //{
63 // Print(" %d",perm[i]);
64 //}
65 //PrintLn();
66 return perm;
67}
static int si_min(const int a, const int b)
Definition auxiliary.h:126
int i
Definition cfEzgcd.cc:132
static FORCE_INLINE BOOLEAN n_IsOne(number n, const coeffs r)
TRUE iff 'n' represents the one element.
Definition coeffs.h:472
const Variable & v
< [in] a sqrfree bivariate poly
Definition facBivar.h:39
#define pNext(p)
Definition monomials.h:36
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
Definition monomials.h:44
#define omFreeSize(addr, size)
#define omAlloc0(size)
#define NULL
Definition omList.c:12
int p_IsUnivariate(poly p, const ring r)
return i, if poly depends only on var(i)
Definition p_polys.cc:1248
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
Definition p_polys.h:471
#define IDELEMS(i)

◆ ma_ApplyPermForMap()

matrix ma_ApplyPermForMap ( const matrix to_map,
const ring preimage_r,
const ideal image,
const ring image_r,
const nMapFunc nMap )

helper function for maMapIdeal mapping ideal/matrix/module for the case of a permutation: maps the ideal/module/matrix to_map via the map from preimage_r with image image and mapping of coefficients via nMap (or return NULL)

Definition at line 69 of file find_perm.cc.

71{
72 if ((rPar(preimage_r)>0)||(rPar(image_r)>0)) return NULL; /* not applicable */
73 int *perm=find_perm_for_map(preimage_r,image_r,image);
74 if (perm==NULL) return NULL; /* could not find permutation */
75 int C=to_map->cols();
76 int R=to_map->rows();
77 matrix m=mpNew(R,C);
78 for (int i=R*C-1;i>=0;i--)
79 {
80 if (to_map->m[i]!=NULL)
81 {
82 m->m[i]=p_PermPoly(to_map->m[i],perm,preimage_r,image_r, nMap,NULL,0);
83 p_Test(m->m[i],image_r);
84 }
85 }
86 ideal ii=(ideal)m;
87 ii->rank=((ideal)to_map)->rank;
88 omFreeSize(perm,(preimage_r->N+1)*sizeof(int));
89 return m;
90}
int m
Definition cfEzgcd.cc:128
poly * m
Definition matpol.h:18
int & cols()
Definition matpol.h:24
int & rows()
Definition matpol.h:23
static int * find_perm_for_map(const ring preimage_r, const ring image_r, const ideal image)
Definition find_perm.cc:19
matrix mpNew(int r, int c)
create a r x c zero-matrix
Definition matpol.cc:37
ip_smatrix * matrix
Definition matpol.h:43
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)
Definition p_polys.cc:4211
#define p_Test(p, r)
Definition p_polys.h:161
static int rPar(const ring r)
(r->cf->P)
Definition ring.h:605
#define R
Definition sirandom.c:27