Talip7/scikit-learn-issues-multilabel huggingface dataset:
inconsistent warnings for ElasticNetCV and LassoCV

### Describe the bug

ElasticNetCV and LassoCV generate warnings when y is a (n,1) vector but doesn't when y is a (n,) vector. This behavior is not in LinearRegression or RidgeCV. Can they be made consistent to avoid confusion in applications?

### Steps/Code to Reproduce

```
from sklearn.linear_model import ElasticNetCV, LinearRegression, LassoCV, RidgeCV
import numpy as np
y = np.random.rand(30, 1)
X = np.random.rand(30, 2)

# no warnings
ypred = LinearRegression().fit(X,y)

# no warnings
ypred = RidgeCV().fit(X,y)

# warnings
ypred = ElasticNetCV().fit(X,y)

# warnings
ypred = LassoCV().fit(X,y)
```

### Expected Results

No warnings are displayed.

### Actual Results

from sklearn.linear_model import ElasticNetCV, LinearRegression, LassoCV, RidgeCV
import numpy as np
y = np.random.rand(30, 1)
X = np.random.rand(30, 2)

ypred = LinearRegression().fit(X,y)

ypred = RidgeCV().fit(X,y)

ypred = ElasticNetCV().fit(X,y)
e:\data\SAndo\venvs\myenv\Lib\site-packages\sklearn\linear_model\_coordinate_descent.py:1714: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
  y = column_or_1d(y, warn=True)

ypred = LassoCV().fit(X,y)
e:\data\SAndo\venvs\myenv\Lib\site-packages\sklearn\linear_model\_coordinate_descent.py:1714: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
  y = column_or_1d(y, warn=True)

### Versions

```shell
System:
    python: 3.12.10 (tags/v3.12.10:0cc8128, Apr  8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
executable: ...\venvs\myenv\Scripts\python.exe
   machine: Windows-2016Server-10.0.14393-SP0

Python dependencies:
      sklearn: 1.7.2
          pip: 24.0
   setuptools: 72.1.0
        numpy: 2.2.6
        scipy: 1.14.0
       Cython: 3.0.11
       pandas: 2.2.2
   matplotlib: 3.10.7
       joblib: 1.4.2
threadpoolctl: 3.5.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 24
         prefix: libscipy_openblas
       filepath: ...\venvs\myenv\Lib\site-packages\numpy.libs\libscipy_openblas64_-13e2df515630b4a41f92893938845698.dll
        version: 0.3.29
threading_layer: pthreads
   architecture: SkylakeX

       user_api: openmp
   internal_api: openmp
    num_threads: 32
         prefix: vcomp
       filepath: ...\venvs\myenv\Lib\site-packages\sklearn\.libs\vcomp140.dll
        version: None

       user_api: blas
   internal_api: openblas
    num_threads: 24
         prefix: libscipy_openblas
       filepath: ...\venvs\myenv\Lib\site-packages\scipy.libs\libscipy_openblas-5b1ec8b915dfb81d11cebc0788069d2d.dll
        version: 0.3.27.dev
threading_layer: pthreads
   architecture: SkylakeX
```

COMMENT:
Looks like it can be made consistent by changing the warn=False, idk why ElasticNet/Lasso have a different implementation from Ridge in the first place.

Labels: Bug, Needs Triage
⚠️ CI failed on Linux_Nightly.pylatest_pip_scipy_dev (last failure: Dec 14, 2025) ⚠️

**CI is still failing on [Linux_Nightly.pylatest_pip_scipy_dev](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=83442&view=logs&j=dfe99b15-50db-5d7b-b1e9-4105c42527cf)** (Dec 14, 2025)
- test_pandas_copy_on_write

COMMENT:
Hmmm that's weird I thought that https://github.com/scikit-learn/scikit-learn/pull/32865 was supposed to fix this one? @AnneBeyer maybe you want to have a look?

