Changeset 358740 in git


Ignore:
Timestamp:
Dec 17, 2014, 5:07:14 PM (9 years ago)
Author:
Hans Schoenemann <hannes@…>
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
Message:
add: access to fetch internals
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Singular/iparith.cc

    rfce947 r358740  
    68696869  res->data=(char *)id;
    68706870  return FALSE;
     6871}
     6872static 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;
     6982err_fetch:
     6983  Werror("no identity map from %s (%s -> %s)",u->Fullname(),
     6984         nCoeffString(r->cf),
     6985         nCoeffString(currRing->cf));
     6986  return TRUE;
    68716987}
    68726988static BOOLEAN jjINTERSECT_PL(leftv res, leftv v)
     
    82248340      while (dA3[i].cmd==op)
    82258341      {
    8226         if ((ai=iiTestConvert(at,dA3[i].arg1))!=0)
     8342        if ((ai=iiTestConvert(at,dA3[i].arg1,dConvertTypes))!=0)
    82278343        {
    8228           if ((bi=iiTestConvert(bt,dA3[i].arg2))!=0)
     8344          if ((bi=iiTestConvert(bt,dA3[i].arg2,dConvertTypes))!=0)
    82298345          {
    8230             if ((ci=iiTestConvert(ct,dA3[i].arg3))!=0)
     8346            if ((ci=iiTestConvert(ct,dA3[i].arg3,dConvertTypes))!=0)
    82318347            {
    82328348              res->rtyp=dA3[i].res;
     
    82398355                  iiTwoOps(op),Tok2Cmdname(dA3[i].arg1),
    82408356                  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))
    82448360                || (call_failed=dA3[i].p(res,an,bn,cn)));
    82458361              // everything done, clean up temp. variables
     
    83318447{
    83328448  memset(res,0,sizeof(sleftv));
    8333   BOOLEAN call_failed=FALSE;
    83348449
    83358450  if (!errorreported)
     
    84208535{
    84218536  memset(res,0,sizeof(sleftv));
    8422   BOOLEAN bo;
    84238537
    84248538  if (!errorreported)
  • Singular/table.h

    rfce947 r358740  
    802802,{D(jjDBPRINT),   DBPRINT_CMD,     NONE,               -2      , ALLOW_PLURAL |ALLOW_RING}
    803803//,{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}
    804807,{D(jjCALL1ARG),  IDEAL_CMD,       IDEAL_CMD,          1       , ALLOW_PLURAL |ALLOW_RING}
    805808,{D(jjIDEAL_PL),  IDEAL_CMD,       IDEAL_CMD,          -1      , ALLOW_PLURAL |ALLOW_RING}
     
    913916  { "factorize",   0, FAC_CMD ,           CMD_12},
    914917  { "farey",       0, FAREY_CMD ,         CMD_2},
    915   { "fetch",       0, FETCH_CMD ,         CMD_2},
     918  { "fetch",       0, FETCH_CMD ,         CMD_M},
    916919  { "fglm",        0, FGLM_CMD ,          CMD_2},
    917920  { "fglmquot",    0, FGLMQUOT_CMD,       CMD_2},
Note: See TracChangeset for help on using the changeset viewer.