aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Wurmus <ricardo.wurmus@mdc-berlin.de>2016-04-14 17:43:27 +0200
committerRicardo Wurmus <rekado@elephly.net>2016-04-17 11:36:25 +0200
commit534db463060caead27c7b048cd8b3f0f450f63e5 (patch)
tree24f1a02ea9b0f15a7d59d107993a9ed43c5efed8
parentb711df02fdf921f79f6402f35491766d094d0ddb (diff)
downloadguix-534db463060caead27c7b048cd8b3f0f450f63e5.tar.gz
guix-534db463060caead27c7b048cd8b3f0f450f63e5.zip
gnu: python-pandas: Fix test failures.
* gnu/packages/patches/python-pandas-fix-tslib-test-failure.patch: New file. * gnu-system.am (dist_patch_DATA): Register it. * gnu/packages/python.scm (python-pandas)[source]: Add patch.
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/packages/patches/python-pandas-fix-tslib-test-failure.patch141
-rw-r--r--gnu/packages/python.scm6
3 files changed, 146 insertions, 2 deletions
diff --git a/gnu-system.am b/gnu-system.am
index 40c566c099..b08812db1f 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -689,6 +689,7 @@ dist_patch_DATA = \
gnu/packages/patches/python-paste-remove-website-test.patch \
gnu/packages/patches/python-paste-remove-timing-test.patch \
gnu/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
+ gnu/packages/patches/python-pandas-fix-tslib-test-failure.patch \
gnu/packages/patches/qemu-CVE-2015-8558.patch \
gnu/packages/patches/qemu-CVE-2015-8567.patch \
gnu/packages/patches/qemu-CVE-2015-8613.patch \
diff --git a/gnu/packages/patches/python-pandas-fix-tslib-test-failure.patch b/gnu/packages/patches/python-pandas-fix-tslib-test-failure.patch
new file mode 100644
index 0000000000..62d6a38086
--- /dev/null
+++ b/gnu/packages/patches/python-pandas-fix-tslib-test-failure.patch
@@ -0,0 +1,141 @@
+This patch is required to fix a test failure when python-dateutil version
+2.5.2 or later is used. It is derived from the following commits:
+
+80ef4e06526b9b60cf24268454c9456585a790a3
+845ff974af6f7c3b3067cce8a7149b771c2be87
+
+diff --git a/pandas/tseries/tests/test_tslib.py b/pandas/tseries/tests/test_tslib.py
+index f0d5bf7..863bc6f 100644
+--- a/pandas/tseries/tests/test_tslib.py
++++ b/pandas/tseries/tests/test_tslib.py
+@@ -474,6 +474,11 @@ def test_does_not_convert_mixed_integer(self):
+ good_date_string))
+
+ def test_parsers(self):
++
++ # https://github.com/dateutil/dateutil/issues/217
++ import dateutil
++ yearfirst = dateutil.__version__ >= LooseVersion('2.5.0')
++
+ cases = {'2011-01-01': datetime.datetime(2011, 1, 1),
+ '2Q2005': datetime.datetime(2005, 4, 1),
+ '2Q05': datetime.datetime(2005, 4, 1),
+@@ -527,20 +532,26 @@ def test_parsers(self):
+ }
+
+ for date_str, expected in compat.iteritems(cases):
+- result1, _, _ = tools.parse_time_string(date_str)
+- result2 = to_datetime(date_str)
+- result3 = to_datetime([date_str])
+- result4 = to_datetime(np.array([date_str], dtype=object))
+- result5 = Timestamp(date_str)
+- result6 = DatetimeIndex([date_str])[0]
+- result7 = date_range(date_str, freq='S', periods=1)
++ result1, _, _ = tools.parse_time_string(date_str,
++ yearfirst=yearfirst)
++ result2 = to_datetime(date_str, yearfirst=yearfirst)
++ result3 = to_datetime([date_str], yearfirst=yearfirst)
++ result4 = to_datetime(np.array([date_str], dtype=object),
++ yearfirst=yearfirst)
++ result6 = DatetimeIndex([date_str], yearfirst=yearfirst)[0]
+ self.assertEqual(result1, expected)
+ self.assertEqual(result2, expected)
+ self.assertEqual(result3, expected)
+ self.assertEqual(result4, expected)
+- self.assertEqual(result5, expected)
+ self.assertEqual(result6, expected)
+- self.assertEqual(result7, expected)
++
++ # these really need to have yearfist, but we don't support
++ if not yearfirst:
++ result5 = Timestamp(date_str)
++ self.assertEqual(result5, expected)
++ result7 = date_range(date_str, freq='S', periods=1,
++ yearfirst=yearfirst)
++ self.assertEqual(result7, expected)
+
+ # NaT
+ result1, _, _ = tools.parse_time_string('NaT')
+@@ -589,23 +589,62 @@ def test_parsers_quarter_invalid(self):
+ self.assertRaises(ValueError, tools.parse_time_string, case)
+
+ def test_parsers_dayfirst_yearfirst(self):
++
++ # https://github.com/dateutil/dateutil/issues/217
++ # this issue was closed
++ import dateutil
++ is_compat_version = dateutil.__version__ >= LooseVersion('2.5.2')
++ if is_compat_version:
++ dayfirst_yearfirst1 = datetime.datetime(2010, 12, 11)
++ dayfirst_yearfirst2 = datetime.datetime(2020, 12, 21)
++ else:
++ dayfirst_yearfirst1 = datetime.datetime(2010, 11, 12)
++ dayfirst_yearfirst2 = datetime.datetime(2020, 12, 21)
++
+ # str : dayfirst, yearfirst, expected
+- cases = {'10-11-12': [(False, False, datetime.datetime(2012, 10, 11)),
+- (True, False, datetime.datetime(2012, 11, 10)),
+- (False, True, datetime.datetime(2010, 11, 12)),
+- (True, True, datetime.datetime(2010, 11, 12))],
+- '20/12/21': [(False, False, datetime.datetime(2021, 12, 20)),
+- (True, False, datetime.datetime(2021, 12, 20)),
+- (False, True, datetime.datetime(2020, 12, 21)),
+- (True, True, datetime.datetime(2020, 12, 21))]}
++ cases = {'10-11-12': [(False, False, False,
++ datetime.datetime(2012, 10, 11)),
++ (True, False, False,
++ datetime.datetime(2012, 11, 10)),
++ (False, True, False,
++ datetime.datetime(2010, 11, 12)),
++ (True, True, False, dayfirst_yearfirst1)],
++ '20/12/21': [(False, False, False,
++ datetime.datetime(2021, 12, 20)),
++ (True, False, False,
++ datetime.datetime(2021, 12, 20)),
++ (False, True, False,
++ datetime.datetime(2020, 12, 21)),
++ (True, True, True, dayfirst_yearfirst2)]}
+
+ tm._skip_if_no_dateutil()
+ from dateutil.parser import parse
+ for date_str, values in compat.iteritems(cases):
+- for dayfirst, yearfirst, expected in values:
+- result1, _, _ = tools.parse_time_string(date_str,
+- dayfirst=dayfirst,
+- yearfirst=yearfirst)
++ for dayfirst, yearfirst, is_compat, expected in values:
++
++ f = lambda x: tools.parse_time_string(x,
++ dayfirst=dayfirst,
++ yearfirst=yearfirst)
++
++ # we now have an invalid parse
++ if is_compat and is_compat_version:
++ self.assertRaises(tslib.DateParseError, f, date_str)
++
++ def f(date_str):
++ return to_datetime(date_str, dayfirst=dayfirst,
++ yearfirst=yearfirst)
++
++ self.assertRaises(ValueError, f, date_str)
++
++ def f(date_str):
++ return DatetimeIndex([date_str], dayfirst=dayfirst,
++ yearfirst=yearfirst)[0]
++
++ self.assertRaises(ValueError, f, date_str)
++
++ continue
++
++ result1, _, _ = f(date_str)
+
+ result2 = to_datetime(date_str, dayfirst=dayfirst,
+ yearfirst=yearfirst)
+@@ -614,7 +653,6 @@ def test_parsers_dayfirst_yearfirst(self):
+ yearfirst=yearfirst)[0]
+
+ # Timestamp doesn't support dayfirst and yearfirst
+-
+ self.assertEqual(result1, expected)
+ self.assertEqual(result2, expected)
+ self.assertEqual(result3, expected)
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 4238965fd0..a5c0eaad79 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -7,7 +7,7 @@
;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
@@ -987,7 +987,9 @@ datetime module, available in Python 2.3+.")
(method url-fetch)
(uri (pypi-uri "pandas" version))
(sha256
- (base32 "050qw0ap5bhyv5flp78x3lcq1dlminl3xaj6kbrm0jqmx0672xf9"))))
+ (base32 "050qw0ap5bhyv5flp78x3lcq1dlminl3xaj6kbrm0jqmx0672xf9"))
+ (patches (search-patches
+ "python-pandas-fix-tslib-test-failure.patch"))))
(build-system python-build-system)
(propagated-inputs
`(("python-numpy" ,python-numpy)