Source: scikit-learn
Version: 1.0.2-1
Severity: serious
Justification: FTBFS
Tags: bookworm sid ftbfs
User: lu...@debian.org
Usertags: ftbfs-20220326 ftbfs-bookworm

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.


Relevant part (hopefully):
> =================================== FAILURES 
> ===================================
> __________________________ test_docstring_parameters 
> ___________________________
> 
>     @pytest.mark.filterwarnings("ignore::FutureWarning")
>     @pytest.mark.filterwarnings("ignore::DeprecationWarning")
>     @pytest.mark.skipif(IS_PYPY, reason="test segfaults on PyPy")
>     def test_docstring_parameters():
>         # Test module docstring formatting
>     
>         # Skip test if numpydoc is not found
>         pytest.importorskip(
>             "numpydoc", reason="numpydoc is required to test the docstrings"
>         )
>     
>         # XXX unreached code as of v0.22
>         from numpydoc import docscrape
>     
>         incorrect = []
>         for name in PUBLIC_MODULES:
>             if name.endswith(".conftest"):
>                 # pytest tooling, not part of the scikit-learn API
>                 continue
>             if name == "sklearn.utils.fixes":
>                 # We cannot always control these docstrings
>                 continue
>             with warnings.catch_warnings(record=True):
>                 module = importlib.import_module(name)
>             classes = inspect.getmembers(module, inspect.isclass)
>             # Exclude non-scikit-learn classes
>             classes = [cls for cls in classes if 
> cls[1].__module__.startswith("sklearn")]
>             for cname, cls in classes:
>                 this_incorrect = []
>                 if cname in _DOCSTRING_IGNORES or cname.startswith("_"):
>                     continue
>                 if inspect.isabstract(cls):
>                     continue
>                 with warnings.catch_warnings(record=True) as w:
>                     cdoc = docscrape.ClassDoc(cls)
>                 if len(w):
> >                   raise RuntimeError(
>                         "Error for __init__ of %s in %s:\n%s" % (cls, name, 
> w[0])
>                     )
> E                   RuntimeError: Error for __init__ of <class 
> 'sklearn.calibration.CalibrationDisplay'> in sklearn.calibration:
> E                   {message : UserWarning('potentially wrong underline 
> length... \nParameters \n----------- in \nCalibration curve (also known as 
> reliability diagram) visualization.\n... in the docstring of 
> CalibrationDisplay in 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/sklearn/calibration.py.'), 
> category : 'UserWarning', filename : 
> '/usr/lib/python3/dist-packages/numpydoc/docscrape.py', lineno : 434, line : 
> None}
> 
> sklearn/tests/test_docstring_parameters.py:103: RuntimeError
> _________________ test_check_docstring_parameters[mock_meta0] 
> __________________
> 
> mock_meta = <sklearn.utils.tests.test_testing.MockMetaEstimator object at 
> 0x7fdc7943edc0>
> 
>     @pytest.mark.parametrize(
>         "mock_meta",
>         [
>             MockMetaEstimator(delegate=MockEst()),
>             MockMetaEstimatorDeprecatedDelegation(delegate=MockEst()),
>         ],
>     )
>     def test_check_docstring_parameters(mock_meta):
>         pytest.importorskip(
>             "numpydoc", reason="numpydoc is required to test the docstrings"
>         )
>     
>         incorrect = check_docstring_parameters(f_ok)
>         assert incorrect == []
>         incorrect = check_docstring_parameters(f_ok, ignore=["b"])
>         assert incorrect == []
>         incorrect = check_docstring_parameters(f_missing, ignore=["b"])
>         assert incorrect == []
>         with pytest.raises(RuntimeError, match="Unknown section Results"):
>             check_docstring_parameters(f_bad_sections)
>         with pytest.raises(RuntimeError, match="Unknown section Parameter"):
> >           check_docstring_parameters(Klass.f_bad_sections)
> 
> sklearn/utils/tests/test_testing.py:540: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> func = <function Klass.f_bad_sections at 0x7fdc7966f670>
> doc = <numpydoc.docscrape.FunctionDoc object at 0x7fdc6184dac0>, ignore = []
> 
>     def check_docstring_parameters(func, doc=None, ignore=None):
>         """Helper to check docstring.
>     
>         Parameters
>         ----------
>         func : callable
>             The function object to test.
>         doc : str, default=None
>             Docstring if it is passed manually to the test.
>         ignore : list, default=None
>             Parameters to ignore.
>     
>         Returns
>         -------
>         incorrect : list
>             A list of string describing the incorrect results.
>         """
>         from numpydoc import docscrape
>     
>         incorrect = []
>         ignore = [] if ignore is None else ignore
>     
>         func_name = _get_func_name(func)
>         if not func_name.startswith("sklearn.") or func_name.startswith(
>             "sklearn.externals"
>         ):
>             return incorrect
>         # Don't check docstring for property-functions
>         if inspect.isdatadescriptor(func):
>             return incorrect
>         # Don't check docstring for setup / teardown pytest functions
>         if func_name.split(".")[-1] in ("setup_module", "teardown_module"):
>             return incorrect
>         # Dont check estimator_checks module
>         if func_name.split(".")[2] == "estimator_checks":
>             return incorrect
>         # Get the arguments from the function signature
>         param_signature = list(filter(lambda x: x not in ignore, 
> _get_args(func)))
>         # drop self
>         if len(param_signature) > 0 and param_signature[0] == "self":
>             param_signature.remove("self")
>     
>         # Analyze function's docstring
>         if doc is None:
>             with warnings.catch_warnings(record=True) as w:
>                 try:
>                     doc = docscrape.FunctionDoc(func)
>                 except Exception as exp:
>                     incorrect += [func_name + " parsing error: " + str(exp)]
>                     return incorrect
>             if len(w):
> >               raise RuntimeError("Error for %s:\n%s" % (func_name, w[0]))
> E               RuntimeError: Error for 
> sklearn.utils.tests.test_testing.Klass.f_bad_sections:
> E               {message : UserWarning('potentially wrong underline length... 
> \nParameter \n---------- in \nFunction f\n... in the docstring of 
> f_bad_sections in 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/sklearn/utils/tests/test_testing.py.'),
>  category : 'UserWarning', filename : 
> '/usr/lib/python3/dist-packages/numpydoc/docscrape.py', lineno : 434, line : 
> None}
> 
> sklearn/utils/_testing.py:665: RuntimeError
> 
> During handling of the above exception, another exception occurred:
> 
> mock_meta = <sklearn.utils.tests.test_testing.MockMetaEstimator object at 
> 0x7fdc7943edc0>
> 
>     @pytest.mark.parametrize(
>         "mock_meta",
>         [
>             MockMetaEstimator(delegate=MockEst()),
>             MockMetaEstimatorDeprecatedDelegation(delegate=MockEst()),
>         ],
>     )
>     def test_check_docstring_parameters(mock_meta):
>         pytest.importorskip(
>             "numpydoc", reason="numpydoc is required to test the docstrings"
>         )
>     
>         incorrect = check_docstring_parameters(f_ok)
>         assert incorrect == []
>         incorrect = check_docstring_parameters(f_ok, ignore=["b"])
>         assert incorrect == []
>         incorrect = check_docstring_parameters(f_missing, ignore=["b"])
>         assert incorrect == []
>         with pytest.raises(RuntimeError, match="Unknown section Results"):
>             check_docstring_parameters(f_bad_sections)
>         with pytest.raises(RuntimeError, match="Unknown section Parameter"):
> >           check_docstring_parameters(Klass.f_bad_sections)
> E           AssertionError: Regex pattern 'Unknown section Parameter' does 
> not match "Error for 
> sklearn.utils.tests.test_testing.Klass.f_bad_sections:\n{message : 
> UserWarning('potentially wrong underline length... \\nParameter \\n---------- 
> in \\nFunction f\\n... in the docstring of f_bad_sections in 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/sklearn/utils/tests/test_testing.py.'),
>  category : 'UserWarning', filename : 
> '/usr/lib/python3/dist-packages/numpydoc/docscrape.py', lineno : 434, line : 
> None}".
> 
> sklearn/utils/tests/test_testing.py:540: AssertionError
> _________________ test_check_docstring_parameters[mock_meta1] 
> __________________
> 
> mock_meta = 
> <sklearn.utils.tests.test_testing.MockMetaEstimatorDeprecatedDelegation 
> object at 0x7fdc7943ed30>
> 
>     @pytest.mark.parametrize(
>         "mock_meta",
>         [
>             MockMetaEstimator(delegate=MockEst()),
>             MockMetaEstimatorDeprecatedDelegation(delegate=MockEst()),
>         ],
>     )
>     def test_check_docstring_parameters(mock_meta):
>         pytest.importorskip(
>             "numpydoc", reason="numpydoc is required to test the docstrings"
>         )
>     
>         incorrect = check_docstring_parameters(f_ok)
>         assert incorrect == []
>         incorrect = check_docstring_parameters(f_ok, ignore=["b"])
>         assert incorrect == []
>         incorrect = check_docstring_parameters(f_missing, ignore=["b"])
>         assert incorrect == []
>         with pytest.raises(RuntimeError, match="Unknown section Results"):
>             check_docstring_parameters(f_bad_sections)
>         with pytest.raises(RuntimeError, match="Unknown section Parameter"):
> >           check_docstring_parameters(Klass.f_bad_sections)
> 
> sklearn/utils/tests/test_testing.py:540: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> func = <function Klass.f_bad_sections at 0x7fdc7966f670>
> doc = <numpydoc.docscrape.FunctionDoc object at 0x7fdc619a9760>, ignore = []
> 
>     def check_docstring_parameters(func, doc=None, ignore=None):
>         """Helper to check docstring.
>     
>         Parameters
>         ----------
>         func : callable
>             The function object to test.
>         doc : str, default=None
>             Docstring if it is passed manually to the test.
>         ignore : list, default=None
>             Parameters to ignore.
>     
>         Returns
>         -------
>         incorrect : list
>             A list of string describing the incorrect results.
>         """
>         from numpydoc import docscrape
>     
>         incorrect = []
>         ignore = [] if ignore is None else ignore
>     
>         func_name = _get_func_name(func)
>         if not func_name.startswith("sklearn.") or func_name.startswith(
>             "sklearn.externals"
>         ):
>             return incorrect
>         # Don't check docstring for property-functions
>         if inspect.isdatadescriptor(func):
>             return incorrect
>         # Don't check docstring for setup / teardown pytest functions
>         if func_name.split(".")[-1] in ("setup_module", "teardown_module"):
>             return incorrect
>         # Dont check estimator_checks module
>         if func_name.split(".")[2] == "estimator_checks":
>             return incorrect
>         # Get the arguments from the function signature
>         param_signature = list(filter(lambda x: x not in ignore, 
> _get_args(func)))
>         # drop self
>         if len(param_signature) > 0 and param_signature[0] == "self":
>             param_signature.remove("self")
>     
>         # Analyze function's docstring
>         if doc is None:
>             with warnings.catch_warnings(record=True) as w:
>                 try:
>                     doc = docscrape.FunctionDoc(func)
>                 except Exception as exp:
>                     incorrect += [func_name + " parsing error: " + str(exp)]
>                     return incorrect
>             if len(w):
> >               raise RuntimeError("Error for %s:\n%s" % (func_name, w[0]))
> E               RuntimeError: Error for 
> sklearn.utils.tests.test_testing.Klass.f_bad_sections:
> E               {message : UserWarning('potentially wrong underline length... 
> \nParameter \n---------- in \nFunction f\n... in the docstring of 
> f_bad_sections in 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/sklearn/utils/tests/test_testing.py.'),
>  category : 'UserWarning', filename : 
> '/usr/lib/python3/dist-packages/numpydoc/docscrape.py', lineno : 434, line : 
> None}
> 
> sklearn/utils/_testing.py:665: RuntimeError
> 
> During handling of the above exception, another exception occurred:
> 
> mock_meta = 
> <sklearn.utils.tests.test_testing.MockMetaEstimatorDeprecatedDelegation 
> object at 0x7fdc7943ed30>
> 
>     @pytest.mark.parametrize(
>         "mock_meta",
>         [
>             MockMetaEstimator(delegate=MockEst()),
>             MockMetaEstimatorDeprecatedDelegation(delegate=MockEst()),
>         ],
>     )
>     def test_check_docstring_parameters(mock_meta):
>         pytest.importorskip(
>             "numpydoc", reason="numpydoc is required to test the docstrings"
>         )
>     
>         incorrect = check_docstring_parameters(f_ok)
>         assert incorrect == []
>         incorrect = check_docstring_parameters(f_ok, ignore=["b"])
>         assert incorrect == []
>         incorrect = check_docstring_parameters(f_missing, ignore=["b"])
>         assert incorrect == []
>         with pytest.raises(RuntimeError, match="Unknown section Results"):
>             check_docstring_parameters(f_bad_sections)
>         with pytest.raises(RuntimeError, match="Unknown section Parameter"):
> >           check_docstring_parameters(Klass.f_bad_sections)
> E           AssertionError: Regex pattern 'Unknown section Parameter' does 
> not match "Error for 
> sklearn.utils.tests.test_testing.Klass.f_bad_sections:\n{message : 
> UserWarning('potentially wrong underline length... \\nParameter \\n---------- 
> in \\nFunction f\\n... in the docstring of f_bad_sections in 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/sklearn/utils/tests/test_testing.py.'),
>  category : 'UserWarning', filename : 
> '/usr/lib/python3/dist-packages/numpydoc/docscrape.py', lineno : 434, line : 
> None}".
> 
> sklearn/utils/tests/test_testing.py:540: AssertionError
> = 3 failed, 24128 passed, 195 skipped, 1 deselected, 248 xfailed, 39 xpassed, 
> 2386 warnings in 10221.46s (2:50:21) =
> E: pybuild pybuild:367: test: plugin distutils failed with: exit code=1: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build; python3.9 -m pytest -m "not 
> network" -v --color=no -k "not test_load_boston_alternative"
> dh_auto_test: error: pybuild --test -i python{version} -p "3.10 3.9" returned 
> exit code 13


The full build log is available from:
http://qa-logs.debian.net/2022/03/26/scikit-learn_1.0.2-1_unstable.log

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please marking it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.

Reply via email to