Skip to content

Commit 7855be0

Browse files
author
Release Manager
committed
gh-37361: Add iterators, Whitney numbers, characteristic polynomial, etc Changes (mostly in `matroid.pyx`): - Add `_iterator` functions for `bases`, `circuits`, etc, and use them internally (this avoids memory consumption/blowups) - Add Whitney numbers functions (for the first and second kind) - Correct `f_vector` definition (the definition up till now referred to the Whitney numbers of second kind) - Add characteristic polynomial - Correct `is_valid` function to be `False` on a negative rank value - Optimize `circuits` function (e.g. `sage: %time C = matroids.CompleteGraphic(8).circuits()` drops from `4m` to `1m`) - Optimize `broken_circuit_complex` function - Improve docstrings (1-line outputs and other changes) ### ⌛ Dependencies * Depends on #37667 URL: #37361 Reported by: gmou3 Reviewer(s): gmou3, Matthias Köppe, Travis Scrimshaw
2 parents 031064b + 236361b commit 7855be0

File tree

659 files changed

+6006
-5798
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

659 files changed

+6006
-5798
lines changed

src/sage/algebras/clifford_algebra_element.pxd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ from sage.modules.with_basis.indexed_element cimport IndexedFreeModuleElement
55
from sage.data_structures.bitset cimport FrozenBitset
66

77
cdef class CliffordAlgebraElement(IndexedFreeModuleElement):
8-
cdef CliffordAlgebraElement _mul_self_term(self, FrozenBitset supp, coeff) noexcept
9-
cdef CliffordAlgebraElement _mul_term_self(self, FrozenBitset supp, coeff) noexcept
8+
cdef CliffordAlgebraElement _mul_self_term(self, FrozenBitset supp, coeff)
9+
cdef CliffordAlgebraElement _mul_term_self(self, FrozenBitset supp, coeff)
1010

1111
cdef class ExteriorAlgebraElement(CliffordAlgebraElement):
1212
pass

src/sage/algebras/clifford_algebra_element.pyx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ cdef class CliffordAlgebraElement(IndexedFreeModuleElement):
6565
"""
6666
return repr_from_monomials(self.list(), self._parent._latex_term, True)
6767

68-
cdef _mul_(self, other) noexcept:
68+
cdef _mul_(self, other):
6969
"""
7070
Return ``self`` multiplied by ``other``.
7171
@@ -176,7 +176,7 @@ cdef class CliffordAlgebraElement(IndexedFreeModuleElement):
176176

177177
return self.__class__(self.parent(), d)
178178

179-
cdef CliffordAlgebraElement _mul_self_term(self, FrozenBitset supp, coeff) noexcept:
179+
cdef CliffordAlgebraElement _mul_self_term(self, FrozenBitset supp, coeff):
180180
r"""
181181
Multiply ``self * term`` with the ``term`` having support ``supp``
182182
and coefficient ``coeff``.
@@ -224,7 +224,7 @@ cdef class CliffordAlgebraElement(IndexedFreeModuleElement):
224224

225225
return type(self)(self._parent, {supp: coeff}) * self
226226

227-
cdef CliffordAlgebraElement _mul_term_self(self, FrozenBitset supp, coeff) noexcept:
227+
cdef CliffordAlgebraElement _mul_term_self(self, FrozenBitset supp, coeff):
228228
r"""
229229
Multiply ``term * self`` with the ``term`` having support ``supp``
230230
and coefficient ``coeff``.
@@ -400,7 +400,7 @@ cdef class ExteriorAlgebraElement(CliffordAlgebraElement):
400400
"""
401401
An element of an exterior algebra.
402402
"""
403-
cdef _mul_(self, other) noexcept:
403+
cdef _mul_(self, other):
404404
"""
405405
Return ``self`` multiplied by ``other``.
406406
@@ -520,7 +520,7 @@ cdef class ExteriorAlgebraElement(CliffordAlgebraElement):
520520

521521
return self.__class__(P, d)
522522

523-
cdef CliffordAlgebraElement _mul_self_term(self, FrozenBitset supp, coeff) noexcept:
523+
cdef CliffordAlgebraElement _mul_self_term(self, FrozenBitset supp, coeff):
524524
r"""
525525
Multiply ``self * term`` with the ``term`` having support ``supp``
526526
and coefficient ``coeff``.
@@ -610,7 +610,7 @@ cdef class ExteriorAlgebraElement(CliffordAlgebraElement):
610610
del d[k]
611611
return type(self)(self._parent, d)
612612

