diff --git a/doc/whats_new/upcoming_changes/sklearn.compose/32713.fix.rst b/doc/whats_new/upcoming_changes/sklearn.compose/32713.fix.rst new file mode 100644 index 0000000000000..6eb85870877b1 --- /dev/null +++ b/doc/whats_new/upcoming_changes/sklearn.compose/32713.fix.rst @@ -0,0 +1,4 @@ +- The dotted line for :class:`compose.ColumnTransformer` in its HTML display + now includes only its elements. The behaviour when a remainder is used, + has also been corrected. + By :user:`Dea María Léon ` diff --git a/sklearn/compose/_column_transformer.py b/sklearn/compose/_column_transformer.py index e2c196f84d313..ed0003c502149 100644 --- a/sklearn/compose/_column_transformer.py +++ b/sklearn/compose/_column_transformer.py @@ -1237,7 +1237,7 @@ def _sk_visual_block_(self): self.transformers, [("remainder", self.remainder, remainder_columns)] ) else: - transformers = chain(self.transformers, [("remainder", self.remainder, "")]) + transformers = chain(self.transformers, [("remainder", self.remainder, [])]) names, transformers, name_details = zip(*transformers) return _VisualBlock( diff --git a/sklearn/compose/tests/test_column_transformer.py b/sklearn/compose/tests/test_column_transformer.py index a4c9ba38f460b..8dad483999dd2 100644 --- a/sklearn/compose/tests/test_column_transformer.py +++ b/sklearn/compose/tests/test_column_transformer.py @@ -1538,7 +1538,7 @@ def test_sk_visual_block_remainder(remainder): ) visual_block = ct._sk_visual_block_() assert visual_block.names == ("ohe", "remainder") - assert visual_block.name_details == (["col1", "col2"], "") + assert visual_block.name_details == (["col1", "col2"], []) assert visual_block.estimators == (ohe, remainder) diff --git a/sklearn/utils/_repr_html/estimator.py b/sklearn/utils/_repr_html/estimator.py index cc62922713cf9..831f2485d9ebb 100644 --- a/sklearn/utils/_repr_html/estimator.py +++ b/sklearn/utils/_repr_html/estimator.py @@ -184,10 +184,11 @@ def _write_label_html( f'?{doc_label}' ) - + if name == "passthrough" or name_details == "[]": + name_caption = "" name_caption_div = ( "" - if name_caption is None + if name_caption is None or name_caption == "" else f'
{html.escape(name_caption)}
' ) name_caption_div = f"
{name}
{name_caption_div}
" @@ -196,10 +197,13 @@ def _write_label_html( if doc_link or is_fitted_icon else "" ) + label_arrow_class = ( + "" if name == "passthrough" else "sk-toggleable__label-arrow" + ) label_html = ( f'' + f'{label_arrow_class}">{name_caption_div}{links_div}' ) fmt_str = ( @@ -212,6 +216,8 @@ def _write_label_html( if params: fmt_str = "".join([fmt_str, f"{params}"]) elif name_details and ("Pipeline" not in name): + if name == "passthrough" or name_details == "[]": + name_details = "" fmt_str = "".join([fmt_str, f"
{name_details}
"]) out.write(fmt_str) @@ -382,7 +388,10 @@ def _write_estimator_html( out.write("") elif est_block.kind == "single": - if hasattr(estimator, "_get_params_html"): + if ( + hasattr(estimator, "_get_params_html") + and not est_block.names == "passthrough" + ): params = estimator._get_params_html(doc_link=doc_link)._repr_html_inner() else: params = ""