Index: head/math/py-pandas/Makefile =================================================================== --- head/math/py-pandas/Makefile (revision 442023) +++ head/math/py-pandas/Makefile (revision 442024) @@ -1,120 +1,120 @@ # $FreeBSD$ PORTNAME= pandas -PORTVERSION= 0.19.2 +PORTVERSION= 0.20.1 CATEGORIES= math devel python MASTER_SITES= CHEESESHOP PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} MAINTAINER= john@saltant.com COMMENT= Flexible, high-performance data analysis in Python LICENSE= BSD3CLAUSE BUILD_DEPENDS= ${PYNUMPY} RUN_DEPENDS:= ${BUILD_DEPENDS} \ ${PYTHON_PKGNAMEPREFIX}dateutil>=1.5:devel/py-dateutil \ ${PYTHON_PKGNAMEPREFIX}pytz>0:devel/py-pytz \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3 TEST_DEPENDS:= ${RUN_DEPENDS} \ nosetests-${PYTHON_VER}:devel/py-nose \ cython:lang/cython \ ${PYTHON_PKGNAMEPREFIX}sqlalchemy10>0:databases/py-sqlalchemy10 \ ${PYTHON_PKGNAMEPREFIX}boto>0:devel/py-boto \ ${PYTHON_PKGNAMEPREFIX}lxml>0:devel/py-lxml \ ${PYTHON_PKGNAMEPREFIX}tables>=3.0.0:devel/py-tables \ ${PYTHON_PKGNAMEPREFIX}bottleneck>0:math/py-bottleneck \ ${PYTHON_PKGNAMEPREFIX}matplotlib>0:math/py-matplotlib \ - ${PYTHON_PKGNAMEPREFIX}numexpr>=2.1.0:math/py-numexpr \ + ${PYTHON_PKGNAMEPREFIX}numexpr>=2.4.6:math/py-numexpr \ ${PYTHON_PKGNAMEPREFIX}scipy>0:science/py-scipy \ ${PYTHON_PKGNAMEPREFIX}openpyxl>=2.2.0:textproc/py-openpyxl \ ${PYTHON_PKGNAMEPREFIX}xlrd>0:textproc/py-xlrd \ ${PYTHON_PKGNAMEPREFIX}xlwt>0:textproc/py-xlwt \ ${PYTHON_PKGNAMEPREFIX}XlsxWriter>0:textproc/py-xlsxwriter \ ${PYTHON_PKGNAMEPREFIX}beautifulsoup>0:www/py-beautifulsoup \ ${PYTHON_PKGNAMEPREFIX}html5lib>0:www/py-html5lib \ ${PYTHON_PKGNAMEPREFIX}Jinja2>0:devel/py-Jinja2 # Note: we cannot include math/py-statsmodels in TEST_DEPENDS because it # depends upon us for BUILD and RUN. OPTIONS_DEFINE= MPL SCIPY OPTIONS_GROUP= ACCEL STORAGE HTML EXCEL OPTIONS_RADIO= SQL OPTIONS_GROUP_ACCEL= BTLNCK NUMEXPR OPTIONS_GROUP_STORAGE= BOTO TABLES OPTIONS_GROUP_HTML= LXML HTML5LIB JINJA2 OPTIONS_GROUP_EXCEL= XLRD XLWT OPENPYXL XLSX OPTIONS_RADIO_SQL= ALCHEMY10 ALCHEMY11 OPTIONS_DEFAULT= BTLNCK NUMEXPR MPL_DESC= Support graphical plotting output via math/py-matplotlib SCIPY_DESC= Support various statistical functions via science/py-scipy BTLNCK_DESC= Accelerate certain NaN evals via math/py-bottleneck NUMEXPR_DESC= Accelerate certain numerical ops via math/py-numexpr BOTO_DESC= Support Amazon S3 storage via devel/py-boto TABLES_DESC= Support HDF5-based storage via devel/py-tables LXML_DESC= Parse HTML with devel/py-lxml and www/py-beautifulsoup JINJA2_DESC= Support conditional HTML formatting with devel/py-Jinja2 HTML5LIB_DESC= Parse HTML with www/py-html5lib and www/py-beautifulsoup OPENPYXL_DESC= Read/write MS Excel 2007+ with textproc/py-openpyxl XLRD_DESC= Read MS Excel with textproc/py-xlrd XLWT_DESC= Write MS Excel with textproc/py-xlwt XLSX_DESC= Write MS Excel with textproc/py-xlsxwriter ALCHEMY10_DESC= Support SQL databases via databases/py-sqlalchemy10 ALCHEMY11_DESC= Support SQL databases via databases/py-sqlalchemy11 ACCEL_DESC= Computation Acceleration Add-ons STORAGE_DESC= Data Storage Add-ons SQL_DESC= SQLAlchemy ORM Add-ons HTML_DESC= HTML Parsing/Generation Add-ons EXCEL_DESC= MS Excel I/O Add-ons MPL_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}matplotlib>0:math/py-matplotlib SCIPY_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}scipy>0:science/py-scipy BTLNCK_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}bottleneck>0:math/py-bottleneck -NUMEXPR_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}numexpr>=2.1.0:math/py-numexpr +NUMEXPR_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}numexpr>=2.4.6:math/py-numexpr BOTO_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}boto>0:devel/py-boto TABLES_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}tables>=3.0.0:devel/py-tables LXML_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}lxml>0:devel/py-lxml HTML5LIB_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}html5lib>0:www/py-html5lib JINJA2_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Jinja2>0:devel/py-Jinja2 OPENPYXL_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}openpyxl>=2.2.0:textproc/py-openpyxl XLRD_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}xlrd>0:textproc/py-xlrd XLWT_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}xlwt>0:textproc/py-xlwt XLSX_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}XlsxWriter>0:textproc/py-xlsxwriter ALCHEMY10_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlalchemy10>0:databases/py-sqlalchemy10 ALCHEMY11_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlalchemy11>0:databases/py-sqlalchemy11 .include .if ${PORT_OPTIONS:MLXML} || ${PORT_OPTIONS:MHTML5LIB} RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}beautifulsoup>0:www/py-beautifulsoup .endif SUB_FILES= pkg-message USES= python USE_PYTHON= autoplist distutils # Uncomment the following line to enable regression-test # on a headless (X11-less) host (eg: RedPorts) #USES+= display:regression-test XUNITFILE= ${WRKDIR}/nosetests.xml NOSE_ENV= http_proxy=${HTTP_PROXY} NOSE_ARGS= ${PORTNAME} --exe --with-xunit --xunit-file=${XUNITFILE} post-install: @${FIND} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} \ -name '*.so' -exec ${STRIP_CMD} {} + regression-test: build @(cd ${WRKSRC} && \ ${PYTHON_CMD} ${PYSETUP} build_ext --inplace && \ ${PYTHON_CMD} -c 'import pandas.util.print_versions as pv; pv.show_versions()' && \ ( ${SETENV} ${NOSE_ENV} nosetests-${PYTHON_VER} ${NOSE_ARGS} || ${TRUE} ) && \ ${PYTHON_CMD} ${SCRIPTDIR}/print_skipped.py ${XUNITFILE} \ ) .include Index: head/math/py-pandas/distinfo =================================================================== --- head/math/py-pandas/distinfo (revision 442023) +++ head/math/py-pandas/distinfo (revision 442024) @@ -1,3 +1,3 @@ -TIMESTAMP = 1483953650 -SHA256 (pandas-0.19.2.tar.gz) = 6f0f4f598c2b16746803c8bafef7c721c57e4844da752d36240c0acf97658014 -SIZE (pandas-0.19.2.tar.gz) = 9222964 +TIMESTAMP = 1495907492 +SHA256 (pandas-0.20.1.tar.gz) = 42707365577ef69f7c9c168ddcf045df2957595a9ee71bc13c7997eecb96b190 +SIZE (pandas-0.20.1.tar.gz) = 10307434 Index: head/math/py-pandas/files/patch-pandas_tests_io_test__html.py =================================================================== --- head/math/py-pandas/files/patch-pandas_tests_io_test__html.py (nonexistent) +++ head/math/py-pandas/files/patch-pandas_tests_io_test__html.py (revision 442024) @@ -0,0 +1,62 @@ +Reported upstream + +Various py3k test failures in tests.io.test_html with US-ASCII +preferred encoding +https://github.com/pandas-dev/pandas/issues/16525 + +--- pandas/tests/io/test_html.py.orig 2017-05-04 14:53:46 UTC ++++ pandas/tests/io/test_html.py +@@ -20,7 +20,7 @@ from numpy.random import rand + from pandas import (DataFrame, MultiIndex, read_csv, Timestamp, Index, + date_range, Series) + from pandas.compat import (map, zip, StringIO, string_types, BytesIO, +- is_platform_windows) ++ is_platform_windows, PY3) + from pandas.io.common import URLError, urlopen, file_path_to_url + from pandas.io.html import read_html + from pandas._libs.parsers import ParserError +@@ -96,6 +96,9 @@ class ReadHtmlMixin(object): + class TestReadHtml(ReadHtmlMixin): + flavor = 'bs4' + spam_data = os.path.join(DATA_PATH, 'spam.html') ++ spam_data_kwargs = {} ++ if PY3: ++ spam_data_kwargs['encoding'] = 'UTF-8' + banklist_data = os.path.join(DATA_PATH, 'banklist.html') + + @classmethod +@@ -247,10 +250,10 @@ class TestReadHtml(ReadHtmlMixin): + assert_framelist_equal(df1, df2) + + def test_string_io(self): +- with open(self.spam_data) as f: ++ with open(self.spam_data, **self.spam_data_kwargs) as f: + data1 = StringIO(f.read()) + +- with open(self.spam_data) as f: ++ with open(self.spam_data, **self.spam_data_kwargs) as f: + data2 = StringIO(f.read()) + + df1 = self.read_html(data1, '.*Water.*') +@@ -258,7 +261,7 @@ class TestReadHtml(ReadHtmlMixin): + assert_framelist_equal(df1, df2) + + def test_string(self): +- with open(self.spam_data) as f: ++ with open(self.spam_data, **self.spam_data_kwargs) as f: + data = f.read() + + df1 = self.read_html(data, '.*Water.*') +@@ -267,10 +270,10 @@ class TestReadHtml(ReadHtmlMixin): + assert_framelist_equal(df1, df2) + + def test_file_like(self): +- with open(self.spam_data) as f: ++ with open(self.spam_data, **self.spam_data_kwargs) as f: + df1 = self.read_html(f, '.*Water.*') + +- with open(self.spam_data) as f: ++ with open(self.spam_data, **self.spam_data_kwargs) as f: + df2 = self.read_html(f, 'Unit') + + assert_framelist_equal(df1, df2) Property changes on: head/math/py-pandas/files/patch-pandas_tests_io_test__html.py ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/math/py-pandas/files/patch-pandas_tests_io_test__sql.py =================================================================== --- head/math/py-pandas/files/patch-pandas_tests_io_test__sql.py (nonexistent) +++ head/math/py-pandas/files/patch-pandas_tests_io_test__sql.py (revision 442024) @@ -0,0 +1,21 @@ +Reported upstream + +TestSQLApi/TestSQLApiConn::test_database_uri_string errors if pg8000 +is installed +https://github.com/pandas-dev/pandas/issues/16527 + +--- pandas/tests/io/test_sql.py.orig 2017-05-28 19:28:19 UTC ++++ pandas/tests/io/test_sql.py +@@ -938,6 +938,12 @@ class TestSQLApi(SQLAlchemyMixIn, _TestS + + # using driver that will not be installed on Travis to trigger error + # in sqlalchemy.create_engine -> test passing of this error to user ++ try: ++ import pg8000 ++ pytest.skip("pg8000 is installed") ++ except ImportError: ++ pass ++ + db_uri = "postgresql+pg8000://user:pass@host/dbname" + with tm.assert_raises_regex(ImportError, "pg8000"): + sql.read_sql("select * from table", db_uri) Property changes on: head/math/py-pandas/files/patch-pandas_tests_io_test__sql.py ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/math/py-pandas/scripts/print_skipped.py =================================================================== --- head/math/py-pandas/scripts/print_skipped.py (revision 442023) +++ head/math/py-pandas/scripts/print_skipped.py (revision 442024) @@ -1,51 +1,52 @@ #!/usr/bin/env python import sys import math import xml.etree.ElementTree as et def parse_results(filename): tree = et.parse(filename) root = tree.getroot() skipped = [] current_class = old_class = '' i = 1 assert i - 1 == len(skipped) for el in root.findall('testcase'): cn = el.attrib['classname'] for sk in el.findall('skipped'): old_class = current_class current_class = cn name = '{classname}.{name}'.format(classname=current_class, name=el.attrib['name']) msg = sk.attrib['message'] out = '' if old_class != current_class: ndigits = int(math.log(i, 10) + 1) out += ('-' * (len(name + msg) + 4 + ndigits) + '\n') # 4 for : + space + # + space out += '#{i} {name}: {msg}'.format(i=i, name=name, msg=msg) skipped.append(out) i += 1 assert i - 1 == len(skipped) assert i - 1 == len(skipped) - assert len(skipped) == int(root.attrib['skip']) + # assert len(skipped) == int(root.attrib['skip']) return '\n'.join(skipped) def main(args): print('SKIPPED TESTS:') - print(parse_results(args.filename)) + for fn in args.filename: + print(parse_results(fn)) return 0 def parse_args(): import argparse parser = argparse.ArgumentParser() - parser.add_argument('filename', help='XUnit file to parse') + parser.add_argument('filename', nargs='+', help='XUnit file to parse') return parser.parse_args() if __name__ == '__main__': sys.exit(main(parse_args()))