613-
cdef CliffordAlgebraElement _mul_term_self(self, FrozenBitset supp, coeff) noexcept:
613+
cdef CliffordAlgebraElement _mul_term_self(self, FrozenBitset supp, coeff):
614614
r"""
615615
Multiply ``term * self`` with the ``term`` having support ``supp``
616616
and coefficient ``coeff``.
@@ -939,7 +939,7 @@ cdef class CohomologyRAAGElement(CliffordAlgebraElement):
939939
940940
:class:`~sage.groups.raag.CohomologyRAAG`
941941
"""
942-
cdef _mul_(self, other) noexcept:
942+
cdef _mul_(self, other):
943943
"""
944944
Return ``self`` multiplied by ``other``.
945945

src/sage/algebras/exterior_algebra_groebner.pxd

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ from sage.structure.parent cimport Parent
88
from sage.structure.element cimport MonoidElement
99

1010
cdef long degree(FrozenBitset X) noexcept
11-
cdef CliffordAlgebraElement build_monomial(Parent E, FrozenBitset supp) noexcept
11+
cdef CliffordAlgebraElement build_monomial(Parent E, FrozenBitset supp)
1212

1313
cdef class GBElement:
1414
cdef CliffordAlgebraElement elt
@@ -24,25 +24,25 @@ cdef class GroebnerStrategy:
2424
cdef Integer rank
2525
cdef public tuple groebner_basis
2626

27-
cdef inline GBElement build_elt(self, CliffordAlgebraElement f) noexcept
28-
cdef inline GBElement prod_GB_term(self, GBElement f, FrozenBitset t) noexcept
29-
cdef inline GBElement prod_term_GB(self, FrozenBitset t, GBElement f) noexcept
27+
cdef inline GBElement build_elt(self, CliffordAlgebraElement f)
28+
cdef inline GBElement prod_GB_term(self, GBElement f, FrozenBitset t)
29+
cdef inline GBElement prod_term_GB(self, FrozenBitset t, GBElement f)
3030
cdef inline bint build_S_poly(self, GBElement f, GBElement g) noexcept
3131

32-
cdef inline FrozenBitset leading_support(self, CliffordAlgebraElement f) noexcept
33-
cdef inline partial_S_poly_left(self, GBElement f, GBElement g) noexcept
34-
cdef inline partial_S_poly_right(self, GBElement f, GBElement g) noexcept
35-
cdef set preprocessing(self, list P, list G) noexcept
36-
cdef list reduction(self, list P, list G) noexcept
32+
cdef inline FrozenBitset leading_support(self, CliffordAlgebraElement f)
33+
cdef inline partial_S_poly_left(self, GBElement f, GBElement g)
34+
cdef inline partial_S_poly_right(self, GBElement f, GBElement g)
35+
cdef set preprocessing(self, list P, list G)
36+
cdef list reduction(self, list P, list G)
3737

38-
cpdef CliffordAlgebraElement reduce(self, CliffordAlgebraElement f) noexcept
38+
cpdef CliffordAlgebraElement reduce(self, CliffordAlgebraElement f)
3939
cdef bint reduce_single(self, CliffordAlgebraElement f, CliffordAlgebraElement g) except -1
4040
cdef int reduced_gb(self, list G) except -1
4141

4242
# These are the methods that determine the ordering of the monomials.
4343
# These must be implemented in subclasses. Declare them as "inline" there.
44-
cdef Integer bitset_to_int(self, FrozenBitset X) noexcept
45-
cdef FrozenBitset int_to_bitset(self, Integer n) noexcept
44+
cdef Integer bitset_to_int(self, FrozenBitset X)
45+
cdef FrozenBitset int_to_bitset(self, Integer n)
4646

4747
cdef class GroebnerStrategyNegLex(GroebnerStrategy):
4848
pass

src/sage/algebras/exterior_algebra_groebner.pyx

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ cdef inline long degree(FrozenBitset X) noexcept:
3737
return bitset_len(X._bitset)
3838

3939

40-
cdef inline CliffordAlgebraElement build_monomial(Parent E, FrozenBitset supp) noexcept:
40+
cdef inline CliffordAlgebraElement build_monomial(Parent E, FrozenBitset supp):
4141
"""
4242
Helper function for the fastest way to build a monomial.
4343
"""
@@ -130,14 +130,14 @@ cdef class GroebnerStrategy:
130130
else:
131131
self.side = 2
132132

133-
cdef inline FrozenBitset leading_support(self, CliffordAlgebraElement f) noexcept:
133+
cdef inline FrozenBitset leading_support(self, CliffordAlgebraElement f):
134134
"""
135135
Return the leading support of the exterior algebra element ``f``.
136136
"""
137137
cdef dict mc = <dict> f._monomial_coefficients
138138
return self.int_to_bitset(max(self.bitset_to_int(k) for k in mc))
139139

140-
cdef inline partial_S_poly_left(self, GBElement f, GBElement g) noexcept:
140+
cdef inline partial_S_poly_left(self, GBElement f, GBElement g):
141141
r"""
142142
Compute one half of the `S`-polynomial for ``f`` and ``g``.
143143
@@ -154,7 +154,7 @@ cdef class GroebnerStrategy:
154154
ret.elt._monomial_coefficients[k] *= inv
155155
return ret
156156

157-
cdef inline partial_S_poly_right(self, GBElement f, GBElement g) noexcept:
157+
cdef inline partial_S_poly_right(self, GBElement f, GBElement g):
158158
r"""
159159
Compute one half of the `S`-polynomial for ``f`` and ``g``.
160160
@@ -171,7 +171,7 @@ cdef class GroebnerStrategy:
171171
ret.elt._monomial_coefficients[k] *= inv
172172
return ret
173173

174-
cdef inline GBElement build_elt(self, CliffordAlgebraElement f) noexcept:
174+
cdef inline GBElement build_elt(self, CliffordAlgebraElement f):
175175
"""
176176
Convert ``f`` into a ``GBElement``.
177177
"""
@@ -181,7 +181,7 @@ cdef class GroebnerStrategy:
181181
cdef Integer r = <Integer> max(self.bitset_to_int(k) for k in mc)
182182
return GBElement(f, self.int_to_bitset(r), r)
183183

184-
cdef inline GBElement prod_GB_term(self, GBElement f, FrozenBitset t) noexcept:
184+
cdef inline GBElement prod_GB_term(self, GBElement f, FrozenBitset t):
185185
"""
186186
Return the GBElement corresponding to ``f * t``.
187187
@@ -193,7 +193,7 @@ cdef class GroebnerStrategy:
193193
cdef FrozenBitset ls = <FrozenBitset> f.ls._union(t)
194194
return GBElement(<CliffordAlgebraElement> ret, ls, self.bitset_to_int(ls))
195195

196-
cdef inline GBElement prod_term_GB(self, FrozenBitset t, GBElement f) noexcept:
196+
cdef inline GBElement prod_term_GB(self, FrozenBitset t, GBElement f):
197197
"""
198198
Return the GBElement corresponding to ``t * f``.
199199
@@ -220,7 +220,7 @@ cdef class GroebnerStrategy:
220220

221221
return (<FrozenBitset> f.ls.intersection(g.ls)).isempty()
222222

223-
cdef inline set preprocessing(self, list P, list G) noexcept:
223+
cdef inline set preprocessing(self, list P, list G):
224224
"""
225225
Perform the preprocessing step.
226226
"""
@@ -266,7 +266,7 @@ cdef class GroebnerStrategy:
266266
break
267267
return L
268268

269-
cdef inline list reduction(self, list P, list G) noexcept:
269+
cdef inline list reduction(self, list P, list G):
270270
"""
271271
Perform the reduction of ``P`` mod ``G`` in ``E``.
272272
"""
@@ -451,7 +451,7 @@ cdef class GroebnerStrategy:
451451
cdef list G = [self.build_elt(f) for f in self.groebner_basis]
452452
self.reduced_gb(G)
453453

454-
cpdef CliffordAlgebraElement reduce(self, CliffordAlgebraElement f) noexcept:
454+
cpdef CliffordAlgebraElement reduce(self, CliffordAlgebraElement f):
455455
"""
456456
Reduce ``f`` modulo the ideal with Gröbner basis ``G``.
457457
@@ -533,10 +533,10 @@ cdef class GroebnerStrategy:
533533
iaxpy(-coeff, gp._monomial_coefficients, f._monomial_coefficients)
534534
return was_reduced
535535

