Revision: 8388 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8388&view=rev Author: efiring Date: 2010-06-06 20:34:09 +0000 (Sun, 06 Jun 2010)
Log Message: ----------- [3009273] and [2875065] update dateutil to 1.5 Modified Paths: -------------- trunk/matplotlib/lib/dateutil/NEWS trunk/matplotlib/lib/dateutil/__init__.py trunk/matplotlib/lib/dateutil/easter.py trunk/matplotlib/lib/dateutil/parser.py trunk/matplotlib/lib/dateutil/relativedelta.py trunk/matplotlib/lib/dateutil/rrule.py trunk/matplotlib/lib/dateutil/tz.py Added Paths: ----------- trunk/matplotlib/lib/dateutil/zoneinfo/zoneinfo-2010g.tar.gz Removed Paths: ------------- trunk/matplotlib/lib/dateutil/zoneinfo/zoneinfo-2008e.tar.gz Modified: trunk/matplotlib/lib/dateutil/NEWS =================================================================== --- trunk/matplotlib/lib/dateutil/NEWS 2010-06-06 18:58:43 UTC (rev 8387) +++ trunk/matplotlib/lib/dateutil/NEWS 2010-06-06 20:34:09 UTC (rev 8388) @@ -1,3 +1,19 @@ + +Version 1.5 +----------- + +- As reported by Mathieu Bridon, rrules were matching the bysecond rules + incorrectly against byminute in some circumstances when the SECONDLY + frequency was in use, due to a copy & paste bug. The problem has been + unittested and corrected. + +- Adam Ryan reported a problem in the relativedelta implementation which + affected the yearday parameter in the month of January specifically. + This has been unittested and fixed. + +- Updated timezone information. + + Version 1.4.1 ------------- Modified: trunk/matplotlib/lib/dateutil/__init__.py =================================================================== --- trunk/matplotlib/lib/dateutil/__init__.py 2010-06-06 18:58:43 UTC (rev 8387) +++ trunk/matplotlib/lib/dateutil/__init__.py 2010-06-06 20:34:09 UTC (rev 8388) @@ -1,9 +1,9 @@ """ -Copyright (c) 2003-2005 Gustavo Niemeyer <gust...@niemeyer.net> +Copyright (c) 2003-2010 Gustavo Niemeyer <gust...@niemeyer.net> This module offers extensions to the standard python 2.3+ datetime module. """ __author__ = "Gustavo Niemeyer <gust...@niemeyer.net>" __license__ = "PSF License" -__version__ = "1.2-mpl" +__version__ = "1.5" Modified: trunk/matplotlib/lib/dateutil/easter.py =================================================================== --- trunk/matplotlib/lib/dateutil/easter.py 2010-06-06 18:58:43 UTC (rev 8387) +++ trunk/matplotlib/lib/dateutil/easter.py 2010-06-06 20:34:09 UTC (rev 8388) @@ -1,5 +1,5 @@ """ -Copyright (c) 2003-2005 Gustavo Niemeyer <gust...@niemeyer.net> +Copyright (c) 2003-2007 Gustavo Niemeyer <gust...@niemeyer.net> This module offers extensions to the standard python 2.3+ datetime module. @@ -70,23 +70,23 @@ if method < 3: # Old method i = (19*g+15)%30 - j = (y+y/4+i)%7 + j = (y+y//4+i)%7 if method == 2: # Extra dates to convert Julian to Gregorian date e = 10 if y > 1600: - e = e+y/100-16-(y/100-16)/4 + e = e+y//100-16-(y//100-16)//4 else: # New method - c = y/100 - h = (c-c/4-(8*c+13)/25+19*g+15)%30 - i = h-(h/28)*(1-(h/28)*(29/(h+1))*((21-g)/11)) - j = (y+y/4+i+2-c+c/4)%7 + c = y//100 + h = (c-c//4-(8*c+13)//25+19*g+15)%30 + i = h-(h//28)*(1-(h//28)*(29//(h+1))*((21-g)//11)) + j = (y+y//4+i+2-c+c//4)%7 # p can be from -6 to 56 corresponding to dates 22 March to 23 May # (later dates apply to method 2, although 23 May never actually occurs) p = i-j+e - d = 1+(p+27+(p+6)/40)%31 - m = 3+(p+26)/30 - return datetime.date(y,m,d) + d = 1+(p+27+(p+6)//40)%31 + m = 3+(p+26)//30 + return datetime.date(int(y),int(m),int(d)) Modified: trunk/matplotlib/lib/dateutil/parser.py =================================================================== --- trunk/matplotlib/lib/dateutil/parser.py 2010-06-06 18:58:43 UTC (rev 8387) +++ trunk/matplotlib/lib/dateutil/parser.py 2010-06-06 20:34:09 UTC (rev 8388) @@ -1,6 +1,6 @@ # -*- coding:iso-8859-1 -*- """ -Copyright (c) 2003-2005 Gustavo Niemeyer <gust...@niemeyer.net> +Copyright (c) 2003-2007 Gustavo Niemeyer <gust...@niemeyer.net> This module offers extensions to the standard python 2.3+ datetime module. @@ -8,17 +8,24 @@ __author__ = "Gustavo Niemeyer <gust...@niemeyer.net>" __license__ = "PSF License" -import os.path +import datetime import string +import time import sys -import time +import os -import datetime +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + import relativedelta import tz + __all__ = ["parse", "parserinfo"] + # Some pointers: # # http://www.cl.cam.ac.uk/~mgk25/iso-time.html @@ -28,12 +35,9 @@ # http://search.cpan.org/author/MUIR/Time-modules-2003.0211/lib/Time/ParseDate.pm # http://stein.cshl.org/jade/distrib/docs/java.text.SimpleDateFormat.html -try: - from cStringIO import StringIO -except ImportError: - from StringIO import StringIO -class _timelex: +class _timelex(object): + def __init__(self, instream): if isinstance(instream, basestring): instream = StringIO(instream) @@ -139,6 +143,7 @@ return list(cls(s)) split = classmethod(split) + class _resultbase(object): def __init__(self): @@ -156,8 +161,9 @@ def __repr__(self): return self._repr(self.__class__.__name__) -class parserinfo: +class parserinfo(object): + # m from a.m/p.m, t from ISO T separator JUMP = [" ", ".", ",", ";", "-", "/", "'", "at", "on", "and", "ad", "m", "t", "of", @@ -204,7 +210,7 @@ self.yearfirst = yearfirst self._year = time.localtime().tm_year - self._century = self._year/100*100 + self._century = self._year//100*100 def _convert(self, lst): dct = {} @@ -281,15 +287,10 @@ return True -class parser: +class parser(object): - def __init__(self, info=parserinfo): - if issubclass(info, parserinfo): - self.info = parserinfo() - elif isinstance(info, parserinfo): - self.info = info - else: - raise TypeError, "Unsupported parserinfo type" + def __init__(self, info=None): + self.info = info or parserinfo() def parse(self, timestr, default=None, ignoretz=False, tzinfos=None, @@ -360,9 +361,11 @@ # Check if it's a number try: - value = float(l[i]) + value_repr = l[i] + value = float(value_repr) except ValueError: value = None + if value is not None: # Token is a number len_li = len(l[i]) @@ -386,10 +389,7 @@ # 19990101T235959[.59] res.hour = int(s[:2]) res.minute = int(s[2:4]) - value = float(s[4:]) - res.second = int(value) - if value%1: - res.microsecond = int(1000000*(value%1)) + res.second, res.microsecond = _parsems(s[4:]) elif len_li == 8: # YYYYMMDD s = l[i-1] @@ -423,15 +423,15 @@ if value%1: res.second = int(60*(value%1)) elif idx == 2: - res.second = int(value) - if value%1: - res.microsecond = int(1000000*(value%1)) + res.second, res.microsecond = \ + _parsems(value_repr) i += 1 if i >= len_l or idx == 2: break # 12h00 try: - value = float(l[i]) + value_repr = l[i] + value = float(value_repr) except ValueError: break else: @@ -451,10 +451,7 @@ res.second = int(60*(value%1)) i += 1 if i < len_l and l[i] == ':': - value = float(l[i+1]) - res.second = int(value) - if value%1: - res.microsecond = int(1000000*(value%1)) + res.second, res.microsecond = _parsems(l[i+1]) i += 2 elif i < len_l and l[i] in ('-', '/', '.'): sep = l[i] @@ -699,8 +696,9 @@ else: return DEFAULTPARSER.parse(timestr, **kwargs) -class _tzparser: +class _tzparser(object): + class _result(_resultbase): __slots__ = ["stdabbr", "stdoffset", "dstabbr", "dstoffset", @@ -743,6 +741,8 @@ if (i < len_l and (l[i] in ('+', '-') or l[i][0] in "0123456789")): if l[i] in ('+', '-'): + # Yes, that's right. See the TZ variable + # documentation. signal = (1,-1)[l[i] == '+'] i += 1 else: @@ -865,11 +865,22 @@ except (IndexError, ValueError, AssertionError): return None - + return res + DEFAULTTZPARSER = _tzparser() def _parsetz(tzstr): return DEFAULTTZPARSER.parse(tzstr) + +def _parsems(value): + """Parse a I[.F] seconds value into (seconds, microseconds).""" + if "." not in value: + return int(value), 0 + else: + i, f = value.split(".") + return int(i), int(f.ljust(6, "0")[:6]) + + # vim:ts=4:sw=4:et Modified: trunk/matplotlib/lib/dateutil/relativedelta.py =================================================================== --- trunk/matplotlib/lib/dateutil/relativedelta.py 2010-06-06 18:58:43 UTC (rev 8387) +++ trunk/matplotlib/lib/dateutil/relativedelta.py 2010-06-06 20:34:09 UTC (rev 8388) @@ -1,5 +1,5 @@ """ -Copyright (c) 2003-2005 Gustavo Niemeyer <gust...@niemeyer.net> +Copyright (c) 2003-2010 Gustavo Niemeyer <gust...@niemeyer.net> This module offers extensions to the standard python 2.3+ datetime module. @@ -190,7 +190,7 @@ if yday <= ydays: self.month = idx+1 if idx == 0: - self.day = ydays + self.day = yday else: self.day = yday-ydayidx[idx-1] break @@ -201,27 +201,27 @@ def _fix(self): if abs(self.microseconds) > 999999: - s = self.microseconds/abs(self.microseconds) + s = self.microseconds//abs(self.microseconds) div, mod = divmod(self.microseconds*s, 1000000) self.microseconds = mod*s self.seconds += div*s if abs(self.seconds) > 59: - s = self.seconds/abs(self.seconds) + s = self.seconds//abs(self.seconds) div, mod = divmod(self.seconds*s, 60) self.seconds = mod*s self.minutes += div*s if abs(self.minutes) > 59: - s = self.minutes/abs(self.minutes) + s = self.minutes//abs(self.minutes) div, mod = divmod(self.minutes*s, 60) self.minutes = mod*s self.hours += div*s if abs(self.hours) > 23: - s = self.hours/abs(self.hours) + s = self.hours//abs(self.hours) div, mod = divmod(self.hours*s, 24) self.hours = mod*s self.days += div*s if abs(self.months) > 11: - s = self.months/abs(self.months) + s = self.months//abs(self.months) div, mod = divmod(self.months*s, 12) self.months = mod*s self.years += div*s @@ -235,7 +235,7 @@ def _set_months(self, months): self.months = months if abs(self.months) > 11: - s = self.months/abs(self.months) + s = self.months//abs(self.months) div, mod = divmod(self.months*s, 12) self.months = mod*s self.years = div*s Modified: trunk/matplotlib/lib/dateutil/rrule.py =================================================================== --- trunk/matplotlib/lib/dateutil/rrule.py 2010-06-06 18:58:43 UTC (rev 8387) +++ trunk/matplotlib/lib/dateutil/rrule.py 2010-06-06 20:34:09 UTC (rev 8388) @@ -1,5 +1,5 @@ """ -Copyright (c) 2003-2005 Gustavo Niemeyer <gust...@niemeyer.net> +Copyright (c) 2003-2010 Gustavo Niemeyer <gust...@niemeyer.net> This module offers extensions to the standard python 2.3+ datetime module. @@ -439,7 +439,7 @@ (freq >= MINUTELY and self._byminute and minute not in self._byminute) or (freq >= SECONDLY and - self._bysecond and minute not in self._bysecond)): + self._bysecond and second not in self._bysecond)): timeset = () else: timeset = gettimeset(hour, minute, second) Modified: trunk/matplotlib/lib/dateutil/tz.py =================================================================== --- trunk/matplotlib/lib/dateutil/tz.py 2010-06-06 18:58:43 UTC (rev 8387) +++ trunk/matplotlib/lib/dateutil/tz.py 2010-06-06 20:34:09 UTC (rev 8388) @@ -1,5 +1,5 @@ """ -Copyright (c) 2003-2005 Gustavo Niemeyer <gust...@niemeyer.net> +Copyright (c) 2003-2007 Gustavo Niemeyer <gust...@niemeyer.net> This module offers extensions to the standard python 2.3+ datetime module. @@ -438,7 +438,7 @@ # The documentation says that utcoffset()-dst() must # be constant for every dt. - return self._find_ttinfo(dt, laststd=1).delta-tti.delta + return tti.delta-self._find_ttinfo(dt, laststd=1).delta # An alternative for that would be: # @@ -492,12 +492,12 @@ self._dst_offset = self._std_offset+datetime.timedelta(hours=+1) else: self._dst_offset = ZERO - if start is None: + if dstabbr and start is None: self._start_delta = relativedelta.relativedelta( hours=+2, month=4, day=1, weekday=relativedelta.SU(+1)) else: self._start_delta = start - if end is None: + if dstabbr and end is None: self._end_delta = relativedelta.relativedelta( hours=+1, month=10, day=31, weekday=relativedelta.SU(-1)) else: @@ -524,7 +524,7 @@ def _isdst(self, dt): if not self._start_delta: return False - year = datetime.date(dt.year,1,1) + year = datetime.datetime(dt.year,1,1) start = year+self._start_delta end = year+self._end_delta dt = dt.replace(tzinfo=None) @@ -563,6 +563,11 @@ if res is None: raise ValueError, "unknown string format" + # Here we break the compatibility with the TZ variable handling. + # GMT-3 actually *means* the timezone -3. + if res.stdabbr in ("GMT", "UTC"): + res.stdoffset *= -1 + # We must initialize it first, since _delta() needs # _std_offset and _dst_offset set. Use False in start/end # to avoid building it two times. @@ -570,9 +575,13 @@ res.dstabbr, res.dstoffset, start=False, end=False) - self._start_delta = self._delta(res.start) - if self._start_delta: - self._end_delta = self._delta(res.end, isend=1) + if not res.dstabbr: + self._start_delta = None + self._end_delta = None + else: + self._start_delta = self._delta(res.start) + if self._start_delta: + self._end_delta = self._delta(res.end, isend=1) def _delta(self, x, isend=0): kwargs = {} @@ -753,6 +762,8 @@ else: i += 1 + tzid = None + comps = [] invtz = False comptype = None for line in lines: Deleted: trunk/matplotlib/lib/dateutil/zoneinfo/zoneinfo-2008e.tar.gz =================================================================== (Binary files differ) Added: trunk/matplotlib/lib/dateutil/zoneinfo/zoneinfo-2010g.tar.gz =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/dateutil/zoneinfo/zoneinfo-2010g.tar.gz ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo _______________________________________________ Matplotlib-checkins mailing list Matplotlib-checkins@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins