- 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:
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
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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]
|
|
@ -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/
|
||||
===
|
||||
|
|
Loading…
Reference in a new issue