Talip7/scikit-learn-issues-multilabel huggingface dataset:
StandardScaler is `stateless`

### Describe the bug

The StandardScaler seems to be stateless in version 1.6.1. But fit changes the state of the StandardScaler if I got it correctly. 

### Steps/Code to Reproduce

```
StandardScaler()._get_tags()["stateless"]
```

### Expected Results

False

### Actual Results

True

### Versions

```shell
System:
    python: 3.10.14 (main, Jul 18 2024, 22:40:44) [Clang 15.0.0 (clang-1500.1.0.2.5)]
executable: ****/python
   machine: macOS-15.2-arm64-arm-64bit

Python dependencies:
      sklearn: 1.6.1
          pip: 24.1.2
   setuptools: 71.0.3
        numpy: 1.26.4
        scipy: 1.13.1
       Cython: 3.0.11
       pandas: 2.2.3
   matplotlib: 3.9.2
       joblib: 1.4.2
threadpoolctl: 3.5.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: ****.dylib
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: armv8

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: *****
        version: 0.3.27
threading_layer: pthreads
   architecture: neoversen1

       user_api: openmp
   internal_api: openmp
    num_threads: 8
         prefix: libomp
       filepath: *****
        version: None
```

COMMENT:
> As a workaround please use the "requires_fit" tag

Actually it is the right way to do with the new tag infrastructure

```python

from sklearn.utils import get_tags
from sklearn.preprocessing import StandardScaler

get_tags(StandardScaler()).requires_fit
```

And indeed, there is a bug with the conversion if the old tag infrastructure that we need to solve.

Labels: Bug, Regression
StandardScaler is `stateless`

### Describe the bug

The StandardScaler seems to be stateless in version 1.6.1. But fit changes the state of the StandardScaler if I got it correctly. 

### Steps/Code to Reproduce

```
StandardScaler()._get_tags()["stateless"]
```

### Expected Results

False

### Actual Results

True

### Versions

```shell
System:
    python: 3.10.14 (main, Jul 18 2024, 22:40:44) [Clang 15.0.0 (clang-1500.1.0.2.5)]
executable: ****/python
   machine: macOS-15.2-arm64-arm-64bit

Python dependencies:
      sklearn: 1.6.1
          pip: 24.1.2
   setuptools: 71.0.3
        numpy: 1.26.4
        scipy: 1.13.1
       Cython: 3.0.11
       pandas: 2.2.3
   matplotlib: 3.9.2
       joblib: 1.4.2
threadpoolctl: 3.5.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: ****.dylib
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: armv8

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: *****
        version: 0.3.27
threading_layer: pthreads
   architecture: neoversen1

       user_api: openmp
   internal_api: openmp
    num_threads: 8
         prefix: libomp
       filepath: *****
        version: None
```

COMMENT:
So the bug is here:

https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/utils/_tags.py#L590

We should change to:

```python
        "stateless": not new_tags.requires_fit,
```

Labels: Bug, Regression
StandardScaler is `stateless`

### Describe the bug

The StandardScaler seems to be stateless in version 1.6.1. But fit changes the state of the StandardScaler if I got it correctly. 

### Steps/Code to Reproduce

```
StandardScaler()._get_tags()["stateless"]
```

### Expected Results

False

### Actual Results

True

### Versions

```shell
System:
    python: 3.10.14 (main, Jul 18 2024, 22:40:44) [Clang 15.0.0 (clang-1500.1.0.2.5)]
executable: ****/python
   machine: macOS-15.2-arm64-arm-64bit

Python dependencies:
      sklearn: 1.6.1
          pip: 24.1.2
   setuptools: 71.0.3
        numpy: 1.26.4
        scipy: 1.13.1
       Cython: 3.0.11
       pandas: 2.2.3
   matplotlib: 3.9.2
       joblib: 1.4.2
threadpoolctl: 3.5.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: ****.dylib
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: armv8

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: *****
        version: 0.3.27
threading_layer: pthreads
   architecture: neoversen1

       user_api: openmp
   internal_api: openmp
    num_threads: 8
         prefix: libomp
       filepath: *****
        version: None
```

COMMENT:
@EmilyXinyi, would you like to take care of that? Don't feel obliged though, only if you like.

Labels: Bug, Regression
StandardScaler is `stateless`

### Describe the bug

The StandardScaler seems to be stateless in version 1.6.1. But fit changes the state of the StandardScaler if I got it correctly. 

### Steps/Code to Reproduce

```
StandardScaler()._get_tags()["stateless"]
```

### Expected Results

False

