Skip to content

Commit 4b95fc9

Browse files
committed
Suggestions by tscrim
1 parent 2caff02 commit 4b95fc9

File tree

1 file changed

+51
-42
lines changed

1 file changed

+51
-42
lines changed

src/sage/matroids/matroid.pyx

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2987,12 +2987,12 @@ cdef class Matroid(SageObject):
29872987
....: assert M.f_vector() == SimplicialComplex(M.bases()).f_vector()
29882988
"""
29892989
cdef list f = []
2990-
cdef int i, sum
2990+
cdef int i, s
29912991
for i in range(self.full_rank() + 1):
2992-
sum = 0
2992+
s = 0
29932993
for _ in self.independent_r_sets_iterator(i):
2994-
sum += 1
2995-
f.append(sum)
2994+
s += 1
2995+
f.append(ZZ(s))
29962996
return f
29972997

29982998
cpdef whitney_numbers(self) noexcept:
@@ -3022,7 +3022,7 @@ cdef class Matroid(SageObject):
30223022
cdef list abs_w = [0] * (self.rank()+1)
30233023
for S in self.no_broken_circuits_sets_iterator():
30243024
abs_w[len(S)] += 1
3025-
return [(-1)**i * abs_w[i] for i in range(len(abs_w)) if abs_w[i] != 0]
3025+
return [ZZ((-1)**i * val) for i, val in enumerate(abs_w) if val != 0]
30263026

30273027
cpdef whitney_numbers2(self) noexcept:
30283028
r"""
@@ -3042,10 +3042,10 @@ cdef class Matroid(SageObject):
30423042
"""
30433043
loops = self._closure(set())
30443044
flags = [[loops, set(), self.groundset() - loops]]
3045-
W = [1]
3045+
W = [ZZ.one()]
30463046
for r in range(self.full_rank()):
30473047
flags = self._extend_flags(flags)
3048-
W.append(len(flags))
3048+
W.append(ZZ(len(flags)))
30493049
return W
30503050

30513051
cpdef broken_circuits(self, ordering=None) noexcept:
@@ -3205,39 +3205,48 @@ cdef class Matroid(SageObject):
32053205
sage: SimplicialComplex(list(M.no_broken_circuits_sets_iterator([5,4,3,2,1])))
32063206
Simplicial complex with vertex set (1, 2, 3, 4, 5)
32073207
and facets {(1, 3, 5), (2, 3, 5), (2, 4, 5), (3, 4, 5)}
3208+
3209+
For a matroid with loops all sets contain the broken circuit
3210+
`\emptyset`, and thus we shouldn't get any set as output::
3211+
3212+
sage: M = Matroid(groundset=[1,2,3], circuits=[[3]])
3213+
sage: list(M.no_broken_circuits_sets_iterator())
3214+
[]
32083215
"""
3209-
if not self.loops():
3210-
if ordering is None:
3211-
rev_order = sorted(self.groundset(), key=cmp_elements_key, reverse=True)
3212-
else:
3213-
if frozenset(ordering) != self.groundset():
3214-
raise ValueError("not an ordering of the groundset")
3215-
rev_order = list(reversed(ordering))
3216-
3217-
Tmax = len(rev_order)
3218-
reverse_dict = {value: key for key, value in enumerate(rev_order)}
3219-
3220-
yield frozenset()
3221-
next_level = [[val] for val in rev_order]
3222-
i = 0
3223-
level = -1
3224-
while next_level:
3225-
cur_level = next_level
3226-
next_level = []
3227-
level += 1
3228-
for H in cur_level:
3229-
tp = (<Py_ssize_t> reverse_dict[H[level]]) + 1
3230-
is_indep = True
3231-
Ht = [None] * (Tmax-tp)
3232-
for i in range(tp, Tmax):
3233-
temp = H + [rev_order[i]]
3234-
if not self._is_independent(frozenset(temp)):
3235-
is_indep = False
3236-
break
3237-
Ht[i-tp] = temp
3238-
if is_indep:
3239-
yield frozenset(H)
3240-
next_level.extend(Ht)
3216+
if self.loops():
3217+
return
3218+
3219+
if ordering is None:
3220+
rev_order = sorted(self.groundset(), key=cmp_elements_key, reverse=True)
3221+
else:
3222+
if frozenset(ordering) != self.groundset():
3223+
raise ValueError("not an ordering of the groundset")
3224+
rev_order = list(reversed(ordering))
3225+
3226+
Tmax = len(rev_order)
3227+
reverse_dict = {value: key for key, value in enumerate(rev_order)}
3228+
3229+
yield frozenset()
3230+
next_level = [[val] for val in rev_order]
3231+
i = 0
3232+
level = -1
3233+
while next_level:
3234+
cur_level = next_level
3235+
next_level = []
3236+
level += 1
3237+
for H in cur_level:
3238+
tp = (<Py_ssize_t> reverse_dict[H[level]]) + 1
3239+
is_indep = True
3240+
Ht = [None] * (Tmax-tp)
3241+
for i in range(tp, Tmax):
3242+
temp = H + [rev_order[i]]
3243+
if not self._is_independent(frozenset(temp)):
3244+
is_indep = False
3245+
break
3246+
Ht[i-tp] = temp
3247+
if is_indep:
3248+
yield frozenset(H)
3249+
next_level.extend(Ht)
32413250

32423251
def orlik_solomon_algebra(self, R, ordering=None, **kwargs):
32433252
"""
@@ -3390,9 +3399,9 @@ cdef class Matroid(SageObject):
33903399
convert = {ind: i for i, ind in enumerate(self.groundset())}
33913400
cdef list lst, vertices = []
33923401
for IS in self.independent_sets_iterator():
3393-
lst = []
3394-
for i in IS:
3395-
lst.append(vector_e[convert[i]])
3402+
lst = [None] * len(IS)
3403+
for ind, i in enumerate(IS):
3404+
lst[ind] = vector_e[convert[i]]
33963405
vertices.append(ambient.sum(lst))
33973406
return Polyhedron(vertices)
33983407

0 commit comments

Comments
 (0)