Changeset 81f40d7 in git
- Timestamp:
- Jul 6, 2015, 11:02:59 AM (8 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 83b334dad0b1a90e01e1ae2ea14eb8a09c1c3709
- Parents:
- a4698147758e1dabc111299150716127442050e9
- Location:
- kernel/GBEngine
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/GBEngine/kutil.cc
ra469814 r81f40d7 36 36 #include <kernel/ideals.h> 37 37 #endif 38 #include <gmp.h>39 38 40 39 // define if enterL, enterT should use memmove instead of doing it manually … … 5031 5030 #if 0 5032 5031 if (length < 0) return 0; 5033 //if(pIsConstant(pHead(p->p))) return length+1;5034 5032 if (pLmCmp(set[length].p, p->p) == 1) 5035 5033 return length+1; … … 5041 5039 int en = length+1; 5042 5040 bool isFromF = (p->p1 == NULL) && (p->p2 == NULL); 5043 #if 05044 printf("\nThis is L:\n");5045 for(int ii=0; ii<=strat->Ll; ii++)5046 {5047 printf("\nL[%i]: grad = %i, length = %i\n", ii,set[ii].FDeg,set[ii].length);5048 pWrite(set[ii].p);5049 pWrite(set[ii].p1);5050 pWrite(set[ii].p2);5051 pWrite(pHead(set[ii].p));5052 printf("\nlmcmp = %i\n",pLmCmp(pHead(set[ii].p), pHead(p->p)));5053 }5054 printf("\nThis is P:\n");pWrite(p->p);pWrite(p->p1);pWrite(p->p2);5055 #endif5056 5041 if(isFromF) 5057 5042 { 5058 //printf("\nisFromF\n");5059 5043 i = 0; 5060 5044 while(i<=length && pLmCmp(set[i].p, p->p)==1) … … 5070 5054 else 5071 5055 { 5072 //printf("\nis not FromF\n");5073 5056 i = 0; 5074 5057 while(i<= length && pLmCmp(set[i].p, p->p) == 1) 5075 5058 i++; 5076 5059 an = i; 5077 //printf("\nan = %i\n",an);5078 5060 i = length; 5079 //printf("\ni = %i\n", i);5080 5061 while(i>=0 && pLmCmp(set[i].p, p->p)==-1) 5081 5062 i--; 5082 //printf("\ni2 = %i\n", i);5083 5063 while(i<= length && ((set[i].p1 == NULL) && (set[i].p2 == NULL)) && (pLmCmp(set[i].p,p->p) == 0) && (i > an)) 5084 5064 i--; 5085 5065 en = i+1; 5086 //printf("\nen = %i\n",en); 5087 } 5088 //printf("\nan = %i\n en = %i\n",an,en); 5089 //getchar(); 5066 } 5090 5067 loop 5091 5068 { … … 5121 5098 } 5122 5099 } 5123 5100 #else 5124 5101 if (length < 0) return 0; 5125 5102 if(pIsConstant(p->p)) return length+1; … … 5138 5115 return 0; 5139 5116 5140 bool isFromF = (p->p1 == NULL) && (p->p2 == NULL); 5141 #if 0 5142 //printf("\nThis is L:\n"); 5143 /*for(int ii=0; ii<=strat->Ll; ii++) 5144 { 5145 printf("\nL[%i]: grad = %i, length = %i\n", ii,set[ii].FDeg,set[ii].length); 5146 pWrite(set[ii].p); 5147 pWrite(set[ii].p1); 5148 pWrite(set[ii].p2); 5149 }*/ 5150 printf("\nThis is P:\n");pWrite(p->p);pWrite(p->p1);pWrite(p->p2); 5151 #endif 5152 if(isFromF) 5153 { 5154 //printf("\nisFromF\n"); 5155 i = 0; 5156 while(i<= length && set[i].FDeg > p->FDeg && !pIsConstant(set[i].p)) 5157 i++; 5158 while(i<= length && ((set[i].p1 != NULL) || (set[i].p2 != NULL)) && (set[i].FDeg == p->FDeg) && !pIsConstant(set[i].p)) 5159 i++; 5160 an = i; 5161 if(pIsConstant(set[length].p)) 5162 i = length-1; 5163 else 5164 i = length; 5165 while(i>=0 && set[i].FDeg < p->FDeg) 5166 i--; 5167 en = i+1; 5168 } 5169 else 5170 { 5171 //printf("\nis not FromF\n"); 5172 i = 0; 5173 while(i<= length && set[i].FDeg > p->FDeg && !pIsConstant(set[i].p)) 5174 i++; 5175 an = i; 5176 //printf("\nan = %i\n",an); 5177 if(pIsConstant(set[length].p)) 5178 i = length-1; 5179 else 5180 i = length; 5181 //printf("\ni = %i\n", i); 5182 while(i>= 0 && set[i].FDeg < p->FDeg) 5183 i--; 5184 //printf("\ni2 = %i\n", i); 5185 while(i>=0 && ((set[i].p1 == NULL) && (set[i].p2 == NULL)) && (set[i].FDeg == p->FDeg) && (i > an)) 5186 i--; 5187 en = i+1; 5188 //printf("\nen = %i\n",en); 5189 } 5190 //printf("\nan = %i\n en = %i\n",an,en); 5191 //getchar(); 5192 loop 5193 { 5194 if(an > length) 5195 return length+1; 5196 if (an >= en-1) 5197 { 5198 if(an == en) 5199 return en; 5200 if (pLmCmp(set[an].p, p->p) == 1) 5201 return en; 5202 if (pLmCmp(set[an].p, p->p) == -1) 5203 return an; 5117 bool isFromF = (p->p1 == NULL) && (p->p2 == NULL); 5118 5119 if(isFromF) 5120 { 5121 i = 0; 5122 while(i<= length && set[i].FDeg > p->FDeg && !pIsConstant(set[i].p)) 5123 i++; 5124 while(i<= length && ((set[i].p1 != NULL) || (set[i].p2 != NULL)) && 5125 (set[i].FDeg == p->FDeg) && !pIsConstant(set[i].p)) 5126 i++; 5127 an = i; 5128 if(pIsConstant(set[length].p)) 5129 i = length-1; 5130 else 5131 i = length; 5132 while(i>=0 && set[i].FDeg < p->FDeg) 5133 i--; 5134 en = i+1; 5135 } 5136 else 5137 { 5138 i = 0; 5139 while(i<= length && set[i].FDeg > p->FDeg && !pIsConstant(set[i].p)) 5140 i++; 5141 an = i; 5142 if(pIsConstant(set[length].p)) 5143 i = length-1; 5144 else 5145 i = length; 5146 while(i>= 0 && set[i].FDeg < p->FDeg) 5147 i--; 5148 while(i>=0 && ((set[i].p1 == NULL) && (set[i].p2 == NULL)) && 5149 (set[i].FDeg == p->FDeg) && (i > an)) 5150 i--; 5151 en = i+1; 5152 } 5153 loop 5154 { 5155 if(an > length) 5156 return length+1; 5157 if (an >= en-1) 5158 { 5159 if(an == en) 5160 return en; 5161 if (pLmCmp(set[an].p, p->p) == 1) 5162 return en; 5163 if (pLmCmp(set[an].p, p->p) == -1) 5164 return an; 5165 if (pLmCmp(set[i].p, p->p) == 0) 5166 { 5167 if(nGreater(set[an].p->coef, p->p->coef)) 5168 return en; 5169 else 5170 return an; 5171 } 5172 } 5173 i=(an+en) / 2; 5174 if (pLmCmp(set[i].p, p->p) == 1) 5175 an=i; 5176 if (pLmCmp(set[i].p, p->p) == -1) 5177 en=i; 5204 5178 if (pLmCmp(set[i].p, p->p) == 0) 5205 5179 { 5206 if(nGreater(set[ an].p->coef, p->p->coef))5207 return en;5180 if(nGreater(set[i].p->coef, p->p->coef)) 5181 an = i; 5208 5182 else 5209 return an; 5210 } 5211 } 5212 i=(an+en) / 2; 5213 if (pLmCmp(set[i].p, p->p) == 1) 5214 an=i; 5215 if (pLmCmp(set[i].p, p->p) == -1) 5216 en=i; 5217 if (pLmCmp(set[i].p, p->p) == 0) 5218 { 5219 if(nGreater(set[i].p->coef, p->p->coef)) 5220 an = i; 5221 else 5222 en = i; 5223 } 5224 } 5225 #endif 5226 } 5183 en = i; 5184 } 5185 } 5186 #endif 5187 } 5188 5189 5227 5190 /*2 Position for rings L: Here I am 5228 5191 * looks up the position of polynomial p in set … … 8804 8767 } 8805 8768 } 8806 ring QQ_ring = rCopy(currRing); 8807 rUnComplete(QQ_ring); 8808 QQ_ring->cf->ref--; 8769 ring QQ_ring = rCopy0(currRing,FALSE); 8770 nKillChar(QQ_ring->cf); 8809 8771 QQ_ring->cf = nInitChar(n_Q, NULL); 8810 if(Q!= NULL)8811 QQ_ring->qideal = NULL;8812 8772 rComplete(QQ_ring,1); 8813 8773 QQ_ring = rAssure_c_dp(QQ_ring); … … 8815 8775 nMapFunc nMap = n_SetMap(origR->cf, QQ_ring->cf); 8816 8776 ideal II = idInit(IDELEMS(F)+idelemQ+2,id_RankFreeModule(F, origR)); 8817 int *perm = (int *)omAlloc0((QQ_ring->N+1)*sizeof(int));8818 for(int i=QQ_ring->N;i>0;i--)8819 perm[i]=i;8820 8777 for(int i = 0, j = 0; i<IDELEMS(F); i++) 8821 II->m[j++] = p _PermPoly(F->m[i], perm, origR, QQ_ring, nMap, NULL, 0);8778 II->m[j++] = prMapR(F->m[i], nMap, origR, QQ_ring); 8822 8779 for(int i = 0, j = IDELEMS(F); i<idelemQ; i++) 8823 II->m[j++] = p_PermPoly(Q->m[i], perm, origR, QQ_ring, nMap, NULL, 0); 8824 //rWrite(currRing); 8780 II->m[j++] = prMapR(Q->m[i], nMap, origR, QQ_ring); 8825 8781 ideal one = kStd(II, NULL, isNotHomog, NULL); 8826 8782 idSkipZeroes(one); … … 8838 8794 if(pGetComp(syz->m[i]) == 1) 8839 8795 { 8840 if(p _Deg(pHead(syz->m[i]), currRing) == 0)8796 if(pIsConstant(syz->m[i])) 8841 8797 { 8842 integer = p Copy(pHead(syz->m[i]));8798 integer = pHead(syz->m[i]); 8843 8799 pSetComp(integer, 0); 8844 8800 break; … … 8848 8804 rChangeCurrRing(origR); 8849 8805 nMapFunc nMap2 = n_SetMap(QQ_ring->cf, origR->cf); 8850 pmon = p_PermPoly(integer, perm, QQ_ring, origR, nMap2, NULL, 0); 8806 pmon = prMapR(integer, nMap2, QQ_ring, origR); 8807 rDelete(QQ_ring); 8851 8808 return pmon; 8852 8809 } … … 8881 8838 if(pGetComp(syz->m[i]) == 1) 8882 8839 { 8883 if(p _Deg(pHead(syz->m[i]), currRing) == 0)8840 if(pIsConstant(syz->m[i])) 8884 8841 { 8885 8842 pSetCoeff(mindegmon, syz->m[i]->coef); … … 8892 8849 { 8893 8850 rChangeCurrRing(origR); 8851 rDelete(QQ_ring); 8894 8852 return NULL; 8895 8853 } 8896 8854 rChangeCurrRing(origR); 8897 8855 nMapFunc nMap2 = n_SetMap(QQ_ring->cf, origR->cf); 8898 pmon = p_PermPoly(mindegmon, perm, QQ_ring, origR, nMap2, NULL, 0); 8856 pmon = prMapR(mindegmon, nMap2, QQ_ring, origR); 8857 rDelete(QQ_ring); 8899 8858 return pmon; 8900 8859 } … … 8905 8864 rChangeCurrRing(origR); 8906 8865 } 8866 rDelete(QQ_ring); 8907 8867 return NULL; 8908 8868 } … … 8930 8890 if(pLmDivisibleBy(strat->S[i], p)) 8931 8891 { 8892 nDelete(&(p->coef)); 8932 8893 p->coef = currRing->cf->cfIntMod(p->coef, strat->S[i]->coef, currRing->cf); 8933 8894 } … … 8947 8908 if(pLmDivisibleBy(strat->S[i], pp)) 8948 8909 { 8910 nDelete(&(pp->coef)); 8949 8911 pp->coef = currRing->cf->cfIntMod(pp->coef, strat->S[i]->coef, currRing->cf); 8950 8912 if(nIsZero(pp->coef)) … … 8966 8928 } 8967 8929 } 8968 //printf("\nAfter\n");pWrite(pH); 8969 } 8970 } 8971 //printf("\nFinal\n");pWrite(pH);getchar(); 8930 } 8931 } 8972 8932 h->SetLmCurrRing(); 8973 8933 if(deleted) … … 8980 8940 intermediate coefficient swell and beautifies output 8981 8941 */ 8982 void finalReduceByMon(kStrategy &strat)8942 void finalReduceByMon(kStrategy strat) 8983 8943 { 8984 8944 if(!nCoeff_is_Ring_Z(currRing->cf)) … … 8996 8956 if(pLmDivisibleBy(strat->S[j], p)) 8997 8957 { 8958 nDelete(&(p->coef)); 8998 8959 p->coef = currRing->cf->cfIntMod(p->coef, strat->S[j]->coef, currRing->cf); 8999 8960 } … … 9001 8962 if((pp == NULL) && (nIsZero(p->coef))) 9002 8963 { 9003 strat->S[i] = NULL; 9004 //deleteInS(i, strat); 8964 deleteInS(i, strat); 9005 8965 } 9006 8966 else … … 9010 8970 if(pLmDivisibleBy(strat->S[j], pp)) 9011 8971 { 8972 nDelete(&(pp->coef)); 9012 8973 pp->coef = currRing->cf->cfIntMod(pp->coef, strat->S[j]->coef, currRing->cf); 9013 8974 if(nIsZero(pp->coef)) -
kernel/GBEngine/kutil.h
ra469814 r81f40d7 200 200 // detected by Buchberger's Product Criterion and can be 201 201 // deleted 202 203 bool strong;204 202 205 203 // initialization
Note: See TracChangeset
for help on using the changeset viewer.