⚠️ CI failed on Wheel builder (last failure: Dec 26, 2025) ⚠️

**CI is still failing on [Wheel builder](https://github.com/scikit-learn/scikit-learn/actions/runs/20515594700)** (Dec 26, 2025)

COMMENT:
Yet another one on Windows arm `cp314t` [build log](https://github.com/scikit-learn/scikit-learn/actions/runs/18672241096/job/53235474249)
This is actually not an arm-specific thing (but Windows free-threaded specific) and was seen previously in our CI see https://github.com/scikit-learn/scikit-learn/issues/30810. This seems to be a CPython bug https://github.com/python/cpython/issues/130733 that happens on Windows free-threaded actually.

This is a test failure with:
```
ValueError: concurrent send_bytes() calls are not supported
```

<details>

```
  ____ test_random_seeds_warm_start[int-HistGradientBoostingRegressor-X1-y1] ____
  
  GradientBoosting = <class 'sklearn.ensemble._hist_gradient_boosting.gradient_boosting.HistGradientBoostingRegressor'>
  X = array([[-1.5415874 ,  0.22739278, -1.35338886, ...,  0.86727663,
           0.40520408, -0.06964158],
         [-1.0212540...
         [ 1.83708069, -0.00296475,  1.80144921, ...,  0.11230769,
           0.33109242,  1.51848293]], shape=(100, 100))
  y = array([ 5.89981499e+01, -1.51472301e+02,  3.92774675e+00,  1.30275835e+02,
          2.04728060e+00,  1.01587138e+02, -1...4499e+02,  1.17344962e+02,  5.81688314e+01,
         -7.85896400e+01,  1.59876618e+01, -2.50470392e+02, -2.19074129e+02])
  rng_type = 'int'
  
      @pytest.mark.parametrize(
          "GradientBoosting, X, y",
          [
              (HistGradientBoostingClassifier, X_classification, y_classification),
              (HistGradientBoostingRegressor, X_regression, y_regression),
          ],
      )
      @pytest.mark.parametrize("rng_type", ("none", "int", "instance"))
      def test_random_seeds_warm_start(GradientBoosting, X, y, rng_type):
          # Make sure the seeds for train/val split and small trainset subsampling
          # are correctly set in a warm start context.
          def _get_rng(rng_type):
              # Helper to avoid consuming rngs
              if rng_type == "none":
                  return None
              elif rng_type == "int":
                  return 42
              else:
                  return np.random.RandomState(0)
      
          random_state = _get_rng(rng_type)
          gb_1 = GradientBoosting(early_stopping=True, max_iter=2, random_state=random_state)
          gb_1.set_params(scoring=check_scoring(gb_1))
  >       gb_1.fit(X, y)
  
  ..\venv-test\Lib\site-packages\sklearn\ensemble\_hist_gradient_boosting\tests\test_warm_start.py:202: 
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ..\venv-test\Lib\site-packages\sklearn\base.py:1336: in wrapper
      return fit_method(estimator, *args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ..\venv-test\Lib\site-packages\sklearn\ensemble\_hist_gradient_boosting\gradient_boosting.py:722: in fit
      X_binned_train = self._bin_data(X_train, is_training_data=True)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ..\venv-test\Lib\site-packages\sklearn\ensemble\_hist_gradient_boosting\gradient_boosting.py:1237: in _bin_data
      X_binned = self._bin_mapper.fit_transform(X)  # F-aligned array
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ..\venv-test\Lib\site-packages\sklearn\utils\_set_output.py:316: in wrapped
      data_to_wrap = f(self, X, *args, **kwargs)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ..\venv-test\Lib\site-packages\sklearn\base.py:907: in fit_transform
      return self.fit(X, **fit_params).transform(X)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  ..\venv-test\Lib\site-packages\sklearn\ensemble\_hist_gradient_boosting\binning.py:240: in fit
      non_cat_thresholds = Parallel(n_jobs=self.n_threads, backend="threading")(
  ..\venv-test\Lib\site-packages\sklearn\utils\parallel.py:91: in __call__
      return super().__call__(iterable_with_config_and_warning_filters)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ..\venv-test\Lib\site-packages\joblib\parallel.py:2072: in __call__
      return output if self.return_generator else list(output)
                                                  ^^^^^^^^^^^^
  ..\venv-test\Lib\site-packages\joblib\parallel.py:1741: in _get_outputs
      self._terminate_and_reset()
  ..\venv-test\Lib\site-packages\joblib\parallel.py:1408: in _terminate_and_reset
      self._backend.terminate()
  ..\venv-test\Lib\site-packages\joblib\_parallel_backends.py:326: in terminate
      self._pool.close()
  ..\..\..\..\pypa\cibuildwheel\Cache\nuget-cpython\pythonarm64-freethreaded.3.14.0\tools\Lib\multiprocessing\pool.py:652: in close
      self._change_notifier.put(None)
  ..\..\..\..\pypa\cibuildwheel\Cache\nuget-cpython\pythonarm64-freethreaded.3.14.0\tools\Lib\multiprocessing\queues.py:394: in put
      self._writer.send_bytes(obj)
  ..\..\..\..\pypa\cibuildwheel\Cache\nuget-cpython\pythonarm64-freethreaded.3.14.0\tools\Lib\multiprocessing\connection.py:206: in send_bytes
      self._send_bytes(m[offset:offset + size])
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  
  self = <multiprocessing.connection.PipeConnection object at 0x00000596E89960C0>
  buf = <memory at 0x00000596F4E32040>
  
      def _send_bytes(self, buf):
          if self._send_ov is not None:
              # A connection should only be used by a single thread
  >           raise ValueError("concurrent send_bytes() calls "
                               "are not supported")
  E           ValueError: concurrent send_bytes() calls are not supported
  
  ..\..\..\..\pypa\cibuildwheel\Cache\nuget-cpython\pythonarm64-freethreaded.3.14.0\tools\Lib\multiprocessing\connection.py:293: ValueError
```

</details>

Labels: Bug