From 50082cdf070959a96381d3bb7807fc91f2a2a0ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 14 Nov 2025 17:48:31 +0100 Subject: [PATCH 01/15] wip --- sklearn/utils/_repr_html/estimator.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sklearn/utils/_repr_html/estimator.py b/sklearn/utils/_repr_html/estimator.py index cc62922713cf9..093e7c93169d2 100644 --- a/sklearn/utils/_repr_html/estimator.py +++ b/sklearn/utils/_repr_html/estimator.py @@ -184,7 +184,8 @@ def _write_label_html( f'?{doc_label}' ) - + if name == "passthrough": + name_caption = "" name_caption_div = ( "" if name_caption is None @@ -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": + 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 = "" From 3e8327c5b8a11b4f2fdd0064c1ae641eb4e0fc78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 14 Nov 2025 17:56:34 +0100 Subject: [PATCH 02/15] Fixing bug --- sklearn/compose/_column_transformer.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sklearn/compose/_column_transformer.py b/sklearn/compose/_column_transformer.py index 4e052399d36f5..0464f477b452d 100644 --- a/sklearn/compose/_column_transformer.py +++ b/sklearn/compose/_column_transformer.py @@ -1223,9 +1223,13 @@ def _hstack(self, Xs, *, n_samples): return np.hstack(Xs) def _sk_visual_block_(self): - if isinstance(self.remainder, str) and self.remainder == "drop": - transformers = self.transformers - elif hasattr(self, "_remainder"): + transformers = [ + transformer + for transformer in getattr(self, "transformers_", self.transformers) + if transformer[1] != "drop" + ] + # We can find remainder and its column only when it's fitted + if hasattr(self, "_remainder"): remainder_columns = self._remainder[2] if ( hasattr(self, "feature_names_in_") @@ -1237,7 +1241,7 @@ def _sk_visual_block_(self): self.transformers, [("remainder", self.remainder, remainder_columns)] ) else: - transformers = chain(self.transformers, [("remainder", self.remainder, "")]) + remainder_columns = "" names, transformers, name_details = zip(*transformers) return _VisualBlock( From 07297253f728a19a3ab3f6ecf11fdc1242d37a09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Mon, 17 Nov 2025 16:39:23 +0100 Subject: [PATCH 03/15] wip --- sklearn/compose/_column_transformer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sklearn/compose/_column_transformer.py b/sklearn/compose/_column_transformer.py index 0464f477b452d..6ec7b7756866c 100644 --- a/sklearn/compose/_column_transformer.py +++ b/sklearn/compose/_column_transformer.py @@ -1223,6 +1223,7 @@ def _hstack(self, Xs, *, n_samples): return np.hstack(Xs) def _sk_visual_block_(self): + breakpoint() transformers = [ transformer for transformer in getattr(self, "transformers_", self.transformers) @@ -1241,7 +1242,8 @@ def _sk_visual_block_(self): self.transformers, [("remainder", self.remainder, remainder_columns)] ) else: - remainder_columns = "" + transformers = chain(self.transformers, [("remainder", self.remainder, "")]) + # remainder_columns = "" names, transformers, name_details = zip(*transformers) return _VisualBlock( From 160312420c33e9365966fe8d3cda60b39191dbb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Mon, 24 Nov 2025 11:30:28 +0100 Subject: [PATCH 04/15] wip --- sklearn/compose/_column_transformer.py | 48 +++++++++++++++----------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/sklearn/compose/_column_transformer.py b/sklearn/compose/_column_transformer.py index 6ec7b7756866c..3120e7b0d53b5 100644 --- a/sklearn/compose/_column_transformer.py +++ b/sklearn/compose/_column_transformer.py @@ -1223,29 +1223,37 @@ def _hstack(self, Xs, *, n_samples): return np.hstack(Xs) def _sk_visual_block_(self): - breakpoint() - transformers = [ - transformer - for transformer in getattr(self, "transformers_", self.transformers) - if transformer[1] != "drop" - ] - # We can find remainder and its column only when it's fitted - if hasattr(self, "_remainder"): - remainder_columns = self._remainder[2] - if ( - hasattr(self, "feature_names_in_") - and remainder_columns - and not all(isinstance(col, str) for col in remainder_columns) - ): - remainder_columns = self.feature_names_in_[remainder_columns].tolist() - transformers = chain( - self.transformers, [("remainder", self.remainder, remainder_columns)] - ) + if hasattr(self, "transformers_"): + transformers = [ + transformer + for transformer in getattr(self, "transformers_", self.transformers) + if transformer[1] != "drop" + ] + # We can find remainder columns only when columntransformer is fitted + if hasattr(self, "_remainder"): + remainder_columns = self._remainder[2] + if ( + hasattr(self, "feature_names_in_") + and remainder_columns + and not all(isinstance(col, str) for col in remainder_columns) + ): + remainder_columns = self.feature_names_in_[ + remainder_columns + ].tolist() + transformers = chain( + self.transformers, + [("remainder", self.remainder, remainder_columns)], + ) else: - transformers = chain(self.transformers, [("remainder", self.remainder, "")]) - # remainder_columns = "" + if self.remainder != "drop": + transformers = chain( + self.transformers, [("remainder", self.remainder, [])] + ) + else: + transformers = self.transformers names, transformers, name_details = zip(*transformers) + return _VisualBlock( "parallel", transformers, names=names, name_details=name_details ) From 182583e7f4f0643284e56710fb4156c2f3602a02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Tue, 25 Nov 2025 15:46:35 +0100 Subject: [PATCH 05/15] Reverted changes that were for PR31937 --- sklearn/compose/_column_transformer.py | 42 +++++++++----------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/sklearn/compose/_column_transformer.py b/sklearn/compose/_column_transformer.py index 3120e7b0d53b5..fd2da255f6d11 100644 --- a/sklearn/compose/_column_transformer.py +++ b/sklearn/compose/_column_transformer.py @@ -1223,37 +1223,23 @@ def _hstack(self, Xs, *, n_samples): return np.hstack(Xs) def _sk_visual_block_(self): - if hasattr(self, "transformers_"): - transformers = [ - transformer - for transformer in getattr(self, "transformers_", self.transformers) - if transformer[1] != "drop" - ] - # We can find remainder columns only when columntransformer is fitted - if hasattr(self, "_remainder"): - remainder_columns = self._remainder[2] - if ( - hasattr(self, "feature_names_in_") - and remainder_columns - and not all(isinstance(col, str) for col in remainder_columns) - ): - remainder_columns = self.feature_names_in_[ - remainder_columns - ].tolist() - transformers = chain( - self.transformers, - [("remainder", self.remainder, remainder_columns)], - ) + if isinstance(self.remainder, str) and self.remainder == "drop": + transformers = self.transformers + elif hasattr(self, "_remainder"): + remainder_columns = self._remainder[2] + if ( + hasattr(self, "feature_names_in_") + and remainder_columns + and not all(isinstance(col, str) for col in remainder_columns) + ): + remainder_columns = self.feature_names_in_[remainder_columns].tolist() + transformers = chain( + self.transformers, [("remainder", self.remainder, remainder_columns)] + ) else: - if self.remainder != "drop": - transformers = chain( - self.transformers, [("remainder", self.remainder, [])] - ) - else: - transformers = self.transformers + transformers = chain(self.transformers, [("remainder", self.remainder, [])]) names, transformers, name_details = zip(*transformers) - return _VisualBlock( "parallel", transformers, names=names, name_details=name_details ) From fafb9179d21a7c94b458ed33cd8ecc899d7f9ad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Tue, 25 Nov 2025 16:31:04 +0100 Subject: [PATCH 06/15] remove empty list below remainder --- sklearn/utils/_repr_html/estimator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sklearn/utils/_repr_html/estimator.py b/sklearn/utils/_repr_html/estimator.py index 093e7c93169d2..831f2485d9ebb 100644 --- a/sklearn/utils/_repr_html/estimator.py +++ b/sklearn/utils/_repr_html/estimator.py @@ -184,11 +184,11 @@ def _write_label_html( f'?{doc_label}' ) - if name == "passthrough": + 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}
" @@ -216,7 +216,7 @@ def _write_label_html( if params: fmt_str = "".join([fmt_str, f"{params}"]) elif name_details and ("Pipeline" not in name): - if name == "passthrough": + if name == "passthrough" or name_details == "[]": name_details = "" fmt_str = "".join([fmt_str, f"
{name_details}
"]) From 471ddb0cc12d22811aee5dfb5eb58824b2034132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Tue, 25 Nov 2025 17:04:31 +0100 Subject: [PATCH 07/15] changed test --- sklearn/compose/tests/test_column_transformer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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) From f43cc0d7c94c40e56f0077b0b09f6340f462ab71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 12 Dec 2025 11:34:48 +0100 Subject: [PATCH 08/15] Added changelog file --- sklearn/compose/32713.fix.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sklearn/compose/32713.fix.rst diff --git a/sklearn/compose/32713.fix.rst b/sklearn/compose/32713.fix.rst new file mode 100644 index 0000000000000..54a1f62dfc8e3 --- /dev/null +++ b/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 ` From 09ac2eb8ca4ed52e5b902466ad96e826fd13b128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 12 Dec 2025 11:59:15 +0100 Subject: [PATCH 09/15] moved changelog --- sklearn/{compose => utils}/32713.fix.rst | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sklearn/{compose => utils}/32713.fix.rst (100%) diff --git a/sklearn/compose/32713.fix.rst b/sklearn/utils/32713.fix.rst similarity index 100% rename from sklearn/compose/32713.fix.rst rename to sklearn/utils/32713.fix.rst From e2343c172241cf1da3024b9fdd977cad5a86c155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 12 Dec 2025 12:08:28 +0100 Subject: [PATCH 10/15] fix file --- sklearn/utils/32713.fix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/utils/32713.fix.rst b/sklearn/utils/32713.fix.rst index 54a1f62dfc8e3..6c6eb3c877405 100644 --- a/sklearn/utils/32713.fix.rst +++ b/sklearn/utils/32713.fix.rst @@ -1,4 +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 ` +By :user:`Dea María Léon ` From f0beb0d0b6e050ac83ca969727a2c1fbb54700f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 12 Dec 2025 13:34:25 +0100 Subject: [PATCH 11/15] again --- sklearn/utils/32713.fix.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sklearn/utils/32713.fix.rst b/sklearn/utils/32713.fix.rst index 6c6eb3c877405..6eb85870877b1 100644 --- a/sklearn/utils/32713.fix.rst +++ b/sklearn/utils/32713.fix.rst @@ -1,4 +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 ` +- 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 ` From d2bd717bbfd356f2231e12d6839af66175011cf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 12 Dec 2025 14:25:53 +0100 Subject: [PATCH 12/15] Try again --- sklearn/utils/32713.fix.rst | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 sklearn/utils/32713.fix.rst diff --git a/sklearn/utils/32713.fix.rst b/sklearn/utils/32713.fix.rst deleted file mode 100644 index 6eb85870877b1..0000000000000 --- a/sklearn/utils/32713.fix.rst +++ /dev/null @@ -1,4 +0,0 @@ -- 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 ` From 0b00aad3a8d7d63ae4b5b2d92ea1f67be57b1286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 12 Dec 2025 14:27:23 +0100 Subject: [PATCH 13/15] Still --- doc/whats_new/upcoming_changes/sklearn.utils/32713.fix.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 doc/whats_new/upcoming_changes/sklearn.utils/32713.fix.rst diff --git a/doc/whats_new/upcoming_changes/sklearn.utils/32713.fix.rst b/doc/whats_new/upcoming_changes/sklearn.utils/32713.fix.rst new file mode 100644 index 0000000000000..6eb85870877b1 --- /dev/null +++ b/doc/whats_new/upcoming_changes/sklearn.utils/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 ` From 3540a0fe1d2693c708cc1e0ce0913d706a105252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 12 Dec 2025 17:15:10 +0100 Subject: [PATCH 14/15] Moved changelog file --- doc/whats_new/upcoming_changes/sklearn.compose/32713.fix.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 doc/whats_new/upcoming_changes/sklearn.compose/32713.fix.rst 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 ` From 428e9544a6cb085244669f75d43d33f74167f71a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dea=20Mar=C3=ADa=20L=C3=A9on?= Date: Fri, 12 Dec 2025 17:16:18 +0100 Subject: [PATCH 15/15] Remove file from wrong subdirectory --- doc/whats_new/upcoming_changes/sklearn.utils/32713.fix.rst | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 doc/whats_new/upcoming_changes/sklearn.utils/32713.fix.rst diff --git a/doc/whats_new/upcoming_changes/sklearn.utils/32713.fix.rst b/doc/whats_new/upcoming_changes/sklearn.utils/32713.fix.rst deleted file mode 100644 index 6eb85870877b1..0000000000000 --- a/doc/whats_new/upcoming_changes/sklearn.utils/32713.fix.rst +++ /dev/null @@ -1,4 +0,0 @@ -- 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 `