py312: install_deps> pip install '.[tests]' py312: freeze> python -m pip freeze --all py312: black==25.1.0,click==8.2.1,coverage==7.10.6,feature_engine==1.9.3,flake8==7.3.0,iniconfig==2.1.0,isort==6.0.1,joblib==1.5.2,mccabe==0.7.0,mypy==1.18.1,mypy_extensions==1.1.0,numpy==2.3.3,packaging==25.0,pandas==2.3.2,pathspec==0.12.1,patsy==1.0.1,pip==25.2,platformdirs==4.4.0,pluggy==1.6.0,pycodestyle==2.14.0,pyflakes==3.4.0,Pygments==2.19.2,pytest==8.4.2,python-dateutil==2.9.0.post0,pytz==2025.2,scikit-learn==1.7.2,scipy==1.16.2,six==1.17.0,statsmodels==0.14.5,threadpoolctl==3.6.0,typing_extensions==4.15.0,tzdata==2025.2 py312: commands[0]> pytest tests ============================= test session starts ============================== platform linux -- Python 3.12.1, pytest-8.4.2, pluggy-1.6.0 cachedir: .tox/unit_tests/.pytest_cache rootdir: /home/circleci/project configfile: pyproject.toml collecting ... collecting 299 items collecting 804 items collecting 1022 items collecting 1507 items collected 1850 items tests/test_base_transformers/test_base_numerical_transformer.py ... [ 0%] tests/test_base_transformers/test_get_feature_names_out_mixin.py ....... [ 0%] .................................................................. [ 4%] tests/test_base_transformers/test_transform_xy_mixin.py . [ 4%] tests/test_check_init_parameters/test_check_init_input_params.py ....... [ 4%] . [ 4%] tests/test_check_init_parameters/test_check_input_dictionary.py ...... [ 4%] tests/test_check_init_parameters/test_check_variables.py ............ [ 5%] tests/test_creation/test_check_estimator_creation.py .......... [ 6%] tests/test_creation/test_cyclical_features.py .......... [ 6%] tests/test_creation/test_decision_tree_features.py ..................... [ 7%] ............... [ 8%] tests/test_creation/test_math_features.py .............................. [ 10%] ... [ 10%] tests/test_creation/test_relative_features.py .......................... [ 11%] ................... [ 12%] tests/test_dataframe_checks.py ....................... [ 14%] tests/test_datetime/test_check_estimator_datetime.py ... [ 14%] tests/test_datetime/test_datetime_features.py .......................... [ 15%] .......... [ 16%] tests/test_datetime/test_datetime_ordinal.py ............. [ 16%] tests/test_datetime/test_datetime_subtraction.py ....................... [ 18%] ............................................................ [ 21%] tests/test_discretisation/test_arbitrary_discretiser.py ....... [ 21%] tests/test_discretisation/test_base_discretizer.py ................... [ 22%] tests/test_discretisation/test_check_estimator_discretisers.py ......... [ 23%] ...... [ 23%] tests/test_discretisation/test_decision_tree_discretiser.py ............ [ 24%] .............. [ 24%] tests/test_discretisation/test_equal_frequency_discretiser.py ....... [ 25%] tests/test_discretisation/test_equal_width_discretiser.py ....... [ 25%] tests/test_discretisation/test_geometric_width_discretiser.py .......... [ 26%] ................. [ 27%] tests/test_encoding/test_base_encoders/test_categorical_init_mixin.py .. [ 27%] .... [ 27%] tests/test_encoding/test_base_encoders/test_categorical_init_mixin_na.py . [ 27%] ......... [ 28%] tests/test_encoding/test_base_encoders/test_categorical_method_mixin.py . [ 28%] ........... [ 28%] tests/test_encoding/test_check_estimator_encoders.py ................... [ 29%] ......................... [ 31%] tests/test_encoding/test_count_frequency_encoder.py .................... [ 32%] ............... [ 32%] tests/test_encoding/test_decision_tree_encoder.py ...................... [ 34%] ............... [ 34%] tests/test_encoding/test_helper_functions.py ....... [ 35%] tests/test_encoding/test_mean_encoder.py .......................... [ 36%] tests/test_encoding/test_onehot_encoder.py ............................. [ 38%] [ 38%] tests/test_encoding/test_ordinal_encoder.py .......................... [ 39%] tests/test_encoding/test_rare_label_encoder.py ......................... [ 41%] .... [ 41%] tests/test_encoding/test_similarity_encoder.py ......................... [ 42%] .......... [ 43%] tests/test_encoding/test_woe/test_woe_class.py ..... [ 43%] tests/test_encoding/test_woe/test_woe_encoder.py ....................... [ 44%] ...... [ 45%] tests/test_imputation/test_arbitrary_number_imputer.py .... [ 45%] tests/test_imputation/test_categorical_imputer.py ................ [ 46%] tests/test_imputation/test_check_estimator_imputers.py ................. [ 47%] .... [ 47%] tests/test_imputation/test_drop_missing_data.py ......... [ 47%] tests/test_imputation/test_end_tail_imputer.py ........ [ 48%] tests/test_imputation/test_mean_mdian_imputer.py ... [ 48%] tests/test_imputation/test_missing_indicator.py ....... [ 48%] tests/test_imputation/test_random_sample_imputer.py ........... [ 49%] tests/test_outliers/test_arbitrary_capper.py ............. [ 50%] tests/test_outliers/test_check_estimator_outliers.py ......... [ 50%] tests/test_outliers/test_outlier_trimmer.py ........... [ 51%] tests/test_outliers/test_winsorizer.py .......................... [ 52%] tests/test_pipeline/test_pipeline.py ..... [ 52%] tests/test_pipeline/test_pipeline_sklearn.py ........................... [ 54%] ................... [ 55%] tests/test_prediction/test_check_estimator_prediction.py ............... [ 56%] .................................. [ 57%] tests/test_prediction/test_target_mean_classifier.py ..... [ 58%] tests/test_prediction/test_target_mean_regressor.py .... [ 58%] tests/test_preprocessing/test_check_estimator_preprocessing.py ......... [ 58%] [ 58%] tests/test_preprocessing/test_match_categories.py ... [ 59%] tests/test_preprocessing/test_match_columns.py ....................... [ 60%] tests/test_scaling/test_mean_normalization.py ....... [ 60%] tests/test_selection/test_base_selection_functions.py ........ [ 61%] tests/test_selection/test_base_selector.py ...... [ 61%] tests/test_selection/test_check_estimator_selectors.py ................. [ 62%] ................................................... [ 65%] tests/test_selection/test_drop_constant_features.py ............... [ 65%] tests/test_selection/test_drop_correlated_features.py .................. [ 66%] . [ 66%] tests/test_selection/test_drop_duplicate_features.py .... [ 67%] tests/test_selection/test_drop_features.py ....... [ 67%] tests/test_selection/test_drop_high_psi_features.py .................... [ 68%] .......................................... [ 70%] tests/test_selection/test_information_value.py ................. [ 71%] tests/test_selection/test_mrmr.py ...................................... [ 73%] .......................... [ 75%] tests/test_selection/test_probe_feature_selection.py ................... [ 76%] ................................. [ 78%] tests/test_selection/test_recursive_feature_addition.py ........ [ 78%] tests/test_selection/test_recursive_feature_elimination.py ......... [ 78%] tests/test_selection/test_recursive_feature_selectors.py ............... [ 79%] ............. [ 80%] tests/test_selection/test_shuffle_features.py ....... [ 80%] tests/test_selection/test_single_feature_performance.py ........... [ 81%] tests/test_selection/test_smart_correlation_selection.py ............... [ 82%] ................ [ 83%] tests/test_selection/test_target_mean_selection.py ....... [ 83%] tests/test_sklearn_compatible/test_set_output.py ... [ 83%] tests/test_time_series/test_forecasting/test_check_estimator_forecasting.py . [ 83%] .............. [ 84%] tests/test_time_series/test_forecasting/test_expanding_window_features.py . [ 84%] ............................... [ 86%] tests/test_time_series/test_forecasting/test_lag_features.py ........... [ 86%] ........................... [ 88%] tests/test_time_series/test_forecasting/test_window_features.py ........ [ 88%] .......................... [ 90%] tests/test_transformation/test_arcsin_transformer.py ..... [ 90%] tests/test_transformation/test_boxcox_transformer.py ..... [ 90%] tests/test_transformation/test_check_estimator_transformers.py ......... [ 91%] ........ [ 91%] tests/test_transformation/test_log_transformer.py ......... [ 92%] tests/test_transformation/test_logcp_transformer.py .................... [ 93%] [ 93%] tests/test_transformation/test_power_transformer.py ........... [ 93%] tests/test_transformation/test_reciprocal_transformer.py ..... [ 94%] tests/test_transformation/test_yeojohnson_transformer.py .......... [ 94%] tests/test_variable_handling/test_check_variables.py ............. [ 95%] tests/test_variable_handling/test_find_variables.py ........ [ 95%] tests/test_variable_handling/test_remove_variables.py .... [ 95%] tests/test_wrappers/test_check_estimator_wrappers.py .... [ 96%] tests/test_wrappers/test_sklearn_wrapper.py ............................ [ 97%] ............................................ [100%] =============================== warnings summary =============================== tests/test_base_transformers/test_get_feature_names_out_mixin.py: 49 warnings /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/_tags.py:338: DeprecationWarning: The following error was raised: 'MockTransformer' object has no attribute '__sklearn_tags__'. It seems that there are no classes that implement `__sklearn_tags__` in the MRO and/or all classes in the MRO call `super().__sklearn_tags__()`. Make sure to inherit from `BaseEstimator` which implements `__sklearn_tags__` (or alternatively define `__sklearn_tags__` but we don't recommend this approach). Note that `BaseEstimator` needs to be on the right side of other Mixins in the inheritance order. The default are now used instead since retrieving tags failed. This warning will be replaced by an error in 1.8. warnings.warn( tests/test_base_transformers/test_get_feature_names_out_mixin.py: 39 warnings /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/_tags.py:338: DeprecationWarning: The following error was raised: 'MockCreator' object has no attribute '__sklearn_tags__'. It seems that there are no classes that implement `__sklearn_tags__` in the MRO and/or all classes in the MRO call `super().__sklearn_tags__()`. Make sure to inherit from `BaseEstimator` which implements `__sklearn_tags__` (or alternatively define `__sklearn_tags__` but we don't recommend this approach). Note that `BaseEstimator` needs to be on the right side of other Mixins in the inheritance order. The default are now used instead since retrieving tags failed. This warning will be replaced by an error in 1.8. warnings.warn( tests/test_base_transformers/test_get_feature_names_out_mixin.py: 24 warnings /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/_tags.py:338: DeprecationWarning: The following error was raised: 'MockSelector' object has no attribute '__sklearn_tags__'. It seems that there are no classes that implement `__sklearn_tags__` in the MRO and/or all classes in the MRO call `super().__sklearn_tags__()`. Make sure to inherit from `BaseEstimator` which implements `__sklearn_tags__` (or alternatively define `__sklearn_tags__` but we don't recommend this approach). Note that `BaseEstimator` needs to be on the right side of other Mixins in the inheritance order. The default are now used instead since retrieving tags failed. This warning will be replaced by an error in 1.8. warnings.warn( tests/test_creation/test_math_features.py::test_aggregations_with_functions /home/circleci/project/feature_engine/creation/math_features.py:212: FutureWarning: The provided callable is currently using Series.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "sum" instead. X[new_variable_names] = X[self.variables].agg(self.func, axis=1) tests/test_creation/test_math_features.py::test_aggregations_with_functions tests/test_creation/test_math_features.py::test_user_enters_two_operations /home/circleci/project/feature_engine/creation/math_features.py:212: FutureWarning: The provided callable is currently using Series.mean. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "mean" instead. X[new_variable_names] = X[self.variables].agg(self.func, axis=1) tests/test_creation/test_math_features.py::test_aggregations_with_functions /home/circleci/project/feature_engine/creation/math_features.py:212: FutureWarning: The provided callable is currently using Series.std. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "std" instead. X[new_variable_names] = X[self.variables].agg(self.func, axis=1) tests/test_imputation/test_check_estimator_imputers.py::test_check_estimator_from_sklearn[estimator0] /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/pandas/core/nanops.py:789: ComplexWarning: Casting complex values to real discards the imaginary part values = values.astype("f8") tests/test_imputation/test_check_estimator_imputers.py::test_check_estimator_from_sklearn[estimator3] tests/test_outliers/test_check_estimator_outliers.py::test_check_estimator_from_sklearn[estimator1-failed_tests1] tests/test_outliers/test_check_estimator_outliers.py::test_check_estimator_from_sklearn[estimator2-failed_tests2] /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/numpy/_core/_methods.py:51: ComplexWarning: Casting complex values to real discards the imaginary part return umr_sum(a, axis, dtype, out, keepdims, initial, where) tests/test_imputation/test_check_estimator_imputers.py::test_check_estimator_from_sklearn[estimator3] tests/test_outliers/test_check_estimator_outliers.py::test_check_estimator_from_sklearn[estimator1-failed_tests1] tests/test_outliers/test_check_estimator_outliers.py::test_check_estimator_from_sklearn[estimator2-failed_tests2] /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/pandas/core/nanops.py:950: RuntimeWarning: invalid value encountered in sqrt result = np.sqrt(nanvar(values, axis=axis, skipna=skipna, ddof=ddof, mask=mask)) tests/test_prediction/test_check_estimator_prediction.py::test_variable_selection[estimator0] tests/test_prediction/test_check_estimator_prediction.py::test_variable_selection[estimator1] tests/test_prediction/test_check_estimator_prediction.py::test_variable_selection[estimator2] /home/circleci/project/feature_engine/encoding/mean_encoding.py:227: FutureWarning: The behavior of value_counts with object-dtype is deprecated. In a future version, this will *not* perform dtype inference on the resulting index. To retain the old behavior, use `result.index = result.index.infer_objects()` counts = X[var].value_counts() tests/test_selection/test_check_estimator_selectors.py::test_check_estimator_from_sklearn[estimator6] tests/test_selection/test_check_estimator_selectors.py::test_check_estimator_from_sklearn[estimator8] tests/test_selection/test_check_estimator_selectors.py::test_check_estimator_from_sklearn[estimator9] tests/test_selection/test_check_estimator_selectors.py::test_check_estimator_from_sklearn[estimator10] /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/model_selection/_validation.py:516: FitFailedWarning: 2 fits failed out of a total of 3. The score on these train-test partitions for these parameters will be set to nan. If these failures are not expected, you can try to debug them by setting error_score='raise'. Below are more details about the failures: -------------------------------------------------------------------------------- 2 fits failed with the following error: Traceback (most recent call last): File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/model_selection/_validation.py", line 859, in _fit_and_score estimator.fit(X_train, y_train, **fit_params) File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/base.py", line 1365, in wrapper return fit_method(estimator, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/linear_model/_logistic.py", line 1247, in fit X, y = validate_data( ^^^^^^^^^^^^^^ File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 2971, in validate_data X, y = check_X_y(X, y, **check_params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 1368, in check_X_y X = check_array( ^^^^^^^^^^^^ File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 1105, in check_array _assert_all_finite( File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 120, in _assert_all_finite _assert_all_finite_element_wise( File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 169, in _assert_all_finite_element_wise raise ValueError(msg_err) ValueError: Input X contains NaN. LogisticRegression does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values warnings.warn(some_fits_failed_message, FitFailedWarning) tests/test_selection/test_check_estimator_selectors.py::test_check_estimator_from_sklearn[estimator12] /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/model_selection/_validation.py:516: FitFailedWarning: 4 fits failed out of a total of 5. The score on these train-test partitions for these parameters will be set to nan. If these failures are not expected, you can try to debug them by setting error_score='raise'. Below are more details about the failures: -------------------------------------------------------------------------------- 4 fits failed with the following error: Traceback (most recent call last): File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/model_selection/_validation.py", line 859, in _fit_and_score estimator.fit(X_train, y_train, **fit_params) File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/base.py", line 1365, in wrapper return fit_method(estimator, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/linear_model/_logistic.py", line 1247, in fit X, y = validate_data( ^^^^^^^^^^^^^^ File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 2971, in validate_data X, y = check_X_y(X, y, **check_params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 1368, in check_X_y X = check_array( ^^^^^^^^^^^^ File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 1105, in check_array _assert_all_finite( File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 120, in _assert_all_finite _assert_all_finite_element_wise( File "/home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/utils/validation.py", line 169, in _assert_all_finite_element_wise raise ValueError(msg_err) ValueError: Input X contains NaN. LogisticRegression does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values warnings.warn(some_fits_failed_message, FitFailedWarning) tests/test_selection/test_check_estimator_selectors.py: 19 warnings /home/circleci/project/feature_engine/selection/mrmr.py:465: RuntimeWarning: divide by zero encountered in divide mrmr = relevance / redundance tests/test_selection/test_check_estimator_selectors.py: 22 warnings /home/circleci/project/feature_engine/selection/mrmr.py:465: RuntimeWarning: invalid value encountered in divide mrmr = relevance / redundance tests/test_selection/test_drop_high_psi_features.py::test_split_by_list[time-cut_off_list3] /home/circleci/project/feature_engine/selection/drop_psi_features.py:684: FutureWarning: The behavior of 'isin' with dtype=datetime64[ns] and castable values (e.g. strings) is deprecated. In a future version, these will not be considered matching by isin. Explicitly cast to the appropriate dtype before calling isin instead. is_within_cut_off = np.array(reference.isin(self.cut_off_)) tests/test_selection/test_drop_high_psi_features.py::test_split_by_list[time-cut_off_list3] /home/circleci/project/tests/test_selection/test_drop_high_psi_features.py:654: FutureWarning: The behavior of 'isin' with dtype=datetime64[ns] and castable values (e.g. strings) is deprecated. In a future version, these will not be considered matching by isin. Explicitly cast to the appropriate dtype before calling isin instead. a, df_mixed_types[df_mixed_types[col].isin(cut_off_list)] tests/test_selection/test_drop_high_psi_features.py::test_split_by_list[time-cut_off_list3] /home/circleci/project/tests/test_selection/test_drop_high_psi_features.py:657: FutureWarning: The behavior of 'isin' with dtype=datetime64[ns] and castable values (e.g. strings) is deprecated. In a future version, these will not be considered matching by isin. Explicitly cast to the appropriate dtype before calling isin instead. b, df_mixed_types[~df_mixed_types[col].isin(cut_off_list)] tests/test_wrappers/test_sklearn_wrapper.py::test_wrap_transformers[transformer1] tests/test_wrappers/test_sklearn_wrapper.py::test_wrap_transformers[transformer1] tests/test_wrappers/test_sklearn_wrapper.py::test_wrap_transformers[transformer1] tests/test_wrappers/test_sklearn_wrapper.py::test_wrap_transformers[transformer1] tests/test_wrappers/test_sklearn_wrapper.py::test_get_feature_names_out_transformers[transformer1-varlist0] tests/test_wrappers/test_sklearn_wrapper.py::test_get_feature_names_out_transformers[transformer1-None] /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/preprocessing/_discretization.py:296: FutureWarning: The current default behavior, quantile_method='linear', will be changed to quantile_method='averaged_inverted_cdf' in scikit-learn version 1.9 to naturally support sample weight equivalence properties by default. Pass quantile_method='averaged_inverted_cdf' explicitly to silence this warning. warnings.warn( tests/test_wrappers/test_sklearn_wrapper.py::test_wrap_transformers[transformer6] tests/test_wrappers/test_sklearn_wrapper.py::test_wrap_transformers[transformer6] tests/test_wrappers/test_sklearn_wrapper.py::test_get_feature_names_out_transformers[transformer6-None] /home/circleci/project/.tox/unit_tests/lib/python3.12/site-packages/sklearn/preprocessing/_function_transformer.py:390: RuntimeWarning: invalid value encountered in log return func(X, **(kw_args if kw_args else {})) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ================ 1850 passed, 184 warnings in 321.87s (0:05:21) ================ py312: OK (358.64=setup[34.00]+cmd[324.64] seconds) congratulations :) (358.66 seconds)