From 8b8969eaddc13575b68691b065fd48ab5d4f4bc2 Mon Sep 17 00:00:00 2001 From: Jeff Reback Date: Fri, 5 May 2017 05:56:33 -0400 Subject: [PATCH] TST: test that we work in downstream packages --- ci/requirements-2.7.sh | 2 +- ci/requirements-2.7_BUILD_TEST.pip | 9 ++++ ci/requirements-2.7_BUILD_TEST.sh | 7 +++ pandas/tests/test_downstream.py | 85 ++++++++++++++++++++++++++++++ pandas/types/common.py | 8 +++ pandas/util/decorators.py | 8 +++ pandas/util/hashing.py | 18 +++++++ 7 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 ci/requirements-2.7_BUILD_TEST.pip create mode 100755 ci/requirements-2.7_BUILD_TEST.sh create mode 100644 pandas/tests/test_downstream.py create mode 100644 pandas/types/common.py create mode 100644 pandas/util/decorators.py create mode 100644 pandas/util/hashing.py diff --git a/ci/requirements-2.7.sh b/ci/requirements-2.7.sh index 64d470e5c6e0e..96a83c083f735 100644 --- a/ci/requirements-2.7.sh +++ b/ci/requirements-2.7.sh @@ -2,6 +2,6 @@ source activate pandas -echo "install 27" +echo "install 27 BUILD_TEST" conda install -n pandas -c conda-forge feather-format diff --git a/ci/requirements-2.7_BUILD_TEST.pip b/ci/requirements-2.7_BUILD_TEST.pip new file mode 100644 index 0000000000000..1d293162de16f --- /dev/null +++ b/ci/requirements-2.7_BUILD_TEST.pip @@ -0,0 +1,9 @@ +xarray +geopandas +dask +toolz +seaborn +pandas_gbq +pandas_datareader +statsmodels +scikit-learn diff --git a/ci/requirements-2.7_BUILD_TEST.sh b/ci/requirements-2.7_BUILD_TEST.sh new file mode 100755 index 0000000000000..d6283a4453f22 --- /dev/null +++ b/ci/requirements-2.7_BUILD_TEST.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +source activate pandas + +echo "install 27" + +conda install -n pandas -c conda-forge pyarrow diff --git a/pandas/tests/test_downstream.py b/pandas/tests/test_downstream.py new file mode 100644 index 0000000000000..5da306d250cbd --- /dev/null +++ b/pandas/tests/test_downstream.py @@ -0,0 +1,85 @@ +""" +Testing that we work in the downstream packages +""" +import pytest +import numpy as np +from pandas import DataFrame +from pandas.util import testing as tm + + +@pytest.fixture +def df(): + return DataFrame({'A': [1, 2, 3]}) + + +def test_dask(df): + + toolz = pytest.importorskip('toolz') # noqa + dask = pytest.importorskip('dask') # noqa + + import dask.dataframe as dd + + ddf = dd.from_pandas(df) + assert ddf.A is not None + assert ddf.compute() + + +def test_xarray(df): + + xarray = pytest.importorskip('xarray') # noqa + + assert df.to_xarray() is not None + + +def test_statsmodels(): + + statsmodels = pytest.importorskip('statsmodels') # noqa + import statsmodels.api as sm + import statsmodels.formula.api as smf + df = sm.datasets.get_rdataset("Guerry", "HistData").data + smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=df).fit() + + +def test_scikit_learn(df): + + sklearn = pytest.importorskip('sklearn') # noqa + from sklearn import svm, datasets + + digits = datasets.load_digits() + clf = svm.SVC(gamma=0.001, C=100.) + clf.fit(digits.data[:-1], digits.target[:-1]) + clf.predict(digits.data[-1:]) + + +def test_seaborn(): + + seaborn = pytest.importorskip('seaborn') + tips = seaborn.load_dataset("tips") + seaborn.stripplot(x="day", y="total_bill", data=tips) + + +def test_pandas_gbq(df): + + pandas_gbq = pytest.importorskip('pandas-gbq') # noqa + + +@tm.network +def test_pandas_datareader(): + + pandas_datareader = pytest.importorskip('pandas-datareader') # noqa + pandas_datareader.get_data_yahoo('AAPL') + + +def test_geopandas(): + + geopandas = pytest.importorskip('geopandas') # noqa + fp = geopandas.datasets.get_path('naturalearth_lowres') + assert geopandas.read_file(fp) is not None + + +def test_pyarrow(df): + + pyarrow = pytest.importorskip('pyarrow') # noqa + table = pyarrow.Table.from_pandas(df) + result = table.to_pandas() + tm.assert_frame_equal(result, df) diff --git a/pandas/types/common.py b/pandas/types/common.py new file mode 100644 index 0000000000000..94089df7d749e --- /dev/null +++ b/pandas/types/common.py @@ -0,0 +1,8 @@ +import warnings + +warnings.warn("pandas.types.common is deprecated and will be " + "removed in a future version, import " + "from pandas.api.types", + DeprecationWarning, stacklevel=3) + +from pandas.core.dtypes.common import * diff --git a/pandas/util/decorators.py b/pandas/util/decorators.py new file mode 100644 index 0000000000000..323f5c9a839b5 --- /dev/null +++ b/pandas/util/decorators.py @@ -0,0 +1,8 @@ +import warnings + +warnings.warn("pandas.util.decorators is deprecated and will be " + "removed in a future version, import " + "from pandas.util", + DeprecationWarning, stacklevel=3) + +from pandas.util import cache_readonly diff --git a/pandas/util/hashing.py b/pandas/util/hashing.py new file mode 100644 index 0000000000000..f97a7ac507407 --- /dev/null +++ b/pandas/util/hashing.py @@ -0,0 +1,18 @@ +import warnings +import sys + +m = sys.modules['pandas.util.hashing'] +for t in ['hash_pandas_object', 'hash_array']: + + def outer(t=t): + + def wrapper(*args, **kwargs): + from pandas import util + warnings.warn("pandas.util.hashing is deprecated and will be " + "removed in a future version, import " + "from pandas.util", + DeprecationWarning, stacklevel=3) + return getattr(util, t)(*args, **kwargs) + return wrapper + + setattr(m, t, outer(t))