Functions | Variables
digitech.cc File Reference
#include <kernel/mod2.h>
#include <polys/monomials/ring.h>
#include <kernel/digitech.h>
#include <polys/kbuckets.h>
#include <kernel/ideals.h>

Go to the source code of this file.

Functions

void bit_reduce (poly &f, ring r)
 
poly uni_subst_bits (poly outer_uni, poly inner_multi, ring r)
 

Variables

static ideal zero_ideal
 

Function Documentation

void bit_reduce ( poly f,
ring  r 
)

Definition at line 15 of file digitech.cc.

16 {
17  poly p=f;
18  kBucket_pt erg_bucket= kBucketCreate(r);
19  kBucketInit(erg_bucket,NULL,0 /*pLength(P.p)*/);
20  while(p)
21  {
22  poly next=pNext(p);
23  pNext(p)=NULL;
24 
25  int i;
26  int max=rVar(r);
27  for(i=1;i<=max;i++)
28  {
29  unsigned long exp=p_GetExp(p,i,r);
30  if(exp!=0)
31  p_SetExp(p,i,1,r);
32 
33  }
34  p_Setm(p,r);
35  int pseudo_len=0;
36  kBucket_Add_q(erg_bucket,p,&pseudo_len);
37  p=next;
38  }
39 
40  int len=0;
41  poly erg;
42  kBucketClear(erg_bucket,&erg, &len);
43  kBucketDestroy(&erg_bucket);
44  f=erg;
45 }
void kBucketClear(kBucket_pt bucket, poly *p, int *length)
Definition: kbuckets.cc:499
void kBucketInit(kBucket_pt bucket, poly lm, int length)
Definition: kbuckets.cc:471
return P p
Definition: myNF.cc:203
static short rVar(const ring r)
#define rVar(r) (r->N)
Definition: ring.h:540
kBucket_pt kBucketCreate(ring bucket_ring)
Creation/Destruction of buckets.
Definition: kbuckets.cc:197
const ring r
Definition: syzextra.cc:208
void kBucketDestroy(kBucket_pt *bucket_pt)
Definition: kbuckets.cc:204
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
Definition: p_polys.h:465
static int max(int a, int b)
Definition: fast_mult.cc:264
FILE * f
Definition: checklibs.c:7
int i
Definition: cfEzgcd.cc:123
static unsigned long p_SetExp(poly p, const unsigned long e, const unsigned long iBitmask, const int VarOffset)
set a single variable exponent : VarOffset encodes the position in p->exp
Definition: p_polys.h:484
#define NULL
Definition: omList.c:10
#define pNext(p)
Definition: monomials.h:43
static void p_Setm(poly p, const ring r)
Definition: p_polys.h:436
p exp[i]
Definition: DebugPrint.cc:39
polyrec * poly
Definition: hilb.h:10
void kBucket_Add_q(kBucket_pt bucket, poly q, int *l)
Add to Bucket a poly ,i.e. Bpoly == q+Bpoly.
Definition: kbuckets.cc:636
ListNode * next
Definition: janet.h:31
poly uni_subst_bits ( poly  outer_uni,
poly  inner_multi,
ring  r 
)

Definition at line 47 of file digitech.cc.

48 {
49  zero_ideal=idInit(0,1);
50  //assumes outer_uni is univariate and ordering global
51  int d_max=p_GetExp(outer_uni,1,r);
52  poly* potences=(poly*) omAlloc((d_max+1)*sizeof(poly));
53  potences[0]=p_ISet(1,r);
54  int i;
55  for(i=1;i<=d_max;i++)
56  {
57  potences[i]=pp_Mult_qq(potences[i-1],inner_multi,r);
58  bit_reduce(potences[i],r);
59  }
60 
61  poly p=outer_uni;
62  kBucket_pt erg_bucket= kBucketCreate(r);
63  kBucketInit(erg_bucket,NULL,0 /*pLength(P.p)*/);
64 
65 
66  while(p)
67  {
68  int d=p_GetExp(p,1,r);
69  assume(potences[d]!=NULL); //mustn't always hold, but for most input
70  int pseudo_len=0;
71  kBucket_Add_q(erg_bucket,p_Mult_nn(potences[d],p_GetCoeff(p,r),r),&pseudo_len);
72  potences[d]=NULL;
73  p=pNext(p);
74  }
75 
76  //free potences
77  for(i=0;i<=d_max;i++)
78  {
79  p_Delete(&potences[i],r);
80  }
81  omfree(potences);
82  int len=0;
83  poly erg;
84  kBucketClear(erg_bucket,&erg, &len);
85  kBucketDestroy(&erg_bucket);
86  return(erg);
87 }
void kBucketClear(kBucket_pt bucket, poly *p, int *length)
Definition: kbuckets.cc:499
void kBucketInit(kBucket_pt bucket, poly lm, int length)
Definition: kbuckets.cc:471
return P p
Definition: myNF.cc:203
#define omAlloc(size)
Definition: omAllocDecl.h:210
kBucket_pt kBucketCreate(ring bucket_ring)
Creation/Destruction of buckets.
Definition: kbuckets.cc:197
void bit_reduce(poly &f, ring r)
Definition: digitech.cc:15
const ring r
Definition: syzextra.cc:208
void kBucketDestroy(kBucket_pt *bucket_pt)
Definition: kbuckets.cc:204
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
Definition: p_polys.h:465
#define assume(x)
Definition: mod2.h:405
static poly pp_Mult_qq(poly p, poly q, const ring r)
Definition: p_polys.h:1075
#define omfree(addr)
Definition: omAllocDecl.h:237
int i
Definition: cfEzgcd.cc:123
static poly p_Mult_nn(poly p, number n, const ring r)
Definition: p_polys.h:902
static void p_Delete(poly *p, const ring r)
Definition: p_polys.h:850
ideal idInit(int idsize, int rank)
initialise an ideal / module
Definition: simpleideals.cc:38
#define NULL
Definition: omList.c:10
#define pNext(p)
Definition: monomials.h:43
#define p_GetCoeff(p, r)
Definition: monomials.h:57
polyrec * poly
Definition: hilb.h:10
poly p_ISet(long i, const ring r)
returns the poly representing the integer i
Definition: p_polys.cc:1302
static ideal zero_ideal
Definition: digitech.cc:13
void kBucket_Add_q(kBucket_pt bucket, poly q, int *l)
Add to Bucket a poly ,i.e. Bpoly == q+Bpoly.
Definition: kbuckets.cc:636

Variable Documentation

ideal zero_ideal
static

Definition at line 13 of file digitech.cc.