### Actual Results

True

### Versions

```shell
System:
    python: 3.10.14 (main, Jul 18 2024, 22:40:44) [Clang 15.0.0 (clang-1500.1.0.2.5)]
executable: ****/python
   machine: macOS-15.2-arm64-arm-64bit

Python dependencies:
      sklearn: 1.6.1
          pip: 24.1.2
   setuptools: 71.0.3
        numpy: 1.26.4
        scipy: 1.13.1
       Cython: 3.0.11
       pandas: 2.2.3
   matplotlib: 3.9.2
       joblib: 1.4.2
threadpoolctl: 3.5.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: ****.dylib
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: armv8

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: *****
        version: 0.3.27
threading_layer: pthreads
   architecture: neoversen1

       user_api: openmp
   internal_api: openmp
    num_threads: 8
         prefix: libomp
       filepath: *****
        version: None
```

COMMENT:
Hi @StefanieSenger thanks for flagging! I can probably take care of this next weekend, but if it's an urgent change that needs to go out before then, I most likely won't have time during the work week. 
(I will come back to this issue next weekend to check for updates and possible put in a fix)

Labels: Bug, Regression
StandardScaler is `stateless`

### Describe the bug

The StandardScaler seems to be stateless in version 1.6.1. But fit changes the state of the StandardScaler if I got it correctly. 

### Steps/Code to Reproduce

```
StandardScaler()._get_tags()["stateless"]
```

### Expected Results

False

### Actual Results

True

### Versions

```shell
System:
    python: 3.10.14 (main, Jul 18 2024, 22:40:44) [Clang 15.0.0 (clang-1500.1.0.2.5)]
executable: ****/python
   machine: macOS-15.2-arm64-arm-64bit

Python dependencies:
      sklearn: 1.6.1
          pip: 24.1.2
   setuptools: 71.0.3
        numpy: 1.26.4
        scipy: 1.13.1
       Cython: 3.0.11
       pandas: 2.2.3
   matplotlib: 3.9.2
       joblib: 1.4.2
threadpoolctl: 3.5.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: ****.dylib
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: armv8

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: *****
        version: 0.3.27
threading_layer: pthreads
   architecture: neoversen1

       user_api: openmp
   internal_api: openmp
    num_threads: 8
         prefix: libomp
       filepath: *****
        version: None
```

COMMENT:
I just put in a PR for a fix, but out of curiosity, what is the purpose of this tag thing? I have not used this functionality before, I can't seem to understand it very well just by reading the associated code, so if someone could please enlighten me that would be greatly appreciated 😸

Labels: Bug, Regression
StandardScaler is `stateless`

### Describe the bug

The StandardScaler seems to be stateless in version 1.6.1. But fit changes the state of the StandardScaler if I got it correctly. 

### Steps/Code to Reproduce

```
StandardScaler()._get_tags()["stateless"]
```

### Expected Results

False

### Actual Results

True

### Versions

```shell
System:
    python: 3.10.14 (main, Jul 18 2024, 22:40:44) [Clang 15.0.0 (clang-1500.1.0.2.5)]
executable: ****/python
   machine: macOS-15.2-arm64-arm-64bit

Python dependencies:
      sklearn: 1.6.1
          pip: 24.1.2
   setuptools: 71.0.3
        numpy: 1.26.4
        scipy: 1.13.1
       Cython: 3.0.11
       pandas: 2.2.3
   matplotlib: 3.9.2
       joblib: 1.4.2
threadpoolctl: 3.5.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: ****.dylib
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: armv8

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: *****
        version: 0.3.27
threading_layer: pthreads
   architecture: neoversen1

       user_api: openmp
   internal_api: openmp
    num_threads: 8
         prefix: libomp
       filepath: *****
        version: None
```

COMMENT:
Maybe the documentation can help: https://scikit-learn.org/stable/developers/develop.html#estimator-tags

In short, the first use of it was to give some information regarding the capabilities of an estimator and it was used in the common tests to know whether an estimator is compatible with the scikit-learn API.

Here, the `stateless` tag enforce a specific behaviour of the estimator that is specifically tested in the common test: an estimator can be used by calling `transform` without a previous call to `fit`.

Nowadays, we sometime use the tag in the source code as well (not only in test).

Labels: Bug, Regression
StandardScaler is `stateless`

### Describe the bug

The StandardScaler seems to be stateless in version 1.6.1. But fit changes the state of the StandardScaler if I got it correctly. 

### Steps/Code to Reproduce

```
StandardScaler()._get_tags()["stateless"]
```

### Expected Results

