Skip to content

Commit 6079e3d

Browse files
committed
Modified groebner_basis() method for both classes
1 parent 529bb10 commit 6079e3d

File tree

1 file changed

+37
-39
lines changed

1 file changed

+37
-39
lines changed

src/sage/matroids/chow_ring_ideal.py

Lines changed: 37 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from sage.matroids.utilities import cmp_elements_key
44
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
55
from sage.sets.set import Set
6+
from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence
67

78

89
class ChowRingIdeal(MPolynomialIdeal):
@@ -20,13 +21,13 @@ def __init__(self, M, R):
2021
names = ['A{}'.format(''.join(str(x) for x in sorted(F, key=cmp_elements_key))) for F in self.flats]
2122

2223
try:
23-
poly_ring = PolynomialRing(R, names) #self.ring
24+
self.poly_ring = PolynomialRing(R, names) #self.ring
2425
except ValueError: # variables are not proper names
25-
poly_ring = PolynomialRing(R, 'A', len(self.flats))
26+
self.poly_ring = PolynomialRing(R, 'A', len(self.flats))
2627

2728

28-
gens = poly_ring.gens()
29-
self.flat_generator = dict(zip(self.flats, gens))
29+
gens = self.poly_ring.gens()
30+
self.flats_generator = dict(zip(self.flats, gens))
3031

3132

3233
Q = [gens[i] * gens[i+j+1] for i,F in enumerate(self.flats)
@@ -36,38 +37,39 @@ def __init__(self, M, R):
3637
for j,x in enumerate(E) for y in E[j+1:]]
3738

3839

39-
MPolynomialIdeal.__init__(self, poly_ring, Q + L)
40+
MPolynomialIdeal.__init__(self, self.poly_ring, Q + L)
4041

4142
def _repr_(self):
4243
return "Chow ring ideal of {}".format(self._matroid)
4344

4445
def groebner_basis(self):
4546
gb = list()
4647
for F in self.flats:
47-
for G in self.flats: #write from F not G
48+
for G in self.flats:
4849
if not (F < G or G < F):
49-
gb.append(self.names[F]*self.names[G])
50+
gb.append(self.flats_generator[F]*self.flats_generator[G])
5051
elif Set(F).is_empty():
51-
term = 0
52+
term = self.poly_ring.zero()
5253
for H in self.flats:
5354
if H < F:
54-
term += self.names[H]
55+
term += self.flats_generator[H]
5556
gb.append(term**self._matroid.rank(Set(G)))
5657
elif F < G:
57-
term = 0
58+
term = self.poly_ring.zero()
5859
for H in self.flats:
5960
if H < F:
60-
term += self.names[H]
61+
term += self.flats_generator[H]
6162
gb.append(term**(self._matroid.rank(Set(G))-self._matroid.rank(Set(F))))
6263

63-
return gb
64+
g_basis = PolynomialSequence(self.poly_ring, [gb])
65+
return g_basis
6466

6567

6668
def matroid(self):
6769
return self._matroid
6870

69-
def flat_generator(self):
70-
return dict(self.flat_generator)
71+
def flats_generator(self):
72+
return dict(self.flats_generator)
7173

7274

7375

@@ -85,8 +87,8 @@ def __init__(self, M, R):
8587
self.flats_generator = dict()
8688
#names_groundset = ['A{}'.format(''.join(str(x))) for x in E]
8789
#names_flats = ['B{}'.format(''.join(str(x) for x in sorted(F, key=cmp_elements_key))) for F in self.flats]
88-
poly_ring = PolynomialRing(R, 'A', len(E) + len(self.flats))
89-
gens = poly_ring.gens()
90+
self.poly_ring = PolynomialRing(R, 'A', len(E) + len(self.flats))
91+
gens = self.poly_ring.gens()
9092
for i,x in enumerate(E):
9193
self.flats_generator[x] = gens[i]
9294
for i,F in enumerate(self.flats):
@@ -116,17 +118,13 @@ def __init__(self, M, R):
116118
#Q.append([gens[i]*gens[len(E)+j] for i,x in enumerate(E) for j,F in enumerate(self.flats) if F not in flats_containing[x]])
117119
L = list()
118120
for i,x in enumerate(E):
119-
term = poly_ring.zero()
121+
term = self.poly_ring.zero()
120122
for j,F in enumerate(self.flats):
121123
if F not in flats_containing[x]:
122124
term += gens[le+j]
123125
L.append(gens[i] - term)
124126

