Changeset 28325ab in git


Ignore:
Timestamp:
Jun 10, 2008, 12:20:11 PM (15 years ago)
Author:
Motsak Oleksandr <motsak@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
Children:
7234766a762552b692e77a91f024bc0c5035587f
Parents:
52e2f60700ff18f1b002b09ada312e11d8a71027
Message:
*motsak: cleanup


git-svn-id: file:///usr/local/Singular/svn/trunk@10740 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/extra.cc

    r52e2f6 r28325ab  
    22*  Computer Algebra System SINGULAR      *
    33*****************************************/
    4 /* $Id: extra.cc,v 1.270 2008-05-23 19:46:32 ederc Exp $ */
     4/* $Id: extra.cc,v 1.271 2008-06-10 10:20:11 motsak Exp $ */
    55/*
    66* ABSTRACT: general interface to internals of Singular ("system" command)
     
    831831   
    832832/*==================== PLURAL =================*/
    833 #if 0
    834     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       else
    851       {
    852         WarnS("redefining algebra structure");
    853         if (currRing->nc->ref>1) // in use by somebody else
    854           currRing->nc->ref--;
    855         else
    856           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       else
    893       {
    894         nN=pGetCoeff(pN); // pN is not NULL anyway
    895         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       else
    919       {
    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       else
    950       {
    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     else
    1046 #endif
    1047833/*==================== opp ==================================*/
    1048834    if (strcmp(sys_cmd, "opp")==0)
Note: See TracChangeset for help on using the changeset viewer.