diff options
-rw-r--r-- | .SRCINFO | 6 | ||||
-rw-r--r-- | PKGBUILD | 16 | ||||
-rw-r--r-- | sagemath-matplotlib2.patch | 253 | ||||
-rw-r--r-- | sagemath-singular-4.1.0.p4.patch | 94 |
4 files changed, 106 insertions, 263 deletions
@@ -1,6 +1,6 @@ pkgbase = sagemath-git pkgdesc = Open Source Mathematics Software, free alternative to Magma, Maple, Mathematica, and Matlab - pkgver = 8.2.beta3.r0.g56a4bc7e76 + pkgver = 8.2.beta5.r0.ge6cae6d88d pkgrel = 1 url = http://www.sagemath.org arch = x86_64 @@ -103,9 +103,9 @@ pkgbase = sagemath-git source = pari-stackwarn.patch source = sagemath-detect-igraph.patch source = sagemath-networkx2.patch - source = sagemath-matplotlib2.patch source = sagemath-scipy-1.0.patch source = sagemath-lrs.patch + source = sagemath-singular-4.1.0.p4.patch sha256sums = SKIP sha256sums = 39b76a189365464998cab9355d177581bc2b15dff10858f316faa85f2efa0426 sha256sums = c41ae665499c6cd775d40bbe178f8786830b0931ee26bf11ee02f7d83bcc8107 @@ -119,9 +119,9 @@ pkgbase = sagemath-git sha256sums = e4a2f1de73dc3a6deedc1a05d716facd94afc9fe98239c4300e1b67375f95fc1 sha256sums = 28d7789b8d777922ab8871ca43b6afab751428cae875c0343d3962e6a2030b88 sha256sums = 1024f3a6a9a1a6ae96d9962bb7d1f5842f4a4a5ff5098afad81a60188b7d5160 - sha256sums = b9ab2bb5f381ea425e8763b81b8b3a108a3951c594fb1f37f7df921e7c77e26d sha256sums = 17397b8e1843b013ef5d2e083369109f0719651edd8ef0c8493cb49e2bc4324a sha256sums = c0f65534a845ba802de6196229159fe67fcc3f72f0cb1ce57d4ae5c9fe10282c + sha256sums = cc679321c2968d5e74b0ec060979c74019df2995857906bdd1397695b1f24c5c pkgname = sagemath-git optdepends = cython2: to compile cython code @@ -8,7 +8,7 @@ pkgbase=sagemath-git pkgname=(sagemath-git sagemath-jupyter-git) -pkgver=8.2.beta3.r0.g56a4bc7e76 +pkgver=8.2.beta5.r0.ge6cae6d88d pkgrel=1 pkgdesc="Open Source Mathematics Software, free alternative to Magma, Maple, Mathematica, and Matlab" arch=(x86_64) @@ -37,7 +37,8 @@ makedepends=(cython2 boost ratpoints symmetrica python2-jinja coin-or-cbc libhom source=(git://git.sagemath.org/sage.git#branch=develop sagemath-env.patch package.patch latte-count.patch jupyter-path.patch sagemath-python3-notebook.patch test-optional.patch r-no-readline.patch fes02.patch sagemath-threejs.patch pari-stackwarn.patch - sagemath-detect-igraph.patch sagemath-networkx2.patch sagemath-matplotlib2.patch sagemath-scipy-1.0.patch sagemath-lrs.patch) + sagemath-detect-igraph.patch sagemath-networkx2.patch sagemath-scipy-1.0.patch sagemath-lrs.patch + sagemath-singular-4.1.0.p4.patch) sha256sums=('SKIP' '39b76a189365464998cab9355d177581bc2b15dff10858f316faa85f2efa0426' 'c41ae665499c6cd775d40bbe178f8786830b0931ee26bf11ee02f7d83bcc8107' @@ -51,9 +52,9 @@ sha256sums=('SKIP' 'e4a2f1de73dc3a6deedc1a05d716facd94afc9fe98239c4300e1b67375f95fc1' '28d7789b8d777922ab8871ca43b6afab751428cae875c0343d3962e6a2030b88' '1024f3a6a9a1a6ae96d9962bb7d1f5842f4a4a5ff5098afad81a60188b7d5160' - 'b9ab2bb5f381ea425e8763b81b8b3a108a3951c594fb1f37f7df921e7c77e26d' '17397b8e1843b013ef5d2e083369109f0719651edd8ef0c8493cb49e2bc4324a' - 'c0f65534a845ba802de6196229159fe67fcc3f72f0cb1ce57d4ae5c9fe10282c') + 'c0f65534a845ba802de6196229159fe67fcc3f72f0cb1ce57d4ae5c9fe10282c' + 'cc679321c2968d5e74b0ec060979c74019df2995857906bdd1397695b1f24c5c') pkgver() { cd sage @@ -93,15 +94,16 @@ prepare(){ patch -p1 -i ../pari-stackwarn.patch # remove deprecated scipy parameters patch -p1 -i ../sagemath-scipy-1.0.patch +# fix build with Singular 4.1.0.p4 + patch -p1 -i ../sagemath-singular-4.1.0.p4.patch # Upstream patches # fix build against libfes 0.2 http://trac.sagemath.org/ticket/15209 patch -p1 -i ../fes02.patch -# port away from deprecated and removed functions in matplotlib 2 https://trac.sagemath.org/ticket/23696 - patch -p1 -i ../sagemath-matplotlib2.patch # use python2 - sed -e 's|#!/usr/bin/env python|#!/usr/bin/env python2|' -e 's|exec python|exec python2|' -i src/bin/* + sed -e 's|#!/usr/bin/env sage-python23|#!/usr/bin/env python2|' -e 's|\<#!/usr/bin/env sage-python\>|#!/usr/bin/env python2|' \ + -e 's|\<exec python\>|exec python2|' -i src/bin/* sed -e 's|cython {OPT}|cython2 {OPT}|' -e 's|python setup.py|python2 setup.py|' -i src/sage/misc/cython.py sed -e 's|exec ipython|exec ipython2|' -e 's|cygdb|cygdb2|g' -i src/bin/sage sed -e "s|'cython'|'cython2'|" -i src/bin/sage-cython diff --git a/sagemath-matplotlib2.patch b/sagemath-matplotlib2.patch deleted file mode 100644 index e773d82d8049..000000000000 --- a/sagemath-matplotlib2.patch +++ /dev/null @@ -1,253 +0,0 @@ -diff --git a/src/sage/all.py b/src/sage/all.py -index 300f519..19bc8ec 100644 ---- a/src/sage/all.py -+++ b/src/sage/all.py -@@ -313,8 +313,6 @@ warnings.filters.remove(('ignore', None, DeprecationWarning, None, 0)) - # Ignore all deprecations from IPython etc. - warnings.filterwarnings('ignore', - module='.*(IPython|ipykernel|jupyter_client|jupyter_core|nbformat|notebook|ipywidgets|storemagic)') --# Ignore warnings due to matplotlib-1.5 together with numpy-1.13 --warnings.filterwarnings('ignore', module='matplotlib[.]contour|numpy[.]ma[.]core') - # However, be sure to keep OUR deprecation warnings - warnings.filterwarnings('default', - '[\s\S]*See http://trac.sagemath.org/[0-9]* for details.') -diff --git a/src/sage/plot/arrow.py b/src/sage/plot/arrow.py -index 98d6224..fbce029 100644 ---- a/src/sage/plot/arrow.py -+++ b/src/sage/plot/arrow.py -@@ -147,8 +147,8 @@ class CurveArrow(GraphicPrimitive): - bpath = Path(self.vertices, self.codes) - p = FancyArrowPatch(path=bpath, - lw=width, arrowstyle='%s,head_width=%s,head_length=%s' % (style, head_width, head_length), -- fc=color, ec=color) -- p.set_linestyle(get_matplotlib_linestyle(options['linestyle'], return_type='long')) -+ fc=color, ec=color, -+ linestyle=get_matplotlib_linestyle(options['linestyle'], return_type='long')) - p.set_zorder(options['zorder']) - p.set_label(options['legend_label']) - subplot.add_patch(p) -@@ -336,7 +336,7 @@ class Arrow(GraphicPrimitive): - this into account. See :trac:`12836`:: - - sage: fig = Graphics().matplotlib() -- sage: sp = fig.add_subplot(1,1,1) -+ sage: sp = fig.add_subplot(1,1,1, label='axis1') - sage: a = arrow((0,0), (1,1)) - sage: b = arrow((0,0), (1,1), width=20) - sage: p1 = a[0]._render_on_subplot(sp) -@@ -358,7 +358,7 @@ class Arrow(GraphicPrimitive): - sage: a.save(filename=filename) - sage: with open(filename, 'r') as f: - ....: contents = f.read().replace('\n', ' ') -- sage: two_stroke_pattern = r'setdash.*stroke.*stroke.*setdash' -+ sage: two_stroke_pattern = r'setdash.*setdash.*stroke.*stroke.*setdash' - sage: import re - sage: two_stroke_re = re.compile(two_stroke_pattern) - sage: two_stroke_re.search(contents) is None -@@ -383,8 +383,8 @@ class Arrow(GraphicPrimitive): - lw=width, - arrowstyle='%s,head_width=%s,head_length=%s' % (style, head_width, head_length), - shrinkA=arrowshorten_end, shrinkB=arrowshorten_end, -- fc=color, ec=color) -- p.set_linestyle(get_matplotlib_linestyle(options['linestyle'], return_type='long')) -+ fc=color, ec=color, -+ linestyle=get_matplotlib_linestyle(options['linestyle'], return_type='long')) - p.set_zorder(options['zorder']) - p.set_label(options['legend_label']) - -@@ -437,7 +437,7 @@ class Arrow(GraphicPrimitive): - pe1.draw_path(renderer, gc, tpath, affine, rgbFace) - - pe1 = ConditionalStroke(CheckNthSubPath(p, 0), [pe.Stroke()]) -- pe2 = ConditionalStroke(CheckNthSubPath(p, 1), [pe.Stroke(linestyle="solid")]) -+ pe2 = ConditionalStroke(CheckNthSubPath(p, 1), [pe.Stroke(dashes={'dash_offset': 0, 'dash_list': None})]) - p.set_path_effects([pe1, pe2]) - - subplot.add_patch(p) -diff --git a/src/sage/plot/contour_plot.py b/src/sage/plot/contour_plot.py -index 76077e3..efc1f2b 100644 ---- a/src/sage/plot/contour_plot.py -+++ b/src/sage/plot/contour_plot.py -@@ -178,12 +178,10 @@ class ContourPlot(GraphicPrimitive): - if fill: - if contours is None: - CSF = subplot.contourf(self.xy_data_array, cmap=cmap, -- extent=(x0, x1, y0, y1), -- label=options['legend_label']) -+ extent=(x0, x1, y0, y1)) - else: - CSF = subplot.contourf(self.xy_data_array, contours, cmap=cmap, -- extent=(x0, x1, y0, y1), extend='both', -- label=options['legend_label']) -+ extent=(x0, x1, y0, y1), extend='both') - - linewidths = options.get('linewidths', None) - if isinstance(linewidths, (int, Integer)): -@@ -200,13 +198,11 @@ class ContourPlot(GraphicPrimitive): - if contours is None: - CS = subplot.contour(self.xy_data_array, cmap=cmap, - extent=(x0, x1, y0, y1), -- linewidths=linewidths, linestyles=linestyles, -- label=options['legend_label']) -+ linewidths=linewidths, linestyles=linestyles) - else: - CS = subplot.contour(self.xy_data_array, contours, cmap=cmap, - extent=(x0, x1, y0, y1), -- linewidths=linewidths, linestyles=linestyles, -- label=options['legend_label']) -+ linewidths=linewidths, linestyles=linestyles) - if options.get('labels', False): - label_options = options['label_options'] - label_options['fontsize'] = int(label_options['fontsize']) -diff --git a/src/sage/plot/plot.py b/src/sage/plot/plot.py -index aa82eda..03a0f3a 100644 ---- a/src/sage/plot/plot.py -+++ b/src/sage/plot/plot.py -@@ -478,7 +478,7 @@ We test that ``imshow`` works as well, verifying that - - :: - -- sage: plt.imshow([[(0,0,0)]]) -+ sage: plt.imshow([[(0.0,0.0,0.0)]]) - <matplotlib.image.AxesImage object at ...> - sage: plt.savefig(os.path.join(SAGE_TMP, 'foo.png')) - -@@ -2908,11 +2908,14 @@ def list_plot(data, plotjoined=False, **kwargs): - If ``plotjoined`` is ``False`` then the axis that is in log scale - must have all points strictly positive. For instance, the following - plot will show no points in the figure since the points in the -- horizontal axis starts from `(0,1)`. -+ horizontal axis starts from `(0,1)`. Further, matplotlib will display -+ a user warning. - - :: - - sage: list_plot(yl, scale='loglog') # both axes are log -+ doctest:warning -+ ... - Graphics object consisting of 1 graphics primitive - - Instead this will work. We drop the point `(0,1)`.:: -@@ -3288,12 +3291,15 @@ def list_plot_semilogy(data, plotjoined=False, **kwds): - - If ``plotjoined`` is ``False`` then the vertical axis must have all - points strictly positive. Otherwise the plot will come up empty. -- For instance the following plot contains a point at `(1,0)`. -+ For instance the following plot contains a point at `(1,0)`. Further, -+ matplotlib will display a user warning. - - :: - - sage: xl = [2**k for k in range(12)]; yl = range(len(xl)) - sage: list_plot_semilogy(list(zip(xl,yl))) # plot empty due to (1,0) -+ doctest:warning -+ ... - Graphics object consisting of 1 graphics primitive - - We remove `(1,0)` to fix this.:: -diff --git a/src/sage/plot/plot3d/list_plot3d.py b/src/sage/plot/plot3d/list_plot3d.py -index c9f22dd..be87ff2 100644 ---- a/src/sage/plot/plot3d/list_plot3d.py -+++ b/src/sage/plot/plot3d/list_plot3d.py -@@ -29,21 +29,20 @@ def list_plot3d(v, interpolation_type='default', texture="automatic", point_list - - OPTIONAL KEYWORDS: - -- - ``interpolation_type`` - 'linear', 'nn' (natural neighbor), 'spline' -+ - ``interpolation_type`` - 'linear', 'clough' (CloughTocher2D), 'spline' - - 'linear' will perform linear interpolation - -- The option 'nn' An interpolation method for multivariate data in a -- Delaunay triangulation. The value for an interpolation point is -- estimated using weighted values of the closest surrounding points in -- the triangulation. These points, the natural neighbors, are the ones -- the interpolation point would connect to if inserted into the -- triangulation. -+ The option 'clough' will interpolate by using a piecewise cubic interpolating -+ Bezier polynomial on each triangle, using a Clough-Tocher scheme. -+ The interpolant is guaranteed to be continuously differentiable. -+ The gradients of the interpolant are chosen so that the curvature of the -+ interpolating surface is approximatively minimized. - - The option 'spline' interpolates using a bivariate B-spline. - - When v is a matrix the default is to use linear interpolation, when -- v is a list of points the default is nearest neighbor. -+ v is a list of points the default is 'clough'. - - - ``degree`` - an integer between 1 and 5, controls the degree of spline - used for spline interpolation. For data that is highly oscillatory -@@ -320,18 +319,18 @@ def list_plot3d_tuples(v, interpolation_type, texture, **kwds): - - OPTIONAL KEYWORDS: - -- - ``interpolation_type`` - 'linear', 'nn' (natural neighbor), 'spline' -+ - ``interpolation_type`` - 'linear', 'clough' (CloughTocher2D), 'spline' - - 'linear' will perform linear interpolation - -- The option 'nn' will interpolate by using natural neighbors. The -- value for an interpolation point is estimated using weighted values -- of the closest surrounding points in the triangulation. -+ The option 'clough' will interpolate by using a piecewise cubic interpolating -+ Bezier polynomial on each triangle, using a Clough-Tocher scheme. -+ The interpolant is guaranteed to be continuously differentiable. - - The option 'spline' interpolates using a bivariate B-spline. - - When v is a matrix the default is to use linear interpolation, when -- v is a list of points the default is nearest neighbor. -+ v is a list of points the default is 'clough'. - - - ``degree`` - an integer between 1 and 5, controls the degree of spline - used for spline interpolation. For data that is highly oscillatory -@@ -373,7 +372,7 @@ def list_plot3d_tuples(v, interpolation_type, texture, **kwds): - sage: list_plot3d([(1, 2, 3), (0, 1, 3), (2, 1, 4), (1, 0, -2)], texture='yellow', num_points=50) - Graphics3d Object - """ -- from matplotlib import tri, delaunay -+ from matplotlib import tri - import numpy - import scipy - from random import random -@@ -439,19 +438,15 @@ def list_plot3d_tuples(v, interpolation_type, texture, **kwds): - G._set_extra_kwds(kwds) - return G - -- if interpolation_type == 'nn' or interpolation_type =='default': -+ if interpolation_type == 'clough' or interpolation_type =='default': - -- T=delaunay.Triangulation(x,y) -- f=T.nn_interpolator(z) -- f.default_value=0.0 -- j=numpy.complex(0,1) -- vals=f[ymin:ymax:j*num_points,xmin:xmax:j*num_points] -+ points=[[x[i],y[i]] for i in range(len(x))] -+ j = numpy.complex(0, 1) -+ f = interpolate.CloughTocher2DInterpolator(points,z) - from .parametric_surface import ParametricSurface -- def g(x,y): -- i=round( (x-xmin)/(xmax-xmin)*(num_points-1) ) -- j=round( (y-ymin)/(ymax-ymin)*(num_points-1) ) -- z=vals[int(j),int(i)] -- return (x,y,z) -+ def g(x, y): -+ z = f([x, y]) -+ return (x, y, z) - G = ParametricSurface(g, (list(numpy.r_[xmin:xmax:num_points*j]), list(numpy.r_[ymin:ymax:num_points*j])), texture=texture, **kwds) - G._set_extra_kwds(kwds) - return G -diff --git a/src/sage/probability/probability_distribution.pyx b/src/sage/probability/probability_distribution.pyx -index 3ce4642..f66cd89 100644 ---- a/src/sage/probability/probability_distribution.pyx -+++ b/src/sage/probability/probability_distribution.pyx -@@ -118,7 +118,7 @@ cdef class ProbabilityDistribution: - sage: P = [0.3, 0.4, 0.3] - sage: X = GeneralDiscreteDistribution(P) - sage: h, b = X.generate_histogram_data(bins = 10) -- sage: h -+ sage: h # rel tol 1e-08 - [1.6299999999999999, - 0.0, - 0.0, diff --git a/sagemath-singular-4.1.0.p4.patch b/sagemath-singular-4.1.0.p4.patch new file mode 100644 index 000000000000..3c925458521b --- /dev/null +++ b/sagemath-singular-4.1.0.p4.patch @@ -0,0 +1,94 @@ +diff --git a/src/sage/libs/singular/decl.pxd b/src/sage/libs/singular/decl.pxd +index 676544ab1e..5c8639d362 100644 +--- a/src/sage/libs/singular/decl.pxd ++++ b/src/sage/libs/singular/decl.pxd +@@ -188,7 +188,7 @@ cdef extern from "singular/Singular/libsingular.h": + + int n_NumberOfParameters(const n_Procs_s* r) + +- ctypedef struct poly "polyrec": ++ ctypedef struct poly "spolyrec": + poly *next + number *coef + unsigned long exp[1] +@@ -650,7 +650,7 @@ cdef extern from "singular/Singular/libsingular.h": + + # divide monomial p by monomial q, p,q const + +- poly *pDivide(poly *p,poly *q) ++ poly *pMDivide(poly *p,poly *q) + + # return the i-th power of p; p destroyed, requires global ring + +diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx +index 089524d6b4..ce6d58fc6f 100644 +--- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx ++++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx +@@ -188,8 +188,8 @@ from sage.libs.singular.decl cimport ( + n_IsUnit, n_Invers, + p_ISet, rChangeCurrRing, p_Copy, p_Init, p_SetCoeff, p_Setm, p_SetExp, p_Add_q, + p_NSet, p_GetCoeff, p_Delete, p_GetExp, pNext, rRingVar, omAlloc0, omStrDup, +- omFree, pDivide, p_SetCoeff0, n_Init, p_DivisibleBy, pLcm, p_LmDivisibleBy, +- pDivide, p_IsConstant, p_ExpVectorEqual, p_String, p_LmInit, n_Copy, ++ omFree, pMDivide, p_SetCoeff0, n_Init, p_DivisibleBy, pLcm, p_LmDivisibleBy, ++ pMDivide, p_IsConstant, p_ExpVectorEqual, p_String, p_LmInit, n_Copy, + p_IsUnit, p_Series, p_Head, idInit, fast_map_common_subexp, id_Delete, + p_IsHomogeneous, p_Homogen, p_Totaldegree,pLDeg1_Totaldegree, singclap_pdivide, singclap_factorize, + idLift, IDELEMS, On, Off, SW_USE_CHINREM_GCD, SW_USE_EZGCD, +@@ -1690,8 +1695,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_generic): + if not g._poly: + raise ZeroDivisionError + +- if r!=currRing: rChangeCurrRing(r) # pDivide +- res = pDivide(f._poly, g._poly) ++ if r!=currRing: rChangeCurrRing(r) # pMDivide ++ res = pMDivide(f._poly, g._poly) + if coeff: + if r.cf.type == n_unknown or r.cf.cfDivBy(p_GetCoeff(f._poly, r), p_GetCoeff(g._poly, r), r.cf): + n = r.cf.cfDiv( p_GetCoeff(f._poly, r) , p_GetCoeff(g._poly, r), r.cf) +@@ -1850,8 +1855,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_generic): + and (<MPolynomial_libsingular>g) \ + and g.parent() is self \ + and p_LmDivisibleBy((<MPolynomial_libsingular>g)._poly, m, r): +- if r!=currRing: rChangeCurrRing(r) # pDivide +- flt = pDivide(f._poly, (<MPolynomial_libsingular>g)._poly) ++ if r!=currRing: rChangeCurrRing(r) # pMDivide ++ flt = pMDivide(f._poly, (<MPolynomial_libsingular>g)._poly) + #p_SetCoeff(flt, n_Div( p_GetCoeff(f._poly, r) , p_GetCoeff((<MPolynomial_libsingular>g)._poly, r), r), r) + p_SetCoeff(flt, n_Init(1, r), r) + return new_MP(self,flt), g +@@ -4046,10 +4051,10 @@ cdef class MPolynomial_libsingular(MPolynomial): + if _right.is_monomial(): + p = _self._poly + quo = p_ISet(0,r) +- if r != currRing: rChangeCurrRing(r) # pDivide ++ if r != currRing: rChangeCurrRing(r) # pMDivide + while p: + if p_DivisibleBy(_right._poly, p, r): +- temp = pDivide(p, _right._poly) ++ temp = pMDivide(p, _right._poly) + p_SetCoeff0(temp, n_Copy(p_GetCoeff(p, r), r), r) + quo = p_Add_q(quo, temp, r) + p = pNext(p) +diff --git a/src/sage/rings/polynomial/plural.pyx b/src/sage/rings/polynomial/plural.pyx +index 3b45a38419..c0227fd364 100644 +--- a/src/sage/rings/polynomial/plural.pyx ++++ b/src/sage/rings/polynomial/plural.pyx +@@ -999,7 +999,7 @@ cdef class NCPolynomialRing_plural(Ring): + if not g._poly: + raise ZeroDivisionError + +- res = pDivide(f._poly,g._poly) ++ res = pMDivide(f._poly,g._poly) + if coeff: + if (r.cf.type == n_unknown) or r.cf.cfDivBy(p_GetCoeff(f._poly, r), p_GetCoeff(g._poly, r), r.cf): + n = r.cf.cfDiv( p_GetCoeff(f._poly, r) , p_GetCoeff(g._poly, r), r.cf) +@@ -1194,7 +1194,7 @@ cdef class NCPolynomialRing_plural(Ring): + if isinstance(g, NCPolynomial_plural) \ + and (<NCPolynomial_plural>g) \ + and p_LmDivisibleBy((<NCPolynomial_plural>g)._poly, m, r): +- flt = pDivide(f._poly, (<NCPolynomial_plural>g)._poly) ++ flt = pMDivide(f._poly, (<NCPolynomial_plural>g)._poly) + #p_SetCoeff(flt, n_Div( p_GetCoeff(f._poly, r) , p_GetCoeff((<NCPolynomial_plural>g)._poly, r), r), r) + p_SetCoeff(flt, n_Init(1, r), r) + return new_NCP(self,flt), g |