source: git/Singular/wrapper.cc @ 1101a8

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