source: git/Singular/wrapper.cc @ 5476e83

spielwiese
Last change on this file since 5476e83 was 117e00, checked in by Hans Schoenemann <hannes@…>, 6 years ago
removed unused system includes, math.h ->cmath for .cc files
  • Property mode set to 100644
File size: 2.8 KB
Line 
1#include "kernel/mod2.h"
2#include "polys/monomials/ring.h"
3
4#include "kernel/polys.h"
5#include "kernel/GBEngine/kstd1.h"
6#include "kernel/ideals.h"
7#include "kernel/GBEngine/janet.h"
8
9#include "Singular/subexpr.h"
10
11//extern int (*ListGreatMove)(jList *,jList *,poly);
12
13static BOOLEAN jInitBasis(ideal v, jList **TT,jList **QQ)
14{
15  if (rHasLocalOrMixedOrdering(currRing))
16  {
17    WerrorS("janet only for well-orderings");
18    return TRUE;
19  }
20
21  Initialization(rOrdStr(currRing));
22
23  jList *Q=(jList *)GCM(sizeof(jList));
24  Q->root=NULL;
25
26  jList *T=(jList *)GCM(sizeof(jList));
27  T->root=NULL;
28
29  for (int i=0; i < IDELEMS(v); i++)
30  {
31    if (v->m[i]!=NULL)
32    {
33      Poly *beg=NewPoly(pCopy(v->m[i]));
34
35      InitHistory(beg);
36      InitProl(beg);
37      InitLead(beg);
38
39      InsertInCount(Q,beg);
40    }
41  }
42
43  BOOLEAN r= !(ComputeBasis(T,Q));
44  *TT=T;
45  *QQ=Q;
46  return r;
47}
48
49/// flag: 0: JB, 1: SB
50BOOLEAN jjStdJanetBasis(leftv res, leftv v, int flag)
51{
52  ideal result;
53
54  jList *T;
55  jList *Q;
56  ideal I=(ideal)v->Data();
57  BOOLEAN is_zero=TRUE;
58  for (int i=0; i < IDELEMS(I); i++)
59  {
60    if ((I->m[i]!=NULL)&& (pIsConstant(I->m[i])))
61    {
62      goto zero;
63    }
64    else
65     is_zero=FALSE;
66  }
67  if (is_zero)
68    goto zero;
69  if (!jInitBasis(I,&T,&Q))
70  {
71    int dpO=(strstr(rOrdStr(currRing),"dp")!=NULL);
72    int ideal_length;
73    if (flag==1)
74      ideal_length= dpO ? GB_length() : CountList(T);
75    else
76      ideal_length=CountList(T);
77
78    result=idInit(ideal_length,1);
79
80    int ideal_index=0;
81
82    LCI iT=T->root;
83
84    while(iT)
85    {
86      pTest(iT->info->root);
87      if ((flag==1) && dpO)
88      {
89        //if (pTotaldegree(iT->info->lead) == pTotaldegree(iT->info->history))
90        if (p_Deg(iT->info->lead,currRing) == p_Deg(iT->info->history,currRing))
91        {
92          result->m[ideal_length-ideal_index-1]=pCopy(iT->info->root);
93          if (!nGreaterZero(pGetCoeff(iT->info->root)))
94            result->m[ideal_length-ideal_index-1]
95                                  =pNeg(result->m[ideal_length-ideal_index-1]);
96
97          ideal_index++;
98        }
99      }
100      else
101      {
102        result->m[ideal_length-ideal_index-1]=pCopy(iT->info->root);
103        if (!nGreaterZero(pGetCoeff(iT->info->root)))
104          result->m[ideal_length-ideal_index-1]
105                                  =pNeg(result->m[ideal_length-ideal_index-1]);
106
107        ideal_index++;
108      }
109      iT=iT->next;
110    }
111
112    if ((flag==1) && (dpO==0))
113    {
114      //Print ("interred\n");
115      result=kInterRedOld(result);
116      idSkipZeroes(result);
117    }
118    res->data = (char *)result;
119    res->rtyp = IDEAL_CMD;
120    DestroyList(Q);
121    DestroyList(T);
122    return FALSE;
123  }
124  else
125    return TRUE;
126
127zero:
128  result=idInit(1,1);
129  if (!is_zero) result->m[0]=pOne();
130  res->data = (char *)result;
131  res->rtyp = IDEAL_CMD;
132  return FALSE;
133}
Note: See TracBrowser for help on using the repository browser.