Changeset 358740 in git
- Timestamp:
- Dec 17, 2014, 5:07:14 PM (9 years ago)
- Branches:
- (u'spielwiese', 'd0474371d8c5d8068ab70bfb42719c97936b18a6')
- Children:
- 6b11c4c31a9405d61763d6cdb3862a3fac462317
- Parents:
- fce947c9e6c3e8c6d5a622c7f6b0d724580993cc
- git-author:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2014-12-17 17:07:14+01:00
- git-committer:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2014-12-17 18:08:50+01:00
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/iparith.cc
rfce947 r358740 6869 6869 res->data=(char *)id; 6870 6870 return FALSE; 6871 } 6872 static BOOLEAN jjFETCH_M(leftv res, leftv u) 6873 { 6874 ring r=(ring)u->Data(); 6875 leftv v=u->next; 6876 leftv perm_var_l=v->next; 6877 leftv perm_par_l=v->next->next; 6878 if ((perm_var_l->Typ()!=INTVEC_CMD) 6879 ||((perm_par_l!=NULL)&&(perm_par_l->Typ()!=INTVEC_CMD)) 6880 ||(u->Typ()!=RING_CMD)) 6881 { 6882 WerrorS("fetch(<ring>,<name>[,<intvec>[,<intvec>])"); 6883 return TRUE; 6884 } 6885 intvec *perm_var_v=(intvec*)perm_var_l->Data(); 6886 intvec *perm_par_v=NULL; 6887 if (perm_par_l!=NULL) 6888 perm_par_v=(intvec*)perm_par_l->Data(); 6889 idhdl w; 6890 nMapFunc nMap; 6891 6892 if ((w=r->idroot->get(v->Name(),myynest))!=NULL) 6893 { 6894 int *perm=NULL; 6895 int *par_perm=NULL; 6896 int par_perm_size=0; 6897 BOOLEAN bo; 6898 if ((nMap=n_SetMap(r->cf,currRing->cf))==NULL) 6899 { 6900 // Allow imap/fetch to be make an exception only for: 6901 if ( (rField_is_Q_a(r) && // Q(a..) -> Q(a..) || Q || Zp || Zp(a) 6902 (rField_is_Q(currRing) || rField_is_Q_a(currRing) || 6903 (rField_is_Zp(currRing) || rField_is_Zp_a(currRing)))) 6904 || 6905 (rField_is_Zp_a(r) && // Zp(a..) -> Zp(a..) || Zp 6906 (rField_is_Zp(currRing, r->cf->ch) || 6907 rField_is_Zp_a(currRing, r->cf->ch))) ) 6908 { 6909 par_perm_size=rPar(r); 6910 } 6911 else 6912 { 6913 goto err_fetch; 6914 } 6915 } 6916 else 6917 par_perm_size=rPar(r); 6918 perm=(int *)omAlloc0((r->N+1)*sizeof(int)); 6919 if (par_perm_size!=0) 6920 par_perm=(int *)omAlloc0(par_perm_size*sizeof(int)); 6921 int i; 6922 if (perm_par_l==NULL) 6923 { 6924 if (par_perm_size!=0) 6925 for(i=si_min(rPar(r),rPar(currRing))-1;i>=0;i--) par_perm[i]=-(i+1); 6926 } 6927 else 6928 { 6929 if (par_perm_size==0) WarnS("source ring has no parameters"); 6930 else 6931 { 6932 for(i=si_min(rPar(r),rPar(currRing))-1;i>=0;i--) 6933 { 6934 if (i<perm_par_v->length()) par_perm[i]=(*perm_par_v)[i]; 6935 } 6936 } 6937 } 6938 for(i=si_min(rVar(r),rVar(currRing))-1;i>=0;i--) 6939 { 6940 if (i<perm_var_v->length()) perm[i+1]=(*perm_var_v)[i]; 6941 } 6942 if (BVERBOSE(V_IMAP)) 6943 { 6944 for(i=1;i<=si_min(r->N,currRing->N);i++) 6945 { 6946 if (perm[i]>0) 6947 Print("// var nr %d: %s -> var %s\n",i,r->names[i-1],currRing->names[perm[i]-1]); 6948 else if (perm[i]<0) 6949 Print("// var nr %d: %s -> par %s\n",i,r->names[i-1],rParameter(currRing)[-perm[i]-1]); 6950 } 6951 for(i=1;i<=si_min(rPar(r),rPar(currRing));i++) // possibly empty loop 6952 { 6953 if (par_perm[i-1]<0) 6954 Print("// par nr %d: %s -> par %s\n", 6955 i,rParameter(r)[i-1],rParameter(currRing)[-par_perm[i-1]-1]); 6956 else if (par_perm[i-1]>0) 6957 Print("// par nr %d: %s -> var %s\n", 6958 i,rParameter(r)[i-1],currRing->names[par_perm[i-1]-1]); 6959 } 6960 } 6961 if (IDTYP(w)==ALIAS_CMD) w=(idhdl)IDDATA(w); 6962 sleftv tmpW; 6963 memset(&tmpW,0,sizeof(sleftv)); 6964 tmpW.rtyp=IDTYP(w); 6965 tmpW.data=IDDATA(w); 6966 if ((bo=maApplyFetch(IMAP_CMD,NULL,res,&tmpW, r, 6967 perm,par_perm,par_perm_size,nMap))) 6968 { 6969 Werror("cannot map %s of type %s(%d)",v->name, Tok2Cmdname(w->typ),w->typ); 6970 } 6971 if (perm!=NULL) 6972 omFreeSize((ADDRESS)perm,(r->N+1)*sizeof(int)); 6973 if (par_perm!=NULL) 6974 omFreeSize((ADDRESS)par_perm,par_perm_size*sizeof(int)); 6975 return bo; 6976 } 6977 else 6978 { 6979 Werror("identifier %s not found in %s",v->Fullname(),u->Fullname()); 6980 } 6981 return TRUE; 6982 err_fetch: 6983 Werror("no identity map from %s (%s -> %s)",u->Fullname(), 6984 nCoeffString(r->cf), 6985 nCoeffString(currRing->cf)); 6986 return TRUE; 6871 6987 } 6872 6988 static BOOLEAN jjINTERSECT_PL(leftv res, leftv v) … … 8224 8340 while (dA3[i].cmd==op) 8225 8341 { 8226 if ((ai=iiTestConvert(at,dA3[i].arg1 ))!=0)8342 if ((ai=iiTestConvert(at,dA3[i].arg1,dConvertTypes))!=0) 8227 8343 { 8228 if ((bi=iiTestConvert(bt,dA3[i].arg2 ))!=0)8344 if ((bi=iiTestConvert(bt,dA3[i].arg2,dConvertTypes))!=0) 8229 8345 { 8230 if ((ci=iiTestConvert(ct,dA3[i].arg3 ))!=0)8346 if ((ci=iiTestConvert(ct,dA3[i].arg3,dConvertTypes))!=0) 8231 8347 { 8232 8348 res->rtyp=dA3[i].res; … … 8239 8355 iiTwoOps(op),Tok2Cmdname(dA3[i].arg1), 8240 8356 Tok2Cmdname(dA3[i].arg2),Tok2Cmdname(dA3[i].arg3)); 8241 failed= ((iiConvert(at,dA3[i].arg1,ai,a,an ))8242 || (iiConvert(bt,dA3[i].arg2,bi,b,bn ))8243 || (iiConvert(ct,dA3[i].arg3,ci,c,cn ))8357 failed= ((iiConvert(at,dA3[i].arg1,ai,a,an,dConvertTypes)) 8358 || (iiConvert(bt,dA3[i].arg2,bi,b,bn,dConvertTypes)) 8359 || (iiConvert(ct,dA3[i].arg3,ci,c,cn,dConvertTypes)) 8244 8360 || (call_failed=dA3[i].p(res,an,bn,cn))); 8245 8361 // everything done, clean up temp. variables … … 8331 8447 { 8332 8448 memset(res,0,sizeof(sleftv)); 8333 BOOLEAN call_failed=FALSE;8334 8449 8335 8450 if (!errorreported) … … 8420 8535 { 8421 8536 memset(res,0,sizeof(sleftv)); 8422 BOOLEAN bo;8423 8537 8424 8538 if (!errorreported) -
Singular/table.h
rfce947 r358740 802 802 ,{D(jjDBPRINT), DBPRINT_CMD, NONE, -2 , ALLOW_PLURAL |ALLOW_RING} 803 803 //,{D(jjEXPORTTO_M), EXPORTTO_CMD, NONE, -2 , ALLOW_PLURAL |ALLOW_RING} 804 ,{D(jjCALL2ARG), FETCH_CMD, ANY_TYPE/*or set by p*/,2 , ALLOW_PLURAL |ALLOW_RING} 805 ,{D(jjFETCH_M), FETCH_CMD, ANY_TYPE/*or set by p*/,3 , ALLOW_PLURAL |ALLOW_RING} 806 ,{D(jjFETCH_M), FETCH_CMD, ANY_TYPE/*or set by p*/,4 , ALLOW_PLURAL |ALLOW_RING} 804 807 ,{D(jjCALL1ARG), IDEAL_CMD, IDEAL_CMD, 1 , ALLOW_PLURAL |ALLOW_RING} 805 808 ,{D(jjIDEAL_PL), IDEAL_CMD, IDEAL_CMD, -1 , ALLOW_PLURAL |ALLOW_RING} … … 913 916 { "factorize", 0, FAC_CMD , CMD_12}, 914 917 { "farey", 0, FAREY_CMD , CMD_2}, 915 { "fetch", 0, FETCH_CMD , CMD_ 2},918 { "fetch", 0, FETCH_CMD , CMD_M}, 916 919 { "fglm", 0, FGLM_CMD , CMD_2}, 917 920 { "fglmquot", 0, FGLMQUOT_CMD, CMD_2},
Note: See TracChangeset
for help on using the changeset viewer.