#12173: Update FLINT to 2.3
---------------------------------------------------------------------+------
       Reporter:  mhansen                                            |         
Owner:  tbd                         
           Type:  enhancement                                        |        
Status:  needs_work                  
       Priority:  major                                              |     
Milestone:  sage-5.10                   
      Component:  packages: standard                                 |    
Resolution:                              
       Keywords:  flint spkg                                         |   Work 
issues:                              
Report Upstream:  N/A                                                |     
Reviewers:  John Cremona, Jeroen Demeyer
        Authors:  Mike Hansen, Fredrik Johansson, Jean-Pierre Flori  |     
Merged in:                              
   Dependencies:  sage-5.9.beta5                                     |      
Stopgaps:                              
---------------------------------------------------------------------+------

Comment (by jpflori):

 Replying to [comment:311 burcin]:
 > Here are some comments after reading
 attachment:trac_12173-fixes-v6.patch.
 >
 > I don't understand this hunk:
 >
 > {{{
 > diff --git a/sage/libs/flint/fmpz_poly.pyx
 b/sage/libs/flint/fmpz_poly.pyx
 > --- a/sage/libs/flint/fmpz_poly.pyx
 > +++ b/sage/libs/flint/fmpz_poly.pyx
 > @@ -53,7 +53,7 @@
 >          cdef long c
 >          cdef Integer w
 >          if PY_TYPE_CHECK(v, str):
 > -            if fmpz_poly_set_str(self.poly, v):
 > +            if not fmpz_poly_set_str(self.poly, v):
 >                  return
 >              else:
 >                  raise ValueError, "Unable to create Fmpz_poly from that
 string."
 > }}}
 Indeed, this looks wrong.
 This also shows this function does not seem to be well tested.
 >
 >
 > `nmod_poly_pow(..., 2)` should be used below instead of
 `nmod_poly_mul()`.
 >
 > {{{
 > diff --git a/sage/libs/flint/nmod_poly_linkage.pxi
 b/sage/libs/flint/nmod_poly_linkage.pxi
 > --- a/sage/libs/flint/nmod_poly_linkage.pxi
 > +++ b/sage/libs/flint/nmod_poly_linkage.pxi
 > @@ -496,7 +495,7 @@
 >      elif e == 1:
 >          nmod_poly_set(res, x)
 >      elif e == 2:
 > -        nmod_poly_sqr(res, x)
 > +        nmod_poly_mul(res, x, x)
 >      else:
 >          if res == x:
 >              nmod_poly_set(tmp, x)
 > @@ -510,7 +509,7 @@
 >              nmod_poly_set_coeff_ui(res, 0, 1)
 >          e = e >> 1
 >          while(e != 0):
 > -            nmod_poly_sqr(pow2, pow2)
 > +            nmod_poly_mul(pow2, pow2, pow2)
 >              if e % 2:
 >                  nmod_poly_mul(res, res, pow2)
 >              e = e >> 1
 > }}}
 sure, but I wouldn't say that's a critical issue.
 >
 > This seems to remove the fast exit path:
 >
 > {{{
 > diff --git a/sage/rings/fraction_field_FpT.pyx
 b/sage/rings/fraction_field_FpT.pyx
 > --- a/sage/rings/fraction_field_FpT.pyx
 > +++ b/sage/rings/fraction_field_FpT.pyx
 > @@ -688,26 +688,34 @@
 >          """
 >          if nmod_poly_degree(self._numer) == -1:
 >              return self
 > -        if not nmod_poly_sqrt_check(self._numer) or not
 nmod_poly_sqrt_check(self._denom):
 > -            return None
 > }}}
 >
 > Fredrik says that FLINT also does the same checks in `nmod_poly_sqrt()`,
 but some memory allocations are performed by the time we get to that
 point. If the input to this function is not a perfect square most of the
 time, then IMHO removing these checks will introduce a performance
 regression.
 I think the best place for such a function would be in FLINT itself.
 The problem is that if we plan on integrating this ticket without calling
 this to be implemented function (I'd prefer to go this way, let's not wait
 for another couple of monthes/years to merge this ticket), we should make
 sure to not forget to call it from Sage when it actually gets implemented
 in (a stable release of) FLINT, so we should surely open a follow-up
 ticket.
 >
 > In the same hunk as above:
 >
 > {{{
 > +            # Make denominator monic
 > +            a = nmod_poly_leading(denom)
 > +            if a != 1:
 > +                a = mod_inverse_int(a, self.p)
 > +                nmod_poly_scalar_mul_nmod(numer, numer, a)
 > +                nmod_poly_scalar_mul_nmod(denom, denom, a)
 > +            # Choose numerator with smaller leading coefficient
 > +            a = nmod_poly_leading(numer)
 > +            if a > self.p - a:
 > +                nmod_poly_neg(numer, numer)
 > }}}
 >
 > Is this necessary? If the input is normalized, the denominator will have
 1 as a leading coefficient anyway. If we really want to normalize, the
 `normalize()` method in the same file should be used.
 Sure, I'll have  alook at the code.
 >
 >
 > `_nmod_poly_set_coeff_ui()` was removed from FLINT2. Removing the
 underscore introduces a potential branch for each function call. Shall we
 implement our own underscore version?
 >
 I'd say no, if that's useful, it should be in FLINT.
 > {{{
 > diff --git a/sage/rings/polynomial/polynomial_zmod_flint.pyx
 b/sage/rings/polynomial/polynomial_zmod_flint.pyx
 > --- a/sage/rings/polynomial/polynomial_zmod_flint.pyx
 > +++ b/sage/rings/polynomial/polynomial_zmod_flint.pyx
 > @@ -157,17 +170,47 @@
 > <snip>
 > +        sig_on()
 >          for i from 0 <= i < length:
 > -            _nmod_poly_set_coeff_ui(&self.x, i, l_in[i])
 > -        # we need to set the length manually, we used
 _nmod_poly_set_coeff_ui
 > -        self.x.length = length
 > +            nmod_poly_set_coeff_ui(&self.x, i, l_in[i])
 > +        sig_off()
 > +        return 0
 > }}}

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/12173#comment:312>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to