source: git/Singular/wrapper.cc @ 97dcf5

spielwiese
Last change on this file since 97dcf5 was 762407, checked in by Oleksandr Motsak <motsak@…>, 12 years ago
config.h is for sources files only FIX: config.h should only be used by source (not from inside kernel/mod2.h!) NOTE: each source file should better include mod2.h right after config.h, while headers should better not include mod2.h.
  • Property mode set to 100644
File size: 2.9 KB
Line 
1#include <string.h>
2#include "config.h"
3#include <kernel/mod2.h>
4#include <kernel/febase.h>
5#include <kernel/polys.h>
6#include <kernel/kstd1.h>
7#include <Singular/subexpr.h>
8#include <kernel/ideals.h>
9#include <polys/monomials/ring.h>
10#include <Singular/janet.h>
11
12//extern int (*ListGreatMove)(jList *,jList *,poly);
13extern int ComputeBasis(jList *,jList *);
14extern void Initialization(char *);
15
16BOOLEAN jInitBasis(ideal v, jList **TT,jList **QQ)
17{
18  if (rHasLocalOrMixedOrdering_currRing())
19  {
20    WerrorS("janet only for well-orderings");
21    return TRUE;
22  }
23
24  Initialization(rOrdStr(currRing));
25
26  jList *Q=(jList *)GCM(sizeof(jList));
27  Q->root=NULL;
28
29  jList *T=(jList *)GCM(sizeof(jList));
30  T->root=NULL;
31
32  for (int i=0; i < IDELEMS(v); i++)
33  {
34    if (v->m[i]!=NULL)
35    {
36      Poly *beg=NewPoly(pCopy(v->m[i]));
37
38      InitHistory(beg);
39      InitProl(beg);
40      InitLead(beg);
41
42      InsertInCount(Q,beg);
43    }
44  }
45
46  BOOLEAN r= !(ComputeBasis(T,Q));
47  *TT=T;
48  *QQ=Q;
49  return r;
50}
51
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}
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.