diff --git a/math/py-pandas/Makefile b/math/py-pandas/Makefile index bc1ec0b58180..862ae0cf7d6d 100644 --- a/math/py-pandas/Makefile +++ b/math/py-pandas/Makefile @@ -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 diff --git a/math/py-pandas/distinfo b/math/py-pandas/distinfo index 801067cb77a9..9e182f598e03 100644 --- a/math/py-pandas/distinfo +++ b/math/py-pandas/distinfo @@ -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 diff --git a/math/py-pandas/files/patch-MANIFEST.in b/math/py-pandas/files/patch-MANIFEST.in deleted file mode 100644 index a1be3c7ae2dc..000000000000 --- a/math/py-pandas/files/patch-MANIFEST.in +++ /dev/null @@ -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 diff --git a/math/py-pandas/files/patch-pandas-issue4353-pullrequest4356 b/math/py-pandas/files/patch-pandas-issue4353-pullrequest4356 deleted file mode 100644 index 40e463255678..000000000000 --- a/math/py-pandas/files/patch-pandas-issue4353-pullrequest4356 +++ /dev/null @@ -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] diff --git a/math/py-pandas/files/pkg-message.in b/math/py-pandas/files/pkg-message.in index 8ca8b7ed55eb..09f5e907da6a 100644 --- a/math/py-pandas/files/pkg-message.in +++ b/math/py-pandas/files/pkg-message.in @@ -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/ ===