- update to 0.13.0

- remove patches, included upstream
- abandon easy_install and use auto-generated packing list
- update pkg-message and TEST_DEPENDS to reflect current recommendations and
  port availability
- add erroneously-omitted lang/cython to TEST_DEPENDS (for 'build_ext -i')
- conform regression-test target to upstream test procedure

while here:
- add lang/cpython as build dependency - C-extension will not be build w/o it
  and the whole build procedure failing.
- update LICENSE (BSD3CLAUSE)

PR:		185803
Submitted by:	"John W. O'Brien" <john@saltant.com> (maintainer)
This commit is contained in:
Ruslan Makhmatkhanov 2014-02-09 15:21:24 +00:00
parent 683f48c7a2
commit 2a8d43474f
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=343512
5 changed files with 27 additions and 197 deletions

View file

@ -1,8 +1,7 @@
# $FreeBSD$
PORTNAME= pandas
PORTVERSION= 0.12.0
PORTREVISION= 2
PORTVERSION= 0.13.0
CATEGORIES= math devel python
MASTER_SITES= CHEESESHOP
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
@ -10,14 +9,16 @@ PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
MAINTAINER= john@saltant.com
COMMENT= Flexible, high-performance data analysis in Python
LICENSE= BSD
LICENSE= BSD3CLAUSE
BUILD_DEPENDS= ${PYNUMPY}
BUILD_DEPENDS= ${PYNUMPY} \
cython:${PORTSDIR}/lang/cython
RUN_DEPENDS:= ${BUILD_DEPENDS} \
${PYTHON_PKGNAMEPREFIX}dateutil>0:${PORTSDIR}/devel/py-dateutil \
${PYTHON_PKGNAMEPREFIX}pytz>0:${PORTSDIR}/devel/py-pytz \
${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3
TEST_DEPENDS= nosetests:${PORTSDIR}/devel/py-nose \
cython:${PORTSDIR}/lang/cython \
${PYTHON_PKGNAMEPREFIX}numexpr>0:${PORTSDIR}/math/py-numexpr \
${PYTHON_PKGNAMEPREFIX}tables>0:${PORTSDIR}/devel/py-tables \
${PYTHON_PKGNAMEPREFIX}scipy>0:${PORTSDIR}/science/py-scipy \
@ -25,6 +26,8 @@ TEST_DEPENDS= nosetests:${PORTSDIR}/devel/py-nose \
${PYTHON_PKGNAMEPREFIX}xlrd>0:${PORTSDIR}/textproc/py-xlrd \
${PYTHON_PKGNAMEPREFIX}xlwt>0:${PORTSDIR}/textproc/py-xlwt \
${PYTHON_PKGNAMEPREFIX}openpyxl>0:${PORTSDIR}/textproc/py-openpyxl \
${PYTHON_PKGNAMEPREFIX}statsmodels>0:${PORTSDIR}/math/py-statsmodels \
${PYTHON_PKGNAMEPREFIX}bottleneck>0:${PORTSDIR}/math/py-bottleneck \
${PYTHON_PKGNAMEPREFIX}beautifulsoup>0:${PORTSDIR}/www/py-beautifulsoup \
${PYTHON_PKGNAMEPREFIX}html5lib>0:${PORTSDIR}/www/py-html5lib \
${PYTHON_PKGNAMEPREFIX}lxml>0:${PORTSDIR}/devel/py-lxml
@ -32,9 +35,8 @@ TEST_DEPENDS= nosetests:${PORTSDIR}/devel/py-nose \
SUB_FILES= pkg-message
USE_PYTHON= yes
USE_PYDISTUTILS= easy_install
USE_PYDISTUTILS= yes
PYDISTUTILS_AUTOPLIST= yes
PYEASYINSTALL_ARCHDEP= yes
# Uncomment the following line to enable regression-test
# on a headless (X11-less) host (eg: RedPorts)
@ -43,7 +45,9 @@ PYEASYINSTALL_ARCHDEP= yes
regression-test: build
@(cd ${WRKSRC} && \
${PYTHON_CMD} ${PYSETUP} build_ext --inplace && \
${PYTHON_CMD} ${PYSETUP} nosetests \
${PYTHON_CMD} ci/print_versions.py \
ci/script.sh \
${PYTHON_CMD} ci/print_skipped.py \
)
.include <bsd.port.mk>

View file

@ -1,2 +1,2 @@
SHA256 (pandas-0.12.0.tar.gz) = be9b4c3611801b366873531bc87a87dd16b19e7d78fa84c21898cd007931c86d
SIZE (pandas-0.12.0.tar.gz) = 3155059
SHA256 (pandas-0.13.0.tar.gz) = f034cd298e0d68fee24a2b0a68a9b8da41978d6f39474f908f7f352904ef7f3c
SIZE (pandas-0.13.0.tar.gz) = 3572047

View file

@ -1,12 +0,0 @@
--- ./MANIFEST.in.orig 2013-07-27 06:55:55.000000000 -0400
+++ ./MANIFEST.in 2013-07-27 06:56:02.000000000 -0400
@@ -2,9 +2,7 @@
include LICENSE
include RELEASE.md
include README.rst
-include TODO.rst
include setup.py
-include setupegg.py
graft doc
prune doc/build

View file

@ -1,162 +0,0 @@
This patch is adapted from the following upstream commit.
[PATCH] TST/BUG/CLN: make stata IO tests use temporary files for writing
c98e09951f74bf3445f8144363afaa769be69940
--- pandas/io/tests/test_stata.py.orig
+++ pandas/io/tests/test_stata.py
@@ -10,9 +10,8 @@ import numpy as np
from pandas.core.frame import DataFrame, Series
from pandas.io.parsers import read_csv
-from pandas.io.stata import read_stata, StataReader, StataWriter
+from pandas.io.stata import read_stata, StataReader
import pandas.util.testing as tm
-from pandas.util.testing import ensure_clean
from pandas.util.misc import is_little_endian
@@ -27,15 +26,12 @@ class StataTests(unittest.TestCase):
self.dta3 = os.path.join(self.dirpath, 'stata3.dta')
self.csv3 = os.path.join(self.dirpath, 'stata3.csv')
self.dta4 = os.path.join(self.dirpath, 'stata4.dta')
- self.dta5 = os.path.join(self.dirpath, 'stata5.dta')
- self.dta6 = os.path.join(self.dirpath, 'stata6.dta')
self.dta7 = os.path.join(self.dirpath, 'cancer.dta')
self.csv7 = os.path.join(self.dirpath, 'cancer.csv')
self.dta8 = os.path.join(self.dirpath, 'tbl19-3.dta')
self.csv8 = os.path.join(self.dirpath, 'tbl19-3.csv')
self.dta9 = os.path.join(self.dirpath, 'lbw.dta')
self.csv9 = os.path.join(self.dirpath, 'lbw.csv')
- self.dta10 = os.path.join(self.dirpath, 'stata10.dta')
def read_dta(self, file):
return read_stata(file, convert_dates=True)
@@ -46,9 +42,11 @@ class StataTests(unittest.TestCase):
def test_read_dta1(self):
reader = StataReader(self.dta1)
parsed = reader.data()
- # Pandas uses np.nan as missing value. Thus, all columns will be of type float, regardless of their name.
+ # Pandas uses np.nan as missing value.
+ # Thus, all columns will be of type float, regardless of their name.
expected = DataFrame([(np.nan, np.nan, np.nan, np.nan, np.nan)],
- columns=['float_miss', 'double_miss', 'byte_miss', 'int_miss', 'long_miss'])
+ columns=['float_miss', 'double_miss', 'byte_miss',
+ 'int_miss', 'long_miss'])
for i, col in enumerate(parsed.columns):
np.testing.assert_almost_equal(
@@ -90,7 +88,9 @@ class StataTests(unittest.TestCase):
np.datetime64('NaT')
)
],
- columns=['datetime_c', 'datetime_big_c', 'date', 'weekly_date', 'monthly_date', 'quarterly_date', 'half_yearly_date', 'yearly_date']
+ columns=['datetime_c', 'datetime_big_c', 'date', 'weekly_date',
+ 'monthly_date', 'quarterly_date', 'half_yearly_date',
+ 'yearly_date']
)
with warnings.catch_warnings(record=True) as w:
@@ -125,34 +125,40 @@ class StataTests(unittest.TestCase):
["nine", "two", 9, np.nan, "nine"],
["ten", "one", "ten", np.nan, "ten"]
],
- columns=['fully_labeled', 'fully_labeled2', 'incompletely_labeled', 'labeled_with_missings', 'float_labelled'])
+ columns=['fully_labeled', 'fully_labeled2', 'incompletely_labeled',
+ 'labeled_with_missings', 'float_labelled'])
tm.assert_frame_equal(parsed, expected)
- def test_write_dta5(self):
+ def test_read_write_dta5(self):
if not is_little_endian():
- raise nose.SkipTest("known failure of test_write_dta5 on non-little endian")
+ raise nose.SkipTest("known failure of test_write_dta5 on "
+ "non-little endian")
original = DataFrame([(np.nan, np.nan, np.nan, np.nan, np.nan)],
- columns=['float_miss', 'double_miss', 'byte_miss', 'int_miss', 'long_miss'])
+ columns=['float_miss', 'double_miss', 'byte_miss',
+ 'int_miss', 'long_miss'])
original.index.name = 'index'
- with ensure_clean(self.dta5) as path:
+ with tm.ensure_clean() as path:
original.to_stata(path, None, False)
written_and_read_again = self.read_dta(path)
- tm.assert_frame_equal(written_and_read_again.set_index('index'), original)
+ tm.assert_frame_equal(written_and_read_again.set_index('index'),
+ original)
def test_write_dta6(self):
if not is_little_endian():
- raise nose.SkipTest("known failure of test_write_dta6 on non-little endian")
+ raise nose.SkipTest("known failure of test_write_dta6 on "
+ "non-little endian")
original = self.read_csv(self.csv3)
original.index.name = 'index'
- with ensure_clean(self.dta6) as path:
+ with tm.ensure_clean() as path:
original.to_stata(path, None, False)
written_and_read_again = self.read_dta(path)
- tm.assert_frame_equal(written_and_read_again.set_index('index'), original)
+ tm.assert_frame_equal(written_and_read_again.set_index('index'),
+ original)
@nose.tools.nottest
def test_read_dta7(self):
@@ -190,29 +196,30 @@ class StataTests(unittest.TestCase):
decimal=3
)
- def test_read_dta10(self):
+ def test_read_write_dta10(self):
if not is_little_endian():
- raise nose.SkipTest("known failure of test_write_dta10 on non-little endian")
+ raise nose.SkipTest("known failure of test_write_dta10 on "
+ "non-little endian")
- original = DataFrame(
- data=
- [
- ["string", "object", 1, 1.1, np.datetime64('2003-12-25')]
- ],
- columns=['string', 'object', 'integer', 'float', 'datetime'])
+ original = DataFrame(data=[["string", "object", 1, 1.1,
+ np.datetime64('2003-12-25')]],
+ columns=['string', 'object', 'integer', 'float',
+ 'datetime'])
original["object"] = Series(original["object"], dtype=object)
original.index.name = 'index'
- with ensure_clean(self.dta10) as path:
+ with tm.ensure_clean() as path:
original.to_stata(path, {'datetime': 'tc'}, False)
written_and_read_again = self.read_dta(path)
- tm.assert_frame_equal(written_and_read_again.set_index('index'), original)
+ tm.assert_frame_equal(written_and_read_again.set_index('index'),
+ original)
def test_stata_doc_examples(self):
- with ensure_clean(self.dta5) as path:
+ with tm.ensure_clean() as path:
df = DataFrame(np.random.randn(10, 2), columns=list('AB'))
df.to_stata(path)
+
if __name__ == '__main__':
nose.runmodule(argv=[__file__, '-vvs', '-x', '--pdb', '--pdb-failure'],
exit=False)
--- pandas/util/testing.py.orig
+++ pandas/util/testing.py
@@ -86,7 +86,7 @@ def set_trace():
#------------------------------------------------------------------------------
# contextmanager to ensure the file cleanup
@contextmanager
-def ensure_clean(filename = None):
+def ensure_clean(filename=None):
# if we are not passed a filename, generate a temporary
if filename is None:
filename = tempfile.mkstemp()[1]

