Changeset 8fd62c in git


Ignore:
Timestamp:
Oct 17, 2018, 3:09:37 PM (6 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
Children:
fab4706447a1dd4c936f1e7b0fd3c1c9920279de
Parents:
6a0ad7542c11c59c63743cd18b8e8f68f098d75f
Message:
add rPlusVar, rMinusVar (ring manipulation: R+"y","y"+R,R-"y")
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • Singular/iparith.cc

    r6a0ad75 r8fd62c  
    31583158  res->data = (char*)l;
    31593159  return FALSE;
     3160}
     3161static BOOLEAN jjRMINUS(leftv res, leftv u, leftv v)
     3162{
     3163  ring r=rMinusVar((ring)u->Data(),(char*)v->Data());
     3164  res->data = (char *)r;
     3165  return r==NULL;
     3166}
     3167static BOOLEAN jjRPLUS(leftv res, leftv u, leftv v)
     3168{
     3169  int left;
     3170  if (u->Typ()==RING_CMD) left=0;
     3171  else
     3172  {
     3173    leftv h=u;u=v;v=h;
     3174    left=1;
     3175  }
     3176  ring r=rPlusVar((ring)u->Data(),(char*)v->Data(),left);
     3177  res->data = (char *)r;
     3178  return r==NULL;
    31603179}
    31613180static BOOLEAN jjRSUM(leftv res, leftv u, leftv v)
  • Singular/ipshell.cc

    r6a0ad75 r8fd62c  
    29372937            (rField_is_Q(currRing) || rField_is_Q_a(currRing) ||
    29382938             rField_is_Zp(currRing) || rField_is_Zp_a(currRing) ||
    2939              rField_is_Zn(currRing)))
     2939             rField_is_Zn(currRing)))
    29402940           ||
    29412941           (rField_is_Zp_a(orig_ring) &&  // Zp(a..) -> Zp(a..) || Zp
     
    56435643          ch=32003;
    56445644        }
    5645         #ifndef TEST_ZN_AS_ZP
     5645        #ifndef TEST_ZN_AS_ZP
    56465646        cf = nInitChar(n_Zp, (void*)(long)ch);
    5647         #else
     5647        #else
    56485648        mpz_t modBase;
    56495649        mpz_init_set_ui(modBase, (long)ch);
     
    56555655        cf->is_domain=1;
    56565656        cf->has_simple_Inverse=1;
    5657         #endif
     5657        #endif
    56585658      }
    56595659      else
  • Singular/table.h

    r6a0ad75 r8fd62c  
    352352,{D(lAdd),        '+',            LIST_CMD,       LIST_CMD,   LIST_CMD, ALLOW_NC | ALLOW_RING}
    353353,{D(jjRSUM),      '+',            RING_CMD,       RING_CMD,   RING_CMD, ALLOW_NC | ALLOW_RING}
    354 ,{D(jjPLUS_B_P),    '+',          BUCKET_CMD,     BUCKET_CMD, POLY_CMD, ALLOW_NC | ALLOW_RING}
     354,{D(jjRPLUS),     '+',            RING_CMD,       RING_CMD,   STRING_CMD, ALLOW_NC | ALLOW_RING}
     355,{D(jjRPLUS),     '+',            RING_CMD,       STRING_CMD, RING_CMD, ALLOW_NC | ALLOW_RING}
     356,{D(jjPLUS_B_P),  '+',            BUCKET_CMD,     BUCKET_CMD, POLY_CMD, ALLOW_NC | ALLOW_RING}
    355357,{D(jjMINUS_I),   '-',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_NC | ALLOW_RING}
    356358,{D(jjMINUS_BI),  '-',            BIGINT_CMD,     BIGINT_CMD, BIGINT_CMD, ALLOW_NC | ALLOW_RING}
     
    365367,{D(jjOP_BIM_I),  '-',            BIGINTMAT_CMD,  BIGINTMAT_CMD, INT_CMD, ALLOW_NC | ALLOW_RING}
    366368,{D(jjOP_I_BIM),  '-',            BIGINTMAT_CMD,  INT_CMD, BIGINTMAT_CMD, ALLOW_NC | ALLOW_RING}
    367 ,{D(jjOP_BIM_BI),  '-',           BIGINTMAT_CMD,  BIGINTMAT_CMD, BIGINT_CMD, ALLOW_NC | ALLOW_RING}
    368 ,{D(jjOP_BI_BIM),  '-',           BIGINTMAT_CMD,  BIGINT_CMD, BIGINTMAT_CMD, ALLOW_NC | ALLOW_RING}
     369,{D(jjOP_BIM_BI), '-',            BIGINTMAT_CMD,  BIGINTMAT_CMD, BIGINT_CMD, ALLOW_NC | ALLOW_RING}
     370,{D(jjOP_BI_BIM), '-',            BIGINTMAT_CMD,  BIGINT_CMD, BIGINTMAT_CMD, ALLOW_NC | ALLOW_RING}
    369371,{D(jjOP_IV_I),   '-',            INTVEC_CMD,     INTVEC_CMD, INT_CMD, ALLOW_NC | ALLOW_RING}
    370372,{D(jjOP_IM_I),   '-',            INTMAT_CMD,     INTMAT_CMD, INT_CMD, ALLOW_NC | ALLOW_RING}
     
    382384,{D(jjMINUS_BIM), '-',            CMATRIX_CMD,    CMATRIX_CMD,CMATRIX_CMD, ALLOW_NC | ALLOW_RING}
    383385#endif
     386,{D(jjRMINUS),    '-',            RING_CMD,       RING_CMD,   STRING_CMD, ALLOW_NC | ALLOW_RING}
    384387,{D(jjMINUS_B_P), '-',            BUCKET_CMD,     BUCKET_CMD, POLY_CMD, ALLOW_NC | ALLOW_RING}
    385388,{  jjWRONG2 ,    '-',            NONE,           IDEAL_CMD,  IDEAL_CMD, ALLOW_NC | ALLOW_RING}
  • libpolys/polys/monomials/ring.cc

    r6a0ad75 r8fd62c  
    4040#define BITS_PER_LONG 8*SIZEOF_LONG
    4141
     42typedef char *             char_ptr;
    4243omBin sip_sring_bin = omGetSpecBin(sizeof(ip_sring));
    43 omBin char_ptr_bin =  omGetSpecBin(sizeof(char*));
     44omBin char_ptr_bin =  omGetSpecBin(sizeof(char_ptr));
    4445
    4546
     
    684685int rChar(ring r) { return r->cf->ch; }
    685686
    686 // typedef char *             char_ptr;
    687 // omBin char_ptr_bin = omGetSpecBin(sizeof(char_ptr)); // deallocation?
    688687
    689688
     
    30153014      // are introduced, but their names are never set
    30163015      // hence, we do the following awkward trick
    3017       int N = omSizeOfAddr(r->names)/sizeof(char*);
     3016      int N = omSizeOfAddr(r->names)/sizeof(char_ptr);
    30183017      if (r->N < N) N = r->N;
    30193018
     
    56655664  return 0;
    56665665}
     5666
     5667ring rPlusVar(const ring r, char *v,int left)
     5668{
     5669  if (r->order[2]!=0)
     5670  {
     5671    WerrorS("only for rings with an ordering of one block");
     5672    return NULL;
     5673  }
     5674  int p;
     5675  if((r->order[0]==ringorder_C)
     5676  ||(r->order[0]==ringorder_c))
     5677    p=1;
     5678  else
     5679    p=0;
     5680  if((r->order[p]!=ringorder_dp)
     5681  && (r->order[p]!=ringorder_Dp)
     5682  && (r->order[p]!=ringorder_lp)
     5683  && (r->order[p]!=ringorder_rp)
     5684  && (r->order[p]!=ringorder_ds)
     5685  && (r->order[p]!=ringorder_Ds)
     5686  && (r->order[p]!=ringorder_ls))
     5687  {
     5688    WerrorS("ordering must be dp,Dp,lp,rp,ds,Ds or ls");
     5689    return NULL;
     5690  }
     5691  for(int i=r->N-1;i>=0;i--)
     5692  {
     5693    if (strcmp(r->names[i],v)==0)
     5694    {
     5695      Werror("duplicate variable name >>%s<<",v);
     5696      return NULL;
     5697    }
     5698  }
     5699  ring R=rCopy0(r);
     5700  char **names;
     5701  #ifdef HAVESHIFTBBA
     5702  if (rIsLPRing(r))
     5703  {
     5704    WerrorS("not yet implemnted");
     5705    return NULL;
     5706  }
     5707  else
     5708  #endif
     5709  {
     5710    R->N++;
     5711    names=(char**)omAlloc(R->N*sizeof(char_ptr));
     5712    if (left)
     5713    {
     5714      names[0]=omStrDup(v);
     5715      for(int i=R->N-1;i>0;i--) names[i]=R->names[i-1];
     5716    }
     5717    else
     5718    {
     5719      names[R->N-1]=omStrDup(v);
     5720      for(int i=R->N-2;i>=0;i--) names[i]=R->names[i];
     5721    }
     5722  }
     5723  omFreeSize(R->names,r->N*sizeof(char_ptr));
     5724  R->names=names;
     5725  R->block1[p]=R->N;
     5726  rComplete(R);
     5727  return R;
     5728}
     5729
     5730ring rMinusVar(const ring r, char *v)
     5731{
     5732  if (r->order[2]!=0)
     5733  {
     5734    WerrorS("only for rings with an ordering of one block");
     5735    return NULL;
     5736  }
     5737  int p;
     5738  if((r->order[0]==ringorder_C)
     5739  ||(r->order[0]==ringorder_c))
     5740    p=1;
     5741  else
     5742    p=0;
     5743  if((r->order[p]!=ringorder_dp)
     5744  && (r->order[p]!=ringorder_Dp)
     5745  && (r->order[p]!=ringorder_lp)
     5746  && (r->order[p]!=ringorder_rp)
     5747  && (r->order[p]!=ringorder_ds)
     5748  && (r->order[p]!=ringorder_Ds)
     5749  && (r->order[p]!=ringorder_ls))
     5750  {
     5751    WerrorS("ordering must be dp,Dp,lp,rp,ds,Ds or ls");
     5752    return NULL;
     5753  }
     5754  ring R=rCopy0(r);
     5755  int i=R->N;
     5756  while(i>0)
     5757  {
     5758    if (strcmp(R->names[i],v)==0)
     5759    {
     5760      R->N--;
     5761      omFree(R->names[i]);
     5762      for(int j=i;j<R->N;j++) R->names[j]=R->names[j+1];
     5763      R->names=(char**)omReallocSize(R->names,r->N*sizeof(char_ptr),R->N*sizeof(char_ptr));
     5764    }
     5765    else i--;
     5766  }
     5767  R->block1[p]=R->N;
     5768  rComplete(R);
     5769  return R;
     5770}
  • libpolys/polys/monomials/ring.h

    r6a0ad75 r8fd62c  
    827827
    828828extern omBin sip_sring_bin;
    829 #endif
     829
     830// ring manipulation
     831/// K[x],"y" -> K[x,y] resp. K[y,x]
     832ring rPlusVar(const ring r, char *v,int left);
     833
     834/// undo rPlusVar
     835ring rMinusVar(const ring r, char *v);
     836#endif
Note: See TracChangeset for help on using the changeset viewer.