def test_import_is_deprecated(deprecated_path, importee): # Make sure that "from deprecated_path import importee" is still possible # but raises a warning # TODO: remove in 0.24 expected_message = ( "The {deprecated_path} module is deprecated in version " "0.22 and will be removed in version 0.24. " "The corresponding classes / functions " "should instead be imported from .*. " "Anything that cannot be imported from .* is now " "part of the private API." ).format(deprecated_path=deprecated_path) script = """ import pytest with pytest.warns(DeprecationWarning, match="{expected_message}"): from {deprecated_path} import {importee} """.format( expected_message=expected_message, deprecated_path=deprecated_path, importee=importee ) assert_run_python_script(textwrap.dedent(script))
def test_imports_strategies(): # Make sure different import strategies work or fail as expected. # Since Python caches the imported modules, we need to run a child process # for every test case. Else, the tests would not be independent # (manually removing the imports from the cache (sys.modules) is not # recommended and can lead to many complications). good_import = """ from sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputer """ assert_run_python_script(textwrap.dedent(good_import)) good_import_with_ensemble_first = """ import sklearn.ensemble from sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputer """ assert_run_python_script(textwrap.dedent(good_import_with_ensemble_first)) bad_imports = """ import pytest with pytest.raises(ImportError): from sklearn.impute import IterativeImputer import sklearn.experimental with pytest.raises(ImportError): from sklearn.impute import IterativeImputer """ assert_run_python_script(textwrap.dedent(bad_imports))