Changeset 28325ab in git
- Timestamp:
- Jun 10, 2008, 12:20:11 PM (15 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
- Children:
- 7234766a762552b692e77a91f024bc0c5035587f
- Parents:
- 52e2f60700ff18f1b002b09ada312e11d8a71027
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/extra.cc
r52e2f6 r28325ab 2 2 * Computer Algebra System SINGULAR * 3 3 *****************************************/ 4 /* $Id: extra.cc,v 1.27 0 2008-05-23 19:46:32 edercExp $ */4 /* $Id: extra.cc,v 1.271 2008-06-10 10:20:11 motsak Exp $ */ 5 5 /* 6 6 * ABSTRACT: general interface to internals of Singular ("system" command) … … 831 831 832 832 /*==================== PLURAL =================*/ 833 #if 0834 if (strcmp(sys_cmd, "PLURAL") == 0)835 {836 matrix C;837 matrix D;838 number nN;839 poly pN;840 int i,j;841 sleftv tmp_v;842 memset(&tmp_v,0,sizeof(tmp_v));843 844 if (currRing->nc==NULL)845 {846 currRing->nc=(nc_struct *)omAlloc0(sizeof(nc_struct));847 currRing->nc->ref=1;848 currRing->nc->basering=currRing;849 }850 else851 {852 WarnS("redefining algebra structure");853 if (currRing->nc->ref>1) // in use by somebody else854 currRing->nc->ref--;855 else856 ncKill(currRing); /* kill the previous nc data */857 currRing->nc=(nc_struct *)omAlloc0(sizeof(nc_struct));858 currRing->nc->ref=1;859 currRing->nc->basering=currRing;860 }861 currRing->nc->type=nc_general;862 /* C is either a poly (coeff - an int or a number) or a matrix */863 if (h==NULL) return TRUE;864 leftv hh=h->next;865 h->next=NULL;866 switch(h->Typ())867 {868 case MATRIX_CMD: { C=(matrix)h->CopyD(); break; }869 870 case INT_CMD: case NUMBER_CMD:871 {872 i=iiTestConvert(h->Typ(), POLY_CMD);873 if (i==0)874 {875 Werror("cannot convert to poly");876 return TRUE;877 }878 iiConvert(h->Typ(), POLY_CMD, i, h, &tmp_v);879 pN=(poly)tmp_v.Data();880 break;881 }882 883 case POLY_CMD: {pN=(poly)h->Data(); break;}884 885 default: return TRUE;886 }887 if (h->Typ()==MATRIX_CMD)888 {889 currRing->nc->type=nc_undef; /* to analyze later ! */890 // currRing->nc->IsSkewConstant=NULL;891 }892 else893 {894 nN=pGetCoeff(pN); // pN is not NULL anyway895 if (nIsZero(nN))896 {897 Werror("zero coefficients are not allowed");898 return TRUE;899 }900 if (nIsOne(nN)) currRing->nc->type=nc_lie;901 else currRing->nc->type=nc_skew;902 currRing->nc->IsSkewConstant=1;903 /* create matrix C */904 C=mpNew(currRing->N,currRing->N);905 for(i=1;i<currRing->N;i++)906 {907 for(j=i+1;j<=currRing->N;j++)908 {909 MATELEM(C,i,j) = nc_p_CopyPut(pN,currRing);910 // MATELEM(C,i,j)=pCopy(pN);911 }912 }913 }914 pN=NULL;915 h=hh;916 /* D is either a poly or a matrix */917 if (h==NULL) { pN=NULL;} /* D is zero matrix */918 else919 {920 switch(h->Typ())921 {922 case MATRIX_CMD: { D=(matrix)h->CopyD(); break;}923 924 case INT_CMD: case NUMBER_CMD:925 {926 i=iiTestConvert(h->Typ(), POLY_CMD);927 if (i==0)928 {929 Werror("cannot convert to poly");930 return TRUE;931 }932 iiConvert(h->Typ(), POLY_CMD, i, h, &tmp_v);933 pN=(poly)tmp_v.Data();934 break;935 }936 937 case POLY_CMD: { pN=(poly)h->Data();break;}938 939 default: return TRUE;940 }941 } /* end else h==NULL */942 if (pN==NULL)943 {944 if (currRing->nc->type==nc_lie)945 {946 currRing->nc->type=nc_skew; /* even commutative! */947 }948 }949 else950 {951 if (currRing->nc->type==nc_skew) currRing->nc->type=nc_general;952 } /* end pN==NULL */953 if (h==NULL)954 {955 WerrorS("expected `system(\"PLURAL\",<matrix>,<matrix>)`");956 idDelete((ideal *)&(currRing->nc->C));957 omFreeSize((ADDRESS)currRing->nc,sizeof(nc_struct));958 currRing->nc=NULL;959 return TRUE;960 }961 if (h->Typ()!=MATRIX_CMD)962 {963 D=mpNew(currRing->N,currRing->N);964 /* create matrix D */965 for(i=1;i<currRing->N;i++)966 {967 for(j=i+1;j<=currRing->N;j++)968 {969 MATELEM(D,i,j) = nc_p_CopyPut(pN,currRing);970 // MATELEM(D,i,j)=pCopy(pN);971 }972 }973 }974 else currRing->nc->type=nc_undef;975 tmp_v.CleanUp();976 pN=NULL;977 /* Now we proceed with C and D */978 matrix COM;979 currRing->nc->MT=(matrix *)omAlloc0(currRing->N*(currRing->N-1)/2*sizeof(matrix));980 currRing->nc->MTsize=(int *)omAlloc0(currRing->N*(currRing->N-1)/2*sizeof(int));981 currRing->nc->C=C;982 currRing->nc->D=D;983 COM=mpCopy(currRing->nc->C);984 poly p;985 short DefMTsize=7;986 int tmpIsSkewConstant=1;987 int IsNonComm=0;988 pN=nc_p_CopyGet(MATELEM(currRing->nc->C,1,2),currRing);989 // pN=MATELEM(currRing->nc->C,1,2);990 991 for(i=1;i<currRing->N;i++)992 {993 for(j=i+1;j<=currRing->N;j++)994 {995 if (MATELEM(currRing->nc->C,i,j)==NULL)996 {997 Werror("Incorrect input : matrix of coefficients contains zeros in the upper triangle!");998 return TRUE;999 }1000 if (!nEqual(pGetCoeff(pN),pGetCoeff(MATELEM(currRing->nc->C,i,j)))) tmpIsSkewConstant=0;1001 if (MATELEM(currRing->nc->D,i,j)==NULL) /* quasicommutative case */1002 {1003 currRing->nc->MTsize[UPMATELEM(i,j,currRing->N)]=1;1004 /* 1x1 mult.matrix */1005 currRing->nc->MT[UPMATELEM(i,j,currRing->N)]=mpNew(1,1);1006 }1007 else /* pure noncommutative case*/1008 {1009 IsNonComm=1;1010 MATELEM(COM,i,j)=NULL;1011 currRing->nc->MTsize[UPMATELEM(i,j,currRing->N)]=DefMTsize; /* default sizes */1012 currRing->nc->MT[UPMATELEM(i,j,currRing->N)]=mpNew(DefMTsize,DefMTsize);1013 }1014 p=pOne();1015 pSetCoeff(p,nCopy(pGetCoeff(MATELEM(currRing->nc->C,i,j))));1016 pSetExp(p,i,1);1017 pSetExp(p,j,1);1018 pSetm(p);1019 // p=pAdd(p,pCopy(MATELEM(currRing->nc->D,i,j)));1020 p=pAdd(p,nc_p_CopyGet(MATELEM(currRing->nc->D,i,j),currRing));1021 // MATELEM(currRing->nc->MT[UPMATELEM(i,j,currRing->N)],1,1)=p;1022 MATELEM(currRing->nc->MT[UPMATELEM(i,j,currRing->N)],1,1)=nc_p_CopyPut(p,currRing);1023 pDelete(&p);1024 p=NULL;1025 }1026 /* set MT[i,j,1,1] to c_i_j*x_i*x_j + D_i_j */1027 }1028 if (currRing->nc->type==nc_undef)1029 {1030 if (IsNonComm==1)1031 {1032 assume(pN!=NULL);1033 if ((tmpIsSkewConstant==1) && (nIsOne(pGetCoeff(pN)))) currRing->nc->type=nc_lie;1034 else currRing->nc->type=nc_general;1035 }1036 if (IsNonComm==0)1037 {1038 currRing->nc->type=nc_skew; /* could be also commutative */1039 currRing->nc->IsSkewConstant=tmpIsSkewConstant;1040 }1041 }1042 currRing->nc->COM=COM;1043 return FALSE;1044 }1045 else1046 #endif1047 833 /*==================== opp ==================================*/ 1048 834 if (strcmp(sys_cmd, "opp")==0)
Note: See TracChangeset
for help on using the changeset viewer.