Changeset 52ec76 in git


Ignore:
Timestamp:
Oct 9, 2017, 4:44:06 PM (7 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
Children:
9f643b295e9a8346261ff5256aec555f57acc264
Parents:
e4d8aca0e2e92ecdde66a3c59c3d02d377857a90
Message:
add: id_Satstd
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Singular/dyn_modules/customstd/customstd.cc

    re4d8ac r52ec76  
    6969      if (nonTrivialSaturationToBeDone==false) break;
    7070    }
    71     if (nonTrivialSaturationToBeDone==true)
     71    if (nonTrivialSaturationToBeDone)
    7272    {
    7373      // std::cout << "simplifying!" << std::endl;
     
    184184    }
    185185
    186     ideal I = (ideal) u->Data();
    187 
    188186    idealCache = NULL;
    189     I=kStd(I,currRing->qideal,testHomog,NULL,NULL,0,0,NULL,sat_vars_sp);
     187    ideal I=kStd(I,currRing->qideal,testHomog,NULL,NULL,0,0,NULL,sat_vars_sp);
    190188    customstd_satstdSaturatingVariables = std::vector<int>();
    191189
  • kernel/ideals.cc

    re4d8ac r52ec76  
    3333
    3434#include "kernel/GBEngine/kstd1.h"
     35#include "kernel/GBEngine/kutil.h"
    3536#include "kernel/GBEngine/tgb.h"
    3637#include "kernel/GBEngine/syz.h"
     
    28282829}
    28292830
     2831static int * id_satstdSaturatingVariables=NULL;
     2832
     2833static BOOLEAN id_sat_vars_sp(kStrategy strat)
     2834{
     2835  BOOLEAN b = FALSE; // set b to TRUE, if spoly was changed,
     2836                     // let it remain FALSE otherwise
     2837  if (strat->P.t_p==NULL)
     2838  {
     2839    poly p=strat->P.p;
     2840
     2841    // iterate over all terms of p and
     2842    // compute the minimum mm of all exponent vectors
     2843    int *mm=(int*)omAlloc((1+rVar(currRing))*sizeof(int));
     2844    int *m0=(int*)omAlloc0((1+rVar(currRing))*sizeof(int));
     2845    p_GetExpV(p,mm,currRing);
     2846    bool nonTrivialSaturationToBeDone=true;
     2847    for (p=pNext(p); p!=NULL; pIter(p))
     2848    {
     2849      nonTrivialSaturationToBeDone=false;
     2850      p_GetExpV(p,m0,currRing);
     2851      for (int i=rVar(currRing); i>0; i--)
     2852      {
     2853        if (id_satstdSaturatingVariables[i]!=0)
     2854        {
     2855          mm[i]=si_min(mm[i],m0[i]);
     2856          if (mm[i]>0) nonTrivialSaturationToBeDone=true;
     2857        }
     2858      }
     2859      // abort if the minimum is zero in each component
     2860      if (!nonTrivialSaturationToBeDone) break;
     2861    }
     2862    if (nonTrivialSaturationToBeDone)
     2863    {
     2864      // std::cout << "simplifying!" << std::endl;
     2865      if (TEST_OPT_PROT) { PrintS("S"); mflush(); }
     2866      p=p_Copy(strat->P.p,currRing);
     2867      memset(&strat->P,0,sizeof(strat->P));
     2868      strat->P.tailRing = strat->tailRing;
     2869      strat->P.p=p;
     2870      while(p!=NULL)
     2871      {
     2872        for (int i=rVar(currRing); i>0; i--)
     2873        {
     2874          if(id_satstdSaturatingVariables[i]!=0)
     2875          {
     2876            p_SubExp(p,i,mm[i],currRing);
     2877          }
     2878        }
     2879        p_Setm(p,currRing);
     2880        pIter(p);
     2881      }
     2882      b = TRUE;
     2883    }
     2884    omFree(mm);
     2885    omFree(m0);
     2886  }
     2887  else
     2888  {
     2889    poly p=strat->P.t_p;
     2890
     2891    // iterate over all terms of p and
     2892    // compute the minimum mm of all exponent vectors
     2893    int *mm=(int*)omAlloc((1+rVar(currRing))*sizeof(int));
     2894    int *m0=(int*)omAlloc0((1+rVar(currRing))*sizeof(int));
     2895    p_GetExpV(p,mm,strat->tailRing);
     2896    bool nonTrivialSaturationToBeDone=true;
     2897    for (p = pNext(p); p!=NULL; pIter(p))
     2898    {
     2899      nonTrivialSaturationToBeDone=false;
     2900      p_GetExpV(p,m0,strat->tailRing);
     2901      for(int i=rVar(currRing); i>0; i--)
     2902      {
     2903        if(id_satstdSaturatingVariables[i]!=0)
     2904        {
     2905          mm[i]=si_min(mm[i],m0[i]);
     2906          if (mm[i]>0) nonTrivialSaturationToBeDone = true;
     2907        }
     2908      }
     2909      // abort if the minimum is zero in each component
     2910      if (!nonTrivialSaturationToBeDone) break;
     2911    }
     2912    if (nonTrivialSaturationToBeDone)
     2913    {
     2914      if (TEST_OPT_PROT) { PrintS("S"); mflush(); }
     2915      p=p_Copy(strat->P.t_p,strat->tailRing);
     2916      memset(&strat->P,0,sizeof(strat->P));
     2917      strat->P.tailRing = strat->tailRing;
     2918      strat->P.t_p=p;
     2919      while(p!=NULL)
     2920      {
     2921        for(int i=rVar(currRing); i>0; i--)
     2922        {
     2923          if(id_satstdSaturatingVariables[i]!=0)
     2924          {
     2925            p_SubExp(p,i,mm[i],strat->tailRing);
     2926          }
     2927        }
     2928        p_Setm(p,strat->tailRing);
     2929        pIter(p);
     2930      }
     2931      strat->P.GetP();
     2932      b = TRUE;
     2933    }
     2934    omFree(mm);
     2935    omFree(m0);
     2936  }
     2937  return b; // return TRUE if sp was changed, FALSE if not
     2938}
     2939
     2940ideal id_Satstd(const ideal I, ideal J, const ring r)
     2941{
     2942  ring save=currRing;
     2943  if (currRing!=r) rChangeCurrRing(r);
     2944  idSkipZeroes(J);
     2945  id_satstdSaturatingVariables=(int*)omAlloc0((1+rVar(currRing))*sizeof(int));
     2946  int k=IDELEMS(J);
     2947  for (int i=0; i<k; i++)
     2948  {
     2949    poly x = J->m[i];
     2950    int li = p_Var(x,r);
     2951    if (li>0)
     2952      id_satstdSaturatingVariables[li]=1;
     2953    else
     2954    {
     2955      if (currRing!=save) rChangeCurrRing(save);
     2956      WerrorS("ideal generators must be variables");
     2957      return NULL;
     2958    }
     2959  }
     2960  ideal res=kStd(I,r->qideal,testHomog,NULL,NULL,0,0,NULL,id_sat_vars_sp);
     2961  omFreeSize(id_satstdSaturatingVariables,(1+rVar(currRing))*sizeof(int));
     2962  id_satstdSaturatingVariables=NULL;
     2963  if (currRing!=save) rChangeCurrRing(save);
     2964  return res;
     2965}
     2966
    28302967GbVariant syGetAlgorithm(char *n, const ring r, const ideal /*M*/)
    28312968{
  • kernel/ideals.h

    re4d8ac r52ec76  
    202202ideal id_TensorModuleMult(const int m, const ideal M, const ring rRing); // image of certain map for BGG
    203203
     204ideal id_Satstd(const ideal I, ideal J, const ring r);
     205
    204206GbVariant syGetAlgorithm(char *n, const ring r, const ideal M);
    205207#endif
Note: See TracChangeset for help on using the changeset viewer.