Changeset 24d494 in git
- Timestamp:
- Oct 11, 2004, 4:17:33 PM (20 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', '38077648e7239f98078663eb941c3c979511150a')
- Children:
- 9cc4c6b84ee92bb1ff3d8fba533c57da37835d12
- Parents:
- 46c5be3948f584f211de3b771d83246ab6ec948b
- Location:
- Singular
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/tgb.cc
r46c5be r24d494 36 36 inline int pSLength(poly p, int l) { 37 37 return l; } 38 inline int kSBucketLength(kBucket* bucket ) {return bucket_guess(bucket);}38 inline int kSBucketLength(kBucket* bucket, poly lm) {return bucket_guess(bucket);} 39 39 #endif 40 40 … … 107 107 } 108 108 #endif 109 static int do_pELength(poly p, calc_dat* c, int dlm=-1){ 110 if(p==NULL) return 0; 111 int s=0; 112 poly pi=p; 113 if(dlm<0){ 114 dlm=pTotaldegree(p,c->r); 115 s=1; 116 pi=p->next; 117 } 118 119 while(pi){ 120 int d=pTotaldegree(pi,c->r); 121 if(d>dlm) 122 s+=1+d-dlm; 123 else 124 ++s; 125 pi=pi->next; 126 } 127 return s; 128 } 129 int kEBucketLength(kBucket* b, poly lm,calc_dat* ca) 130 { 131 int s=0; 132 if(lm==NULL){ 133 lm=kBucketGetLm(b); 134 } 135 if(lm==NULL) return 0; 136 int d=pTotaldegree(lm,ca->r); 137 int i; 138 for (i=b->buckets_used;i>=0;i--) 139 { 140 if(b->buckets[i]==NULL) continue; 141 s+=do_pELength(b->buckets[i],ca,d); 142 } 143 return s; 144 } 145 146 static inline int pELength(poly p, calc_dat* c,int l){ 147 if (p==NULL) return 0; 148 return do_pELength(p,c); 149 } 150 // static int quality(poly p, int len, calc_dat* c){ 151 // if (c->is_char0) return pSLength(p,len); 152 // return pLength(p); 153 // } 154 static inline int pQuality(poly p, calc_dat* c, int l=-1){ 155 156 if(l<0) 157 l=pLength(p); 158 if(c->is_char0) return pSLength(p,l); 159 if((pLexOrder) &&(!c->is_homog)) return pELength(p,c,l); 160 return l; 161 } 162 163 164 int red_object::guess_quality(calc_dat* c){ 165 //works at the moment only for lenvar 1, because in different 166 //case, you have to look on coefs 167 int s=0; 168 if (c->is_char0) 169 s=kSBucketLength(bucket,this->p); 170 else 171 { 172 if((pLexOrder) &&(!c->is_homog)) 173 s=kEBucketLength(this->bucket,this->p,c); 174 else s=bucket_guess(bucket); 175 } 176 if (sum!=NULL){ 177 if (c->is_char0) 178 s+=kSBucketLength(sum->ac->bucket); 179 else 180 { 181 if((pLexOrder) &&(!c->is_homog)) 182 s=kEBucketLength(sum->ac->bucket,this->p,c); 183 else 184 s+=bucket_guess(sum->ac->bucket); 185 } 186 } 187 return s; 188 } 189 // static int guess_quality(const red_object & p, calc_dat* c){ 190 // //looks only on bucket 191 // if (c->is_char0) return kSBucketLength(p.bucket,p.p); 192 // if((pLexOrder) &&(!c->is_homog)) return kEBucketLength(p.bucket,p.p,c); 193 // return (bucket_guess(p.bucket)); 194 // } 195 109 196 static void finalize_reduction_step(reduction_step* r){ 110 197 delete r; … … 519 606 520 607 int i; 521 if (c->is_char0)522 i=simple_posInS(c->strat,h,pSLength(h,len),c->is_char0);523 else524 i=simple_posInS(c->strat,h,len,c->is_char0);525 608 // if (c->is_char0) 609 // i=simple_posInS(c->strat,h,pSLength(h,len),c->is_char0); 610 // else 611 // i=simple_posInS(c->strat,h,len,c->is_char0); 612 526 613 LObject P; memset(&P,0,sizeof(P)); 527 614 P.tailRing=c->r; … … 537 624 pNorm(P.p); 538 625 pNormalize(P.p); 539 626 int pq=pQuality(h,c,len); 627 i=simple_posInS(c->strat,h,pq); 540 628 c->strat->enterS(P,i,c->strat); 541 629 … … 545 633 546 634 if(c->strat->lenSw) 547 c->strat->lenSw[i]=p SLength(P.p,len);635 c->strat->lenSw[i]=pq; 548 636 return i; 549 637 … … 574 662 } 575 663 576 static void move_forward_in_S(int old_pos, int new_pos,kStrategy strat , BOOLEAN is_char0)664 static void move_forward_in_S(int old_pos, int new_pos,kStrategy strat) 577 665 { 578 666 assume(old_pos>=new_pos); … … 583 671 int length=strat->lenS[old_pos]; 584 672 int length_w; 585 if( is_char0)673 if(strat->lenSw) 586 674 length_w=strat->lenSw[old_pos]; 587 675 int i; … … 605 693 strat->S_2_R[new_pos]=s_2_r; 606 694 strat->lenS[new_pos]=length; 607 if( is_char0)695 if(strat->lenSw) 608 696 strat->lenSw[new_pos]=length_w; 609 697 //assume(lenS_correct(strat)); … … 856 944 857 945 //len should be weighted length in char 0 858 static int simple_posInS (kStrategy strat, poly p,int len , BOOLEAN is_char0)946 static int simple_posInS (kStrategy strat, poly p,int len) 859 947 { 860 948 … … 863 951 polyset set=strat->S; 864 952 intset setL=strat->lenS; 865 if ( is_char0) setL=strat->lenSw;953 if (strat->lenSw) setL=strat->lenSw; 866 954 int length=strat->sl; 867 955 int i; … … 1866 1954 else 1867 1955 qal=c->strat->lenS[z2]; 1868 int new_pos=simple_posInS(c->strat,c->strat->S[z2],qal ,c->is_char0);1956 int new_pos=simple_posInS(c->strat,c->strat->S[z2],qal); 1869 1957 if (new_pos<z2) 1870 1958 { 1871 move_forward_in_S(z2,new_pos,c->strat ,c->is_char0);1959 move_forward_in_S(z2,new_pos,c->strat); 1872 1960 } 1873 1961 } … … 3779 3867 c->easy_product_crit=0; 3780 3868 c->extended_product_crit=0; 3781 c->is_char0=(rChar()==0); 3869 if (rField_is_Zp(c->r)) 3870 c->is_char0=FALSE; 3871 else 3872 c->is_char0=TRUE; 3873 //not fully correct 3874 3875 //(rChar()==0); 3782 3876 c->F4_mode=F4_mode; 3783 3877 c->reduction_steps=0; … … 3845 3939 c->strat->S=c->strat->Shdl->m; 3846 3940 c->strat->lenS=(int*)omAlloc0(i*sizeof(int)); 3847 if( c->is_char0)3941 if((c->is_char0)||((pLexOrder) &&(!c->is_homog))) 3848 3942 c->strat->lenSw=(int*)omAlloc0(i*sizeof(int)); 3849 3943 else … … 4123 4217 int new_pos; 4124 4218 int q; 4125 q= quality(c->S->m[i],c->lengths[i],c);4126 new_pos=simple_posInS(c->strat,c->S->m[i],q ,c->is_char0);4219 q=pQuality(c->S->m[i],c,c->lengths[i]); 4220 new_pos=simple_posInS(c->strat,c->S->m[i],q); 4127 4221 4128 4222 int old_pos=-1; … … 4153 4247 4154 4248 if (new_pos<old_pos) 4155 move_forward_in_S(old_pos,new_pos,c->strat , c->is_char0);4249 move_forward_in_S(old_pos,new_pos,c->strat); 4156 4250 4157 4251 length_one_crit(c,i,c->lengths[i]); … … 4365 4459 4366 4460 4367 static int guess_quality(const red_object & p, calc_dat* c){ 4368 //looks only on bucket 4369 if (c->is_char0) return kSBucketLength(p.bucket,p.p); 4370 return (bucket_guess(p.bucket)); 4371 } 4372 static int pQuality(poly p, calc_dat* c){ 4373 if(c->is_char0) return pSLength(p,pLength(p)); 4374 return pLength(p); 4375 } 4376 static int quality_of_pos_in_strat_S(int pos, calc_dat* c){ 4377 if (c->is_char0) return c->strat->lenSw[pos]; 4461 4462 static inline int quality_of_pos_in_strat_S(int pos, calc_dat* c){ 4463 if (c->strat->lenSw!=NULL) return c->strat->lenSw[pos]; 4378 4464 return c->strat->lenS[pos]; 4379 4465 } 4380 static int quality(poly p, int len, calc_dat* c){ 4381 if (c->is_char0) return pSLength(p,len); 4382 return pLength(p); 4383 } 4466 4384 4467 static void multi_reduction_lls_trick(red_object* los, int losl,calc_dat* c,find_erg & erg){ 4385 4468 erg.expand=NULL; … … 4544 4627 los[bp].p=p; 4545 4628 kBucketInit(los[bp].bucket,p,old_length); 4546 int qal= quality(clear_into,new_length,c);4629 int qal=pQuality(clear_into,c,new_length); 4547 4630 int pos_in_c=-1; 4548 4631 int z; 4549 4632 int new_pos; 4550 new_pos=simple_posInS(c->strat,clear_into,qal ,c->is_char0);4633 new_pos=simple_posInS(c->strat,clear_into,qal); 4551 4634 assume(new_pos<=j); 4552 4635 for (z=c->n;z;z--) … … 4584 4667 if (new_pos<j) 4585 4668 { 4586 move_forward_in_S(j,new_pos,c->strat ,c->is_char0);4669 move_forward_in_S(j,new_pos,c->strat); 4587 4670 erg.reduce_by=new_pos; 4588 4671 } … … 4977 5060 4978 5061 } 4979 int red_object::guess_quality(calc_dat* c){ 4980 //works at the moment only for lenvar 1, because in different 4981 //case, you have to look on coefs 4982 int s=0; 4983 if (c->is_char0) 4984 s=kSBucketLength(bucket); 4985 else 4986 s=bucket_guess(bucket); 4987 if (sum!=NULL){ 4988 if (c->is_char0) 4989 s+=kSBucketLength(sum->ac->bucket); 4990 else 4991 s+=bucket_guess(sum->ac->bucket); 4992 } 4993 return s; 4994 } 5062 4995 5063 void reduction_step::reduce(red_object* r, int l, int u){} 4996 5064 void simple_reducer::target_is_no_sum_reduce(red_object & ro){ -
Singular/tgb.h
r46c5be r24d494 256 256 static void soon_t_rep(const int & arg_i, const int & arg_j, calc_dat* c); 257 257 static int pLcmDeg(poly a, poly b); 258 static int simple_posInS (kStrategy strat, poly p,int len , BOOLEAN is_char0);258 static int simple_posInS (kStrategy strat, poly p,int len); 259 259 static BOOLEAN find_next_pair(calc_dat* c, BOOLEAN go_higher=TRUE); 260 260 … … 273 273 static sorted_pair_node* quick_pop_pair(calc_dat* c); 274 274 static sorted_pair_node* top_pair(calc_dat* c); 275 static int quality(poly p, int len, calc_dat* c);275 //static int quality(poly p, int len, calc_dat* c); 276 276 /** 277 277 makes on each red_object in a region a single_step
Note: See TracChangeset
for help on using the changeset viewer.