diff --git a/doc/developers/utilities.rst b/doc/developers/utilities.rst index daf1edfc1177df00eb9b09d5b40bf4b418b5d6ab..6353373d686a66aaefae726a93f59e1fa115fbc1 100644 --- a/doc/developers/utilities.rst +++ b/doc/developers/utilities.rst @@ -239,8 +239,8 @@ Benchmarking Testing Functions ================= -- :func:`testing.assert_in`: Compare string elements within lists. - Used in :mod:`sklearn.datasets` tests. +- :func:`testing.assert_in`, :func:`testing.assert_not_in`: Assertions for + container membership. Designed for forward compatibility with Nose 1.0. - :class:`mock_urllib2`: Object which mocks the urllib2 module to fake requests of mldata. Used in tests of :mod:`sklearn.datasets`. diff --git a/sklearn/datasets/tests/test_mldata.py b/sklearn/datasets/tests/test_mldata.py index e6c4e30fb3af1c9446d444c53c19400195942311..a9771f1f64f206cc4d56e093599a151b407defcc 100644 --- a/sklearn/datasets/tests/test_mldata.py +++ b/sklearn/datasets/tests/test_mldata.py @@ -2,7 +2,7 @@ from sklearn import datasets from sklearn.datasets import mldata_filename, fetch_mldata -from sklearn.utils.testing import (assert_in, mock_urllib2) +from sklearn.utils.testing import assert_in, assert_not_in, mock_urllib2 from nose.tools import assert_equal, assert_raises from nose import with_setup from numpy.testing import assert_array_equal @@ -47,7 +47,8 @@ def test_download(): 'data': sp.ones((150, 4))}}) try: mock = fetch_mldata('mock', data_home=tmpdir) - assert_in(mock, in_=['COL_NAMES', 'DESCR', 'target', 'data']) + for n in ["COL_NAMES", "DESCR", "target", "data"]: + assert_in(n, mock) assert_equal(mock.target.shape, (150,)) assert_equal(mock.data.shape, (150, 4)) @@ -68,7 +69,9 @@ def test_fetch_one_column(): datasets.mldata.urllib2 = mock_urllib2({dataname: {'x': x}}) dset = fetch_mldata(dataname, data_home=tmpdir) - assert_in(dset, in_=['COL_NAMES', 'DESCR', 'data'], out_=['target']) + for n in ["COL_NAMES", "DESCR", "data"]: + assert_in(n, dset) + assert_not_in("target", dset) assert_equal(dset.data.shape, (2, 3)) assert_array_equal(dset.data, x) @@ -98,8 +101,10 @@ def test_fetch_multiple_column(): ['z', 'data', 'label'])}) dset = fetch_mldata(dataname, data_home=tmpdir) - assert_in(dset, in_=['COL_NAMES', 'DESCR', 'target', 'data', 'z'], - out_=['x', 'y']) + for n in ["COL_NAMES", "DESCR", "target", "data", "z"]: + assert_in(n, dset) + assert_not_in("x", dset) + assert_not_in("y", dset) assert_array_equal(dset.data, x) assert_array_equal(dset.target, y) @@ -114,8 +119,11 @@ def test_fetch_multiple_column(): ['y', 'x', 'z'])}) dset = fetch_mldata(dataname, data_home=tmpdir) - assert_in(dset, in_=['COL_NAMES', 'DESCR', 'target', 'data', 'z'], - out_=['x', 'y']) + for n in ["COL_NAMES", "DESCR", "target", "data", "z"]: + assert_in(n, dset) + assert_not_in("x", dset) + assert_not_in("y", dset) + assert_array_equal(dset.data, x) assert_array_equal(dset.target, y) assert_array_equal(dset.z, z.T) @@ -130,17 +138,21 @@ def test_fetch_multiple_column(): dset = fetch_mldata(dataname, target_name=2, data_name=0, data_home=tmpdir) - assert_in(dset, in_=['COL_NAMES', 'DESCR', 'target', 'data', 'x'], - out_=['z', 'y']) + for n in ["COL_NAMES", "DESCR", "target", "data", "x"]: + assert_in(n, dset) + assert_not_in("y", dset) + assert_not_in("z", dset) + assert_array_equal(dset.data, z) assert_array_equal(dset.target, y) # by name dset = fetch_mldata(dataname, target_name='y', data_name='z', data_home=tmpdir) - assert_in(dset, in_=['COL_NAMES', 'DESCR', 'target', 'data', 'x'], - out_=['z', 'y']) - assert_array_equal(dset.data, z) - assert_array_equal(dset.target, y) + for n in ["COL_NAMES", "DESCR", "target", "data", "x"]: + assert_in(n, dset) + assert_not_in("y", dset) + assert_not_in("z", dset) + finally: datasets.mldata.urllib2 = _urllib2_ref diff --git a/sklearn/utils/testing.py b/sklearn/utils/testing.py index df78ad24645d17d9bbbd36c6eeb546dfb6e5d452..2e9ba6165808445d15772c2a2c0f0c82aba504fc 100644 --- a/sklearn/utils/testing.py +++ b/sklearn/utils/testing.py @@ -9,15 +9,17 @@ from StringIO import StringIO import scipy as sp -def assert_in(obj, in_=None, out_=None): - """Checks that all names in `in_` as in `obj`, but no name - in `out_` is.""" - if in_ is not None: - for name in in_: - assert name in obj - if out_ is not None: - for name in out_: - assert name not in obj +try: + from nose.tools import assert_in, assert_not_in +except ImportError: + # Nose < 1.0.0 + from nose.tools import assert_true, assert_false + + def assert_in(x, container): + assert_true(x in container, msg="%r in %r" % (x, container)) + + def assert_not_in(x, container): + assert_false(x in container, msg="%r in %r" % (x, container)) def fake_mldata_cache(columns_dict, dataname, matfile, ordering=None):