Ticket #14685: trac_14685_bug_aorder_lazypowerseries.patch

File trac_14685_bug_aorder_lazypowerseries.patch, 2.5 KB (added by mhansen, 8 years ago)
  • sage/combinat/species/series.py

    # HG changeset patch
    # User Matthieu Dien <matthieu.dien@gmail.com>
    # Date 1370708355 -7200
    # Node ID 858e4d2fae458e1376789c3d88d3497b7d986630
    # Parent  799aad4a9c8ba9d9034353fca15a2f523483e87b
    #14685: error in the computing of the approximate order in LazyPowerSeries
    
    diff --git a/sage/combinat/species/series.py b/sage/combinat/species/series.py
    a b  
    606606            sage: a.refine_aorder()
    607607            sage: a.aorder
    608608            2
     609
     610        ::
     611
     612            sage: L = LazyPowerSeriesRing(QQ)
     613            sage: a = L([0,0,0,0,1])
     614            sage: a.aorder
     615            0
     616            sage: a.coefficient(4)
     617            1
     618            sage: a.aorder
     619            0
     620            sage: a.order
     621            Unknown series order
     622            sage: a.refine_aorder()
     623            sage: a.aorder
     624            4
     625            sage: a.order
     626            4
    609627        """
    610628        #If we already know the order, then we don't have
    611629        #to worry about the approximate order
     
    624642            c = self._stream
    625643            n = c.number_computed()
    626644
     645            while ao < n:
     646                if self._stream[ao] == 0:
     647                    self.aorder += 1
     648                    ao += 1
     649                else:
     650                    self.order = ao
     651                    break
    627652
    628             if ao == 0 and n > 0:
    629                 while ao < n:
    630                     if self._stream[ao] == 0:
    631                         self.aorder += 1
    632                         ao += 1
    633                     else:
    634                         self.order = ao
    635                         break
    636653
    637654            #Try to recognize the zero series
    638             if ao == n:
     655            if ao == n and n > 0:
    639656                #For non-constant series, we cannot do anything
    640657                if not c.is_constant():
    641658                    return
     
    643660                    self.aorder = inf
    644661                    self.order  = inf
    645662                    return
    646                
    647             if self.order == unk:
    648                 while ao < n:
    649                     if self._stream[ao] == 0:
    650                         self.aorder += 1
    651                         ao += 1
    652                     else:
    653                         self.order = ao
    654                         break
    655663
    656             # if ao < n:
    657             #     self.order = ao
    658            
    659    
    660664        if hasattr(self, '_reference') and self._reference is not None:
    661665            self._reference._copy(self)
    662666