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