Talip7/scikit-learn-issues-multilabel huggingface dataset:
PERF Regression in HistGradientBoostingClassifier with cython 3

Related to https://github.com/scikit-learn/scikit-learn/issues/27086 but specialized to the regression observed in `HistGradientBoostingClassifier` for better tracking.

With cython 3, it looks that the speed of 2 parts has changed.
- the initial binning is faster, which is a good thing
- the computation of the histograms at each iteration is slower which is a bad thing.

Here's a profiling that clearly shows that the method `HistogramBuilder.compute_histograms_brute` is a lot slower than it used to be

**cython 0.29.36**
![prof_hgbt_cy2](https://github.com/scikit-learn/scikit-learn/assets/34657725/c2785724-52fc-4060-8a16-ec0a57e4f46c)

**cython 3.0.2 master**
![prof_hgbt_cy3](https://github.com/scikit-learn/scikit-learn/assets/34657725/9828cf43-7859-4653-a2bd-f618d9422326)

Looking at the cython annotated version of this function I can see that the generated code is different in both cases (~50% more lines of code with cython 3) but I've no clue how to interpret it. Below is the annotated version just for the `def` part of the following method
![Screenshot 2023-09-20 at 16-12-06 Cython histogram pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/da1495fd-fe7a-40de-b591-2d58549b2121)

**cython 0.29.36**
![Screenshot 2023-09-20 at 16-07-50 Cython histogram 2 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/989c80dd-95f9-40e1-b8d7-efa3d69bc96a)

**cython 3.0.2 master**
![Screenshot 2023-09-20 at 16-08-47 Cython histogram 3 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/1dd6b58c-3444-4d70-855e-04cb58ee333c)

I did not find any difference in the body of the method.

Ping @da-woods in case you have some time to take a look :)

COMMENT:
Based on discussion with @jeremiedbb, it seems that this performance regression cannot be reproduced when running the histogram code in isolation.

Furthermore, the problem is only visible on a machine with a large number of physical cores (e.g. 16 or ideally even more).

@jeremiedbb do you remember the dimensions of the dataset you used for the profiling report you posted?

It would be great to have a simple copy/pastable Python script that can reproduce the problem, even if it's not a minimal reproducer (e.g. calling `HistGradientBoosting(random_state=0).fit()` on random data).

Labels: Performance, Regression
PERF Regression in HistGradientBoostingClassifier with cython 3

Related to https://github.com/scikit-learn/scikit-learn/issues/27086 but specialized to the regression observed in `HistGradientBoostingClassifier` for better tracking.

With cython 3, it looks that the speed of 2 parts has changed.
- the initial binning is faster, which is a good thing
- the computation of the histograms at each iteration is slower which is a bad thing.

Here's a profiling that clearly shows that the method `HistogramBuilder.compute_histograms_brute` is a lot slower than it used to be

**cython 0.29.36**
![prof_hgbt_cy2](https://github.com/scikit-learn/scikit-learn/assets/34657725/c2785724-52fc-4060-8a16-ec0a57e4f46c)

**cython 3.0.2 master**
![prof_hgbt_cy3](https://github.com/scikit-learn/scikit-learn/assets/34657725/9828cf43-7859-4653-a2bd-f618d9422326)

Looking at the cython annotated version of this function I can see that the generated code is different in both cases (~50% more lines of code with cython 3) but I've no clue how to interpret it. Below is the annotated version just for the `def` part of the following method
![Screenshot 2023-09-20 at 16-12-06 Cython histogram pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/da1495fd-fe7a-40de-b591-2d58549b2121)

**cython 0.29.36**
![Screenshot 2023-09-20 at 16-07-50 Cython histogram 2 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/989c80dd-95f9-40e1-b8d7-efa3d69bc96a)

**cython 3.0.2 master**
![Screenshot 2023-09-20 at 16-08-47 Cython histogram 3 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/1dd6b58c-3444-4d70-855e-04cb58ee333c)

I did not find any difference in the body of the method.

Ping @da-woods in case you have some time to take a look :)

COMMENT:
I've been able to reproduce the slowdown with the following script. It's not visible with a small number of cores but is already significant using 10 cores.
```py
from sklearn.datasets import make_classification
from sklearn.ensemble import HistGradientBoostingClassifier

X, y = make_classification(
    n_samples=10000, n_features=100, n_classes=5, n_informative=100, n_redundant=0, random_state=0
)

HistGradientBoostingClassifier(
    max_iter=100, max_leaf_nodes=15, early_stopping=False, random_state=0
).fit(X, y)
```

When profiling this script (reports in the description of the issue), it clearly shows that `HistogramBuilder.compute_histograms_brute` is responsible for this. However when I try to benchmark it alone I don't see any slowdown. I used the following code, adapting the size of the dataset.
https://github.com/scikit-learn/scikit-learn/blob/ba7d86956da03aa4fd230b1bbe8df57b63cf2dc0/sklearn/ensemble/_hist_gradient_boosting/tests/test_gradient_boosting.py#L762-L814

Labels: Performance, Regression
PERF Regression in HistGradientBoostingClassifier with cython 3

Related to https://github.com/scikit-learn/scikit-learn/issues/27086 but specialized to the regression observed in `HistGradientBoostingClassifier` for better tracking.

With cython 3, it looks that the speed of 2 parts has changed.
- the initial binning is faster, which is a good thing
- the computation of the histograms at each iteration is slower which is a bad thing.

Here's a profiling that clearly shows that the method `HistogramBuilder.compute_histograms_brute` is a lot slower than it used to be

**cython 0.29.36**
![prof_hgbt_cy2](https://github.com/scikit-learn/scikit-learn/assets/34657725/c2785724-52fc-4060-8a16-ec0a57e4f46c)

**cython 3.0.2 master**
![prof_hgbt_cy3](https://github.com/scikit-learn/scikit-learn/assets/34657725/9828cf43-7859-4653-a2bd-f618d9422326)

Looking at the cython annotated version of this function I can see that the generated code is different in both cases (~50% more lines of code with cython 3) but I've no clue how to interpret it. Below is the annotated version just for the `def` part of the following method
![Screenshot 2023-09-20 at 16-12-06 Cython histogram pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/da1495fd-fe7a-40de-b591-2d58549b2121)

**cython 0.29.36**
![Screenshot 2023-09-20 at 16-07-50 Cython histogram 2 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/989c80dd-95f9-40e1-b8d7-efa3d69bc96a)

**cython 3.0.2 master**
![Screenshot 2023-09-20 at 16-08-47 Cython histogram 3 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/1dd6b58c-3444-4d70-855e-04cb58ee333c)

I did not find any difference in the body of the method.

Ping @da-woods in case you have some time to take a look :)

COMMENT:
Good news, I ran some benchmarks against the current cython master and the speed is the same as with cython 0.29.36 !
We should get confirmation in the asv benchmarks when cython 3.0.3 is released.
I think we can close this issue. We'll reopen if the asv bench still show a slowdown after updated with cython 3.0.3.

Labels: Performance, Regression
PERF Regression in HistGradientBoostingClassifier with cython 3

Related to https://github.com/scikit-learn/scikit-learn/issues/27086 but specialized to the regression observed in `HistGradientBoostingClassifier` for better tracking.

With cython 3, it looks that the speed of 2 parts has changed.
- the initial binning is faster, which is a good thing
- the computation of the histograms at each iteration is slower which is a bad thing.

Here's a profiling that clearly shows that the method `HistogramBuilder.compute_histograms_brute` is a lot slower than it used to be

**cython 0.29.36**
![prof_hgbt_cy2](https://github.com/scikit-learn/scikit-learn/assets/34657725/c2785724-52fc-4060-8a16-ec0a57e4f46c)

**cython 3.0.2 master**
![prof_hgbt_cy3](https://github.com/scikit-learn/scikit-learn/assets/34657725/9828cf43-7859-4653-a2bd-f618d9422326)

Looking at the cython annotated version of this function I can see that the generated code is different in both cases (~50% more lines of code with cython 3) but I've no clue how to interpret it. Below is the annotated version just for the `def` part of the following method
![Screenshot 2023-09-20 at 16-12-06 Cython histogram pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/da1495fd-fe7a-40de-b591-2d58549b2121)

**cython 0.29.36**
![Screenshot 2023-09-20 at 16-07-50 Cython histogram 2 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/989c80dd-95f9-40e1-b8d7-efa3d69bc96a)

**cython 3.0.2 master**
![Screenshot 2023-09-20 at 16-08-47 Cython histogram 3 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/1dd6b58c-3444-4d70-855e-04cb58ee333c)

I did not find any difference in the body of the method.

Ping @da-woods in case you have some time to take a look :)

COMMENT:
Thanks to all the debugging and profiling, especially @jeremiedbb and @da-woods . It‘s very valuable to have support of a Cython maintainer here!

Labels: Performance, Regression
PERF Regression in HistGradientBoostingClassifier with cython 3

Related to https://github.com/scikit-learn/scikit-learn/issues/27086 but specialized to the regression observed in `HistGradientBoostingClassifier` for better tracking.

With cython 3, it looks that the speed of 2 parts has changed.
- the initial binning is faster, which is a good thing
- the computation of the histograms at each iteration is slower which is a bad thing.

Here's a profiling that clearly shows that the method `HistogramBuilder.compute_histograms_brute` is a lot slower than it used to be

**cython 0.29.36**
![prof_hgbt_cy2](https://github.com/scikit-learn/scikit-learn/assets/34657725/c2785724-52fc-4060-8a16-ec0a57e4f46c)

**cython 3.0.2 master**
![prof_hgbt_cy3](https://github.com/scikit-learn/scikit-learn/assets/34657725/9828cf43-7859-4653-a2bd-f618d9422326)

Looking at the cython annotated version of this function I can see that the generated code is different in both cases (~50% more lines of code with cython 3) but I've no clue how to interpret it. Below is the annotated version just for the `def` part of the following method
![Screenshot 2023-09-20 at 16-12-06 Cython histogram pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/da1495fd-fe7a-40de-b591-2d58549b2121)

**cython 0.29.36**
![Screenshot 2023-09-20 at 16-07-50 Cython histogram 2 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/989c80dd-95f9-40e1-b8d7-efa3d69bc96a)

**cython 3.0.2 master**
![Screenshot 2023-09-20 at 16-08-47 Cython histogram 3 pyx](https://github.com/scikit-learn/scikit-learn/assets/34657725/1dd6b58c-3444-4d70-855e-04cb58ee333c)

I did not find any difference in the body of the method.

Ping @da-woods in case you have some time to take a look :)

COMMENT:
Glad it seems to be sorted - I was working up the energy to have a second look at this. (I suspect I'd have learned that I didn't have enough cores to reproduce it).

The fact it depended on other things running alongside the histograms benchmark did make me think that it was probably one of the issues we already know about and were fixing.

Labels: Performance, Regression
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
There is a crash during the initial import of the library:

```python-traceback
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/io/sklearn/__init__.py", line 83, in <module>
    from .base import clone
  File "/io/sklearn/base.py", line 19, in <module>
    from .utils import _IS_32BIT
  File "/io/sklearn/utils/__init__.py", line 22, in <module>
    from ._param_validation import Integral, Interval, validate_params
  File "/io/sklearn/utils/_param_validation.py", line 15, in <module>
    from .validation import _is_arraylike_not_scalar
  File "/io/sklearn/utils/validation.py", line 28, in <module>
    from ._isfinite import FiniteStatus, cy_isfinite
TypeError: type 'cython_function_or_method' is not an acceptable base type
```

The source code for those two symbols (in `sklearn/utils/_isfinite.pyx`) is:

```cython
cpdef enum FiniteStatus:
    all_finite = 0
    has_nan = 1
    has_infinite = 2


def cy_isfinite(floating[::1] a, bint allow_nan=False):
    cdef FiniteStatus result
    with nogil:
        result = _isfinite(a, allow_nan)
    return result
```

I don't understand why the message speaks about "base type" in this context.

According to:
https://github.com/conda-forge/scipy-feedstock/issues/249

it might be related to the version of Cython. For our build, scikit-learn was built with Cython 0.29.36 (from conda-forge):

https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=59330&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66&t=817333b3-f569-5bda-9f7f-fb5be03132a9&l=2477


and this is using pypy3.9 version 7.3.12 from conda-forge:

```
pypy                      7.3.12                 0_pypy39    conda-forge
pypy3.9                   7.3.12               h9557127_3    conda-forge
```

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
Maybe @mattip knows what's going on here?

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
This is a problem in the latest conda-forge pypy package when used with cython3.0. I should make a new PyPy release for conda-forge to clear this error.

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
Thanks very much.

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
This is a bug in the current PyPy feedstock. See https://github.com/conda-forge/pypy3.6-feedstock/issues/109

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
Could you rerun the build? I have released a new PyPy version (pypy3.9 7.3.13, python 3.9.18) that should fix this. It should "just work" with a rerun.

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
Voila!
Its working now.
Thank you very much @mattip 👍

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
Sorry for the glitch.

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
Can this be closed now?

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
Yes, it can be closed 👍

On Tue, Oct 17, 2023 at 12:46 AM Matti Picus ***@***.***>
wrote:

> Can this be closed now?
>
> —
> Reply to this email directly, view it on GitHub
> <https://github.com/scikit-learn/scikit-learn/issues/27416#issuecomment-1765125261>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AGYA4XEZVYEUPWEXFHPNH2TX7WB2PAVCNFSM6AAAAAA45TFZ6WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTONRVGEZDKMRWGE>
> .
> You are receiving this because you commented.Message ID:
> ***@***.***>
>


-- 
"Love all serve all" - ..:: Sri Sathya Sai ::..

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Linux_Nightly_PyPy.pypy3 ⚠️

**CI is still failing on [Linux_Nightly_PyPy.pypy3](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60231&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66)** (Oct 21, 2023)
Unable to find junit file. Please see link for details.

COMMENT:
The `TypeError: type 'cython_function_or_method' is not an acceptable base type` error has gone after updating our lock files in #27627. Let's close this one to avoid confusion.

We are back to the previous situation where PyPy tests time out (likely for memory reasons) e.g. last [build log](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=60258&view=logs&j=0b16f832-29d6-5b92-1c23-eb006f606a66&t=0cdfadab-878f-502c-9df1-54a896e98c4f). Another PyPy issue will be automatically opened tomorrow on the next scheduled run.

Labels: Build / CI, pypy, cython, Needs Investigation
⚠️ CI failed on Wheel builder ⚠️

**CI failed on [Wheel builder](https://github.com/scikit-learn/scikit-learn/actions/runs/6211387188)** (Sep 17, 2023)

COMMENT:
## CI is no longer failing! ✅

[Successful run](https://github.com/scikit-learn/scikit-learn/actions/runs/6217941758) on Sep 18, 2023

Labels: Needs Triage
⚠️ CI failed on Linux_nogil.pylatest_pip_nogil ⚠️

**CI failed on [Linux_nogil.pylatest_pip_nogil](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=59257&view=logs&j=67fbb25f-e417-50be-be55-3b1e9637fce5)** (Sep 17, 2023)
- test_pairwise_distances_argkmin[52-csr_matrix-float32-parallel_on_X-braycurtis-1000000.0-500]
- test_pairwise_distances_argkmin[52-csr_matrix-float32-parallel_on_Y-braycurtis-1000000.0-500]
- test_pairwise_distances_argkmin[52-csr_array-float32-parallel_on_X-braycurtis-1000000.0-500]
- test_pairwise_distances_argkmin[52-csr_array-float32-parallel_on_Y-braycurtis-1000000.0-500]

COMMENT:
## CI is no longer failing! ✅

[Successful run](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=59274&view=logs&j=67fbb25f-e417-50be-be55-3b1e9637fce5) on Sep 18, 2023

Labels: Needs Triage
⚠️ CI failed on Linux_nogil.pylatest_pip_nogil ⚠️

**CI failed on [Linux_nogil.pylatest_pip_nogil](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=59257&view=logs&j=67fbb25f-e417-50be-be55-3b1e9637fce5)** (Sep 17, 2023)
- test_pairwise_distances_argkmin[52-csr_matrix-float32-parallel_on_X-braycurtis-1000000.0-500]
- test_pairwise_distances_argkmin[52-csr_matrix-float32-parallel_on_Y-braycurtis-1000000.0-500]
- test_pairwise_distances_argkmin[52-csr_array-float32-parallel_on_X-braycurtis-1000000.0-500]
- test_pairwise_distances_argkmin[52-csr_array-float32-parallel_on_Y-braycurtis-1000000.0-500]

COMMENT:
This is a duplicate of #27126 and will be fixed by #27281.

Labels: Needs Triage
Adding documentation about related library: Concrete ML, for privacy preserving ML

### Describe the issue linked to the documentation

We would like to add Concrete ML in the documentation. Concrete ML is an open-source package, providing privacy-preserving ML, thanks to so-called fully homomorphic encryption. Concrete ML contains so-called built-in models which are very very close to scikit-learn, XGB and skorch.  Eg, see https://docs.zama.ai/concrete-ml/built-in-models/linear 

We've started to discuss with some of you, who advised me to go for an issue. 

I would propose: 
- [x] adding a category Privacy Preserving Machine Learning in ./doc/related_projects.rst, and adding Concrete ML inside --- done, this was https://github.com/scikit-learn/scikit-learn/pull/27376
- [x] adding a category Privacy Preserving Machine Learning in examples, and copy some of the examples of https://github.com/zama-ai/concrete-ml/tree/main/docs/advanced_examples, or make new ones (what you prefer!) [not to be done]
- [ ] maybe propose a blog post, if you guest us. Will be done soon, https://github.com/zama-ai/concrete-ml-internal/issues/4033

and we are actually open to lot of suggestions.

What do you think?

### Suggest a potential alternative/fix

Adding some content as proposed in the description.

COMMENT:
We're not gonna depend on concrete_ml in our docs, so an example in the example gallery is not an option here. But we can review a blog post for our blog.

cc @scikit-learn/communication-team

Labels: Documentation
Adding documentation about related library: Concrete ML, for privacy preserving ML

### Describe the issue linked to the documentation

We would like to add Concrete ML in the documentation. Concrete ML is an open-source package, providing privacy-preserving ML, thanks to so-called fully homomorphic encryption. Concrete ML contains so-called built-in models which are very very close to scikit-learn, XGB and skorch.  Eg, see https://docs.zama.ai/concrete-ml/built-in-models/linear 

We've started to discuss with some of you, who advised me to go for an issue. 

I would propose: 
- [x] adding a category Privacy Preserving Machine Learning in ./doc/related_projects.rst, and adding Concrete ML inside --- done, this was https://github.com/scikit-learn/scikit-learn/pull/27376
- [x] adding a category Privacy Preserving Machine Learning in examples, and copy some of the examples of https://github.com/zama-ai/concrete-ml/tree/main/docs/advanced_examples, or make new ones (what you prefer!) [not to be done]
- [ ] maybe propose a blog post, if you guest us. Will be done soon, https://github.com/zama-ai/concrete-ml-internal/issues/4033

and we are actually open to lot of suggestions.

What do you think?

### Suggest a potential alternative/fix

Adding some content as proposed in the description.

COMMENT:
We are working on a blog post with @bcm-at-zama

Labels: Documentation