diff options
author | Justin Lecher <jlec@gentoo.org> | 2016-12-03 14:45:01 +0100 |
---|---|---|
committer | Justin Lecher <jlec@gentoo.org> | 2016-12-03 14:45:41 +0100 |
commit | c8028ecb0e960b735506bf249ba143f96aad989f (patch) | |
tree | 3205428ea23a648709b6b2c1389cdadbac086863 /dev-python/pandas | |
parent | media-libs/jasper: Fix underlinking detected using ld.gold (diff) | |
download | gentoo-c8028ecb0e960b735506bf249ba143f96aad989f.tar.gz gentoo-c8028ecb0e960b735506bf249ba143f96aad989f.tar.bz2 gentoo-c8028ecb0e960b735506bf249ba143f96aad989f.zip |
dev-python/pandas: Version Bump
Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=585184
Move to modern virtualx.eclass usage
Package-Manager: portage-2.3.2
Signed-off-by: Justin Lecher <jlec@gentoo.org>
Diffstat (limited to 'dev-python/pandas')
-rw-r--r-- | dev-python/pandas/Manifest | 1 | ||||
-rw-r--r-- | dev-python/pandas/files/pandas-0.19.1-gapi.patch | 27 | ||||
-rw-r--r-- | dev-python/pandas/files/pandas-0.19.1-seqf.patch | 357 | ||||
-rw-r--r-- | dev-python/pandas/pandas-0.19.1.ebuild | 166 | ||||
-rw-r--r-- | dev-python/pandas/pandas-9999.ebuild | 130 |
5 files changed, 631 insertions, 50 deletions
diff --git a/dev-python/pandas/Manifest b/dev-python/pandas/Manifest index bb4cfe628575..c7d4b01cb048 100644 --- a/dev-python/pandas/Manifest +++ b/dev-python/pandas/Manifest @@ -1,3 +1,4 @@ DIST pandas-0.16.2.tar.gz 4931751 SHA256 e01853dfe111f3aea005315573400b7216ddbabbf1f28d482a71217d67ae4f81 SHA512 44874e12a42a01dd7ed88f3f97e954732a534a5e2dc4815ef6203bdb2d88850a607e6631a35ae8fc79f4621a5dfaa34f39bb1c9a0ecfb17da1cf0c10f35ff27b WHIRLPOOL 6f2874ac07b49f4b2aaefdb87375b7c5adb31e3ff60c6b808f3e3467ad82999dd894de884ebbfd64fc7235e875d17ce871b516c96ff71a17310b708597168702 DIST pandas-0.17.0.tar.gz 6508621 SHA256 320d4fdf734b82adebc8fde9d8ca4b05fe155a72b6f7aa95d76242da8748d6a4 SHA512 bae6964e263c7ff6cac722cdfe23081f23c357d9bc39a670b5627bef4630c236a58aa8c0393eae921721bf7049c8e5266b4dea71dd957da5d89dafc14a04797b WHIRLPOOL d654eb2f9ffbfedbde60e4a6e6ce6f54650a8a68b4d20035744aa55111525d6bba4dae2ccbfce65acf71bb200e2e6029c7f6c9bcc9d0c582d808444738baedb1 DIST pandas-0.17.1.tar.gz 6674479 SHA256 cfd7214a7223703fe6999fbe34837749540efee1c985e6aee9933f30e3f72837 SHA512 9d9f9064585b1f3551625e0c8f4eedaaa1253790c2a5cb28e58e70eb805cc18f9770d793aa748cbd76798488ff60efdd01eb4b21daf5ad8f1dc4d9c050487234 WHIRLPOOL 5238575bd64b8d38db4f9a0ea987a7f78ffd1821e5a22bad65c84c407feca3af6f3b536a0a2f337291aa04e94c86fdb40382dad4ce50f8a33a5e26d655c628c2 +DIST pandas-0.19.1.tar.gz 8360233 SHA256 2509feaeda72fce03675e2eccd2284bb1cadb6a0737008a5e741fe2431d47421 SHA512 6451990a7fae8c6db8ab0b014a13b4f1828754d3998f13c17b111f891fb9fd23f8e09b907623096dfa55668c42298eee1373210a9fddb95f56dd7d552b964e6f WHIRLPOOL 700c0d819ab62134baf56430b7fa8840636ea377d00397341d33ec5f13474d9eeefea245aede80a80f7c16348ef811788947e5fe0020c9770005c74dd1288ef3 diff --git a/dev-python/pandas/files/pandas-0.19.1-gapi.patch b/dev-python/pandas/files/pandas-0.19.1-gapi.patch new file mode 100644 index 000000000000..7a0456fdacfc --- /dev/null +++ b/dev-python/pandas/files/pandas-0.19.1-gapi.patch @@ -0,0 +1,27 @@ +From 1d6dbb41b26a39121ec8c4f19f5da78bb0ab4af7 Mon Sep 17 00:00:00 2001 +From: Jeff Reback <jeff@reback.net> +Date: Sat, 12 Nov 2016 12:44:06 -0500 +Subject: [PATCH] TST: skip test_gbq.test_upload_data_if_table_exists_replace + for now + +--- + pandas/io/tests/test_gbq.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/pandas/io/tests/test_gbq.py b/pandas/io/tests/test_gbq.py +index cca1580b8..f6ff35a6d 100644 +--- a/pandas/io/tests/test_gbq.py ++++ b/pandas/io/tests/test_gbq.py +@@ -824,6 +824,9 @@ class TestToGBQIntegration(tm.TestCase): + private_key=_get_private_key_path()) + + def test_upload_data_if_table_exists_replace(self): ++ ++ raise nose.SkipTest("buggy test") ++ + destination_table = DESTINATION_TABLE + "4" + + test_size = 10 +-- +2.11.0 + diff --git a/dev-python/pandas/files/pandas-0.19.1-seqf.patch b/dev-python/pandas/files/pandas-0.19.1-seqf.patch new file mode 100644 index 000000000000..c82c14ff8fdd --- /dev/null +++ b/dev-python/pandas/files/pandas-0.19.1-seqf.patch @@ -0,0 +1,357 @@ +From f8bd08e9c2fc6365980f41b846bbae4b40f08b83 Mon Sep 17 00:00:00 2001 +From: Jeff Reback <jeff@reback.net> +Date: Sat, 12 Nov 2016 10:58:54 -0500 +Subject: [PATCH] BUG: segfault manifesting with dateutil=2.6 w.r.t. replace + when timezones are present + +closes #14621 + +Author: Jeff Reback <jeff@reback.net> + +Closes #14631 from jreback/replace and squashes the following commits: + +3f95042 [Jeff Reback] BUG: segfault manifesting with dateutil=2.6 w.r.t. replace when timezones are present +--- + ci/requirements-3.5_OSX.pip | 2 +- + doc/source/whatsnew/v0.19.2.txt | 3 ++ + pandas/tseries/offsets.py | 1 + + pandas/tseries/tests/test_offsets.py | 20 ++++--- + pandas/tseries/tests/test_timezones.py | 89 +++++++++++++++++++++++++++++-- + pandas/tseries/tests/test_tslib.py | 5 +- + pandas/tslib.pyx | 95 ++++++++++++++++++++++++++++------ + 7 files changed, 188 insertions(+), 27 deletions(-) + +diff --git a/pandas/tseries/offsets.py b/pandas/tseries/offsets.py +index 051cc8aa4..2e3852a7e 100644 +--- a/pandas/tseries/offsets.py ++++ b/pandas/tseries/offsets.py +@@ -68,6 +68,7 @@ def apply_wraps(func): + other = other.tz_localize(None) + + result = func(self, other) ++ + if self._adjust_dst: + result = tslib._localize_pydatetime(result, tz) + +diff --git a/pandas/tseries/tests/test_offsets.py b/pandas/tseries/tests/test_offsets.py +index 1735ac4e2..768e9212e 100644 +--- a/pandas/tseries/tests/test_offsets.py ++++ b/pandas/tseries/tests/test_offsets.py +@@ -1,4 +1,5 @@ + import os ++from distutils.version import LooseVersion + from datetime import date, datetime, timedelta + from dateutil.relativedelta import relativedelta + from pandas.compat import range, iteritems +@@ -4851,6 +4852,7 @@ class TestDST(tm.TestCase): + + def _test_offset(self, offset_name, offset_n, tstart, expected_utc_offset): + offset = DateOffset(**{offset_name: offset_n}) ++ + t = tstart + offset + if expected_utc_offset is not None: + self.assertTrue(get_utc_offset_hours(t) == expected_utc_offset) +@@ -4890,17 +4892,23 @@ class TestDST(tm.TestCase): + return Timestamp(string + offset_string).tz_convert(tz) + + def test_fallback_plural(self): +- """test moving from daylight savings to standard time""" ++ # test moving from daylight savings to standard time ++ import dateutil + for tz, utc_offsets in self.timezone_utc_offsets.items(): + hrs_pre = utc_offsets['utc_offset_daylight'] + hrs_post = utc_offsets['utc_offset_standard'] +- self._test_all_offsets( +- n=3, tstart=self._make_timestamp(self.ts_pre_fallback, +- hrs_pre, tz), +- expected_utc_offset=hrs_post) ++ ++ if dateutil.__version__ != LooseVersion('2.6.0'): ++ # buggy ambiguous behavior in 2.6.0 ++ # GH 14621 ++ # https://github.com/dateutil/dateutil/issues/321 ++ self._test_all_offsets( ++ n=3, tstart=self._make_timestamp(self.ts_pre_fallback, ++ hrs_pre, tz), ++ expected_utc_offset=hrs_post) + + def test_springforward_plural(self): +- """test moving from standard to daylight savings""" ++ # test moving from standard to daylight savings + for tz, utc_offsets in self.timezone_utc_offsets.items(): + hrs_pre = utc_offsets['utc_offset_standard'] + hrs_post = utc_offsets['utc_offset_daylight'] +diff --git a/pandas/tseries/tests/test_timezones.py b/pandas/tseries/tests/test_timezones.py +index 00e8ee631..db8cda5c7 100644 +--- a/pandas/tseries/tests/test_timezones.py ++++ b/pandas/tseries/tests/test_timezones.py +@@ -4,7 +4,7 @@ import nose + + import numpy as np + import pytz +- ++from distutils.version import LooseVersion + from pandas.types.dtypes import DatetimeTZDtype + from pandas import (Index, Series, DataFrame, isnull, Timestamp) + +@@ -518,8 +518,12 @@ class TestTimeZoneSupportPytz(tm.TestCase): + + times = date_range("2013-10-26 23:00", "2013-10-27 01:00", freq="H", + tz=tz, ambiguous='infer') +- self.assertEqual(times[0], Timestamp('2013-10-26 23:00', tz=tz)) +- self.assertEqual(times[-1], Timestamp('2013-10-27 01:00', tz=tz)) ++ self.assertEqual(times[0], Timestamp('2013-10-26 23:00', tz=tz, ++ freq="H")) ++ if dateutil.__version__ != LooseVersion('2.6.0'): ++ # GH 14621 ++ self.assertEqual(times[-1], Timestamp('2013-10-27 01:00', tz=tz, ++ freq="H")) + + def test_ambiguous_nat(self): + tz = self.tz('US/Eastern') +@@ -1163,6 +1167,85 @@ class TestTimeZones(tm.TestCase): + def setUp(self): + tm._skip_if_no_pytz() + ++ def test_replace(self): ++ # GH 14621 ++ # GH 7825 ++ # replacing datetime components with and w/o presence of a timezone ++ dt = Timestamp('2016-01-01 09:00:00') ++ result = dt.replace(hour=0) ++ expected = Timestamp('2016-01-01 00:00:00') ++ self.assertEqual(result, expected) ++ ++ for tz in self.timezones: ++ dt = Timestamp('2016-01-01 09:00:00', tz=tz) ++ result = dt.replace(hour=0) ++ expected = Timestamp('2016-01-01 00:00:00', tz=tz) ++ self.assertEqual(result, expected) ++ ++ # we preserve nanoseconds ++ dt = Timestamp('2016-01-01 09:00:00.000000123', tz=tz) ++ result = dt.replace(hour=0) ++ expected = Timestamp('2016-01-01 00:00:00.000000123', tz=tz) ++ self.assertEqual(result, expected) ++ ++ # test all ++ dt = Timestamp('2016-01-01 09:00:00.000000123', tz=tz) ++ result = dt.replace(year=2015, month=2, day=2, hour=0, minute=5, ++ second=5, microsecond=5, nanosecond=5) ++ expected = Timestamp('2015-02-02 00:05:05.000005005', tz=tz) ++ self.assertEqual(result, expected) ++ ++ # error ++ def f(): ++ dt.replace(foo=5) ++ self.assertRaises(ValueError, f) ++ ++ def f(): ++ dt.replace(hour=0.1) ++ self.assertRaises(ValueError, f) ++ ++ # assert conversion to naive is the same as replacing tzinfo with None ++ dt = Timestamp('2013-11-03 01:59:59.999999-0400', tz='US/Eastern') ++ self.assertEqual(dt.tz_localize(None), dt.replace(tzinfo=None)) ++ ++ def test_ambiguous_compat(self): ++ # validate that pytz and dateutil are compat for dst ++ # when the transition happens ++ tm._skip_if_no_dateutil() ++ tm._skip_if_no_pytz() ++ ++ pytz_zone = 'Europe/London' ++ dateutil_zone = 'dateutil/Europe/London' ++ result_pytz = (Timestamp('2013-10-27 01:00:00') ++ .tz_localize(pytz_zone, ambiguous=0)) ++ result_dateutil = (Timestamp('2013-10-27 01:00:00') ++ .tz_localize(dateutil_zone, ambiguous=0)) ++ self.assertEqual(result_pytz.value, result_dateutil.value) ++ self.assertEqual(result_pytz.value, 1382835600000000000) ++ ++ # dateutil 2.6 buggy w.r.t. ambiguous=0 ++ if dateutil.__version__ != LooseVersion('2.6.0'): ++ # GH 14621 ++ # https://github.com/dateutil/dateutil/issues/321 ++ self.assertEqual(result_pytz.to_pydatetime().tzname(), ++ result_dateutil.to_pydatetime().tzname()) ++ self.assertEqual(str(result_pytz), str(result_dateutil)) ++ ++ # 1 hour difference ++ result_pytz = (Timestamp('2013-10-27 01:00:00') ++ .tz_localize(pytz_zone, ambiguous=1)) ++ result_dateutil = (Timestamp('2013-10-27 01:00:00') ++ .tz_localize(dateutil_zone, ambiguous=1)) ++ self.assertEqual(result_pytz.value, result_dateutil.value) ++ self.assertEqual(result_pytz.value, 1382832000000000000) ++ ++ # dateutil < 2.6 is buggy w.r.t. ambiguous timezones ++ if dateutil.__version__ > LooseVersion('2.5.3'): ++ # GH 14621 ++ self.assertEqual(str(result_pytz), str(result_dateutil)) ++ self.assertEqual(result_pytz.to_pydatetime().tzname(), ++ result_dateutil.to_pydatetime().tzname()) ++ + def test_index_equals_with_tz(self): + left = date_range('1/1/2011', periods=100, freq='H', tz='utc') + right = date_range('1/1/2011', periods=100, freq='H', tz='US/Eastern') +diff --git a/pandas/tseries/tests/test_tslib.py b/pandas/tseries/tests/test_tslib.py +index 21cfe84f1..b45f867be 100644 +--- a/pandas/tseries/tests/test_tslib.py ++++ b/pandas/tseries/tests/test_tslib.py +@@ -327,8 +327,9 @@ class TestTimestamp(tm.TestCase): + + # dateutil zone change (only matters for repr) + import dateutil +- if dateutil.__version__ >= LooseVersion( +- '2.3') and dateutil.__version__ <= LooseVersion('2.4.0'): ++ if (dateutil.__version__ >= LooseVersion('2.3') and ++ (dateutil.__version__ <= LooseVersion('2.4.0') or ++ dateutil.__version__ >= LooseVersion('2.6.0'))): + timezones = ['UTC', 'Asia/Tokyo', 'US/Eastern', + 'dateutil/US/Pacific'] + else: +diff --git a/pandas/tslib.pyx b/pandas/tslib.pyx +index d4eaaa0b5..685de214c 100644 +--- a/pandas/tslib.pyx ++++ b/pandas/tslib.pyx +@@ -98,6 +98,7 @@ except NameError: # py3 + cdef inline object create_timestamp_from_ts( + int64_t value, pandas_datetimestruct dts, + object tz, object freq): ++ """ convenience routine to construct a Timestamp from its parts """ + cdef _Timestamp ts_base + ts_base = _Timestamp.__new__(Timestamp, dts.year, dts.month, + dts.day, dts.hour, dts.min, +@@ -112,6 +113,7 @@ cdef inline object create_timestamp_from_ts( + cdef inline object create_datetime_from_ts( + int64_t value, pandas_datetimestruct dts, + object tz, object freq): ++ """ convenience routine to construct a datetime.datetime from its parts """ + return datetime(dts.year, dts.month, dts.day, dts.hour, + dts.min, dts.sec, dts.us, tz) + +@@ -378,7 +380,6 @@ class Timestamp(_Timestamp): + # Mixing pydatetime positional and keyword arguments is forbidden! + + cdef _TSObject ts +- cdef _Timestamp ts_base + + if offset is not None: + # deprecate offset kwd in 0.19.0, GH13593 +@@ -412,17 +413,7 @@ class Timestamp(_Timestamp): + from pandas.tseries.frequencies import to_offset + freq = to_offset(freq) + +- # make datetime happy +- ts_base = _Timestamp.__new__(cls, ts.dts.year, ts.dts.month, +- ts.dts.day, ts.dts.hour, ts.dts.min, +- ts.dts.sec, ts.dts.us, ts.tzinfo) +- +- # fill out rest of data +- ts_base.value = ts.value +- ts_base.freq = freq +- ts_base.nanosecond = ts.dts.ps / 1000 +- +- return ts_base ++ return create_timestamp_from_ts(ts.value, ts.dts, ts.tzinfo, freq) + + def _round(self, freq, rounder): + +@@ -660,8 +651,80 @@ class Timestamp(_Timestamp): + astimezone = tz_convert + + def replace(self, **kwds): +- return Timestamp(datetime.replace(self, **kwds), +- freq=self.freq) ++ """ ++ implements datetime.replace, handles nanoseconds ++ ++ Parameters ++ ---------- ++ kwargs: key-value dict ++ ++ accepted keywords are: ++ year, month, day, hour, minute, second, microsecond, nanosecond, tzinfo ++ ++ values must be integer, or for tzinfo, a tz-convertible ++ ++ Returns ++ ------- ++ Timestamp with fields replaced ++ """ ++ ++ cdef: ++ pandas_datetimestruct dts ++ int64_t value ++ object tzinfo, result, k, v ++ _TSObject ts ++ ++ # set to naive if needed ++ tzinfo = self.tzinfo ++ value = self.value ++ if tzinfo is not None: ++ value = tz_convert_single(value, 'UTC', tzinfo) ++ ++ # setup components ++ pandas_datetime_to_datetimestruct(value, PANDAS_FR_ns, &dts) ++ dts.ps = self.nanosecond * 1000 ++ ++ # replace ++ def validate(k, v): ++ """ validate integers """ ++ if not isinstance(v, int): ++ raise ValueError("value must be an integer, received {v} for {k}".format(v=type(v), k=k)) ++ return v ++ ++ for k, v in kwds.items(): ++ if k == 'year': ++ dts.year = validate(k, v) ++ elif k == 'month': ++ dts.month = validate(k, v) ++ elif k == 'day': ++ dts.day = validate(k, v) ++ elif k == 'hour': ++ dts.hour = validate(k, v) ++ elif k == 'minute': ++ dts.min = validate(k, v) ++ elif k == 'second': ++ dts.sec = validate(k, v) ++ elif k == 'microsecond': ++ dts.us = validate(k, v) ++ elif k == 'nanosecond': ++ dts.ps = validate(k, v) * 1000 ++ elif k == 'tzinfo': ++ tzinfo = v ++ else: ++ raise ValueError("invalid name {} passed".format(k)) ++ ++ # reconstruct & check bounds ++ value = pandas_datetimestruct_to_datetime(PANDAS_FR_ns, &dts) ++ if value != NPY_NAT: ++ _check_dts_bounds(&dts) ++ ++ # set tz if needed ++ if tzinfo is not None: ++ value = tz_convert_single(value, tzinfo, 'UTC') ++ ++ result = create_timestamp_from_ts(value, dts, tzinfo, self.freq) ++ ++ return result + + def isoformat(self, sep='T'): + base = super(_Timestamp, self).isoformat(sep=sep) +@@ -5041,7 +5104,9 @@ cpdef normalize_date(object dt): + ------- + normalized : datetime.datetime or Timestamp + """ +- if PyDateTime_Check(dt): ++ if is_timestamp(dt): ++ return dt.replace(hour=0, minute=0, second=0, microsecond=0, nanosecond=0) ++ elif PyDateTime_Check(dt): + return dt.replace(hour=0, minute=0, second=0, microsecond=0) + elif PyDate_Check(dt): + return datetime(dt.year, dt.month, dt.day) +-- +2.11.0 + diff --git a/dev-python/pandas/pandas-0.19.1.ebuild b/dev-python/pandas/pandas-0.19.1.ebuild new file mode 100644 index 000000000000..aea548f43713 --- /dev/null +++ b/dev-python/pandas/pandas-0.19.1.ebuild @@ -0,0 +1,166 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +PYTHON_COMPAT=( python2_7 python3_{4,5} ) +PYTHON_REQ_USE="threads(+)" + +VIRTUALX_REQUIRED="manual" + +inherit distutils-r1 eutils flag-o-matic virtualx + +DESCRIPTION="Powerful data structures for data analysis and statistics" +HOMEPAGE="http://pandas.pydata.org/" +SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz" + +SLOT="0" +LICENSE="BSD" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" +IUSE="doc -minimal full-support test X" + +MINIMAL_DEPEND=" + >dev-python/numpy-1.7[${PYTHON_USEDEP}] + >=dev-python/python-dateutil-2.0[${PYTHON_USEDEP}] + dev-python/pytz[${PYTHON_USEDEP}] + !<dev-python/numexpr-2.1[${PYTHON_USEDEP}] + !~dev-python/openpyxl-1.9.0[${PYTHON_USEDEP}]" +RECOMMENDED_DEPEND=" + dev-python/bottleneck[${PYTHON_USEDEP}] + >=dev-python/numexpr-2.1[${PYTHON_USEDEP}]" +OPTIONAL_DEPEND=" + dev-python/beautifulsoup:4[${PYTHON_USEDEP}] + dev-python/blosc[${PYTHON_USEDEP}] + dev-python/boto[${PYTHON_USEDEP}] + >=dev-python/google-api-python-client-1.2.0[$(python_gen_usedep python2_7 pypy)] + || ( dev-python/html5lib[${PYTHON_USEDEP}] dev-python/lxml[${PYTHON_USEDEP}] ) + dev-python/httplib2[${PYTHON_USEDEP}] + dev-python/jinja[${PYTHON_USEDEP}] + dev-python/matplotlib[${PYTHON_USEDEP}] + || ( >=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] dev-python/xlsxwriter[${PYTHON_USEDEP}] ) + >=dev-python/pytables-3.2.1[${PYTHON_USEDEP}] + dev-python/python-gflags[$(python_gen_usedep python2_7 pypy)] + dev-python/rpy[${PYTHON_USEDEP}] + dev-python/setuptools[${PYTHON_USEDEP}] + dev-python/statsmodels[${PYTHON_USEDEP}] + >=dev-python/sqlalchemy-0.8.1[${PYTHON_USEDEP}] + dev-python/xlrd[${PYTHON_USEDEP}] + dev-python/xlwt[${PYTHON_USEDEP}] + sci-libs/scipy[${PYTHON_USEDEP}] + X? ( + || ( + dev-python/PyQt4[${PYTHON_USEDEP}] + dev-python/pyside[${PYTHON_USEDEP}] + dev-python/pygtk[$(python_gen_usedep python2_7)] + ) + || ( + x11-misc/xclip + x11-misc/xsel + ) + ) + " + +DEPEND="${MINIMAL_DEPEND} + dev-python/setuptools[${PYTHON_USEDEP}] + >=dev-python/cython-0.19.1[${PYTHON_USEDEP}] + doc? ( + ${VIRTUALX_DEPEND} + dev-python/beautifulsoup:4[${PYTHON_USEDEP}] + dev-python/html5lib[${PYTHON_USEDEP}] + dev-python/ipython[${PYTHON_USEDEP}] + dev-python/lxml[${PYTHON_USEDEP}] + dev-python/matplotlib[${PYTHON_USEDEP}] + >=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] + >=dev-python/pytables-3.0.0[${PYTHON_USEDEP}] + dev-python/pytz[${PYTHON_USEDEP}] + dev-python/rpy[${PYTHON_USEDEP}] + >=dev-python/sphinx-1.2.1[${PYTHON_USEDEP}] + dev-python/xlrd[${PYTHON_USEDEP}] + dev-python/xlwt[${PYTHON_USEDEP}] + sci-libs/scipy[${PYTHON_USEDEP}] + x11-misc/xclip + ) + test? ( + ${VIRTUALX_DEPEND} + ${RECOMMENDED_DEPEND} + ${OPTIONAL_DEPEND} + dev-python/beautifulsoup:4[${PYTHON_USEDEP}] + dev-python/nose[${PYTHON_USEDEP}] + dev-python/pymysql[${PYTHON_USEDEP}] + dev-python/psycopg:2[${PYTHON_USEDEP}] + x11-misc/xclip + x11-misc/xsel + )" +# dev-python/statsmodels invokes a circular dep +# hence rm from doc? ( ), again +RDEPEND=" + ${MINIMAL_DEPEND} + !minimal? ( ${RECOMMENDED_DEPEND} ) + full-support? ( ${OPTIONAL_DEPEND} )" + +PATCHES=( + "${FILESDIR}"/${P}-gapi.patch + "${FILESDIR}"/${P}-seqf.patch +) + +python_prepare_all() { + # Prevent un-needed download during build + sed -e "/^ 'sphinx.ext.intersphinx',/d" -i doc/source/conf.py || die + + # https://github.com/pydata/pandas/issues/11299 + sed \ + -e 's:testOdArray:disable:g' \ + -i pandas/io/tests/json/test_ujson.py || die + + distutils-r1_python_prepare_all +} + +python_compile_all() { + # To build docs the need be located in $BUILD_DIR, + # else PYTHONPATH points to unusable modules. + if use doc; then + cd "${BUILD_DIR}"/lib || die + cp -ar "${S}"/doc . && cd doc || die + LANG=C PYTHONPATH=. virtx ${EPYTHON} make.py html || die + fi +} + +python_test() { + local test_pandas='not network and not disabled' + [[ -n "${FAST_PANDAS}" ]] && test_pandas+=' and not slow' + pushd "${BUILD_DIR}"/lib > /dev/null + "${EPYTHON}" -c "import pandas; pandas.show_versions()" || die + PYTHONPATH=. MPLCONFIGDIR=. \ + virtx nosetests --verbosity=3 -A "${test_pandas}" pandas + popd > /dev/null +} + +python_install_all() { + if use doc; then + dodoc -r "${BUILD_DIR}"/lib/doc/build/html + einfo "An initial build of docs is absent of references to statsmodels" + einfo "due to circular dependency. To have them included, emerge" + einfo "statsmodels next and re-emerge pandas with USE doc" + fi + + distutils-r1_python_install_all +} + +pkg_postinst() { + optfeature "accelerating certain types of NaN evaluations, using specialized cython routines to achieve large speedups." dev-python/bottleneck + optfeature "accelerating certain numerical operations, using multiple cores as well as smart chunking and caching to achieve large speedups" >=dev-python/numexpr-2.1 + optfeature "needed for pandas.io.html.read_html" dev-python/beautifulsoup:4 dev-python/html5lib dev-python/lxml + optfeature "for msgpack compression using ``blosc``" dev-python/blosc + optfeature "necessary for Amazon S3 access" dev-python/boto + optfeature "needed for pandas.io.gbq" dev-python/httplib2 dev-python/setuptools dev-python/python-gflags >=dev-python/google-api-python-client-1.2.0 + optfeature "Template engine for conditional HTML formatting" dev-python/jinja + optfeature "Plotting support" dev-python/matplotlib + optfeature "Needed for Excel I/O" >=dev-python/openpyxl-1.6.1 dev-python/xlsxwriter dev-python/xlrd dev-python/xlwt + optfeature "necessary for HDF5-based storage" >=dev-python/pytables-3.2.1 + optfeature "R I/O support" dev-python/rpy + optfeature "Needed for parts of :mod:`pandas.stats`" dev-python/statsmodels + optfeature "SQL database support" >=dev-python/sqlalchemy-0.8.1 + optfeature "miscellaneous statistical functions" sci-libs/scipy + optfeature "necessary to use ~pandas.io.clipboard.read_clipboard support" dev-python/PyQt4 dev-python/pyside dev-python/pygtk x11-misc/xclip x11-misc/xsel +} diff --git a/dev-python/pandas/pandas-9999.ebuild b/dev-python/pandas/pandas-9999.ebuild index f62cf5108645..02a7a2009390 100644 --- a/dev-python/pandas/pandas-9999.ebuild +++ b/dev-python/pandas/pandas-9999.ebuild @@ -1,12 +1,14 @@ -# Copyright 1999-2015 Gentoo Foundation +# Copyright 1999-2016 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ EAPI=5 -PYTHON_COMPAT=( python2_7 python3_4 ) +PYTHON_COMPAT=( python2_7 python3_{4,5} ) PYTHON_REQ_USE="threads(+)" +VIRTUALX_REQUIRED="manual" + inherit distutils-r1 eutils flag-o-matic git-r3 virtualx DESCRIPTION="Powerful data structures for data analysis and statistics" @@ -17,68 +19,86 @@ EGIT_REPO_URI="https://github.com/pydata/pandas.git" SLOT="0" LICENSE="BSD" KEYWORDS="" -IUSE="doc excel html test R" +IUSE="doc -minimal full-support test X" -EXTRA_DEPEND=" +MINIMAL_DEPEND=" + >dev-python/numpy-1.7[${PYTHON_USEDEP}] + >=dev-python/python-dateutil-2.0[${PYTHON_USEDEP}] + dev-python/pytz[${PYTHON_USEDEP}] + !<dev-python/numexpr-2.1[${PYTHON_USEDEP}] + !~dev-python/openpyxl-1.9.0[${PYTHON_USEDEP}]" +RECOMMENDED_DEPEND=" + dev-python/bottleneck[${PYTHON_USEDEP}] + >=dev-python/numexpr-2.1[${PYTHON_USEDEP}]" +OPTIONAL_DEPEND=" + dev-python/beautifulsoup:4[${PYTHON_USEDEP}] + dev-python/blosc[${PYTHON_USEDEP}] + dev-python/boto[${PYTHON_USEDEP}] >=dev-python/google-api-python-client-1.2.0[$(python_gen_usedep python2_7 pypy)] - dev-python/openpyxl[${PYTHON_USEDEP}] - dev-python/pymysql[${PYTHON_USEDEP}] + || ( dev-python/html5lib[${PYTHON_USEDEP}] dev-python/lxml[${PYTHON_USEDEP}] ) + dev-python/httplib2[${PYTHON_USEDEP}] + dev-python/jinja[${PYTHON_USEDEP}] + dev-python/matplotlib[${PYTHON_USEDEP}] + || ( >=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] dev-python/xlsxwriter[${PYTHON_USEDEP}] ) + >=dev-python/pytables-3.2.1[${PYTHON_USEDEP}] dev-python/python-gflags[$(python_gen_usedep python2_7 pypy)] - dev-python/psycopg:2[${PYTHON_USEDEP}] + dev-python/rpy[${PYTHON_USEDEP}] + dev-python/setuptools[${PYTHON_USEDEP}] dev-python/statsmodels[${PYTHON_USEDEP}] - dev-python/sqlalchemy[${PYTHON_USEDEP}] - dev-python/xlsxwriter[${PYTHON_USEDEP}] + >=dev-python/sqlalchemy-0.8.1[${PYTHON_USEDEP}] + dev-python/xlrd[${PYTHON_USEDEP}] + dev-python/xlwt[${PYTHON_USEDEP}] + sci-libs/scipy[${PYTHON_USEDEP}] + X? ( + || ( + dev-python/PyQt4[${PYTHON_USEDEP}] + dev-python/pyside[${PYTHON_USEDEP}] + dev-python/pygtk[$(python_gen_usedep python2_7)] + ) + || ( + x11-misc/xclip + x11-misc/xsel + ) + ) " -CDEPEND=" - >dev-python/numpy-1.7[${PYTHON_USEDEP}] - >=dev-python/python-dateutil-2.0[${PYTHON_USEDEP}] - !~dev-python/openpyxl-1.9.0[${PYTHON_USEDEP}]" -DEPEND="${CDEPEND} + +DEPEND="${MINIMAL_DEPEND} + dev-python/setuptools[${PYTHON_USEDEP}] + >=dev-python/cython-0.19.1[${PYTHON_USEDEP}] doc? ( + ${VIRTUALX_DEPEND} dev-python/beautifulsoup:4[${PYTHON_USEDEP}] - dev-python/ipython[${PYTHON_USEDEP}] dev-python/html5lib[${PYTHON_USEDEP}] + dev-python/ipython[${PYTHON_USEDEP}] dev-python/lxml[${PYTHON_USEDEP}] dev-python/matplotlib[${PYTHON_USEDEP}] >=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] - dev-python/openpyxl[${PYTHON_USEDEP}] >=dev-python/pytables-3.0.0[${PYTHON_USEDEP}] dev-python/pytz[${PYTHON_USEDEP}] dev-python/rpy[${PYTHON_USEDEP}] - sci-libs/scipy[${PYTHON_USEDEP}] >=dev-python/sphinx-1.2.1[${PYTHON_USEDEP}] - dev-python/xlrd[$(python_gen_usedep 'python2_7')] - dev-python/xlwt[$(python_gen_usedep 'python2_7')] + dev-python/xlrd[${PYTHON_USEDEP}] + dev-python/xlwt[${PYTHON_USEDEP}] + sci-libs/scipy[${PYTHON_USEDEP}] x11-misc/xclip - ) + ) test? ( - ${EXTRA_DEPEND} + ${VIRTUALX_DEPEND} + ${RECOMMENDED_DEPEND} + ${OPTIONAL_DEPEND} dev-python/beautifulsoup:4[${PYTHON_USEDEP}] dev-python/nose[${PYTHON_USEDEP}] + dev-python/pymysql[${PYTHON_USEDEP}] + dev-python/psycopg:2[${PYTHON_USEDEP}] x11-misc/xclip x11-misc/xsel - )" + )" # dev-python/statsmodels invokes a circular dep # hence rm from doc? ( ), again -RDEPEND="${CDEPEND} - >=dev-python/numexpr-2.1[${PYTHON_USEDEP}] - dev-python/bottleneck[${PYTHON_USEDEP}] - dev-python/matplotlib[${PYTHON_USEDEP}] - dev-python/pytables[${PYTHON_USEDEP}] - dev-python/pytz[${PYTHON_USEDEP}] - sci-libs/scipy[${PYTHON_USEDEP}] - excel? ( - >=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] - dev-python/xlrd[$(python_gen_usedep 'python2_7')] - dev-python/xlwt[$(python_gen_usedep 'python2_7')] - ) - html? ( - dev-python/beautifulsoup:4[${PYTHON_USEDEP}] - || ( - dev-python/lxml[${PYTHON_USEDEP}] - dev-python/html5lib[${PYTHON_USEDEP}] ) - ) - R? ( dev-python/rpy[${PYTHON_USEDEP}] )" +RDEPEND=" + ${MINIMAL_DEPEND} + !minimal? ( ${RECOMMENDED_DEPEND} ) + full-support? ( ${OPTIONAL_DEPEND} )" python_prepare_all() { # Prevent un-needed download during build @@ -93,7 +113,7 @@ python_compile_all() { if use doc; then cd "${BUILD_DIR}"/lib || die cp -ar "${S}"/doc . && cd doc || die - LANG=C PYTHONPATH=. "${EPYTHON}" make.py html || die + LANG=C PYTHONPATH=. virtx ${EPYTHON} make.py html || die fi } @@ -101,9 +121,9 @@ python_test() { local test_pandas='not network and not disabled' [[ -n "${FAST_PANDAS}" ]] && test_pandas+=' and not slow' pushd "${BUILD_DIR}"/lib > /dev/null - VIRTUALX_COMMAND="nosetests" - PYTHONPATH=. MPLCONFIGDIR=. HOME=. \ - virtualmake --verbosity=3 -A "${test_pandas}" pandas + "${EPYTHON}" -c "import pandas; pandas.show_versions()" || die + PYTHONPATH=. MPLCONFIGDIR=. \ + virtx nosetests --verbosity=3 -A "${test_pandas}" pandas.io.tests.json.test_ujson.NumpyJSONTests popd > /dev/null } @@ -119,9 +139,19 @@ python_install_all() { } pkg_postinst() { - local x - elog "Please install" - for x in ${EXTRA_DEPEND}; do - optfeature "additional functionality" "${x%%[*}" - done + optfeature "accelerating certain types of NaN evaluations, using specialized cython routines to achieve large speedups." dev-python/bottleneck + optfeature "accelerating certain numerical operations, using multiple cores as well as smart chunking and caching to achieve large speedups" >=dev-python/numexpr-2.1 + optfeature "needed for pandas.io.html.read_html" dev-python/beautifulsoup:4 dev-python/html5lib dev-python/lxml + optfeature "for msgpack compression using ``blosc``" dev-python/blosc + optfeature "necessary for Amazon S3 access" dev-python/boto + optfeature "needed for pandas.io.gbq" dev-python/httplib2 dev-python/setuptools dev-python/python-gflags >=dev-python/google-api-python-client-1.2.0 + optfeature "Template engine for conditional HTML formatting" dev-python/jinja + optfeature "Plotting support" dev-python/matplotlib + optfeature "Needed for Excel I/O" >=dev-python/openpyxl-1.6.1 dev-python/xlsxwriter dev-python/xlrd dev-python/xlwt + optfeature "necessary for HDF5-based storage" >=dev-python/pytables-3.2.1 + optfeature "R I/O support" dev-python/rpy + optfeature "Needed for parts of :mod:`pandas.stats`" dev-python/statsmodels + optfeature "SQL database support" >=dev-python/sqlalchemy-0.8.1 + optfeature "miscellaneous statistical functions" sci-libs/scipy + optfeature "necessary to use ~pandas.io.clipboard.read_clipboard support" dev-python/PyQt4 dev-python/pyside dev-python/pygtk x11-misc/xclip x11-misc/xsel } |