1 |
commit: c8028ecb0e960b735506bf249ba143f96aad989f |
2 |
Author: Justin Lecher <jlec <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Dec 3 13:45:01 2016 +0000 |
4 |
Commit: Justin Lecher <jlec <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Dec 3 13:45:41 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c8028ecb |
7 |
|
8 |
dev-python/pandas: Version Bump |
9 |
|
10 |
Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=585184 |
11 |
|
12 |
Move to modern virtualx.eclass usage |
13 |
|
14 |
Package-Manager: portage-2.3.2 |
15 |
Signed-off-by: Justin Lecher <jlec <AT> gentoo.org> |
16 |
|
17 |
dev-python/pandas/Manifest | 1 + |
18 |
dev-python/pandas/files/pandas-0.19.1-gapi.patch | 27 ++ |
19 |
dev-python/pandas/files/pandas-0.19.1-seqf.patch | 357 +++++++++++++++++++++++ |
20 |
dev-python/pandas/pandas-0.19.1.ebuild | 166 +++++++++++ |
21 |
dev-python/pandas/pandas-9999.ebuild | 130 +++++---- |
22 |
5 files changed, 631 insertions(+), 50 deletions(-) |
23 |
|
24 |
diff --git a/dev-python/pandas/Manifest b/dev-python/pandas/Manifest |
25 |
index bb4cfe6..c7d4b01 100644 |
26 |
--- a/dev-python/pandas/Manifest |
27 |
+++ b/dev-python/pandas/Manifest |
28 |
@@ -1,3 +1,4 @@ |
29 |
DIST pandas-0.16.2.tar.gz 4931751 SHA256 e01853dfe111f3aea005315573400b7216ddbabbf1f28d482a71217d67ae4f81 SHA512 44874e12a42a01dd7ed88f3f97e954732a534a5e2dc4815ef6203bdb2d88850a607e6631a35ae8fc79f4621a5dfaa34f39bb1c9a0ecfb17da1cf0c10f35ff27b WHIRLPOOL 6f2874ac07b49f4b2aaefdb87375b7c5adb31e3ff60c6b808f3e3467ad82999dd894de884ebbfd64fc7235e875d17ce871b516c96ff71a17310b708597168702 |
30 |
DIST pandas-0.17.0.tar.gz 6508621 SHA256 320d4fdf734b82adebc8fde9d8ca4b05fe155a72b6f7aa95d76242da8748d6a4 SHA512 bae6964e263c7ff6cac722cdfe23081f23c357d9bc39a670b5627bef4630c236a58aa8c0393eae921721bf7049c8e5266b4dea71dd957da5d89dafc14a04797b WHIRLPOOL d654eb2f9ffbfedbde60e4a6e6ce6f54650a8a68b4d20035744aa55111525d6bba4dae2ccbfce65acf71bb200e2e6029c7f6c9bcc9d0c582d808444738baedb1 |
31 |
DIST pandas-0.17.1.tar.gz 6674479 SHA256 cfd7214a7223703fe6999fbe34837749540efee1c985e6aee9933f30e3f72837 SHA512 9d9f9064585b1f3551625e0c8f4eedaaa1253790c2a5cb28e58e70eb805cc18f9770d793aa748cbd76798488ff60efdd01eb4b21daf5ad8f1dc4d9c050487234 WHIRLPOOL 5238575bd64b8d38db4f9a0ea987a7f78ffd1821e5a22bad65c84c407feca3af6f3b536a0a2f337291aa04e94c86fdb40382dad4ce50f8a33a5e26d655c628c2 |
32 |
+DIST pandas-0.19.1.tar.gz 8360233 SHA256 2509feaeda72fce03675e2eccd2284bb1cadb6a0737008a5e741fe2431d47421 SHA512 6451990a7fae8c6db8ab0b014a13b4f1828754d3998f13c17b111f891fb9fd23f8e09b907623096dfa55668c42298eee1373210a9fddb95f56dd7d552b964e6f WHIRLPOOL 700c0d819ab62134baf56430b7fa8840636ea377d00397341d33ec5f13474d9eeefea245aede80a80f7c16348ef811788947e5fe0020c9770005c74dd1288ef3 |
33 |
|
34 |
diff --git a/dev-python/pandas/files/pandas-0.19.1-gapi.patch b/dev-python/pandas/files/pandas-0.19.1-gapi.patch |
35 |
new file mode 100644 |
36 |
index 00000000..7a0456f |
37 |
--- /dev/null |
38 |
+++ b/dev-python/pandas/files/pandas-0.19.1-gapi.patch |
39 |
@@ -0,0 +1,27 @@ |
40 |
+From 1d6dbb41b26a39121ec8c4f19f5da78bb0ab4af7 Mon Sep 17 00:00:00 2001 |
41 |
+From: Jeff Reback <jeff@××××××.net> |
42 |
+Date: Sat, 12 Nov 2016 12:44:06 -0500 |
43 |
+Subject: [PATCH] TST: skip test_gbq.test_upload_data_if_table_exists_replace |
44 |
+ for now |
45 |
+ |
46 |
+--- |
47 |
+ pandas/io/tests/test_gbq.py | 3 +++ |
48 |
+ 1 file changed, 3 insertions(+) |
49 |
+ |
50 |
+diff --git a/pandas/io/tests/test_gbq.py b/pandas/io/tests/test_gbq.py |
51 |
+index cca1580b8..f6ff35a6d 100644 |
52 |
+--- a/pandas/io/tests/test_gbq.py |
53 |
++++ b/pandas/io/tests/test_gbq.py |
54 |
+@@ -824,6 +824,9 @@ class TestToGBQIntegration(tm.TestCase): |
55 |
+ private_key=_get_private_key_path()) |
56 |
+ |
57 |
+ def test_upload_data_if_table_exists_replace(self): |
58 |
++ |
59 |
++ raise nose.SkipTest("buggy test") |
60 |
++ |
61 |
+ destination_table = DESTINATION_TABLE + "4" |
62 |
+ |
63 |
+ test_size = 10 |
64 |
+-- |
65 |
+2.11.0 |
66 |
+ |
67 |
|
68 |
diff --git a/dev-python/pandas/files/pandas-0.19.1-seqf.patch b/dev-python/pandas/files/pandas-0.19.1-seqf.patch |
69 |
new file mode 100644 |
70 |
index 00000000..c82c14f |
71 |
--- /dev/null |
72 |
+++ b/dev-python/pandas/files/pandas-0.19.1-seqf.patch |
73 |
@@ -0,0 +1,357 @@ |
74 |
+From f8bd08e9c2fc6365980f41b846bbae4b40f08b83 Mon Sep 17 00:00:00 2001 |
75 |
+From: Jeff Reback <jeff@××××××.net> |
76 |
+Date: Sat, 12 Nov 2016 10:58:54 -0500 |
77 |
+Subject: [PATCH] BUG: segfault manifesting with dateutil=2.6 w.r.t. replace |
78 |
+ when timezones are present |
79 |
+ |
80 |
+closes #14621 |
81 |
+ |
82 |
+Author: Jeff Reback <jeff@××××××.net> |
83 |
+ |
84 |
+Closes #14631 from jreback/replace and squashes the following commits: |
85 |
+ |
86 |
+3f95042 [Jeff Reback] BUG: segfault manifesting with dateutil=2.6 w.r.t. replace when timezones are present |
87 |
+--- |
88 |
+ ci/requirements-3.5_OSX.pip | 2 +- |
89 |
+ doc/source/whatsnew/v0.19.2.txt | 3 ++ |
90 |
+ pandas/tseries/offsets.py | 1 + |
91 |
+ pandas/tseries/tests/test_offsets.py | 20 ++++--- |
92 |
+ pandas/tseries/tests/test_timezones.py | 89 +++++++++++++++++++++++++++++-- |
93 |
+ pandas/tseries/tests/test_tslib.py | 5 +- |
94 |
+ pandas/tslib.pyx | 95 ++++++++++++++++++++++++++++------ |
95 |
+ 7 files changed, 188 insertions(+), 27 deletions(-) |
96 |
+ |
97 |
+diff --git a/pandas/tseries/offsets.py b/pandas/tseries/offsets.py |
98 |
+index 051cc8aa4..2e3852a7e 100644 |
99 |
+--- a/pandas/tseries/offsets.py |
100 |
++++ b/pandas/tseries/offsets.py |
101 |
+@@ -68,6 +68,7 @@ def apply_wraps(func): |
102 |
+ other = other.tz_localize(None) |
103 |
+ |
104 |
+ result = func(self, other) |
105 |
++ |
106 |
+ if self._adjust_dst: |
107 |
+ result = tslib._localize_pydatetime(result, tz) |
108 |
+ |
109 |
+diff --git a/pandas/tseries/tests/test_offsets.py b/pandas/tseries/tests/test_offsets.py |
110 |
+index 1735ac4e2..768e9212e 100644 |
111 |
+--- a/pandas/tseries/tests/test_offsets.py |
112 |
++++ b/pandas/tseries/tests/test_offsets.py |
113 |
+@@ -1,4 +1,5 @@ |
114 |
+ import os |
115 |
++from distutils.version import LooseVersion |
116 |
+ from datetime import date, datetime, timedelta |
117 |
+ from dateutil.relativedelta import relativedelta |
118 |
+ from pandas.compat import range, iteritems |
119 |
+@@ -4851,6 +4852,7 @@ class TestDST(tm.TestCase): |
120 |
+ |
121 |
+ def _test_offset(self, offset_name, offset_n, tstart, expected_utc_offset): |
122 |
+ offset = DateOffset(**{offset_name: offset_n}) |
123 |
++ |
124 |
+ t = tstart + offset |
125 |
+ if expected_utc_offset is not None: |
126 |
+ self.assertTrue(get_utc_offset_hours(t) == expected_utc_offset) |
127 |
+@@ -4890,17 +4892,23 @@ class TestDST(tm.TestCase): |
128 |
+ return Timestamp(string + offset_string).tz_convert(tz) |
129 |
+ |
130 |
+ def test_fallback_plural(self): |
131 |
+- """test moving from daylight savings to standard time""" |
132 |
++ # test moving from daylight savings to standard time |
133 |
++ import dateutil |
134 |
+ for tz, utc_offsets in self.timezone_utc_offsets.items(): |
135 |
+ hrs_pre = utc_offsets['utc_offset_daylight'] |
136 |
+ hrs_post = utc_offsets['utc_offset_standard'] |
137 |
+- self._test_all_offsets( |
138 |
+- n=3, tstart=self._make_timestamp(self.ts_pre_fallback, |
139 |
+- hrs_pre, tz), |
140 |
+- expected_utc_offset=hrs_post) |
141 |
++ |
142 |
++ if dateutil.__version__ != LooseVersion('2.6.0'): |
143 |
++ # buggy ambiguous behavior in 2.6.0 |
144 |
++ # GH 14621 |
145 |
++ # https://github.com/dateutil/dateutil/issues/321 |
146 |
++ self._test_all_offsets( |
147 |
++ n=3, tstart=self._make_timestamp(self.ts_pre_fallback, |
148 |
++ hrs_pre, tz), |
149 |
++ expected_utc_offset=hrs_post) |
150 |
+ |
151 |
+ def test_springforward_plural(self): |
152 |
+- """test moving from standard to daylight savings""" |
153 |
++ # test moving from standard to daylight savings |
154 |
+ for tz, utc_offsets in self.timezone_utc_offsets.items(): |
155 |
+ hrs_pre = utc_offsets['utc_offset_standard'] |
156 |
+ hrs_post = utc_offsets['utc_offset_daylight'] |
157 |
+diff --git a/pandas/tseries/tests/test_timezones.py b/pandas/tseries/tests/test_timezones.py |
158 |
+index 00e8ee631..db8cda5c7 100644 |
159 |
+--- a/pandas/tseries/tests/test_timezones.py |
160 |
++++ b/pandas/tseries/tests/test_timezones.py |
161 |
+@@ -4,7 +4,7 @@ import nose |
162 |
+ |
163 |
+ import numpy as np |
164 |
+ import pytz |
165 |
+- |
166 |
++from distutils.version import LooseVersion |
167 |
+ from pandas.types.dtypes import DatetimeTZDtype |
168 |
+ from pandas import (Index, Series, DataFrame, isnull, Timestamp) |
169 |
+ |
170 |
+@@ -518,8 +518,12 @@ class TestTimeZoneSupportPytz(tm.TestCase): |
171 |
+ |
172 |
+ times = date_range("2013-10-26 23:00", "2013-10-27 01:00", freq="H", |
173 |
+ tz=tz, ambiguous='infer') |
174 |
+- self.assertEqual(times[0], Timestamp('2013-10-26 23:00', tz=tz)) |
175 |
+- self.assertEqual(times[-1], Timestamp('2013-10-27 01:00', tz=tz)) |
176 |
++ self.assertEqual(times[0], Timestamp('2013-10-26 23:00', tz=tz, |
177 |
++ freq="H")) |
178 |
++ if dateutil.__version__ != LooseVersion('2.6.0'): |
179 |
++ # GH 14621 |
180 |
++ self.assertEqual(times[-1], Timestamp('2013-10-27 01:00', tz=tz, |
181 |
++ freq="H")) |
182 |
+ |
183 |
+ def test_ambiguous_nat(self): |
184 |
+ tz = self.tz('US/Eastern') |
185 |
+@@ -1163,6 +1167,85 @@ class TestTimeZones(tm.TestCase): |
186 |
+ def setUp(self): |
187 |
+ tm._skip_if_no_pytz() |
188 |
+ |
189 |
++ def test_replace(self): |
190 |
++ # GH 14621 |
191 |
++ # GH 7825 |
192 |
++ # replacing datetime components with and w/o presence of a timezone |
193 |
++ dt = Timestamp('2016-01-01 09:00:00') |
194 |
++ result = dt.replace(hour=0) |
195 |
++ expected = Timestamp('2016-01-01 00:00:00') |
196 |
++ self.assertEqual(result, expected) |
197 |
++ |
198 |
++ for tz in self.timezones: |
199 |
++ dt = Timestamp('2016-01-01 09:00:00', tz=tz) |
200 |
++ result = dt.replace(hour=0) |
201 |
++ expected = Timestamp('2016-01-01 00:00:00', tz=tz) |
202 |
++ self.assertEqual(result, expected) |
203 |
++ |
204 |
++ # we preserve nanoseconds |
205 |
++ dt = Timestamp('2016-01-01 09:00:00.000000123', tz=tz) |
206 |
++ result = dt.replace(hour=0) |
207 |
++ expected = Timestamp('2016-01-01 00:00:00.000000123', tz=tz) |
208 |
++ self.assertEqual(result, expected) |
209 |
++ |
210 |
++ # test all |
211 |
++ dt = Timestamp('2016-01-01 09:00:00.000000123', tz=tz) |
212 |
++ result = dt.replace(year=2015, month=2, day=2, hour=0, minute=5, |
213 |
++ second=5, microsecond=5, nanosecond=5) |
214 |
++ expected = Timestamp('2015-02-02 00:05:05.000005005', tz=tz) |
215 |
++ self.assertEqual(result, expected) |
216 |
++ |
217 |
++ # error |
218 |
++ def f(): |
219 |
++ dt.replace(foo=5) |
220 |
++ self.assertRaises(ValueError, f) |
221 |
++ |
222 |
++ def f(): |
223 |
++ dt.replace(hour=0.1) |
224 |
++ self.assertRaises(ValueError, f) |
225 |
++ |
226 |
++ # assert conversion to naive is the same as replacing tzinfo with None |
227 |
++ dt = Timestamp('2013-11-03 01:59:59.999999-0400', tz='US/Eastern') |
228 |
++ self.assertEqual(dt.tz_localize(None), dt.replace(tzinfo=None)) |
229 |
++ |
230 |
++ def test_ambiguous_compat(self): |
231 |
++ # validate that pytz and dateutil are compat for dst |
232 |
++ # when the transition happens |
233 |
++ tm._skip_if_no_dateutil() |
234 |
++ tm._skip_if_no_pytz() |
235 |
++ |
236 |
++ pytz_zone = 'Europe/London' |
237 |
++ dateutil_zone = 'dateutil/Europe/London' |
238 |
++ result_pytz = (Timestamp('2013-10-27 01:00:00') |
239 |
++ .tz_localize(pytz_zone, ambiguous=0)) |
240 |
++ result_dateutil = (Timestamp('2013-10-27 01:00:00') |
241 |
++ .tz_localize(dateutil_zone, ambiguous=0)) |
242 |
++ self.assertEqual(result_pytz.value, result_dateutil.value) |
243 |
++ self.assertEqual(result_pytz.value, 1382835600000000000) |
244 |
++ |
245 |
++ # dateutil 2.6 buggy w.r.t. ambiguous=0 |
246 |
++ if dateutil.__version__ != LooseVersion('2.6.0'): |
247 |
++ # GH 14621 |
248 |
++ # https://github.com/dateutil/dateutil/issues/321 |
249 |
++ self.assertEqual(result_pytz.to_pydatetime().tzname(), |
250 |
++ result_dateutil.to_pydatetime().tzname()) |
251 |
++ self.assertEqual(str(result_pytz), str(result_dateutil)) |
252 |
++ |
253 |
++ # 1 hour difference |
254 |
++ result_pytz = (Timestamp('2013-10-27 01:00:00') |
255 |
++ .tz_localize(pytz_zone, ambiguous=1)) |
256 |
++ result_dateutil = (Timestamp('2013-10-27 01:00:00') |
257 |
++ .tz_localize(dateutil_zone, ambiguous=1)) |
258 |
++ self.assertEqual(result_pytz.value, result_dateutil.value) |
259 |
++ self.assertEqual(result_pytz.value, 1382832000000000000) |
260 |
++ |
261 |
++ # dateutil < 2.6 is buggy w.r.t. ambiguous timezones |
262 |
++ if dateutil.__version__ > LooseVersion('2.5.3'): |
263 |
++ # GH 14621 |
264 |
++ self.assertEqual(str(result_pytz), str(result_dateutil)) |
265 |
++ self.assertEqual(result_pytz.to_pydatetime().tzname(), |
266 |
++ result_dateutil.to_pydatetime().tzname()) |
267 |
++ |
268 |
+ def test_index_equals_with_tz(self): |
269 |
+ left = date_range('1/1/2011', periods=100, freq='H', tz='utc') |
270 |
+ right = date_range('1/1/2011', periods=100, freq='H', tz='US/Eastern') |
271 |
+diff --git a/pandas/tseries/tests/test_tslib.py b/pandas/tseries/tests/test_tslib.py |
272 |
+index 21cfe84f1..b45f867be 100644 |
273 |
+--- a/pandas/tseries/tests/test_tslib.py |
274 |
++++ b/pandas/tseries/tests/test_tslib.py |
275 |
+@@ -327,8 +327,9 @@ class TestTimestamp(tm.TestCase): |
276 |
+ |
277 |
+ # dateutil zone change (only matters for repr) |
278 |
+ import dateutil |
279 |
+- if dateutil.__version__ >= LooseVersion( |
280 |
+- '2.3') and dateutil.__version__ <= LooseVersion('2.4.0'): |
281 |
++ if (dateutil.__version__ >= LooseVersion('2.3') and |
282 |
++ (dateutil.__version__ <= LooseVersion('2.4.0') or |
283 |
++ dateutil.__version__ >= LooseVersion('2.6.0'))): |
284 |
+ timezones = ['UTC', 'Asia/Tokyo', 'US/Eastern', |
285 |
+ 'dateutil/US/Pacific'] |
286 |
+ else: |
287 |
+diff --git a/pandas/tslib.pyx b/pandas/tslib.pyx |
288 |
+index d4eaaa0b5..685de214c 100644 |
289 |
+--- a/pandas/tslib.pyx |
290 |
++++ b/pandas/tslib.pyx |
291 |
+@@ -98,6 +98,7 @@ except NameError: # py3 |
292 |
+ cdef inline object create_timestamp_from_ts( |
293 |
+ int64_t value, pandas_datetimestruct dts, |
294 |
+ object tz, object freq): |
295 |
++ """ convenience routine to construct a Timestamp from its parts """ |
296 |
+ cdef _Timestamp ts_base |
297 |
+ ts_base = _Timestamp.__new__(Timestamp, dts.year, dts.month, |
298 |
+ dts.day, dts.hour, dts.min, |
299 |
+@@ -112,6 +113,7 @@ cdef inline object create_timestamp_from_ts( |
300 |
+ cdef inline object create_datetime_from_ts( |
301 |
+ int64_t value, pandas_datetimestruct dts, |
302 |
+ object tz, object freq): |
303 |
++ """ convenience routine to construct a datetime.datetime from its parts """ |
304 |
+ return datetime(dts.year, dts.month, dts.day, dts.hour, |
305 |
+ dts.min, dts.sec, dts.us, tz) |
306 |
+ |
307 |
+@@ -378,7 +380,6 @@ class Timestamp(_Timestamp): |
308 |
+ # Mixing pydatetime positional and keyword arguments is forbidden! |
309 |
+ |
310 |
+ cdef _TSObject ts |
311 |
+- cdef _Timestamp ts_base |
312 |
+ |
313 |
+ if offset is not None: |
314 |
+ # deprecate offset kwd in 0.19.0, GH13593 |
315 |
+@@ -412,17 +413,7 @@ class Timestamp(_Timestamp): |
316 |
+ from pandas.tseries.frequencies import to_offset |
317 |
+ freq = to_offset(freq) |
318 |
+ |
319 |
+- # make datetime happy |
320 |
+- ts_base = _Timestamp.__new__(cls, ts.dts.year, ts.dts.month, |
321 |
+- ts.dts.day, ts.dts.hour, ts.dts.min, |
322 |
+- ts.dts.sec, ts.dts.us, ts.tzinfo) |
323 |
+- |
324 |
+- # fill out rest of data |
325 |
+- ts_base.value = ts.value |
326 |
+- ts_base.freq = freq |
327 |
+- ts_base.nanosecond = ts.dts.ps / 1000 |
328 |
+- |
329 |
+- return ts_base |
330 |
++ return create_timestamp_from_ts(ts.value, ts.dts, ts.tzinfo, freq) |
331 |
+ |
332 |
+ def _round(self, freq, rounder): |
333 |
+ |
334 |
+@@ -660,8 +651,80 @@ class Timestamp(_Timestamp): |
335 |
+ astimezone = tz_convert |
336 |
+ |
337 |
+ def replace(self, **kwds): |
338 |
+- return Timestamp(datetime.replace(self, **kwds), |
339 |
+- freq=self.freq) |
340 |
++ """ |
341 |
++ implements datetime.replace, handles nanoseconds |
342 |
++ |
343 |
++ Parameters |
344 |
++ ---------- |
345 |
++ kwargs: key-value dict |
346 |
++ |
347 |
++ accepted keywords are: |
348 |
++ year, month, day, hour, minute, second, microsecond, nanosecond, tzinfo |
349 |
++ |
350 |
++ values must be integer, or for tzinfo, a tz-convertible |
351 |
++ |
352 |
++ Returns |
353 |
++ ------- |
354 |
++ Timestamp with fields replaced |
355 |
++ """ |
356 |
++ |
357 |
++ cdef: |
358 |
++ pandas_datetimestruct dts |
359 |
++ int64_t value |
360 |
++ object tzinfo, result, k, v |
361 |
++ _TSObject ts |
362 |
++ |
363 |
++ # set to naive if needed |
364 |
++ tzinfo = self.tzinfo |
365 |
++ value = self.value |
366 |
++ if tzinfo is not None: |
367 |
++ value = tz_convert_single(value, 'UTC', tzinfo) |
368 |
++ |
369 |
++ # setup components |
370 |
++ pandas_datetime_to_datetimestruct(value, PANDAS_FR_ns, &dts) |
371 |
++ dts.ps = self.nanosecond * 1000 |
372 |
++ |
373 |
++ # replace |
374 |
++ def validate(k, v): |
375 |
++ """ validate integers """ |
376 |
++ if not isinstance(v, int): |
377 |
++ raise ValueError("value must be an integer, received {v} for {k}".format(v=type(v), k=k)) |
378 |
++ return v |
379 |
++ |
380 |
++ for k, v in kwds.items(): |
381 |
++ if k == 'year': |
382 |
++ dts.year = validate(k, v) |
383 |
++ elif k == 'month': |
384 |
++ dts.month = validate(k, v) |
385 |
++ elif k == 'day': |
386 |
++ dts.day = validate(k, v) |
387 |
++ elif k == 'hour': |
388 |
++ dts.hour = validate(k, v) |
389 |
++ elif k == 'minute': |
390 |
++ dts.min = validate(k, v) |
391 |
++ elif k == 'second': |
392 |
++ dts.sec = validate(k, v) |
393 |
++ elif k == 'microsecond': |
394 |
++ dts.us = validate(k, v) |
395 |
++ elif k == 'nanosecond': |
396 |
++ dts.ps = validate(k, v) * 1000 |
397 |
++ elif k == 'tzinfo': |
398 |
++ tzinfo = v |
399 |
++ else: |
400 |
++ raise ValueError("invalid name {} passed".format(k)) |
401 |
++ |
402 |
++ # reconstruct & check bounds |
403 |
++ value = pandas_datetimestruct_to_datetime(PANDAS_FR_ns, &dts) |
404 |
++ if value != NPY_NAT: |
405 |
++ _check_dts_bounds(&dts) |
406 |
++ |
407 |
++ # set tz if needed |
408 |
++ if tzinfo is not None: |
409 |
++ value = tz_convert_single(value, tzinfo, 'UTC') |
410 |
++ |
411 |
++ result = create_timestamp_from_ts(value, dts, tzinfo, self.freq) |
412 |
++ |
413 |
++ return result |
414 |
+ |
415 |
+ def isoformat(self, sep='T'): |
416 |
+ base = super(_Timestamp, self).isoformat(sep=sep) |
417 |
+@@ -5041,7 +5104,9 @@ cpdef normalize_date(object dt): |
418 |
+ ------- |
419 |
+ normalized : datetime.datetime or Timestamp |
420 |
+ """ |
421 |
+- if PyDateTime_Check(dt): |
422 |
++ if is_timestamp(dt): |
423 |
++ return dt.replace(hour=0, minute=0, second=0, microsecond=0, nanosecond=0) |
424 |
++ elif PyDateTime_Check(dt): |
425 |
+ return dt.replace(hour=0, minute=0, second=0, microsecond=0) |
426 |
+ elif PyDate_Check(dt): |
427 |
+ return datetime(dt.year, dt.month, dt.day) |
428 |
+-- |
429 |
+2.11.0 |
430 |
+ |
431 |
|
432 |
diff --git a/dev-python/pandas/pandas-0.19.1.ebuild b/dev-python/pandas/pandas-0.19.1.ebuild |
433 |
new file mode 100644 |
434 |
index 00000000..aea548f |
435 |
--- /dev/null |
436 |
+++ b/dev-python/pandas/pandas-0.19.1.ebuild |
437 |
@@ -0,0 +1,166 @@ |
438 |
+# Copyright 1999-2016 Gentoo Foundation |
439 |
+# Distributed under the terms of the GNU General Public License v2 |
440 |
+# $Id$ |
441 |
+ |
442 |
+EAPI=5 |
443 |
+ |
444 |
+PYTHON_COMPAT=( python2_7 python3_{4,5} ) |
445 |
+PYTHON_REQ_USE="threads(+)" |
446 |
+ |
447 |
+VIRTUALX_REQUIRED="manual" |
448 |
+ |
449 |
+inherit distutils-r1 eutils flag-o-matic virtualx |
450 |
+ |
451 |
+DESCRIPTION="Powerful data structures for data analysis and statistics" |
452 |
+HOMEPAGE="http://pandas.pydata.org/" |
453 |
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz" |
454 |
+ |
455 |
+SLOT="0" |
456 |
+LICENSE="BSD" |
457 |
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" |
458 |
+IUSE="doc -minimal full-support test X" |
459 |
+ |
460 |
+MINIMAL_DEPEND=" |
461 |
+ >dev-python/numpy-1.7[${PYTHON_USEDEP}] |
462 |
+ >=dev-python/python-dateutil-2.0[${PYTHON_USEDEP}] |
463 |
+ dev-python/pytz[${PYTHON_USEDEP}] |
464 |
+ !<dev-python/numexpr-2.1[${PYTHON_USEDEP}] |
465 |
+ !~dev-python/openpyxl-1.9.0[${PYTHON_USEDEP}]" |
466 |
+RECOMMENDED_DEPEND=" |
467 |
+ dev-python/bottleneck[${PYTHON_USEDEP}] |
468 |
+ >=dev-python/numexpr-2.1[${PYTHON_USEDEP}]" |
469 |
+OPTIONAL_DEPEND=" |
470 |
+ dev-python/beautifulsoup:4[${PYTHON_USEDEP}] |
471 |
+ dev-python/blosc[${PYTHON_USEDEP}] |
472 |
+ dev-python/boto[${PYTHON_USEDEP}] |
473 |
+ >=dev-python/google-api-python-client-1.2.0[$(python_gen_usedep python2_7 pypy)] |
474 |
+ || ( dev-python/html5lib[${PYTHON_USEDEP}] dev-python/lxml[${PYTHON_USEDEP}] ) |
475 |
+ dev-python/httplib2[${PYTHON_USEDEP}] |
476 |
+ dev-python/jinja[${PYTHON_USEDEP}] |
477 |
+ dev-python/matplotlib[${PYTHON_USEDEP}] |
478 |
+ || ( >=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] dev-python/xlsxwriter[${PYTHON_USEDEP}] ) |
479 |
+ >=dev-python/pytables-3.2.1[${PYTHON_USEDEP}] |
480 |
+ dev-python/python-gflags[$(python_gen_usedep python2_7 pypy)] |
481 |
+ dev-python/rpy[${PYTHON_USEDEP}] |
482 |
+ dev-python/setuptools[${PYTHON_USEDEP}] |
483 |
+ dev-python/statsmodels[${PYTHON_USEDEP}] |
484 |
+ >=dev-python/sqlalchemy-0.8.1[${PYTHON_USEDEP}] |
485 |
+ dev-python/xlrd[${PYTHON_USEDEP}] |
486 |
+ dev-python/xlwt[${PYTHON_USEDEP}] |
487 |
+ sci-libs/scipy[${PYTHON_USEDEP}] |
488 |
+ X? ( |
489 |
+ || ( |
490 |
+ dev-python/PyQt4[${PYTHON_USEDEP}] |
491 |
+ dev-python/pyside[${PYTHON_USEDEP}] |
492 |
+ dev-python/pygtk[$(python_gen_usedep python2_7)] |
493 |
+ ) |
494 |
+ || ( |
495 |
+ x11-misc/xclip |
496 |
+ x11-misc/xsel |
497 |
+ ) |
498 |
+ ) |
499 |
+ " |
500 |
+ |
501 |
+DEPEND="${MINIMAL_DEPEND} |
502 |
+ dev-python/setuptools[${PYTHON_USEDEP}] |
503 |
+ >=dev-python/cython-0.19.1[${PYTHON_USEDEP}] |
504 |
+ doc? ( |
505 |
+ ${VIRTUALX_DEPEND} |
506 |
+ dev-python/beautifulsoup:4[${PYTHON_USEDEP}] |
507 |
+ dev-python/html5lib[${PYTHON_USEDEP}] |
508 |
+ dev-python/ipython[${PYTHON_USEDEP}] |
509 |
+ dev-python/lxml[${PYTHON_USEDEP}] |
510 |
+ dev-python/matplotlib[${PYTHON_USEDEP}] |
511 |
+ >=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] |
512 |
+ >=dev-python/pytables-3.0.0[${PYTHON_USEDEP}] |
513 |
+ dev-python/pytz[${PYTHON_USEDEP}] |
514 |
+ dev-python/rpy[${PYTHON_USEDEP}] |
515 |
+ >=dev-python/sphinx-1.2.1[${PYTHON_USEDEP}] |
516 |
+ dev-python/xlrd[${PYTHON_USEDEP}] |
517 |
+ dev-python/xlwt[${PYTHON_USEDEP}] |
518 |
+ sci-libs/scipy[${PYTHON_USEDEP}] |
519 |
+ x11-misc/xclip |
520 |
+ ) |
521 |
+ test? ( |
522 |
+ ${VIRTUALX_DEPEND} |
523 |
+ ${RECOMMENDED_DEPEND} |
524 |
+ ${OPTIONAL_DEPEND} |
525 |
+ dev-python/beautifulsoup:4[${PYTHON_USEDEP}] |
526 |
+ dev-python/nose[${PYTHON_USEDEP}] |
527 |
+ dev-python/pymysql[${PYTHON_USEDEP}] |
528 |
+ dev-python/psycopg:2[${PYTHON_USEDEP}] |
529 |
+ x11-misc/xclip |
530 |
+ x11-misc/xsel |
531 |
+ )" |
532 |
+# dev-python/statsmodels invokes a circular dep |
533 |
+# hence rm from doc? ( ), again |
534 |
+RDEPEND=" |
535 |
+ ${MINIMAL_DEPEND} |
536 |
+ !minimal? ( ${RECOMMENDED_DEPEND} ) |
537 |
+ full-support? ( ${OPTIONAL_DEPEND} )" |
538 |
+ |
539 |
+PATCHES=( |
540 |
+ "${FILESDIR}"/${P}-gapi.patch |
541 |
+ "${FILESDIR}"/${P}-seqf.patch |
542 |
+) |
543 |
+ |
544 |
+python_prepare_all() { |
545 |
+ # Prevent un-needed download during build |
546 |
+ sed -e "/^ 'sphinx.ext.intersphinx',/d" -i doc/source/conf.py || die |
547 |
+ |
548 |
+ # https://github.com/pydata/pandas/issues/11299 |
549 |
+ sed \ |
550 |
+ -e 's:testOdArray:disable:g' \ |
551 |
+ -i pandas/io/tests/json/test_ujson.py || die |
552 |
+ |
553 |
+ distutils-r1_python_prepare_all |
554 |
+} |
555 |
+ |
556 |
+python_compile_all() { |
557 |
+ # To build docs the need be located in $BUILD_DIR, |
558 |
+ # else PYTHONPATH points to unusable modules. |
559 |
+ if use doc; then |
560 |
+ cd "${BUILD_DIR}"/lib || die |
561 |
+ cp -ar "${S}"/doc . && cd doc || die |
562 |
+ LANG=C PYTHONPATH=. virtx ${EPYTHON} make.py html || die |
563 |
+ fi |
564 |
+} |
565 |
+ |
566 |
+python_test() { |
567 |
+ local test_pandas='not network and not disabled' |
568 |
+ [[ -n "${FAST_PANDAS}" ]] && test_pandas+=' and not slow' |
569 |
+ pushd "${BUILD_DIR}"/lib > /dev/null |
570 |
+ "${EPYTHON}" -c "import pandas; pandas.show_versions()" || die |
571 |
+ PYTHONPATH=. MPLCONFIGDIR=. \ |
572 |
+ virtx nosetests --verbosity=3 -A "${test_pandas}" pandas |
573 |
+ popd > /dev/null |
574 |
+} |
575 |
+ |
576 |
+python_install_all() { |
577 |
+ if use doc; then |
578 |
+ dodoc -r "${BUILD_DIR}"/lib/doc/build/html |
579 |
+ einfo "An initial build of docs is absent of references to statsmodels" |
580 |
+ einfo "due to circular dependency. To have them included, emerge" |
581 |
+ einfo "statsmodels next and re-emerge pandas with USE doc" |
582 |
+ fi |
583 |
+ |
584 |
+ distutils-r1_python_install_all |
585 |
+} |
586 |
+ |
587 |
+pkg_postinst() { |
588 |
+ optfeature "accelerating certain types of NaN evaluations, using specialized cython routines to achieve large speedups." dev-python/bottleneck |
589 |
+ optfeature "accelerating certain numerical operations, using multiple cores as well as smart chunking and caching to achieve large speedups" >=dev-python/numexpr-2.1 |
590 |
+ optfeature "needed for pandas.io.html.read_html" dev-python/beautifulsoup:4 dev-python/html5lib dev-python/lxml |
591 |
+ optfeature "for msgpack compression using ``blosc``" dev-python/blosc |
592 |
+ optfeature "necessary for Amazon S3 access" dev-python/boto |
593 |
+ 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 |
594 |
+ optfeature "Template engine for conditional HTML formatting" dev-python/jinja |
595 |
+ optfeature "Plotting support" dev-python/matplotlib |
596 |
+ optfeature "Needed for Excel I/O" >=dev-python/openpyxl-1.6.1 dev-python/xlsxwriter dev-python/xlrd dev-python/xlwt |
597 |
+ optfeature "necessary for HDF5-based storage" >=dev-python/pytables-3.2.1 |
598 |
+ optfeature "R I/O support" dev-python/rpy |
599 |
+ optfeature "Needed for parts of :mod:`pandas.stats`" dev-python/statsmodels |
600 |
+ optfeature "SQL database support" >=dev-python/sqlalchemy-0.8.1 |
601 |
+ optfeature "miscellaneous statistical functions" sci-libs/scipy |
602 |
+ 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 |
603 |
+} |
604 |
|
605 |
diff --git a/dev-python/pandas/pandas-9999.ebuild b/dev-python/pandas/pandas-9999.ebuild |
606 |
index f62cf51..02a7a20 100644 |
607 |
--- a/dev-python/pandas/pandas-9999.ebuild |
608 |
+++ b/dev-python/pandas/pandas-9999.ebuild |
609 |
@@ -1,12 +1,14 @@ |
610 |
-# Copyright 1999-2015 Gentoo Foundation |
611 |
+# Copyright 1999-2016 Gentoo Foundation |
612 |
# Distributed under the terms of the GNU General Public License v2 |
613 |
# $Id$ |
614 |
|
615 |
EAPI=5 |
616 |
|
617 |
-PYTHON_COMPAT=( python2_7 python3_4 ) |
618 |
+PYTHON_COMPAT=( python2_7 python3_{4,5} ) |
619 |
PYTHON_REQ_USE="threads(+)" |
620 |
|
621 |
+VIRTUALX_REQUIRED="manual" |
622 |
+ |
623 |
inherit distutils-r1 eutils flag-o-matic git-r3 virtualx |
624 |
|
625 |
DESCRIPTION="Powerful data structures for data analysis and statistics" |
626 |
@@ -17,68 +19,86 @@ EGIT_REPO_URI="https://github.com/pydata/pandas.git" |
627 |
SLOT="0" |
628 |
LICENSE="BSD" |
629 |
KEYWORDS="" |
630 |
-IUSE="doc excel html test R" |
631 |
+IUSE="doc -minimal full-support test X" |
632 |
|
633 |
-EXTRA_DEPEND=" |
634 |
+MINIMAL_DEPEND=" |
635 |
+ >dev-python/numpy-1.7[${PYTHON_USEDEP}] |
636 |
+ >=dev-python/python-dateutil-2.0[${PYTHON_USEDEP}] |
637 |
+ dev-python/pytz[${PYTHON_USEDEP}] |
638 |
+ !<dev-python/numexpr-2.1[${PYTHON_USEDEP}] |
639 |
+ !~dev-python/openpyxl-1.9.0[${PYTHON_USEDEP}]" |
640 |
+RECOMMENDED_DEPEND=" |
641 |
+ dev-python/bottleneck[${PYTHON_USEDEP}] |
642 |
+ >=dev-python/numexpr-2.1[${PYTHON_USEDEP}]" |
643 |
+OPTIONAL_DEPEND=" |
644 |
+ dev-python/beautifulsoup:4[${PYTHON_USEDEP}] |
645 |
+ dev-python/blosc[${PYTHON_USEDEP}] |
646 |
+ dev-python/boto[${PYTHON_USEDEP}] |
647 |
>=dev-python/google-api-python-client-1.2.0[$(python_gen_usedep python2_7 pypy)] |
648 |
- dev-python/openpyxl[${PYTHON_USEDEP}] |
649 |
- dev-python/pymysql[${PYTHON_USEDEP}] |
650 |
+ || ( dev-python/html5lib[${PYTHON_USEDEP}] dev-python/lxml[${PYTHON_USEDEP}] ) |
651 |
+ dev-python/httplib2[${PYTHON_USEDEP}] |
652 |
+ dev-python/jinja[${PYTHON_USEDEP}] |
653 |
+ dev-python/matplotlib[${PYTHON_USEDEP}] |
654 |
+ || ( >=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] dev-python/xlsxwriter[${PYTHON_USEDEP}] ) |
655 |
+ >=dev-python/pytables-3.2.1[${PYTHON_USEDEP}] |
656 |
dev-python/python-gflags[$(python_gen_usedep python2_7 pypy)] |
657 |
- dev-python/psycopg:2[${PYTHON_USEDEP}] |
658 |
+ dev-python/rpy[${PYTHON_USEDEP}] |
659 |
+ dev-python/setuptools[${PYTHON_USEDEP}] |
660 |
dev-python/statsmodels[${PYTHON_USEDEP}] |
661 |
- dev-python/sqlalchemy[${PYTHON_USEDEP}] |
662 |
- dev-python/xlsxwriter[${PYTHON_USEDEP}] |
663 |
+ >=dev-python/sqlalchemy-0.8.1[${PYTHON_USEDEP}] |
664 |
+ dev-python/xlrd[${PYTHON_USEDEP}] |
665 |
+ dev-python/xlwt[${PYTHON_USEDEP}] |
666 |
+ sci-libs/scipy[${PYTHON_USEDEP}] |
667 |
+ X? ( |
668 |
+ || ( |
669 |
+ dev-python/PyQt4[${PYTHON_USEDEP}] |
670 |
+ dev-python/pyside[${PYTHON_USEDEP}] |
671 |
+ dev-python/pygtk[$(python_gen_usedep python2_7)] |
672 |
+ ) |
673 |
+ || ( |
674 |
+ x11-misc/xclip |
675 |
+ x11-misc/xsel |
676 |
+ ) |
677 |
+ ) |
678 |
" |
679 |
-CDEPEND=" |
680 |
- >dev-python/numpy-1.7[${PYTHON_USEDEP}] |
681 |
- >=dev-python/python-dateutil-2.0[${PYTHON_USEDEP}] |
682 |
- !~dev-python/openpyxl-1.9.0[${PYTHON_USEDEP}]" |
683 |
-DEPEND="${CDEPEND} |
684 |
+ |
685 |
+DEPEND="${MINIMAL_DEPEND} |
686 |
+ dev-python/setuptools[${PYTHON_USEDEP}] |
687 |
+ >=dev-python/cython-0.19.1[${PYTHON_USEDEP}] |
688 |
doc? ( |
689 |
+ ${VIRTUALX_DEPEND} |
690 |
dev-python/beautifulsoup:4[${PYTHON_USEDEP}] |
691 |
- dev-python/ipython[${PYTHON_USEDEP}] |
692 |
dev-python/html5lib[${PYTHON_USEDEP}] |
693 |
+ dev-python/ipython[${PYTHON_USEDEP}] |
694 |
dev-python/lxml[${PYTHON_USEDEP}] |
695 |
dev-python/matplotlib[${PYTHON_USEDEP}] |
696 |
>=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] |
697 |
- dev-python/openpyxl[${PYTHON_USEDEP}] |
698 |
>=dev-python/pytables-3.0.0[${PYTHON_USEDEP}] |
699 |
dev-python/pytz[${PYTHON_USEDEP}] |
700 |
dev-python/rpy[${PYTHON_USEDEP}] |
701 |
- sci-libs/scipy[${PYTHON_USEDEP}] |
702 |
>=dev-python/sphinx-1.2.1[${PYTHON_USEDEP}] |
703 |
- dev-python/xlrd[$(python_gen_usedep 'python2_7')] |
704 |
- dev-python/xlwt[$(python_gen_usedep 'python2_7')] |
705 |
+ dev-python/xlrd[${PYTHON_USEDEP}] |
706 |
+ dev-python/xlwt[${PYTHON_USEDEP}] |
707 |
+ sci-libs/scipy[${PYTHON_USEDEP}] |
708 |
x11-misc/xclip |
709 |
- ) |
710 |
+ ) |
711 |
test? ( |
712 |
- ${EXTRA_DEPEND} |
713 |
+ ${VIRTUALX_DEPEND} |
714 |
+ ${RECOMMENDED_DEPEND} |
715 |
+ ${OPTIONAL_DEPEND} |
716 |
dev-python/beautifulsoup:4[${PYTHON_USEDEP}] |
717 |
dev-python/nose[${PYTHON_USEDEP}] |
718 |
+ dev-python/pymysql[${PYTHON_USEDEP}] |
719 |
+ dev-python/psycopg:2[${PYTHON_USEDEP}] |
720 |
x11-misc/xclip |
721 |
x11-misc/xsel |
722 |
- )" |
723 |
+ )" |
724 |
# dev-python/statsmodels invokes a circular dep |
725 |
# hence rm from doc? ( ), again |
726 |
-RDEPEND="${CDEPEND} |
727 |
- >=dev-python/numexpr-2.1[${PYTHON_USEDEP}] |
728 |
- dev-python/bottleneck[${PYTHON_USEDEP}] |
729 |
- dev-python/matplotlib[${PYTHON_USEDEP}] |
730 |
- dev-python/pytables[${PYTHON_USEDEP}] |
731 |
- dev-python/pytz[${PYTHON_USEDEP}] |
732 |
- sci-libs/scipy[${PYTHON_USEDEP}] |
733 |
- excel? ( |
734 |
- >=dev-python/openpyxl-1.6.1[${PYTHON_USEDEP}] |
735 |
- dev-python/xlrd[$(python_gen_usedep 'python2_7')] |
736 |
- dev-python/xlwt[$(python_gen_usedep 'python2_7')] |
737 |
- ) |
738 |
- html? ( |
739 |
- dev-python/beautifulsoup:4[${PYTHON_USEDEP}] |
740 |
- || ( |
741 |
- dev-python/lxml[${PYTHON_USEDEP}] |
742 |
- dev-python/html5lib[${PYTHON_USEDEP}] ) |
743 |
- ) |
744 |
- R? ( dev-python/rpy[${PYTHON_USEDEP}] )" |
745 |
+RDEPEND=" |
746 |
+ ${MINIMAL_DEPEND} |
747 |
+ !minimal? ( ${RECOMMENDED_DEPEND} ) |
748 |
+ full-support? ( ${OPTIONAL_DEPEND} )" |
749 |
|
750 |
python_prepare_all() { |
751 |
# Prevent un-needed download during build |
752 |
@@ -93,7 +113,7 @@ python_compile_all() { |
753 |
if use doc; then |
754 |
cd "${BUILD_DIR}"/lib || die |
755 |
cp -ar "${S}"/doc . && cd doc || die |
756 |
- LANG=C PYTHONPATH=. "${EPYTHON}" make.py html || die |
757 |
+ LANG=C PYTHONPATH=. virtx ${EPYTHON} make.py html || die |
758 |
fi |
759 |
} |
760 |
|
761 |
@@ -101,9 +121,9 @@ python_test() { |
762 |
local test_pandas='not network and not disabled' |
763 |
[[ -n "${FAST_PANDAS}" ]] && test_pandas+=' and not slow' |
764 |
pushd "${BUILD_DIR}"/lib > /dev/null |
765 |
- VIRTUALX_COMMAND="nosetests" |
766 |
- PYTHONPATH=. MPLCONFIGDIR=. HOME=. \ |
767 |
- virtualmake --verbosity=3 -A "${test_pandas}" pandas |
768 |
+ "${EPYTHON}" -c "import pandas; pandas.show_versions()" || die |
769 |
+ PYTHONPATH=. MPLCONFIGDIR=. \ |
770 |
+ virtx nosetests --verbosity=3 -A "${test_pandas}" pandas.io.tests.json.test_ujson.NumpyJSONTests |
771 |
popd > /dev/null |
772 |
} |
773 |
|
774 |
@@ -119,9 +139,19 @@ python_install_all() { |
775 |
} |
776 |
|
777 |
pkg_postinst() { |
778 |
- local x |
779 |
- elog "Please install" |
780 |
- for x in ${EXTRA_DEPEND}; do |
781 |
- optfeature "additional functionality" "${x%%[*}" |
782 |
- done |
783 |
+ optfeature "accelerating certain types of NaN evaluations, using specialized cython routines to achieve large speedups." dev-python/bottleneck |
784 |
+ optfeature "accelerating certain numerical operations, using multiple cores as well as smart chunking and caching to achieve large speedups" >=dev-python/numexpr-2.1 |
785 |
+ optfeature "needed for pandas.io.html.read_html" dev-python/beautifulsoup:4 dev-python/html5lib dev-python/lxml |
786 |
+ optfeature "for msgpack compression using ``blosc``" dev-python/blosc |
787 |
+ optfeature "necessary for Amazon S3 access" dev-python/boto |
788 |
+ 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 |
789 |
+ optfeature "Template engine for conditional HTML formatting" dev-python/jinja |
790 |
+ optfeature "Plotting support" dev-python/matplotlib |
791 |
+ optfeature "Needed for Excel I/O" >=dev-python/openpyxl-1.6.1 dev-python/xlsxwriter dev-python/xlrd dev-python/xlwt |
792 |
+ optfeature "necessary for HDF5-based storage" >=dev-python/pytables-3.2.1 |
793 |
+ optfeature "R I/O support" dev-python/rpy |
794 |
+ optfeature "Needed for parts of :mod:`pandas.stats`" dev-python/statsmodels |
795 |
+ optfeature "SQL database support" >=dev-python/sqlalchemy-0.8.1 |
796 |
+ optfeature "miscellaneous statistical functions" sci-libs/scipy |
797 |
+ 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 |
798 |
} |