From e87fd8466d10c21d8f16bd08187c11b4dc116020 Mon Sep 17 00:00:00 2001 From: George Huebner Date: Mon, 18 Mar 2024 13:25:51 -0500 Subject: [PATCH 1/3] src/sage/rings/polynomial: fix cython codegen function pointers to `cpdef`d functions don't work because of dispatch --- src/sage/rings/polynomial/hilbert.pyx | 2 +- src/sage/rings/polynomial/polydict.pxd | 2 ++ src/sage/rings/polynomial/polydict.pyx | 16 +++++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/sage/rings/polynomial/hilbert.pyx b/src/sage/rings/polynomial/hilbert.pyx index 147db5691c3..9e61c4b129e 100644 --- a/src/sage/rings/polynomial/hilbert.pyx +++ b/src/sage/rings/polynomial/hilbert.pyx @@ -106,7 +106,7 @@ cdef inline list interred(list L) noexcept: # that appears later in L. if not L: return [] - L.sort(key=ETuple.unweighted_degree) + L.sort(key=ETuple._unweighted_degree) cdef size_t i cdef ETuple m cdef list result = [ PyList_GET_ITEM(L, 0)] diff --git a/src/sage/rings/polynomial/polydict.pxd b/src/sage/rings/polynomial/polydict.pxd index 432ae7d8c47..af56cd80364 100644 --- a/src/sage/rings/polynomial/polydict.pxd +++ b/src/sage/rings/polynomial/polydict.pxd @@ -14,6 +14,8 @@ cdef class ETuple: cdef ETuple _new(self) noexcept cdef int get_exp(self, size_t i) noexcept + # need a cdef version for function pointers + cdef int _unweighted_degree(self) except * cpdef int unweighted_degree(self) except * cpdef int weighted_degree(self, tuple w) except * cpdef int unweighted_quotient_degree(self, ETuple other) except * diff --git a/src/sage/rings/polynomial/polydict.pyx b/src/sage/rings/polynomial/polydict.pyx index af24e7ff245..0ecf35e452f 100644 --- a/src/sage/rings/polynomial/polydict.pyx +++ b/src/sage/rings/polynomial/polydict.pyx @@ -1845,7 +1845,7 @@ cdef class ETuple: # additional methods - cpdef int unweighted_degree(self) except *: + cdef int _unweighted_degree(self) except *: r""" Return the sum of entries. @@ -1863,6 +1863,20 @@ cdef class ETuple: degree += self._data[2 * i + 1] return degree + cpdef int unweighted_degree(self) except *: + r""" + Return the sum of entries. + + EXAMPLES:: + + sage: from sage.rings.polynomial.polydict import ETuple + sage: ETuple([1, 1, 0, 2, 0]).unweighted_degree() + 4 + sage: ETuple([-1, 1]).unweighted_degree() + 0 + """ + return self._unweighted_degree() + @cython.boundscheck(False) @cython.wraparound(False) cpdef int weighted_degree(self, tuple w) except *: From 13e0581eca293dc4cd58e13052072b781217fc54 Mon Sep 17 00:00:00 2001 From: George Huebner Date: Tue, 19 Mar 2024 10:53:07 -0500 Subject: [PATCH 2/3] src/sage/modular/arithgroup/farey.cpp: use std::bind std::bind2nd removed in c++17 --- src/sage/modular/arithgroup/farey.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sage/modular/arithgroup/farey.cpp b/src/sage/modular/arithgroup/farey.cpp index 209391676de..d224b2a8d13 100644 --- a/src/sage/modular/arithgroup/farey.cpp +++ b/src/sage/modular/arithgroup/farey.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -737,7 +738,7 @@ size_t FareySymbol::nu3() const { size_t FareySymbol::rank_pi() const { if( index() == 2 ) return 1; return count_if(pairing.begin(), pairing.end(), - bind2nd(greater(), 0))/2; + bind(greater(), placeholders::_1, 0))/2; } size_t FareySymbol::number_of_cusps() const { From 39db3c5da87658c803a2be31fd6e92f77ed858aa Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 24 Mar 2024 19:41:31 -0700 Subject: [PATCH 3/3] src/sage/modular/arithgroup/farey_symbol.pyx: Add 'std=c++...' --- src/sage/modular/arithgroup/farey_symbol.pyx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sage/modular/arithgroup/farey_symbol.pyx b/src/sage/modular/arithgroup/farey_symbol.pyx index 34546c082da..4cfb4b12363 100644 --- a/src/sage/modular/arithgroup/farey_symbol.pyx +++ b/src/sage/modular/arithgroup/farey_symbol.pyx @@ -1,4 +1,6 @@ # distutils: sources = sage/modular/arithgroup/sl2z.cpp sage/modular/arithgroup/farey.cpp +# distutils: language = c++ +# distutils: extra_compile_args = -std=c++11 # sage.doctest: needs sage.libs.pari r""" Farey symbol for arithmetic subgroups of `\PSL_2(\ZZ)`