Skip to content

Conversation

jeremiedbb
Copy link
Member

@jeremiedbb jeremiedbb commented Sep 3, 2025

  • Set the version number in the release branch
  • Generate the changelog in the release branch
  • Check that the wheels for the release can be built successfully
  • Merge the PR with [cd build] commit message to upload wheels to the staging repo
  • Upload the wheels and source tarball to https://test.pypi.org
  • Create tag on the main repo
  • Confirm bot detected at https://github.com/conda-forge/scikit-learn-feedstock
    and wait for merge
  • Upload the wheels and source tarball to PyPI
  • Update news and what's new date in main branch
  • Backport news and what's new date in release branch
  • Publish to https://github.com/scikit-learn/scikit-learn/releases
  • Announce on mailing list and on social media platforms (LinkedIn, Bluesky, etc.)
  • Update SECURITY.md in main branch
picks and drops

drop e70ae56 MNT Bump version to 1.8.dev0 on main (#31336)
drop 5c21794 Add array API support to median_absolute_error (#31406)
drop 88410d6 DOC Backport 1.7 changelog into the main branch (#31491)
drop 34e46b0 MNT Update SECURITY.md for 1.7.0 (#31493)
drop 1fae098 FIX: Change limits of power_t param to [0, inf) (#31474)
drop 5509d2f MNT Fix docstring of _BaseComposition (#31484)
drop d03054b FIX Remove median_absolute_error from METRICS_WITHOUT_SAMPLE_WEIGHT (#30787)
drop 6092846 ENH Improve error message in check_requires_y_none (#31481)
drop 8eabbed MAINT: remove unused local vars in mixture._gaussian_mixture.py (#31432)
drop d4d4af8 MNT Move entropy to private function (#31294)
drop 031d2f8 FIX Draw indices using sample_weight in Bagging (#31414)
drop 1e8e01f MNT remove /take bot (#31568)
drop dab0842 ENH: Make roc_curve array API compatible (#30878)
drop cccf7b4 Array API support for pairwise kernels (#29822)
drop cc526ee FEA Add array API support for GaussianMixture (#30777)
drop 0fc081a Fix _fill_or_add_to_diagonal when reshape returns copy (#31445)
drop bde701d MNT Use _add_to_diagonal in GaussianMixture (#31607)
drop 9028b51 MNT Fix typos in pairwise tests (#31651)
drop 4daff41 FIX GaussianMixture sample method to correctly handle mps (#31639)
drop f3470f8 ENH Add support for np.nan values in SplineTransformer (#28043)
drop 6ccb204 feat: support Intel GPUs in Array API testing (#31650)
drop 20b8d0b Add array API tests for pairwise_distances (#31658)
drop 0202fd3 MNT fix typo in changelog of #31414 (#31661)
drop 687e84a ENH avoid np.square(X) in enet_coordinate_descent to save memory (#31665)
drop db21513 DOC fix typo and improve whatsnew of #31665 (#31669)
drop 36ef203 ENH Add array API for PolynomialFeatures (#31580)
drop aa2131f EFF Make GaussianProcessRegressor.predict faster when return_std and return_cov are false (#31431)
drop 00763ab MNT Reduce iteration over steps in _sk_visual_block_ (#29022)
drop e9402fa ENH improve error message for string indexing on axis=0 (#31494)
drop 961afc7 MNT Avoid numpy array resize refcheck in svmlight format (#31435)
drop cfd5f78 MNT Remove built_with_meson logic (#31718)
drop 2a7c960 TST use global_random_seed in sklearn/compose/tests/test_column_transformer.py (#31720)
drop 0872e9a TST use global_random_seed in sklearn/covariance/tests/test_graphical… (#31692)
drop 953af7d TST use global_random_seed in sklearn/covariance/tests/test_covariance.py (#31734)
drop 4206d14 MNT little refactor and doc improvement for metadata routing consumes() methods (#31703)
drop aed81ed MNT Add more sample weight checks in regression metric common tests (#31726)
drop 588f396 DOC Update plots in Categorical Feature Support in GBDT example (#31062)
drop f462edd MNT Update SECURITY.md for 1.7.1 (#31782)
drop 298b03e MNT Add tags to GaussianMixture array API and precise them for PCA (#31784)
pick 919527e DOC Fix release checklist formatting (#31783)
drop 57a6704 DOC improve linear model coefficient interpretation example (#31760)
drop a048a40 MNT Remove unused utils._array_api functions (#31785)
drop a64b6b2 DOC Fix pos_label docstring in Display classes (#31696)
pick 6d2c9f2 FIX Add validation for FeatureUnion transformer outputs (#31318) (#31559)
pick ed996fa 🔒 🤖 CI Update lock files for main CI build(s) 🔒 🤖 (#31803)
pick 7e6afd9 🔒 🤖 CI Update lock files for array-api CI build(s) 🔒 🤖 (#31802)
pick cdcdde0 🔒 🤖 CI Update lock files for free-threaded CI build(s) 🔒 🤖 (#31801)
pick 5b1eb74 CI Use miniforge for wheel building [cd build] (#31793)
pick 420deba DOC Update two more reference links (#31765)
pick 13c7ce8 Update multi_class deprecation to be removed in 1.8 (#31795)
pick 30eb762 DOC fix metadata REQUESTER_DOC indentation (#31805)
pick 3843f82 Fix empty column check in ColumnTransformer to be compatible with pandas>=3 (#31807)
pick 1c1ec5b DOC: Fix assume_centered parameter documentation in EmpiricalCovariance (#31809)
drop 5464d9a CI Fix Azure install.sh bash regex match (#31813)
drop 6058580 CI Use venv rather than virtualenv (#31812)
drop a619e79 🔒 🤖 CI Update lock files for scipy-dev CI build(s) 🔒 🤖 (#31800)
drop 2ef4853 MNT Add caller name to scale input validation (#31816)
drop a1f5952 DOC improve doc for _check_n_features and _check_feature_names (#31585)
drop f6939e8 DOC Increase prominence of starting from existing issues (#31660)
pick e15920c Corrected broken link in documentation (#31818)
drop 0ca4ac2 MNT Use float64 epsilon when clipping initial probabilities in GradientBoosting (#31575)
pick d80b0c7 DOC Fix KernelPCA docstrings for transform functions to match PCA class docstrings. (#31823)
drop aa680bc TST fix check_array_api_input device check (#31814)
drop 5c4adff MNT Use context managers to safely close dataset files (#31836)
drop 4e5f636 MNT Improve _check_array_api_dispatch docstring (#31831)
drop 6037c68 MNT Remove ColumnTransformer.remainder from get_metadata_routing if remainder is not an estimator (#31826)
pick 5833812 DOC Clarify 'ovr' as the default decision function shape strategy in the SVM documentation (#29651)
drop 25aeaf3 ENH Add clip parameter to MaxAbsScaler (#31790)
drop c84c33e FIX Add input validation to _basePCA.inverse_transform (#29310)
drop 91486d6 API Replace y_pred with y_score in DetCurveDisplay and PrecisionRecallDisplay (#31764)
drop ed5f530 FIX OneVsRestClassifier to ensure that predict == argmax(decision_function) (#15504)
drop 27e5256 MNT Add _check_sample_weights to classification metrics (#31701)
drop 49af3c9 🔒 🤖 CI Update lock files for scipy-dev CI build(s) 🔒 🤖 (#31843)
drop 4622eff 🔒 🤖 CI Update lock files for free-threaded CI build(s) 🔒 🤖 (#31844)
drop a0f6714 🔒 🤖 CI Update lock files for array-api CI build(s) 🔒 🤖 (#31845)
drop 18e89a4 🔒 🤖 CI Update lock files for main CI build(s) 🔒 🤖 (#31846)
drop 4abf564 MNT Consistently use relative imports (#31817)
pick 29b379a FIX Preserve y dimensions within TransformedTargetRegressor (#31563)
drop 4b79fdf MNT refactor _rescale_data in linear models into _preprocess_data (#31418)
drop da90c58 DOC add note for **fit_params in fit_transform if not expected by fit (#31830)
drop 1fe6595 MNT Switch to absolute imports enforced by ruff (#31847)
drop af4f330 MNT Remove redundant mkdir calls (#31833)
drop 8dc7ea9 TST use global_random_seed in sklearn/linear_model/tests/test_logistic.py (#31362)
drop ae9d088 MNT Improve codespell support (and add CI) and make it fix few typos (#31027)
drop a589342 MNT Update .git-blame-ignore-revs with import change PRs (#31858)
drop 810b920 FEA D2 Brier Score (#28971)
drop 6e2d44c Merge commit from fork
drop d578de5 Merge commit from fork # empty
drop 3d35e02 TST better PassiveAggressive test against simple implementation (#31857)
drop 4d3497c DOC d2 brier score updates (#31863)
drop e8ab263 TST random seed global /svm/tests/test_svm.py (#25891)
drop 7d1d968 FEA add temperature scaling to CalibratedClassifierCV (#31068)
drop bf606a4 DOC add 2nd author to whatsnew of #31068 temperature scaling (#31868)
drop 1c1214b 🔒 🤖 CI Update lock files for scipy-dev CI build(s) 🔒 🤖 (#31875)
drop 4787aa6 🔒 🤖 CI Update lock files for free-threaded CI build(s) 🔒 🤖 (#31876)
drop e890e6b 🔒 🤖 CI Update lock files for main CI build(s) 🔒 🤖 (#31877)
drop 1ff785e ENH Array API support for confusion_matrix (#30562)
drop fe08016 ENH avoid double input validation in ElasticNet and Lasso (#31848)
drop 760edca DOC Enhance DBSCAN docstrings with clearer parameter guidance and descriptions (#31835)
pick 52d93e1 Fix requires_fit tag for stateless FeatureHasher and HashingVectorizer (#31851)
drop 4a4e5f5 Bump pypa/cibuildwheel from 3.0.0 to 3.1.2 in the actions group (#31865)
drop aa58933 Add FAQ entry about the spam label (#31822)
drop adb1ae7 DOC Add vector quantization example to KBinsDiscretizer docs (#31613)
drop b824c72 DOC Improve wording in Categorical Feature support example (#31864)
drop 1a6e34c CI First step towards moving Azure CI to GHA (#31832)
drop 52fb066 DOC: Fix typo in _HTMLDocumentationLinkMixin docstring (#31887)
drop 8525ba5 ENH speedup enet_coordinate_descent_gram (#31880)
drop 6fd23fc ENH/DOC clearer sample weight validation error msg (#31873)
drop a665c60 MNT instruct AI tools to not open pull requests in github PULL_REQUEST_TEMPLATE.md (#31643)
drop ba3e753 🔒 🤖 CI Update lock files for array-api CI build(s) 🔒 🤖 (#31878)
pick 217fe94 FIX LogisticRegression warm start with newton-cholesky solver (#31866)
drop a9a7b7d CI Add ccache for GitHub Actions (#31895)
drop 24844a0 FIX make scorer.repr work with a partial score_func (#31891)
drop f1cbccb 🔒 🤖 CI Update lock files for free-threaded CI build(s) 🔒 🤖 (#31917)
drop c786c69 🔒 🤖 CI Update lock files for scipy-dev CI build(s) 🔒 🤖 (#31916)
drop df3ae86 Move Nicolas from active maintainer to emeritus (#31921)
drop 7a26152 CI Remove conda environment cache in CUDA CI (#31900)
drop ff0d6d1 DOC Minor updates to DBSCAN clustering documentation (#31914)
drop 3adeabd DOC better internal docstring for Cython enet_coordinate_descent (#31919)
pick e887291 DOC Improve wording in Getting Started page (#31926)
drop 3c74809 DEP PassiveAggressiveClassifier and PassiveAggressiveRegressor (#29097)
drop 33a733e ENH/FIX stopping criterion for coordinate descent gap <= tol (#31906)
pick e402663 DOC Clean up Building from source instructions on macOS (#31938)
drop b265982 DOC relabel some PRs as efficiency (#31934)
drop 78301f5 TST Make test_dtype_preprocess_data pass for all global random seeds (#31935)
drop 42cbd9d TST/MNT clean up some tests in coordinate descent (#31909)
drop 6f422d8 MNT reduce test duration (#31953)
pick e099dba DOC: Fix formatting issues with bold font and backquote (#31950)
drop 4e2063d 🔒 🤖 CI Update lock files for main CI build(s) 🔒 🤖 (#31918)
drop 50ee91d 🔒 🤖 CI Update lock files for array-api CI build(s) 🔒 🤖 (#31962)
drop a4e053e 🔒 🤖 CI Update lock files for free-threaded CI build(s) 🔒 🤖 (#31961)
drop 5ff34f7 🔒 🤖 CI Update lock files for scipy-dev CI build(s) 🔒 🤖 (#31960)
drop 2831228 MNT update Cython 3.0.10 to 3.1.2 (#31905)
drop e1021ba ENH add sparse_matmul_to_dense (#31952)
drop 2883187 ENH avoid copies of X in _alpha_grid for coordinate descent (#31946)
drop 3883ba7 TST add test_multi_task_lasso_vs_skglm (#31957)
drop 092e577 CI Temporary work-around for Windows wheels on Python 3.13 (#31964)
drop 18bc6db DOC: Update a link to Cython-related code (#31967)
drop 17bf627 DOC remove custom scorer from scratch from docs (#31890)
drop 75cd236 docs: minor typos fixed (#31945)
drop 6aa5a6f DOC improved plot_semi_supervised_newsgroups.py example (#31104)
drop faf69cb TST Fix test_sparse_matmul_to_dense for all random seeds (#31983)
pick b10b73a Fix uncomparable values in SimpleImputer tie-breaking strategy (#31820)
drop 866fef1 MNT DNPY_NO_DEPRECATED_API=NPY_1_22_API_VERSION and security fixes (#31984)
drop 884e512 CI Work around loky windows 3.13.7 for free threaded wheel (#31982)
drop 492e1ec ENH add gap safe screening rules to enet_coordinate_descent (#31882)
drop d5715fb ENH use np.cumsum instead of stable_cumsum in kmeans++ (#31991)
drop f19ff9c Make the test suite itself thread-safe to be able to detect thread-safety problems with or without free-threading (#30041)
drop 450cb20 ENH use xp.cumulative_sum and xp.searchsorted directly instead of stable_cumsum (#31994)
drop 7cc4581 DOC: Correct punctuation typos in Model Evaluation Section (#32001)
drop f2cd677 MNT bump array-api-extra to v0.8.0 (#31993)
drop d8ba1de MNT Avoid DeprecationWarning in numpy-dev (#32010)
drop e2402d1 🔒 🤖 CI Update lock files for free-threaded CI build(s) 🔒 🤖 (#32007)
drop cd82ba3 🔒 🤖 CI Update lock files for array-api CI build(s) 🔒 🤖 (#32008)
drop dea1c1b 🔒 🤖 CI Update lock files for scipy-dev CI build(s) 🔒 🤖 (#32006)
drop e6f5ac5 🔒 🤖 CI Update lock files for main CI build(s) 🔒 🤖 (#32009)
drop 74142b3 ENH use np.cumsum directly instead of stable_cumsum in AdaBoost (#31995)
drop a86b32d ENH use np.cumsum directly instead of stable_cumsum for LLE (#31996)
drop 969df01 Customized dir method to recognize available_if decorator (#31928)
drop 872be3c DOC Fix rst substitution casing in README.rst (#32015)
drop 48cba5a FEA Make standard scaler compatible to Array API (#27113)
pick 726ed18 CI Add Python 3.14 nightly wheels (#32012)
drop 56da56f DOC Add reference links to Bayesian Regression (#32016)
drop 5736956 CI add codecov to GitHub Action workflow (#31941)
drop 00acd12 ENH speedup coordinate descent by avoiding calls to axpy in innermost loop (#31956)
drop ef4885f MNT np.nan_to_num -> xpx.nan_to_num (#32033)
drop 2bcfd2e DOC Add TargetEncoder to Categorical Feature Support example (#32019)
drop 0eba4d4 MNT fix typo and internal documentation in LinearModelLoss and Newton solver (#32039)
drop 2e4e40b DOC Build website with a Scikit-learn logo that is complete - not cropped (#32017)
drop 98f9eec MNT Add changelog README and PR checklist to PR template (#32038)
drop 1a783c9 DOC Use un-cropped image for thumbnails (#32037)
drop 59c4b7a CI Use pytest-xdist in debian 32 build (#32031)
drop b5c5130 MNT remove PA_C from SGD and (re-) use eta0 (#31932)
drop 285883c FIX make sure _PassthroughScorer works with meta-estimators (#31898)
drop db3e21b 🔒 🤖 CI Update lock files for scipy-dev CI build(s) 🔒 🤖 (#32063)
drop b7b8dd7 🔒 🤖 CI Update lock files for array-api CI build(s) 🔒 🤖 (#32065)
drop de0e21e 🔒 🤖 CI Update lock files for free-threaded CI build(s) 🔒 🤖 (#32064)
drop 6d233b9 🔒 🤖 CI Update lock files for main CI build(s) 🔒 🤖 (#32066)
drop 6c86237 TST Add option to use strict xfail mode in parametrize_with_checks (#31951)
drop 8a12e07 MAINT remove useless np.abs in test (#32069)
drop f2d793b MNT Improve metadata routing warning message (#32070)
drop 0c984ae CI Revert Python 3.13.7 work arounds in wheels (#32068)
drop 42b6fc8 MNT Remove xfail now that array-api-strict >2.3.1 (#32052)
drop e3b383a MNT remove the steps attribute from _BaseComposition (#32040)
drop ed0a98a CI Run free-threaded test suite with pytest-run-parallel (#32023)
drop 96f48da MRG Add Warning for NaNs in Yeo-Johnson Inverse Transform with Extremely Skewed Data (#29307)
drop c7866e6 TST fix platform sensitive test: test_float_precision (#32035)
drop b138521 CI Add Python 3.14 free-threaded wheels (#32079)
drop 30b98cd DOC improve docstring of LogisticRegression and LogisticRegressionCV (#32059)
drop 90338a4 MNT Mark cython extensions as free-threaded compatible (#31342)
drop 3edc4d6 ENH Add a link + tooltip to each parameter docstring in params table display (#31564)
drop 835355a DOC review comments for LogisticRegressionCV docstrings (#32082)
drop 6488763 DOC Note that changelog entries should contain a single bullet (#32085)
drop 4976c12 DOC Fix changelog entry (#32084)
drop ad04078 MNT Avoid pytest warnings when pytest-run-parallel is not installed (#32088)

jeremiedbb and others added 24 commits September 3, 2025 12:13
…#31318) (scikit-learn#31559)

Co-authored-by: Jérémie du Boisberranger <jeremie@probabl.ai>
…das>=3 (scikit-learn#31807)

Co-authored-by: Jérémie du Boisberranger <jeremie@probabl.ai>
Co-authored-by: Tim Head <betatim@gmail.com>
…ce (scikit-learn#31809)

Co-authored-by: Krishnan Vignesh <krishnanvignesh@Krishnans-MacBook-Air.local>
Co-authored-by: Jérémie du Boisberranger <jeremie@probabl.ai>
Co-authored-by: Thomas J. Fan <thomasjpfan@gmail.com>
…earn#31563)

Co-authored-by: Jérémie du Boisberranger <jeremie@probabl.ai>
scikit-learn#31851)

Co-authored-by: Jérémie du Boisberranger <jeremie@probabl.ai>
Co-authored-by: ArturoAmorQ <arturo.amor-quiroz@polytechnique.edu>
…t-learn#31820)

Co-authored-by: Jérémie du Boisberranger <jeremie@probabl.ai>
Co-authored-by: Tim Head <betatim@gmail.com>
@lesteve
Copy link
Member

lesteve commented Sep 3, 2025

I am wondering whether it would be worth having Python 3.14 wheels for 1.7.2. The main motivation is that they will be ready when Python 3.14 is released (beginning October). Otherwise, users will have to wait until 1.8 (so 1-2 months roughly) and we may get some user complaints 😅. numpy and scipy latest release (released end July) have Python 3.14 wheels. There may only be this PR to backport #32012. I checked and git cherry-pick 726ed184ed8 seems to apply cleanly on top of this branch (which doesn't necessarily mean that the CI will be green 😉).

Of course the alternative is to tell users to use our development wheels and wait until scikit-learn 1.8.

Python 3.14 free-threaded wheels seems more work, so maybe not worth it. There would probably be a few PRs to back-port (some of them touching a number of files which increase the likelihood of conflicts): #30041 #32023 #32079 #31342. Not sure if there is less painful way.

@jeremiedbb
Copy link
Member Author

jeremiedbb commented Sep 3, 2025

@lesteve, I tried to cherry-pick the Python 3.14 wheels PR but it's incompatible with the "upper bound the build dependencies in the maintenance branch" policy that we started doing in 1.7, see #31335 (comment)

scipy wheels for py3.14 are available since 1.16.1 but the upper bound on scipy in 1.7.X is <1.16.0.

Something that is not clear to me about that policy is if upper bounds should be updated at each bug fix release or kept as is during the whole lifetime of the maintenance branch. I guess that if I bump the upper bounds and the CI is still green it's fine, no ?

also ping @ogrisel, what do you think ?

@lesteve
Copy link
Member

lesteve commented Sep 4, 2025

Hmmm 🤔.

FWIW I think scipy pins to a future release (I seem to remember something like +3 versions) for example the scipy 1.6 branch has numpy<2.6 see https://github.com/scipy/scipy/blob/05e0827ec6a679cafc07d070551fe86dfcf77716/pyproject.toml#L41.

scipy 1.6.0 was released 22 June 2025. https://pypi.org/project/scipy/#history. At the time it was numpy 2.3.x (numpy 2.3.0 was released 7 June 2025 https://pypi.org/project/numpy/#history).

@jeremiedbb
Copy link
Member Author

for example the scipy 1.6 branch has numpy<2.6

Ah, they are in contradiction against their own policy then 😄 At the top of the pyproject.toml file they wrote

# Note that in maintenance branches, all build dependencies should
# have an upper bound equal to the most recent already-released version
# of the dependency. This to prevent that a future backwards-incompatible
# release will break the source build of a SciPy release.
# Do accept micro (bug-fix) releases.

@ogrisel
Copy link
Member

ogrisel commented Sep 4, 2025

I guess that if I bump the upper bounds and the CI is still green it's fine, no ?

I think this is fine to bump during bugfix releases. I actually that's helpful to do so, even if not needed to extend the range "known to work together" combinations of software versions as much as possible.

@jeremiedbb
Copy link
Member Author

I actually that's helpful to do so, even if not needed to extend the range "known to work together" combinations of software versions as much as possible.

I'll update the maintainers check list to also do it during bug-fix releases

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.