Changeset 59aa94 in git


Ignore:
Timestamp:
Feb 8, 2005, 7:59:36 PM (18 years ago)
Author:
Viktor Levandovskyy <levandov@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a657104b677b4c461d018cbf3204d72d34ad66a9')
Children:
066b0020bd9fd9b3c31513f59b07e261fa366329
Parents:
a96f4d9e2f9f0ae333c8bbfda7b2b6f5393bf913
Message:
*levandov: add, envelope, opposite for qrings


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

Legend:

Unmodified
Added
Removed
  • kernel/ring.cc

    ra96f4d r59aa94  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: ring.cc,v 1.28 2005-02-03 16:41:29 Singular Exp $ */
     4/* $Id: ring.cc,v 1.29 2005-02-08 18:59:36 levandov Exp $ */
    55
    66/*
     
    10801080//#endif
    10811081#ifdef HAVE_PLURAL
     1082  ring old_ring = currRing;
     1083  rChangeCurrRing(sum);
    10821084  BOOLEAN R1_is_nc = rIsPluralRing(r1);
    10831085  BOOLEAN R2_is_nc = rIsPluralRing(r2);
    10841086  if ( (R1_is_nc) || (R2_is_nc))
    10851087  {
     1088    rChangeCurrRing(r1); /* since rCopy works well only in currRing */
    10861089    ring R1 = rCopy(r1);
     1090    rChangeCurrRing(r2);
    10871091    ring R2 = rCopy(r2);
     1092    rChangeCurrRing(sum);
    10881093    /* basic nc constructions  */
    10891094    sum->nc = (nc_struct *)omAlloc0(sizeof(nc_struct));
     
    11361141      WarnS("Error on recognizing nc types");
    11371142    /* multiplication matrices */
    1138     ring old_ring = currRing;
    1139     rChangeCurrRing(sum);
     1143//     ring old_ring = currRing;
     1144//     rChangeCurrRing(sum);
    11401145/* find permutations of vars and pars */
    11411146    int *perm1 = (int *)omAlloc0((rVar(R1)+1)*sizeof(int));
     
    12021207    rDelete(R1);
    12031208    rDelete(R2);
     1209    /* TODO: delete perm arrays */
     1210    if (perm1!=NULL) omFree((ADDRESS)perm1);
     1211    if (perm2!=NULL) omFree((ADDRESS)perm2);
     1212    if (par_perm1!=NULL) omFree((ADDRESS)par_perm1);
     1213    if (par_perm2!=NULL) omFree((ADDRESS)par_perm2);
    12041214    if ( old_ring != NULL)
    12051215      rChangeCurrRing(old_ring);
    12061216  }
    12071217#endif
     1218  ring old_ring2 = currRing;
     1219  rChangeCurrRing(sum);
     1220  ideal Q=NULL;
     1221  ideal Q1, Q2;
    12081222  if (r1->qideal!=NULL)
    12091223  {
    1210     if (r2->qideal!=NULL)
    1211     {
    1212       WerrorS("todo: qring+qring");
    1213       return -1;
    1214     }
    1215     else
    1216     {
    1217       int * perm=(int*)omAlloc0(sizeof(int)*(sum->N+1));
    1218       int i;
    1219       for(i=1;i<=r1->N;i++) perm[i]=i;
    1220       sum->qideal=idInit(IDELEMS(r1->qideal),1);
    1221       for (int i=0;i<IDELEMS(r1->qideal);i++)
    1222         sum->qideal->m[i]=pPermPoly(r1->qideal->m[i],perm,r1,nCopy);
    1223       omFree((ADDRESS)perm);
    1224     }
    1225   }
    1226   else if (r2->qideal!=NULL)
    1227   {
    1228     int * perm=(int*)omAlloc0(sizeof(int)*(sum->N+1));
    1229     int i;
    1230     for(i=1;i<=r2->N;i++) perm[i]=i+r1->N;
    1231     sum->qideal=idInit(IDELEMS(r2->qideal),1);
     1224//     if (r2->qideal!=NULL)
     1225//     {
     1226//       WerrorS("todo: qring+qring");
     1227//       return -1;
     1228//     }
     1229//     else
     1230//     {}
     1231    /* these were defined in the Plural Part above... */
     1232    int *perm1 = (int *)omAlloc0((rVar(r1)+1)*sizeof(int));
     1233    int *par_perm1 = NULL;
     1234    if (rPar(r1)!=0) par_perm1=(int *)omAlloc0((rPar(r1)+1)*sizeof(int));
     1235    maFindPerm(r1->names,  rVar(r1),  r1->parameter,  rPar(r1),
     1236               sum->names, rVar(sum), sum->parameter, rPar(sum),
     1237               perm1, par_perm1, sum->ch);
     1238    nMapFunc nMap1 = nSetMap(r1);
     1239    Q1 = idInit(IDELEMS(r1->qideal),1);
     1240    for (int i=0;i<IDELEMS(r1->qideal);i++)
     1241      Q1->m[i] = pPermPoly(r1->qideal->m[i],perm1,r1,nMap1,par_perm1,rPar(r1));
     1242    omFree((ADDRESS)perm1);
     1243  }
     1244  else
     1245  {
     1246    Q1 = NULL;
     1247  }
     1248
     1249  if (r2->qideal!=NULL)
     1250  {
     1251    int *perm2 = (int *)omAlloc0((rVar(r2)+1)*sizeof(int));
     1252    int *par_perm2 = NULL;
     1253    if (rPar(r2)!=0) par_perm2=(int *)omAlloc0((rPar(r2)+1)*sizeof(int));
     1254    maFindPerm(r2->names,  rVar(r2),  r2->parameter,  rPar(r2),
     1255               sum->names, rVar(sum), sum->parameter, rPar(sum),
     1256               perm2, par_perm2, sum->ch);
     1257    nMapFunc nMap2 = nSetMap(r2);
     1258    Q2 = idInit(IDELEMS(r2->qideal),1);
    12321259    for (int i=0;i<IDELEMS(r2->qideal);i++)
    1233       sum->qideal->m[i]=pPermPoly(r2->qideal->m[i],perm,r2,nCopy);
    1234     omFree((ADDRESS)perm);
    1235   }
     1260      Q2->m[i] = pPermPoly(r2->qideal->m[i],perm2,r2,nMap2,par_perm2,rPar(r2));
     1261    omFree((ADDRESS)perm2);
     1262  }
     1263  else
     1264  {
     1265    Q2 = NULL;
     1266  }
     1267  if ( (Q1!=NULL) || ( Q2!=NULL))
     1268    Q = idSimpleAdd(Q1,Q2);
     1269  sum->qideal = Q;
     1270  if ( old_ring2 != NULL)
     1271    rChangeCurrRing(old_ring2);
    12361272  return 1;
    12371273}
     
    35693605  /* creates an opposite algebra of R */
    35703606  /* that is R^opp, where f (*^opp) g = g*f  */
    3571   /* ignores the case of qring -> done in iparith.cc */
     3607  /* treats the case of qring */
    35723608{
    35733609  ring save = currRing; 
     
    38263862  omFreeSize((ADDRESS)perm,(rVar(r)+1)*sizeof(int));
    38273863  /* now oppose the qideal for qrings */
    3828 //   if (r->qideal != NULL)
    3829 //   {
    3830 //     idDelete(&(r->qideal));
    3831 //     r->qideal = idOppose(src, qideal);
    3832 //   }
    3833 //   rTest(r);
     3864  if (src->qideal != NULL)
     3865  {
     3866    idDelete(&(r->qideal));
     3867    r->qideal = idOppose(src, src->qideal);
     3868  }
     3869  rTest(r);
    38343870  rChangeCurrRing(save);
    38353871  }
     
    38443880  ring Ropp = rOpposite(R);
    38453881  ring Renv = NULL;
    3846   int stat = rSum(R, Ropp, Renv); /* should ignore qideals */
     3882  int stat = rSum(R, Ropp, Renv); /* takes care of qideals */
    38473883  if ( stat <=0 )
    38483884    WarnS("Error in rEnvelope at rSum");
    38493885  /* now create the qideal for qrings */
    3850 //   if (R->qideal != NULL)
    3851 //   {
    3852 //     ring save = currRing;
    3853 //     rChangeCurrRing(Ropp);
    3854 //     ideal Q = idCopy(R->qideal);
    3855 //     ideal Qop = idOppose(R,Q);
    3856 //     rChangeCurrRing(Renv);
    3857 //     ideal Qenv = idInit(Q->ncols+Qop->ncols,1);
    3858 //     int i;
    3859 //     for (i=0; i<= Q->ncols; i++)
    3860 //     {
    3861 //       Qenv->m[i] = maIMap(R,Q->m[i]);
    3862 //     }
    3863 //     for (i=0; i<= Qop->ncols; i++)
    3864 //     {
    3865 //       Qenv->m[Q->ncols+i] = maIMap(Ropp,Qop->m[i]);
    3866 //     }
    3867 //     /* should we run twostd on the result? */
    3868 //     Renv->qideal = Qenv;
    3869 //     rChangeCurrRing(save);
    3870 //   }
     3886//    if (R->qideal != NULL)
     3887//    {
     3888//      ring save = currRing;
     3889//      rChangeCurrRing(Ropp);
     3890//      ideal Q = idCopy(R->qideal);
     3891//      ideal Qop = idOppose(R,Q);
     3892//      rChangeCurrRing(Renv);
     3893//      ideal Qenv = idInit(Q->ncols+Qop->ncols,1);
     3894//      int i;
     3895//      for (i=0; i< Q->ncols; i++)
     3896//      {
     3897//        Qenv->m[i] = maIMap(R,Q->m[i]);
     3898//      }
     3899//      for (i=0; i<= Qop->ncols; i++)
     3900//      {
     3901//        Qenv->m[Q->ncols+i] = maIMap(Ropp,Qop->m[i]);
     3902//      }
     3903//      /* should we run twostd on the result? */
     3904//      Renv->qideal = Qenv;
     3905//      rChangeCurrRing(save);
     3906//    }
    38713907  rTest(Renv);
    38723908  return Renv;
Note: See TracChangeset for help on using the changeset viewer.