tropicalVariety.cc
Go to the documentation of this file.
2 #include <std_wrapper.h>
3 #include <bbfan.h>
4 #include <groebnerCone.h>
7 #include <coeffs/numbers.h>
8 #include <misc/options.h>
9 #include <kernel/structs.h>
10 
11 #include <iostream>
12 #include <gfanlib/gfanlib_zfan.h>
13 
15 
16 
17 /***
18  * sets option(redSB)
19  **/
20 static void setOptionRedSB()
21 {
24 }
25 
26 
27 /***
28  * sets option(noredSB);
29  **/
30 static void undoSetOptionRedSB()
31 {
33 }
34 
35 static gfan::ZFan* toZFan(std::set<gfan::ZCone> maxCones, int d)
36 {
37  gfan::ZFan* zf = new gfan::ZFan(d);
38  for (std::set<gfan::ZCone>::iterator sigma = maxCones.begin(); sigma!=maxCones.end(); sigma++)
39  zf->insert(*sigma);
40  return zf;
41 }
42 
43 
45 {
46  leftv u = args;
47  if ((u!=NULL) && (u->Typ()==POLY_CMD))
48  {
49  poly g = (poly) u->Data();
50  leftv v = u->next;
51  if (v==NULL)
52  {
53  try
54  {
55  ideal I = idInit(1);
56  I->m[0] = g;
57  tropicalStrategy currentStrategy(I,currRing);
58  std::set<gfan::ZCone> maxCones = tropicalVariety(g,currRing,&currentStrategy);
59  res->rtyp = fanID;
60  res->data = (char*) toZFan(maxCones,currentStrategy.getExpectedAmbientDimension());
61  I->m[0] = NULL;
62  id_Delete(&I,currRing);
63  return FALSE;
64  }
65  catch (const std::exception& ex)
66  {
67  Werror("ERROR: %s",ex.what());
68  return TRUE;
69  }
70  }
71  if ((v!=NULL) && (v->Typ()==NUMBER_CMD))
72  {
73  try
74  {
75  ideal I = idInit(1);
76  I->m[0] = g;
77  number p = (number) v->Data();
78  tropicalStrategy currentStrategy(I,p,currRing);
79  ideal startingIdeal = currentStrategy.getStartingIdeal();
80  ring startingRing = currentStrategy.getStartingRing();
81  poly gStart = startingIdeal->m[0];
82  std::set<gfan::ZCone> maxCones = tropicalVariety(gStart,startingRing,&currentStrategy);
83  res->rtyp = fanID;
84  res->data = (char*) toZFan(maxCones,currentStrategy.getExpectedAmbientDimension());
85  I->m[0] = NULL;
86  id_Delete(&I,currRing);
87  return FALSE;
88  }
89  catch (const std::exception& ex)
90  {
91  Werror("ERROR: %s",ex.what());
92  return TRUE;
93  }
94 
95  }
96  }
97  if ((u!=NULL) && (u->Typ()==IDEAL_CMD))
98  {
99  ideal I = (ideal) u->Data();
100  leftv v = u->next;
101 
102  if ((I->m[0]!=NULL) && (idElem(I)==1))
103  {
104  poly g = I->m[0];
105  if (v==NULL)
106  {
107  try
108  {
109  tropicalStrategy currentStrategy(I,currRing);
110  std::set<gfan::ZCone> maxCones = tropicalVariety(g,currRing,&currentStrategy);
111  res->rtyp = fanID;
112  res->data = (char*) toZFan(maxCones,currentStrategy.getExpectedAmbientDimension());
113  return FALSE;
114  }
115  catch (const std::exception& ex)
116  {
117  Werror("ERROR: %s",ex.what());
118  return TRUE;
119  }
120  }
121  if ((v!=NULL) && (v->Typ()==NUMBER_CMD))
122  {
123  try
124  {
125  number p = (number) v->Data();
126  tropicalStrategy currentStrategy(I,p,currRing);
127  ideal startingIdeal = currentStrategy.getStartingIdeal();
128  ring startingRing = currentStrategy.getStartingRing();
129  poly gStart = startingIdeal->m[0];
130  std::set<gfan::ZCone> maxCones = tropicalVariety(gStart,startingRing,&currentStrategy);
131  res->rtyp = fanID;
132  res->data = (char*) toZFan(maxCones,currentStrategy.getExpectedAmbientDimension());
133  return FALSE;
134  }
135  catch (const std::exception& ex)
136  {
137  Werror("ERROR: %s",ex.what());
138  return TRUE;
139  }
140  }
141  }
142 
143  if (v==NULL)
144  {
145  try
146  {
147  setOptionRedSB();
148  ideal stdI;
149  if (!hasFlag(u,FLAG_STD))
150  stdI = gfanlib_kStd_wrapper(I,currRing);
151  else
152  stdI = id_Copy(I,currRing);
153  tropicalStrategy currentStrategy(stdI,currRing);
154  gfan::ZFan* tropI = tropicalVariety(currentStrategy);
155  res->rtyp = fanID;
156  res->data = (char*) tropI;
158  id_Delete(&stdI,currRing);
159  return FALSE;
160  }
161  catch (const std::exception& ex)
162  {
163  Werror("ERROR: %s",ex.what());
164  return TRUE;
165  }
166  }
167  if ((v!=NULL) && (v->Typ()==NUMBER_CMD))
168  {
169  try
170  {
171  number p = (number) v->Data();
172  ideal stdI;
173  if (!hasFlag(u,FLAG_STD))
174  stdI = gfanlib_kStd_wrapper(I,currRing);
175  else
176  stdI = id_Copy(I,currRing);
177  tropicalStrategy currentStrategy(stdI,p,currRing);
178  gfan::ZFan* tropI = tropicalVariety(currentStrategy);
179  res->rtyp = fanID;
180  res->data = (char*) tropI;
181  id_Delete(&stdI,currRing);
182  return FALSE;
183  }
184  catch (const std::exception& ex)
185  {
186  Werror("ERROR: %s",ex.what());
187  return TRUE;
188  }
189  }
190  return FALSE;
191  }
192  WerrorS("tropicalVariety: unexpected parameters");
193  return TRUE;
194 }
#define OPT_REDSB
Definition: options.h:71
unsigned si_opt_1
Definition: options.c:5
Class used for (list of) interpreter objects.
Definition: subexpr.h:83
#define FALSE
Definition: auxiliary.h:94
static void setOptionRedSB()
return P p
Definition: myNF.cc:203
ideal id_Copy(ideal h1, const ring r)
copy an ideal
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
ring getStartingRing() const
returns the polynomial ring over the valuation ring
#define TRUE
Definition: auxiliary.h:98
int getExpectedAmbientDimension() const
g
Definition: cfModGcd.cc:4031
void WerrorS(const char *s)
Definition: feFopen.cc:24
int fanID
Definition: bbfan.cc:20
#define BITSET
Definition: structs.h:18
int Typ()
Definition: subexpr.cc:995
#define Sy_bit(x)
Definition: options.h:30
void * data
Definition: subexpr.h:89
poly res
Definition: myNF.cc:322
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:10
#define SI_RESTORE_OPT(A, B)
Definition: options.h:22
static gfan::ZFan * toZFan(std::set< gfan::ZCone > maxCones, int d)
ideal gfanlib_kStd_wrapper(ideal I, ring r, tHomog h=testHomog)
Definition: std_wrapper.cc:6
ideal getStartingIdeal() const
returns the input ideal
BITSET bitsetSave2
BOOLEAN tropicalVariety(leftv res, leftv args)
#define FLAG_STD
Definition: ipid.h:106
leftv next
Definition: subexpr.h:87
ideal idInit(int idsize, int rank)
initialise an ideal / module
Definition: simpleideals.cc:38
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:37
#define NULL
Definition: omList.c:10
implementation of the class groebnerCone
BITSET bitsetSave1
#define hasFlag(A, F)
Definition: ipid.h:109
int rtyp
Definition: subexpr.h:92
#define SI_SAVE_OPT(A, B)
Definition: options.h:19
void * Data()
Definition: subexpr.cc:1137
int idElem(const ideal F)
count non-zero elements
static void undoSetOptionRedSB()
polyrec * poly
Definition: hilb.h:10
int BOOLEAN
Definition: auxiliary.h:85
void Werror(const char *fmt,...)
Definition: reporter.cc:189