125-
for g in Q:
126-
print(g, g.parent())
127-
for g in L:
128-
print(g, g.parent())
129-
MPolynomialIdeal.__init__(self, poly_ring, Q + L)
127+
MPolynomialIdeal.__init__(self, self.poly_ring, Q + L)
130128

131129
def _repr_(self): #use single underscore
132130
return "Augmented Chow ring ideal of {}".format(self._matroid)
@@ -135,14 +133,13 @@ def matroid(self):
135133
return self._matroid
136134

137135
def flat_generator(self):
138-
return self.flat_generator
136+
return self.flats_generator
139137

140138

141139

142140

143141

144142
def groebner_basis(self, atom_free=False):
145-
#list returned or iterator returned? - neither - polynomial_sequence_generic object
146143
gb = []
147144
flats = self.flats
148145
if Set([]) in flats:
@@ -151,48 +148,49 @@ def groebner_basis(self, atom_free=False):
151148
for F in flats:
152149
for G in flats:
153150
if not (F > G or G > F):
154-
gb.append(self.names[F]*self.names[G])
151+
gb.append(self.flats_generator[F]*self.flats_generator[G])
155152
elif F < G:
156-
term = 0
153+
term = self.poly_ring.zero()
157154
for H in self.flats:
158155
if H < F:
159-
term += self.names[H]
160-
gb.append(self.names[F]*(term**self._matroid.rank(Set(G)))*
156+
term += self.flats_generator[H]
157+
gb.append(self.flats_generator[F]*(term**self._matroid.rank(Set(G)))*
161158
(term**(self._matroid.rank(Set(G))-self._matroid.rank(Set(F)))))
162159

163160
else:
164161
E = list(self._matroid.groundset())
165162
for i in E:
166163
for F in flats:
167164
for G in flats:
168-
term = 0
165+
term = self.poly_ring.zero()
169166
for H in flats:
170167
if i in Set(H):
171-
term += self.names[H]
172-
gb.append(self.names[i] + term)
168+
term += self.flats_generator[H]
169+
gb.append(self.flats_generator[i] + term)
173170

174171
if i in Set(F):
175-
term = 0
172+
term = self.poly_ring.zero()
176173
for H in flats:
177174
if H < F:
178-
term += self.names[H]
179-
gb.append(self.names[i]*(term**self._matroid.rank(Set(G)))*
175+
term += self.flats_generator[H]
176+
gb.append(self.flats_generator[i]*(term**self._matroid.rank(Set(G)))*
180177
(term**(self._matroid.rank(Set(G))-self._matroid.rank(Set(F)))))
181178

182179
elif not i in Set(F):
183-
gb.append(self.names[i]*self.names[F])
180+
gb.append(self.flats_generator[i]*self.flats_generator[F])
184181

185182
elif not (F < G or G < F):
186-
gb.append(self.names[F]*self.names[G])
183+
gb.append(self.flats_generator[F]*self.flats_generator[G])
187184

188185
elif F < G:
189-
term = 0
186+
term = self.poly_ring.zero()
190187
for H in flats:
191188
if H < F:
192-
term += self.names[H]
189+
term += self.flats_generator[H]
193190
gb.append(term**(self._matroid.rank(Set(G))-self._matroid.rank(Set(F))))
194191

195-
return gb
192+
g_basis = PolynomialSequence(self.poly_ring, [gb])
193+
return g_basis
196194

197195

198196

0 commit comments

Comments
 (0)