536-
cdef Integer bitset_to_int(self, FrozenBitset X) noexcept:
536+
cdef Integer bitset_to_int(self, FrozenBitset X):
537537
raise NotImplementedError
538538

539-
cdef FrozenBitset int_to_bitset(self, Integer n) noexcept:
539+
cdef FrozenBitset int_to_bitset(self, Integer n):
540540
raise NotImplementedError
541541

542542
def sorted_monomials(self, as_dict=False):
@@ -615,7 +615,7 @@ cdef class GroebnerStrategyNegLex(GroebnerStrategy):
615615
"""
616616
Gröbner basis strategy implementing neglex ordering.
617617
"""
618-
cdef inline Integer bitset_to_int(self, FrozenBitset X) noexcept:
618+
cdef inline Integer bitset_to_int(self, FrozenBitset X):
619619
"""
620620
Convert ``X`` to an :class:`Integer`.
621621
"""
@@ -626,7 +626,7 @@ cdef class GroebnerStrategyNegLex(GroebnerStrategy):
626626
elt = bitset_next(X._bitset, elt + 1)
627627
return ret
628628

629-
cdef inline FrozenBitset int_to_bitset(self, Integer n) noexcept:
629+
cdef inline FrozenBitset int_to_bitset(self, Integer n):
630630
"""
631631
Convert a nonnegative integer ``n`` to a :class:`FrozenBitset`.
632632
"""
@@ -646,7 +646,7 @@ cdef class GroebnerStrategyDegRevLex(GroebnerStrategy):
646646
"""
647647
Gröbner basis strategy implementing degree revlex ordering.
648648
"""
649-
cdef inline Integer bitset_to_int(self, FrozenBitset X) noexcept:
649+
cdef inline Integer bitset_to_int(self, FrozenBitset X):
650650
"""
651651
Convert ``X`` to an :class:`Integer`.
652652
"""
@@ -665,7 +665,7 @@ cdef class GroebnerStrategyDegRevLex(GroebnerStrategy):
665665
elt = bitset_next(X._bitset, elt + 1)
666666
return Integer(sum(n.binomial(i) for i in range(deg+1)) - t - 1)
667667

668-
cdef inline FrozenBitset int_to_bitset(self, Integer n) noexcept:
668+
cdef inline FrozenBitset int_to_bitset(self, Integer n):
669669
"""
670670
Convert a nonnegative integer ``n`` to a :class:`FrozenBitset`.
671671
"""
@@ -687,7 +687,7 @@ cdef class GroebnerStrategyDegLex(GroebnerStrategy):
687687
"""
688688
Gröbner basis strategy implementing degree lex ordering.
689689
"""
690-
cdef inline Integer bitset_to_int(self, FrozenBitset X) noexcept:
690+
cdef inline Integer bitset_to_int(self, FrozenBitset X):
691691
"""
692692
Convert ``X`` to an :class:`Integer`.
693693
"""
@@ -706,7 +706,7 @@ cdef class GroebnerStrategyDegLex(GroebnerStrategy):
706706
elt = bitset_next(X._bitset, elt + 1)
707707
return Integer(sum(n.binomial(i) for i in range(deg+1)) - t - 1)
708708

709-
cdef inline FrozenBitset int_to_bitset(self, Integer n) noexcept:
709+
cdef inline FrozenBitset int_to_bitset(self, Integer n):
710710
"""
711711
Convert a nonnegative integer ``n`` to a :class:`FrozenBitset`.
712712
"""

