public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Justin Lecher" <jlec@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-python/pandas/files/, dev-python/pandas/
Date: Sat,  3 Dec 2016 13:45:43 +0000 (UTC)	[thread overview]
Message-ID: <1480772741.c8028ecb0e960b735506bf249ba143f96aad989f.jlec@gentoo> (raw)

commit:     c8028ecb0e960b735506bf249ba143f96aad989f
Author:     Justin Lecher <jlec <AT> gentoo <DOT> org>
AuthorDate: Sat Dec  3 13:45:01 2016 +0000
Commit:     Justin Lecher <jlec <AT> gentoo <DOT> org>
CommitDate: Sat Dec  3 13:45:41 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c8028ecb

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 <AT> gentoo.org>

 dev-python/pandas/Manifest                       |   1 +
 dev-python/pandas/files/pandas-0.19.1-gapi.patch |  27 ++
 dev-python/pandas/files/pandas-0.19.1-seqf.patch | 357 +++++++++++++++++++++++
 dev-python/pandas/pandas-0.19.1.ebuild           | 166 +++++++++++
 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 bb4cfe6..c7d4b01 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 00000000..7a0456f
--- /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 00000000..c82c14f
--- /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 00000000..aea548f
--- /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 f62cf51..02a7a20 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
 }


             reply	other threads:[~2016-12-03 13:45 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-03 13:45 Justin Lecher [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-11-13  6:55 [gentoo-commits] repo/gentoo:master commit in: dev-python/pandas/files/, dev-python/pandas/ Michał Górny
2023-12-09 10:32 Michał Górny
2023-08-31 20:21 Michał Górny
2021-10-29 16:59 Sam James
2020-08-07 19:56 Michał Górny
2020-01-19 19:54 Pacho Ramos
2018-08-23 18:44 Virgil Dupras
2018-05-10 14:10 Andreas Sturmlechner
2015-11-16 11:12 Justin Lecher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1480772741.c8028ecb0e960b735506bf249ba143f96aad989f.jlec@gentoo \
    --to=jlec@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox