Talip7/scikit-learn-issues-multilabel huggingface dataset:
PERF: `np_compat` sort/argsort much slower than `np`

#### EDIT: It's because `np_compat` uses stable sort by default, while numpy doesn't

### Describe the bug

By `np_compat` I mean: `from sklearn.externals.array_api_compat import numpy as np_compat`, which is the numpy used for instance in `sklearn.utils.stats._weighted_percentile` when you pass a numpy array in input.


This feels pretty crazy:
- sort is 8x slower with `np_compat.sort` compared to `np.sort`
- argsort is 2x slower

Maybe I'm doing something wrong. Maybe it's my set-up/my machine?

I found that while investigating this comment https://github.com/scikit-learn/scikit-learn/pull/32100#issuecomment-3338768674 about the speed of `_weighted_percentile`

CC @ogrisel 

### Steps/Code to Reproduce

In a notebook cell, run:

```Python
import numpy as np
from sklearn.externals.array_api_compat import numpy as np_compat

x = np.random.rand(int(1e7))
%time np.sort(x)
%time np_compat.sort(x)
%time np.argsort(x)
%time np_compat.argsort(x)
```

### Expected Results

I would expect `np_compat` and `np` to run the exact same underlying C code, and have the same speed.

### Actual Results

Crazy differences:
```
CPU times: user 89.9 ms, sys: 7 ms, total: 96.9 ms
Wall time: 96.9 ms
CPU times: user 793 ms, sys: 16.2 ms, total: 810 ms
Wall time: 809 ms
CPU times: user 622 ms, sys: 8.27 ms, total: 630 ms
Wall time: 630 ms
CPU times: user 1.16 s, sys: 16 ms, total: 1.18 s
Wall time: 1.18 s
```

### Versions

```shell
System:
    python: 3.12.11 (main, Aug 18 2025, 19:19:11) [Clang 20.1.4 ]
executable: /home/arthur/dev-perso/scikit-learn/sklearn-env/bin/python
   machine: Linux-6.14.0-32-generic-x86_64-with-glibc2.39

Python dependencies:
      sklearn: 1.8.dev0
          pip: None
   setuptools: 80.9.0
        numpy: 2.3.3
        scipy: 1.16.2
       Cython: 3.1.4
       pandas: 2.3.2
   matplotlib: 3.10.6
       joblib: 1.5.2
threadpoolctl: 3.6.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/numpy.libs/libscipy_openblas64_-8fb3d286.so
        version: 0.3.30
threading_layer: pthreads
   architecture: Haswell

       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/scipy.libs/libscipy_openblas-b75cc656.so
        version: 0.3.29.dev
threading_layer: pthreads
   architecture: Haswell

       user_api: openmp
   internal_api: openmp
    num_threads: 16
         prefix: libgomp
       filepath: /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
        version: None
```

COMMENT:
I think the PRs associated with this issue are now merged. So this one seems done. Thanks @cakedev0

Labels: Bug, Performance
Wheels CI hang with macOS x86_64 (aka Intel) with scipy 1.16.2

### Describe the bug

Noticed in https://github.com/scikit-learn/scikit-learn/issues/32171.

Work-around with `scipy<1.16.2` in https://github.com/scikit-learn/scikit-learn/pull/32273.

As noted in https://github.com/scikit-learn/scikit-learn/issues/32171#issuecomment-3323361410 scipy 1.16.2 has OpenBLAS 0.3.29dev and scipy 1.16.1 has OpenBLAS 0.3.28.

My wild guess is that this is a OpenBLAS within OpenMP kind of issue but we would need to investigate in more details to report it upstream.

COMMENT:
Can reproduce the hang on macOS x86_64 with the following snippet. It works fine with scipy 1.16.1 and hangs with scipy 1.16.2.
```py
import os
import subprocess

import numpy as np
from scipy.sparse.linalg import eigsh
from scipy.sparse import csgraph

random_state = np.random.RandomState(0)
n_sample = 100
affinity = np.zeros(shape=[n_sample * 2, n_sample * 2])
# first component
affinity[0:n_sample, 0:n_sample] = (
    np.abs(random_state.randn(n_sample, n_sample)) + 2
)
# second component
affinity[n_sample::, n_sample::] = (
    np.abs(random_state.randn(n_sample, n_sample)) + 2
)

# Setting environment variable like scikit-learn for consistency but this
# doesn't seem to have any effect on the hang
os.environ.setdefault("KMP_DUPLICATE_LIB_OK", "True")
os.environ.setdefault("KMP_INIT_AT_FORK", "FALSE")

# connection
affinity[0, n_sample + 1] = 1
affinity[n_sample + 1, 0] = 1
affinity.flat[:: 2 * n_sample + 1] = 0
affinity = 0.5 * (affinity + affinity.T)

# laplacian
laplacian = csgraph.laplacian(affinity)

# launching a subprocess does a fork
subprocess.run(["bash", "-c", "echo started subprocess"])

v0 = random_state.uniform(-1, 1, laplacian.shape[0])
eigsh(laplacian, k=10, which="LM", sigma=1.0, tol=0, v0=v0)
print('done')
```

To reproduce with scikit-learn:
```
pytest --pyargs sklearn.manifold.tests.test_spectral_embedding::test_spectral_embedding_two_components
```

Basically, you need a test doing a `Parallel` followed by a test using the arpack solver.

Note that `OPENBLAS_NUM_THREADS=1` does get rid of the issue in the simple reproducer but not in the scikit-learn one for some reason.

Labels: Bug, Build / CI
Wheels CI hang with macOS x86_64 (aka Intel) with scipy 1.16.2

### Describe the bug

Noticed in https://github.com/scikit-learn/scikit-learn/issues/32171.

Work-around with `scipy<1.16.2` in https://github.com/scikit-learn/scikit-learn/pull/32273.

As noted in https://github.com/scikit-learn/scikit-learn/issues/32171#issuecomment-3323361410 scipy 1.16.2 has OpenBLAS 0.3.29dev and scipy 1.16.1 has OpenBLAS 0.3.28.

My wild guess is that this is a OpenBLAS within OpenMP kind of issue but we would need to investigate in more details to report it upstream.

COMMENT:
Opened https://github.com/scipy/scipy/issues/23686 about it.

Labels: Bug, Build / CI
Wheels CI hang with macOS x86_64 (aka Intel) with scipy 1.16.2

### Describe the bug

Noticed in https://github.com/scikit-learn/scikit-learn/issues/32171.

Work-around with `scipy<1.16.2` in https://github.com/scikit-learn/scikit-learn/pull/32273.

As noted in https://github.com/scikit-learn/scikit-learn/issues/32171#issuecomment-3323361410 scipy 1.16.2 has OpenBLAS 0.3.29dev and scipy 1.16.1 has OpenBLAS 0.3.28.

My wild guess is that this is a OpenBLAS within OpenMP kind of issue but we would need to investigate in more details to report it upstream.

COMMENT:
Since the underlying issue was fixed in OpenBLAS, it's worth another look when scipy 1.17 is released (1.17rc was released beginning of December).

Labels: Bug, Build / CI
MNT Redundant `xp` argument in` _average`

The [<code>_average</code>](https://github.com/scikit-learn/scikit-learn/blob/4fd34545e517d164881126ce539aa8bfabae86d2/sklearn/utils/_array_api.py#L621) function accepts a namespace variable `xp` as input. However, even when a non-None `xp` is provided, the function still calls `get_namespace_and_device` and (may) overwrites `xp` with its output, making the input parameter redundant.

Possible changes I can see are:

1. Remove `xp` from the function signature.

2. Only call `get_namespace_and_device` if `xp` is None.

3. Pass `xp` into `get_namespace_and_device`, similar to what is done in [<code>_expit</code>](https://github.com/scikit-learn/scikit-learn/blob/4fd34545e517d164881126ce539aa8bfabae86d2/sklearn/utils/_array_api.py#L493)

I lean towards option 3, since it stays closest to the original design and intended behaviour.

COMMENT:
Good catch, looks like an oversight, 3. seems fine indeed

Labels: Array API
Fix the pip name

### Describe the bug

Please have consistent naming for the pip install command and the actual module code. I should not have to look up how to install sklearn every time I want to use it cause it has  a weird pip install command. 

### Steps/Code to Reproduce

import sklearn

### Expected Results

I expect one of `pip install sklearn` or from sckit-learn import ...` to work

### Actual Results

import error

### Versions

```shell
all
```

COMMENT:
Unfortunately this is an historic thing and the ship has sailed a long time ago on this one. It is very likely that it will stay like this in the foreseeable future, because changing it will bring more downsides than upsides. Thanks for your understanding 🙏.

Labels: Bug, Needs Triage
Decision/Extra trees & missing values: split ignored when NaNs + single unique value in feature

### Describe the bug

When feature values consist of only NaNs and another value, the feature is considered as constant by this if:
```Cython
        if (
            # All values for this feature are missing, or
            end_non_missing == start or
            # This feature is considered constant (max - min <= FEATURE_THRESHOLD)
            feature_values[end_non_missing - 1] <= feature_values[start] + FEATURE_THRESHOLD
        ):
```

and not considered for the split. This if considers [0 0 0 NaN NaN] as constant (which is false, you can make a split between NaNs and non-NaNs and such a split might make a lot of sense in some datasets).

Same problem in the `node_split_random` for Extra trees.

### Steps/Code to Reproduce

```Python
import numpy as np
from sklearn.tree import DecisionTreeClassifier

X = [0, 0, 0, np.nan, np.nan]
y = [0, 0, 0, 1     , 1     ]
X = np.array(X).reshape(-1, 1)
tree = DecisionTreeClassifier().fit(X, y)
print(tree.predict(X))  
# prints: [0 0 0 0 0]
print(tree.tree_.node_count)
# prints: 1
```

### Expected Results

A split is made, the tree has 3 nodes (2 leaves) and predicts [0 0 0 1 1].

### Actual Results

No split was made, the tree is a single node.

### Versions

```shell
System:
    python: 3.12.11 (main, Aug 18 2025, 19:19:11) [Clang 20.1.4 ]
executable: /home/arthur/dev-perso/scikit-learn/sklearn-env/bin/python
   machine: Linux-6.14.0-29-generic-x86_64-with-glibc2.39

Python dependencies:
      sklearn: 1.8.dev0
          pip: None
   setuptools: 80.9.0
        numpy: 2.3.3
        scipy: 1.16.2
       Cython: 3.1.4
       pandas: 2.3.2
   matplotlib: 3.10.6
       joblib: 1.5.2
threadpoolctl: 3.6.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/numpy.libs/libscipy_openblas64_-8fb3d286.so
        version: 0.3.30
threading_layer: pthreads
   architecture: Haswell

       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/scipy.libs/libscipy_openblas-b75cc656.so
        version: 0.3.29.dev
threading_layer: pthreads
   architecture: Haswell

       user_api: openmp
   internal_api: openmp
    num_threads: 16
         prefix: libgomp
       filepath: /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
        version: None
```

COMMENT:
The fix is really simple. I'll open a PR in a few minutes.

Labels: Bug
Decision/Extra trees & missing values: split ignored when NaNs + single unique value in feature

### Describe the bug

When feature values consist of only NaNs and another value, the feature is considered as constant by this if:
```Cython
        if (
            # All values for this feature are missing, or
            end_non_missing == start or
            # This feature is considered constant (max - min <= FEATURE_THRESHOLD)
            feature_values[end_non_missing - 1] <= feature_values[start] + FEATURE_THRESHOLD
        ):
```

and not considered for the split. This if considers [0 0 0 NaN NaN] as constant (which is false, you can make a split between NaNs and non-NaNs and such a split might make a lot of sense in some datasets).

Same problem in the `node_split_random` for Extra trees.

### Steps/Code to Reproduce

```Python
import numpy as np
from sklearn.tree import DecisionTreeClassifier

X = [0, 0, 0, np.nan, np.nan]
y = [0, 0, 0, 1     , 1     ]
X = np.array(X).reshape(-1, 1)
tree = DecisionTreeClassifier().fit(X, y)
print(tree.predict(X))  
# prints: [0 0 0 0 0]
print(tree.tree_.node_count)
# prints: 1
```

### Expected Results

A split is made, the tree has 3 nodes (2 leaves) and predicts [0 0 0 1 1].

### Actual Results

No split was made, the tree is a single node.

### Versions

```shell
System:
    python: 3.12.11 (main, Aug 18 2025, 19:19:11) [Clang 20.1.4 ]
executable: /home/arthur/dev-perso/scikit-learn/sklearn-env/bin/python
   machine: Linux-6.14.0-29-generic-x86_64-with-glibc2.39

Python dependencies:
      sklearn: 1.8.dev0
          pip: None
   setuptools: 80.9.0
        numpy: 2.3.3
        scipy: 1.16.2
       Cython: 3.1.4
       pandas: 2.3.2
   matplotlib: 3.10.6
       joblib: 1.5.2
threadpoolctl: 3.6.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/numpy.libs/libscipy_openblas64_-8fb3d286.so
        version: 0.3.30
threading_layer: pthreads
   architecture: Haswell

       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/scipy.libs/libscipy_openblas-b75cc656.so
        version: 0.3.29.dev
threading_layer: pthreads
   architecture: Haswell

       user_api: openmp
   internal_api: openmp
    num_threads: 16
         prefix: libgomp
       filepath: /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
        version: None
```

COMMENT:
Huh. The doc has an example that relies on this bug 😫 

I guess I need to open an issue/PR to fix that first.

Labels: Bug
Decision/Extra trees & missing values: split ignored when NaNs + single unique value in feature

### Describe the bug

When feature values consist of only NaNs and another value, the feature is considered as constant by this if:
```Cython
        if (
            # All values for this feature are missing, or
            end_non_missing == start or
            # This feature is considered constant (max - min <= FEATURE_THRESHOLD)
            feature_values[end_non_missing - 1] <= feature_values[start] + FEATURE_THRESHOLD
        ):
```

and not considered for the split. This if considers [0 0 0 NaN NaN] as constant (which is false, you can make a split between NaNs and non-NaNs and such a split might make a lot of sense in some datasets).

Same problem in the `node_split_random` for Extra trees.

### Steps/Code to Reproduce

```Python
import numpy as np
from sklearn.tree import DecisionTreeClassifier

X = [0, 0, 0, np.nan, np.nan]
y = [0, 0, 0, 1     , 1     ]
X = np.array(X).reshape(-1, 1)
tree = DecisionTreeClassifier().fit(X, y)
print(tree.predict(X))  
# prints: [0 0 0 0 0]
print(tree.tree_.node_count)
# prints: 1
```

### Expected Results

A split is made, the tree has 3 nodes (2 leaves) and predicts [0 0 0 1 1].

### Actual Results

No split was made, the tree is a single node.

### Versions

```shell
System:
    python: 3.12.11 (main, Aug 18 2025, 19:19:11) [Clang 20.1.4 ]
executable: /home/arthur/dev-perso/scikit-learn/sklearn-env/bin/python
   machine: Linux-6.14.0-29-generic-x86_64-with-glibc2.39

Python dependencies:
      sklearn: 1.8.dev0
          pip: None
   setuptools: 80.9.0
        numpy: 2.3.3
        scipy: 1.16.2
       Cython: 3.1.4
       pandas: 2.3.2
   matplotlib: 3.10.6
       joblib: 1.5.2
threadpoolctl: 3.6.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/numpy.libs/libscipy_openblas64_-8fb3d286.so
        version: 0.3.30
threading_layer: pthreads
   architecture: Haswell

       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/scipy.libs/libscipy_openblas-b75cc656.so
        version: 0.3.29.dev
threading_layer: pthreads
   architecture: Haswell

       user_api: openmp
   internal_api: openmp
    num_threads: 16
         prefix: libgomp
       filepath: /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
        version: None
```

COMMENT:
> I guess I need to open an issue/PR to fix that first.

I decided to just fix the doc in the fix-PR https://github.com/scikit-learn/scikit-learn/pull/32274, as both are coupled and it's not a lot of changes.

Labels: Bug
Decision/Extra trees & missing values: split ignored when NaNs + single unique value in feature

### Describe the bug

When feature values consist of only NaNs and another value, the feature is considered as constant by this if:
```Cython
        if (
            # All values for this feature are missing, or
            end_non_missing == start or
            # This feature is considered constant (max - min <= FEATURE_THRESHOLD)
            feature_values[end_non_missing - 1] <= feature_values[start] + FEATURE_THRESHOLD
        ):
```

and not considered for the split. This if considers [0 0 0 NaN NaN] as constant (which is false, you can make a split between NaNs and non-NaNs and such a split might make a lot of sense in some datasets).

Same problem in the `node_split_random` for Extra trees.

### Steps/Code to Reproduce

```Python
import numpy as np
from sklearn.tree import DecisionTreeClassifier

X = [0, 0, 0, np.nan, np.nan]
y = [0, 0, 0, 1     , 1     ]
X = np.array(X).reshape(-1, 1)
tree = DecisionTreeClassifier().fit(X, y)
print(tree.predict(X))  
# prints: [0 0 0 0 0]
print(tree.tree_.node_count)
# prints: 1
```

### Expected Results

A split is made, the tree has 3 nodes (2 leaves) and predicts [0 0 0 1 1].

### Actual Results

No split was made, the tree is a single node.

### Versions

```shell
System:
    python: 3.12.11 (main, Aug 18 2025, 19:19:11) [Clang 20.1.4 ]
executable: /home/arthur/dev-perso/scikit-learn/sklearn-env/bin/python
   machine: Linux-6.14.0-29-generic-x86_64-with-glibc2.39

Python dependencies:
      sklearn: 1.8.dev0
          pip: None
   setuptools: 80.9.0
        numpy: 2.3.3
        scipy: 1.16.2
       Cython: 3.1.4
       pandas: 2.3.2
   matplotlib: 3.10.6
       joblib: 1.5.2
threadpoolctl: 3.6.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/numpy.libs/libscipy_openblas64_-8fb3d286.so
        version: 0.3.30
threading_layer: pthreads
   architecture: Haswell

       user_api: blas
   internal_api: openblas
    num_threads: 16
         prefix: libscipy_openblas
       filepath: /home/arthur/dev-perso/scikit-learn/sklearn-env/lib/python3.12/site-packages/scipy.libs/libscipy_openblas-b75cc656.so
        version: 0.3.29.dev
threading_layer: pthreads
   architecture: Haswell

       user_api: openmp
   internal_api: openmp
    num_threads: 16
         prefix: libgomp
       filepath: /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
        version: None
```

COMMENT:
Hey, I am looking for a good first issue and got to this. I am a bit unsure if this bug is still open for fixing considering the previous messages, could someone let me know the status?

Labels: Bug
⚠️ CI failed on macOS.pylatest_conda_forge_mkl (last failure: Sep 25, 2025) ⚠️

**CI failed on [macOS.pylatest_conda_forge_mkl](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=80351&view=logs&j=97641769-79fb-5590-9088-a30ce9b850b9)** (Sep 25, 2025)
Unable to find junit file. Please see link for details.

COMMENT:
Error is a 403 to github, so closing.

Labels: Needs Triage
marimo for WASM notebooks

### Describe the issue linked to the documentation

I couldn't help but notice that the docs have Jupyter lite and binder. The binder links seem to fail at the moment and while the Jupyterlite seems to run ok ... would folks maybe be open to marimo notebooks for this as an alternative? 

<img width="1442" height="787" alt="Image" src="https://github.com/user-attachments/assets/95f7b5ae-6bc0-4360-95ff-69c4c84abdbf" />

The examples I've tried sofar seem to run totally fine in our WASM environment as well as on [molab](https://molab.marimo.io/notebooks). I imagine that there's a preference to host the examples on a static page though. 

In terms of work, we can accept the `.ipynb` formatted files already so the main thing would be to add a link to the docs. 

@adrinjalali @ArturoAmorQ would you be interested in this?

### Suggest a potential alternative/fix

There's also demos I can come up with that use widgets and sliders, but I would imagine that it's preferable to ensure consistency across notebooks above more fancy UI features.

COMMENT:
Could you maybe have a PR for us to see how it'd look like?

Labels: Documentation, RFC
marimo for WASM notebooks

### Describe the issue linked to the documentation

I couldn't help but notice that the docs have Jupyter lite and binder. The binder links seem to fail at the moment and while the Jupyterlite seems to run ok ... would folks maybe be open to marimo notebooks for this as an alternative? 

<img width="1442" height="787" alt="Image" src="https://github.com/user-attachments/assets/95f7b5ae-6bc0-4360-95ff-69c4c84abdbf" />

The examples I've tried sofar seem to run totally fine in our WASM environment as well as on [molab](https://molab.marimo.io/notebooks). I imagine that there's a preference to host the examples on a static page though. 

In terms of work, we can accept the `.ipynb` formatted files already so the main thing would be to add a link to the docs. 

@adrinjalali @ArturoAmorQ would you be interested in this?

### Suggest a potential alternative/fix

There's also demos I can come up with that use widgets and sliders, but I would imagine that it's preferable to ensure consistency across notebooks above more fancy UI features.

COMMENT:
The example HTML pages (including the badges) are generated by [sphinx-gallery](https://github.com/sphinx-gallery/sphinx-gallery) so it feels like a feature request for sphinx-gallery?

To be honest, I suspect very few users actually click on these links (and/or maybe they don't know where to report the issues ...), for example our Binder has been broken for a while and nobody complained. It was fixed at one point e.g. https://github.com/scikit-learn/scikit-learn/pull/30862 but it looks like it is broken again because we stuck to Python 3.9. I opened https://github.com/scikit-learn/scikit-learn/pull/32267 to fix our Binder environment ...

Labels: Documentation, RFC
marimo for WASM notebooks

### Describe the issue linked to the documentation

I couldn't help but notice that the docs have Jupyter lite and binder. The binder links seem to fail at the moment and while the Jupyterlite seems to run ok ... would folks maybe be open to marimo notebooks for this as an alternative? 

<img width="1442" height="787" alt="Image" src="https://github.com/user-attachments/assets/95f7b5ae-6bc0-4360-95ff-69c4c84abdbf" />

The examples I've tried sofar seem to run totally fine in our WASM environment as well as on [molab](https://molab.marimo.io/notebooks). I imagine that there's a preference to host the examples on a static page though. 

In terms of work, we can accept the `.ipynb` formatted files already so the main thing would be to add a link to the docs. 

@adrinjalali @ArturoAmorQ would you be interested in this?

### Suggest a potential alternative/fix

There's also demos I can come up with that use widgets and sliders, but I would imagine that it's preferable to ensure consistency across notebooks above more fancy UI features.

COMMENT:
Should we retire the Binder links? The jupyterlite notebooks work quite well, and 99.9% of the time I use them instead of Binder. So I guess for someone less biased the 99.9% number is even higher?

Labels: Documentation, RFC