View file

@ -2,16 +2,21 @@
Note that the following ports are not strict dependencies but are highly
recommended to get the most out of pandas. Install them as needed.
numexpr math/py-numexpr
scipy science/py-scipy
pytables devel/py-tables
matplotlib math/py-matplotlib
xlrd textproc/py-xlrd
xlwt textproc/py-xlwt
openpyxl textproc/py-openpyxl
Library Port origin Purpose
------- ----------- -------
boto devel/py-boto access Amazon S3
pytables devel/py-tables necessary for HDF5-based storage
bottleneck math/py-bottleneck accelerate certain NaN evals
matplotlib math/py-matplotlib plotting
numexpr math/py-numexpr accelerate certain numerical ops
statsmodels math/py-statsmodels enables parts of pandas.stats
scipy science/py-scipy misc. statistical functions
openpyxl textproc/py-openpyxl Excel 2007+ I/O
xlrd textproc/py-xlrd Excel input
xlwt textproc/py-xlwt Excel output
To use the HTML table parsing capabilities that are new to 0.12.0, you
will need to install
To use the HTML table parsing capabilities that were introduced in
pandas 0.12.0, you will need to install
beautifulsoup www/py-beautifulsoup
@ -23,9 +28,4 @@ lxml devel/py-lxml
Please read the pandas documentation before deciding:
http://pandas.pydata.org/pandas-docs/stable/gotchas.html#html-gotchas
Also recommended, but not yet available in ports are:
bottleneck http://berkeleyanalytics.com/bottleneck/
scikits.statsmodels http://statsmodels.sourceforge.net/
===