Changeset 19fc394 in git


Ignore:
Timestamp:
Nov 12, 1998, 2:30:48 PM (26 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'c7af8613769b29c741d6c338945669719f1fc4f8')
Children:
775e5738571ee2bccbe79e35c5e4c0e5253e7aa8
Parents:
f778f998d4f9b2886a5ef69cd0a7536345004547
Message:
*hannes: added mmbt.c


git-svn-id: file:///usr/local/Singular/svn/trunk@2671 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
Singular
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/pcv.cc

    rf778f9 r19fc394  
    22*  Computer Algebra System SINGULAR      *
    33*****************************************/
    4 /* $Id: pcv.cc,v 1.1 1998-11-12 13:06:12 Singular Exp $ */
     4/* $Id: pcv.cc,v 1.2 1998-11-12 13:30:48 Singular Exp $ */
    55/*
    66* ABSTRACT: conversion between polys and coeff vectors
     
    292292  return I;
    293293}
     294
     295/*2
     296* interface to interpreter
     297*/
     298BOOLEAN iiPcvConv(leftv res, leftv h)
     299{
     300  if(h&&(h->Typ()==IDEAL_CMD||h->Typ()==MODUL_CMD))
     301  {
     302    leftv hh=h->next;
     303    int i0=0,i1;
     304    short* w=(short*)Alloc(currRing->N*sizeof(short));
     305    BOOLEAN defi1=FALSE,defw=FALSE;
     306    while(hh!=NULL)
     307    {
     308      if(hh->Typ()==INT_CMD)
     309      {
     310        if(defi1)
     311        {
     312          i0=i1;
     313          i1=(int)hh->Data();
     314        }
     315        else
     316        {
     317          i1=(int)hh->Data();
     318          defi1=TRUE;
     319        }
     320      }
     321      else
     322      if(hh->Typ()==INTVEC_CMD)
     323      {
     324        intvec *iv=(intvec*)hh->Data();
     325        if(iv->rows()==currRing->N&&iv->cols()==1)
     326        {
     327          for(int i=0;i<currRing->N;i++) w[i]=(*iv)[i];
     328          defw=TRUE;
     329        }
     330      }
     331      hh=hh->next;
     332    }
     333    if(defi1)
     334    {
     335      if(!defw) for(int i=0;i<currRing->N;i++) w[i]=1;
     336      if(h->Typ()==IDEAL_CMD)
     337      {
     338        // "pcvConv",<ideal>[,<int d0>],<int d1>[,<intvec w>]:
     339        // convert ideal to module of coeff vectors
     340        // considering monomials m with d0<=w-deg(m)<d1
     341        res->rtyp=MODUL_CMD;
     342        res->data=(void*)pcvId2Mod((ideal)h->Data(),i0,i1,w);
     343        Free((ADDRESS)w,currRing->N*sizeof(short));
     344        return FALSE;
     345      }
     346      else
     347      {
     348        // "pcvConv",<module>[,<int d0>],<int d1>[,<intvec w>]:
     349        // convert module of coeff vectors to ideal
     350        // considering monomials m with d0<=w-deg(m)<d1
     351        res->rtyp=IDEAL_CMD;
     352        res->data=(void*)pcvMod2Id((ideal)h->Data(),i0,i1,w);
     353        Free((ADDRESS)w,currRing->N*sizeof(short));
     354        return FALSE;
     355      }
     356    }
     357    Free((ADDRESS)w,currRing->N*sizeof(short));
     358  }
     359  WerrorS("<ideal/module>[,<int>],<int>[,<intvec>] expected");
     360  return TRUE;
     361}
     362
     363/*2
     364* interface to interpreter
     365*/
     366BOOLEAN iiPcvBasis(leftv res, leftv h)
     367{
     368  if(currRingHdl==NULL)
     369  {
     370    WerrorS("no ring active");
     371    return TRUE;
     372  }
     373  int i0=0,i1;
     374  short* w=(short*)Alloc(currRing->N*sizeof(short));
     375  BOOLEAN defi1=FALSE,defw=FALSE;
     376  while(h!=NULL)
     377  {
     378    if(h->Typ()==INT_CMD)
     379    {
     380      if(defi1)
     381      {
     382        i0=i1;
     383        i1=(int)h->Data();
     384      }
     385      else
     386      {
     387        i1=(int)h->Data();
     388        defi1=TRUE;
     389      }
     390    }
     391    else
     392    if(h->Typ()==INTVEC_CMD)
     393    {
     394      intvec *iv=(intvec*)h->Data();
     395      if(iv->rows()==currRing->N&&iv->cols()==1)
     396      {
     397        for(int i=0;i<currRing->N;i++) w[i]=(*iv)[i];
     398        defw=TRUE;
     399      }
     400    }
     401    h=h->next;
     402  }
     403  if(defi1)
     404  {
     405    if(!defw) for(int i=0;i<currRing->N;i++) w[i]=1;
     406    // "pcvDim"[,<int d0>],<int d1>[,<intvec w>]:
     407    // number of monomials m with d0<=w-deg(m)<d1
     408    res->rtyp=INT_CMD;
     409    res->data=(void*)pcvDimW(i0,i1,w);
     410    Free((ADDRESS)w,currRing->N*sizeof(short));
     411    return FALSE;
     412  }
     413  Free((ADDRESS)w,currRing->N*sizeof(short));
     414  WerrorS("[<int>],<int>[,<intvec>] expected");
     415  return TRUE;
     416}
     417
     418/*2
     419* interface to interpreter
     420*/
     421BOOLEAN iiPcvOrd(leftv res, leftv h)
     422{
     423  if(h&&h->Typ()==POLY_CMD)
     424  {
     425    leftv hh=h->next;
     426    short* w=(short*)Alloc(currRing->N*sizeof(short));
     427    BOOLEAN defw=FALSE;
     428    while(hh)
     429    {
     430      if(hh->Typ()==INTVEC_CMD)
     431      {
     432        intvec *iv=(intvec*)hh->Data();
     433        if(iv->rows()==currRing->N&&iv->cols()==1)
     434        {
     435          for(int i=0;i<currRing->N;i++) w[i]=(*iv)[i];
     436          defw=TRUE;
     437        }
     438      }
     439      hh=hh->next;
     440    }
     441    if(!defw) for(int i=0;i<currRing->N;i++) w[i]=1;
     442    // "pcvOrd",<poly p>[,<intvec w>]:
     443    // min{w-deg(m)|m monomial of p}
     444    res->rtyp=INT_CMD;
     445    res->data=(void*)pcvOrdW((poly)h->Data(),w);
     446    Free((ADDRESS)w,currRing->N*sizeof(short));
     447    return FALSE;
     448  }
     449  WerrorS("<poly>[,<intvec>] expected");
     450  return TRUE;
     451}
Note: See TracChangeset for help on using the changeset viewer.