Labels: Needs Triage
⚠️ CI failed on Linux_Nightly.pylatest_pip_scipy_dev (last failure: Dec 14, 2025) ⚠️

**CI is still failing on [Linux_Nightly.pylatest_pip_scipy_dev](https://dev.azure.com/scikit-learn/scikit-learn/_build/results?buildId=83442&view=logs&j=dfe99b15-50db-5d7b-b1e9-4105c42527cf)** (Dec 14, 2025)
- test_pandas_copy_on_write

COMMENT:
Pandas changed the error message...I'll try to make the message check more generic.

Labels: Needs Triage
RFC Add gallery example with Array API support

Mentioned somewhere in the release activity the closest I could find was https://github.com/scikit-learn/scikit-learn/pull/32809#discussion_r2587809537. It would probably be doable to add pytorch-cpu in the doc lock-file and add an example with a somewhat non trivial pipeline.

One idea could be to have some commented code saying `device = 'cuda'` and explain that uncommenting it will run on GPU if you have one.

Questions:
- not sure which version to pick for doc-min-dependencies build, I think it doesn't really matter and convenience (for us as maintainers) is the main thing here, since array API is still experimental
- some other things I did not think of ...

COMMENT:
We can even write code that detects the presence of cuda or mps GPUs and falls back to CPU otherwise.

```python
if torch.cuda.is_available():
    device_name = "cuda"
elif torch.backends.mps.is_available():
    device_name = "mps"
else:
    device_name = "cpu"

print(f"Using device: {device_name}")
device = torch.device(device_name)
```

Labels: RFC, Array API
BUG: `DecisionTreeRegressor`: invalid impurity for `criterion="poisson"` with missing values

### Describe the bug

When missing values are present in `X`, `DecisionTreeRegressor(criterion="poisson", ...)` sometimes computes invalid impurities.

Impurity should match with half-poisson deviance according to the documentation. And it is indeed the case when they are no missing values. But when missing values are present, something goes wrong, and you can even get negative impurities.

I found this bug thanks to my big test from this draft PR https://github.com/scikit-learn/scikit-learn/pull/32193. This same test shows that impurity does match `sklearn.metrics.mean_poisson_deviance(...) / 2` when no missing values are present.

### Steps/Code to Reproduce

```Python
from sklearn.tree import DecisionTreeRegressor, plot_tree

X = np.array([np.nan, 1, 2, 3, np.nan]).reshape(-1, 1)
y = [0.49, 0.5, 0.7, 1.5, 0.8]

tree = DecisionTreeRegressor(criterion='poisson', max_depth=1)
tree.fit(X, y)

plot_tree(tree);
```

### Expected Results

Impurities should be positive. Impurity of the right children should be 0, as it has only one sample.

### Actual Results

Some impurities are negative:

<img width="515" height="389" alt="Image" src="https://github.com/user-attachments/assets/90169bc8-1e05-48ab-aac1-b77f599dcef9" />

### 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-36-generic-x86_64-with-glibc2.39

Python dependencies:
      sklearn: 1.9.dev0
          pip: None
   setuptools: 80.9.0
        numpy: 2.3.5
        scipy: 1.16.3
       Cython: 3.2.1
       pandas: 2.3.3
   matplotlib: 3.10.7
       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_-fdde5778.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:
Note: This issue will be fixed by PR #32119, no additional PR is needed.

Labels: Bug
Classwise (group) L21 penalty for multinomial LogisticRegression

### Describe the workflow you want to enable

For `LogisticRegression` with `n_classes >= 3`, I would like to specify a class-wise (grouped) L21 penalty $\sum_{j=1}^{n_{features}} \Vert\beta_{j,\cdot}\Vert_2 = \sum_{j=1}^{n_{features}} (\sum_{k=1}^{n_{classes}}\beta_{j,k}^2)^{1/2}$ instead of the implemented L1 penalty $\sum_{j=1}^{n_{features}} \sum_{k=1}^{n_{classes}}\Vert\beta\Vert_2$.
The difference is bassically the same as calling `MultiTaskElasticNet().fit(X, y)` vs `ElasticNet().fit(X, y.ravel())`.

[glmnet](https://glmnet.stanford.edu/articles/glmnet.html#multinomial-regression-family-multinomial) has the option `type.multinomial = "grouped"` and (default) `type.multinomial = "ungrouped"`.


### Describe your proposed solution
Introduce a new parameter, e.g. `l1_type` or similar.

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

I could not find any discussion in and around of #8446 (SAGA was the first and so far only solver capable of solving multinomial case with L1 penalties).

COMMENT:
@lorentzenchr 
These penalties both appear to compute L2 of the weight vector - could you clarify the difference between the two?
`LogisticRegression` uses `LinearModelLoss`,  [#L352](https://github.com/scikit-learn/scikit-learn/blob/71cfff335/sklearn/linear_model/_logistic.py#L352) [#L210](https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/linear_model/_linear_loss.py#L210) for L2 penalty calculation.

Labels: New Feature
Classwise (group) L21 penalty for multinomial LogisticRegression

### Describe the workflow you want to enable

For `LogisticRegression` with `n_classes >= 3`, I would like to specify a class-wise (grouped) L21 penalty $\sum_{j=1}^{n_{features}} \Vert\beta_{j,\cdot}\Vert_2 = \sum_{j=1}^{n_{features}} (\sum_{k=1}^{n_{classes}}\beta_{j,k}^2)^{1/2}$ instead of the implemented L1 penalty $\sum_{j=1}^{n_{features}} \sum_{k=1}^{n_{classes}}\Vert\beta\Vert_2$.
The difference is bassically the same as calling `MultiTaskElasticNet().fit(X, y)` vs `ElasticNet().fit(X, y.ravel())`.

[glmnet](https://glmnet.stanford.edu/articles/glmnet.html#multinomial-regression-family-multinomial) has the option `type.multinomial = "grouped"` and (default) `type.multinomial = "ungrouped"`.


### Describe your proposed solution
Introduce a new parameter, e.g. `l1_type` or similar.

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

I could not find any discussion in and around of #8446 (SAGA was the first and so far only solver capable of solving multinomial case with L1 penalties).

COMMENT:
There was a typo in the L21 penalty. It is fixed now.

Labels: New Feature
Classwise (group) L21 penalty for multinomial LogisticRegression

### Describe the workflow you want to enable

For `LogisticRegression` with `n_classes >= 3`, I would like to specify a class-wise (grouped) L21 penalty $\sum_{j=1}^{n_{features}} \Vert\beta_{j,\cdot}\Vert_2 = \sum_{j=1}^{n_{features}} (\sum_{k=1}^{n_{classes}}\beta_{j,k}^2)^{1/2}$ instead of the implemented L1 penalty $\sum_{j=1}^{n_{features}} \sum_{k=1}^{n_{classes}}\Vert\beta\Vert_2$.
The difference is bassically the same as calling `MultiTaskElasticNet().fit(X, y)` vs `ElasticNet().fit(X, y.ravel())`.

[glmnet](https://glmnet.stanford.edu/articles/glmnet.html#multinomial-regression-family-multinomial) has the option `type.multinomial = "grouped"` and (default) `type.multinomial = "ungrouped"`.


### Describe your proposed solution
Introduce a new parameter, e.g. `l1_type` or similar.

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

I could not find any discussion in and around of #8446 (SAGA was the first and so far only solver capable of solving multinomial case with L1 penalties).

COMMENT:
> There was a typo in the L21 penalty. It is fixed now.

It looks like we need implementations of the following for Logistic Regression: 
* `MultiTaskLasso`
* `MultiTaskElasticNet`
* and their `CV` versions,

which implement L1/L2 mixed-norm and (L1/L2 mixed-norm with ElasticNet), using implementation of [[1]](https://arxiv.org/pdf/1311.6529). This algorithm is referenced in glmnet as well.

Labels: New Feature
FeatureUnion with polars output fails due to missing column renaming in adapter interface

### Describe the bug

When using `FeatureUnion` with `set_config(transform_output="polars")`, the operation fails with `polars.exceptions.DuplicateError` because the `ContainerAdapterProtocol.hstack()` interface is incomplete - it doesn't accept `feature_names` parameter to apply column renaming before concatenation.

The `verbose_feature_names_out=True` (default) mechanism should ensure unique column names via `get_feature_names_out()`, but this information cannot be passed to the adapter's `hstack()` method due to interface design limitation.

### Steps/Code to Reproduce

```python
from sklearn.pipeline import FeatureUnion
from sklearn.preprocessing import StandardScaler
from sklearn import set_config
import numpy as np
set_config(transform_output="polars")
X = np.array([[1, 2], [3, 4], [5, 6]])
union = FeatureUnion([
    ("scaler1", StandardScaler()),
    ("scaler2", StandardScaler())
])
result = union.fit_transform(X)
```

### Expected Results

The code should work and produce a polars DataFrame with uniquely named columns like `['scaler1__x0', 'scaler1__x1', 'scaler2__x0', 'scaler2__x1']`, consistent with the design of `verbose_feature_names_out=True`.

### Actual Results

```python
Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
  File "/path/to/sklearn/utils/_set_output.py", line 316, in wrapped
    data_to_wrap = f(self, X, *args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/path/to/sklearn/pipeline.py", line 1971, in fit_transform
    return self._hstack(Xs)
           ^^^^^^^^^^^^^^^^
  File "/path/to/sklearn/pipeline.py", line 2052, in _hstack
    return adapter.hstack(Xs)
           ^^^^^^^^^^^^^^^^^^
  File "/path/to/sklearn/utils/_set_output.py", line 183, in hstack
    return pl.concat(Xs, how="horizontal")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/path/to/polars/functions/eager.py", line 256, in concat
    out = wrap_df(plr.concat_df_horizontal(elems))
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
polars.exceptions.DuplicateError: column with name 'x0' has more than one occurrence
```

### Versions

```shell
System:
    python: 3.11.14 | packaged by conda-forge | (main, Oct 22 2025, 22:46:25) [GCC 14.3.0]
executable: /opt/conda/envs/sklearn-dev/bin/python
   machine: Linux-6.8.0-65-generic-x86_64-with-glibc2.36

Python dependencies:
      sklearn: 1.9.dev0
          pip: 25.3
   setuptools: 80.9.0
        numpy: 2.3.5
        scipy: 1.16.3
       Cython: 3.2.2
       pandas: 2.3.3
   matplotlib: None
       joblib: 1.5.2
threadpoolctl: 3.6.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
    num_threads: 48
         prefix: libopenblas
       filepath: /opt/conda/envs/sklearn-dev/lib/libopenblasp-r0.3.30.so
        version: 0.3.30
threading_layer: pthreads
   architecture: SkylakeX

       user_api: openmp
   internal_api: openmp
    num_threads: 48
         prefix: libgomp
       filepath: /opt/conda/envs/sklearn-dev/lib/libgomp.so.1.0.0
        version: None
```

COMMENT:
reference : #32121

Labels: Bug
nan_euclidean_distances producing distance matrix not symmetrical due to floating point precision

### Describe the bug

nan_euclidean_distances is producing asymmetrical matrix when input matrix contains nan values. This, in turn, causes errors when checked for symmetry, for example by scipy.spatial.distance.squareform.

### Steps/Code to Reproduce

```Python
mat = np.random.rand(10, 20)
dist = nan_euclidean_distances(mat)
(dist == dist.T).all()
# output np.True_


mat = np.random.rand(10, 20)
missing = np.random.choice(mat.size, 50, replace=False)
mat.ravel()[missing] = np.nan
dist = nan_euclidean_distances(mat)
(dist == dist.T).all()
# output np.False_

(dist.round(5) == dist.T.round(5)).all()
# output np.True_
```

### Expected Results

Function should produce symmetrical matrix.

### Actual Results

Produces asymmetrical matrix.

### Versions

```shell
System:
    python: 3.13.7 | packaged by conda-forge | (main, Sep  3 2025, 14:33:26) [Clang 19.1.7 ]
executable: /mambaforge-pypy3/envs/jupyterlab/bin/python
   machine: macOS-15.7-x86_64-i386-64bit-Mach-O

Python dependencies:
      sklearn: 1.7.2
          pip: 25.2
   setuptools: 80.9.0
        numpy: 2.3.3
        scipy: 1.16.2
       Cython: None
       pandas: 2.3.3
   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: libopenblas
       filepath: /mambaforge-pypy3/envs/jupyterlab/lib/libopenblasp-r0.3.30.dylib
        version: 0.3.30
threading_layer: openmp
   architecture: Haswell

       user_api: openmp
   internal_api: openmp
    num_threads: 16
         prefix: libomp
       filepath: /mambaforge-pypy3/envs/jupyterlab/lib/libomp.dylib
        version: None
```

COMMENT:
Thanks for the report. I agree that this is a bug.

Labels: Bug
Enabling array API dispatch causes pipelines to reject dataframe inputs

### Describe the bug

Enabling the array API dispatch has a negative side effect on code that usually accepts non-array inputs such as pandas dataframes:

### Steps/Code to Reproduce

```python
# %%
import os
os.environ["SCIPY_ARRAY_API"] = "1"

# %%
import sklearn
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import OneHotEncoder


adult = fetch_openml(name="adult", version=2, as_frame=True)
X, y = adult.data, adult.target

with sklearn.config_context(array_api_dispatch=True):
    OneHotEncoder().fit(
        X.select_dtypes(include=["category", "object"])
    )
```

### Expected Results

The enabling of array API should not affect the estimator behavior on dataframe inputs.

### Actual Results

```python
Traceback (most recent call last):

  Cell In[11], [line 11](vscode-notebook-cell:?execution_count=11&line=11)
    OneHotEncoder().fit(

  File ~/code/scikit-learn/sklearn/base.py:1336 in wrapper
    return fit_method(estimator, *args, **kwargs)

  File ~/code/scikit-learn/sklearn/preprocessing/_encoders.py:999 in fit
    self._fit(

  File ~/code/scikit-learn/sklearn/preprocessing/_encoders.py:86 in _fit
    X_list, n_samples, n_features = self._check_X(

  File ~/code/scikit-learn/sklearn/preprocessing/_encoders.py:69 in _check_X
    Xi = check_array(

  File ~/code/scikit-learn/sklearn/utils/validation.py:858 in check_array
    xp, is_array_api_compliant = get_namespace(array)

  File ~/code/scikit-learn/sklearn/utils/_array_api.py:404 in get_namespace
    namespace, is_array_api_compliant = array_api_compat.get_namespace(*arrays), True

  File ~/code/scikit-learn/sklearn/externals/array_api_compat/common/_helpers.py:643 in array_namespace
    raise TypeError(f"{type(x).__name__} is not a supported array type")

TypeError: Series is not a supported array type
```

### Versions

```shell
System:
    python: 3.13.7 | packaged by conda-forge | (main, Sep  3 2025, 14:24:46) [Clang 19.1.7 ]
executable: /Users/ogrisel/miniforge3/envs/dev/bin/python
   machine: macOS-15.6.1-arm64-arm-64bit-Mach-O

Python dependencies:
      sklearn: 1.9.dev0
          pip: 25.2
   setuptools: 80.9.0
        numpy: 2.3.3
        scipy: 1.16.3
       Cython: 3.1.4
       pandas: 3.0.0.dev0+2566.g2bb3fef887
   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: 10
         prefix: libopenblas
       filepath: /Users/ogrisel/miniforge3/envs/dev/lib/libopenblas.0.dylib
        version: 0.3.30
threading_layer: openmp
   architecture: VORTEX

       user_api: openmp
   internal_api: openmp
    num_threads: 10
         prefix: libomp
       filepath: /Users/ogrisel/miniforge3/envs/dev/lib/libomp.dylib
        version: None
```

COMMENT:
I encountered this when working on the 1.8 release notes. Not sure if the fix is complex or not, but if it is not, it would be great to fix to be able to better showcase new array API support in the release hightlight.

Labels: Bug, Array API
Enabling array API dispatch causes pipelines to reject dataframe inputs

### Describe the bug

Enabling the array API dispatch has a negative side effect on code that usually accepts non-array inputs such as pandas dataframes:

### Steps/Code to Reproduce

```python
# %%
import os
os.environ["SCIPY_ARRAY_API"] = "1"

# %%
import sklearn
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import OneHotEncoder


adult = fetch_openml(name="adult", version=2, as_frame=True)
X, y = adult.data, adult.target

with sklearn.config_context(array_api_dispatch=True):
    OneHotEncoder().fit(
        X.select_dtypes(include=["category", "object"])
    )
```

### Expected Results

The enabling of array API should not affect the estimator behavior on dataframe inputs.

### Actual Results

```python
Traceback (most recent call last):

  Cell In[11], [line 11](vscode-notebook-cell:?execution_count=11&line=11)
    OneHotEncoder().fit(

  File ~/code/scikit-learn/sklearn/base.py:1336 in wrapper
    return fit_method(estimator, *args, **kwargs)

  File ~/code/scikit-learn/sklearn/preprocessing/_encoders.py:999 in fit
    self._fit(

  File ~/code/scikit-learn/sklearn/preprocessing/_encoders.py:86 in _fit
    X_list, n_samples, n_features = self._check_X(

  File ~/code/scikit-learn/sklearn/preprocessing/_encoders.py:69 in _check_X
    Xi = check_array(

  File ~/code/scikit-learn/sklearn/utils/validation.py:858 in check_array
    xp, is_array_api_compliant = get_namespace(array)

  File ~/code/scikit-learn/sklearn/utils/_array_api.py:404 in get_namespace
    namespace, is_array_api_compliant = array_api_compat.get_namespace(*arrays), True

  File ~/code/scikit-learn/sklearn/externals/array_api_compat/common/_helpers.py:643 in array_namespace
    raise TypeError(f"{type(x).__name__} is not a supported array type")

TypeError: Series is not a supported array type
```

### Versions

```shell
System:
    python: 3.13.7 | packaged by conda-forge | (main, Sep  3 2025, 14:24:46) [Clang 19.1.7 ]
executable: /Users/ogrisel/miniforge3/envs/dev/bin/python
   machine: macOS-15.6.1-arm64-arm-64bit-Mach-O

Python dependencies:
      sklearn: 1.9.dev0
          pip: 25.2
   setuptools: 80.9.0
        numpy: 2.3.3
        scipy: 1.16.3
       Cython: 3.1.4
       pandas: 3.0.0.dev0+2566.g2bb3fef887
   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: 10
         prefix: libopenblas
       filepath: /Users/ogrisel/miniforge3/envs/dev/lib/libopenblas.0.dylib
        version: 0.3.30
threading_layer: openmp
   architecture: VORTEX

       user_api: openmp
   internal_api: openmp
    num_threads: 10
         prefix: libomp
       filepath: /Users/ogrisel/miniforge3/envs/dev/lib/libomp.dylib
        version: None
```

COMMENT:
I'll investigate this

Labels: Bug, Array API