src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ cdef class FiniteDimensionalAlgebraElement(AlgebraElement):
66
cdef Matrix __matrix
77
cdef FiniteDimensionalAlgebraElement __inverse
88

9-
cpdef FiniteDimensionalAlgebraElement unpickle_FiniteDimensionalAlgebraElement(A, vec, mat) noexcept
9+
cpdef FiniteDimensionalAlgebraElement unpickle_FiniteDimensionalAlgebraElement(A, vec, mat)

src/sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ from sage.rings.integer import Integer
2020

2121
from cpython.object cimport PyObject_RichCompare as richcmp
2222

23-
cpdef FiniteDimensionalAlgebraElement unpickle_FiniteDimensionalAlgebraElement(A, vec, mat) noexcept:
23+
cpdef FiniteDimensionalAlgebraElement unpickle_FiniteDimensionalAlgebraElement(A, vec, mat):
2424
"""
2525
Helper for unpickling of finite dimensional algebra elements.
2626
@@ -365,7 +365,7 @@ cdef class FiniteDimensionalAlgebraElement(AlgebraElement):
365365
return self._vector.ncols()
366366

367367
# (Rich) comparison
368-
cpdef _richcmp_(self, right, int op) noexcept:
368+
cpdef _richcmp_(self, right, int op):
369369
"""
370370
EXAMPLES::
371371
@@ -400,7 +400,7 @@ cdef class FiniteDimensionalAlgebraElement(AlgebraElement):
400400
"""
401401
return richcmp(self._vector, <FiniteDimensionalAlgebraElement>right._vector, op)
402402

403-
cpdef _add_(self, other) noexcept:
403+
cpdef _add_(self, other):
404404
"""
405405
EXAMPLES::
406406
@@ -411,7 +411,7 @@ cdef class FiniteDimensionalAlgebraElement(AlgebraElement):
411411
"""
412412
return self._parent.element_class(self._parent, self._vector + <FiniteDimensionalAlgebraElement>other._vector)
413413

414-
cpdef _sub_(self, other) noexcept:
414+
cpdef _sub_(self, other):
415415
"""
416416
EXAMPLES::
417417
@@ -422,7 +422,7 @@ cdef class FiniteDimensionalAlgebraElement(AlgebraElement):
422422
"""
423423
return self._parent.element_class(self._parent, self._vector - <FiniteDimensionalAlgebraElement>other._vector)
424424

425-
cpdef _mul_(self, other) noexcept:
425+
cpdef _mul_(self, other):
426426
"""
427427
EXAMPLES::
428428
@@ -434,7 +434,7 @@ cdef class FiniteDimensionalAlgebraElement(AlgebraElement):
434434
"""
435435
return self._parent.element_class(self._parent, self._vector * <FiniteDimensionalAlgebraElement>(other)._matrix)
436436

437-
cpdef _lmul_(self, Element other) noexcept:
437+
cpdef _lmul_(self, Element other):
438438
"""
439439
TESTS::
440440
@@ -450,7 +450,7 @@ cdef class FiniteDimensionalAlgebraElement(AlgebraElement):
450450
.format(self.parent(), other.parent()))
451451
return self._parent.element_class(self._parent, self._vector * other)
452452

453-
cpdef _rmul_(self, Element other) noexcept:
453+
cpdef _rmul_(self, Element other):
454454
"""
455455
TESTS::
456456
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cdef _fmat(fvars, Nk_ij, one, a, b, c, d, x, y) noexcept
2-
cpdef _backward_subs(factory, bint flatten=*) noexcept
3-
cpdef executor(tuple params) noexcept
4-
cpdef _solve_for_linear_terms(factory, list eqns=*) noexcept
1+
cdef _fmat(fvars, Nk_ij, one, a, b, c, d, x, y)
2+
cpdef _backward_subs(factory, bint flatten=*)
3+
cpdef executor(tuple params)
4+
cpdef _solve_for_linear_terms(factory, list eqns=*)

0 commit comments

Comments
 (0)