[sagemath/f20] Workaround issues in cython backport

pcpa pcpa at fedoraproject.org
Sat Dec 6 19:20:20 UTC 2014


commit f687cfb41470bfe20d0f905e00f84f2a98b12ce2
Author: pcpa <paulo.cesar.pereira.de.andrade at gmail.com>
Date:   Sat Dec 6 17:20:29 2014 -0200

    Workaround issues in cython backport

 sagemath-cython-0.21.1.patch |  228 ++++++++++++++++++++++++++++++++++++++++++
 sagemath.spec                |    4 +
 2 files changed, 232 insertions(+), 0 deletions(-)
---
diff --git a/sagemath-cython-0.21.1.patch b/sagemath-cython-0.21.1.patch
new file mode 100644
index 0000000..df685b9
--- /dev/null
+++ b/sagemath-cython-0.21.1.patch
@@ -0,0 +1,228 @@
+--- src/sage/libs/ppl.pyx.orig	2014-12-06 17:14:55.273653335 -0200
++++ src/sage/libs/ppl.pyx	2014-12-01 12:54:53.538369211 -0200
+@@ -150,7 +150,7 @@
+ from sage.structure.sage_object cimport SageObject
+ from sage.libs.gmp.mpz cimport mpz_t, mpz_set
+ from sage.rings.integer cimport Integer
+-from sage.rings.rational import Rational
++from sage.rings.rational cimport Rational
+ 
+ include 'sage/ext/interrupt.pxi'
+ include "sage/ext/stdsage.pxi"
+@@ -171,7 +171,7 @@
+         mpz_class(int i)
+         mpz_class(mpz_t z)
+         mpz_class(mpz_class)
+-        mpz_t* get_mpz_t()
++        mpz_t get_mpz_t()
+ 
+ 
+ ####################################################
+@@ -187,11 +187,11 @@
+ ####################################################
+ # Cython does not support ctypedef within cppclass; Hack around this restriction:
+ cdef extern from "ppl.hh" namespace "Parma_Polyhedra_Library::Generator":
+-    ctypedef enum PPL_GeneratorType:
++    ctypedef enum PPL_GeneratorType "Parma_Polyhedra_Library::Generator::Type":
+         LINE, RAY, POINT, CLOSURE_POINT
+ 
+ cdef extern from "ppl.hh" namespace "Parma_Polyhedra_Library::Constraint":
+-    ctypedef enum PPL_ConstraintType:
++    ctypedef enum PPL_ConstraintType "Parma_Polyhedra_Library::Constraint::Type":
+         EQUALITY, NONSTRICT_INEQUALITY, STRICT_INEQUALITY
+ 
+ cdef extern from "ppl.hh" namespace "Parma_Polyhedra_Library::MIP_Problem":
+@@ -328,7 +328,7 @@
+     cdef enum PPL_Optimization_Mode:
+         MINIMIZATION, MAXIMIZATION
+ 
+-    cdef enum PPL_MIP_Problem_Status:
++    cdef enum MIP_Problem_Status:
+         UNFEASIBLE_MIP_PROBLEM, UNBOUNDED_MIP_PROBLEM, OPTIMIZED_MIP_PROBLEM
+ 
+     cdef cppclass PPL_Polyhedron:
+@@ -426,7 +426,7 @@
+         void set_optimization_mode(PPL_Optimization_Mode mode)
+         PPL_Optimization_Mode optimization_mode()
+         bint is_satisfiable()
+-        PPL_MIP_Problem_Status solve()
++        MIP_Problem_Status solve()
+         void evaluate_objective_function(PPL_Generator evaluating_point, PPL_Coefficient &num, PPL_Coefficient &den) except +ValueError
+         PPL_Generator& feasible_point()
+         PPL_Generator optimizing_point() except +ValueError
+@@ -861,6 +861,51 @@
+         self.thisptr.add_space_dimensions_and_embed(m)
+         sig_off()
+ 
++    def _add_rational_constraint(self, e, denom, lower, upper):
++        """
++        Helper function for adding constraints: add the constraint
++        ``lower <= e/denom <= upper``.
++        
++        INPUT:
++
++        - ``e`` -- a linear expression (type ``Linear_Expression``)
++
++        - ``denom`` -- a positive integer
++
++        - ``lower``, ``upper`` -- a rational number or ``None``, where
++          ``None`` means that there is no constraint
++
++        TESTS:
++
++        Create a linear system with only equalities as constraints::
++
++            sage: p = MixedIntegerLinearProgram(solver="PPL")
++            sage: x = p.new_variable(nonnegative=False)
++            sage: n = 40
++            sage: v = random_vector(QQ, n)
++            sage: M = random_matrix(QQ, 2*n, n)
++            sage: for j in range(2*n):  # indirect doctest
++            ....:     lhs = p.sum(M[j,i]*x[i] for i in range(n))
++            ....:     rhs = M.row(j).inner_product(v)
++            ....:     p.add_constraint(lhs == rhs)
++            sage: p.solve()  # long time
++            0
++
++        """
++        cdef Rational rhs
++
++        if lower == upper:
++            if lower is not None:
++                rhs = Rational(lower * denom)
++                self.add_constraint(e * rhs.denominator() == rhs.numerator())
++        else:
++            if lower is not None:
++                rhs = Rational(lower * denom)
++                self.add_constraint(e * rhs.denominator() >= rhs.numerator())
++            if upper is not None:
++                rhs = Rational(upper * denom)
++                self.add_constraint(e * rhs.denominator() <= rhs.numerator())
++
+     def add_constraint(self, Constraint c):
+         """
+         Adds a copy of constraint c to the MIP problem.
+@@ -1894,7 +1939,11 @@
+             sage: cs.insert( 3*x+5*y<=10 )
+             sage: p = C_Polyhedron(cs)
+             sage: p.maximize( x+y )
+-            {'sup_d': 3, 'sup_n': 10, 'bounded': True, 'maximum': True, 'generator': point(10/3, 0/3)}
++            {'bounded': True,
++             'generator': point(10/3, 0/3),
++             'maximum': True,
++             'sup_d': 3,
++             'sup_n': 10}
+ 
+         Unbounded case::
+ 
+@@ -1904,7 +1953,11 @@
+             sage: p.maximize( +x )
+             {'bounded': False}
+             sage: p.maximize( -x )
+-            {'sup_d': 1, 'sup_n': 0, 'bounded': True, 'maximum': False, 'generator': closure_point(0/1)}
++            {'bounded': True,
++             'generator': closure_point(0/1),
++             'maximum': False,
++             'sup_d': 1,
++             'sup_n': 0}
+         """
+         cdef PPL_Coefficient sup_n
+         cdef PPL_Coefficient sup_d
+@@ -1965,7 +2018,11 @@
+             sage: cs.insert( 3*x+5*y<=10 )
+             sage: p = C_Polyhedron(cs)
+             sage: p.minimize( x+y )
+-            {'minimum': True, 'bounded': True, 'inf_d': 1, 'generator': point(0/1, 0/1), 'inf_n': 0}
++            {'bounded': True,
++             'generator': point(0/1, 0/1),
++             'inf_d': 1,
++             'inf_n': 0,
++             'minimum': True}
+ 
+         Unbounded case::
+ 
+@@ -1973,7 +2030,11 @@
+             sage: cs.insert( x>0 )
+             sage: p = NNC_Polyhedron(cs)
+             sage: p.minimize( +x )
+-            {'minimum': False, 'bounded': True, 'inf_d': 1, 'generator': closure_point(0/1), 'inf_n': 0}
++            {'bounded': True,
++             'generator': closure_point(0/1),
++             'inf_d': 1,
++             'inf_n': 0,
++             'minimum': False}
+             sage: p.minimize( -x )
+             {'bounded': False}
+         """
+@@ -2863,7 +2924,7 @@
+             sage: sage_cmd += 'p.minimized_generators()\n'
+             sage: sage_cmd += 'p.ascii_dump()\n'
+             sage: from sage.tests.cmdline import test_executable
+-            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100);  # long time, indirect doctest
++            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest
+             sage: print err  # long time
+             space_dim 2
+             -ZE -EM  +CM +GM  +CS +GS  -CP -GP  -SC +SG
+@@ -3919,7 +3980,7 @@
+             sage: sage_cmd += 'e = 3*x+2*y+1\n'
+             sage: sage_cmd += 'e.ascii_dump()\n'
+             sage: from sage.tests.cmdline import test_executable
+-            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100);  # long time, indirect doctest
++            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest
+             sage: print err  # long time
+             size 3 1 3 2
+         """
+@@ -4813,7 +4874,7 @@
+             sage: sage_cmd += 'p = point(3*x+2*y)\n'
+             sage: sage_cmd += 'p.ascii_dump()\n'
+             sage: from sage.tests.cmdline import test_executable
+-            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100);  # long time, indirect doctest
++            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest
+             sage: print err  # long time
+             size 3 1 3 2 P (C)
+         """
+@@ -5114,7 +5175,7 @@
+             sage: sage_cmd += 'gs = Generator_System( point(3*x+2*y+1) )\n'
+             sage: sage_cmd += 'gs.ascii_dump()\n'
+             sage: from sage.tests.cmdline import test_executable
+-            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100);  # long time, indirect doctest
++            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest
+             sage: print err  # long time
+             topology NECESSARILY_CLOSED
+             1 x 2 SPARSE (sorted)
+@@ -5802,7 +5863,7 @@
+             sage: sage_cmd += 'e = (3*x+2*y+1 > 0)\n'
+             sage: sage_cmd += 'e.ascii_dump()\n'
+             sage: from sage.tests.cmdline import test_executable
+-            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100);  # long time, indirect doctest
++            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest
+             sage: print err  # long time
+             size 4 1 3 2 -1 > (NNC)
+         """
+@@ -6148,7 +6209,7 @@
+             sage: sage_cmd += 'cs = Constraint_System( 3*x > 2*y+1 )\n'
+             sage: sage_cmd += 'cs.ascii_dump()\n'
+             sage: from sage.tests.cmdline import test_executable
+-            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100);  # long time, indirect doctest
++            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest
+             sage: print err  # long time
+             topology NOT_NECESSARILY_CLOSED
+             1 x 2 SPARSE (sorted)
+@@ -6499,7 +6560,7 @@
+             sage: sage_cmd  = 'from sage.libs.ppl import Poly_Gen_Relation\n'
+             sage: sage_cmd += 'Poly_Gen_Relation.nothing().ascii_dump()\n'
+             sage: from sage.tests.cmdline import test_executable
+-            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100);  # long time, indirect doctest
++            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest
+             sage: print err  # long time
+             NOTHING
+         """
+@@ -6749,7 +6810,7 @@
+             sage: sage_cmd  = 'from sage.libs.ppl import Poly_Con_Relation\n'
+             sage: sage_cmd += 'Poly_Con_Relation.nothing().ascii_dump()\n'
+             sage: from sage.tests.cmdline import test_executable
+-            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100);  # long time, indirect doctest
++            sage: (out, err, ret) = test_executable(['sage', '-c', sage_cmd], timeout=100)  # long time, indirect doctest
+             sage: print err  # long time
+             NOTHING
+         """
diff --git a/sagemath.spec b/sagemath.spec
index b9fecb1..e38257d 100644
--- a/sagemath.spec
+++ b/sagemath.spec
@@ -186,6 +186,9 @@ Patch28:	%{name}-sympy.patch
 # https://bugzilla.redhat.com/show_bug.cgi?id=1091442
 Patch29:	%{name}-CVE-2012-4230.patch
 
+# Backport of cython-0.21.1 broke f20 build
+Patch30:	%{name}-cython-0.21.1.patch
+
 BuildRequires:	4ti2
 BuildRequires:	atlas-devel
 BuildRequires:	cddlib-tools
@@ -663,6 +666,7 @@ popd
 %patch27
 %patch28
 %patch29
+%patch30
 
 sed -e 's|@@SAGE_ROOT@@|%{SAGE_ROOT}|' \
     -e 's|@@SAGE_DOC@@|%{SAGE_DOC}|' \


More information about the scm-commits mailing list