@@ -2987,12 +2987,12 @@ cdef class Matroid(SageObject):
2987
2987
.... : assert M. f_vector( ) == SimplicialComplex( M. bases( )) . f_vector( )
2988
2988
"""
2989
2989
cdef list f = []
2990
- cdef int i, sum
2990
+ cdef int i, s
2991
2991
for i in range (self .full_rank() + 1 ):
2992
- sum = 0
2992
+ s = 0
2993
2993
for _ in self .independent_r_sets_iterator(i):
2994
- sum += 1
2995
- f.append(sum )
2994
+ s += 1
2995
+ f.append(ZZ(s) )
2996
2996
return f
2997
2997
2998
2998
cpdef whitney_numbers(self ) noexcept:
@@ -3022,7 +3022,7 @@ cdef class Matroid(SageObject):
3022
3022
cdef list abs_w = [0 ] * (self .rank()+ 1 )
3023
3023
for S in self .no_broken_circuits_sets_iterator():
3024
3024
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 ]
3026
3026
3027
3027
cpdef whitney_numbers2(self ) noexcept:
3028
3028
r """
@@ -3042,10 +3042,10 @@ cdef class Matroid(SageObject):
3042
3042
"""
3043
3043
loops = self ._closure(set ())
3044
3044
flags = [[loops, set (), self .groundset() - loops]]
3045
- W = [1 ]
3045
+ W = [ZZ.one() ]
3046
3046
for r in range (self .full_rank()):
3047
3047
flags = self ._extend_flags(flags)
3048
- W.append(len (flags))
3048
+ W.append(ZZ( len (flags) ))
3049
3049
return W
3050
3050
3051
3051
cpdef broken_circuits(self , ordering = None ) noexcept:
@@ -3205,39 +3205,48 @@ cdef class Matroid(SageObject):
3205
3205
sage: SimplicialComplex( list( M. no_broken_circuits_sets_iterator( [5,4,3,2,1 ])))
3206
3206
Simplicial complex with vertex set ( 1, 2, 3, 4, 5)
3207
3207
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
+ `\e mptyset`, 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
+ []
3208
3215
"""
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)
3241
3250
3242
3251
def orlik_solomon_algebra (self , R , ordering = None , **kwargs ):
3243
3252
"""
@@ -3390,9 +3399,9 @@ cdef class Matroid(SageObject):
3390
3399
convert = {ind: i for i, ind in enumerate (self .groundset())}
3391
3400
cdef list lst, vertices = []
3392
3401
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]]
3396
3405
vertices.append(ambient.sum(lst))
3397
3406
return Polyhedron(vertices)
3398
3407
0 commit comments