source: git/kernel/polys0.cc @ 8080db

spielwiese
Last change on this file since 8080db was 715f30, checked in by Hans Schoenemann <hannes@…>, 13 years ago
code cleanup: debug stuff(p_wrp0) git-svn-id: file:///usr/local/Singular/svn/trunk@13699 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 3.7 KB
Line 
1/****************************************
2*  Computer Algebra System SINGULAR     *
3****************************************/
4/* $Id$ */
5
6/*
7* ABSTRACT - all basic methods to convert polynomials to strings
8*/
9
10/* includes */
11#include <kernel/mod2.h>
12#include <kernel/structs.h>
13#include <kernel/numbers.h>
14#include <kernel/ring.h>
15#include <kernel/p_polys.h>
16#include <kernel/febase.h>
17
18/*2
19* writes a monomial (p),
20* uses form x*gen(.) if ko != coloumn number of p
21*/
22static void writemon(poly p, int ko, ring r)
23{
24  BOOLEAN wroteCoef=FALSE,writeGen=FALSE;
25
26  if (pGetCoeff(p)!=NULL)
27    n_Normalize(pGetCoeff(p),r);
28
29  if (((p_GetComp(p,r) == (short)ko)
30    &&(p_LmIsConstantComp(p, r)))
31  || ((!n_IsOne(pGetCoeff(p),r))
32    && (!n_IsMOne(pGetCoeff(p),r))
33  )
34  )
35  {
36    n_Write(p->coef,r);
37    wroteCoef=(rShortOut(r) == FALSE ||(r->parameter!=NULL));
38    writeGen=TRUE;
39  }
40  else if (n_IsMOne(pGetCoeff(p),r))
41  {
42    if (n_GreaterZero(pGetCoeff(p),r))
43    {
44      n_Write(p->coef,r);
45      wroteCoef=(rShortOut(r) == FALSE ||(r->parameter!=NULL));
46      writeGen=TRUE;
47    }
48    else
49      StringAppendS("-");
50  }
51
52  int i;
53  for (i=0; i<r->N; i++)
54  {
55    {
56      long ee = p_GetExp(p,i+1,r);
57      if (ee!=0L)
58      {
59        if (wroteCoef)
60          StringAppendS("*");
61        //else
62          wroteCoef=(rShortOut(r) == FALSE);
63        writeGen=TRUE;
64        StringAppendS(rRingVar(i, r));
65        if (ee != 1L)
66        {
67          if (rShortOut(r)==0) StringAppendS("^");
68          StringAppend("%ld", ee);
69        }
70      }
71    }
72  }
73  //StringAppend("{%d}",p->Order);
74  if (p_GetComp(p, r) != (long)ko)
75  {
76    if (writeGen) StringAppendS("*");
77    StringAppend("gen(%d)", p_GetComp(p, r));
78  }
79}
80
81char* p_String0(poly p, ring lmRing, ring tailRing)
82{
83  if (p == NULL)
84  {
85    return StringAppendS("0");
86  }
87  if ((p_GetComp(p, lmRing) == 0) || (!lmRing->VectorOut))
88  {
89    writemon(p,0, lmRing);
90    p = pNext(p);
91    while (p!=NULL)
92    {
93      if ((p->coef==NULL)||n_GreaterZero(p->coef,tailRing))
94        StringAppendS("+");
95      writemon(p,0, tailRing);
96      p = pNext(p);
97    }
98    return StringAppendS("");
99  }
100
101  long k = 1;
102  StringAppendS("[");
103  loop
104  {
105    while (k < p_GetComp(p,lmRing))
106    {
107      StringAppendS("0,");
108      k++;
109    }
110    writemon(p,k,lmRing);
111    pIter(p);
112    while ((p!=NULL) && (k == p_GetComp(p, tailRing)))
113    {
114      if (n_GreaterZero(p->coef,tailRing)) StringAppendS("+");
115      writemon(p,k,tailRing);
116      pIter(p);
117    }
118    if (p == NULL) break;
119    StringAppendS(",");
120    k++;
121  }
122  return StringAppendS("]");
123}
124
125char* p_String(poly p, ring lmRing, ring tailRing)
126{
127  StringSetS("");
128  return p_String0(p, lmRing, tailRing);
129}
130
131/*2
132* writes a polynomial p to stdout
133*/
134void p_Write0(poly p, ring lmRing, ring tailRing)
135{
136  PrintS(p_String(p, lmRing, tailRing));
137}
138
139/*2
140* writes a polynomial p to stdout followed by \n
141*/
142void p_Write(poly p, ring lmRing, ring tailRing)
143{
144  p_Write0(p, lmRing, tailRing);
145  PrintLn();
146}
147
148#if !defined(__OPTIMIZE__) || defined(KDEBUG)
149/*2
150*the standard debugging output:
151*print the first two monomials of the poly (wrp) or only the lead term (wrp0),
152*possibly followed by the string "+..."
153*/
154void p_wrp0(poly p, ring ri)
155{
156  poly r;
157
158  if (p==NULL) PrintS("NULL");
159  else if (pNext(p)==NULL) p_Write0(p, ri);
160  else
161  {
162    r = pNext(p);
163    pNext(p) = NULL;
164    p_Write0(p, ri);
165    if (r!=NULL)
166    {
167      PrintS("+...");
168      pNext(p) = r;
169    }
170  }
171}
172#endif
173void p_wrp(poly p, ring lmRing, ring tailRing)
174{
175  poly r;
176
177  if (p==NULL) PrintS("NULL");
178  else if (pNext(p)==NULL) p_Write0(p, lmRing);
179  else
180  {
181    r = pNext(pNext(p));
182    pNext(pNext(p)) = NULL;
183    p_Write0(p, lmRing, tailRing);
184    if (r!=NULL)
185    {
186      PrintS("+...");
187      pNext(pNext(p)) = r;
188    }
189  }
190}
Note: See TracBrowser for help on using the repository browser.