source: git/Singular/wrapper.cc @ 42a7cb4

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