False

### Actual Results

True

### Versions

```shell
System:
    python: 3.10.14 (main, Jul 18 2024, 22:40:44) [Clang 15.0.0 (clang-1500.1.0.2.5)]
executable: ****/python
   machine: macOS-15.2-arm64-arm-64bit

Python dependencies:
      sklearn: 1.6.1
          pip: 24.1.2
   setuptools: 71.0.3
        numpy: 1.26.4
        scipy: 1.13.1
       Cython: 3.0.11
       pandas: 2.2.3
   matplotlib: 3.9.2
       joblib: 1.4.2
threadpoolctl: 3.5.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: ****.dylib
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: armv8

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: *****
        version: 0.3.27
threading_layer: pthreads
   architecture: neoversen1

       user_api: openmp
   internal_api: openmp
    num_threads: 8
         prefix: libomp
       filepath: *****
        version: None
```

COMMENT:
Closing since we end the deprecation cycle and it will be fixed in the up coming 1.7 release.

Labels: Bug, Regression
⚠️ CI failed on Wheel builder (last failure: Feb 14, 2025) ⚠️

**CI failed on [Wheel builder](https://github.com/scikit-learn/scikit-learn/actions/runs/13322079886)** (Feb 14, 2025)

COMMENT:
Odd:

```
  info: This container will host the build for cp310-manylinux_aarch64...
  + docker version -f '{{json .}}'
  Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
                                                              ✕ 0.03s
Error: Build failed because docker is too old or is not working properly.
```

Labels: Needs Triage
⚠️ CI failed on Wheel builder (last failure: Feb 14, 2025) ⚠️

**CI failed on [Wheel builder](https://github.com/scikit-learn/scikit-learn/actions/runs/13322079886)** (Feb 14, 2025)

COMMENT:
## CI is no longer failing! ✅

[Successful run](https://github.com/scikit-learn/scikit-learn/actions/runs/13341472600) on Feb 15, 2025

Labels: Needs Triage
DOC Donating to the project

### Describe the issue linked to the documentation

For discussion.
Updating this page: https://scikit-learn.org/stable/about.html#donating-to-the-project

Include option(s) for various donation links (in addition to directly via NF), such as GitHub Sponsors and Benevity, OC.

### Suggest a potential alternative/fix

_No response_

COMMENT:
Hi @reshamas,
I saw this issue about updating the donation page to include alternative methods like GitHub Sponsors, Benevity, and Open Collective. I'd love to contribute to this as my first issue!

Would it be possible to assign this to me? I can also explore alternative solutions if needed and suggest the best approach. Since this is my first contribution, I might need some guidance, but I’ll make sure to follow the contributing guidelines.

Looking forward to your thoughts!
Thanks!

Labels: Documentation
DOC Donating to the project

### Describe the issue linked to the documentation

For discussion.
Updating this page: https://scikit-learn.org/stable/about.html#donating-to-the-project

Include option(s) for various donation links (in addition to directly via NF), such as GitHub Sponsors and Benevity, OC.

### Suggest a potential alternative/fix

_No response_

COMMENT:
I’d love to contribute by improving the donation documentation to make it clearer and more accessible. A well-structured guide can help increase financial support for the project.

I have experience in writing clear documentation and would focus on; Explaining why donations matter, Providing step-by-step instructions and Adding FAQs for common concerns.
Could you assign me   @reshamas  I’d be happy to help!

Labels: Documentation
DOC Donating to the project

### Describe the issue linked to the documentation

For discussion.
Updating this page: https://scikit-learn.org/stable/about.html#donating-to-the-project

Include option(s) for various donation links (in addition to directly via NF), such as GitHub Sponsors and Benevity, OC.

### Suggest a potential alternative/fix

_No response_

COMMENT:
I will work on remaining text to address this issue.

Labels: Documentation
DOC Donating to the project

### Describe the issue linked to the documentation

For discussion.
Updating this page: https://scikit-learn.org/stable/about.html#donating-to-the-project

Include option(s) for various donation links (in addition to directly via NF), such as GitHub Sponsors and Benevity, OC.

### Suggest a potential alternative/fix

_No response_

COMMENT:
Can someone guide me how to contribute, like whichever post I open there are multiple comments and it's kinda confusing that if I should work on it or not as someone is always assigned to it.

Labels: Documentation
DOC Donating to the project

### Describe the issue linked to the documentation

For discussion.
Updating this page: https://scikit-learn.org/stable/about.html#donating-to-the-project

Include option(s) for various donation links (in addition to directly via NF), such as GitHub Sponsors and Benevity, OC.

### Suggest a potential alternative/fix

_No response_

COMMENT:
Oops, this issue should be marked closed. It was resolved via the above PRs.

Labels: Documentation
Consolidate description of missing values in tree-based models `RandomForestClassifier` and `ExtraTreesClassifier`

### Describe the issue linked to the documentation

[HistGradientBoostingClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingClassifier.html) has a section right at the beginning that discusses how missing values are handled. 

Otoh, RandomForestClassifier and ExtraTreesClassifier does not, and it is actually unclear from the docstring how it is handled. This leads to some confusion, and users would have to go fishing within our User Guide, or even the raw Cython code to understand how the missing-ness is handled.

### Suggest a potential alternative/fix

Add the following to [RandomForestClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html):

```
This estimator has native support for missing values (NaNs). During training, the tree grower learns at each split point whether samples with missing values should go to the left or right child, based on the potential gain. When predicting, samples with missing values are assigned to the left or right child consequently. If no missing values were encountered for a given feature during training, then samples with missing values are mapped to whichever child has the most samples.
```

Add corresponding entry in https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html, https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html and https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesRegressor.html.

COMMENT:
Hi, can I please work on this?

Labels: Documentation
Consolidate description of missing values in tree-based models `RandomForestClassifier` and `ExtraTreesClassifier`

### Describe the issue linked to the documentation

[HistGradientBoostingClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingClassifier.html) has a section right at the beginning that discusses how missing values are handled. 

Otoh, RandomForestClassifier and ExtraTreesClassifier does not, and it is actually unclear from the docstring how it is handled. This leads to some confusion, and users would have to go fishing within our User Guide, or even the raw Cython code to understand how the missing-ness is handled.

### Suggest a potential alternative/fix

Add the following to [RandomForestClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html):

```
This estimator has native support for missing values (NaNs). During training, the tree grower learns at each split point whether samples with missing values should go to the left or right child, based on the potential gain. When predicting, samples with missing values are assigned to the left or right child consequently. If no missing values were encountered for a given feature during training, then samples with missing values are mapped to whichever child has the most samples.
```

Add corresponding entry in https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html, https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html and https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesRegressor.html.

COMMENT:
> Hi, can I please work on this? 

Sure feel free to open a PR. Note, the description should account for differences between RF and extratrees.

Labels: Documentation
Consolidate description of missing values in tree-based models `RandomForestClassifier` and `ExtraTreesClassifier`

### Describe the issue linked to the documentation

[HistGradientBoostingClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingClassifier.html) has a section right at the beginning that discusses how missing values are handled. 

Otoh, RandomForestClassifier and ExtraTreesClassifier does not, and it is actually unclear from the docstring how it is handled. This leads to some confusion, and users would have to go fishing within our User Guide, or even the raw Cython code to understand how the missing-ness is handled.

### Suggest a potential alternative/fix

Add the following to [RandomForestClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html):

```
This estimator has native support for missing values (NaNs). During training, the tree grower learns at each split point whether samples with missing values should go to the left or right child, based on the potential gain. When predicting, samples with missing values are assigned to the left or right child consequently. If no missing values were encountered for a given feature during training, then samples with missing values are mapped to whichever child has the most samples.
```

Add corresponding entry in https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html, https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html and https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesRegressor.html.

COMMENT:
Can I work on this?

Labels: Documentation
Consolidate description of missing values in tree-based models `RandomForestClassifier` and `ExtraTreesClassifier`

### Describe the issue linked to the documentation

[HistGradientBoostingClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingClassifier.html) has a section right at the beginning that discusses how missing values are handled. 

Otoh, RandomForestClassifier and ExtraTreesClassifier does not, and it is actually unclear from the docstring how it is handled. This leads to some confusion, and users would have to go fishing within our User Guide, or even the raw Cython code to understand how the missing-ness is handled.

### Suggest a potential alternative/fix

Add the following to [RandomForestClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html):

```
This estimator has native support for missing values (NaNs). During training, the tree grower learns at each split point whether samples with missing values should go to the left or right child, based on the potential gain. When predicting, samples with missing values are assigned to the left or right child consequently. If no missing values were encountered for a given feature during training, then samples with missing values are mapped to whichever child has the most samples.
```

Add corresponding entry in https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html, https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html and https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesRegressor.html.

COMMENT:
Hey @Rishab260 I'm sorry I was not aware of how issues are assigned, really sorry I made a PR. But I've closed the PR so now you can carry on this issue.

Labels: Documentation