Bug#1103099: sklearn-pandas: FTBFS in testing/i386: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13

Lucas Nussbaum lucas at debian.org
Mon Apr 14 12:41:42 BST 2025


Source: sklearn-pandas
Version: 2.2.0-4
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: lucas at debian.org
Usertags: ftbfs-20250414 ftbfs-trixie

Hi,

During a rebuild of all packages in testing (trixie), your package failed
to build on i386.


Relevant part (hopefully):
>  debian/rules binary
> dh binary --buildsystem=pybuild
>    dh_update_autotools_config -O--buildsystem=pybuild
>    dh_autoreconf -O--buildsystem=pybuild
>    dh_auto_configure -O--buildsystem=pybuild
> 	pybuild --configure -i python{version} -p 3.13
> I: pybuild base:311: python3.13 setup.py config 
> /build/reproducible-path/sklearn-pandas-2.2.0/setup.py:5: SetuptoolsDeprecationWarning: The test command is disabled and references to it are deprecated.
> !!
> 
>         ********************************************************************************
>         Please remove any references to `setuptools.command.test` in all supported versions of the affected package.
> 
>         This deprecation is overdue, please update your project and remove deprecated
>         calls to avoid build errors in the future.
>         ********************************************************************************
> 
> !!
>   from setuptools.command.test import test as TestCommand
> /usr/lib/python3/dist-packages/setuptools/_distutils/dist.py:270: UserWarning: Unknown distribution option: 'tests_require'
>   warnings.warn(msg)
> running config
>    dh_auto_build -O--buildsystem=pybuild
> 	pybuild --build -i python{version} -p 3.13
> I: pybuild base:311: /usr/bin/python3 setup.py build 
> /build/reproducible-path/sklearn-pandas-2.2.0/setup.py:5: SetuptoolsDeprecationWarning: The test command is disabled and references to it are deprecated.
> !!
> 
>         ********************************************************************************
>         Please remove any references to `setuptools.command.test` in all supported versions of the affected package.
> 
>         This deprecation is overdue, please update your project and remove deprecated
>         calls to avoid build errors in the future.
>         ********************************************************************************
> 
> !!
>   from setuptools.command.test import test as TestCommand
> /usr/lib/python3/dist-packages/setuptools/_distutils/dist.py:270: UserWarning: Unknown distribution option: 'tests_require'
>   warnings.warn(msg)
> running build
> running build_py
> creating /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/sklearn_pandas
> copying sklearn_pandas/pipeline.py -> /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/sklearn_pandas
> copying sklearn_pandas/dataframe_mapper.py -> /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/sklearn_pandas
> copying sklearn_pandas/cross_validation.py -> /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/sklearn_pandas
> copying sklearn_pandas/transformers.py -> /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/sklearn_pandas
> copying sklearn_pandas/features_generator.py -> /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/sklearn_pandas
> copying sklearn_pandas/__init__.py -> /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/sklearn_pandas
>    dh_auto_test -O--buildsystem=pybuild
> 	pybuild --test --test-pytest -i python{version} -p 3.13
> I: pybuild base:311: cd /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build; python3.13 -m pytest ; cd /build/reproducible-path/sklearn-pandas-2.2.0; python3.13 -m doctest -v README.rst
> ============================= test session starts ==============================
> platform linux -- Python 3.13.2, pytest-8.3.5, pluggy-1.5.0
> rootdir: /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build
> configfile: pytest.ini
> plugins: typeguard-4.4.2
> collected 69 items
> 
> tests/test_dataframe_mapper.py ......................................... [ 59%]
> ..................                                                       [ 85%]
> tests/test_features_generator.py ....                                    [ 91%]
> tests/test_pipeline.py ....                                              [ 97%]
> tests/test_transformers.py ..                                            [100%]
> 
> =============================== warnings summary ===============================
> tests/test_dataframe_mapper.py::test_sparse_features
>   /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/tests/test_dataframe_mapper.py:820: DeprecationWarning: Please import `csr_matrix` from the `scipy.sparse` namespace; the `scipy.sparse.csr` namespace is deprecated and will be removed in SciPy 2.0.0.
>     assert type(dmatrix) == sparse.csr.csr_matrix
> 
> tests/test_dataframe_mapper.py::test_sparse_off
>   /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/tests/test_dataframe_mapper.py:834: DeprecationWarning: Please import `csr_matrix` from the `scipy.sparse` namespace; the `scipy.sparse.csr` namespace is deprecated and will be removed in SciPy 2.0.0.
>     assert type(dmatrix) != sparse.csr.csr_matrix
> 
> tests/test_transformers.py::test_common_numerical_transformer
> tests/test_transformers.py::test_numerical_transformer_serialization
>   /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build/sklearn_pandas/transformers.py:35: DeprecationWarning: 
>               NumericalTransformer will be deprecated in 3.0 version.
>               Please use Sklearn.base.TransformerMixin to write
>               customer transformers
>               
>     warnings.warn("""
> 
> -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
> ======================== 69 passed, 4 warnings in 8.10s ========================
> Trying:
>     from sklearn_pandas import DataFrameMapper
> Expecting nothing
> ok
> Trying:
>     import pandas as pd
> Expecting nothing
> ok
> Trying:
>     import numpy as np
> Expecting nothing
> ok
> Trying:
>     import sklearn.preprocessing, sklearn.decomposition, \
>         sklearn.linear_model, sklearn.pipeline, sklearn.metrics, \
>         sklearn.compose
> Expecting nothing
> ok
> Trying:
>     from sklearn.feature_extraction.text import CountVectorizer
> Expecting nothing
> ok
> Trying:
>     data = pd.DataFrame({'pet':      ['cat', 'dog', 'dog', 'fish', 'cat', 'dog', 'cat', 'fish'],
>                          'children': [4., 6, 3, 3, 2, 3, 5, 4],
>                          'salary':   [90., 24, 44, 27, 32, 59, 36, 27]})
> Expecting nothing
> ok
> Trying:
>     mapper = DataFrameMapper([
>         ('pet', sklearn.preprocessing.LabelBinarizer()),
>         (['children'], sklearn.preprocessing.StandardScaler())
>     ])
> Expecting nothing
> ok
> Trying:
>     data['children'].shape
> Expecting:
>     (8,)
> ok
> Trying:
>     data[['children']].shape
> Expecting:
>     (8, 1)
> ok
> Trying:
>     np.round(mapper.fit_transform(data.copy()), 2)
> Expecting:
>     array([[ 1.  ,  0.  ,  0.  ,  0.21],
>            [ 0.  ,  1.  ,  0.  ,  1.88],
>            [ 0.  ,  1.  ,  0.  , -0.63],
>            [ 0.  ,  0.  ,  1.  , -0.63],
>            [ 1.  ,  0.  ,  0.  , -1.46],
>            [ 0.  ,  1.  ,  0.  , -0.63],
>            [ 1.  ,  0.  ,  0.  ,  1.04],
>            [ 0.  ,  0.  ,  1.  ,  0.21]])
> ok
> Trying:
>     sample = pd.DataFrame({'pet': ['cat'], 'children': [5.]})
> Expecting nothing
> ok
> Trying:
>     np.round(mapper.transform(sample), 2)
> Expecting:
>     array([[1.  , 0.  , 0.  , 1.04]])
> ok
> Trying:
>     mapper.transformed_names_
> Expecting:
>     ['pet_cat', 'pet_dog', 'pet_fish', 'children']
> ok
> Trying:
>     mapper_alias = DataFrameMapper([
>         (['children'], sklearn.preprocessing.StandardScaler(),
>          {'alias': 'children_scaled'})
>     ])
> Expecting nothing
> ok
> Trying:
>     _ = mapper_alias.fit_transform(data.copy())
> Expecting nothing
> ok
> Trying:
>     mapper_alias.transformed_names_
> Expecting:
>     ['children_scaled']
> ok
> Trying:
>     mapper_alias = DataFrameMapper([
>         (['children'], sklearn.preprocessing.StandardScaler(), {'prefix': 'standard_scaled_'}),
>         (['children'], sklearn.preprocessing.StandardScaler(), {'suffix': '_raw'})
>     ])
> Expecting nothing
> ok
> Trying:
>     _ = mapper_alias.fit_transform(data.copy())
> Expecting nothing
> ok
> Trying:
>     mapper_alias.transformed_names_
> Expecting:
>     ['standard_scaled_children', 'children_raw']
> ok
> Trying:
>     class GetColumnsStartingWith:
>       def __init__(self, start_str):
>         self.pattern = start_str
> 
>       def __call__(self, X:pd.DataFrame=None):
>         return [c for c in X.columns if c.startswith(self.pattern)]
> Expecting nothing
> ok
> Trying:
>     df = pd.DataFrame({
>        'sepal length (cm)': [1.0, 2.0, 3.0],
>        'sepal width (cm)': [1.0, 2.0, 3.0],
>        'petal length (cm)': [1.0, 2.0, 3.0],
>        'petal width (cm)': [1.0, 2.0, 3.0]
>     })
> Expecting nothing
> ok
> Trying:
>     t = DataFrameMapper([
>         (
>           sklearn.compose.make_column_selector(dtype_include=float),
>           sklearn.preprocessing.StandardScaler(),
>           {'alias': 'x'}
>         ),
>         (
>           GetColumnsStartingWith('petal'),
>           None,
>           {'alias': 'petal'}
>         )], df_out=True, default=False)
> Expecting nothing
> ok
> Trying:
>     t.fit(df).transform(df).shape
> Expecting:
>     (3, 6)
> ok
> Trying:
>     t.transformed_names_
> Expecting:
>     ['x_0', 'x_1', 'x_2', 'x_3', 'petal_0', 'petal_1']
> ok
> Trying:
>     from sklearn.base import TransformerMixin
> Expecting nothing
> ok
> Trying:
>     class DateEncoder(TransformerMixin):
>        def fit(self, X, y=None):
>            return self
> 
>        def transform(self, X):
>            dt = X.dt
>            return pd.concat([dt.year, dt.month, dt.day], axis=1)
> Expecting nothing
> ok
> Trying:
>     dates_df = pd.DataFrame(
>         {'dates': pd.date_range('2015-10-30', '2015-11-02')})
> Expecting nothing
> ok
> Trying:
>     mapper_dates = DataFrameMapper([
>         ('dates', DateEncoder())
>     ], input_df=True)
> Expecting nothing
> ok
> Trying:
>     mapper_dates.fit_transform(dates_df)
> Expecting:
>     array([[2015,   10,   30],
>            [2015,   10,   31],
>            [2015,   11,    1],
>            [2015,   11,    2]], dtype=int32)
> **********************************************************************
> File "README.rst", line 228, in README.rst
> Failed example:
>     mapper_dates.fit_transform(dates_df)
> Expected:
>     array([[2015,   10,   30],
>            [2015,   10,   31],
>            [2015,   11,    1],
>            [2015,   11,    2]], dtype=int32)
> Got:
>     array([[2015,   10,   30],
>            [2015,   10,   31],
>            [2015,   11,    1],
>            [2015,   11,    2]])
> Trying:
>     mapper_dates = DataFrameMapper([
>         ('dates', DateEncoder(), {'input_df': True})
>     ])
> Expecting nothing
> ok
> Trying:
>     mapper_dates.fit_transform(dates_df)
> Expecting:
>     array([[2015,   10,   30],
>            [2015,   10,   31],
>            [2015,   11,    1],
>            [2015,   11,    2]], dtype=int32)
> **********************************************************************
> File "README.rst", line 240, in README.rst
> Failed example:
>     mapper_dates.fit_transform(dates_df)
> Expected:
>     array([[2015,   10,   30],
>            [2015,   10,   31],
>            [2015,   11,    1],
>            [2015,   11,    2]], dtype=int32)
> Got:
>     array([[2015,   10,   30],
>            [2015,   10,   31],
>            [2015,   11,    1],
>            [2015,   11,    2]])
> Trying:
>     mapper_df = DataFrameMapper([
>         ('pet', sklearn.preprocessing.LabelBinarizer()),
>         (['children'], sklearn.preprocessing.StandardScaler())
>     ], df_out=True)
> Expecting nothing
> ok
> Trying:
>     np.round(mapper_df.fit_transform(data.copy()), 2)
> Expecting:
>        pet_cat  pet_dog  pet_fish  children
>     0        1        0         0      0.21
>     1        0        1         0      1.88
>     2        0        1         0     -0.63
>     3        0        0         1     -0.63
>     4        1        0         0     -1.46
>     5        0        1         0     -0.63
>     6        1        0         0      1.04
>     7        0        0         1      0.21
> ok
> Trying:
>     mapper_df = DataFrameMapper([
>         ('pet', sklearn.preprocessing.LabelBinarizer()),
>         (['children'], sklearn.preprocessing.StandardScaler())
>     ], drop_cols=['salary'])
> Expecting nothing
> ok
> Trying:
>     np.round(mapper_df.fit_transform(data.copy()), 1)
> Expecting:
>     array([[ 1. ,  0. ,  0. ,  0.2],
>            [ 0. ,  1. ,  0. ,  1.9],
>            [ 0. ,  1. ,  0. , -0.6],
>            [ 0. ,  0. ,  1. , -0.6],
>            [ 1. ,  0. ,  0. , -1.5],
>            [ 0. ,  1. ,  0. , -0.6],
>            [ 1. ,  0. ,  0. ,  1. ],
>            [ 0. ,  0. ,  1. ,  0.2]])
> ok
> Trying:
>     mapper2 = DataFrameMapper([
>         (['children', 'salary'], sklearn.decomposition.PCA(1))
>     ])
> Expecting nothing
> ok
> Trying:
>     np.round(mapper2.fit_transform(data.copy()), 1)
> Expecting:
>     array([[ 47.6],
>            [-18.4],
>            [  1.6],
>            [-15.4],
>            [-10.4],
>            [ 16.6],
>            [ -6.4],
>            [-15.4]])
> ok
> Trying:
>     from sklearn.impute import SimpleImputer
> Expecting nothing
> ok
> Trying:
>     mapper3 = DataFrameMapper([
>         (['age'], [SimpleImputer(),
>                    sklearn.preprocessing.StandardScaler()])])
> Expecting nothing
> ok
> Trying:
>     data_3 = pd.DataFrame({'age': [1, np.nan, 3]})
> Expecting nothing
> ok
> Trying:
>     mapper3.fit_transform(data_3)
> Expecting:
>     array([[-1.22474487],
>            [ 0.        ],
>            [ 1.22474487]])
> ok
> Trying:
>     mapper3 = DataFrameMapper([
>         ('pet', sklearn.preprocessing.LabelBinarizer()),
>         ('children', None)
>     ])
> Expecting nothing
> ok
> Trying:
>     np.round(mapper3.fit_transform(data.copy()))
> Expecting:
>     array([[1., 0., 0., 4.],
>            [0., 1., 0., 6.],
>            [0., 1., 0., 3.],
>            [0., 0., 1., 3.],
>            [1., 0., 0., 2.],
>            [0., 1., 0., 3.],
>            [1., 0., 0., 5.],
>            [0., 0., 1., 4.]])
> ok
> Trying:
>     mapper4 = DataFrameMapper([
>         ('pet', sklearn.preprocessing.LabelBinarizer()),
>         ('children', None)
>     ], default=sklearn.preprocessing.StandardScaler())
> Expecting nothing
> ok
> Trying:
>     np.round(mapper4.fit_transform(data.copy()), 1)
> Expecting:
>     array([[ 1. ,  0. ,  0. ,  4. ,  2.3],
>            [ 0. ,  1. ,  0. ,  6. , -0.9],
>            [ 0. ,  1. ,  0. ,  3. ,  0.1],
>            [ 0. ,  0. ,  1. ,  3. , -0.7],
>            [ 1. ,  0. ,  0. ,  2. , -0.5],
>            [ 0. ,  1. ,  0. ,  3. ,  0.8],
>            [ 1. ,  0. ,  0. ,  5. , -0.3],
>            [ 0. ,  0. ,  1. ,  4. , -0.7]])
> ok
> Trying:
>     from sklearn_pandas import gen_features
> Expecting nothing
> ok
> Trying:
>     feature_def = gen_features(
>         columns=['col1', 'col2', 'col3'],
>         classes=[sklearn.preprocessing.LabelEncoder]
>     )
> Expecting nothing
> ok
> Trying:
>     feature_def
> Expecting:
>     [('col1', [LabelEncoder()], {}), ('col2', [LabelEncoder()], {}), ('col3', [LabelEncoder()], {})]
> ok
> Trying:
>     mapper5 = DataFrameMapper(feature_def)
> Expecting nothing
> ok
> Trying:
>     data5 = pd.DataFrame({
>         'col1': ['yes', 'no', 'yes'],
>         'col2': [True, False, False],
>         'col3': ['one', 'two', 'three']
>     })
> Expecting nothing
> ok
> Trying:
>     mapper5.fit_transform(data5)
> Expecting:
>     array([[1, 1, 0],
>            [0, 0, 2],
>            [1, 0, 1]])
> ok
> Trying:
>     from sklearn.impute import SimpleImputer
> Expecting nothing
> ok
> Trying:
>     import numpy as np
> Expecting nothing
> ok
> Trying:
>     feature_def = gen_features(
>         columns=[['col1'], ['col2'], ['col3']],
>         classes=[{'class': SimpleImputer, 'strategy':'most_frequent'}]
>     )
> Expecting nothing
> ok
> Trying:
>     mapper6 = DataFrameMapper(feature_def)
> Expecting nothing
> ok
> Trying:
>     data6 = pd.DataFrame({
>         'col1': [np.nan, 1, 1, 2, 3],
>         'col2': [True, False, np.nan, np.nan, True],
>         'col3': [0, 0, 0, np.nan, np.nan]
>     })
> Expecting nothing
> ok
> Trying:
>     mapper6.fit_transform(data6)
> Expecting:
>     array([[1.0, True, 0.0],
>            [1.0, False, 0.0],
>            [1.0, True, 0.0],
>            [2.0, True, 0.0],
>            [3.0, True, 0.0]], dtype=object)
> ok
> Trying:
>     feature_def = gen_features(
>         columns=['col1', 'col2', 'col3'],
>         classes=[sklearn.preprocessing.LabelEncoder],
>         prefix="lblencoder_"
>     )
> Expecting nothing
> ok
> Trying:
>     mapper5 = DataFrameMapper(feature_def)
> Expecting nothing
> ok
> Trying:
>     data5 = pd.DataFrame({
>         'col1': ['yes', 'no', 'yes'],
>         'col2': [True, False, False],
>         'col3': ['one', 'two', 'three']
>     })
> Expecting nothing
> ok
> Trying:
>     _ = mapper5.fit_transform(data5)
> Expecting nothing
> ok
> Trying:
>     mapper5.transformed_names_
> Expecting:
>     ['lblencoder_col1', 'lblencoder_col2', 'lblencoder_col3']
> ok
> Trying:
>     from sklearn.feature_selection import SelectKBest, chi2
> Expecting nothing
> ok
> Trying:
>     mapper_fs = DataFrameMapper([(['children','salary'], SelectKBest(chi2, k=1))])
> Expecting nothing
> ok
> Trying:
>     mapper_fs.fit_transform(data[['children','salary']], data['pet'])
> Expecting:
>     array([[90.],
>            [24.],
>            [44.],
>            [27.],
>            [32.],
>            [59.],
>            [36.],
>            [27.]])
> ok
> Trying:
>     mapper5 = DataFrameMapper([
>         ('pet', CountVectorizer()),
>     ], sparse=True)
> Expecting nothing
> ok
> Trying:
>     type(mapper5.fit_transform(data))
> Expecting:
>     <class 'scipy.sparse._csr.csr_matrix'>
> ok
> Trying:
>     from sklearn_pandas import NumericalTransformer
> Expecting nothing
> ok
> Trying:
>     mapper5 = DataFrameMapper([
>         ('children', NumericalTransformer('log')),
>     ])
> Expecting nothing
> ok
> Trying:
>     mapper5.fit_transform(data)
> Expecting:
>     array([[1.38629436],
>            [1.79175947],
>            [1.09861229],
>            [1.09861229],
>            [0.69314718],
>            [1.09861229],
>            [1.60943791],
>            [1.38629436]])
> ok
> Trying:
>     import logging
> Expecting nothing
> ok
> Trying:
>     logging.getLogger('sklearn_pandas').setLevel(logging.INFO)
> Expecting nothing
> ok
> **********************************************************************
> 1 item had failures:
>    2 of  72 in README.rst
> 72 tests in 1 item.
> 70 passed and 2 failed.
> ***Test Failed*** 2 failures.
> E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd /build/reproducible-path/sklearn-pandas-2.2.0/.pybuild/cpython3_3.13_sklearn-pandas/build; python3.13 -m pytest ; cd {dir}; python{version} -m doctest -v README.rst
> 	rm -fr -- /tmp/dh-xdg-rundir-pdmJDH4k
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13


The full build log is available from:
http://qa-logs.debian.net/2025/04/14/sklearn-pandas_2.2.0-4_testing-i386.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20250414;users=lucas@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20250414&fusertaguser=lucas@debian.org&allbugs=1&cseverity=1&ctags=1&caffected=1#results

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 mark 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.



More information about the debian-science-maintainers mailing list