Changeset f006a1 in git for Singular/dyn_modules/freealgebra/freealgebra.cc
- Timestamp:
- Jul 23, 2019, 4:33:05 PM (5 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 9102bbc549613cd829348b8de22f634afde32b53
- Parents:
- dcddf9cfa6c64ce8c0dc05e26e136194af70b1e3
- git-author:
- Karim Abou Zeid <karim23697@gmail.com>2019-07-23 16:33:05+02:00
- git-committer:
- Karim Abou Zeid <karim23697@gmail.com>2019-07-24 14:54:41+02:00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/dyn_modules/freealgebra/freealgebra.cc
rdcddf9c rf006a1 5 5 { 6 6 const short t1[]={2,RING_CMD,INT_CMD}; 7 if (iiCheckTypes(args,t1,1)) 7 const short t2[]={3,RING_CMD,INT_CMD,INT_CMD}; 8 if (iiCheckTypes(args, t2, 0) || iiCheckTypes(args, t1, 1)) 8 9 { 9 10 ring r=(ring)args->Data(); … … 32 33 return TRUE; 33 34 } 34 ring R=freeAlgebra(r,d); 35 int ncGenCount = 0; 36 if (iiCheckTypes(args,t2,0)) 37 ncGenCount = (int)(long) args->next->next->Data(); 38 ring R=freeAlgebra(r,d,ncGenCount); 35 39 res->rtyp=RING_CMD; 36 40 res->data=R; … … 124 128 else return TRUE; 125 129 } 126 127 // copied from iparith.cc128 // NOTE: they do not set res->rtyp129 static BOOLEAN jjSYZYGY(leftv res, leftv v)130 {131 intvec *ww=(intvec *)atGet(v,"isHomog",INTVEC_CMD);132 intvec *w=NULL;133 ideal v_id=(ideal)v->Data();134 tHomog hom=testHomog;135 if (ww!=NULL)136 {137 if (idTestHomModule(v_id,currRing->qideal,ww))138 {139 w=ivCopy(ww);140 int add_row_shift=w->min_in();141 (*w)-=add_row_shift;142 hom=isHomog;143 }144 else145 {146 //WarnS("wrong weights");147 delete ww; ww=NULL;148 hom=testHomog;149 }150 }151 else152 {153 if (v->Typ()==IDEAL_CMD)154 if (idHomIdeal(v_id,currRing->qideal))155 hom=isHomog;156 }157 ideal S=idSyzygies(v_id,hom,&w);158 res->data = (char *)S;159 if (hom==isHomog)160 {161 int vl=S->rank;162 intvec *vv=new intvec(vl);163 if ((v->Typ()==IDEAL_CMD)||(ww==NULL))164 {165 for(int i=0;i<vl;i++)166 {167 if (v_id->m[i]!=NULL)168 (*vv)[i]=p_Deg(v_id->m[i],currRing);169 }170 }171 else172 {173 p_SetModDeg(ww, currRing);174 for(int i=0;i<vl;i++)175 {176 if (v_id->m[i]!=NULL)177 (*vv)[i]=currRing->pFDeg(v_id->m[i],currRing);178 }179 p_SetModDeg(NULL, currRing);180 }181 if (idTestHomModule(S,currRing->qideal,vv))182 atSet(res,omStrDup("isHomog"),vv,INTVEC_CMD);183 else184 delete vv;185 }186 if (w!=NULL) delete w;187 return FALSE;188 }189 190 static ring tagRing(ideal I)191 {192 ring tagRing = currRing;193 for (int i = 1; i <= IDELEMS(I); i++)194 {195 char *varname=(char *)omAlloc(256);196 sprintf(varname, "ncgen(%d)", i);197 tagRing = rPlusVar(tagRing, varname, 0);198 omFreeSize(varname, 256);199 }200 return tagRing;201 }202 203 static BOOLEAN lpSyzRing(leftv res, leftv v)204 {205 const short t1[]={1,IDEAL_CMD};206 const short t2[]={1,MODUL_CMD};207 if (iiCheckTypes(v,t1,1) || iiCheckTypes(v,t2,1))208 {209 ring origRing = currRing;210 currRing = tagRing((ideal)v->Data());211 212 BOOLEAN error = jjSYZYGY(res, v);213 if (error || errorreported) return TRUE;214 215 ideal syzygy = (ideal) res->data;216 for (int i = 0; i < IDELEMS(syzygy); i++)217 {218 pWrite(syzygy->m[i]);219 }220 221 res->rtyp = RING_CMD;222 res->data = currRing;223 currRing = origRing;224 return FALSE;225 }226 else return TRUE;227 }228 229 static BOOLEAN lpTagRing(leftv res, leftv v)230 {231 const short t[]={1,IDEAL_CMD};232 if (iiCheckTypes(v,t,1))233 {234 res->rtyp = RING_CMD;235 res->data = tagRing((ideal)v->Data());236 return FALSE;237 }238 else return TRUE;239 }240 130 #endif 241 131 … … 248 138 p->iiAddCproc("freealgebra.so","lpLmDivides",FALSE,lpLmDivides); 249 139 p->iiAddCproc("freealgebra.so","lpVarAt",FALSE,lpVarAt); 250 p->iiAddCproc("freealgebra.so","lpSyzRing",FALSE,lpSyzRing);251 p->iiAddCproc("freealgebra.so","lpTagRing",FALSE,lpTagRing);252 140 p->iiAddCproc("freealgebra.so","stest",TRUE,stest); 253 141 p->iiAddCproc("freealgebra.so","btest",TRUE,btest);
Note: See TracChangeset
for help on using the changeset viewer.