Highlights
- Python 3.15 support: SHAP now builds wheels and runs tests against Python 3.15, including pre-releases. By @CloseChoice in #5143
- Migration away from Numba and llvmlite: core utilities have been migrated to nanobind/C++, allowing Numba and llvmlite to be removed as required dependencies and enabling support for free-threaded Python. By @daidahao and @CloseChoice in #5081, #5082, #5088, #5089, #5090, #5091, #5092, #5117, #5129
- GPU TreeSHAP improvements: LightGBM categorical GPU TreeSHAP support has been added, alongside TreeExplainer changes and CPU/GPU equivalence testing for categorical features. By @RAMitchell and @CloseChoice in #5020 and #5026
- Additional build targets: add Windows ARM64 and Emscripten builds. By @ndabas and @CloseChoice in #5137 and #5162
What's Changed
Breaking changes
- Match KernelExplainer DataFrame columns to the background by name. Duplicated column names now raise an error, but worked previously. By @Atishyy27 in #5164.
Fixes
- Fix int16 overflow of node indices in independent TreeSHAP, which could cause segmentation faults for trees with more than 32,767 nodes. By @clark874 in #5163
- Refactor short circuiting of tree_path_dependent SHAP calculation by @CloseChoice in #5069
- Remove outdated TensorFlow version warnings from DeepExplainer by @SushantTusharJoshi in #5126
Enhancements
- Support LightGBM categorical GPU TreeSHAP by @RAMitchell in #5020
- Use TreeEnsemble directly in TreeExplainer and add CPU/GPU equivalence tests for categorical features by @CloseChoice in #5026
- Add GPU build, packaging, CI, smoke tests, and TestPyPI support by @CloseChoice in #5057, #5058, #5114, #5123, #5127
- Move optional dependencies into dependency groups by @daidahao in #4589
- Add performance monitoring for explainers by @daidahao in #5071
- Remove Numba from the image masker by @daidahao in #5089
- Migrate clustering utilities to nanobind by @daidahao in #5088
- Migrate tabular masking utilities to nanobind by @daidahao in #5090
- Migrate ExactExplainer interaction utility to nanobind by @daidahao in #5091
- Migrate lower_credit to nanobind by @daidahao in #5081
- Migrate mask construction to nanobind by @daidahao in #5082
- Migrate masked-model output utilities to nanobind by @daidahao in #5092
- Remove Numba and llvmlite from dependencies and support free-threaded Python by @CloseChoice in #5129
- Run tests and build wheels for Python 3.15, including pre-releases, by @CloseChoice in #5143
- Add Windows ARM64 builds by @ndabas in #5137
- Add Emscripten builds by @CloseChoice in #5162
Other Changes
- Remove AppVeyor and .claude files from the build directory by @CloseChoice in #5023
- Increase test coverage for shap/maskers/_image.py by @bedupako12mas in #4519
- Document ASV performance monitoring by @daidahao in #5083
- Remove llvmlite and Numba restrictions on macOS by @CloseChoice in #5117
- Add type hints for plots._benchmark by @siddharth7113 in #5101
- Build and upload nightly wheels to scientific-python-nightly-wheels by @CloseChoice in #5136
- Skip nightly wheel builds when the default branch is unchanged by @CloseChoice in #5141
- Update actions/checkout to v7.0.1 and pin its commit SHA by @CloseChoice in #5144
- Update Dependabot configuration by @CloseChoice in #5145
- Rename master to main by @CloseChoice in #5153
- Add docstrings to exception classes in _exceptions.py by @adt-kmr in #5208
New Contributors
- @bedupako12mas made their first contribution in #4519
- @siddharth7113 made their first contribution in #5101
- @SushantTusharJoshi made their first contribution in #5126
- @ndabas made their first contribution in #5137
- @Atishyy27 made their first contribution in #5164
- @clark874 made their first contribution in #5163
- @adt-kmr made their first contribution in #5208
Full Changelog: v0.52.0...v0.53.0