source: git/Singular/wrapper.cc @ 1c35568

fieker-DuValspielwiese
Last change on this file since 1c35568 was ea0601, checked in by Hans Schönemann <hannes@…>, 15 years ago
*hannes: code cleanup git-svn-id: file:///usr/local/Singular/svn/trunk@12038 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100755
File size: 2.8 KB
Line 
1#include <string.h>
2#include "mod2.h"
3#include "febase.h"
4#include "polys.h"
5#include "kstd1.h"
6#include "subexpr.h"
7#include "ideals.h"
8#include "ring.h"
9#include "janet.h"
10
11//extern int (*ListGreatMove)(jList *,jList *,poly);
12extern int ComputeBasis(jList *,jList *);
13extern void Initialization(char *);
14
15BOOLEAN 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
51BOOLEAN jjStdJanetBasis(leftv res, leftv v, int flag)
52{
53  ideal result;
54  int dpO;
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    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 (pDeg(iT->info->lead) == pDeg(iT->info->history))
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
115  if ((flag==1) && (!dpO))
116  {
117    //Print ("interred\n");
118    result=kInterRedOld(result);
119    idSkipZeroes(result);
120  }
121  res->data = (char *)result;
122  res->rtyp = IDEAL_CMD;
123
124  DestroyList(Q);
125  DestroyList(T);
126
127  return FALSE;
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}
136
137BOOLEAN jjJanetBasis(leftv res, leftv v)
138{
139  return jjStdJanetBasis(res,v,0);
140}
Note: See TracBrowser for help on using the repository browser.